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/03/30 11:38:35 UTC

[01/30] incubator-weex git commit: * [android] make weex sdk depends on a new weexv8 which depends on the * library v8uc.

Repository: incubator-weex
Updated Branches:
  refs/heads/0.12-dev 80df1aae2 -> ba19f5522


* [android] make weex sdk depends on a new weexv8 which depends on the
* library v8uc.


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

Branch: refs/heads/0.12-dev
Commit: 64f328284c4b62e179609899f33622ba8cc69180
Parents: e4e6355
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Wed Mar 1 14:19:42 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 13:36:12 2017 +0800

----------------------------------------------------------------------
 android/playground/app/build.gradle             |   3 ++-
 android/playground/app/libs/armeabi/libv8uc.so  | Bin 0 -> 4501896 bytes
 android/sdk/libs/armeabi/libweexv8.so           | Bin 3583820 -> 120132 bytes
 .../main/java/com/taobao/weex/WXSDKManager.java |   1 +
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   3 ++-
 5 files changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/64f32828/android/playground/app/build.gradle
----------------------------------------------------------------------
diff --git a/android/playground/app/build.gradle b/android/playground/app/build.gradle
index b7bb87b..1007dc5 100755
--- a/android/playground/app/build.gradle
+++ b/android/playground/app/build.gradle
@@ -45,6 +45,7 @@ android {
     }
     sourceSets {
         main {
+            jniLibs.srcDir(['libs'])
             java {
                 srcDirs = ["src/main/java", "src/main/java_zxing"];
             }
@@ -110,4 +111,4 @@ dependencies {
     compile 'com.taobao.android.weex_inspection:urlconnection_interceptor:1.0.0'
     compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'
     compile 'com.taobao.android:weex_inspector:0.10.0.5@aar'
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/64f32828/android/playground/app/libs/armeabi/libv8uc.so
----------------------------------------------------------------------
diff --git a/android/playground/app/libs/armeabi/libv8uc.so b/android/playground/app/libs/armeabi/libv8uc.so
new file mode 100755
index 0000000..eeafbf7
Binary files /dev/null and b/android/playground/app/libs/armeabi/libv8uc.so differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/64f32828/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
index 97630e0..80305f5 100755
Binary files a/android/sdk/libs/armeabi/libweexv8.so and b/android/sdk/libs/armeabi/libweexv8.so differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/64f32828/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index bee15e6..e7de867 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -407,6 +407,7 @@ public class WXSDKManager {
   public void notifyTrimMemory() {
     mBridgeManager.notifyTrimMemory();
   }
+
   public @Nullable
   IWebSocketAdapter getIWXWebSocketAdapter() {
     if (mIWebSocketAdapterFactory != null) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/64f32828/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index b64dd35..9a8583a 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -250,7 +250,8 @@ public class WXSoInstallMgrSdk {
   private final static String ARMEABI = "armeabi"; //default
   private final static String X86 = "x86";
   private final static String MIPS = "mips";
-  private final static int ARMEABI_Size = 3542844;
+  //private final static int ARMEABI_Size = 3542844;
+  private final static int ARMEABI_Size = 120132;
   private final static int X86_Size = 4451068;
 
   static Context mContext = null;


[16/30] incubator-weex git commit: * [android] fix * https://aone.alibaba-inc.com/project/469098/issue/10392126

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f07e6f7b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index f6d2e9e..6515c41 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -252,8 +252,8 @@ public class WXSoInstallMgrSdk {
   private final static String ARMEABI = "armeabi"; //default
   private final static String X86 = "x86";
   private final static String MIPS = "mips";
-  private final static int ARMEABI_Size = 3645300;
-  //private final static int ARMEABI_Size = 120132;
+  private final static int ARMEABI_Size = 3645308;
+  //private final static int ARMEABI_Size = 124232;
   private final static int X86_Size = 4451068;
 
   static Context mContext = null;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f07e6f7b/html5/frameworks/legacy/static/life.js
----------------------------------------------------------------------
diff --git a/html5/frameworks/legacy/static/life.js b/html5/frameworks/legacy/static/life.js
index 8e9d9bb..931ba2e 100644
--- a/html5/frameworks/legacy/static/life.js
+++ b/html5/frameworks/legacy/static/life.js
@@ -42,6 +42,9 @@ export function refreshInstance (id, data) {
  * @param  {string} id
  */
 export function destroyInstance (id) {
+  // Markup some global state in natie side
+  markupState()
+
   resetTarget()
   const instance = instanceMap[id]
   /* istanbul ignore else */
@@ -50,5 +53,19 @@ export function destroyInstance (id) {
   }
   destroy(instance)
   delete instanceMap[id]
+  // notifyContextDisposed is used to tell v8 to do a full GC,
+  // but this would have a negative performance impact on weex,
+  // because all the inline cache in v8 would get cleared
+  // during a full GC.
+  // To take care of both memory and performance, just tell v8
+  // to do a full GC every eighteen times.
+  const idNum = Math.round(id)
+  const round = 18
+  if (idNum > 0) {
+    const remainder = idNum % round
+    if (!remainder) {
+      notifyTrimMemory()
+    }
+  }
   return instanceMap
 }


[25/30] incubator-weex git commit: Merge branch '0.12-dev' of https://github.com/apache/incubator-weex into 0.12-dev

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

Branch: refs/heads/0.12-dev
Commit: 4e3cf15fd67192af0188902c8684d9667d3c164c
Parents: aaacf3a d81b16a
Author: zshshr <zh...@gmail.com>
Authored: Thu Mar 23 12:00:06 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Mar 23 12:00:06 2017 +0800

----------------------------------------------------------------------
 .../java/com/taobao/weex/ui/component/NestedContainer.java     | 2 ++
 .../src/main/java/com/taobao/weex/ui/component/WXEmbed.java    | 6 ++++++
 2 files changed, 8 insertions(+)
----------------------------------------------------------------------



[09/30] incubator-weex git commit: * [android] make the app playground to use v8 code cache.

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/websocket-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/websocket-demo.js b/android/playground/app/src/main/assets/module/websocket-demo.js
new file mode 100644
index 0000000..ffc56d5
--- /dev/null
+++ b/android/playground/app/src/main/assets/module/websocket-demo.js
@@ -0,0 +1,2417 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "64b954b29134bc939e901ff8f26a1ada"
+ * }
+ !*/
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(226)
+	var __weex_style__ = __webpack_require__(227)
+	var __weex_script__ = __webpack_require__(228)
+
+	__weex_define__('@weex-component/f1edaa994f4c5a505cfb7f32ca9ee569', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/f1edaa994f4c5a505cfb7f32ca9ee569',undefined,undefined)
+
+/***/ },
+/* 1 */,
+/* 2 */,
+/* 3 */,
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(5);
+	__webpack_require__(9);
+	__webpack_require__(13);
+	__webpack_require__(17);
+	__webpack_require__(21);
+	__webpack_require__(25);
+	__webpack_require__(66);
+	__webpack_require__(70);
+	__webpack_require__(74);
+	__webpack_require__(78);
+	__webpack_require__(79);
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(6)
+	var __weex_style__ = __webpack_require__(7)
+	var __weex_script__ = __webpack_require__(8)
+
+	__weex_define__('@weex-component/wxc-button', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['btn', 'btn-' + (this.type), 'btn-sz-' + (this.size)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['btn-txt', 'btn-txt-' + (this.type), 'btn-txt-sz-' + (this.size)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 7 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    size: 'large',
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(10)
+	var __weex_style__ = __webpack_require__(11)
+	var __weex_script__ = __webpack_require__(12)
+
+	__weex_define__('@weex-component/wxc-hn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['h' + (this.level)]},
+	  "style": {
+	    "justifyContent": "center"
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['txt-h' + (this.level)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 11 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "h1": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h2": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h3": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "txt-h1": {
+	    "fontSize": 70
+	  },
+	  "txt-h2": {
+	    "fontSize": 52
+	  },
+	  "txt-h3": {
+	    "fontSize": 42
+	  }
+	}
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    level: 1,
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(14)
+	var __weex_style__ = __webpack_require__(15)
+	var __weex_script__ = __webpack_require__(16)
+
+	__weex_define__('@weex-component/wxc-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "item"
+	  ],
+	  "events": {
+	    "touchstart": "touchstart",
+	    "touchend": "touchend"
+	  },
+	  "style": {
+	    "backgroundColor": function () {return this.bgColor}
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd"
+	  }
+	}
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    bgColor: '#ffffff'
+	  }},
+	  methods: {
+	    touchstart: function touchstart() {},
+	    touchend: function touchend() {}
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(18)
+	var __weex_style__ = __webpack_require__(19)
+	var __weex_script__ = __webpack_require__(20)
+
+	__weex_define__('@weex-component/wxc-panel', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['panel', 'panel-' + (this.type)]},
+	  "style": {
+	    "borderWidth": function () {return this.border}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['panel-header', 'panel-header-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingHead},
+	        "paddingBottom": function () {return this.paddingHead},
+	        "paddingLeft": function () {return this.paddingHead*1.5},
+	        "paddingRight": function () {return this.paddingHead*1.5}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": function () {return ['panel-body', 'panel-body-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingBody},
+	        "paddingBottom": function () {return this.paddingBody},
+	        "paddingLeft": function () {return this.paddingBody*1.5},
+	        "paddingRight": function () {return this.paddingBody*1.5}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 19 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    title: '',
+	    paddingBody: 20,
+	    paddingHead: 20,
+	    dataClass: '',
+	    border: 0
+	  }},
+	  ready: function ready() {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(22)
+	var __weex_style__ = __webpack_require__(23)
+	var __weex_script__ = __webpack_require__(24)
+
+	__weex_define__('@weex-component/wxc-tip', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['tip', 'tip-' + (this.type)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['tip-txt', 'tip-txt-' + (this.type)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+/* 24 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'success',
+	    value: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(26)
+	var __weex_style__ = __webpack_require__(27)
+	var __weex_script__ = __webpack_require__(28)
+
+	__weex_define__('@weex-component/wxc-countdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "overflow": "hidden",
+	    "flexDirection": "row"
+	  },
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden"
+	  }
+	}
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var _assign = __webpack_require__(29);
+
+	var _assign2 = _interopRequireDefault(_assign);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	    data: function () {return {
+	        now: 0,
+	        remain: 0,
+	        time: {
+	            elapse: 0,
+	            D: '0',
+	            DD: '0',
+	            h: '0',
+	            hh: '00',
+	            H: '0',
+	            HH: '0',
+	            m: '0',
+	            mm: '00',
+	            M: '0',
+	            MM: '0',
+	            s: '0',
+	            ss: '00',
+	            S: '0',
+	            SS: '0'
+	        },
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.remain <= 0) {
+	            return;
+	        }
+
+	        this.now = Date.now();
+	        this.nextTick();
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            if (this.outofview) {
+	                setTimeout(this.nextTick.bind(this), 1000);
+	            } else {
+	                this.time.elapse = parseInt((Date.now() - this.now) / 1000);
+
+	                if (this.calc()) {
+	                    this.$emit('tick', (0, _assign2.default)({}, this.time));
+	                    setTimeout(this.nextTick.bind(this), 1000);
+	                } else {
+	                    this.$emit('alarm', (0, _assign2.default)({}, this.time));
+	                }
+	                this._app.updateActions();
+	            }
+	        },
+	        format: function format(str) {
+	            if (str.length >= 2) {
+	                return str;
+	            } else {
+	                return '0' + str;
+	            }
+	        },
+	        calc: function calc() {
+	            var remain = this.remain - this.time.elapse;
+	            if (remain < 0) {
+	                remain = 0;
+	            }
+	            this.time.D = String(parseInt(remain / 86400));
+	            this.time.DD = this.format(this.time.D);
+	            this.time.h = String(parseInt((remain - parseInt(this.time.D) * 86400) / 3600));
+	            this.time.hh = this.format(this.time.h);
+	            this.time.H = String(parseInt(remain / 3600));
+	            this.time.HH = this.format(this.time.H);
+	            this.time.m = String(parseInt((remain - parseInt(this.time.H) * 3600) / 60));
+	            this.time.mm = this.format(this.time.m);
+	            this.time.M = String(parseInt(remain / 60));
+	            this.time.MM = this.format(this.time.M);
+	            this.time.s = String(remain - parseInt(this.time.M) * 60);
+	            this.time.ss = this.format(this.time.s);
+	            this.time.S = String(remain);
+	            this.time.SS = this.format(this.time.S);
+
+	            return remain > 0;
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(30), __esModule: true };
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(31);
+	module.exports = __webpack_require__(34).Object.assign;
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.3.1 Object.assign(target, source)
+	var $export = __webpack_require__(32);
+
+	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(47)});
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global    = __webpack_require__(33)
+	  , core      = __webpack_require__(34)
+	  , ctx       = __webpack_require__(35)
+	  , hide      = __webpack_require__(37)
+	  , PROTOTYPE = 'prototype';
+
+	var $export = function(type, name, source){
+	  var IS_FORCED = type & $export.F
+	    , IS_GLOBAL = type & $export.G
+	    , IS_STATIC = type & $export.S
+	    , IS_PROTO  = type & $export.P
+	    , IS_BIND   = type & $export.B
+	    , IS_WRAP   = type & $export.W
+	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+	    , expProto  = exports[PROTOTYPE]
+	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+	    , key, own, out;
+	  if(IS_GLOBAL)source = name;
+	  for(key in source){
+	    // contains in native
+	    own = !IS_FORCED && target && target[key] !== undefined;
+	    if(own && key in exports)continue;
+	    // export native or passed
+	    out = own ? target[key] : source[key];
+	    // prevent global pollution for namespaces
+	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+	    // bind timers to global for call from export context
+	    : IS_BIND && own ? ctx(out, global)
+	    // wrap global constructors for prevent change them in library
+	    : IS_WRAP && target[key] == out ? (function(C){
+	      var F = function(a, b, c){
+	        if(this instanceof C){
+	          switch(arguments.length){
+	            case 0: return new C;
+	            case 1: return new C(a);
+	            case 2: return new C(a, b);
+	          } return new C(a, b, c);
+	        } return C.apply(this, arguments);
+	      };
+	      F[PROTOTYPE] = C[PROTOTYPE];
+	      return F;
+	    // make static versions for prototype methods
+	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+	    if(IS_PROTO){
+	      (exports.virtual || (exports.virtual = {}))[key] = out;
+	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+	    }
+	  }
+	};
+	// type bitmap
+	$export.F = 1;   // forced
+	$export.G = 2;   // global
+	$export.S = 4;   // static
+	$export.P = 8;   // proto
+	$export.B = 16;  // bind
+	$export.W = 32;  // wrap
+	$export.U = 64;  // safe
+	$export.R = 128; // real proto method for `library` 
+	module.exports = $export;
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+	var global = module.exports = typeof window != 'undefined' && window.Math == Math
+	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// optional / simple context binding
+	var aFunction = __webpack_require__(36);
+	module.exports = function(fn, that, length){
+	  aFunction(fn);
+	  if(that === undefined)return fn;
+	  switch(length){
+	    case 1: return function(a){
+	      return fn.call(that, a);
+	    };
+	    case 2: return function(a, b){
+	      return fn.call(that, a, b);
+	    };
+	    case 3: return function(a, b, c){
+	      return fn.call(that, a, b, c);
+	    };
+	  }
+	  return function(/* ...args */){
+	    return fn.apply(that, arguments);
+	  };
+	};
+
+/***/ },
+/* 36 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+	  return it;
+	};
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP         = __webpack_require__(38)
+	  , createDesc = __webpack_require__(46);
+	module.exports = __webpack_require__(42) ? function(object, key, value){
+	  return dP.f(object, key, createDesc(1, value));
+	} : function(object, key, value){
+	  object[key] = value;
+	  return object;
+	};
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject       = __webpack_require__(39)
+	  , IE8_DOM_DEFINE = __webpack_require__(41)
+	  , toPrimitive    = __webpack_require__(45)
+	  , dP             = Object.defineProperty;
+
+	exports.f = __webpack_require__(42) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+	  anObject(O);
+	  P = toPrimitive(P, true);
+	  anObject(Attributes);
+	  if(IE8_DOM_DEFINE)try {
+	    return dP(O, P, Attributes);
+	  } catch(e){ /* empty */ }
+	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+	  if('value' in Attributes)O[P] = Attributes.value;
+	  return O;
+	};
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40);
+	module.exports = function(it){
+	  if(!isObject(it))throw TypeError(it + ' is not an object!');
+	  return it;
+	};
+
+/***/ },
+/* 40 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  return typeof it === 'object' ? it !== null : typeof it === 'function';
+	};
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = !__webpack_require__(42) && !__webpack_require__(43)(function(){
+	  return Object.defineProperty(__webpack_require__(44)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Thank's IE8 for his funny defineProperty
+	module.exports = !__webpack_require__(43)(function(){
+	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 43 */
+/***/ function(module, exports) {
+
+	module.exports = function(exec){
+	  try {
+	    return !!exec();
+	  } catch(e){
+	    return true;
+	  }
+	};
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40)
+	  , document = __webpack_require__(33).document
+	  // in old IE typeof document.createElement is 'object'
+	  , is = isObject(document) && isObject(document.createElement);
+	module.exports = function(it){
+	  return is ? document.createElement(it) : {};
+	};
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.1 ToPrimitive(input [, PreferredType])
+	var isObject = __webpack_require__(40);
+	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+	// and the second argument - flag - preferred type is a string
+	module.exports = function(it, S){
+	  if(!isObject(it))return it;
+	  var fn, val;
+	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  throw TypeError("Can't convert object to primitive value");
+	};
+
+/***/ },
+/* 46 */
+/***/ function(module, exports) {
+
+	module.exports = function(bitmap, value){
+	  return {
+	    enumerable  : !(bitmap & 1),
+	    configurable: !(bitmap & 2),
+	    writable    : !(bitmap & 4),
+	    value       : value
+	  };
+	};
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	// 19.1.2.1 Object.assign(target, source, ...)
+	var getKeys  = __webpack_require__(48)
+	  , gOPS     = __webpack_require__(63)
+	  , pIE      = __webpack_require__(64)
+	  , toObject = __webpack_require__(65)
+	  , IObject  = __webpack_require__(52)
+	  , $assign  = Object.assign;
+
+	// should work with symbols and should have deterministic property order (V8 bug)
+	module.exports = !$assign || __webpack_require__(43)(function(){
+	  var A = {}
+	    , B = {}
+	    , S = Symbol()
+	    , K = 'abcdefghijklmnopqrst';
+	  A[S] = 7;
+	  K.split('').forEach(function(k){ B[k] = k; });
+	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+	  var T     = toObject(target)
+	    , aLen  = arguments.length
+	    , index = 1
+	    , getSymbols = gOPS.f
+	    , isEnum     = pIE.f;
+	  while(aLen > index){
+	    var S      = IObject(arguments[index++])
+	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+	      , length = keys.length
+	      , j      = 0
+	      , key;
+	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+	  } return T;
+	} : $assign;
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+	var $keys       = __webpack_require__(49)
+	  , enumBugKeys = __webpack_require__(62);
+
+	module.exports = Object.keys || function keys(O){
+	  return $keys(O, enumBugKeys);
+	};
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var has          = __webpack_require__(50)
+	  , toIObject    = __webpack_require__(51)
+	  , arrayIndexOf = __webpack_require__(55)(false)
+	  , IE_PROTO     = __webpack_require__(59)('IE_PROTO');
+
+	module.exports = function(object, names){
+	  var O      = toIObject(object)
+	    , i      = 0
+	    , result = []
+	    , key;
+	  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+	  // Don't enum bug & hidden keys
+	  while(names.length > i)if(has(O, key = names[i++])){
+	    ~arrayIndexOf(result, key) || result.push(key);
+	  }
+	  return result;
+	};
+
+/***/ },
+/* 50 */
+/***/ function(module, exports) {
+
+	var hasOwnProperty = {}.hasOwnProperty;
+	module.exports = function(it, key){
+	  return hasOwnProperty.call(it, key);
+	};
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// to indexed object, toObject with fallback for non-array-like ES3 strings
+	var IObject = __webpack_require__(52)
+	  , defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return IObject(defined(it));
+	};
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// fallback for non-array-like ES3 and non-enumerable old V8 strings
+	var cof = __webpack_require__(53);
+	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+	  return cof(it) == 'String' ? it.split('') : Object(it);
+	};
+
+/***/ },
+/* 53 */
+/***/ function(module, exports) {
+
+	var toString = {}.toString;
+
+	module.exports = function(it){
+	  return toString.call(it).slice(8, -1);
+	};
+
+/***/ },
+/* 54 */
+/***/ function(module, exports) {
+
+	// 7.2.1 RequireObjectCoercible(argument)
+	module.exports = function(it){
+	  if(it == undefined)throw TypeError("Can't call method on  " + it);
+	  return it;
+	};
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// false -> Array#indexOf
+	// true  -> Array#includes
+	var toIObject = __webpack_require__(51)
+	  , toLength  = __webpack_require__(56)
+	  , toIndex   = __webpack_require__(58);
+	module.exports = function(IS_INCLUDES){
+	  return function($this, el, fromIndex){
+	    var O      = toIObject($this)
+	      , length = toLength(O.length)
+	      , index  = toIndex(fromIndex, length)
+	      , value;
+	    // Array#includes uses SameValueZero equality algorithm
+	    if(IS_INCLUDES && el != el)while(length > index){
+	      value = O[index++];
+	      if(value != value)return true;
+	    // Array#toIndex ignores holes, Array#includes - not
+	    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+	      if(O[index] === el)return IS_INCLUDES || index || 0;
+	    } return !IS_INCLUDES && -1;
+	  };
+	};
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.15 ToLength
+	var toInteger = __webpack_require__(57)
+	  , min       = Math.min;
+	module.exports = function(it){
+	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+	};
+
+/***/ },
+/* 57 */
+/***/ function(module, exports) {
+
+	// 7.1.4 ToInteger
+	var ceil  = Math.ceil
+	  , floor = Math.floor;
+	module.exports = function(it){
+	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+	};
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(57)
+	  , max       = Math.max
+	  , min       = Math.min;
+	module.exports = function(index, length){
+	  index = toInteger(index);
+	  return index < 0 ? max(index + length, 0) : min(index, length);
+	};
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var shared = __webpack_require__(60)('keys')
+	  , uid    = __webpack_require__(61);
+	module.exports = function(key){
+	  return shared[key] || (shared[key] = uid(key));
+	};
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global = __webpack_require__(33)
+	  , SHARED = '__core-js_shared__'
+	  , store  = global[SHARED] || (global[SHARED] = {});
+	module.exports = function(key){
+	  return store[key] || (store[key] = {});
+	};
+
+/***/ },
+/* 61 */
+/***/ function(module, exports) {
+
+	var id = 0
+	  , px = Math.random();
+	module.exports = function(key){
+	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+	};
+
+/***/ },
+/* 62 */
+/***/ function(module, exports) {
+
+	// IE 8- don't enum bug keys
+	module.exports = (
+	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+	).split(',');
+
+/***/ },
+/* 63 */
+/***/ function(module, exports) {
+
+	exports.f = Object.getOwnPropertySymbols;
+
+/***/ },
+/* 64 */
+/***/ function(module, exports) {
+
+	exports.f = {}.propertyIsEnumerable;
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.13 ToObject(argument)
+	var defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return Object(defined(it));
+	};
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(67)
+	var __weex_style__ = __webpack_require__(68)
+	var __weex_script__ = __webpack_require__(69)
+
+	__weex_define__('@weex-component/wxc-marquee', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 67 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrap"
+	  ],
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "id": "anim",
+	      "classList": [
+	        "anim"
+	      ],
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 68 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden",
+	    "position": "relative"
+	  },
+	  "anim": {
+	    "flexDirection": "column",
+	    "position": "absolute",
+	    "transform": "translateY(0) translateZ(0)"
+	  }
+	}
+
+/***/ },
+/* 69 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	    data: function () {return {
+	        step: 0,
+	        count: 0,
+	        index: 1,
+	        duration: 0,
+	        interval: 0,
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.interval > 0 && this.step > 0 && this.duration > 0) {
+	            this.nextTick();
+	        }
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            var self = this;
+	            if (this.outofview) {
+	                setTimeout(self.nextTick.bind(self), self.interval);
+	            } else {
+	                setTimeout(function () {
+	                    self.animation(self.nextTick.bind(self));
+	                }, self.interval);
+	            }
+	        },
+	        animation: function animation(cb) {
+	            var self = this;
+	            var offset = -self.step * self.index;
+	            var $animation = __weex_require__('@weex-module/animation');
+	            $animation.transition(this.$el('anim'), {
+	                styles: {
+	                    transform: 'translateY(' + String(offset) + 'px) translateZ(0)'
+	                },
+	                timingFunction: 'ease',
+	                duration: self.duration
+	            }, function () {
+	                self.index = (self.index + 1) % self.count;
+	                self.$emit('change', {
+	                    index: self.index,
+	                    count: self.count
+	                });
+	                cb && cb();
+	            });
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(71)
+	var __weex_style__ = __webpack_require__(72)
+	var __weex_script__ = __webpack_require__(73)
+
+	__weex_define__('@weex-component/wxc-navbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 71 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "height": function () {return this.height},
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "attr": {
+	    "dataRole": function () {return this.dataRole}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": [
+	        "right-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.rightItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "value": function () {return this.rightItemTitle}
+	      },
+	      "shown": function () {return !this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "right-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "src": function () {return this.rightItemSrc}
+	      },
+	      "shown": function () {return this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "left-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.leftItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "value": function () {return this.leftItemTitle}
+	      },
+	      "shown": function () {return !this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "left-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "src": function () {return this.leftItemSrc}
+	      },
+	      "shown": function () {return this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "center-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "center",
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 72 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "width": 750
+	  },
+	  "right-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "right": 32,
+	    "textAlign": "right",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "left-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "left": 32,
+	    "textAlign": "left",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "center-text": {
+	    "position": "absolute",
+	    "bottom": 25,
+	    "left": 172,
+	    "right": 172,
+	    "textAlign": "center",
+	    "fontSize": 36,
+	    "fontWeight": "bold"
+	  },
+	  "left-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "left": 28,
+	    "width": 50,
+	    "height": 50
+	  },
+	  "right-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "right": 28,
+	    "width": 50,
+	    "height": 50
+	  }
+	}
+
+/***/ },
+/* 73 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+
+	    backgroundColor: 'black',
+
+	    height: 88,
+
+	    title: "",
+
+	    titleColor: 'black',
+
+	    rightItemSrc: '',
+
+	    rightItemTitle: '',
+
+	    rightItemColor: 'black',
+
+	    leftItemSrc: '',
+
+	    leftItemTitle: '',
+
+	    leftItemColor: 'black'
+	  }},
+	  methods: {
+	    onclickrightitem: function onclickrightitem(e) {
+	      this.$dispatch('naviBar.rightItem.click', {});
+	    },
+	    onclickleftitem: function onclickleftitem(e) {
+	      this.$dispatch('naviBar.leftItem.click', {});
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(70)
+	var __weex_template__ = __webpack_require__(75)
+	var __weex_style__ = __webpack_require__(76)
+	var __weex_script__ = __webpack_require__(77)
+
+	__weex_define__('@weex-component/wxc-navpage', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 75 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "wxc-navbar",
+	      "attr": {
+	        "dataRole": function () {return this.dataRole},
+	        "height": function () {return this.height},
+	        "backgroundColor": function () {return this.backgroundColor},
+	        "title": function () {return this.title},
+	        "titleColor": function () {return this.titleColor},
+	        "leftItemSrc": function () {return this.leftItemSrc},
+	        "leftItemTitle": function () {return this.leftItemTitle},
+	        "leftItemColor": function () {return this.leftItemColor},
+	        "rightItemSrc": function () {return this.rightItemSrc},
+	        "rightItemTitle": function () {return this.rightItemTitle},
+	        "rightItemColor": function () {return this.rightItemColor}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "wrapper"
+	      ],
+	      "style": {
+	        "marginTop": function () {return this.height}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 76 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "width": 750
+	  }
+	}
+
+/***/ },
+/* 77 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+	    backgroundColor: 'black',
+	    height: 88,
+	    title: "",
+	    titleColor: 'black',
+	    rightItemSrc: '',
+	    rightItemTitle: '',
+	    rightItemColor: 'black',
+	    leftItemSrc: '',
+	    leftItemTitle: '',
+	    leftItemColor: 'black'
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 78 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(79)
+	var __weex_template__ = __webpack_require__(83)
+	var __weex_style__ = __webpack_require__(84)
+	var __weex_script__ = __webpack_require__(85)
+
+	__weex_define__('@weex-component/wxc-tabbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(80)
+	var __weex_style__ = __webpack_require__(81)
+	var __weex_script__ = __webpack_require__(82)
+
+	__weex_define__('@weex-component/wxc-tabitem', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 80 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "events": {
+	    "click": "onclickitem"
+	  },
+	  "children": [
+	    {
+	      "type": "image",
+	      "classList": [
+	        "top-line"
+	      ],
+	      "attr": {
+	        "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "tab-icon"
+	      ],
+	      "attr": {
+	        "src": function () {return this.icon}
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "tab-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 81 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flex": 1,
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "height": 88
+	  },
+	  "top-line": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 2
+	  },
+	  "tab-icon": {
+	    "marginTop": 5,
+	    "width": 40,
+	    "height": 40
+	  },
+	  "tab-text": {
+	    "marginTop": 5,
+	    "textAlign": "center",
+	    "fontSize": 20
+	  }
+	}
+
+/***/ },
+/* 82 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    index: 0,
+	    title: '',
+	    titleColor: '#000000',
+	    icon: '',
+	    backgroundColor: '#ffffff'
+	  }},
+	  methods: {
+	    onclickitem: function onclickitem(e) {
+	      var vm = this;
+	      var params = {
+	        index: vm.index
+	      };
+	      vm.$dispatch('tabItem.onClick', params);
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 83 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "embed",
+	      "classList": [
+	        "content"
+	      ],
+	      "style": {
+	        "visibility": function () {return this.visibility}
+	      },
+	      "repeat": function () {return this.tabItems},
+	      "attr": {
+	        "src": function () {return this.src},
+	        "type": "weex"
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "tabbar"
+	      ],
+	      "append": "tree",
+	      "children": [
+	        {
+	          "type": "wxc-tabitem",
+	          "repeat": function () {return this.tabItems},
+	          "attr": {
+	            "index": function () {return this.index},
+	            "icon": function () {return this.icon},
+	            "title": function () {return this.title},
+	            "titleColor": function () {return this.titleColor}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 84 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "width": 750,
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "content": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "marginTop": 0,
+	    "marginBottom": 88
+	  },
+	  "tabbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 88
+	  }
+	}
+
+/***/ },
+/* 85 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    tabItems: [],
+	    selectedIndex: 0,
+	    selectedColor: '#ff0000',
+	    unselectedColor: '#000000'
+	  }},
+	  created: function created() {
+	    this.selected(this.selectedIndex);
+
+	    this.$on('tabItem.onClick', function (e) {
+	      var detail = e.detail;
+	      this.selectedIndex = detail.index;
+	      this.selected(detail.index);
+
+	      var params = {
+	        index: detail.index
+	      };
+	      this.$dispatch('tabBar.onClick', params);
+	    });
+	  },
+	  methods: {
+	    selected: function selected(index) {
+	      for (var i = 0; i < this.tabItems.length; i++) {
+	        var tabItem = this.tabItems[i];
+	        if (i == index) {
+	          tabItem.icon = tabItem.selectedImage;
+	          tabItem.titleColor = this.selectedColor;
+	          tabItem.visibility = 'visible';
+	        } else {
+	          tabItem.icon = tabItem.image;
+	          tabItem.titleColor = this.unselectedColor;
+	          tabItem.visibility = 'hidden';
+	        }
+	      }
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 86 */,
+/* 87 */,
+/* 88 */,
+/* 89 */,
+/* 90 */,
+/* 91 */,
+/* 92 */,
+/* 93 */,
+/* 94 */,
+/* 95 */,
+/* 96 */,
+/* 97 */,
+/* 98 */,
+/* 99 */,
+/* 100 */,
+/* 101 */,
+/* 102 */,
+/* 103 */,
+/* 104 */,
+/* 105 */,
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */,
+/* 116 */,
+/* 117 */,
+/* 118 */,
+/* 119 */,
+/* 120 */,
+/* 121 */,
+/* 122 */,
+/* 123 */,
+/* 124 */,
+/* 125 */,
+/* 126 */,
+/* 127 */,
+/* 128 */,
+/* 129 */,
+/* 130 */,
+/* 131 */,
+/* 132 */,
+/* 133 */,
+/* 134 */,
+/* 135 */,
+/* 136 */,
+/* 137 */,
+/* 138 */,
+/* 139 */,
+/* 140 */,
+/* 141 */,
+/* 142 */,
+/* 143 */,
+/* 144 */,
+/* 145 */,
+/* 146 */,
+/* 147 */,
+/* 148 */,
+/* 149 */,
+/* 150 */,
+/* 151 */,
+/* 152 */,
+/* 153 */,
+/* 154 */,
+/* 155 */,
+/* 156 */,
+/* 157 */,
+/* 158 */,
+/* 159 */,
+/* 160 */,
+/* 161 */,
+/* 162 */,
+/* 163 */,
+/* 164 */,
+/* 165 */,
+/* 166 */,
+/* 167 */,
+/* 168 */,
+/* 169 */,
+/* 170 */,
+/* 171 */,
+/* 172 */,
+/* 173 */,
+/* 174 */,
+/* 175 */,
+/* 176 */,
+/* 177 */,
+/* 178 */,
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */,
+/* 189 */,
+/* 190 */,
+/* 191 */,
+/* 192 */,
+/* 193 */,
+/* 194 */,
+/* 195 */,
+/* 196 */,
+/* 197 */,
+/* 198 */,
+/* 199 */,
+/* 200 */,
+/* 201 */,
+/* 202 */,
+/* 203 */,
+/* 204 */,
+/* 205 */,
+/* 206 */,
+/* 207 */,
+/* 208 */,
+/* 209 */,
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "children": [
+	    {
+	      "type": "wxc-panel",
+	      "attr": {
+	        "title": "websocket",
+	        "type": "primary"
+	      },
+	      "children": [
+	        {
+	          "type": "input",
+	          "attr": {
+	            "type": "text",
+	            "placeholder": "please input message to send",
+	            "autofocus": "false",
+	            "value": ""
+	          },
+	          "classList": [
+	            "input"
+	          ],
+	          "events": {
+	            "change": "onchange",
+	            "input": "oninput"
+	          },
+	          "id": "input"
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "flexDirection": "row",
+	            "justifyContent": "center"
+	          },
+	          "children": [
+	            {
+	              "type": "wxc-button",
+	              "attr": {
+	                "value": "connect",
+	                "size": "small",
+	                "type": "primary"
+	              },
+	              "events": {
+	                "click": "connect"
+	              }
+	            },
+	            {
+	              "type": "wxc-button",
+	              "attr": {
+	                "value": "send",
+	                "size": "small",
+	                "type": "primary"
+	              },
+	              "events": {
+	                "click": "send"
+	              },
+	              "style": {
+	                "marginLeft": 20
+	              }
+	            },
+	            {
+	              "type": "wxc-button",
+	              "attr": {
+	                "value": "close",
+	                "size": "small",
+	                "type": "primary"
+	              },
+	              "events": {
+	                "click": "close"
+	              },
+	              "style": {
+	                "marginLeft": 20
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = send"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.sendinfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onopen"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.onopeninfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onmessage"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.onmessage}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onclose"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.oncloseinfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onerror"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.onerrorinfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = close"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.closeinfo}
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 227 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "input": {
+	    "fontSize": 40,
+	    "height": 80,
+	    "width": 600
+	  }
+	}
+
+/***/ },
+/* 228 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	__webpack_require__(4);
+	var navigator = __weex_require__('@weex-module/navigator');
+	var modal = __weex_require__('@weex-module/modal');
+	var websocket = __weex_require__('@weex-module/webSocket');
+	module.exports = {
+	    data: function () {return {
+	        connectinfo: '',
+	        sendinfo: '',
+	        onopeninfo: '',
+	        onmessage: '',
+	        oncloseinfo: '',
+	        onerrorinfo: '',
+	        closeinfo: '',
+	        txtInput: '',
+	        navBarHeight: 88,
+	        title: 'Navigator',
+	        dir: 'examples',
+	        baseURL: ''
+	    }},
+	    methods: {
+	        connect: function connect() {
+	            websocket.WebSocket('ws://115.29.193.48:8088', '');
+	            var self = this;
+	            websocket.onopen = function (e) {
+	                self.onopeninfo = e;
+	            };
+	            websocket.onmessage = function (e) {
+	                self.onmessage = e.data;
+	            };
+	            websocket.onerror = function (e) {
+	                self.onerrorinfo = e.data;
+	            };
+	            websocket.onclose = function (e) {
+	                self.onerrorinfo = e.code;
+	            };
+	        },
+	        send: function send(e) {
+	            var input = this.$el('input');
+	            input.blur();
+	            websocket.send(this.txtInput);
+	            this.sendinfo = this.txtInput;
+	        },
+	        oninput: function oninput(event) {
+	            this.txtInput = event.value;
+	        },
+	        close: function close(e) {
+	            websocket.close();
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/calculator.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/calculator.js b/android/playground/app/src/main/assets/showcase/calculator.js
index 310a07e..362b2ed 100644
--- a/android/playground/app/src/main/assets/showcase/calculator.js
+++ b/android/playground/app/src/main/assets/showcase/calculator.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "539999e7481e3f5f3089b52ef4e2f46e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,9 +52,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(222)
-	var __weex_style__ = __webpack_require__(223)
-	var __weex_script__ = __webpack_require__(224)
+	var __weex_template__ = __webpack_require__(229)
+	var __weex_style__ = __webpack_require__(230)
+	var __weex_script__ = __webpack_require__(231)
 
 	__weex_define__('@weex-component/603eadccfc85e9db6c45c597933fe8fe', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2164,7 +2171,14 @@
 /* 219 */,
 /* 220 */,
 /* 221 */,
-/* 222 */
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2414,7 +2428,7 @@
 	}
 
 /***/ },
-/* 223 */
+/* 230 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2447,7 +2461,7 @@
 	}
 
 /***/ },
-/* 224 */
+/* 231 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js b/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
index 7a61dd6..3297614 100644
--- a/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
+++ b/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "6be6cc3a029b05aa9f9b751cded492be"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,10 +53,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(225)
-	var __weex_template__ = __webpack_require__(229)
-	var __weex_style__ = __webpack_require__(230)
-	var __weex_script__ = __webpack_require__(231)
+	__webpack_require__(232)
+	var __weex_template__ = __webpack_require__(236)
+	var __weex_style__ = __webpack_require__(237)
+	var __weex_script__ = __webpack_require__(238)
 
 	__weex_define__('@weex-component/f7fd132bdb4ce0ff6745c3887b3163e2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -93,12 +101,12 @@
 
 /***/ },
 
-/***/ 225:
+/***/ 232:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(226)
-	var __weex_style__ = __webpack_require__(227)
-	var __weex_script__ = __webpack_require__(228)
+	var __weex_template__ = __webpack_require__(233)
+	var __weex_style__ = __webpack_require__(234)
+	var __weex_script__ = __webpack_require__(235)
 
 	__weex_define__('@weex-component/we-dropdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -116,7 +124,7 @@
 
 /***/ },
 
-/***/ 226:
+/***/ 233:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -222,7 +230,7 @@
 
 /***/ },
 
-/***/ 227:
+/***/ 234:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -306,7 +314,7 @@
 
 /***/ },
 
-/***/ 228:
+/***/ 235:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -404,7 +412,7 @@
 
 /***/ },
 
-/***/ 229:
+/***/ 236:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -502,7 +510,7 @@
 
 /***/ },
 
-/***/ 230:
+/***/ 237:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -575,7 +583,7 @@
 
 /***/ },
 
-/***/ 231:
+/***/ 238:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -586,7 +594,7 @@
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
-	__webpack_require__(225);
+	__webpack_require__(232);
 
 	var initData = '[{\"addTime\":\"2016-07-14\",\"questionStatus\":\"2\",\"questionStatusValue\":\"Closed\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSC\"},{\"addTime\":\"2016-07-14\",\"questionStatus\":\"1\",\"questionStatusValue\":\"Waiting\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSM\"},{\"addTime\":\"2016-07-14\",\"questionStatus\":\"2\",\"questionStatusValue\":\"Confirmed\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSA\"}]';
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js b/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
index d5c76a2..d233d5b 100644
--- a/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
+++ b/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "41c1e54fecc89b9e8dd54b77c2eabcab"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(226)
-	var __weex_style__ = __webpack_require__(227)
-	var __weex_script__ = __webpack_require__(228)
+	var __weex_template__ = __webpack_require__(233)
+	var __weex_style__ = __webpack_require__(234)
+	var __weex_script__ = __webpack_require__(235)
 
 	__weex_define__('@weex-component/ffbcbcf1bd6120b070f00ceafeb0160e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 226:
+/***/ 233:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -172,7 +180,7 @@
 
 /***/ },
 
-/***/ 227:
+/***/ 234:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -256,7 +264,7 @@
 
 /***/ },
 
-/***/ 228:
+/***/ 235:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/minesweeper.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/minesweeper.js b/android/playground/app/src/main/assets/showcase/minesweeper.js
index 395cebf..fbf44de 100644
--- a/android/playground/app/src/main/assets/showcase/minesweeper.js
+++ b/android/playground/app/src/main/assets/showcase/minesweeper.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "65a619ce5be670660d9721027028344d"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(232)
-	var __weex_style__ = __webpack_require__(233)
-	var __weex_script__ = __webpack_require__(234)
+	var __weex_template__ = __webpack_require__(239)
+	var __weex_style__ = __webpack_require__(240)
+	var __weex_script__ = __webpack_require__(241)
 
 	__weex_define__('@weex-component/c0df89e239d226d3a0c6f418314cda04', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 232:
+/***/ 239:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +138,7 @@
 
 /***/ },
 
-/***/ 233:
+/***/ 240:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -164,7 +172,7 @@
 
 /***/ },
 
-/***/ 234:
+/***/ 241:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/banner.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/banner.js b/android/playground/app/src/main/assets/showcase/new-fashion/banner.js
index ff7dfdc..20b3d88 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/banner.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/banner.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "ee2691156d51eaa0412b11880ac382e6"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,8 +53,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/df4a1d587e74e64ad99011cd2bcf06b7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +71,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -83,7 +91,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/banners.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/banners.js b/android/playground/app/src/main/assets/showcase/new-fashion/banners.js
index 532069f..6e1f66a 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/banners.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/banners.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f59a04617977e173734ba0eea187ccce"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(245)
+	var __weex_script__ = __webpack_require__(246)
 
 	__weex_define__('@weex-component/a29a28169794adc0c69ea3ddb07ed6a2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -64,7 +72,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -84,7 +92,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -114,11 +122,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -134,7 +142,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -200,7 +208,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 246:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/brand.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/brand.js b/android/playground/app/src/main/assets/showcase/new-fashion/brand.js
index 504be7b..d720aa2 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/brand.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/brand.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e24b2e424857fda604c8598405bbb079"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,10 +53,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(241)
-	var __weex_style__ = __webpack_require__(242)
-	var __weex_script__ = __webpack_require__(243)
+	__webpack_require__(247)
+	var __weex_template__ = __webpack_require__(248)
+	var __weex_style__ = __webpack_require__(249)
+	var __weex_script__ = __webpack_require__(250)
 
 	__weex_define__('@weex-component/81fdd9b8b8bce1b304791aba10e15462', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +75,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +95,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +125,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +145,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -203,7 +211,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 246:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -235,12 +243,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 247:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(245)
+	var __weex_script__ = __webpack_require__(246)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -256,7 +264,7 @@
 
 /***/ },
 
-/***/ 241:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -299,7 +307,7 @@
 
 /***/ },
 
-/***/ 242:
+/***/ 249:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -315,7 +323,7 @@
 
 /***/ },
 
-/***/ 243:
+/***/ 250:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/category.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/category.js b/android/playground/app/src/main/assets/showcase/new-fashion/category.js
index a77fef6..4e61133 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/category.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/category.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "0d4696a23a901489e563e6a108bae2f8"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,10 +53,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(244)
-	var __weex_style__ = __webpack_require__(245)
-	var __weex_script__ = __webpack_require__(246)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(251)
+	var __weex_style__ = __webpack_require__(252)
+	var __weex_script__ = __webpack_require__(253)
 
 	__weex_define__('@weex-component/b33b928e3758831c19b31a06d4f5e634', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +75,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +95,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +125,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +145,7 @@
 
 /***/ },
 
-/***/ 244:
+/***/ 251:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -295,7 +303,7 @@
 
 /***/ },
 
-/***/ 245:
+/***/ 252:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -343,7 +351,7 @@
 
 /***/ },
 
-/***/ 246:
+/***/ 253:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js b/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
index 14983ef..0b5bbca 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "5c1c1bec74fd251dd528a48e19b856d1"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(247)
-	var __weex_style__ = __webpack_require__(248)
-	var __weex_script__ = __webpack_require__(249)
+	var __weex_template__ = __webpack_require__(254)
+	var __weex_style__ = __webpack_require__(255)
+	var __weex_script__ = __webpack_require__(256)
 
 	__weex_define__('@weex-component/160152a0a99527e4b8664677a7d4610b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 247:
+/***/ 254:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -131,7 +139,7 @@
 
 /***/ },
 
-/***/ 248:
+/***/ 255:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -179,7 +187,7 @@
 
 /***/ },
 
-/***/ 249:
+/***/ 256:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js b/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
index a960ac4..30b3fe4 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "d466b3ce09b0479d93118a6c4fa45b9d"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,11 +53,11 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(250)
-	var __weex_style__ = __webpack_require__(251)
-	var __weex_script__ = __webpack_require__(252)
+	__webpack_require__(244)
+	__webpack_require__(247)
+	var __weex_template__ = __webpack_require__(257)
+	var __weex_style__ = __webpack_require__(258)
+	var __weex_script__ = __webpack_require__(259)
 
 	__weex_define__('@weex-component/3a0fc3e27dd7bb14f409fca1ac4baac7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +76,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +96,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +126,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +146,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +212,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 246:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +244,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 247:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(245)
+	var __weex_script__ = __webpack_require__(246)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,7 +265,7 @@
 
 /***/ },
 
-/***/ 250:
+/***/ 257:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -312,7 +320,7 @@
 
 /***/ },
 
-/***/ 251:
+/***/ 258:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -324,7 +332,7 @@
 
 /***/ },
 
-/***/ 252:
+/***/ 259:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/goods.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/goods.js b/android/playground/app/src/main/assets/showcase/new-fashion/goods.js
index 02fb30e..b1c404e 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/goods.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/goods.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "60e0ac6f9addf1998f3da89084bda019"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,10 +53,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(253)
-	var __weex_style__ = __webpack_require__(254)
-	var __weex_script__ = __webpack_require__(255)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(260)
+	var __weex_style__ = __webpack_require__(261)
+	var __weex_script__ = __webpack_require__(262)
 
 	__weex_define__('@weex-component/4ee2a41c614b4058c24278d8a41a24eb', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +75,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +95,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +125,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +145,7 @@
 
 /***/ },
 
-/***/ 253:
+/***/ 260:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -263,7 +271,7 @@
 
 /***/ },
 
-/***/ 254:
+/***/ 261:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -289,7 +297,7 @@
 
 /***/ },
 
-/***/ 255:
+/***/ 262:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";


[08/30] incubator-weex git commit: * [android] make the app playground to use v8 code cache.

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js b/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
index 3c651bc..f8a815a 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "a90b67b0892857961ae1628249a6e588"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,11 +53,11 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(256)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(259)
-	var __weex_style__ = __webpack_require__(260)
-	var __weex_script__ = __webpack_require__(261)
+	__webpack_require__(263)
+	__webpack_require__(247)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_style__ = __webpack_require__(267)
+	var __weex_script__ = __webpack_require__(268)
 
 	__weex_define__('@weex-component/5efec0a39c4d8f94c5e8f7170c422834', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +76,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +96,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +126,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +146,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +212,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 246:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +244,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 247:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(245)
+	var __weex_script__ = __webpack_require__(246)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,11 +265,11 @@
 
 /***/ },
 
-/***/ 256:
+/***/ 263:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(264)
+	var __weex_script__ = __webpack_require__(265)
 
 	__weex_define__('@weex-component/link', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -277,7 +285,7 @@
 
 /***/ },
 
-/***/ 257:
+/***/ 264:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -296,7 +304,7 @@
 
 /***/ },
 
-/***/ 258:
+/***/ 265:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -320,7 +328,7 @@
 
 /***/ },
 
-/***/ 259:
+/***/ 266:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -394,7 +402,7 @@
 
 /***/ },
 
-/***/ 260:
+/***/ 267:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -450,7 +458,7 @@
 
 /***/ },
 
-/***/ 261:
+/***/ 268:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/index.js b/android/playground/app/src/main/assets/showcase/new-fashion/index.js
index 5e813fa..466141b 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/index.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/index.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "a7bd968981f29de39f984767e418aa2c"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,9 +52,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(262)
-	var __weex_style__ = __webpack_require__(263)
-	var __weex_script__ = __webpack_require__(264)
+	var __weex_template__ = __webpack_require__(269)
+	var __weex_style__ = __webpack_require__(270)
+	var __weex_script__ = __webpack_require__(271)
 
 	__weex_define__('@weex-component/5e0e45b25bc002a471e5967e4452d911', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2067,14 +2074,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },
@@ -3007,7 +3014,14 @@
 /* 259 */,
 /* 260 */,
 /* 261 */,
-/* 262 */
+/* 262 */,
+/* 263 */,
+/* 264 */,
+/* 265 */,
+/* 266 */,
+/* 267 */,
+/* 268 */,
+/* 269 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3026,7 +3040,7 @@
 	}
 
 /***/ },
-/* 263 */
+/* 270 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3040,7 +3054,7 @@
 	}
 
 /***/ },
-/* 264 */
+/* 271 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/link.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/link.js b/android/playground/app/src/main/assets/showcase/new-fashion/link.js
index 55091e4..46958fc 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/link.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/link.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "183606afcaf847976fe6e4983ec4dacc"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,8 +53,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(264)
+	var __weex_script__ = __webpack_require__(265)
 
 	__weex_define__('@weex-component/4921d4510db0a127687a84f88dda307c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +71,7 @@
 
 /***/ },
 
-/***/ 257:
+/***/ 264:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -82,7 +90,7 @@
 
 /***/ },
 
-/***/ 258:
+/***/ 265:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/main.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/main.js b/android/playground/app/src/main/assets/showcase/new-fashion/main.js
index c9d3d4a..1767b9f 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/main.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/main.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "a3fd8a3e01f00a16c43c2f934ecfcf63"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,17 +52,17 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(265)
-	__webpack_require__(266)
-	__webpack_require__(267)
-	__webpack_require__(268)
-	__webpack_require__(269)
+	__webpack_require__(272)
 	__webpack_require__(273)
-	__webpack_require__(277)
-	__webpack_require__(281)
-	var __weex_template__ = __webpack_require__(282)
-	var __weex_style__ = __webpack_require__(283)
-	var __weex_script__ = __webpack_require__(284)
+	__webpack_require__(274)
+	__webpack_require__(275)
+	__webpack_require__(276)
+	__webpack_require__(280)
+	__webpack_require__(284)
+	__webpack_require__(288)
+	var __weex_template__ = __webpack_require__(289)
+	var __weex_style__ = __webpack_require__(290)
+	var __weex_script__ = __webpack_require__(291)
 
 	__weex_define__('@weex-component/7e1771848154855ce84d79183d543f9a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -531,8 +539,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2075,14 +2082,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },
@@ -2988,7 +2995,14 @@
 /* 232 */,
 /* 233 */,
 /* 234 */,
-/* 235 */
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */,
+/* 240 */,
+/* 241 */,
+/* 242 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3007,7 +3021,7 @@
 	}
 
 /***/ },
-/* 236 */
+/* 243 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3036,11 +3050,11 @@
 
 
 /***/ },
-/* 237 */
+/* 244 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3055,7 +3069,7 @@
 
 
 /***/ },
-/* 238 */
+/* 245 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3120,7 +3134,7 @@
 	}
 
 /***/ },
-/* 239 */
+/* 246 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3151,12 +3165,12 @@
 
 
 /***/ },
-/* 240 */
+/* 247 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(245)
+	var __weex_script__ = __webpack_require__(246)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3171,7 +3185,7 @@
 
 
 /***/ },
-/* 241 */
+/* 248 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3213,7 +3227,7 @@
 	}
 
 /***/ },
-/* 242 */
+/* 249 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3228,7 +3242,7 @@
 	}
 
 /***/ },
-/* 243 */
+/* 250 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -3268,7 +3282,7 @@
 
 
 /***/ },
-/* 244 */
+/* 251 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3425,7 +3439,7 @@
 	}
 
 /***/ },
-/* 245 */
+/* 252 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3472,7 +3486,7 @@
 	}
 
 /***/ },
-/* 246 */
+/* 253 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -3916,7 +3930,7 @@
 
 
 /***/ },
-/* 247 */
+/* 254 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3980,7 +3994,7 @@
 	}
 
 /***/ },
-/* 248 */
+/* 255 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4027,7 +4041,7 @@
 	}
 
 /***/ },
-/* 249 */
+/* 256 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -4053,10 +4067,10 @@
 
 
 /***/ },
-/* 250 */,
-/* 251 */,
-/* 252 */,
-/* 253 */
+/* 257 */,
+/* 258 */,
+/* 259 */,
+/* 260 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4181,7 +4195,7 @@
 	}
 
 /***/ },
-/* 254 */
+/* 261 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4206,7 +4220,7 @@
 	}
 
 /***/ },
-/* 255 */
+/* 262 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4234,11 +4248,11 @@
 
 
 /***/ },
-/* 256 */
+/* 263 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(264)
+	var __weex_script__ = __webpack_require__(265)
 
 	__weex_define__('@weex-component/link', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4253,7 +4267,7 @@
 
 
 /***/ },
-/* 257 */
+/* 264 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4271,7 +4285,7 @@
 	}
 
 /***/ },
-/* 258 */
+/* 265 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -4294,7 +4308,7 @@
 
 
 /***/ },
-/* 259 */
+/* 266 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4367,7 +4381,7 @@
 	}
 
 /***/ },
-/* 260 */
+/* 267 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4422,7 +4436,7 @@
 	}
 
 /***/ },
-/* 261 */
+/* 268 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4447,17 +4461,17 @@
 
 
 /***/ },
-/* 262 */,
-/* 263 */,
-/* 264 */,
-/* 265 */
+/* 269 */,
+/* 270 */,
+/* 271 */,
+/* 272 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(256)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(259)
-	var __weex_style__ = __webpack_require__(260)
-	var __weex_script__ = __webpack_require__(261)
+	__webpack_require__(263)
+	__webpack_require__(247)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_style__ = __webpack_require__(267)
+	var __weex_script__ = __webpack_require__(268)
 
 	__weex_define__('@weex-component/headlines', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4474,13 +4488,13 @@
 
 
 /***/ },
-/* 266 */
+/* 273 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(244)
-	var __weex_style__ = __webpack_require__(245)
-	var __weex_script__ = __webpack_require__(246)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(251)
+	var __weex_style__ = __webpack_require__(252)
+	var __weex_script__ = __webpack_require__(253)
 
 	__weex_define__('@weex-component/category', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4497,12 +4511,12 @@
 
 
 /***/ },
-/* 267 */
+/* 274 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(247)
-	var __weex_style__ = __webpack_require__(248)
-	var __weex_script__ = __webpack_require__(249)
+	var __weex_template__ = __webpack_require__(254)
+	var __weex_style__ = __webpack_require__(255)
+	var __weex_script__ = __webpack_require__(256)
 
 	__weex_define__('@weex-component/coupon', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4519,13 +4533,13 @@
 
 
 /***/ },
-/* 268 */
+/* 275 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(253)
-	var __weex_style__ = __webpack_require__(254)
-	var __weex_script__ = __webpack_require__(255)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(260)
+	var __weex_style__ = __webpack_require__(261)
+	var __weex_script__ = __webpack_require__(262)
 
 	__weex_define__('@weex-component/goods', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4542,14 +4556,14 @@
 
 
 /***/ },
-/* 269 */
+/* 276 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(270)
-	var __weex_style__ = __webpack_require__(271)
-	var __weex_script__ = __webpack_require__(272)
+	__webpack_require__(244)
+	__webpack_require__(247)
+	var __weex_template__ = __webpack_require__(277)
+	var __weex_style__ = __webpack_require__(278)
+	var __weex_script__ = __webpack_require__(279)
 
 	__weex_define__('@weex-component/resource', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4566,7 +4580,7 @@
 
 
 /***/ },
-/* 270 */
+/* 277 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4604,7 +4618,7 @@
 	}
 
 /***/ },
-/* 271 */
+/* 278 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4618,7 +4632,7 @@
 	}
 
 /***/ },
-/* 272 */
+/* 279 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4636,13 +4650,13 @@
 
 
 /***/ },
-/* 273 */
+/* 280 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(274)
-	var __weex_style__ = __webpack_require__(275)
-	var __weex_script__ = __webpack_require__(276)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(281)
+	var __weex_style__ = __webpack_require__(282)
+	var __weex_script__ = __webpack_require__(283)
 
 	__weex_define__('@weex-component/scene', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4659,7 +4673,7 @@
 
 
 /***/ },
-/* 274 */
+/* 281 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4751,7 +4765,7 @@
 	}
 
 /***/ },
-/* 275 */
+/* 282 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4810,7 +4824,7 @@
 	}
 
 /***/ },
-/* 276 */
+/* 283 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -5022,13 +5036,13 @@
 
 
 /***/ },
-/* 277 */
+/* 284 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(278)
-	var __weex_style__ = __webpack_require__(279)
-	var __weex_script__ = __webpack_require__(280)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(285)
+	var __weex_style__ = __webpack_require__(286)
+	var __weex_script__ = __webpack_require__(287)
 
 	__weex_define__('@weex-component/match', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -5045,7 +5059,7 @@
 
 
 /***/ },
-/* 278 */
+/* 285 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5124,7 +5138,7 @@
 	}
 
 /***/ },
-/* 279 */
+/* 286 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5138,7 +5152,7 @@
 	}
 
 /***/ },
-/* 280 */
+/* 287 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -5175,13 +5189,13 @@
 
 
 /***/ },
-/* 281 */
+/* 288 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(241)
-	var __weex_style__ = __webpack_require__(242)
-	var __weex_script__ = __webpack_require__(243)
+	__webpack_require__(247)
+	var __weex_template__ = __webpack_require__(248)
+	var __weex_style__ = __webpack_require__(249)
+	var __weex_script__ = __webpack_require__(250)
 
 	__weex_define__('@weex-component/brand', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -5198,7 +5212,7 @@
 
 
 /***/ },
-/* 282 */
+/* 289 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5341,7 +5355,7 @@
 	}
 
 /***/ },
-/* 283 */
+/* 290 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5367,7 +5381,7 @@
 	}
 
 /***/ },
-/* 284 */
+/* 291 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/match.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/match.js b/android/playground/app/src/main/assets/showcase/new-fashion/match.js
index c1beb2f..e566880 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/match.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/match.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "64d33300e23e2423805614137fa667c0"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,10 +53,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(278)
-	var __weex_style__ = __webpack_require__(279)
-	var __weex_script__ = __webpack_require__(280)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(285)
+	var __weex_style__ = __webpack_require__(286)
+	var __weex_script__ = __webpack_require__(287)
 
 	__weex_define__('@weex-component/e4f94096a035d75578fa1eb2d8967b5f', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +75,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +95,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +125,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +145,7 @@
 
 /***/ },
 
-/***/ 278:
+/***/ 285:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -217,7 +225,7 @@
 
 /***/ },
 
-/***/ 279:
+/***/ 286:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -232,7 +240,7 @@
 
 /***/ },
 
-/***/ 280:
+/***/ 287:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/resource.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/resource.js b/android/playground/app/src/main/assets/showcase/new-fashion/resource.js
index fea6f14..3751453 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/resource.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/resource.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "6736e31cca1c5a5e1fe2bd939e7f165e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,11 +53,11 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(270)
-	var __weex_style__ = __webpack_require__(271)
-	var __weex_script__ = __webpack_require__(272)
+	__webpack_require__(244)
+	__webpack_require__(247)
+	var __weex_template__ = __webpack_require__(277)
+	var __weex_style__ = __webpack_require__(278)
+	var __weex_script__ = __webpack_require__(279)
 
 	__weex_define__('@weex-component/898d20378eee87156b93aef1be724cdb', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +76,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +96,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +126,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +146,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +212,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 246:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +244,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 247:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(245)
+	var __weex_script__ = __webpack_require__(246)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,7 +265,7 @@
 
 /***/ },
 
-/***/ 270:
+/***/ 277:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -296,7 +304,7 @@
 
 /***/ },
 
-/***/ 271:
+/***/ 278:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -311,7 +319,7 @@
 
 /***/ },
 
-/***/ 272:
+/***/ 279:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/new-fashion/scene.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/scene.js b/android/playground/app/src/main/assets/showcase/new-fashion/scene.js
index 962341e..8b560f9 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/scene.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/scene.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "ea26fca66949910733fddbd516e3e1f7"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,10 +53,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(274)
-	var __weex_style__ = __webpack_require__(275)
-	var __weex_script__ = __webpack_require__(276)
+	__webpack_require__(244)
+	var __weex_template__ = __webpack_require__(281)
+	var __weex_style__ = __webpack_require__(282)
+	var __weex_script__ = __webpack_require__(283)
 
 	__weex_define__('@weex-component/18e03f6e7e4b9d87e4b470dfec07a573', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +75,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +95,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +125,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 244:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +145,7 @@
 
 /***/ },
 
-/***/ 274:
+/***/ 281:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -230,7 +238,7 @@
 
 /***/ },
 
-/***/ 275:
+/***/ 282:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -290,7 +298,7 @@
 
 /***/ },
 
-/***/ 276:
+/***/ 283:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/showcase/ui.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/ui.js b/android/playground/app/src/main/assets/showcase/ui.js
index edab05c..86d1a31 100644
--- a/android/playground/app/src/main/assets/showcase/ui.js
+++ b/android/playground/app/src/main/assets/showcase/ui.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "5169a82b5e387ecef6a07f653ab3f5dd"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,9 +52,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(285)
-	var __weex_style__ = __webpack_require__(286)
-	var __weex_script__ = __webpack_require__(287)
+	var __weex_template__ = __webpack_require__(292)
+	var __weex_style__ = __webpack_require__(293)
+	var __weex_script__ = __webpack_require__(294)
 
 	__weex_define__('@weex-component/045f40e22d4b6e9c9f36354367812ecd', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2227,7 +2234,14 @@
 /* 282 */,
 /* 283 */,
 /* 284 */,
-/* 285 */
+/* 285 */,
+/* 286 */,
+/* 287 */,
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2390,7 +2404,7 @@
 	}
 
 /***/ },
-/* 286 */
+/* 293 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2401,7 +2415,7 @@
 	}
 
 /***/ },
-/* 287 */
+/* 294 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/style/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/style/index.js b/android/playground/app/src/main/assets/style/index.js
index 9f1c024..067139f 100644
--- a/android/playground/app/src/main/assets/style/index.js
+++ b/android/playground/app/src/main/assets/style/index.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e6578a7a7589f16c2c6d8a40c610c5ca"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,12 +52,12 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(288)
+	__webpack_require__(295)
+	__webpack_require__(303)
 	__webpack_require__(296)
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(300)
-	var __weex_style__ = __webpack_require__(301)
-	var __weex_script__ = __webpack_require__(302)
+	var __weex_template__ = __webpack_require__(307)
+	var __weex_style__ = __webpack_require__(308)
+	var __weex_script__ = __webpack_require__(309)
 
 	__weex_define__('@weex-component/2bb97ed0198ea3308e26ee13c0047c9c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -526,8 +534,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2233,13 +2240,20 @@
 /* 285 */,
 /* 286 */,
 /* 287 */,
-/* 288 */
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(293)
-	var __weex_style__ = __webpack_require__(294)
-	var __weex_script__ = __webpack_require__(295)
+	__webpack_require__(296)
+	var __weex_template__ = __webpack_require__(300)
+	var __weex_style__ = __webpack_require__(301)
+	var __weex_script__ = __webpack_require__(302)
 
 	__weex_define__('@weex-component/style-box', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2256,12 +2270,12 @@
 
 
 /***/ },
-/* 289 */
+/* 296 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(297)
+	var __weex_style__ = __webpack_require__(298)
+	var __weex_script__ = __webpack_require__(299)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2278,7 +2292,7 @@
 
 
 /***/ },
-/* 290 */
+/* 297 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2296,7 +2310,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 298 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2315,7 +2329,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 299 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2334,7 +2348,7 @@
 
 
 /***/ },
-/* 293 */
+/* 300 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2600,7 +2614,7 @@
 	}
 
 /***/ },
-/* 294 */
+/* 301 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2623,7 +2637,7 @@
 	}
 
 /***/ },
-/* 295 */
+/* 302 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2638,13 +2652,13 @@
 
 
 /***/ },
-/* 296 */
+/* 303 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(297)
-	var __weex_style__ = __webpack_require__(298)
-	var __weex_script__ = __webpack_require__(299)
+	__webpack_require__(296)
+	var __weex_template__ = __webpack_require__(304)
+	var __weex_style__ = __webpack_require__(305)
+	var __weex_script__ = __webpack_require__(306)
 
 	__weex_define__('@weex-component/style-flex', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2661,7 +2675,7 @@
 
 
 /***/ },
-/* 297 */
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3287,7 +3301,7 @@
 	}
 
 /***/ },
-/* 298 */
+/* 305 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3304,7 +3318,7 @@
 	}
 
 /***/ },
-/* 299 */
+/* 306 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3314,7 +3328,7 @@
 
 
 /***/ },
-/* 300 */
+/* 307 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3457,7 +3471,7 @@
 	}
 
 /***/ },
-/* 301 */
+/* 308 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3468,7 +3482,7 @@
 	}
 
 /***/ },
-/* 302 */
+/* 309 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/style/style-box.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/style/style-box.js b/android/playground/app/src/main/assets/style/style-box.js
index 9d5e89a..4e29b44 100644
--- a/android/playground/app/src/main/assets/style/style-box.js
+++ b/android/playground/app/src/main/assets/style/style-box.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "0b04f3a3de48a8d776c3e19db708944b"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,10 +52,10 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(293)
-	var __weex_style__ = __webpack_require__(294)
-	var __weex_script__ = __webpack_require__(295)
+	__webpack_require__(296)
+	var __weex_template__ = __webpack_require__(300)
+	var __weex_style__ = __webpack_require__(301)
+	var __weex_script__ = __webpack_require__(302)
 
 	__weex_define__('@weex-component/1cc382dbc23ca75e8dd34af712ba54f1', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -524,8 +532,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2232,12 +2239,19 @@
 /* 286 */,
 /* 287 */,
 /* 288 */,
-/* 289 */
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(297)
+	var __weex_style__ = __webpack_require__(298)
+	var __weex_script__ = __webpack_require__(299)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2254,7 +2268,7 @@
 
 
 /***/ },
-/* 290 */
+/* 297 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2272,7 +2286,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 298 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2291,7 +2305,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 299 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2310,7 +2324,7 @@
 
 
 /***/ },
-/* 293 */
+/* 300 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2576,7 +2590,7 @@
 	}
 
 /***/ },
-/* 294 */
+/* 301 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2599,7 +2613,7 @@
 	}
 
 /***/ },
-/* 295 */
+/* 302 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/style/style-flex.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/style/style-flex.js b/android/playground/app/src/main/assets/style/style-flex.js
index b2b6411..bde456a 100644
--- a/android/playground/app/src/main/assets/style/style-flex.js
+++ b/android/playground/app/src/main/assets/style/style-flex.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e737aeb8ee7279929771bde9a83d6307"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,10 +52,10 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(297)
-	var __weex_style__ = __webpack_require__(298)
-	var __weex_script__ = __webpack_require__(299)
+	__webpack_require__(296)
+	var __weex_template__ = __webpack_require__(304)
+	var __weex_style__ = __webpack_require__(305)
+	var __weex_script__ = __webpack_require__(306)
 
 	__weex_define__('@weex-component/601bcbb157cb7b89fd0d4cc63178b528', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -524,8 +532,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2232,12 +2239,19 @@
 /* 286 */,
 /* 287 */,
 /* 288 */,
-/* 289 */
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(297)
+	var __weex_style__ = __webpack_require__(298)
+	var __weex_script__ = __webpack_require__(299)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2254,7 +2268,7 @@
 
 
 /***/ },
-/* 290 */
+/* 297 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2272,7 +2286,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 298 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2291,7 +2305,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 299 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2310,11 +2324,11 @@
 
 
 /***/ },
-/* 293 */,
-/* 294 */,
-/* 295 */,
-/* 296 */,
-/* 297 */
+/* 300 */,
+/* 301 */,
+/* 302 */,
+/* 303 */,
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2940,7 +2954,7 @@
 	}
 
 /***/ },
-/* 298 */
+/* 305 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2957,7 +2971,7 @@
 	}
 
 /***/ },
-/* 299 */
+/* 306 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/style/style-item.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/style/style-item.js b/android/playground/app/src/main/assets/style/style-item.js
index c625c2d..0e98c7e 100644
--- a/android/playground/app/src/main/assets/style/style-item.js
+++ b/android/playground/app/src/main/assets/style/style-item.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "67da74403b05b6ed924369efcf500779"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(297)
+	var __weex_style__ = __webpack_require__(298)
+	var __weex_script__ = __webpack_require__(299)
 
 	__weex_define__('@weex-component/db2a20e3c65e67c0f449e29c05c9d644', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 290:
+/***/ 297:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,7 +93,7 @@
 
 /***/ },
 
-/***/ 291:
+/***/ 298:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +113,7 @@
 
 /***/ },
 
-/***/ 292:
+/***/ 299:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/hello-world-1.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-1.js b/android/playground/app/src/main/assets/syntax/hello-world-1.js
index 3b31200..7de82f9 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-1.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-1.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "01f4491530973f4e4bb3238d95751899"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,7 +53,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(306)
+	var __weex_template__ = __webpack_require__(313)
 
 	__weex_define__('@weex-component/5e6bbced7515fc4165499153f5d8276a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +65,7 @@
 
 /***/ },
 
-/***/ 306:
+/***/ 313:
 /***/ function(module, exports) {
 
 	module.exports = {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/hello-world-2.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-2.js b/android/playground/app/src/main/assets/syntax/hello-world-2.js
index 60f2b4d..8c3fa45 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-2.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-2.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "7dff2ae5ce33b20845e9bb6fc6d0120e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,7 +53,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(307)
+	var __weex_template__ = __webpack_require__(314)
 
 	__weex_define__('@weex-component/25608f094c039b891a20c8161b9c650b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +65,7 @@
 
 /***/ },
 
-/***/ 307:
+/***/ 314:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -70,7 +78,7 @@
 	    {
 	      "type": "image",
 	      "attr": {
-	        "src": "http://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	        "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
 	      },
 	      "style": {
 	        "width": 360,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/hello-world-3.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-3.js b/android/playground/app/src/main/assets/syntax/hello-world-3.js
index 9d0e747..1808cad 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-3.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-3.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "d17529103bef3c2b364ebc625ab45512"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,8 +53,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(308)
-	var __weex_style__ = __webpack_require__(309)
+	var __weex_template__ = __webpack_require__(315)
+	var __weex_style__ = __webpack_require__(316)
 
 	__weex_define__('@weex-component/695862caffb746fa67bb70cbd1bb819e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -60,7 +68,7 @@
 
 /***/ },
 
-/***/ 308:
+/***/ 315:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -72,7 +80,7 @@
 	    {
 	      "type": "image",
 	      "attr": {
-	        "src": "http://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	        "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
 	      },
 	      "classList": [
 	        "logo"
@@ -92,7 +100,7 @@
 
 /***/ },
 
-/***/ 309:
+/***/ 316:
 /***/ function(module, exports) {
 
 	module.exports = {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/hello-world-4.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-4.js b/android/playground/app/src/main/assets/syntax/hello-world-4.js
index ccdf0b3..97dde0a 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-4.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-4.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "0fe480df5562a6d1152edf81a4e204bd"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(310)
-	var __weex_style__ = __webpack_require__(311)
-	var __weex_script__ = __webpack_require__(312)
+	var __weex_template__ = __webpack_require__(317)
+	var __weex_style__ = __webpack_require__(318)
+	var __weex_script__ = __webpack_require__(319)
 
 	__weex_define__('@weex-component/efbfb8ecf417c1cf14746fdf4099343d', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 310:
+/***/ 317:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +106,7 @@
 
 /***/ },
 
-/***/ 311:
+/***/ 318:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -117,14 +125,14 @@
 
 /***/ },
 
-/***/ 312:
+/***/ 319:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
 	module.exports = {
 	  data: function () {return {
-	    logoUrl: 'http://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
 	    target: 'World'
 	  }}
 	};}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/hello-world-5.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-5.js b/android/playground/app/src/main/assets/syntax/hello-world-5.js
index 09192aa..d24fccc 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-5.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-5.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "35462eabba3393215611a6b955527b09"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(313)
-	var __weex_style__ = __webpack_require__(314)
-	var __weex_script__ = __webpack_require__(315)
+	var __weex_template__ = __webpack_require__(320)
+	var __weex_style__ = __webpack_require__(321)
+	var __weex_script__ = __webpack_require__(322)
 
 	__weex_define__('@weex-component/06cb3b1cf32d7e68eb4f41a491128601', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 313:
+/***/ 320:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +109,7 @@
 
 /***/ },
 
-/***/ 314:
+/***/ 321:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,14 +128,14 @@
 
 /***/ },
 
-/***/ 315:
+/***/ 322:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
 	module.exports = {
 	  data: function () {return {
-	    logoUrl: 'http://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
 	    target: 'World'
 	  }},
 	  methods: {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/hello-world.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/hello-world.js b/android/playground/app/src/main/assets/syntax/hello-world.js
index 91a7bdd..17c87e0 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "4036f3aa65de807664a81ff725559506"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(303)
-	var __weex_style__ = __webpack_require__(304)
-	var __weex_script__ = __webpack_require__(305)
+	var __weex_template__ = __webpack_require__(310)
+	var __weex_style__ = __webpack_require__(311)
+	var __weex_script__ = __webpack_require__(312)
 
 	__weex_define__('@weex-component/ca86dd7272942388d48952706d37e8a7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 303:
+/***/ 310:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +109,7 @@
 
 /***/ },
 
-/***/ 304:
+/***/ 311:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,14 +128,14 @@
 
 /***/ },
 
-/***/ 305:
+/***/ 312:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
 	module.exports = {
 	  data: function () {return {
-	    logoUrl: 'http://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
 	    target: 'World'
 	  }},
 	  methods: {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/index.js b/android/playground/app/src/main/assets/syntax/index.js
index 9105baa..9f9d944 100644
--- a/android/playground/app/src/main/assets/syntax/index.js
+++ b/android/playground/app/src/main/assets/syntax/index.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "8f7d3b22af63bf2993589f709b488ad0"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,8 +52,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(316)
-	var __weex_script__ = __webpack_require__(317)
+	var __weex_template__ = __webpack_require__(323)
+	var __weex_script__ = __webpack_require__(324)
 
 	__weex_define__('@weex-component/7c0aa0b76c7fe063e27065c721bee1a0', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2064,14 +2071,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },
@@ -3242,7 +3249,14 @@
 /* 313 */,
 /* 314 */,
 /* 315 */,
-/* 316 */
+/* 316 */,
+/* 317 */,
+/* 318 */,
+/* 319 */,
+/* 320 */,
+/* 321 */,
+/* 322 */,
+/* 323 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3254,7 +3268,7 @@
 	}
 
 /***/ },
-/* 317 */
+/* 324 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/script-component.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/script-component.js b/android/playground/app/src/main/assets/syntax/script-component.js
index 18f012b..7002ba6 100644
--- a/android/playground/app/src/main/assets/syntax/script-component.js
+++ b/android/playground/app/src/main/assets/syntax/script-component.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "d92e48709f2e9ed225726bed6debeb3b"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,8 +53,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(318)
-	var __weex_script__ = __webpack_require__(319)
+	var __weex_template__ = __webpack_require__(325)
+	var __weex_script__ = __webpack_require__(326)
 
 	__weex_define__('@weex-component/2a5ba7e55afcba45accf15b3179f0016', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +71,7 @@
 
 /***/ },
 
-/***/ 318:
+/***/ 325:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -96,12 +104,12 @@
 
 /***/ },
 
-/***/ 319:
+/***/ 326:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(320);
+	__webpack_require__(327);
 	module.exports = {
 	  data: function () {return {
 	    items: [{ title: 'A', url: 'a' }, { title: 'B', url: 'b' }, { title: 'C', url: 'c' }]
@@ -112,12 +120,12 @@
 
 /***/ },
 
-/***/ 320:
+/***/ 327:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(321)
-	var __weex_style__ = __webpack_require__(322)
-	var __weex_script__ = __webpack_require__(323)
+	var __weex_template__ = __webpack_require__(328)
+	var __weex_style__ = __webpack_require__(329)
+	var __weex_script__ = __webpack_require__(330)
 
 	__weex_define__('@weex-component/sub', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -135,7 +143,7 @@
 
 /***/ },
 
-/***/ 321:
+/***/ 328:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -150,7 +158,7 @@
 
 /***/ },
 
-/***/ 322:
+/***/ 329:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -162,7 +170,7 @@
 
 /***/ },
 
-/***/ 323:
+/***/ 330:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/script-data.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/script-data.js b/android/playground/app/src/main/assets/syntax/script-data.js
index c4ae858..30939d5 100644
--- a/android/playground/app/src/main/assets/syntax/script-data.js
+++ b/android/playground/app/src/main/assets/syntax/script-data.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e4363ed07c8131514e1b3de227394a65"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(324)
-	var __weex_style__ = __webpack_require__(325)
-	var __weex_script__ = __webpack_require__(326)
+	var __weex_template__ = __webpack_require__(331)
+	var __weex_style__ = __webpack_require__(332)
+	var __weex_script__ = __webpack_require__(333)
 
 	__weex_define__('@weex-component/2267e3020f57f77e5d733a60b4ea145b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 324:
+/***/ 331:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +124,7 @@
 
 /***/ },
 
-/***/ 325:
+/***/ 332:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,7 +135,7 @@
 
 /***/ },
 
-/***/ 326:
+/***/ 333:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/script-events.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/script-events.js b/android/playground/app/src/main/assets/syntax/script-events.js
index b860bcc..3e0d0a5 100644
--- a/android/playground/app/src/main/assets/syntax/script-events.js
+++ b/android/playground/app/src/main/assets/syntax/script-events.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "071268eda965a3d83a052c1f0dfc6527"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(327)
-	var __weex_style__ = __webpack_require__(328)
-	var __weex_script__ = __webpack_require__(329)
+	var __weex_template__ = __webpack_require__(334)
+	var __weex_style__ = __webpack_require__(335)
+	var __weex_script__ = __webpack_require__(336)
 
 	__weex_define__('@weex-component/491ca7f339a97e2fe3e130536e8fb536', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -92,7 +100,7 @@
 
 /***/ },
 
-/***/ 327:
+/***/ 334:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +124,7 @@
 
 /***/ },
 
-/***/ 328:
+/***/ 335:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,7 +135,7 @@
 
 /***/ },
 
-/***/ 329:
+/***/ 336:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/script-instance.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/script-instance.js b/android/playground/app/src/main/assets/syntax/script-instance.js
index a264d5d..cd38a7e 100644
--- a/android/playground/app/src/main/assets/syntax/script-instance.js
+++ b/android/playground/app/src/main/assets/syntax/script-instance.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "6c41d04096934acae019b2df3b52f079"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(330)
-	var __weex_style__ = __webpack_require__(331)
-	var __weex_script__ = __webpack_require__(332)
+	var __weex_template__ = __webpack_require__(337)
+	var __weex_style__ = __webpack_require__(338)
+	var __weex_script__ = __webpack_require__(339)
 
 	__weex_define__('@weex-component/e463d05fb45b7117577286bed2b723ab', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 330:
+/***/ 337:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +95,7 @@
 
 /***/ },
 
-/***/ 331:
+/***/ 338:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +106,7 @@
 
 /***/ },
 
-/***/ 332:
+/***/ 339:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/script-lifecycle.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/script-lifecycle.js b/android/playground/app/src/main/assets/syntax/script-lifecycle.js
index e1535cc..3577ae3 100644
--- a/android/playground/app/src/main/assets/syntax/script-lifecycle.js
+++ b/android/playground/app/src/main/assets/syntax/script-lifecycle.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "c11f99f8d3c490dc96c6992f5f5bd7b6"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(333)
-	var __weex_style__ = __webpack_require__(334)
-	var __weex_script__ = __webpack_require__(335)
+	var __weex_template__ = __webpack_require__(340)
+	var __weex_style__ = __webpack_require__(341)
+	var __weex_script__ = __webpack_require__(342)
 
 	__weex_define__('@weex-component/bc7273b0d417cff1bb0a2e09e3cd1c92', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 333:
+/***/ 340:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -90,7 +98,7 @@
 
 /***/ },
 
-/***/ 334:
+/***/ 341:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +109,7 @@
 
 /***/ },
 
-/***/ 335:
+/***/ 342:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/script-module.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/script-module.js b/android/playground/app/src/main/assets/syntax/script-module.js
index 6cb71c2..c26382f 100644
--- a/android/playground/app/src/main/assets/syntax/script-module.js
+++ b/android/playground/app/src/main/assets/syntax/script-module.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "20c1515f46cbdc20e6dbf5757c9d69e1"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(336)
-	var __weex_style__ = __webpack_require__(337)
-	var __weex_script__ = __webpack_require__(338)
+	var __weex_template__ = __webpack_require__(343)
+	var __weex_style__ = __webpack_require__(344)
+	var __weex_script__ = __webpack_require__(345)
 
 	__weex_define__('@weex-component/0c363fe819262ec8f8baf1e516e1d694', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 336:
+/***/ 343:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -89,7 +97,7 @@
 
 /***/ },
 
-/***/ 337:
+/***/ 344:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +113,7 @@
 
 /***/ },
 
-/***/ 338:
+/***/ 345:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/script-options.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/script-options.js b/android/playground/app/src/main/assets/syntax/script-options.js
index b494204..04fdc90 100644
--- a/android/playground/app/src/main/assets/syntax/script-options.js
+++ b/android/playground/app/src/main/assets/syntax/script-options.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "c8ba1684a83928126148c9bd95e3ff2d"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(339)
-	var __weex_style__ = __webpack_require__(340)
-	var __weex_script__ = __webpack_require__(341)
+	var __weex_template__ = __webpack_require__(346)
+	var __weex_style__ = __webpack_require__(347)
+	var __weex_script__ = __webpack_require__(348)
 
 	__weex_define__('@weex-component/d8cdc8a8832b252e92de2e6e8a50dd36', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 339:
+/***/ 346:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -86,7 +94,7 @@
 
 /***/ },
 
-/***/ 340:
+/***/ 347:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +105,7 @@
 
 /***/ },
 
-/***/ 341:
+/***/ 348:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/template-class.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/template-class.js b/android/playground/app/src/main/assets/syntax/template-class.js
index 8fff82e..dfbb288 100644
--- a/android/playground/app/src/main/assets/syntax/template-class.js
+++ b/android/playground/app/src/main/assets/syntax/template-class.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "8d85f6743409065abdc7ef05bb3fcad9"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(342)
-	var __weex_style__ = __webpack_require__(343)
-	var __weex_script__ = __webpack_require__(344)
+	var __weex_template__ = __webpack_require__(349)
+	var __weex_style__ = __webpack_require__(350)
+	var __weex_script__ = __webpack_require__(351)
 
 	__weex_define__('@weex-component/14c303543be596aa2a969ac47565db7c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 342:
+/***/ 349:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +113,7 @@
 
 /***/ },
 
-/***/ 343:
+/***/ 350:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -119,7 +127,7 @@
 
 /***/ },
 
-/***/ 344:
+/***/ 351:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/template-content.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/template-content.js b/android/playground/app/src/main/assets/syntax/template-content.js
index 0dad751..7cf9c3c 100644
--- a/android/playground/app/src/main/assets/syntax/template-content.js
+++ b/android/playground/app/src/main/assets/syntax/template-content.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "dc484501ccdc9b4e14727762dd5163a0"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,8 +53,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(345)
-	var __weex_script__ = __webpack_require__(346)
+	var __weex_template__ = __webpack_require__(352)
+	var __weex_script__ = __webpack_require__(353)
 
 	__weex_define__('@weex-component/2b26a2ba0096277f201ca0b657282838', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +71,7 @@
 
 /***/ },
 
-/***/ 345:
+/***/ 352:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,22 +93,22 @@
 
 /***/ },
 
-/***/ 346:
+/***/ 353:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(347);}
+	__webpack_require__(354);}
 	/* generated by weex-loader */
 
 
 /***/ },
 
-/***/ 347:
+/***/ 354:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(348)
-	var __weex_style__ = __webpack_require__(349)
+	var __weex_template__ = __webpack_require__(355)
+	var __weex_style__ = __webpack_require__(356)
 
 	__weex_define__('@weex-component/btn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -113,7 +121,7 @@
 
 /***/ },
 
-/***/ 348:
+/***/ 355:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +138,7 @@
 
 /***/ },
 
-/***/ 349:
+/***/ 356:
 /***/ function(module, exports) {
 
 	module.exports = {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/template-event.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/template-event.js b/android/playground/app/src/main/assets/syntax/template-event.js
index 0b054cf..b25246e 100644
--- a/android/playground/app/src/main/assets/syntax/template-event.js
+++ b/android/playground/app/src/main/assets/syntax/template-event.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "51650739705607c5b176a0532b68de48"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(350)
-	var __weex_style__ = __webpack_require__(351)
-	var __weex_script__ = __webpack_require__(352)
+	var __weex_template__ = __webpack_require__(357)
+	var __weex_style__ = __webpack_require__(358)
+	var __weex_script__ = __webpack_require__(359)
 
 	__weex_define__('@weex-component/40a248d5d833060161447365b18603fa', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 350:
+/***/ 357:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +154,7 @@
 
 /***/ },
 
-/***/ 351:
+/***/ 358:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -168,7 +176,7 @@
 
 /***/ },
 
-/***/ 352:
+/***/ 359:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/template-if.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/template-if.js b/android/playground/app/src/main/assets/syntax/template-if.js
index a753d5e..585667c 100644
--- a/android/playground/app/src/main/assets/syntax/template-if.js
+++ b/android/playground/app/src/main/assets/syntax/template-if.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "c3b1c7a4cbc2b38b5ede244b4a1ea8ec"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(353)
-	var __weex_style__ = __webpack_require__(354)
-	var __weex_script__ = __webpack_require__(355)
+	var __weex_template__ = __webpack_require__(360)
+	var __weex_style__ = __webpack_require__(361)
+	var __weex_script__ = __webpack_require__(362)
 
 	__weex_define__('@weex-component/6019f2874c768d147034c91e003e5ba4', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 353:
+/***/ 360:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +117,7 @@
 
 /***/ },
 
-/***/ 354:
+/***/ 361:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -128,7 +136,7 @@
 
 /***/ },
 
-/***/ 355:
+/***/ 362:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/template-repeat-update.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/template-repeat-update.js b/android/playground/app/src/main/assets/syntax/template-repeat-update.js
index 3317d76..fd90a8e 100644
--- a/android/playground/app/src/main/assets/syntax/template-repeat-update.js
+++ b/android/playground/app/src/main/assets/syntax/template-repeat-update.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f54326da72a6fac3bf3c2e602e3d6204"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(359)
-	var __weex_style__ = __webpack_require__(360)
-	var __weex_script__ = __webpack_require__(361)
+	var __weex_template__ = __webpack_require__(366)
+	var __weex_style__ = __webpack_require__(367)
+	var __weex_script__ = __webpack_require__(368)
 
 	__weex_define__('@weex-component/01700b62cc1ab66f2cbfd893c5c95eaf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 359:
+/***/ 366:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -124,7 +132,7 @@
 
 /***/ },
 
-/***/ 360:
+/***/ 367:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +154,7 @@
 
 /***/ },
 
-/***/ 361:
+/***/ 368:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/template-repeat.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/template-repeat.js b/android/playground/app/src/main/assets/syntax/template-repeat.js
index 5c03d53..2893faf 100644
--- a/android/playground/app/src/main/assets/syntax/template-repeat.js
+++ b/android/playground/app/src/main/assets/syntax/template-repeat.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "574c6170d0ef609cf9c922a7353e6f99"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(356)
-	var __weex_style__ = __webpack_require__(357)
-	var __weex_script__ = __webpack_require__(358)
+	var __weex_template__ = __webpack_require__(363)
+	var __weex_style__ = __webpack_require__(364)
+	var __weex_script__ = __webpack_require__(365)
 
 	__weex_define__('@weex-component/19638a010faa9c01b41851f36c4157df', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +74,7 @@
 
 /***/ },
 
-/***/ 356:
+/***/ 363:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -227,7 +235,7 @@
 
 /***/ },
 
-/***/ 357:
+/***/ 364:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -241,7 +249,7 @@
 
 /***/ },
 
-/***/ 358:
+/***/ 365:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/syntax/template-style.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/syntax/template-style.js b/android/playground/app/src/main/assets/syntax/template-style.js
index 649ee6f..52d2477 100644
--- a/android/playground/app/src/main/assets/syntax/template-style.js
+++ b/android/playground/app/src/main/assets/syntax/template-style.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "5672d4dec202bba3f7dc232058854a22"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,8 +53,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(362)
-	var __weex_script__ = __webpack_require__(363)
+	var __weex_template__ = __webpack_require__(369)
+	var __weex_script__ = __webpack_require__(370)
 
 	__weex_define__('@weex-component/301fb11cc58bbe739f3ee7ecea123456', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +71,7 @@
 
 /***/ },
 
-/***/ 362:
+/***/ 369:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +105,7 @@
 
 /***/ },
 
-/***/ 363:
+/***/ 370:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/template.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/template.js b/android/playground/app/src/main/assets/template.js
index 8f89e7c..73708d4 100644
--- a/android/playground/app/src/main/assets/template.js
+++ b/android/playground/app/src/main/assets/template.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "d4ebf93871cdaf4ecfbdcb1932fe6680"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(364)
-	var __weex_style__ = __webpack_require__(365)
-	var __weex_script__ = __webpack_require__(366)
+	var __weex_template__ = __webpack_require__(371)
+	var __weex_style__ = __webpack_require__(372)
+	var __weex_script__ = __webpack_require__(373)
 
 	__weex_define__('@weex-component/b40420dfe575cbe06a71dd757f5b9128', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -537,8 +545,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2109,7 +2116,7 @@
 
 /***/ },
 
-/***/ 364:
+/***/ 371:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2220,14 +2227,14 @@
 
 /***/ },
 
-/***/ 365:
+/***/ 372:
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
 
-/***/ 366:
+/***/ 373:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';



[17/30] incubator-weex git commit: * [android] fix * https://aone.alibaba-inc.com/project/469098/issue/10392126

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f07e6f7b/android/sdk/assets/main.js
----------------------------------------------------------------------
diff --git a/android/sdk/assets/main.js b/android/sdk/assets/main.js
index 06431c3..0373696 100644
--- a/android/sdk/assets/main.js
+++ b/android/sdk/assets/main.js
@@ -1,7 +1,7 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.19.8, Build 2017-03-07 15:18."),this.getJSFMVersion=function(){return"0.19.8"};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()}(this,function(){"use strict";function e(e){return e&&e.__esModule?e.default:e}function t(e,t){return t={exports:{}},e(t,t.exports),t.exports}function n(){if(o(),"undefined"==typeof global.console||global.WXEnvironment&&"iOS"===global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&global.nativeLog.apply(global,a(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&global.nativeLog.apply(global,a(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&global.nativeLog.apply(global,a(
 e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&global.nativeLog.apply(global,a(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&global.nativeLog.apply(global,a(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,s=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:s},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],
 t=arguments.length;t--;)e[t]=arguments[t];i("error")&&console.__ori__.error.apply(console,e)}}}function r(){Ps={},global.console=Ms}function o(){Ns.forEach(function(e){var t=Ns.indexOf(e);Ps[e]={},Ns.forEach(function(n){var r=Ns.indexOf(n);r<=t&&(Ps[e][n]=!0)})})}function i(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return Ps[t]&&Ps[t][e]}function a(e){return e.map(function(e){var t=Object.prototype.toString.call(e);return e="[object object]"===t.toLowerCase()?JSON.stringify(e):String(e)})}function s(){if("undefined"==typeof setTimeout&&"function"==typeof Rs){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Rs(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function u(){global.setTimeout=$s,global.setTimeoutCallback=null}function c(){Object.freeze(Object),Object.freeze(Array),Object.freeze(Object.prototype),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype
 ),Object.freeze(Boolean.prototype),Object.freeze(Error.prototype),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function l(e,t){e&&(Fs[e]=t)}function f(e){return Fs[e]}function d(e){delete Fs[e]}function p(e){var t=Fs[e];return t&&t.taskCenter?t.taskCenter:null}function h(){return(Ls++).toString()}function v(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,_(t,r)):(t.children.forEach(function(e){e.parentNode=t}),y(e,t),t.docId=e.id,t.ownerDocument=e,_(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),m(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function m(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 y(e,t){t.role="body",t.depth
 =1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function _(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){_(t,e)})}function g(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function b(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function w(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 O(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 x(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 E(){this.nodeId=h(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function C(e){Bs=e}function k(e,t){if(t&&t.length){var n=function(t){Bs.call(this,e,t,!0)};n.prototype=Object.create(Bs.prototype),Object.defineProperty(n.prototype,"constructor",{configurable:!1,enumerable:!1,writable:!1,value:Bs}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=p(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Vs[e]=n}}function S(e,t,n){void 0===e&&(e=Us);var r=Vs[e];return r&&!n?new r(t):(t=t||{},this.nodeType=1,this.nodeId=h(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],void(this.pureChildren=[]))}function j(e,t){var n=f(e);n.nodeMap[t.nodeId]=t}function A(){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=zs.prototype,n=function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Js(e,[{module:"dom",method:n,args:t}],"-1")}};for(var r in e)n(r);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Js(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Js(e,[{module:t,method:n,args:r}])}}function I(e,t){N(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Hs.push({name:e,options:t}))}function T(e){Hs.some(function(t,n){if(t.name===e)return Hs.splice(n,1),!0})}function N(e){return P(e)>=0}fu
 nction P(e){return Hs.map(function(e){return e.name}).indexOf(e)}function M(e){var t,n=Gs.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function $(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Hs.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 R(e,t,n,r){var o=Xs[e];if(!o){o=M(t)||{},qs[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=$(e,i,Ws),Xs[e]=i,qs[o.framework].createInstance(e,t,n,r,i)}return new Error('invalid instance id "'+e+'"')}function D(e){Ks[e]=function(){for(var t=[],n=arguments.length;n--;)t[n
 ]=arguments[n];"registerComponents"===e&&F(t[0]);for(var r in qs){var o=qs[r];o&&o[e]&&o[e].apply(o,t)}}}function F(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&k(e.type,e.methods)})}function L(e){Ks[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Xs[r];if(o&&qs[o.framework]){var i=(a=qs[o.framework])[e].apply(a,t);return"refreshInstance"===e?Hs.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:o,runtime:Ws})}):"destroyInstance"===e&&(Hs.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Ws})}),delete Xs[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function B(e,t){Ks[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Xs[r];return o&&qs[o.framework]?(i=qs[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function V(e){Ws=e||{},qs=Ws.frameworks||{},A();for(var t in qs){var n=qs[t];n.init(e)}return["registerComponents","registerModules","
 registerMethods"].forEach(D),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(L),B("receiveTasks","callJS"),Ks}function U(e){this.nodeType=8,this.nodeId=h(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function J(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] invalid parameter, handler must be a function")}function z(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function q(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=H(e,t[r],n);if(o===-1)return o}}}function W(e,t){return"dom"===e&&Qs[t]&&"function"==typeof global[Qs[t]]}function H(e,t,n){var r=t.module,o=t.method,i=t.args;return W(r,o)?global[Qs[o]].apply(global,[e].concat(i,["-
 1"])):n(e,[t],"-1")}function G(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,l(e,this),this.nodeMap={};var r=G.Listener||J;this.listener=new r(e,n||q(e,G.handler)),this.taskCenter=new zs(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:G.handler),this.createDocumentElement()}function X(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)}function K(){c(),Object.freeze(Zs.Element),Object.freeze(Zs.Comment),Object.freeze(Zs.Listener),Object.freeze(Zs.Document.prototype),Object.freeze(Zs.Element.prototype),Object.freeze(Zs.Comment.prototype),Object.freeze(Zs.Listener.prototype)}function Q(e){tu.Document=e.Document,tu.Element=e.Element,tu.Comment=e.Comment,tu.sendTasks=e.sendTasks}function Z(e){}function Y(e){}function ee(e){}function te(e,t,n){}function ne(e,t,n,r,o){var i=new tu.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCal
 lback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},nu[e]=i;var u=Object.assign({Document:tu.Document,Element:tu.Element,Comment:tu.Comment,sendTasks:tu.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);c.push(t);var d=new(Function.prototype.bind.apply(Function,[null].concat(c)));return d.apply(void 0,l)}function re(e,t){}function oe(e){delete nu[e]}function ie(e){return nu[e].body.toJSON()}function ae(e,t){var n={fireEvent:function(e,t,n,r,o){var i=nu[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){var o=nu[e];return o.handleCallback(t,n,r)}},r=nu[e];if(r&&Array.isArray(t)){var o=[];return t.forEach(function(t){var r=n[t.method],i=[].concat(t.args);"function"==typeof r&&(i.unshift(e),o.push(r.apply(void 0,i)))}),o}}function se(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function ue(e){var t=this._ids[e];if(t)return t.el}function ce(e
 ){var t=this._ids[e];if(t)return t.vm}function le(e){var t=this._app,n=t.differ;return n.then(function(){e()})}function fe(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){var r=this._app.requireModule("dom");r.scrollToElement(n.ref,{offset:t})}}function de(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){var i=this._app.requireModule("animation");i.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 pe(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 he(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead");var n=this._app.requireModule("st
 ream");n.sendHttp(e,t)}function ve(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead");var t=this._app.requireModule("event");t.openURL(e)}function me(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead");var t=this._app.requireModule("pageInfo");t.setTitle(e)}function ye(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 ge(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:
 !0,configurable:!0})}function be(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function we(e,t){return Au.call(e,t)}function Oe(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 xe(e){return null!==e&&"object"==typeof e}function Ee(e){return Iu.call(e)===Tu}function Ce(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function ke(){return"object"==typeof nativeSet?nativeSet.create():new Ys}function Se(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function je(e){var t=e.replace(Pu,"").replace(Mu,"");return t}function Ae(e){return e.replace(Ru,"")}function Ie(){this.id=Vu++,this.subs=[]}function Te(e){Ie.target&&Uu.push(Ie.target),Ie.target=e}function Ne(){Ie.target=Uu.pop()}function Pe(){Ie.target=null,Uu=[]}function Me(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=++Ju,this.active=!0
 ,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=ke(),this.newDepIds=ke(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function $e(e,t){var n,r,o,i;if(t||(t=zu,t.clear()),o=Array.isArray(e),i=xe(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--;)$e(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)$e(e[r[n]],t)}}function Re(e){if(this.value=e,this.dep=new Ie,ge(e,"__ob__",this),Array.isArray(e)){var t=Nu?De:Fe;t(e,Wu,Hu),this.observeArray(e)}else this.walk(e)}function De(e,t){e.__proto__=t}function Fe(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];ge(e,i,t[i])}}function Le(e,t){if(xe(e)){var n;return we(e,"__ob__")&&e.__ob__ instanceof Re?n=e.__ob__:(Array.isArray(e)||Ee(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Re(e)),n&&t&&n.addVm(t),n}}function Be(e,t,n){var r=new Ie,o=Object.getOwnPropertyDescriptor(e,t);if(!o||o.configurable!==!1){var i=o&&o.get,a=o&&o.set,s=Le(n);O
 bject.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Ie.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&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){var o=i?i.call(e):n;t!==o&&(a?a.call(e,t):n=t,s=Le(t),r.notify())}})}}function Ve(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(we(e,t))return void(e[t]=n);if(e._isVue)return void Ve(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];Je(i,t)}return n}function Ue(e,t){if(we(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];ze(o,t)}}}function Je(e,t){(Gu.indexOf(t)>-1||!Ce(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function ze(e,t){Ce(t)||delete e[t]}functio
 n qe(e){e._watchers=[],We(e),Ge(e),Ke(e)}function We(e){var t=e._data;Ee(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)Je(e,n[r]);Le(t,e)}function He(){}function Ge(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=Xe(r,e),o.set=He):(o.get=r.get?r.cache!==!1?Xe(r.get,e):Oe(r.get,e):He,o.set=r.set?Oe(r.set,e):He),Object.defineProperty(e,n,o)}}function Xe(e,t){var n=new Me(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Ie.target&&n.depend(),n.value}}function Ke(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Qe(e){var t=e.type,n=Ku[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Se(e[r])&&"object"===Se(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function Ze(e,t,n){ot(e,t,n.id,e),it(e,t,n.attr),st(e,t,n.classList),ut(e,t,n.style),lt(e,t,n.events)}function Ye(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.re
 duce(function(e,t){return e[t]=!0,e},{})),tt(r,i,e,t),tt(n.attr,i,e,t)}function et(e,t,n,r){void 0===r&&(r={}),rt(n.classList,e,t),nt(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function tt(e,t,n,r){if(e){var o=function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=pt(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}};for(var i in e)o(i)}}function nt(e,t,n){var r=function(r){var o=e[r];if("function"==typeof o){var i=pt(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)};for(var o in e)r(o)}function rt(e,t,n){function r(e,t){"array"===Se(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=pt(t,e,function(e){r(e,i),at(n._rootEl,o,e)});r(a,i),at(n._rootEl,o,a)}else null!=e&&(r(e,i),at(n._rootEl,o,e))}}function ot(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,wr
 itable:!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),pt(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function it(e,t,n){ft(e,t,"attr",n)}function at(e,t,n){for(var r={},o=n.length,i=function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})},a=0;a<o;a++)i(a);e.setClassStyle(r)}function st(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=pt(e,n,function(e){at(t,r,e)});at(t,r,o)}else at(t,r,n)}}function ut(e,t,n){ft(e,t,"style",n)}function ct(e,t,n,r){t.addEvent(n,Oe(r,e))}function lt(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],a||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ct(e,t,i,a)}}function ft(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?dt(e,t,n,a,s):t[Qu[n]](a,s)}}function dt(e,t,n,r,o){var i=Qu[n],a=pt(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 pt(e,t,n){if(e._static)return t.call(e,e);var r=new Me(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)});return r.value}function ht(e,t){var n=e._app.doc;return n.createBody(t)}function vt(e,t){var n=e._app.doc;return n.createElement(t)}function mt(e,t){var n=yt(e),r=_t(e),o=Zu++;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 yt(e){var t=e._app.doc,n=t.createComment("start");return n}function _t(e){var t=e._app.doc,n=t.createComment("end");return n}function gt(e,t,n){i
 f(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=bt(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 bt(e,t,n){return t.element?Ot(t,n):wt(t,n)}function wt(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function Ot(e,t){var n=t.parentNode;if(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,r!==-1}),r}}function xt(e,t,n){void 0===n&&(n=!1),t.element?Ct(t,n):Et(t),t._vm&&t._vm.$emit("hook:destroyed")}function Et(e){var t=e.parentNode;t&&t.removeChild(e)}function Ct(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||Et(e.start),n.forEach(function(e){Et(e)}),t||Et(e.end)}function kt(e){var t=e._options||
 {},n=t.template||{};t.replace?n.children&&1===n.children.length?St(e,n.children[0],e._parentEl):St(e,n.children,e._parentEl):St(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function St(e,t,n,r){var o=e._app||{};if(o.lastSignal!==-1){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),jt(t))return void Mt(e,t,n,r);if(r=r||{},At(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=mt(e,n));if(It(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!"):$t(e,t,n));if(Tt(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!"):Rt(e,t,n,r));var i=r.type||t.type;if(Nt(i,r))return void Dt(e,t,n,i,r);var a=i,s=Pt(e,t,a);if(s)return console.debu
 g("[JS Framework] compile composed component by",t),void Ft(e,s,t,n,a,r);console.debug("[JS Framework] compile native component by",t),Lt(e,t,n,a)}}function jt(e){return Array.isArray(e)}function At(e){return"content"===e.type||"slot"===e.type}function It(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Tt(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Nt(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Pt(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Mt(e,t,n,r){var o=mt(e,n);t.forEach(function(t){St(e,t,o,r)})}function $t(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=mt(e,n);c.children=[],c.data=[],c.vms=[],Vt(e,t,c,{getter:i,key:a,value:s,track
 By:u,oldStyle:o})}function Rt(e,t,n,r){var o={shown:!0},i=mt(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Ut(e,t,i,o)}function Dt(e,t,n,r,o){var i=r.call(e),a=_e({type:i},o),s=mt(e,n);n.element&&n.children&&n.children.push(s),pt(e,r,function(n){var r=_e({type:n},o);xt(e,s,!0),St(e,t,s,r)}),St(e,t,s,a)}function Ft(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),ot(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){Ye(e,this,n,i.repeat)},"hook:ready":function(){this._content&&Bt(e,n,this._content)}});et(e,s,n,r)}function Lt(e,t,n,r){Qe(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=ht(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=vt(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,Oe(c,s))}}Ze(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||{};f.lastSignal===-1||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=gt(e,o,n)),f.lastSignal!==-1&&Bt(e,t,o),f.lastSignal!==-1&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=gt(e,o,n))}function Bt(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return St(e,t,n),r.lastSignal!==-1})}function Vt(e,t,n,r){function o(e,r,o){var a;c?(a=e,xe(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=zt(o,a);i.push(s)
 ,St(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=Jt(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)):xt(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),bt(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 Ut(e,t,n,r){var o=Jt(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?St(e,t,n,r):xt(e,n,!0))});n.display=!!o,o&&St(e,t,n,r)}function Jt(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return pt(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 zt(e,t){var n=Object.create(e);return n._data=t,We(n),Ge(n),n._realParent=e,e._static&&(n._static=e._static),n}function qt(e,t){if(t instanceof qt)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 Wt(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new qt(e,t);o.forEach(function(e){e.call(n,i)})}}function Ht(e,t){var n=new qt(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Gt(e,t){var n=new qt(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}
 function Xt(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 Kt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function Qt(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]);Yu.forEach(function(t){e.$on("hook:"+t,n[t])})}function Zt(e){e.$emit=Wt,e.$dispatch=Ht,e.$broadcast=Gt,e.$on=Xt,e.$off=Kt}function Yt(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,Qt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._ini
 ted=!0,this._data="function"==typeof a?a():a,o&&_e(this._data,o),qe(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,kt(this))}function en(e,t){var n=function(n){var r=ec[n];r||(r={},ec[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})};for(var r in e)n(r)}function tn(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function nn(e,t){var n=ec[t],r={},o=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]})}})};for(var i in n)o(i);return r}function rn(e,t){var n=e.customComponentMap;return n[t]}function on(e,t,n){var r=e.customComponentMap;return r[t]?void console.error("[JS Framework] define a component("+t+") that already exists"):void(r[t]=n)}function an(e){var t=tc.valid(e);if(t)return e;e="string"==typeof e?e:"";for(var n=e.split("."),r=0,o=[];r<3;){var i="string"==typeof n[r]&&n[r]?n[r]:"0";o.push(i),r++}return o.join(".")}function sn(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n},i=e.toLowerCase();return r.errorMessage=o(e,t,n),i.indexOf("osversion")>=0?r.code=1001:i.indexOf("appversion")>=0?r.code=1002:i.indexOf("weexversion")>=0?r.code=1003:i.indexOf("devicemodel")>=0&&(r.code=1004),r}function un(e,t){t=t||global.WXEnvironment,t=Ee(t)?t:{};var n={isDowngrade:!1};if("function"===Se(e)){var r=e.call(this,t,{semver:tc,normalizeVersion:an});r=!!r,n=r?sn("custom","","custom params"):n}els
 e{e=Ee(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=an(p),v=an(t[s]);if(tc.satisfies(v,h)){n=sn(u,l,p);break}}else if(d){var m="array"===Se(p)?p:[p];if(m.indexOf(l)>=0){n=sn(u,l,p);break}}}}return n}function cn(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function ln(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Du(t))o=je(t);else{if(!Bu(t))return new Error("Wrong component name: "+t);if(o=Ae(t),!rn(e,o))return new Error("It's not a component: "+t)}if(n=Ee(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!tc.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=un(n.downgrade);return i.isDowngra
 de?(e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),
-new Error("Downgrade["+i.code+"]: "+i.errorMessage)):(n.viewport&&cn(e,n.viewport),void(e.vm=new Yt(o,null,{_app:e},null,r)))}function fn(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),on(e,t,n)}function dn(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+'"')}function pn(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&hn(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 hn(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.l
 ength;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)hn(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 vn(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function mn(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 mn(e,t,n,r)!==!1});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 yn(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 _n(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}function _n(e){e.differ.
 flush()}function gn(e,t){var n;return"array"!==Se(t)&&(t=[t]),t.forEach(function(t){n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function bn(e,t,n,r,o,i,a){console.debug("[JS Framework] Intialize an instance with:\n",n);var s,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return nc.apply(void 0,[e].concat(t))},c=function(t,r,o){s=ln(e,t,r,o||n),_n(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},l=Yt,f=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return fn.apply(void 0,[e].concat(t))},d=function(t,n){s=ln(e,t,{},n)},p=function(t){return function(n){s=ln(e,t,{},n)}},h=e.doc,v=function(t){return e.requireModule(je(t))},m={config:e.options,define:u,bootstrap:c,requireModule:v,document:h,Vm:l};Object.freeze(m);var y;"function"==typeof t?y=t.toString().substr(12):t&&(y=t.toString()),y='(function(global){\n\n"use strict";\n\n '+y+" \n\n})(Object.create(this))
 ";var _=global.WXEnvironment,g={};if(_&&"Web"!==_.platform){var b=e.requireModule("timer");Object.assign(g,{setTimeout:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=function(){e[0].apply(e,e.slice(2))};b.setTimeout(n,e[1])},setInterval:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=function(){e[0].apply(e,e.slice(2))};b.setInterval(n,e[1])},clearTimeout:function(e){b.clearTimeout(e)},clearInterval:function(e){b.clearInterval(e)}})}var w=Object.assign({define:u,require:p,bootstrap:c,register:f,render:d,__weex_define__:u,__weex_bootstrap__:c,__weex_document__:h,__weex_require__:v,__weex_viewmodel__:l,weex:m},g,r);return On(w,y,o,i,a)||wn(w,y),s}function wn(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t);var i=new(Function.prototype.bind.apply(Function,[null].concat(n)));return i.apply(void 0,r)}function On(e,t,n,r,o){if("function"!=typeof compileAndRunBundle)return!1;var i=void 0,a=!1,s="(function (",u=[],c=[];for(v
 ar l in e)u.push(l),c.push(e[l]);for(var f=0;f<u.length-1;++f)s+=u[f],s+=",";s+=u[u.length-1],s+=") {",s+=t,s+="} )";try{i=compileAndRunBundle(s,n,r,o),i&&"function"==typeof i&&(i.apply(void 0,c),a=!0)}catch(e){console.error(e)}return a}function xn(e,t){var n=e[t];for(var r in n)n[r]()}function En(e,t){var n=e[t];for(var r in n){var o=n[r];o.forEach(function(e){e()})}}function Cn(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new Xu.Document(e,this.options.bundleUrl,null,Xu.Listener),this.differ=new rc(e)}function kn(e,t,n,r,o){var i=o||{},a=i.services;Pe();var s=oc[e];n=n||{};var u;return s?u=new Error('invalid instance id "'+e+'"'):(s=new Cn(e,n),oc[e]=s,u=bn(s,t,r,a,n.bundleUrl,n.bundleDigest,n.codeCachePath)),u}function Sn(e){Xu.Document=e.Document,Xu.Element=e.Element,Xu.Comment=e.Comment,Xu.sendTasks=e.sendTasks,Xu.Listener=e.Listener}function jn(e,t){var n,r=oc[e];return n=r?dn(r,t):new Error('invalid instance id "'+e+
 '"')}function An(e){Pe();var t=oc[e];return t?(pn(t),delete oc[e],oc):new Error('invalid instance id "'+e+'"')}function In(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?ic[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(ic[e.type]=e))})}function Tn(e){"object"==typeof e&&en(e)}function Nn(e){"object"==typeof e&&tn(Yt,e)}function Pn(e,t){var n=oc[e];if(n&&Array.isArray(t)){var r=[];return t.forEach(function(t){var n=ac[t.method],o=[].concat(t.args);"function"==typeof n&&(o.unshift(e),r.push(n.apply(void 0,o)))}),r}return new Error('invalid instance id "'+e+'" or tasks')}function Mn(e){var t,n=oc[e];return t=n?vn(n):new Error('invalid instance id "'+e+'"')}function $n(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 Rn(){}var Dn={browser:"0.5.0",framework:"0.19.8",transformer:">=0.1.5 <0.5"};Array.from||(Array.from=
 function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},r=Math.pow(2,53)-1,o=function(e){var t=n(e);return Math.min(Math.max(t,0),r)};return function(e){var n=this,r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if("undefined"!=typeof a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var s,u=o(r.length),c=t(n)?Object(new n(u)):new Array(u),l=0;l<u;)s=r[l],a?c[l]="undefined"==typeof i?a(s,l):a.call(i,s,l):c[l]=s,l+=1;return c.length=u,c}}());var Fn="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},Ln=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==M
 ath?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),Bn=t(function(e){var t=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=t)}),Vn=function(e){return"object"==typeof e?null!==e:"function"==typeof e},Un=Vn,Jn=function(e){if(!Un(e))throw TypeError(e+" is not an object!");return e},zn=function(e){try{return!!e()}catch(e){return!0}},qn=!zn(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),Wn=Vn,Hn=Ln.document,Gn=Wn(Hn)&&Wn(Hn.createElement),Xn=function(e){return Gn?Hn.createElement(e):{}},Kn=!qn&&!zn(function(){return 7!=Object.defineProperty(Xn("div"),"a",{get:function(){return 7}}).a}),Qn=Vn,Zn=function(e,t){if(!Qn(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!Qn(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!Qn(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!Qn(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")
 },Yn=Jn,er=Kn,tr=Zn,nr=Object.defineProperty,rr=qn?Object.defineProperty:function(e,t,n){if(Yn(e),t=tr(t,!0),Yn(n),er)try{return nr(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},or={f:rr},ir=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},ar=or,sr=ir,ur=qn?function(e,t,n){return ar.f(e,t,sr(1,n))}:function(e,t,n){return e[t]=n,e},cr={}.hasOwnProperty,lr=function(e,t){return cr.call(e,t)},fr=0,dr=Math.random(),pr=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++fr+dr).toString(36))},hr=t(function(e){var t=Ln,n=ur,r=lr,o=pr("src"),i="toString",a=Function[i],s=(""+a).split(i);Bn.inspectSource=function(e){return a.call(e)},(e.exports=function(e,i,a,u){var c="function"==typeof a;c&&(r(a,"name")||n(a,"name",i)),e[i]!==a&&(c&&(r(a,o)||n(a,o,e[i]?""+e[i]:s.join(String(i)))),e===t?e[i]=a:u?e[i]?e[i]=a:n(e,i,a):(delete e[i],n(e,i,a)))})(Function.prototype,i,function(){ret
 urn"function"==typeof this&&this[o]||a.call(this)})}),vr=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},mr=vr,yr=function(e,t,n){if(mr(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},_r=Ln,gr=Bn,br=ur,wr=hr,Or=yr,xr="prototype",Er=function(e,t,n){var r,o,i,a,s=e&Er.F,u=e&Er.G,c=e&Er.S,l=e&Er.P,f=e&Er.B,d=u?_r:c?_r[t]||(_r[t]={}):(_r[t]||{})[xr],p=u?gr:gr[t]||(gr[t]={}),h=p[xr]||(p[xr]={});u&&(n=t);for(r in n)o=!s&&d&&void 0!==d[r],i=(o?d:n)[r],a=f&&o?Or(i,_r):l&&"function"==typeof i?Or(Function.call,i):i,d&&wr(d,r,i,e&Er.U),p[r]!=i&&br(p,r,a),l&&h[r]!=i&&(h[r]=i)};_r.core=gr,Er.F=1,Er.G=2,Er.S=4,Er.P=8,Er.B=16,Er.W=32,Er.U=64,Er.R=128;var Cr=Er,kr={}.toString,Sr=function(e){return kr.call(e).slice(8,-1)},jr=Sr,Ar=Object("z").propertyIsEnumerable(0)?Object:function
 (e){return"String"==jr(e)?e.split(""):Object(e)},Ir=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},Tr=Ar,Nr=Ir,Pr=function(e){return Tr(Nr(e))},Mr=Math.ceil,$r=Math.floor,Rr=function(e){return isNaN(e=+e)?0:(e>0?$r:Mr)(e)},Dr=Rr,Fr=Math.min,Lr=function(e){return e>0?Fr(Dr(e),9007199254740991):0},Br=Rr,Vr=Math.max,Ur=Math.min,Jr=function(e,t){return e=Br(e),e<0?Vr(e+t,0):Ur(e,t)},zr=Pr,qr=Lr,Wr=Jr,Hr=function(e){return function(t,n,r){var o,i=zr(t),a=qr(i.length),s=Wr(r,a);if(e&&n!=n){for(;a>s;)if(o=i[s++],o!=o)return!0}else for(;a>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}},Gr=Ln,Xr="__core-js_shared__",Kr=Gr[Xr]||(Gr[Xr]={}),Qr=function(e){return Kr[e]||(Kr[e]={})},Zr=Qr("keys"),Yr=pr,eo=function(e){return Zr[e]||(Zr[e]=Yr(e))},to=lr,no=Pr,ro=Hr(!1),oo=eo("IE_PROTO"),io=function(e,t){var n,r=no(e),o=0,i=[];for(n in r)n!=oo&&to(r,n)&&i.push(n);for(;t.length>o;)to(r,n=t[o++])&&(~ro(i,n)||i.push(n));return i},ao="constructor,hasOwnPrope
 rty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),so=io,uo=ao,co=Object.keys||function(e){return so(e,uo)},lo=Object.getOwnPropertySymbols,fo={f:lo},po={}.propertyIsEnumerable,ho={f:po},vo=Ir,mo=function(e){return Object(vo(e))},yo=co,_o=fo,go=ho,bo=mo,wo=Ar,Oo=Object.assign,xo=!Oo||zn(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=Oo({},e)[n]||Object.keys(Oo({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=bo(e),o=arguments.length,i=1,a=_o.f,s=go.f;o>i;)for(var u,c=wo(n[i++]),l=a?yo(c).concat(a(c)):yo(c),f=l.length,d=0;f>d;)s.call(c,u=l[d++])&&(r[u]=c[u]);return r}:Oo,Eo=Cr;Eo(Eo.S+Eo.F,"Object",{assign:xo}),Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){function n(e,t){return r.call(e,t),e}var r;try{r=e.getOwnPropertyDescriptor(e.prototype,t).set,r.call({},null)}catch(o){if(e.prototype!=={}[t]||void 0==={__proto__:null}.__proto__)return;r=function(e){this[t
 ]=e},n.polyfill=n(n({},null),e.prototype)instanceof e}return n}(Object,"__proto__"));var Co=Fn,ko=Co.WXEnvironment;ko&&"iOS"===ko.platform&&(Fn.Promise=void 0);var So=t(function(e){var t=Qr("wks"),n=pr,r=Ln.Symbol,o="function"==typeof r,i=e.exports=function(e){return t[e]||(t[e]=o&&r[e]||(o?r:n)("Symbol."+e))};i.store=t}),jo=Sr,Ao=So("toStringTag"),Io="Arguments"==jo(function(){return arguments}()),To=function(e,t){try{return e[t]}catch(e){}},No=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=To(t=Object(e),Ao))?n:Io?jo(t):"Object"==(r=jo(t))&&"function"==typeof t.callee?"Arguments":r},Po=No,Mo={};Mo[So("toStringTag")]="z",Mo+""!="[object z]"&&hr(Object.prototype,"toString",function(){return"[object "+Po(this)+"]"},!0);var $o=Rr,Ro=Ir,Do=function(e){return function(t,n){var r,o,i=String(Ro(t)),a=$o(n),s=i.length;return a<0||a>=s?e?"":void 0:(r=i.charCodeAt(a),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?e?i.charAt(a):r:e?i.sl
 ice(a,a+2):(r-55296<<10)+(o-56320)+65536)}},Fo=!1,Lo={},Bo=or,Vo=Jn,Uo=co,Jo=qn?Object.defineProperties:function(e,t){Vo(e);for(var n,r=Uo(t),o=r.length,i=0;o>i;)Bo.f(e,n=r[i++],t[n]);return e},zo=Ln.document&&document.documentElement,qo=Jn,Wo=Jo,Ho=ao,Go=eo("IE_PROTO"),Xo=function(){},Ko="prototype",Qo=function(){var e,t=Xn("iframe"),n=Ho.length,r="<",o=">";for(t.style.display="none",zo.appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+o+"document.F=Object"+r+"/script"+o),e.close(),Qo=e.F;n--;)delete Qo[Ko][Ho[n]];return Qo()},Zo=Object.create||function(e,t){var n;return null!==e?(Xo[Ko]=qo(e),n=new Xo,Xo[Ko]=null,n[Go]=e):n=Qo(),void 0===t?n:Wo(n,t)},Yo=or.f,ei=lr,ti=So("toStringTag"),ni=function(e,t,n){e&&!ei(e=n?e:e.prototype,ti)&&Yo(e,ti,{configurable:!0,value:t})},ri=Zo,oi=ir,ii=ni,ai={};ur(ai,So("iterator"),function(){return this});var si=function(e,t,n){e.prototype=ri(ai,{next:oi(1,n)}),ii(e,t+" Iterator")},ui=lr,ci=mo,li=eo("IE_PROTO"
 ),fi=Object.prototype,di=Object.getPrototypeOf||function(e){return e=ci(e),ui(e,li)?e[li]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?fi:null},pi=Fo,hi=Cr,vi=hr,mi=ur,yi=lr,_i=Lo,gi=si,bi=ni,wi=di,Oi=So("iterator"),xi=!([].keys&&"next"in[].keys()),Ei="@@iterator",Ci="keys",ki="values",Si=function(){return this},ji=function(e,t,n,r,o,i,a){gi(n,t,r);var s,u,c,l=function(e){if(!xi&&e in h)return h[e];switch(e){case Ci:return function(){return new n(this,e)};case ki:return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d=o==ki,p=!1,h=e.prototype,v=h[Oi]||h[Ei]||o&&h[o],m=v||l(o),y=o?d?l("entries"):m:void 0,_="Array"==t?h.entries||v:v;if(_&&(c=wi(_.call(new e)),c!==Object.prototype&&(bi(c,f,!0),pi||yi(c,Oi)||mi(c,Oi,Si))),d&&v&&v.name!==ki&&(p=!0,m=function(){return v.call(this)}),pi&&!a||!xi&&!p&&h[Oi]||mi(h,Oi,m),_i[t]=m,_i[f]=Si,o)if(s={values:d?m:l(ki),keys:i?m:l(Ci),entries:y},a)f
 or(u in s)u in h||vi(h,u,s[u]);else hi(hi.P+hi.F*(xi||p),t,s);return s},Ai=Do(!0);ji(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Ai(t,n),this._i+=e.length,{value:e,done:!1})});var Ii=So("unscopables"),Ti=Array.prototype;void 0==Ti[Ii]&&ur(Ti,Ii,{});var Ni=function(e){Ti[Ii][e]=!0},Pi=function(e,t){return{value:t,done:!!e}},Mi=Ni,$i=Pi,Ri=Lo,Di=Pr,Fi=ji(Array,"Array",function(e,t){this._t=Di(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$i(1)):"keys"==t?$i(0,n):"values"==t?$i(0,e[n]):$i(0,[n,e[n]])},"values");Ri.Arguments=Ri.Array,Mi("keys"),Mi("values"),Mi("entries");for(var Li=Fi,Bi=hr,Vi=Ln,Ui=ur,Ji=Lo,zi=So,qi=zi("iterator"),Wi=zi("toStringTag"),Hi=Ji.Array,Gi=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],Xi=0;Xi<5;Xi++){var Ki,Qi=Gi[Xi],Zi=Vi[Qi],Yi=Zi&&Zi.prototype;if(Yi){Yi[qi]||Ui(Yi,qi,Hi),Yi[Wi
 ]||Ui(Yi,Wi,Qi),Ji[Qi]=Hi;for(Ki in Li)Yi[Ki]||Bi(Yi,Ki,Li[Ki],!0)}}var ea,ta,na,ra=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},oa=Jn,ia=function(e,t,n,r){try{return r?t(oa(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&oa(o.call(e)),t}},aa=Lo,sa=So("iterator"),ua=Array.prototype,ca=function(e){return void 0!==e&&(aa.Array===e||ua[sa]===e)},la=No,fa=So("iterator"),da=Lo,pa=Bn.getIteratorMethod=function(e){if(void 0!=e)return e[fa]||e["@@iterator"]||da[la(e)]},ha=t(function(e){var t=yr,n=ia,r=ca,o=Jn,i=Lr,a=pa,s={},u={},c=e.exports=function(e,c,l,f,d){var p,h,v,m,y=d?function(){return e}:a(e),_=t(l,f,c?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(r(y)){for(p=i(e.length);p>g;g++)if(m=c?_(o(h=e[g])[0],h[1]):_(e[g]),m===s||m===u)return m}else for(v=y.call(e);!(h=v.next()).done;)if(m=n(v,_,h.value,c),m===s||m===u)return m};c.BREAK=s,c.RETURN=u}),va=Jn,ma=vr,ya=So("species"),_a=
 function(e,t){var n,r=va(e).constructor;return void 0===r||void 0==(n=va(r)[ya])?t:ma(n)},ga=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},ba=yr,wa=ga,Oa=zo,xa=Xn,Ea=Ln,Ca=Ea.process,ka=Ea.setImmediate,Sa=Ea.clearImmediate,ja=Ea.MessageChannel,Aa=0,Ia={},Ta="onreadystatechange",Na=function(){var e=+this;if(Ia.hasOwnProperty(e)){var t=Ia[e];delete Ia[e],t()}},Pa=function(e){Na.call(e.data)};ka&&Sa||(ka=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return Ia[++Aa]=function(){wa("function"==typeof e?e:Function(e),n)},ea(Aa),Aa},Sa=function(e){delete Ia[e]},"process"==Sr(Ca)?ea=function(e){Ca.nextTick(ba(Na,e,1))}:ja?(ta=new ja,na=ta.port2,ta.port1.onmessage=Pa,ea=ba(na.postMessage,na,1)):Ea
 .addEventListener&&"function"==typeof postMessage&&!Ea.importScripts?(ea=function(e){Ea.postMessage(e+"","*")},Ea.addEventListener("message",Pa,!1)):ea=Ta in xa("script")?function(e){Oa.appendChild(xa("script"))[Ta]=function(){Oa.removeChild(this),Na.call(e)}}:function(e){setTimeout(ba(Na,e,1),0)});var Ma={set:ka,clear:Sa},$a=Ln,Ra=Ma.set,Da=$a.MutationObserver||$a.WebKitMutationObserver,Fa=$a.process,La=$a.Promise,Ba="process"==Sr(Fa),Va=function(){var e,t,n,r=function(){var r,o;for(Ba&&(r=Fa.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(Ba)n=function(){Fa.nextTick(r)};else if(Da){var o=!0,i=document.createTextNode("");new Da(r).observe(i,{characterData:!0}),n=function(){i.data=o=!o}}else if(La&&La.resolve){var a=La.resolve();n=function(){a.then(r)}}else n=function(){Ra.call($a,r)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}},Ua=hr,Ja=function(e,t,n){for(var r in t)Ua(e,r,t[r],n);return e},za
 =Ln,qa=or,Wa=qn,Ha=So("species"),Ga=function(e){var t=za[e];Wa&&t&&!t[Ha]&&qa.f(t,Ha,{configurable:!0,get:function(){return this}})},Xa=So("iterator"),Ka=!1;try{var Qa=[7][Xa]();Qa.return=function(){Ka=!0},Array.from(Qa,function(){throw 2})}catch(e){}var Za,Ya,es,ts=function(e,t){if(!t&&!Ka)return!1;var n=!1;try{var r=[7],o=r[Xa]();o.next=function(){return{done:n=!0}},r[Xa]=function(){return o},e(r)}catch(e){}return n},ns=Fo,rs=Ln,os=yr,is=No,as=Cr,ss=Vn,us=vr,cs=ra,ls=ha,fs=_a,ds=Ma.set,ps=Va(),hs="Promise",vs=rs.TypeError,ms=rs.process,ys=rs[hs],ms=rs.process,_s="process"==is(ms),gs=function(){},bs=!!function(){try{var e=ys.resolve(1),t=(e.constructor={})[So("species")]=function(e){e(gs,gs)};return(_s||"function"==typeof PromiseRejectionEvent)&&e.then(gs)instanceof t}catch(e){}}(),ws=function(e,t){return e===t||e===ys&&t===es},Os=function(e){var t;return!(!ss(e)||"function"!=typeof(t=e.then))&&t},xs=function(e){return ws(ys,e)?new Es(e):new Ya(e)},Es=Ya=function(e){var t,n;this.pr
 omise=new e(function(e,r){if(void 0!==t||void 0!==n)throw vs("Bad Promise constructor");t=e,n=r}),this.resolve=us(t),this.reject=us(n)},Cs=function(e){try{e()}catch(e){return{error:e}}},ks=function(e,t){if(!e._n){e._n=!0;var n=e._c;ps(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&As(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(vs("Promise-chain cycle")):(i=Os(n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&Ss(e)})}},Ss=function(e){ds.call(rs,function(){var t,n,r,o=e._v;if(js(e)&&(t=Cs(function(){_s?ms.emit("unhandledRejection",o,e):(n=rs.onunhandledrejection)?n({promise:e,reason:o}):(r=rs.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=_s||js(e)?2:1),e._a=void 0,t)throw t.error})},js=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!js(t.promise))return!1;return!0},As
 =function(e){ds.call(rs,function(){var t;_s?ms.emit("rejectionHandled",e):(t=rs.onrejectionhandled)&&t({promise:e,reason:e._v})})},Is=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),ks(t,!0))},Ts=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw vs("Promise can't be resolved itself");(t=Os(e))?ps(function(){var r={_w:n,_d:!1};try{t.call(e,os(Ts,r,1),os(Is,r,1))}catch(e){Is.call(r,e)}}):(n._v=e,n._s=1,ks(n,!1))}catch(e){Is.call({_w:n,_d:!1},e)}}};bs||(ys=function(e){cs(this,ys,hs,"_h"),us(e),Za.call(this);try{e(os(Ts,this,1),os(Is,this,1))}catch(e){Is.call(this,e)}},Za=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},Za.prototype=Ja(ys.prototype,{then:function(e,t){var n=xs(fs(this,ys));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=_s?ms.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&ks(this,!1),n.promise},catch:function(e){return
  this.then(void 0,e)}}),Es=function(){var e=new Za;this.promise=e,this.resolve=os(Ts,e,1),this.reject=os(Is,e,1)}),as(as.G+as.W+as.F*!bs,{Promise:ys}),ni(ys,hs),Ga(hs),es=Bn[hs],as(as.S+as.F*!bs,hs,{reject:function(e){var t=xs(this),n=t.reject;return n(e),t.promise}}),as(as.S+as.F*(ns||!bs),hs,{resolve:function(e){if(e instanceof ys&&ws(e.constructor,this))return e;var t=xs(this),n=t.resolve;return n(e),t.promise}}),as(as.S+as.F*!(bs&&ts(function(e){ys.all(e).catch(gs)})),hs,{all:function(e){var t=this,n=xs(t),r=n.resolve,o=n.reject,i=Cs(function(){var n=[],i=0,a=1;ls(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=xs(t),r=n.reject,o=Cs(function(){ls(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}});var Ns=["off","error","warn","info","log","debug"],Ps={},Ms=global.console,$s=global.setTimeout,Rs=global.setTim
 eoutNative;s();var Ds=function(e){this.instanceId=e,this.lastCallbackId=0,this.callbacks=[]};Ds.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},Ds.prototype.remove=function(e){var t=this.callbacks[e];return this.callbacks[e]=void 0,t},Ds.prototype.consume=function(e,t,n){var r=this.callbacks[e];return"undefined"!=typeof n&&n!==!1||(this.callbacks[e]=void 0),"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},Ds.prototype.close=function(){this.callbacks=this.callbacks.map(function(e){})};var Fs={},Ls=1;E.prototype.destroy=function(){var e=f(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var Bs,Vs={},Us="div";S.prototype=Object.create(E.prototype),S.prototype.constructor=S,C(S),Object.assign(S.prototype,{appendChild:function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(O(e,this.children,this.children.length,!0),1===e.nodeT
 ype){var t=O(e,this.pureChildren,this.pureChildren.length),n=p(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(_(e,this),w(e,this.children,this.children.length,!0),this.docId&&j(this.docId,e),1===e.nodeType){w(e,this.pureChildren,this.pureChildren.length);var r=p(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},insertBefore:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(O(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=g(t),r=O(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=p(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(_(e,this),w(e,this.children,this.children.indexOf(t),!0),this.docId&&j(this.docId,e),1===e.nodeType){var i=g(t),a=w(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=p(this.docId);if(s)ret
 urn s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},insertAfter:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(O(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=O(e,this.pureChildren,this.pureChildren.indexOf(b(t))+1),r=p(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(_(e,this),w(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&j(this.docId,e),1===e.nodeType){var o=w(e,this.pureChildren,this.pureChildren.indexOf(b(t))+1),i=p(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},removeChild:function(e,t){if(e.parentNode&&(x(e,this.children,!0),1===e.nodeType)){x(e,this.pureChildren);var n=p(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},clear:function(){var e=p(this.docId);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.re
 f])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},setAttr:function(e,t,n){if(this.attr[e]!==t||n===!1){this.attr[e]=t;var r=p(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},setStyle:function(e,t,n){if(this.style[e]!==t||n===!1){this.style[e]=t;var r=p(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},setClassStyle:function(e){var t=this;for(var n in this.classStyle)t.classStyle[n]="";Object.assign(this.classStyle,e);var r=p(this.docId);r&&r.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},addEvent:function(e,t){if(!this.event[e]){this.event[e]=t;var n=p(this.docId);n&&n.send("dom",{action:"addEvent"},[this.ref,e])}},removeEvent:function(e){if(this.event[e]){delete this.event[e];var t=p(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},fireEvent:function(e,t){var n=this.event[e];if(n)return n.call(this,t)},toStyle:fu
 nction(){return Object.assign({},this.classStyle,this.style)},toJSON:function(){var e={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},t=Object.keys(this.event);return t.length&&(e.event=t),this.pureChildren.length&&(e.children=this.pureChildren.map(function(e){return e.toJSON()})),e},toString:function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"}});var Js=function(){},zs=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:e}),Object.defineProperty(this,"callbackManager",{enumerable:!0,value:new Ds}),Js=t||function(){}};zs.prototype.callback=function(e,t,n){return this.callbackManager.consume(e,t,n)},zs.prototype.destroyCallback=function(){return this.callbackManager.close()},zs.prototype.typof=function(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()},z
 s.prototype.normalize=function(e){var t=this.typof(e);switch(t){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof S?e.ref:e;case"function":return this.callbackManager.add(e).toString();default:return JSON.stringify(e)}},zs.prototype.send=function(e,t,n){var r=this,o=t.action,i=t.component,a=t.ref,s=t.module,u=t.method;switch(n=n.map(function(e){return r.normalize(e)}),e){case"dom":return this[o](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,a,u,n,{component:i});default:return this.moduleHandler(this.instanceId,s,u,n,{})}},zs.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},zs.prototype.callComponent=function(e,t,n){return this.componentHandler(this.instanceId,e,t,n,{})},zs.prototype.callModule=function(e,t,n){return this.moduleHandler(this.instanceId,e,t,n,{})};var qs,Ws,Hs=[],Gs=/^\s*\/\/ *(\{[^
 }]*\}) *\r?\n/,Xs={},Ks={createInstance:R,registerService:I,unregisterService:T};U.prototype=Object.create(E.prototype),U.prototype.constructor=U,U.prototype.toString=function(){return"<!-- "+this.value+" -->"},Object.assign(J.prototype,{createFinish:function(e){var t=this.handler;return t([z("createFinish")],e)},updateFinish:function(e){var t=this.handler;return t([z("updateFinish")],e)},refreshFinish:function(e){var t=this.handler;return t([z("refreshFinish")],e)},createBody:function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[z("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return z("addElement",[t.ref,e,-1])})),this.addActions(r)},addElement:function(e,t,n){return n>=0||(n=-1),this.addActions(z("addElement",[t,e.toJSON(),n]))},removeElement:function(e){if(Array.isArray(e)){var t=e.map(function(e){return z("removeElement",[e])});return this.addActions(t)}return this.addActions(z("removeElement",[e]))},moveElement:function(e,t,n){return this.addActions
 (z("moveElement",[e,t,n]))},setAttr:function(e,t,n){var r={};return r[t]=n,this.addActions(z("updateAttrs",[e,r]))},setStyle:function(e,t,n){var r={};return r[t]=n,this.addActions(z("updateStyle",[e,r]))},setStyles:function(e,t){return this.addActions(z("updateStyle",[e,t]))},addEvent:function(e,t){return this.addActions(z("addEvent",[e,t]))},removeEvent:function(e,t){return this.addActions(z("removeEvent",[e,t]))},handler:function(e,t){return t&&t()},addActions:function(e){var t=this.updates,n=this.handler;return Array.isArray(e)||(e=[e]),this.batched?void t.push.apply(t,e):n(e)}});var Qs={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};G.handler=null,Object.assign(G.prototype,{getRef:function(e){return this.nodeMap[e]},open:function(){this.listener.batched=!1},close:function(){this.listener.batche
 d=!0},createDocumentElement:function(){var e=this;if(!this.documentElement){var t=new S("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){v(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){v(e,t,n)}})}return this.documentElement},createBody:function(e,t){if(!this.body){var n=new S(e,t);y(this,n)}return this.body},createElement:function(e,t){return new S(e,t)},createComment:function(e){return new U(e)},fireEvent:function(e,t,n,r){if(e)return n=n||{},n.type=t,n.target=e,n.timestamp=Date.now(),r&&X(e,r),e.fireEvent(t,n)},destroy:function(){delete this.listener,delete this.nodeMap,d(this.id)}});var Zs={Document:G,Element:S,Comment:U,Listener:J,TaskCenter:zs,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t
 ]=arguments[t];return global.callNative.apply(global,e)}};G.handler=Zs.sendTasks;var Ys,eu={setNativeConsole:n,
-resetNativeConsole:r,setNativeTimer:s,resetNativeTimer:u,service:{register:I,unregister:T,has:N},freezePrototype:K,init:V,config:Zs},tu={},nu={},ru=Q,ou=Z,iu=Y,au=ee,su=te,uu=ne,cu=re,lu=oe,fu=ie,du=ae,pu={init:ru,registerComponents:ou,registerModules:iu,registerMethods:au,prepareInstance:su,createInstance:uu,refreshInstance:cu,destroyInstance:lu,getRoot:fu,receiveTasks:du},hu=Object.freeze({default:pu,__moduleExports:pu,init:ru,registerComponents:ou,registerModules:iu,registerMethods:au,prepareInstance:su,createInstance:uu,refreshInstance:cu,destroyInstance:lu,getRoot:fu,receiveTasks:du}),vu=t(function(e,t){function n(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function r(e){var t=parseFloat(e,10);return t||0===t?t:e}function o(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 i(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,
 1)}}function a(e,t){return Xt.call(e,t)}function s(e){return"string"==typeof e||"number"==typeof e}function u(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function c(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 l(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){return null!==e&&"object"==typeof e}function p(e){return tn.call(e)===nn}function h(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function v(){}function m(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}function y(e,t){var n=d(e),r=d(t);return n&&r?JSON.stringify(e)===JSON.stringify(t):!n&&!r&&String(e)===String(t)}function _(e,t){for(var n=0;n<e.length;n++)if(y(e[n],t))return n;return-1}function g(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function b(e,t,n,
 r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function w(e){if(!sn.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 O(e){return/native code/.test(e.toString())}function x(e){On.target&&xn.push(On.target),On.target=e}function E(){On.target=xn.pop()}function C(e,t){e.__proto__=t}function k(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];b(e,i,t[i])}}function S(e,t){if(d(e)){var n;return a(e,"__ob__")&&e.__ob__ instanceof jn?n=e.__ob__:Sn.shouldConvert&&!mn()&&(Array.isArray(e)||p(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new jn(e)),t&&n&&n.vmCount++,n}}function j(e,t,n,r){var o=new On,i=Object.getOwnPropertyDescriptor(e,t);if(!i||i.configurable!==!1){var a=i&&i.get,s=i&&i.set,u=S(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return On.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&T(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=S(t),o.notify())}})}}function A(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(a(e,t))return void(e[t]=n);var r=e.__ob__;if(!(e._isVue||r&&r.vmCount))return r?(j(r.value,t,n),r.dep.notify(),n):void(e[t]=n)}function I(e,t){var n=e.__ob__;e._isVue||n&&n.vmCount||a(e,t)&&(delete e[t],n&&n.dep.notify())}function T(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)&&T(t)}function N(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),s=0;s<i.length;s++)n=i[s],r=e[n],o=t[n],a(e,n)?p(r)&&p(o)&&N(r,o):A(e,n,o);return e}function P(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function M(e,t){var n=Object.create(e||null);return t?f(n,t):n}function $(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)r=t[n],"string"==typeof r&&(o=Qt(r),i[o]={type:null});else if(p(t))for(var a in t)r=t[a],o=Qt(a),i[o]=p(r)?r:{type:r};e.props=i}}f
 unction R(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function D(e,t,n){function r(r){var o=An[r]||In;l[r]=o(e[r],t[r],n,r)}$(t),R(t);var o=t.extends;if(o&&(e="function"==typeof o?D(e,o.options,n):D(e,o,n)),t.mixins)for(var i=0,s=t.mixins.length;i<s;i++){var u=t.mixins[i];u.prototype instanceof ze&&(u=u.options),e=D(e,u,n)}var c,l={};for(c in e)r(c);for(c in t)a(e,c)||r(c);return l}function F(e,t,n,r){if("string"==typeof n){var o=e[t];if(a(o,n))return o[n];var i=Qt(n);if(a(o,i))return o[i];var s=Zt(i);if(a(o,s))return o[s];var u=o[n]||o[i]||o[s];return u}}function L(e,t,n,r){var o=t[e],i=!a(n,e),s=n[e];if(U(Boolean,o.type)&&(i&&!a(o,"default")?s=!1:U(String,o.type)||""!==s&&s!==en(e)||(s=!0)),void 0===s){s=B(r,o,e);var u=Sn.shouldConvert;Sn.shouldConvert=!0,S(s),Sn.shouldConvert=u}return s}function B(e,t,n){if(a(t,"default")){var r=t.default;return d(r),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e[n]?
 e[n]:"function"==typeof r&&t.type!==Function?r.call(e):r}}function V(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function U(e,t){if(!Array.isArray(t))return V(t)===V(e);for(var n=0,r=t.length;n<r;n++)if(V(t[n])===V(e))return!0;return!1}function J(){Nn.length=0,Pn={},Mn=$n=!1}function z(){for($n=!0,Nn.sort(function(e,t){return e.id-t.id}),Rn=0;Rn<Nn.length;Rn++){var e=Nn[Rn],t=e.id;Pn[t]=null,e.run()}yn&&an.devtools&&yn.emit("flush"),J()}function q(e){var t=e.id;if(null==Pn[t]){if(Pn[t]=!0,$n){for(var n=Nn.length-1;n>=0&&Nn[n].id>e.id;)n--;Nn.splice(Math.max(n,Rn)+1,0,e)}else Nn.push(e);Mn||(Mn=!0,_n(z))}}function W(e){Vn.clear(),H(e,Vn)}function H(e,t){var n,r,o=Array.isArray(e);if((o||d(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--;)H(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)H(e[r[n]],t)}}function G(e){e._watchers=[];var t=e.$options;t.props&&X(e,t.props),t.methods&&Y(e,t.methods)
 ,t.data?K(e):S(e._data={},!0),t.computed&&Q(e,t.computed),t.watch&&ee(e,t.watch)}function X(e,t){var n=e.$options.propsData||{},r=e.$options._propKeys=Object.keys(t),o=!e.$parent;Sn.shouldConvert=o;for(var i=function(o){var i=r[o];j(e,i,L(i,t,n,e))},a=0;a<r.length;a++)i(a);Sn.shouldConvert=!0}function K(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},p(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&a(r,n[o])||re(e,n[o]);S(t,!0)}function Q(e,t){for(var n in t){var r=t[n];"function"==typeof r?(Un.get=Z(r,e),Un.set=v):(Un.get=r.get?r.cache!==!1?Z(r.get,e):c(r.get,e):v,Un.set=r.set?c(r.set,e):v),Object.defineProperty(e,n,Un)}}function Z(e,t){var n=new Ln(t,e,v,{lazy:!0});return function(){return n.dirty&&n.evaluate(),On.target&&n.depend(),n.value}}function Y(e,t){for(var n in t)e[n]=null==t[n]?v:c(t[n],e)}function ee(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)te(e,n,r[o]);else te(e,n,r)}}function te(e
 ,t,n){var r;p(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function ne(e){var t={};t.get=function(){return this._data},Object.defineProperty(e.prototype,"$data",t),e.prototype.$set=A,e.prototype.$delete=I,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var o=new Ln(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}function re(e,t){g(t)||Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function oe(e){return new Jn(void 0,void 0,void 0,String(e))}function ie(e){var t=new Jn(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.isCloned=!0,t}function ae(e){for(var t=new Array(e.length),n=0;n<e.length;n++)t[n]=ie(e[n]);return t}function se(e,t,n,r){r+=t;var o=e.__injected||(e.__injected={});if(!o[r]){o[r]=!0;var i=e[t];i?e[t]=function(){i.apply(this,arguments),n.apply(this,arguments)}:e[t]
 =n}}function ue(e,t,n,r,o){var i,a,s,u,c,l,f;for(i in e)if(a=e[i],s=t[i],a)if(s){if(a!==s)if(Array.isArray(s)){s.length=a.length;for(var d=0;d<s.length;d++)s[d]=a[d];e[i]=s}else s.fn=a,e[i]=s}else f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,Array.isArray(a)?n(c,a.invoker=ce(a),f,l):(a.invoker||(u=a,a=e[i]={},a.fn=u,a.invoker=le(a)),n(c,a.invoker,f,l));else;for(i in t)e[i]||(f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,r(c,t[i].invoker,l))}function ce(e){return function(t){for(var n=arguments,r=1===arguments.length,o=0;o<e.length;o++)r?e[o](t):e[o].apply(null,n)}}function le(e){return function(t){var n=1===arguments.length;n?e.fn(t):e.fn.apply(null,arguments)}}function fe(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function de(e){return s(e)?[oe(e)]:Array.isArray(e)?pe(e):void 0}function pe(e,t){var n,r,o,i=[];for(n=0;n<e.length;n++)r=e[n],null!=r&&"boolean"!=typeof 
 r&&(o=i[i.length-1],Array.isArray(r)?i.push.apply(i,pe(r,(t||"")+"_"+n)):s(r)?o&&o.text?o.text+=String(r):""!==r&&i.push(oe(r)):r.text&&o&&o.text?i[i.length-1]=oe(o.text+r.text):(r.tag&&null==r.key&&null!=t&&(r.key="__vlist"+t+"_"+n+"__"),i.push(r)));return i}function he(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function ve(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&_e(e,t)}function me(e,t,n){n?Bn.$once(e,t):Bn.$on(e,t)}function ye(e,t){Bn.$off(e,t)}function _e(e,t,n){Bn=e,ue(t,n||{},me,ye,e)}function ge(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;return(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0),r},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;var r=n._events[e];if(!r)return n;if(1===arguments.len
 gth)return n._events[e]=null,n;for(var o,i=r.length;i--;)if(o=r[i],o===t||o.fn===t){r.splice(i,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?l(n):n;for(var r=l(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(t,r)}return t}}function be(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=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function we(e){e.prototype._mount=function(e,t){var n=this;return n.$el=e,n.$options.render||(n.$options.render=zn),Oe(n,"beforeMount"),n._watcher=new Ln(n,function(){n._update(n._render(),t)},v),t=!1,null==n.$vnode&&(n._isMounted=!0,Oe(n,"mounted")),n},e.prototype._update=function(e,t){var n=this;n._isMounted&&Oe(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=qn;qn=n,n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,t,!1,n.$options._pare
 ntElm,n.$options._refElm),qn=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el),n._isMounted&&Oe(n,"updated")},e.prototype._updateFromParent=function(e,t,n,r){var o=this,i=!(!o.$options._renderChildren&&!r);if(o.$options._parentVnode=n,o.$vnode=n,o._vnode&&(o._vnode.parent=n),o.$options._renderChildren=r,e&&o.$options.props){Sn.shouldConvert=!1;for(var a=o.$options._propKeys||[],s=0;s<a.length;s++){var u=a[s];o[u]=L(u,o.$options.props,e,o)}Sn.shouldConvert=!0,o.$options.propsData=e}if(t){var c=o.$options._parentListeners;o.$options._parentListeners=t,_e(o,t,c)}i&&(o.$slots=Be(r,n.context),o.$forceUpdate())},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){Oe(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||i(t.$children,e),e._watcher&&e._watcher.teardown();for(var 
 n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,Oe(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}function Oe(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)n[r].call(e);e._hasHookEvent&&e.$emit("hook:"+t)}function xe(e,t,n,r,o){if(e){var i=n.$options._base;if(d(e)&&(e=i.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(e=Ie(e,i,function(){n.$forceUpdate()}),!e)return;Je(e),t=t||{};var a=Te(t,e);if(e.options.functional)return Ee(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),Pe(t);var u=e.options.name||o,c=new Jn("vue-component-"+e.cid+(u?"-"+u:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:o,children:r});return c}}}function Ee(e,t,n,r,o){var i={},a=e.options.props;if(a)for(var s in a)i[s]=L(s,a,t);var u=Object.create(r),c=function(e,t,n,r){return $e(u,e,t,n,r,!0)},l=e.options.render.call(null,c,{props:i,data:n
 ,parent:r,children:o,slots:function(){return Be(o,r)}});return l instanceof Jn&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function Ce(e,t,n,r){var o=e.componentOptions,i={_isComponent:!0,parent:t,propsData:o.propsData,_componentTag:o.tag,_parentVnode:e,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function ke(e,t,n,r){if(!e.child||e.child._isDestroyed){var o=e.child=Ce(e,qn,n,r);o.$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var i=e;Se(i,i)}}function Se(e,t){var n=t.componentOptions,r=t.child=e.child;r._updateFromParent(n.propsData,n.listeners,t,n.children)}function je(e){e.child._isMounted||(e.child._isMounted=!0,Oe(e.child,"mounted")),e.data.keepAlive&&(e.child._inactive=!1,Oe(e.child,"activated"))}function Ae(e){e.child._isDestroyed||(e.data.keepAlive?(e.child._inactive=!0,Oe(e.child,"deactivated"))
 :e.child.$destroy())}function Ie(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],o=!0,i=function(n){if(d(n)&&(n=t.extend(n)),e.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(e){},s=e(i,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(i,a),o=!1,e.resolved}e.pendingCallbacks.push(n)}function Te(e,t){var n=t.options.props;if(n){var r={},o=e.attrs,i=e.props,a=e.domProps;if(o||i||a)for(var s in n){var u=en(s);Ne(r,i,s,u,!0)||Ne(r,o,s,u)||Ne(r,a,s,u)}return r}}function Ne(e,t,n,r,o){if(t){if(a(t,n))return e[n]=t[n],o||delete t[n],!0;if(a(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function Pe(e){e.hook||(e.hook={});for(var t=0;t<Hn.length;t++){var n=Hn[t],r=e.hook[n],o=Wn[n];e.hook[n]=r?Me(o,r):o}}function Me(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function $e(e,t,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o=Xn),Re(e,t,n,r,o)}function Re(e,t,n,r,o){if(n&&n.__ob__)return zn();if(!t)return zn();Array.isA
 rray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===Xn?r=de(r):o===Gn&&(r=fe(r));var i,a;if("string"==typeof t){var s;a=an.getTagNamespace(t),i=an.isReservedTag(t)?new Jn(an.parsePlatformTagName(t),n,r,void 0,void 0,e):(s=F(e.$options,"components",t))?xe(s,n,e,r,t):new Jn(t,n,r,void 0,void 0,e)}else i=xe(t,n,e,r);return i?(a&&De(i,a),i):zn()}function De(e,t){if(e.ns=t,"foreignObject"!==e.tag&&e.children)for(var n=0,r=e.children.length;n<r;n++){var o=e.children[n];o.tag&&!o.ns&&De(o,t)}}function Fe(e){e.$vnode=null,e._vnode=null,e._staticTrees=null;var t=e.$options._parentVnode,n=t&&t.context;e.$slots=Be(e.$options._renderChildren,n),e.$scopedSlots={},e._c=function(t,n,r,o){return $e(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return $e(e,t,n,r,o,!0)},e.$options.el&&e.$mount(e.$options.el)}function Le(e){function t(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&o(e[r],t+"_"+r,n);else o(e,t,n)}function o(e,t
 ,n){e.isStatic=!0,e.key=t,e.isOnce=n}e.prototype.$nextTick=function(e){return _n(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots)e.$slots[i]=ae(e.$slots[i]);o&&o.data.scopedSlots&&(e.$scopedSlots=o.data.scopedSlots),r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){if(!an.errorHandler)throw t;an.errorHandler.call(null,t,e),a=e._vnode}return a instanceof Jn||(a=zn()),a.parent=o,a},e.prototype._s=n,e.prototype._v=oe,e.prototype._n=r,e.prototype._e=zn,e.prototype._q=y,e.prototype._i=_,e.prototype._m=function(e,n){var r=this._staticTrees[e];return r&&!n?Array.isArray(r)?ae(r):ie(r):(r=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),t(r,"__static__"+e,!1),r)},e.prototype._o=function(e,n,r){return t(e,"__once__"+n+(r?"_"+r:""),!0),e},e.prototype._f=function(e){return F(this.$options,"filters",e,!0)
 ||on},e.prototype._l=function(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(d(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return n},e.prototype._t=function(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&f(n,r),o(n)||t;var i=this.$slots[e];return i||t},e.prototype._b=function(e,t,n,r){if(n)if(d(n)){Array.isArray(n)&&(n=h(n));for(var o in n)if("class"===o||"style"===o)e[o]=n[o];else{var i=r||an.mustUseProp(t,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={});i[o]=n[o]}}else;return e},e.prototype._k=function(e,t,n){var r=an.keyCodes[t]||n;return Array.isArray(r)?r.indexOf(e)===-1:r!==e}}function Be(e,t){var n={};if(!e)return n;for(var r,o,i=[],a=0,s=e.length;a<s;a++)if(o=e[a],(o.context===t||o.functionalContext===t)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);"templ
 ate"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.length&&(1!==i.length||" "!==i[0].text&&!i[0].isComment)&&(n.default=i),n}function Ve(e){e.prototype._init=function(e){var t=this;t._uid=Kn++,t._isVue=!0,e&&e._isComponent?Ue(t,e):t.$options=D(Je(t.constructor),e||{},t),t._renderProxy=t,t._self=t,be(t),ve(t),Oe(t,"beforeCreate"),G(t),Oe(t,"created"),Fe(t)}}function Ue(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Je(e){var t=e.options;if(e.super){var n=e.super.options,r=e.superOptions,o=e.extendOptions;n!==r&&(e.superOptions=n,o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._scopeId=t._scopeId,t=e.options=D(n,o),t.name&&(t.components[t.name]=e))}
 return t}function ze(e){this._init(e)}function qe(e){e.use=function(e){if(!e.installed){var t=l(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):e.apply(null,t),e.installed=!0,this}}}function We(e){e.mixin=function(e){this.options=D(this.options,e)}}function He(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=D(n.options,e),a.super=n,a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,an._assetTypes.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,o[r]=a,a}}function Ge(e){an._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]
 =n,n):this.options[t+"s"][e]}})}function Xe(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e.test(t)}function Ke(e){var t={};t.get=function(){return an},Object.defineProperty(e,"config",t),e.util=Tn,e.set=A,e.delete=I,e.nextTick=_n,e.options=Object.create(null),an._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,f(e.options.components,Yn),qe(e),We(e),He(e),Ge(e)}function Qe(e){this.instanceId="",this.nodeId=er++,this.parentNode=null,this.nodeType=3,this.text=e}function Ze(e){return new tr.Element(e)}function Ye(e,t){return new tr.Element(e+":"+t)}function et(e){return new tr.TextNode(e)}function tt(e){return new tr.Comment(e)}function nt(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Ze("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function rt(e,t){e.removeChild(t)}function ot(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("v
 alue",t.text),t.parentNode=e;else{var n=Ze("text");n.setAttr("value",t.text),e.appendChild(n)}}function it(e){return e.parentNode}function at(e){return e.nextSibling}function st(e){return e.type}function ut(e,t){e.parentNode.setAttr("value",t)}function ct(e,t,n){e.setAttr(t,n)}function lt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.child||e.elm,a=r.$refs;t?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function ft(e){return null==e}function dt(e){return null!=e}function pt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function ht(e,t,n){var r,o,i={};for(r=t;r<=n;++r)o=e[r].key,dt(o)&&(i[o]=r);return i}function vt(e){function t(e){return new Jn(S.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=S.parentNode(e);t&&S.removeChild(t,e)}function i(e,t,n,r,o){if(e.isRoo
 tInsert=!o,!a(e,t,n,r)){var i=e.data,s=e.children,u=e.tag;if(dt(u)){e.elm=e.ns?S.createElementNS(e.ns,u):S.createElement(u,e),h(e);var f=i&&i.appendAsTree;f||(dt(i)&&d(e,t),c(n,e.elm,r)),l(e,s,t),f&&(dt(i)&&d(e,t),c(n,e.elm,r))}else e.isComment?(e.elm=S.createComment(e.text),c(n,e.elm,r)):(e.elm=S.createTextNode(e.text),c(n,e.elm,r))}}function a(e,t,n,r){var o=e.data;if(dt(o)){var i=dt(e.child)&&o.keepAlive;if(dt(o=o.hook)&&dt(o=o.init)&&o(e,!1,n,r),dt(e.child))return p(e,t),i&&u(e,t,n,r),!0}}function u(e,t,n,r){for(var o,i=e;i.child;)if(i=i.child._vnode,dt(o=i.data)&&dt(o=o.transition)){for(o=0;o<C.activate.length;++o)C.activate[o](ir,i);t.push(i);break}c(n,e.elm,r)}function c(e,t,n){e&&(n?S.insertBefore(e,t,n):S.appendChild(e,t))}function l(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)i(t[r],n,e.elm,null,!0);else s(e.text)&&S.appendChild(e.elm,S.createTextNode(e.text))}function f(e){for(;e.child;)e=e.child._vnode;return dt(e.tag)}function d(e,t){for(var n=0;n<C.create.len
 gth;++n)C.create[n](ir,e);x=e.data.hook,dt(x)&&(x.create&&x.create(ir,e),x.insert&&t.push(e))}function p(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.child.$el,f(e)?(d(e,t),h(e)):(lt(e),t.push(e))}function h(e){var t;dt(t=e.context)&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,""),dt(t=qn)&&t!==e.context&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,"")}function v(e,t,n,r,o,a){for(;r<=o;++r)i(n[r],a,e,t)}function m(e){var t,n,r=e.data;if(dt(r))for(dt(t=r.hook)&&dt(t=t.destroy)&&t(e),t=0;t<C.destroy.length;++t)C.destroy[t](e);if(dt(t=e.children))for(n=0;n<e.children.length;++n)m(e.children[n])}function y(e,t,n,o){for(;n<=o;++n){var i=t[n];dt(i)&&(dt(i.tag)?(_(i),m(i)):r(i.elm))}}function _(e,t){if(t||dt(e.data)){var o=C.remove.length+1;for(t?t.listeners+=o:t=n(e.elm,o),dt(x=e.child)&&dt(x=x._vnode)&&dt(x.data)&&_(x,t),x=0;x<C.remove.length;++x)C.remove[x](e,t);dt(x=e.data.hook)&&dt(x=x.remove)?x(e,t):t()}else r(e.elm)}function g(e,t,n,r,o){for(va
 r a,s,u,c,l=0,f=0,d=t.length-1,p=t[0],h=t[d],m=n.length-1,_=n[0],g=n[m],w=!o;l<=d&&f<=m;)ft(p)?p=t[++l]:ft(h)?h=t[--d]:pt(p,_)?(b(p,_,r),p=t[++l],_=n[++f]):pt(h,g)?(b(h,g,r),h=t[--d],g=n[--m]):pt(p,g)?(b(p,g,r),w&&S.insertBefore(e,p.elm,S.nextSibling(h.elm)),p=t[++l],g=n[--m]):pt(h,_)?(b(h,_,r),w&&S.insertBefore(e,h.elm,p.elm),h=t[--d],_=n[++f]):(ft(a)&&(a=ht(t,l,d)),s=dt(_.key)?a[_.key]:null,ft(s)?(i(_,r,e,p.elm),_=n[++f]):(u=t[s],pt(u,_)?(b(u,_,r),t[s]=void 0,w&&S.insertBefore(e,_.elm,p.elm),_=n[++f]):(i(_,r,e,p.elm),_=n[++f])));l>d?(c=ft(n[m+1])?null:n[m+1].elm,v(e,c,n,f,m,r)):f>m&&y(e,t,l,d)}function b(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return t.elm=e.elm,void(t.child=e.child);var o,i=t.data,a=dt(i);a&&dt(o=i.hook)&&dt(o=o.prepatch)&&o(e,t);var s=t.elm=e.elm,u=e.children,c=t.children;if(a&&f(t)){for(o=0;o<C.update.length;++o)C.update[o](e,t);dt(o=i.hook)&&dt(o=o.update)&&o(e,t)}ft(t.text)?dt(u)&&dt(c)?u!==c&&g(s,u,c,n,r):dt(c)?(dt
 (e.text)&&S.setTextContent(s,""),v(s,null,c,0,c.length-1,n)):dt(u)?y(s,u,0,u.length-1):dt(e.text)&&S.setTextContent(s,""):e.text!==t.text&&S.setTextContent(s,t.text),a&&dt(o=i.hook)&&dt(o=o.pos

<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f07e6f7b/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
index 57fbcda..b387155 100755
Binary files a/android/sdk/libs/armeabi/libweexv8.so and b/android/sdk/libs/armeabi/libweexv8.so differ



[18/30] incubator-weex git commit: * [android] fix * https://aone.alibaba-inc.com/project/469098/issue/10392126

Posted by zs...@apache.org.
* [android] fix
* https://aone.alibaba-inc.com/project/469098/issue/10392126


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

Branch: refs/heads/0.12-dev
Commit: f07e6f7b0f1021bf92dd949212996d8369770ceb
Parents: eb85033
Author: bruno.duan <br...@gmail.com>
Authored: Fri Mar 10 18:00:48 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Fri Mar 10 18:00:48 2017 +0800

----------------------------------------------------------------------
 .eslintrc                                       |   2 ++
 .../java/com/alibaba/weex/WXApplication.java    |   2 +-
 android/sdk/assets/main.js                      |  14 +++++++-------
 android/sdk/libs/armeabi/libweexv8.so           | Bin 3645300 -> 3645308 bytes
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   4 ++--
 html5/frameworks/legacy/static/life.js          |  17 +++++++++++++++++
 6 files changed, 29 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f07e6f7b/.eslintrc
----------------------------------------------------------------------
diff --git a/.eslintrc b/.eslintrc
index 49dfae0..11e3537 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -20,6 +20,8 @@
     "callNativeModule": false,
     "callAddElement":false,
     "callJS": false,
+    "notifyTrimMemory": false,
+    "markupState": false,
     "compileAndRunBundle": false
   },
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f07e6f7b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
index 400f315..4697556 100755
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
@@ -314,7 +314,7 @@ public class WXApplication extends Application {
           WXSDKManager.getInstance().notifyTrimMemory();
         }
         // The demo code of calling 'notifySerializeCodeCache()'
-        if (true) {
+        if (false) {
           WXSDKManager.getInstance().notifySerializeCodeCache();
         }
       }


[07/30] incubator-weex git commit: * [android] make the app playground to use v8 code cache.

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/test.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/test.js b/android/playground/app/src/main/assets/test.js
new file mode 100644
index 0000000..f00094c
--- /dev/null
+++ b/android/playground/app/src/main/assets/test.js
@@ -0,0 +1,136 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e3450d2c3db0c0fc8d0fd51893442fe7"
+ * }
+ !*/
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(374)
+	var __weex_script__ = __webpack_require__(375)
+
+	__weex_define__('@weex-component/9305542c7d16b107fad92f56b2a08dab', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	})
+
+	__weex_bootstrap__('@weex-component/9305542c7d16b107fad92f56b2a08dab',undefined,undefined)
+
+/***/ },
+
+/***/ 374:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "children": [
+	    {
+	      "type": "div",
+	      "id": "r",
+	      "children": [
+	        {
+	          "type": "text",
+	          "attr": {
+	            "value": function () {return this.x}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "height": 2000,
+	            "backgroundColor": "#ff0000"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "events": {
+	            "click": "foo"
+	          },
+	          "attr": {
+	            "value": function () {return this.x}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 375:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var dom = __weex_require__('@weex-module/dom');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      x: 1
+	    };
+	  },
+	  methods: {
+	    foo: function foo(e) {
+	      dom.scrollToElement(this.$el('r'), { offset: 0 });
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
index af74bd7..8b1cc79 100755
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
@@ -229,6 +229,8 @@ import android.view.ViewGroup;
 import android.widget.ProgressBar;
 import android.widget.Toast;
 
+import com.alibaba.fastjson.JSONObject;
+
 import com.alibaba.weex.commons.WXAnalyzerDelegate;
 import com.alibaba.weex.commons.util.ScreenUtil;
 import com.alibaba.weex.constants.Constants;
@@ -238,6 +240,7 @@ import com.alibaba.weex.https.WXHttpTask;
 import com.alibaba.weex.https.WXRequestListener;
 import com.taobao.weex.IWXRenderListener;
 import com.taobao.weex.RenderContainer;
+import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKEngine;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.appfram.navigator.IActivityNavBarSetter;
@@ -246,6 +249,7 @@ import com.taobao.weex.common.WXRenderStrategy;
 import com.taobao.weex.ui.component.NestedContainer;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXUtils;
 
 import java.io.File;
 import java.io.UnsupportedEncodingException;
@@ -357,9 +361,32 @@ public class WXPageActivity extends WXBaseActivity implements IWXRenderListener,
         Activity ctx = WXPageActivity.this;
         Rect outRect = new Rect();
         ctx.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
-        mConfigMap.put("bundleUrl", mUri.toString());
+        mConfigMap.put(com.taobao.weex.common.Constants.CodeCache.URL,
+                       mUri.toString());
         String path = mUri.getScheme().equals("file") ? assembleFilePath(mUri) : mUri.toString();
-        mInstance.render(TAG, WXFileUtils.loadAsset(path, WXPageActivity.this),
+        String content = WXFileUtils.loadAsset(path, WXPageActivity.this);
+        // Set options.bundleDigest
+        try {
+          String banner = WXUtils.getBundleBanner(content);
+          JSONObject jsonObj = JSONObject.parseObject(banner);
+          String digest = null;
+          if (jsonObj != null) {
+            digest = jsonObj.getString(com.taobao.weex.common.Constants.CodeCache.BANNER_DIGEST);
+          }
+          if (digest != null) {
+            mConfigMap.put(com.taobao.weex.common.Constants.CodeCache.DIGEST,
+                           digest);
+          }
+        } catch (Throwable t) {}
+
+        // Set options.codeCachePath
+        path = WXEnvironment.getFilesDir(getApplicationContext());
+        path += File.separator;
+        path += com.taobao.weex.common.Constants.CodeCache.SAVE_PATH;
+        path += File.separator;
+        mConfigMap.put(com.taobao.weex.common.Constants.CodeCache.PATH,
+                       path);
+        mInstance.render(TAG, content,
             mConfigMap, null,
             WXRenderStrategy.APPEND_ASYNC);
       }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
index 376a4d4..8935820 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
@@ -219,6 +219,7 @@ import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXSoInstallMgrSdk;
 import com.taobao.weex.utils.WXUtils;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -411,4 +412,21 @@ public class WXEnvironment {
     return cachePath;
   }
 
+  public static String getFilesDir(Context context) {
+    if (context == null) {
+      return "";
+    }
+    File filesDir = context.getFilesDir();
+    String path = "";
+    if (filesDir != null) {
+      path = filesDir.getPath();
+    } else {
+      path = WXEnvironment.getApplication().getApplicationInfo().dataDir;
+      path += File.separator;
+      path += "files";
+    }
+
+    return path;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
index 125ae3a..82d854d 100755
--- a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
@@ -448,4 +448,12 @@ public class Constants {
     String HTTP = "http";
     String LOCAL = "local";
   }
+
+  public interface CodeCache {
+    String URL = "bundleUrl";
+    String DIGEST = "bundleDigest";
+    String PATH = "codeCachePath";
+    String BANNER_DIGEST = "digest";
+    String SAVE_PATH = "v8";
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java
index b2842eb..6efbbf6 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java
@@ -527,4 +527,86 @@ public class WXUtils {
     return (int)(Float.parseFloat(raw) / HUNDRED * unit);
   }
 
-}
\ No newline at end of file
+  /**
+   * Get a banner data in JSON format from a bundle content.
+   * A bundle banner looks like below:
+   * \/*!count
+   *  * {
+   *  *   version: "0.2.1.20170104-release",
+   *  *   create: "20170207171112",
+   *  *   git: "banner--772c915",
+   *  *   digest: "c709b7f91867e371b24f54d6aeea232a"
+   *  * }
+   *  !*\/
+   *
+   * @param content a bundle content
+   * @return
+   */
+  public static String getBundleBanner(String content) {
+    final String commentBegin = "/*!";
+    final String commentEnd = "!*/";
+    final String asteriskRegex = "\\*";
+    final String replacement = "";
+
+    int offsetCountBegin = content.indexOf(commentBegin);
+    if (offsetCountBegin == -1) {
+        return null;
+    }
+    offsetCountBegin += commentBegin.length();
+    int offsetCountEnd = indexLineBreak(content, offsetCountBegin);
+    if (offsetCountEnd == -1) {
+        return null;
+    }
+    String countStr = content.substring(offsetCountBegin, offsetCountEnd);
+    int count = Integer.parseInt(countStr);
+
+    String commentBody = content.substring(offsetCountEnd + 1, offsetCountEnd + 1 + count);
+    int offsetBodyEnd = commentBody.lastIndexOf(commentEnd);
+    if (offsetBodyEnd == -1) {
+        return null;
+    }
+    commentBody = commentBody.substring(0, offsetBodyEnd);
+
+    StringBuilder commentBodyBuilder = new StringBuilder();
+    String[] items = splitLineBreak(commentBody);
+
+    for (String item : items) {
+        commentBodyBuilder.append(item.replaceFirst(asteriskRegex, replacement));
+    }
+
+    return commentBodyBuilder.toString();
+}
+
+private static int indexLineBreak(String str, int fromIndex) {
+    final String lineBreakIos = "\r";
+    final String lineBreakUnix = "\n";
+    final String linebreakWin = "\r\n";
+
+    int index = str.indexOf(lineBreakIos, fromIndex);
+    if (index == -1) {
+        index = str.indexOf(lineBreakUnix, fromIndex);
+    }
+    if (index == -1) {
+        index = str.indexOf(linebreakWin, fromIndex);
+    }
+
+    return index;
+}
+
+private static String[] splitLineBreak(String str) {
+    final String lineBreakIos = "\r";
+    final String lineBreakUnix = "\n";
+    final String linebreakWin = "\r\n";
+    String[] items = str.split(lineBreakIos);
+
+    if (items.length == 1) {
+        items = str.split(lineBreakUnix);
+    }
+    if (items.length == 1) {
+        items = str.split(linebreakWin);
+    }
+
+    return items;
+}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/build/examples-banner-plugin.js
----------------------------------------------------------------------
diff --git a/build/examples-banner-plugin.js b/build/examples-banner-plugin.js
new file mode 100644
index 0000000..72c1158
--- /dev/null
+++ b/build/examples-banner-plugin.js
@@ -0,0 +1,65 @@
+'use strict'
+
+const ConcatSource = require('webpack/lib/ConcatSource')
+
+const isProd = process.env.NODE_ENV === 'production'
+const dateFormat = require('dateformat')
+const appVersion = require('../package.json').version
+const now = new Date()
+const packTime = dateFormat(now, 'yyyymmddHHMMss')
+const date = dateFormat(now, 'yyyymmdd')
+const childProcess = require('child_process')
+const hash = childProcess.execSync('git rev-parse --short HEAD').toString().trim()
+const brash = childProcess.execSync('git rev-parse --abbrev-ref HEAD').toString().trim()
+
+const crypto = require('crypto')
+function md5 (text) {
+  return crypto.createHash('md5').update(text, 'utf8').digest('hex')
+}
+
+function generateBanner (digest) {
+  const tmp = ` * {
+ *   version: "${appVersion}.${date}${isProd ? '-release' : ''}",
+ *   create: "${packTime}",
+ *   git: "${brash}--${hash}",
+ *   digest: "${digest}"
+ * }
+ !*/
+`
+  const length = tmp.length
+  return `/*!${length}
+${tmp}`
+}
+
+function BannerWebpackPlugin (options) {
+  this.options = options || {}
+}
+
+BannerWebpackPlugin.prototype.apply = function (compiler) {
+  compiler.plugin('emit', (compilation, callback) => {
+    // const chunkKey = Object.keys(this.chunks)
+    compilation.chunks.map((chunk) => {
+      const distChunk = chunk.files[0]
+
+      const source = compilation.assets[distChunk].source()
+      compilation.assets[distChunk].source = () => {
+        return source
+      }
+      compilation.assets[distChunk] = new ConcatSource(generateBanner(md5(source)), compilation.assets[distChunk])
+    })
+    callback()
+  })
+}
+
+BannerWebpackPlugin.prototype.findAsset = function (compilation, chunk) {
+  const chunks = compilation.chunks
+  for (let i = 0, len = chunks.length; i < len; i++) {
+    if (chunks[i].name === chunk) {
+      return chunks[i].files[0]
+    }
+  }
+
+  return null
+}
+
+module.exports = BannerWebpackPlugin

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/build/webpack.examples.config.js
----------------------------------------------------------------------
diff --git a/build/webpack.examples.config.js b/build/webpack.examples.config.js
index 29c3048..d3d0cd6 100644
--- a/build/webpack.examples.config.js
+++ b/build/webpack.examples.config.js
@@ -1,6 +1,7 @@
 var path = require('path');
 var fs = require('fs');
 var webpack = require('webpack');
+var bannerWebpackPlugin = require('./examples-banner-plugin')
 
 var entry = {};
 var bannerExcludeFiles = [];
@@ -49,5 +50,5 @@ module.exports = {
       }
     ]
   },
-  plugins: [bannerPlugin]
+  plugins: [bannerPlugin, new bannerWebpackPlugin()]
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 2d738e9..ae73277 100644
--- a/package.json
+++ b/package.json
@@ -105,6 +105,7 @@
     "chromedriver": "^2.21.2",
     "cross-spawn": "^4.0.0",
     "css-loader": "^0.26.1",
+    "dateformat": "^2.0.0",
     "eslint": "^2.11.1",
     "fs-extra": "^2.0.0",
     "http-server": "^0.9.0",


[19/30] incubator-weex git commit: * [android] Add trace on Java side and Add a switch to enable/disable * trace on Java side as well as on V8 side. Trace is available on debug * production by default.

Posted by zs...@apache.org.
* [android] Add trace on Java side and Add a switch to enable/disable
* trace on Java side as well as on V8 side. Trace is available on debug
* production by default.


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

Branch: refs/heads/0.12-dev
Commit: 849ff61d3f8e4bb2eed1bc19602570465255490d
Parents: f07e6f7
Author: bruno.duan <br...@gmail.com>
Authored: Wed Mar 15 14:36:59 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Wed Mar 15 14:36:59 2017 +0800

----------------------------------------------------------------------
 .../java/com/alibaba/weex/WXPageActivity.java   |   6 +
 .../extend/WXInstanceStatisticsListener.java    | 268 +++++++++++++++++
 android/sdk/build.gradle                        |   2 +
 android/sdk/libs/armeabi/libweexv8.so           | Bin 3645308 -> 3649404 bytes
 .../java/com/taobao/weex/WXSDKInstance.java     |   3 +
 .../java/com/taobao/weex/utils/OsVersion.java   | 233 +++++++++++++++
 .../main/java/com/taobao/weex/utils/Trace.java  | 297 +++++++++++++++++++
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   4 +-
 8 files changed, 811 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
index 8b1cc79..2f28ca4 100755
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
@@ -234,6 +234,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.weex.commons.WXAnalyzerDelegate;
 import com.alibaba.weex.commons.util.ScreenUtil;
 import com.alibaba.weex.constants.Constants;
+import com.alibaba.weex.extend.WXInstanceStatisticsListener;
 import com.alibaba.weex.https.HotRefreshManager;
 import com.alibaba.weex.https.WXHttpManager;
 import com.alibaba.weex.https.WXHttpTask;
@@ -247,6 +248,7 @@ import com.taobao.weex.appfram.navigator.IActivityNavBarSetter;
 import com.taobao.weex.common.IWXDebugProxy;
 import com.taobao.weex.common.WXRenderStrategy;
 import com.taobao.weex.ui.component.NestedContainer;
+import com.taobao.weex.utils.Trace;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
@@ -352,12 +354,15 @@ public class WXPageActivity extends WXBaseActivity implements IWXRenderListener,
       mInstance = new WXSDKInstance(this);
       mInstance.setRenderContainer(renderContainer);
       mInstance.registerRenderListener(this);
+      mInstance.registerStatisticsListener(new WXInstanceStatisticsListener());
       mInstance.setNestedInstanceInterceptor(this);
       mInstance.setTrackComponent(true);
     }
     mContainer.post(new Runnable() {
       @Override
       public void run() {
+        Trace.beginSection(mUri.toString());
+
         Activity ctx = WXPageActivity.this;
         Rect outRect = new Rect();
         ctx.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
@@ -389,6 +394,7 @@ public class WXPageActivity extends WXBaseActivity implements IWXRenderListener,
         mInstance.render(TAG, content,
             mConfigMap, null,
             WXRenderStrategy.APPEND_ASYNC);
+        Trace.endSection();
       }
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/android/playground/app/src/main/java/com/alibaba/weex/extend/WXInstanceStatisticsListener.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/WXInstanceStatisticsListener.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/WXInstanceStatisticsListener.java
new file mode 100755
index 0000000..289e6fe
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/WXInstanceStatisticsListener.java
@@ -0,0 +1,268 @@
+/**
+ *
+ *                                  Apache License
+ *                            Version 2.0, January 2004
+ *                         http://www.apache.org/licenses/
+ *
+ *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *    1. Definitions.
+ *
+ *       "License" shall mean the terms and conditions for use, reproduction,
+ *       and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *       "Licensor" shall mean the copyright owner or entity authorized by
+ *       the copyright owner that is granting the License.
+ *
+ *       "Legal Entity" shall mean the union of the acting entity and all
+ *       other entities that control, are controlled by, or are under common
+ *       control with that entity. For the purposes of this definition,
+ *       "control" means (i) the power, direct or indirect, to cause the
+ *       direction or management of such entity, whether by contract or
+ *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *       outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *       "You" (or "Your") shall mean an individual or Legal Entity
+ *       exercising permissions granted by this License.
+ *
+ *       "Source" form shall mean the preferred form for making modifications,
+ *       including but not limited to software source code, documentation
+ *       source, and configuration files.
+ *
+ *       "Object" form shall mean any form resulting from mechanical
+ *       transformation or translation of a Source form, including but
+ *       not limited to compiled object code, generated documentation,
+ *       and conversions to other media types.
+ *
+ *       "Work" shall mean the work of authorship, whether in Source or
+ *       Object form, made available under the License, as indicated by a
+ *       copyright notice that is included in or attached to the work
+ *       (an example is provided in the Appendix below).
+ *
+ *       "Derivative Works" shall mean any work, whether in Source or Object
+ *       form, that is based on (or derived from) the Work and for which the
+ *       editorial revisions, annotations, elaborations, or other modifications
+ *       represent, as a whole, an original work of authorship. For the purposes
+ *       of this License, Derivative Works shall not include works that remain
+ *       separable from, or merely link (or bind by name) to the interfaces of,
+ *       the Work and Derivative Works thereof.
+ *
+ *       "Contribution" shall mean any work of authorship, including
+ *       the original version of the Work and any modifications or additions
+ *       to that Work or Derivative Works thereof, that is intentionally
+ *       submitted to Licensor for inclusion in the Work by the copyright owner
+ *       or by an individual or Legal Entity authorized to submit on behalf of
+ *       the copyright owner. For the purposes of this definition, "submitted"
+ *       means any form of electronic, verbal, or written communication sent
+ *       to the Licensor or its representatives, including but not limited to
+ *       communication on electronic mailing lists, source code control systems,
+ *       and issue tracking systems that are managed by, or on behalf of, the
+ *       Licensor for the purpose of discussing and improving the Work, but
+ *       excluding communication that is conspicuously marked or otherwise
+ *       designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *       "Contributor" shall mean Licensor and any individual or Legal Entity
+ *       on behalf of whom a Contribution has been received by Licensor and
+ *       subsequently incorporated within the Work.
+ *
+ *    2. Grant of Copyright License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       copyright license to reproduce, prepare Derivative Works of,
+ *       publicly display, publicly perform, sublicense, and distribute the
+ *       Work and such Derivative Works in Source or Object form.
+ *
+ *    3. Grant of Patent License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       (except as stated in this section) patent license to make, have made,
+ *       use, offer to sell, sell, import, and otherwise transfer the Work,
+ *       where such license applies only to those patent claims licensable
+ *       by such Contributor that are necessarily infringed by their
+ *       Contribution(s) alone or by combination of their Contribution(s)
+ *       with the Work to which such Contribution(s) was submitted. If You
+ *       institute patent litigation against any entity (including a
+ *       cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *       or a Contribution incorporated within the Work constitutes direct
+ *       or contributory patent infringement, then any patent licenses
+ *       granted to You under this License for that Work shall terminate
+ *       as of the date such litigation is filed.
+ *
+ *    4. Redistribution. You may reproduce and distribute copies of the
+ *       Work or Derivative Works thereof in any medium, with or without
+ *       modifications, and in Source or Object form, provided that You
+ *       meet the following conditions:
+ *
+ *       (a) You must give any other recipients of the Work or
+ *           Derivative Works a copy of this License; and
+ *
+ *       (b) You must cause any modified files to carry prominent notices
+ *           stating that You changed the files; and
+ *
+ *       (c) You must retain, in the Source form of any Derivative Works
+ *           that You distribute, all copyright, patent, trademark, and
+ *           attribution notices from the Source form of the Work,
+ *           excluding those notices that do not pertain to any part of
+ *           the Derivative Works; and
+ *
+ *       (d) If the Work includes a "NOTICE" text file as part of its
+ *           distribution, then any Derivative Works that You distribute must
+ *           include a readable copy of the attribution notices contained
+ *           within such NOTICE file, excluding those notices that do not
+ *           pertain to any part of the Derivative Works, in at least one
+ *           of the following places: within a NOTICE text file distributed
+ *           as part of the Derivative Works; within the Source form or
+ *           documentation, if provided along with the Derivative Works; or,
+ *           within a display generated by the Derivative Works, if and
+ *           wherever such third-party notices normally appear. The contents
+ *           of the NOTICE file are for informational purposes only and
+ *           do not modify the License. You may add Your own attribution
+ *           notices within Derivative Works that You distribute, alongside
+ *           or as an addendum to the NOTICE text from the Work, provided
+ *           that such additional attribution notices cannot be construed
+ *           as modifying the License.
+ *
+ *       You may add Your own copyright statement to Your modifications and
+ *       may provide additional or different license terms and conditions
+ *       for use, reproduction, or distribution of Your modifications, or
+ *       for any such Derivative Works as a whole, provided Your use,
+ *       reproduction, and distribution of the Work otherwise complies with
+ *       the conditions stated in this License.
+ *
+ *    5. Submission of Contributions. Unless You explicitly state otherwise,
+ *       any Contribution intentionally submitted for inclusion in the Work
+ *       by You to the Licensor shall be under the terms and conditions of
+ *       this License, without any additional terms or conditions.
+ *       Notwithstanding the above, nothing herein shall supersede or modify
+ *       the terms of any separate license agreement you may have executed
+ *       with Licensor regarding such Contributions.
+ *
+ *    6. Trademarks. This License does not grant permission to use the trade
+ *       names, trademarks, service marks, or product names of the Licensor,
+ *       except as required for reasonable and customary use in describing the
+ *       origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *    7. Disclaimer of Warranty. Unless required by applicable law or
+ *       agreed to in writing, Licensor provides the Work (and each
+ *       Contributor provides its Contributions) on an "AS IS" BASIS,
+ *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *       implied, including, without limitation, any warranties or conditions
+ *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *       PARTICULAR PURPOSE. You are solely responsible for determining the
+ *       appropriateness of using or redistributing the Work and assume any
+ *       risks associated with Your exercise of permissions under this License.
+ *
+ *    8. Limitation of Liability. In no event and under no legal theory,
+ *       whether in tort (including negligence), contract, or otherwise,
+ *       unless required by applicable law (such as deliberate and grossly
+ *       negligent acts) or agreed to in writing, shall any Contributor be
+ *       liable to You for damages, including any direct, indirect, special,
+ *       incidental, or consequential damages of any character arising as a
+ *       result of this License or out of the use or inability to use the
+ *       Work (including but not limited to damages for loss of goodwill,
+ *       work stoppage, computer failure or malfunction, or any and all
+ *       other commercial damages or losses), even if such Contributor
+ *       has been advised of the possibility of such damages.
+ *
+ *    9. Accepting Warranty or Additional Liability. While redistributing
+ *       the Work or Derivative Works thereof, You may choose to offer,
+ *       and charge a fee for, acceptance of support, warranty, indemnity,
+ *       or other liability obligations and/or rights consistent with this
+ *       License. However, in accepting such obligations, You may act only
+ *       on Your own behalf and on Your sole responsibility, not on behalf
+ *       of any other Contributor, and only if You agree to indemnify,
+ *       defend, and hold each Contributor harmless for any liability
+ *       incurred by, or claims asserted against, such Contributor by reason
+ *       of your accepting any such warranty or additional liability.
+ *
+ *    END OF TERMS AND CONDITIONS
+ *
+ *    APPENDIX: How to apply the Apache License to your work.
+ *
+ *       To apply the Apache License to your work, attach the following
+ *       boilerplate notice, with the fields enclosed by brackets "[]"
+ *       replaced with your own identifying information. (Don't include
+ *       the brackets!)  The text should be enclosed in the appropriate
+ *       comment syntax for the file format. We also recommend that a
+ *       file or class name and description of purpose be included on the
+ *       same "printed page" as the copyright notice for easier
+ *       identification within third-party archives.
+ *
+ *    Copyright 2016 Alibaba Group
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+package com.alibaba.weex.extend;
+
+import com.taobao.weex.IWXStatisticsListener;
+
+import com.taobao.weex.utils.Trace;
+
+public class WXInstanceStatisticsListener implements IWXStatisticsListener {
+  /**
+   * Called when weex sdk engine begin to initialize.
+   */
+  @Override
+  public void onSDKEngineInitialize() {}
+
+  /**
+   * Called when begin to load js framework.
+   */
+  @Override
+  public void onJsFrameworkStart() {}
+
+  /**
+   * Called when finish loading js framework.
+   */
+  @Override
+  public void onJsFrameworkReady() {}
+
+  /**
+   * Called when the render view phase of first view reached.
+   */
+  @Override
+  public void onFirstView() {}
+
+  /**
+   * Called when the render view phase of first screen reached.
+   */
+  @Override
+  public void onFirstScreen() {
+    Trace.beginSection("onFirstScreen done");
+    Trace.endSection();
+  }
+
+  /**
+   * Called when to start a http request.
+   */
+  @Override
+  public void onHttpStart() {}
+
+  /**
+   * Called when received a http response header data.
+   */
+  @Override
+  public void onHeadersReceived() {}
+
+  /**
+   * Called when to finish a http request.
+   */
+  @Override
+  public void onHttpFinish() {}
+
+  /**
+   * Called when an exception occured.
+   */
+  @Override
+  public void onException(String instanceid, String errCode, String msg) {}
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/android/sdk/build.gradle
----------------------------------------------------------------------
diff --git a/android/sdk/build.gradle b/android/sdk/build.gradle
index b4c0eac..55c55fb 100755
--- a/android/sdk/build.gradle
+++ b/android/sdk/build.gradle
@@ -81,10 +81,12 @@ android {
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+            buildConfigField "boolean", "ENABLE_TRACE", "false"
         }
 
         debug {
             testCoverageEnabled true
+            buildConfigField "boolean", "ENABLE_TRACE", "true"
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
index b387155..5d1d696 100755
Binary files a/android/sdk/libs/armeabi/libweexv8.so and b/android/sdk/libs/armeabi/libweexv8.so differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/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 151ad1e..d501ffb 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -252,6 +252,7 @@ import com.taobao.weex.ui.component.WXComponentFactory;
 import com.taobao.weex.ui.component.WXVContainer;
 import com.taobao.weex.ui.view.WXScrollView;
 import com.taobao.weex.ui.view.WXScrollView.WXScrollViewListener;
+import com.taobao.weex.utils.Trace;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXJsonUtils;
 import com.taobao.weex.utils.WXLogUtils;
@@ -1161,7 +1162,9 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
         @Override
         public void run() {
           if (mStatisticsListener != null && mContext != null) {
+            Trace.beginSection("onFirstScreen");
             mStatisticsListener.onFirstScreen();
+            Trace.endSection();
           }
         }
       });

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/android/sdk/src/main/java/com/taobao/weex/utils/OsVersion.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/OsVersion.java b/android/sdk/src/main/java/com/taobao/weex/utils/OsVersion.java
new file mode 100644
index 0000000..33234a6
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/OsVersion.java
@@ -0,0 +1,233 @@
+/**
+ *
+ *                                  Apache License
+ *                            Version 2.0, January 2004
+ *                         http://www.apache.org/licenses/
+ *
+ *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *    1. Definitions.
+ *
+ *       "License" shall mean the terms and conditions for use, reproduction,
+ *       and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *       "Licensor" shall mean the copyright owner or entity authorized by
+ *       the copyright owner that is granting the License.
+ *
+ *       "Legal Entity" shall mean the union of the acting entity and all
+ *       other entities that control, are controlled by, or are under common
+ *       control with that entity. For the purposes of this definition,
+ *       "control" means (i) the power, direct or indirect, to cause the
+ *       direction or management of such entity, whether by contract or
+ *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *       outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *       "You" (or "Your") shall mean an individual or Legal Entity
+ *       exercising permissions granted by this License.
+ *
+ *       "Source" form shall mean the preferred form for making modifications,
+ *       including but not limited to software source code, documentation
+ *       source, and configuration files.
+ *
+ *       "Object" form shall mean any form resulting from mechanical
+ *       transformation or translation of a Source form, including but
+ *       not limited to compiled object code, generated documentation,
+ *       and conversions to other media types.
+ *
+ *       "Work" shall mean the work of authorship, whether in Source or
+ *       Object form, made available under the License, as indicated by a
+ *       copyright notice that is included in or attached to the work
+ *       (an example is provided in the Appendix below).
+ *
+ *       "Derivative Works" shall mean any work, whether in Source or Object
+ *       form, that is based on (or derived from) the Work and for which the
+ *       editorial revisions, annotations, elaborations, or other modifications
+ *       represent, as a whole, an original work of authorship. For the purposes
+ *       of this License, Derivative Works shall not include works that remain
+ *       separable from, or merely link (or bind by name) to the interfaces of,
+ *       the Work and Derivative Works thereof.
+ *
+ *       "Contribution" shall mean any work of authorship, including
+ *       the original version of the Work and any modifications or additions
+ *       to that Work or Derivative Works thereof, that is intentionally
+ *       submitted to Licensor for inclusion in the Work by the copyright owner
+ *       or by an individual or Legal Entity authorized to submit on behalf of
+ *       the copyright owner. For the purposes of this definition, "submitted"
+ *       means any form of electronic, verbal, or written communication sent
+ *       to the Licensor or its representatives, including but not limited to
+ *       communication on electronic mailing lists, source code control systems,
+ *       and issue tracking systems that are managed by, or on behalf of, the
+ *       Licensor for the purpose of discussing and improving the Work, but
+ *       excluding communication that is conspicuously marked or otherwise
+ *       designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *       "Contributor" shall mean Licensor and any individual or Legal Entity
+ *       on behalf of whom a Contribution has been received by Licensor and
+ *       subsequently incorporated within the Work.
+ *
+ *    2. Grant of Copyright License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       copyright license to reproduce, prepare Derivative Works of,
+ *       publicly display, publicly perform, sublicense, and distribute the
+ *       Work and such Derivative Works in Source or Object form.
+ *
+ *    3. Grant of Patent License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       (except as stated in this section) patent license to make, have made,
+ *       use, offer to sell, sell, import, and otherwise transfer the Work,
+ *       where such license applies only to those patent claims licensable
+ *       by such Contributor that are necessarily infringed by their
+ *       Contribution(s) alone or by combination of their Contribution(s)
+ *       with the Work to which such Contribution(s) was submitted. If You
+ *       institute patent litigation against any entity (including a
+ *       cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *       or a Contribution incorporated within the Work constitutes direct
+ *       or contributory patent infringement, then any patent licenses
+ *       granted to You under this License for that Work shall terminate
+ *       as of the date such litigation is filed.
+ *
+ *    4. Redistribution. You may reproduce and distribute copies of the
+ *       Work or Derivative Works thereof in any medium, with or without
+ *       modifications, and in Source or Object form, provided that You
+ *       meet the following conditions:
+ *
+ *       (a) You must give any other recipients of the Work or
+ *           Derivative Works a copy of this License; and
+ *
+ *       (b) You must cause any modified files to carry prominent notices
+ *           stating that You changed the files; and
+ *
+ *       (c) You must retain, in the Source form of any Derivative Works
+ *           that You distribute, all copyright, patent, trademark, and
+ *           attribution notices from the Source form of the Work,
+ *           excluding those notices that do not pertain to any part of
+ *           the Derivative Works; and
+ *
+ *       (d) If the Work includes a "NOTICE" text file as part of its
+ *           distribution, then any Derivative Works that You distribute must
+ *           include a readable copy of the attribution notices contained
+ *           within such NOTICE file, excluding those notices that do not
+ *           pertain to any part of the Derivative Works, in at least one
+ *           of the following places: within a NOTICE text file distributed
+ *           as part of the Derivative Works; within the Source form or
+ *           documentation, if provided along with the Derivative Works; or,
+ *           within a display generated by the Derivative Works, if and
+ *           wherever such third-party notices normally appear. The contents
+ *           of the NOTICE file are for informational purposes only and
+ *           do not modify the License. You may add Your own attribution
+ *           notices within Derivative Works that You distribute, alongside
+ *           or as an addendum to the NOTICE text from the Work, provided
+ *           that such additional attribution notices cannot be construed
+ *           as modifying the License.
+ *
+ *       You may add Your own copyright statement to Your modifications and
+ *       may provide additional or different license terms and conditions
+ *       for use, reproduction, or distribution of Your modifications, or
+ *       for any such Derivative Works as a whole, provided Your use,
+ *       reproduction, and distribution of the Work otherwise complies with
+ *       the conditions stated in this License.
+ *
+ *    5. Submission of Contributions. Unless You explicitly state otherwise,
+ *       any Contribution intentionally submitted for inclusion in the Work
+ *       by You to the Licensor shall be under the terms and conditions of
+ *       this License, without any additional terms or conditions.
+ *       Notwithstanding the above, nothing herein shall supersede or modify
+ *       the terms of any separate license agreement you may have executed
+ *       with Licensor regarding such Contributions.
+ *
+ *    6. Trademarks. This License does not grant permission to use the trade
+ *       names, trademarks, service marks, or product names of the Licensor,
+ *       except as required for reasonable and customary use in describing the
+ *       origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *    7. Disclaimer of Warranty. Unless required by applicable law or
+ *       agreed to in writing, Licensor provides the Work (and each
+ *       Contributor provides its Contributions) on an "AS IS" BASIS,
+ *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *       implied, including, without limitation, any warranties or conditions
+ *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *       PARTICULAR PURPOSE. You are solely responsible for determining the
+ *       appropriateness of using or redistributing the Work and assume any
+ *       risks associated with Your exercise of permissions under this License.
+ *
+ *    8. Limitation of Liability. In no event and under no legal theory,
+ *       whether in tort (including negligence), contract, or otherwise,
+ *       unless required by applicable law (such as deliberate and grossly
+ *       negligent acts) or agreed to in writing, shall any Contributor be
+ *       liable to You for damages, including any direct, indirect, special,
+ *       incidental, or consequential damages of any character arising as a
+ *       result of this License or out of the use or inability to use the
+ *       Work (including but not limited to damages for loss of goodwill,
+ *       work stoppage, computer failure or malfunction, or any and all
+ *       other commercial damages or losses), even if such Contributor
+ *       has been advised of the possibility of such damages.
+ *
+ *    9. Accepting Warranty or Additional Liability. While redistributing
+ *       the Work or Derivative Works thereof, You may choose to offer,
+ *       and charge a fee for, acceptance of support, warranty, indemnity,
+ *       or other liability obligations and/or rights consistent with this
+ *       License. However, in accepting such obligations, You may act only
+ *       on Your own behalf and on Your sole responsibility, not on behalf
+ *       of any other Contributor, and only if You agree to indemnify,
+ *       defend, and hold each Contributor harmless for any liability
+ *       incurred by, or claims asserted against, such Contributor by reason
+ *       of your accepting any such warranty or additional liability.
+ *
+ *    END OF TERMS AND CONDITIONS
+ *
+ *    APPENDIX: How to apply the Apache License to your work.
+ *
+ *       To apply the Apache License to your work, attach the following
+ *       boilerplate notice, with the fields enclosed by brackets "[]"
+ *       replaced with your own identifying information. (Don't include
+ *       the brackets!)  The text should be enclosed in the appropriate
+ *       comment syntax for the file format. We also recommend that a
+ *       file or class name and description of purpose be included on the
+ *       same "printed page" as the copyright notice for easier
+ *       identification within third-party archives.
+ *
+ *    Copyright 2016 Alibaba Group
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+package com.taobao.weex.util;
+
+/**
+ * Android OS version utilities.
+ */
+public class OsVersion {
+  private static boolean sIsAtLeastJB_MR2;
+
+
+  static {
+    final int v = getApiVersion();
+    sIsAtLeastJB_MR2 = v >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
+  }
+
+  /**
+   * @return True if the version of Android that we're running on is at
+   * least Jelly Bean MR2(API level 18).
+   */
+  public static boolean isAtLeastJB_MR2() {
+    return sIsAtLeastJB_MR2;
+  }
+
+  /**
+   * @return The Android API version of the running OS.
+   */
+  public static int getApiVersion() {
+    return android.os.Build.VERSION.SDK_INT;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java b/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
new file mode 100644
index 0000000..048ba61
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
@@ -0,0 +1,297 @@
+/**
+ *
+ *                                  Apache License
+ *                            Version 2.0, January 2004
+ *                         http://www.apache.org/licenses/
+ *
+ *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *    1. Definitions.
+ *
+ *       "License" shall mean the terms and conditions for use, reproduction,
+ *       and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *       "Licensor" shall mean the copyright owner or entity authorized by
+ *       the copyright owner that is granting the License.
+ *
+ *       "Legal Entity" shall mean the union of the acting entity and all
+ *       other entities that control, are controlled by, or are under common
+ *       control with that entity. For the purposes of this definition,
+ *       "control" means (i) the power, direct or indirect, to cause the
+ *       direction or management of such entity, whether by contract or
+ *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *       outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *       "You" (or "Your") shall mean an individual or Legal Entity
+ *       exercising permissions granted by this License.
+ *
+ *       "Source" form shall mean the preferred form for making modifications,
+ *       including but not limited to software source code, documentation
+ *       source, and configuration files.
+ *
+ *       "Object" form shall mean any form resulting from mechanical
+ *       transformation or translation of a Source form, including but
+ *       not limited to compiled object code, generated documentation,
+ *       and conversions to other media types.
+ *
+ *       "Work" shall mean the work of authorship, whether in Source or
+ *       Object form, made available under the License, as indicated by a
+ *       copyright notice that is included in or attached to the work
+ *       (an example is provided in the Appendix below).
+ *
+ *       "Derivative Works" shall mean any work, whether in Source or Object
+ *       form, that is based on (or derived from) the Work and for which the
+ *       editorial revisions, annotations, elaborations, or other modifications
+ *       represent, as a whole, an original work of authorship. For the purposes
+ *       of this License, Derivative Works shall not include works that remain
+ *       separable from, or merely link (or bind by name) to the interfaces of,
+ *       the Work and Derivative Works thereof.
+ *
+ *       "Contribution" shall mean any work of authorship, including
+ *       the original version of the Work and any modifications or additions
+ *       to that Work or Derivative Works thereof, that is intentionally
+ *       submitted to Licensor for inclusion in the Work by the copyright owner
+ *       or by an individual or Legal Entity authorized to submit on behalf of
+ *       the copyright owner. For the purposes of this definition, "submitted"
+ *       means any form of electronic, verbal, or written communication sent
+ *       to the Licensor or its representatives, including but not limited to
+ *       communication on electronic mailing lists, source code control systems,
+ *       and issue tracking systems that are managed by, or on behalf of, the
+ *       Licensor for the purpose of discussing and improving the Work, but
+ *       excluding communication that is conspicuously marked or otherwise
+ *       designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *       "Contributor" shall mean Licensor and any individual or Legal Entity
+ *       on behalf of whom a Contribution has been received by Licensor and
+ *       subsequently incorporated within the Work.
+ *
+ *    2. Grant of Copyright License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       copyright license to reproduce, prepare Derivative Works of,
+ *       publicly display, publicly perform, sublicense, and distribute the
+ *       Work and such Derivative Works in Source or Object form.
+ *
+ *    3. Grant of Patent License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       (except as stated in this section) patent license to make, have made,
+ *       use, offer to sell, sell, import, and otherwise transfer the Work,
+ *       where such license applies only to those patent claims licensable
+ *       by such Contributor that are necessarily infringed by their
+ *       Contribution(s) alone or by combination of their Contribution(s)
+ *       with the Work to which such Contribution(s) was submitted. If You
+ *       institute patent litigation against any entity (including a
+ *       cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *       or a Contribution incorporated within the Work constitutes direct
+ *       or contributory patent infringement, then any patent licenses
+ *       granted to You under this License for that Work shall terminate
+ *       as of the date such litigation is filed.
+ *
+ *    4. Redistribution. You may reproduce and distribute copies of the
+ *       Work or Derivative Works thereof in any medium, with or without
+ *       modifications, and in Source or Object form, provided that You
+ *       meet the following conditions:
+ *
+ *       (a) You must give any other recipients of the Work or
+ *           Derivative Works a copy of this License; and
+ *
+ *       (b) You must cause any modified files to carry prominent notices
+ *           stating that You changed the files; and
+ *
+ *       (c) You must retain, in the Source form of any Derivative Works
+ *           that You distribute, all copyright, patent, trademark, and
+ *           attribution notices from the Source form of the Work,
+ *           excluding those notices that do not pertain to any part of
+ *           the Derivative Works; and
+ *
+ *       (d) If the Work includes a "NOTICE" text file as part of its
+ *           distribution, then any Derivative Works that You distribute must
+ *           include a readable copy of the attribution notices contained
+ *           within such NOTICE file, excluding those notices that do not
+ *           pertain to any part of the Derivative Works, in at least one
+ *           of the following places: within a NOTICE text file distributed
+ *           as part of the Derivative Works; within the Source form or
+ *           documentation, if provided along with the Derivative Works; or,
+ *           within a display generated by the Derivative Works, if and
+ *           wherever such third-party notices normally appear. The contents
+ *           of the NOTICE file are for informational purposes only and
+ *           do not modify the License. You may add Your own attribution
+ *           notices within Derivative Works that You distribute, alongside
+ *           or as an addendum to the NOTICE text from the Work, provided
+ *           that such additional attribution notices cannot be construed
+ *           as modifying the License.
+ *
+ *       You may add Your own copyright statement to Your modifications and
+ *       may provide additional or different license terms and conditions
+ *       for use, reproduction, or distribution of Your modifications, or
+ *       for any such Derivative Works as a whole, provided Your use,
+ *       reproduction, and distribution of the Work otherwise complies with
+ *       the conditions stated in this License.
+ *
+ *    5. Submission of Contributions. Unless You explicitly state otherwise,
+ *       any Contribution intentionally submitted for inclusion in the Work
+ *       by You to the Licensor shall be under the terms and conditions of
+ *       this License, without any additional terms or conditions.
+ *       Notwithstanding the above, nothing herein shall supersede or modify
+ *       the terms of any separate license agreement you may have executed
+ *       with Licensor regarding such Contributions.
+ *
+ *    6. Trademarks. This License does not grant permission to use the trade
+ *       names, trademarks, service marks, or product names of the Licensor,
+ *       except as required for reasonable and customary use in describing the
+ *       origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *    7. Disclaimer of Warranty. Unless required by applicable law or
+ *       agreed to in writing, Licensor provides the Work (and each
+ *       Contributor provides its Contributions) on an "AS IS" BASIS,
+ *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *       implied, including, without limitation, any warranties or conditions
+ *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *       PARTICULAR PURPOSE. You are solely responsible for determining the
+ *       appropriateness of using or redistributing the Work and assume any
+ *       risks associated with Your exercise of permissions under this License.
+ *
+ *    8. Limitation of Liability. In no event and under no legal theory,
+ *       whether in tort (including negligence), contract, or otherwise,
+ *       unless required by applicable law (such as deliberate and grossly
+ *       negligent acts) or agreed to in writing, shall any Contributor be
+ *       liable to You for damages, including any direct, indirect, special,
+ *       incidental, or consequential damages of any character arising as a
+ *       result of this License or out of the use or inability to use the
+ *       Work (including but not limited to damages for loss of goodwill,
+ *       work stoppage, computer failure or malfunction, or any and all
+ *       other commercial damages or losses), even if such Contributor
+ *       has been advised of the possibility of such damages.
+ *
+ *    9. Accepting Warranty or Additional Liability. While redistributing
+ *       the Work or Derivative Works thereof, You may choose to offer,
+ *       and charge a fee for, acceptance of support, warranty, indemnity,
+ *       or other liability obligations and/or rights consistent with this
+ *       License. However, in accepting such obligations, You may act only
+ *       on Your own behalf and on Your sole responsibility, not on behalf
+ *       of any other Contributor, and only if You agree to indemnify,
+ *       defend, and hold each Contributor harmless for any liability
+ *       incurred by, or claims asserted against, such Contributor by reason
+ *       of your accepting any such warranty or additional liability.
+ *
+ *    END OF TERMS AND CONDITIONS
+ *
+ *    APPENDIX: How to apply the Apache License to your work.
+ *
+ *       To apply the Apache License to your work, attach the following
+ *       boilerplate notice, with the fields enclosed by brackets "[]"
+ *       replaced with your own identifying information. (Don't include
+ *       the brackets!)  The text should be enclosed in the appropriate
+ *       comment syntax for the file format. We also recommend that a
+ *       file or class name and description of purpose be included on the
+ *       same "printed page" as the copyright notice for easier
+ *       identification within third-party archives.
+ *
+ *    Copyright 2016 Alibaba Group
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+package com.taobao.weex.utils;
+
+import android.annotation.TargetApi;
+import android.os.Build;
+
+import com.taobao.weex.util.OsVersion;
+
+/**
+ * Hepler class for systrace.
+ *
+ * Note that this will run only on JBMR2 or later.
+ *
+ * Trace will be enabled in debug production and be disabled in release
+ * production, see build.gradle.
+ * If you want to enable it in release, just set sEnabled to true.
+ */
+public class Trace {
+  private static final String TAG = "Weex_Trace";
+  private abstract static class AbstractTrace {
+    abstract void beginSection(String sectionName);
+    abstract void endSection();
+  }
+
+  private static final AbstractTrace sTrace;
+  private static final boolean sEnabled;
+
+  // Pick the correct trace class to handle tracing.
+  static {
+    // If you want to enable it in release, just set sEnabled to true.
+    // If you turn sEnabled on, weex would trace logs on Java side
+    // as well as on V8 side, please take care of turning sEnabled on
+    // to avoid performance impact.
+    sEnabled = com.taobao.weappplus_sdk.BuildConfig.ENABLE_TRACE;
+
+    if (sEnabled == true && OsVersion.isAtLeastJB_MR2()) {
+      sTrace = new TraceJBMR2();
+    } else {
+      sTrace = new TraceDummy();
+    }
+  }
+
+  public static final boolean getTraceEnabled() {
+    return sEnabled;
+  }
+
+  /**
+   * Writes a trace message to indicate that a given section of code has begun.
+   * This call must be followed by a corresponding call to {@link #endSection()}
+   * on the same thread.
+   *
+   * <p class="note"> If sectionName contains '|', '\n' and '\0', these characters
+   * will be repaced with a space character.
+   *
+   * @param sectionName The name of code section to appear in the trace.
+   */
+  public static void beginSection(String sectionName) {
+    android.util.Log.i(TAG, "beginSection() " + sectionName);
+    sTrace.beginSection(sectionName);
+  }
+
+  /**
+   * Writes a trace message to indicate that a given section of code has ended.
+   * This call must be preceeded by a corresponding call to {@link #beginSection()}
+   * on the same thread.
+   */
+  public static void endSection() {
+    sTrace.endSection();
+    android.util.Log.i(TAG, "endSection()");
+  }
+
+  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
+  private static final class TraceJBMR2 extends AbstractTrace {
+    @Override
+    void beginSection(String sectionName) {
+      android.os.Trace.beginSection(sectionName);
+    }
+
+    @Override
+    void endSection() {
+      android.os.Trace.endSection();
+    }
+  }
+
+  private static final class TraceDummy extends AbstractTrace {
+    @Override
+    void beginSection(String sectionName) {
+    }
+
+    @Override
+    void endSection() {
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/849ff61d/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index 6515c41..8907dab 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -252,8 +252,8 @@ public class WXSoInstallMgrSdk {
   private final static String ARMEABI = "armeabi"; //default
   private final static String X86 = "x86";
   private final static String MIPS = "mips";
-  private final static int ARMEABI_Size = 3645308;
-  //private final static int ARMEABI_Size = 124232;
+  private final static int ARMEABI_Size = 3649404;
+  //private final static int ARMEABI_Size = 124236;
   private final static int X86_Size = 4451068;
 
   static Context mContext = null;


[23/30] incubator-weex git commit: * [android] Reduce parameters passed in for 'init()' in vue1.0.

Posted by zs...@apache.org.
* [android] Reduce parameters passed in for 'init()' in vue1.0.


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

Branch: refs/heads/0.12-dev
Commit: f8e8f585a45a67d656d8bd5d09beda3d465ef4d3
Parents: eb2eba8
Author: bruno.duan <br...@gmail.com>
Authored: Wed Mar 22 12:22:36 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Wed Mar 22 12:22:36 2017 +0800

----------------------------------------------------------------------
 html5/frameworks/legacy/app/ctrl/init.js | 25 ++++++++++---------------
 html5/frameworks/legacy/static/create.js |  5 +----
 2 files changed, 11 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f8e8f585/html5/frameworks/legacy/app/ctrl/init.js
----------------------------------------------------------------------
diff --git a/html5/frameworks/legacy/app/ctrl/init.js b/html5/frameworks/legacy/app/ctrl/init.js
index d9c403a..efb59ee 100644
--- a/html5/frameworks/legacy/app/ctrl/init.js
+++ b/html5/frameworks/legacy/app/ctrl/init.js
@@ -21,11 +21,8 @@ import { updateActions } from './misc'
  * @param  {object} app
  * @param  {string} code
  * @param  {object} data
- * @param  {string} bundleUrl
- * @param  {string} bundleDigest
- * @param  {string} codeCachePath
  */
-export function init (app, code, data, services, bundleUrl, bundleDigest, codeCachePath) {
+export function init (app, code, data, services) {
   console.debug('[JS Framework] Intialize an instance with:\n', data)
   let result
 
@@ -121,11 +118,7 @@ export function init (app, code, data, services, bundleUrl, bundleDigest, codeCa
     __weex_viewmodel__: bundleVm,
     weex: weexGlobalObject
   }, timerAPIs, services)
-  if (!callFunctionNative(globalObjects,
-                          functionBody,
-                          bundleUrl,
-                          bundleDigest,
-                          codeCachePath)) {
+  if (!callFunctionNative(globalObjects, functionBody)) {
     // If failed to compile functionBody on native side,
     // fallback to callFunction.
     callFunction(globalObjects, functionBody)
@@ -156,13 +149,10 @@ function callFunction (globalObjects, body) {
 /**
  * Call a new function generated on the V8 native side.
  * @param  {object} globalObjects
- * @param  {string} code
- * @param  {string} url
- * @param  {string} digest
- * @param  {string} path
+ * @param  {string} body
  * @return {boolean} return true if no error occurred.
  */
-function callFunctionNative (globalObjects, body, url, digest, path) {
+function callFunctionNative (globalObjects, body) {
   if (typeof compileAndRunBundle !== 'function') {
     return false
   }
@@ -186,7 +176,12 @@ function callFunctionNative (globalObjects, body, url, digest, path) {
   script += '} )'
 
   try {
-    fn = compileAndRunBundle(script, url, digest, path)
+    const weex = globalObjects.weex || {}
+    const config = weex.config || {}
+    fn = compileAndRunBundle(script,
+                             config.bundleUrl,
+                             config.bundleDigest,
+                             config.codeCachePath)
     if (fn && typeof fn === 'function') {
       fn(...globalValues)
       isNativeCompileOk = true

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f8e8f585/html5/frameworks/legacy/static/create.js
----------------------------------------------------------------------
diff --git a/html5/frameworks/legacy/static/create.js b/html5/frameworks/legacy/static/create.js
index 3bf7a98..1c53a34 100644
--- a/html5/frameworks/legacy/static/create.js
+++ b/html5/frameworks/legacy/static/create.js
@@ -27,10 +27,7 @@ export function createInstance (id, code, options, data, info) {
     result = initApp(instance,
                      code,
                      data,
-                     services,
-                     options.bundleUrl,
-                     options.bundleDigest,
-                     options.codeCachePath)
+                     services)
   }
   else {
     result = new Error(`invalid instance id "${id}"`)


[26/30] incubator-weex git commit: Merge branch '0.11-dev' into 0.12-dev

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

Branch: refs/heads/0.12-dev
Commit: 5855c6867d09aa646dea6372ccbe69f0ff66e298
Parents: 4e3cf15 cae9aa8
Author: zshshr <zh...@gmail.com>
Authored: Wed Mar 29 14:55:13 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Wed Mar 29 14:55:13 2017 +0800

----------------------------------------------------------------------
 .../app/src/main/assets/component/image-demo.js |    2 +-
 .../assets/component/slider-neighbor/index.js   |  264 ++
 .../slider-neighbor/silder-neighbor.js          |  287 --
 .../src/main/assets/component/slider/index.js   |   33 +
 .../app/src/main/assets/component/text-demo.js  |  108 +
 .../app/src/main/assets/component/web-demo.js   |    1 -
 android/playground/app/src/main/assets/error.js | 2217 ++++++++++++
 .../app/src/main/assets/geolocation.js          |  183 +
 .../app/src/main/assets/hello_weex.js           |   28 -
 android/playground/app/src/main/assets/index.js |    2 +-
 .../app/src/main/assets/linear-gradient.js      |  367 ++
 .../app/src/main/assets/module/clipboard.js     |   27 +-
 .../app/src/main/assets/module/componentRect.js |  107 +-
 .../app/src/main/assets/module/instance-api.js  |   14 +-
 .../app/src/main/assets/module/modal.js         |   18 +-
 .../app/src/main/assets/module/picker-demo.js   |   18 +-
 .../app/src/main/assets/module/storage-demo.js  |   14 +-
 .../app/src/main/assets/module/stream-demo.js   |   18 +-
 .../src/main/assets/module/websocket-demo.js    | 2412 +++++++++++++
 .../app/src/main/assets/showcase/calculator.js  |   21 +-
 .../assets/showcase/dropdown/dropdown-demo.js   |   30 +-
 .../assets/showcase/dropdown/we-dropdown.js     |   12 +-
 .../app/src/main/assets/showcase/minesweeper.js |   12 +-
 .../main/assets/showcase/new-fashion/banner.js  |    8 +-
 .../main/assets/showcase/new-fashion/banners.js |   20 +-
 .../main/assets/showcase/new-fashion/brand.js   |   36 +-
 .../assets/showcase/new-fashion/category.js     |   24 +-
 .../main/assets/showcase/new-fashion/coupon.js  |   12 +-
 .../main/assets/showcase/new-fashion/fashion.js |   38 +-
 .../main/assets/showcase/new-fashion/goods.js   |   24 +-
 .../assets/showcase/new-fashion/headlines.js    |   48 +-
 .../main/assets/showcase/new-fashion/index.js   |   21 +-
 .../main/assets/showcase/new-fashion/link.js    |    8 +-
 .../main/assets/showcase/new-fashion/main.js    |  209 +-
 .../main/assets/showcase/new-fashion/match.js   |   24 +-
 .../assets/showcase/new-fashion/resource.js     |   38 +-
 .../main/assets/showcase/new-fashion/scene.js   |   24 +-
 .../src/main/assets/showcase/pseudo-class.js    | 2425 +++++++++++++
 .../app/src/main/assets/showcase/ui.js          |   24 +-
 .../app/src/main/assets/style/index.js          |   76 +-
 .../app/src/main/assets/style/style-box.js      |   40 +-
 .../app/src/main/assets/style/style-flex.js     |   48 +-
 .../app/src/main/assets/style/style-item.js     |   12 +-
 .../app/src/main/assets/syntax/hello-world-1.js |    4 +-
 .../app/src/main/assets/syntax/hello-world-2.js |    6 +-
 .../app/src/main/assets/syntax/hello-world-3.js |   10 +-
 .../app/src/main/assets/syntax/hello-world-4.js |   14 +-
 .../app/src/main/assets/syntax/hello-world-5.js |   14 +-
 .../app/src/main/assets/syntax/hello-world.js   |   14 +-
 .../app/src/main/assets/syntax/index.js         |   20 +-
 .../src/main/assets/syntax/script-component.js  |   24 +-
 .../app/src/main/assets/syntax/script-data.js   |   12 +-
 .../app/src/main/assets/syntax/script-events.js |   12 +-
 .../src/main/assets/syntax/script-instance.js   |   12 +-
 .../src/main/assets/syntax/script-lifecycle.js  |   12 +-
 .../app/src/main/assets/syntax/script-module.js |   12 +-
 .../src/main/assets/syntax/script-options.js    |   12 +-
 .../src/main/assets/syntax/template-class.js    |   12 +-
 .../src/main/assets/syntax/template-content.js  |   20 +-
 .../src/main/assets/syntax/template-event.js    |   12 +-
 .../app/src/main/assets/syntax/template-if.js   |   12 +-
 .../assets/syntax/template-repeat-update.js     |   12 +-
 .../src/main/assets/syntax/template-repeat.js   |   12 +-
 .../src/main/assets/syntax/template-style.js    |    8 +-
 .../playground/app/src/main/assets/template.js  |   12 +-
 android/playground/app/src/main/assets/test.js  |  128 +
 .../app/src/main/assets/vue/animation.js        |  709 ++++
 .../app/src/main/assets/vue/components/a.js     |  438 +++
 .../src/main/assets/vue/components/countdown.js |  640 ++++
 .../app/src/main/assets/vue/components/image.js |  641 ++++
 .../app/src/main/assets/vue/components/input.js |  364 ++
 .../app/src/main/assets/vue/components/list.js  |  246 ++
 .../src/main/assets/vue/components/marquee.js   |  534 +++
 .../src/main/assets/vue/components/navigator.js | 1059 ++++++
 .../src/main/assets/vue/components/scroller.js  |  304 ++
 .../src/main/assets/vue/components/slider.js    |  898 +++++
 .../src/main/assets/vue/components/tabbar.js    |  599 ++++
 .../app/src/main/assets/vue/components/text.js  |  513 +++
 .../app/src/main/assets/vue/components/video.js |  396 +++
 .../app/src/main/assets/vue/components/web.js   |  459 +++
 .../playground/app/src/main/assets/vue/hello.js |   99 +
 .../app/src/main/assets/vue/iconfont.js         |  204 ++
 .../playground/app/src/main/assets/vue/index.js |  496 +++
 .../src/main/assets/vue/modules/clipboard.js    |  691 ++++
 .../src/main/assets/vue/modules/instance-api.js |  304 ++
 .../app/src/main/assets/vue/modules/modal.js    |  581 +++
 .../app/src/main/assets/vue/modules/storage.js  |  381 ++
 .../app/src/main/assets/vue/modules/stream.js   |  477 +++
 .../src/main/assets/vue/showcase/calculator.js  |  340 ++
 .../src/main/assets/vue/showcase/itemlist.js    | 1062 ++++++
 .../src/main/assets/vue/showcase/new-fashion.js | 3302 ++++++++++++++++++
 .../src/main/assets/vue/showcase/progress.js    |  336 ++
 .../app/src/main/assets/vue/style/index.js      | 1566 +++++++++
 .../app/src/main/assets/vue/style/style-box.js  |  780 +++++
 .../app/src/main/assets/vue/style/style-flex.js |  919 +++++
 .../app/src/main/assets/vue/style/style-item.js |  155 +
 .../src/main/assets/vue/syntax/hello-world-1.js |   95 +
 .../src/main/assets/vue/syntax/hello-world-2.js |  112 +
 .../src/main/assets/vue/syntax/hello-world-3.js |  127 +
 .../src/main/assets/vue/syntax/hello-world-4.js |  167 +
 .../src/main/assets/vue/syntax/hello-world-5.js |  173 +
 .../src/main/assets/vue/syntax/hello-world.js   |  183 +
 .../main/assets/vue/syntax/script-component.js  |  224 ++
 .../src/main/assets/vue/syntax/script-data.js   |  214 ++
 .../src/main/assets/vue/syntax/script-events.js |  161 +
 .../main/assets/vue/syntax/script-instance.js   |  196 ++
 .../main/assets/vue/syntax/script-lifecycle.js  |  155 +
 .../src/main/assets/vue/syntax/script-module.js |  156 +
 .../main/assets/vue/syntax/script-options.js    |  182 +
 .../main/assets/vue/syntax/template-class.js    |  161 +
 .../main/assets/vue/syntax/template-content.js  |  189 +
 .../main/assets/vue/syntax/template-event.js    |  197 ++
 .../src/main/assets/vue/syntax/template-if.js   |  165 +
 .../assets/vue/syntax/template-repeat-update.js |  195 ++
 .../main/assets/vue/syntax/template-repeat.js   |  170 +
 .../main/assets/vue/syntax/template-style.js    |  144 +
 .../app/src/main/assets/vue/template.js         |  796 +++++
 .../playground/app/src/main/ic_launcher-web.png |  Bin 0 -> 19935 bytes
 .../java/com/alibaba/weex/WXApplication.java    |    5 +
 .../alibaba/weex/extend/component/WXMask.java   |  167 +
 .../extend/component/dom/WXMaskDomObject.java   |  231 ++
 .../alibaba/weex/extend/view/WXMaskView.java    |  220 ++
 .../src/main/res/mipmap-hdpi/ic_launcher.png    |  Bin 5248 -> 1755 bytes
 .../src/main/res/mipmap-mdpi/ic_launcher.png    |  Bin 4303 -> 1221 bytes
 .../src/main/res/mipmap-xhdpi/ic_launcher.png   |  Bin 6354 -> 2451 bytes
 .../src/main/res/mipmap-xxhdpi/ic_launcher.png  |  Bin 7930 -> 3939 bytes
 .../src/main/res/mipmap-xxxhdpi/ic_launcher.png |  Bin 10633 -> 5608 bytes
 android/sdk/assets/main.js                      |   14 +-
 .../taobao/weex/dom/WXRecyclerDomObject.java    |    4 +-
 .../ui/component/list/BasicListComponent.java   |    2 +-
 build/webpack.macacatest.config.js              |    6 +-
 examples/component/image-demo.we                |    2 +-
 examples/component/input-demo.we                |  253 +-
 examples/component/list/list-basic.we           |   79 +-
 examples/component/scroller-demo.we             |   64 +-
 examples/component/slider-tab.we                |  100 +
 examples/include/example-list-item.we           |   30 +-
 examples/index.we                               |    4 +-
 examples/module/chatroom-demo.we                |  227 ++
 examples/module/websocket-demo.we               |   50 +-
 examples/showcase/boxshadow.we                  |   46 +
 examples/vue/components/input.vue               |  203 +-
 examples/vue/components/list.vue                |    3 +
 examples/vue/index.vue                          |    1 +
 examples/vue/showcase/boxshadow.vue             |   39 +
 html5/frameworks/legacy/app/ctrl/init.js        |    2 +
 html5/shared/freeze.js                          |   47 +-
 ios/playground/bundlejs/component/image-demo.js |    2 +-
 ios/playground/bundlejs/component/input-demo.js | 2683 ++++----------
 .../bundlejs/component/lengthunitwx-demo.js     |  329 ++
 .../bundlejs/component/list/list-basic.js       |  132 +-
 .../component/list/list-demo-horizon.js         |   12 +-
 .../bundlejs/component/list/list-demo.js        |   12 +-
 .../bundlejs/component/list/waterfall.js        |  877 +++++
 .../bundlejs/component/marquee-demo.js          |   13 +-
 .../bundlejs/component/process-bar-demo.js      |   17 +-
 .../bundlejs/component/scroller-demo.js         |  219 +-
 .../bundlejs/component/slider-neighbor/index.js |    8 +-
 .../slider-neighbor/slider-neighbor-item.js     |   12 +-
 .../slider-neighbor/slider-neighbor-page.js     |   28 +-
 ios/playground/bundlejs/component/slider-tab.js |  633 ++++
 .../bundlejs/component/slider/index.js          |   56 +-
 .../bundlejs/component/slider/slider-item.js    |   12 +-
 .../bundlejs/component/slider/slider-page.js    |   28 +-
 ios/playground/bundlejs/component/text-demo.js  |   24 +-
 ios/playground/bundlejs/component/video-demo.js |   24 +-
 ios/playground/bundlejs/component/web-demo.js   |   25 +-
 ios/playground/bundlejs/error.js                |   20 +-
 ios/playground/bundlejs/geolocation.js          |   46 +-
 ios/playground/bundlejs/hello.js                |    4 +-
 ios/playground/bundlejs/iconfont.js             |   12 +-
 ios/playground/bundlejs/index.js                |  270 +-
 ios/playground/bundlejs/linear-gradient.js      |    8 +-
 ios/playground/bundlejs/module/chatroom-demo.js |  370 ++
 ios/playground/bundlejs/module/clipboard.js     |   61 +-
 ios/playground/bundlejs/module/componentRect.js |   28 +-
 ios/playground/bundlejs/module/instance-api.js  |   61 +-
 ios/playground/bundlejs/module/modal.js         |   27 +-
 ios/playground/bundlejs/module/picker-demo.js   |   27 +-
 ios/playground/bundlejs/module/storage-demo.js  |   61 +-
 ios/playground/bundlejs/module/stream-demo.js   |   61 +-
 .../bundlejs/module/websocket-demo.js           | 2661 ++++++--------
 ios/playground/bundlejs/showcase/boxshadow.js   |  269 ++
 ios/playground/bundlejs/showcase/calculator.js  |   30 +-
 .../bundlejs/showcase/dropdown/dropdown-demo.js |   38 +-
 .../bundlejs/showcase/dropdown/we-dropdown.js   |   12 +-
 ios/playground/bundlejs/showcase/minesweeper.js |   12 +-
 .../bundlejs/showcase/pseudo-class.js           |   30 +-
 ios/playground/bundlejs/showcase/ui.js          |   30 +-
 ios/playground/bundlejs/style/index.js          |   82 +-
 ios/playground/bundlejs/style/style-box.js      |   46 +-
 ios/playground/bundlejs/style/style-flex.js     |   54 +-
 ios/playground/bundlejs/style/style-item.js     |   12 +-
 ios/playground/bundlejs/syntax/hello-world-1.js |    4 +-
 ios/playground/bundlejs/syntax/hello-world-2.js |    4 +-
 ios/playground/bundlejs/syntax/hello-world-3.js |    8 +-
 ios/playground/bundlejs/syntax/hello-world-4.js |   12 +-
 ios/playground/bundlejs/syntax/hello-world-5.js |   12 +-
 ios/playground/bundlejs/syntax/hello-world.js   |   12 +-
 ios/playground/bundlejs/syntax/index.js         |  296 +-
 .../bundlejs/syntax/script-component.js         |   24 +-
 ios/playground/bundlejs/syntax/script-data.js   |   12 +-
 ios/playground/bundlejs/syntax/script-events.js |   20 +-
 .../bundlejs/syntax/script-instance.js          |   12 +-
 .../bundlejs/syntax/script-lifecycle.js         |   12 +-
 ios/playground/bundlejs/syntax/script-module.js |   12 +-
 .../bundlejs/syntax/script-options.js           |   12 +-
 .../bundlejs/syntax/template-class.js           |   12 +-
 .../bundlejs/syntax/template-content.js         |   20 +-
 .../bundlejs/syntax/template-event.js           |   12 +-
 ios/playground/bundlejs/syntax/template-if.js   |   12 +-
 .../bundlejs/syntax/template-repeat-update.js   |   12 +-
 .../bundlejs/syntax/template-repeat.js          |   12 +-
 .../bundlejs/syntax/template-style.js           |    8 +-
 ios/playground/bundlejs/template.js             |   12 +-
 ios/playground/bundlejs/test.js                 |    8 +-
 ios/playground/bundlejs/vue/animation.js        |  120 +-
 ios/playground/bundlejs/vue/components/a.js     |   97 +-
 .../bundlejs/vue/components/countdown.js        |  122 +-
 ios/playground/bundlejs/vue/components/image.js |  142 +-
 ios/playground/bundlejs/vue/components/input.js |  735 +++-
 ios/playground/bundlejs/vue/components/list.js  |   44 +-
 .../bundlejs/vue/components/marquee.js          |  105 +-
 .../bundlejs/vue/components/navigator.js        |  187 +-
 .../bundlejs/vue/components/scroller.js         |   48 +-
 .../bundlejs/vue/components/slider.js           |  341 +-
 .../bundlejs/vue/components/tabbar.js           |  133 +-
 ios/playground/bundlejs/vue/components/text.js  |  132 +-
 ios/playground/bundlejs/vue/components/video.js |   72 +-
 .../bundlejs/vue/components/waterfall.js        |  877 +++++
 ios/playground/bundlejs/vue/components/web.js   |   74 +-
 ios/playground/bundlejs/vue/hello.js            |   19 +-
 ios/playground/bundlejs/vue/iconfont.js         |   36 +-
 ios/playground/bundlejs/vue/index.js            |  139 +-
 .../bundlejs/vue/modules/clipboard.js           |  147 +-
 .../bundlejs/vue/modules/instance-api.js        |   59 +-
 ios/playground/bundlejs/vue/modules/modal.js    |  105 +-
 ios/playground/bundlejs/vue/modules/storage.js  |   71 +-
 ios/playground/bundlejs/vue/modules/stream.js   |   95 +-
 .../bundlejs/vue/showcase/boxshadow.js          |  244 ++
 .../bundlejs/vue/showcase/calculator.js         |   72 +-
 .../bundlejs/vue/showcase/itemlist.js           |  166 +-
 .../bundlejs/vue/showcase/new-fashion.js        |  557 +--
 .../bundlejs/vue/showcase/progress.js           |   63 +-
 ios/playground/bundlejs/vue/style/index.js      |  418 +--
 ios/playground/bundlejs/vue/style/style-box.js  |  180 +-
 ios/playground/bundlejs/vue/style/style-flex.js |  238 +-
 ios/playground/bundlejs/vue/style/style-item.js |   26 +-
 .../bundlejs/vue/syntax/hello-world-1.js        |   17 +-
 .../bundlejs/vue/syntax/hello-world-2.js        |   23 +-
 .../bundlejs/vue/syntax/hello-world-3.js        |   28 +-
 .../bundlejs/vue/syntax/hello-world-4.js        |   32 +-
 .../bundlejs/vue/syntax/hello-world-5.js        |   32 +-
 .../bundlejs/vue/syntax/hello-world.js          |   32 +-
 .../bundlejs/vue/syntax/script-component.js     |   64 +-
 .../bundlejs/vue/syntax/script-data.js          |   36 +-
 .../bundlejs/vue/syntax/script-events.js        |   32 +-
 .../bundlejs/vue/syntax/script-instance.js      |   30 +-
 .../bundlejs/vue/syntax/script-lifecycle.js     |   32 +-
 .../bundlejs/vue/syntax/script-module.js        |   30 +-
 .../bundlejs/vue/syntax/script-options.js       |   28 +-
 .../bundlejs/vue/syntax/template-class.js       |   34 +-
 .../bundlejs/vue/syntax/template-content.js     |   49 +-
 .../bundlejs/vue/syntax/template-event.js       |   36 +-
 .../bundlejs/vue/syntax/template-if.js          |   32 +-
 .../vue/syntax/template-repeat-update.js        |   40 +-
 .../bundlejs/vue/syntax/template-repeat.js      |   50 +-
 .../bundlejs/vue/syntax/template-style.js       |   27 +-
 ios/playground/bundlejs/vue/template.js         |  181 +-
 ios/sdk/WeexSDK/Resources/main.js               |   14 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h |    2 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m |    2 +-
 .../Component/Recycler/WXMultiColumnLayout.h    |    2 +
 .../Component/Recycler/WXMultiColumnLayout.m    |    5 +-
 .../Component/Recycler/WXRecyclerComponent.m    |   45 +-
 .../Recycler/WXRecyclerDataController.h         |    4 +
 .../Recycler/WXRecyclerDataController.m         |   18 +
 .../WeexSDK/Sources/Component/WXListComponent.m |    4 +
 .../Sources/Component/WXRefreshComponent.m      |    2 +-
 .../Sources/Component/WXSliderComponent.m       |    6 +-
 ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m   |   40 +-
 package.json                                    |    2 +-
 test/pages/components/recycler.vue              |  487 +++
 test/scripts/components/recycler.test.js        |  412 +++
 284 files changed, 44932 insertions(+), 8094 deletions(-)
----------------------------------------------------------------------



[04/30] incubator-weex git commit: * [android] v8 code cache supports.

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/android/sdk/assets/main.js
----------------------------------------------------------------------
diff --git a/android/sdk/assets/main.js b/android/sdk/assets/main.js
index d2aa93e..06431c3 100644
--- a/android/sdk/assets/main.js
+++ b/android/sdk/assets/main.js
@@ -1,7 +1,7 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.19.7, Build 2017-01-10 10:50."),this.getJSFMVersion=function(){return"0.19.7"};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()}(this,function(){"use strict";function e(e){return e&&e.__esModule?e.default:e}function t(e,t){return t={exports:{}},e(t,t.exports),t.exports}function n(){if(o(),"undefined"==typeof global.console||global.WXEnvironment&&"iOS"===global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&global.nativeLog.apply(global,a(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&global.nativeLog.apply(global,a(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&global.nativeLog.apply(global,a(
 e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&global.nativeLog.apply(global,a(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&global.nativeLog.apply(global,a(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,s=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:s},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],
 t=arguments.length;t--;)e[t]=arguments[t];i("error")&&console.__ori__.error.apply(console,e)}}}function r(){Ls={},global.console=Vs}function o(){qs.forEach(function(e){var t=qs.indexOf(e);Ls[e]={},qs.forEach(function(n){var r=qs.indexOf(n);r<=t&&(Ls[e][n]=!0)})})}function i(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return Ls[t]&&Ls[t][e]}function a(e){return e.map(function(e){var t=Object.prototype.toString.call(e);return e="[object object]"===t.toLowerCase()?JSON.stringify(e):String(e)})}function s(){if("undefined"==typeof setTimeout&&"function"==typeof Js){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Js(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function u(){global.setTimeout=Us,global.setTimeoutCallback=null}function c(){Object.freeze(Object),Object.freeze(Array),Object.freeze(Object.prototype),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype
 ),Object.freeze(Boolean.prototype),Object.freeze(Error.prototype),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function l(){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=Ws.prototype,n=function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Bs(e,[{module:"dom",method:n,args:t}],"-1")}};for(var r in e)n(r);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Bs(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Bs(e,[{module:t,method:n,args:r}])}}function f(e,t){e&&(Xs[e]=t)}function d(e){r
 eturn Xs[e]}function p(e){delete Xs[e]}function h(e){var t=Xs[e];return t&&t.taskCenter?t.taskCenter:null}function v(){return(Ks++).toString()}function m(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,g(t,r)):(t.children.forEach(function(e){e.parentNode=t}),_(e,t),t.docId=e.id,t.ownerDocument=e,g(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),y(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function y(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 _(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function g(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocum
 ent.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){g(t,e)})}function b(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function w(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function C(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 k(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 O(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 x(e){zs=e}function E(e,t){if(t&&t.length){var n=function(t){zs.call(this,e,t,!0)};n.prototype=Object.create(zs.prototype),Object.defineProperty(n.prototype,"cons
 tructor",{configurable:!1,enumerable:!1,writable:!1,value:zs}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=h(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Qs[e]=n}}function S(e,t){I(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Zs.push({name:e,options:t}))}function j(e){Zs.some(function(t,n){if(t.name===e)return Zs.splice(n,1),!0})}function I(e){return A(e)>=0}function A(e){return Zs.map(function(e){return e.name}).indexOf(e)}function T(e){var t,n=Ys.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function N(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Zs.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 R(e,t,n,r){var o=eu[e];if(!o){o=T(t)||{},Hs[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=new Gs.CallbackManager(e),a={info:o,config:n,callbacks:i,created:Date.now(),framework:o.framework};return a.services=N(e,a,Gs),eu[e]=a,Hs[o.framework].createInstance(e,t,n,r,a)}return new Error('invalid instance id "'+e+'"')}function D(e){tu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];"registerComponents"===e&&$(t[0]);for(var r in Hs){var o=Hs[r];o&&o[e]&&o[e].apply(o,t)}}}function $(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&E(e.type,e.methods)})}function P(e){tu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=eu[r];if(o&&Hs[o.framework]){var i=(a=Hs[o.framework])[e].apply(a,t);return"refreshInstance"===e?Zs.forEach(function(e){var t=e.options.refresh;t
 &&t(r,{info:o,runtime:Gs})}):"destroyInstance"===e&&(Zs.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Gs})}),delete eu[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function M(e,t){tu[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=eu[r];return o&&Hs[o.framework]?(i=Hs[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function F(e){Gs=e||{},Hs=Gs.frameworks||{},l();for(var t in Hs){var n=Hs[t];n.init(e)}return["registerComponents","registerModules","registerMethods"].forEach(D),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(P),M("receiveTasks","callJS"),tu}function q(){this.nodeId=v(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function L(e,t,n){void 0===e&&(e=nu);var r=Qs[e];return r&&!n?new r(t):(t=t||{},this.nodeType=1,this.nodeId=v(),this.ref=this.nodeId,this.type=e,this.attr=t.
 attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],void(this.pureChildren=[]))}function V(e,t){var n=d(e);n.nodeMap[t.nodeId]=t}function U(e){this.nodeType=8,this.nodeId=v(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function J(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] invalid parameter, handler must be a function")}function B(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function W(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=H(e,t[r],n);if(o===-1)return o}}}function z(e,t){return"dom"===e&&ru[t]&&"function"==typeof global[ru[t]]}function H(e,t,n){var r=t.module,o=t.method,i=t.args;return z(r,o)?glo
 bal[ru[o]].apply(global,[e].concat(i,["-1"])):n(e,[t],"-1")}function G(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,f(e,this),this.nodeMap={};var r=G.Listener||J;this.listener=new r(e,n||W(e,G.handler)),this.taskCenter=new Ws(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:G.handler),this.createDocumentElement()}function X(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)}function K(){c(),Object.freeze(iu.Element),Object.freeze(iu.Comment),Object.freeze(iu.Listener),Object.freeze(iu.Document.prototype),Object.freeze(iu.Element.prototype),Object.freeze(iu.Comment.prototype),Object.freeze(iu.Listener.prototype)}function Q(e){uu.Document=e.Document,uu.Element=e.Element,uu.Comment=e.Comment,uu.sendTasks=e.sendTasks}function Z(e){}function Y(e){}function ee(e){}function te(e,t,n){}function ne(e,t,n,r,o){var i=new uu.Document(e,n.bundleUrl),a={},s=0;i.addCallback=func
 tion(e){return s++,a[s]=e,s},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},cu[e]=i;var u=Object.assign({Document:uu.Document,Element:uu.Element,Comment:uu.Comment,sendTasks:uu.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);c.push(t);var d=new(Function.prototype.bind.apply(Function,[null].concat(c)));return d.apply(void 0,l)}function re(e,t){}function oe(e){delete cu[e]}function ie(e){return cu[e].body.toJSON()}function ae(e,t){var n={fireEvent:function(e,t,n,r,o){var i=cu[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){var o=cu[e];return o.handleCallback(t,n,r)}},r=cu[e];if(r&&Array.isArray(t)){var o=[];return t.forEach(function(t){var r=n[t.method],i=[].concat(t.args);"function"==typeof r&&(i.unshift(e),o.push(r.apply(void 0,i)))}),o}}function se(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function ue(e){var t=thi
 s._ids[e];if(t)return t.el}function ce(e){var t=this._ids[e];if(t)return t.vm}function le(e){var t=this._app,n=t.differ;return n.then(function(){e()})}function fe(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){var r=this._app.requireModule("dom");r.scrollToElement(n.ref,{offset:t})}}function de(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){var i=this._app.requireModule("animation");i.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 pe(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 he(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" ins
 tead");var n=this._app.requireModule("stream");n.sendHttp(e,t)}function ve(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead");var t=this._app.requireModule("event");t.openURL(e)}function me(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead");var t=this._app.requireModule("pageInfo");t.setTitle(e)}function ye(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 ge(e,t,n,r){Object.defineProper
 ty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function be(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function we(e,t){return Pu.call(e,t)}function Ce(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 ke(e){return null!==e&&"object"==typeof e}function Oe(e){return Mu.call(e)===Fu}function xe(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function Ee(){return"object"==typeof nativeSet?nativeSet.create():new au}function Se(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function je(e){var t=e.replace(Lu,"").replace(Vu,"");return t}function Ie(e){return e.replace(Ju,"")}function Ae(){this.id=Gu++,this.subs=[]}function Te(e){Ae.target&&Xu.push(Ae.target),Ae.target=e}function Ne(){Ae.target=Xu.pop()}function Re(){Ae.target=null,Xu=[]}function De(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=++Ku,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=Ee(),this.newDepIds=Ee(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function $e(e,t){var n,r,o,i;if(t||(t=Qu,t.clear()),o=Array.isArray(e),i=ke(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--;)$e(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)$e(e[r[n]],t)}}function Pe(e){if(this.value=e,this.dep=new Ae,ge(e,"__ob__",this),Array.isArray(e)){var t=qu?Me:Fe;t(e,Yu,ec),this.observeArray(e)}else this.walk(e)}function Me(e,t){e.__proto__=t}function Fe(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];ge(e,i,t[i])}}function qe(e,t){if(ke(e)){var n;return we(e,"__ob__")&&e.__ob__ instanceof Pe?n=e.__ob__:(Array.isArray(e)||Oe(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Pe(e)),n&&t&&n.addVm(t),n}}function Le(e,t,n){var r=new Ae,o=Object.getOwnPropertyDescriptor(e,t);if(!o||o.configurable!=
 =!1){var i=o&&o.get,a=o&&o.set,s=qe(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Ae.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&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){var o=i?i.call(e):n;t!==o&&(a?a.call(e,t):n=t,s=qe(t),r.notify())}})}}function Ve(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(we(e,t))return void(e[t]=n);if(e._isVue)return void Ve(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];Je(i,t)}return n}function Ue(e,t){if(we(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];Be(o,t)}}}function Je(e,t){(tc.indexOf(t)>-1||!xe(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}fun
 ction Be(e,t){xe(t)||delete e[t]}function We(e){e._watchers=[],ze(e),Ge(e),Ke(e)}function ze(e){var t=e._data;Oe(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)Je(e,n[r]);qe(t,e)}function He(){}function Ge(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=Xe(r,e),o.set=He):(o.get=r.get?r.cache!==!1?Xe(r.get,e):Ce(r.get,e):He,o.set=r.set?Ce(r.set,e):He),Object.defineProperty(e,n,o)}}function Xe(e,t){var n=new De(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Ae.target&&n.depend(),n.value}}function Ke(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Qe(e){var t=e.type,n=rc[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Se(e[r])&&"object"===Se(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function Ze(e,t,n){ot(e,t,n.id,e),it(e,t,n.attr),st(e,t,n.classList),ut(e,t,n.style),lt(e,t,n.events)}function Ye(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},{})),tt(r,i,e,t),tt(n.attr,i,e,t)}function et(e,t,n,r){void 0===r&&(r={}),rt(n.classList,e,t),nt(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function tt(e,t,n,r){if(e){var o=function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=pt(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}};for(var i in e)o(i)}}function nt(e,t,n){var r=function(r){var o=e[r];if("function"==typeof o){var i=pt(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)};for(var o in e)r(o)}function rt(e,t,n){function r(e,t){"array"===Se(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=pt(t,e,function(e){r(e,i),at(n._rootEl,o,e)});r(a,i),at(n._rootEl,o,a)}else null!=e&&(r(e,i),at(n._rootEl,o,e))}}function ot(e,t,n,r){var o=Object.create(null);if(O
 bject.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),pt(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function it(e,t,n){ft(e,t,"attr",n)}function at(e,t,n){for(var r={},o=n.length,i=function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})},a=0;a<o;a++)i(a);e.setClassStyle(r)}function st(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=pt(e,n,function(e){at(t,r,e)});at(t,r,o)}else at(t,r,n)}}function ut(e,t,n){ft(e,t,"style",n)}function ct(e,t,n,r){t.addEvent(n,Ce(r,e))}function lt(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],a||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ct(e,t,i
 ,a)}}function ft(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?dt(e,t,n,a,s):t[oc[n]](a,s)}}function dt(e,t,n,r,o){var i=oc[n],a=pt(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 pt(e,t,n){if(e._static)return t.call(e,e);var r=new De(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)});return r.value}function ht(e,t){var n=e._app.doc;return n.createBody(t)}function vt(e,t){var n=e._app.doc;return n.createElement(t)}function mt(e,t){var n=yt(e),r=_t(e),o=ic++;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 yt(e){var t=e._app.doc,n=t.createComment("start");return n}function _t(e){var t=e._app.doc,n=t.createComm
 ent("end");return n}function gt(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=bt(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 bt(e,t,n){return t.element?Ct(t,n):wt(t,n)}function wt(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function Ct(e,t){var n=t.parentNode;if(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,r!==-1}),r}}function kt(e,t,n){void 0===n&&(n=!1),t.element?xt(t,n):Ot(t),t._vm&&t._vm.$emit("hook:destroyed")}function Ot(e){var t=e.parentNode;t&&t.removeChild(e)}function xt(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||Ot(e.start),n.forEach(function(e){Ot(e)}),t||Ot(
 e.end)}function Et(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?St(e,n.children[0],e._parentEl):St(e,n.children,e._parentEl):St(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function St(e,t,n,r){var o=e._app||{};if(o.lastSignal!==-1){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),jt(t))return void Dt(e,t,n,r);if(r=r||{},It(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=mt(e,n));if(At(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!"):$t(e,t,n));if(Tt(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!"):Pt(e,t,n,r));var i=r.type||t.type;if(Nt(i,r))return void Mt(e,t,n,i,r);var 
 a=i,s=Rt(e,t,a);if(s)return console.debug("[JS Framework] compile composed component by",t),void Ft(e,s,t,n,a,r);console.debug("[JS Framework] compile native component by",t),qt(e,t,n,a)}}function jt(e){return Array.isArray(e)}function It(e){return"content"===e.type||"slot"===e.type}function At(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Tt(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Nt(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Rt(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Dt(e,t,n,r){var o=mt(e,n);t.forEach(function(t){St(e,t,o,r)})}function $t(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=mt(e,n);c.children=[],c.data=[],c.vms=[
 ],Vt(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Pt(e,t,n,r){var o={shown:!0},i=mt(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Ut(e,t,i,o)}function Mt(e,t,n,r,o){var i=r.call(e),a=_e({type:i},o),s=mt(e,n);n.element&&n.children&&n.children.push(s),pt(e,r,function(n){var r=_e({type:n},o);kt(e,s,!0),St(e,t,s,r)}),St(e,t,s,a)}function Ft(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),ot(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){Ye(e,this,n,i.repeat)},"hook:ready":function(){this._content&&Lt(e,n,this._content)}});et(e,s,n,r)}function qt(e,t,n,r){Qe(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=ht(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=vt(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.even
 ts&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,Ce(c,s))}}Ze(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||{};f.lastSignal===-1||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=gt(e,o,n)),f.lastSignal!==-1&&Lt(e,t,o),f.lastSignal!==-1&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=gt(e,o,n))}function Lt(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return St(e,t,n),r.lastSignal!==-1})}function Vt(e,t,n,r){function o(e,r,o){var a;c?(a=e,ke(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=Bt(o,a);i.push(s),St(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=Jt(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)):kt(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),bt(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 Ut(e,t,n,r){var o=Jt(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was chan
 ged',o),n&&!!n.display!=!!o&&(n.display=!!o,o?St(e,t,n,r):kt(e,n,!0))});n.display=!!o,o&&St(e,t,n,r)}function Jt(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return pt(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 Bt(e,t){var n=Object.create(e);return n._data=t,ze(n),Ge(n),n._realParent=e,e._static&&(n._static=e._static),n}function Wt(e,t){if(t instanceof Wt)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 zt(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new Wt(e,t);o.forEach(function(e){e.call(n,i)})}}function Ht(e,t){var n=new Wt(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Gt(e,t){var n=new Wt(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.
 forEach(function(t){t.$broadcast(e,n)})}function Xt(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 Kt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function Qt(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]);ac.forEach(function(t){e.$on("hook:"+t,n[t])})}function Zt(e){e.$emit=zt,e.$dispatch=Ht,e.$broadcast=Gt,e.$on=Xt,e.$off=Kt}function Yt(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,Qt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._typ
 e+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&_e(this._data,o),We(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,Et(this))}function en(e,t){var n=function(n){var r=sc[n];r||(r={},sc[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})};for(var r in e)n(r)}function tn(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function nn(e,t){var n=sc[t],r={},o=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)re
 turn e.callTasks({module:t,method:n,args:[r]})}})};for(var i in n)o(i);return r}function rn(e,t){var n=e.customComponentMap;return n[t]}function on(e,t,n){var r=e.customComponentMap;return r[t]?void console.error("[JS Framework] define a component("+t+") that already exists"):void(r[t]=n)}function an(e){var t=uc.valid(e);if(t)return e;e="string"==typeof e?e:"";for(var n=e.split("."),r=0,o=[];r<3;){var i="string"==typeof n[r]&&n[r]?n[r]:"0";o.push(i),r++}return o.join(".")}function sn(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n},i=e.toLowerCase();return r.errorMessage=o(e,t,n),i.indexOf("osversion")>=0?r.code=1001:i.indexOf("appversion")>=0?r.code=1002:i.indexOf("weexversion")>=0?r.code=1003:i.indexOf("devicemodel")>=0&&(r.code=1004),r}function un(e,t){t=t||global.WXEnvironment,t=Oe(t)?t:{};var n={isDowngrade:!1};if("function"===Se(e)){var r=e.call(this,t,{semver:uc,normalizeVersion:an});r=!!r,n
 =r?sn("custom","","custom params"):n}else{e=Oe(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=an(p),v=an(t[s]);if(uc.satisfies(v,h)){n=sn(u,l,p);break}}else if(d){var m="array"===Se(p)?p:[p];if(m.indexOf(l)>=0){n=sn(u,l,p);break}}}}return n}function cn(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function ln(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Bu(t))o=je(t);else{if(!Hu(t))return new Error("Wrong component name: "+t);if(o=Ie(t),!rn(e,o))return new Error("It's not a component: "+t)}if(n=Oe(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!uc.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);
 var i=un(n.downgrade);return i.isDowngrade?(e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]
-}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage)):(n.viewport&&cn(e,n.viewport),void(e.vm=new Yt(o,null,{_app:e},null,r)))}function fn(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),on(e,t,n)}function dn(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+'"')}function pn(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&hn(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null,e.callbacks=null}function hn(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--;)hn(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 vn(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function mn(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 mn(e,t,n,r)!==!1});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 yn(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.callbacks[t];return"function"==typeof o?(o(n),"undefined"!=typeof r&&r!==!1||(e.callbacks[t]=void 0),e.differ.flush(),void e.doc.taskCenter.
 send("dom",{action:"updateFinish"},[])):new Error('invalid callback id "'+t+'"')}function _n(e){e.differ.flush()}function gn(e,t){var n;return"array"!==Se(t)&&(t=[t]),t.forEach(function(t){t.args=t.args.map(function(t){return bn(t,e)}),n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function bn(e,t){var n=Se(e);switch(n){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof nc.Element?e.ref:e;case"function":return t.callbacks[++t.uid]=e,t.uid.toString();default:return JSON.stringify(e)}}function wn(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 cc.apply(void 0,[e].concat(t))},a=function(t,r,i){o=ln(e,t,r,i||n),_n(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")}
 ,s=Yt,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return fn.apply(void 0,[e].concat(t))},c=function(t,n){o=ln(e,t,{},n)},l=function(t){return function(n){o=ln(e,t,{},n)}},f=e.doc,d=function(t){return e.requireModule(je(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 "+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.uid.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.uid.toString()},clearTimeout:function(e){y.clearTimeout(e)},clearInterval:function(e){y.clearInterva
 l(e)}})}var _=Object.assign({define:i,require:l,document:f,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 Cn(_,h),o}function Cn(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t);var i=new(Function.prototype.bind.apply(Function,[null].concat(n)));return i.apply(void 0,r)}function kn(e,t){var n=e[t];for(var r in n)n[r]()}function On(e,t){var n=e[t];for(var r in n){var o=n[r];o.forEach(function(e){e()})}}function xn(e,t,n){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},Object.defineProperty(this,"callbacks",{get:function(){return n.callbacks},set:function(e){e||n.close()}}),Object.defineProperty(this,"uid",{get:function(){return n.lastCallbackId},set:function(e){n.lastCallbackId=e}}),this.callbackManager=n,this.doc=new nc.Document(e,this.options.bundleUrl,null,nc.Listener),this.differ=new lc(e)}function En(e,t,n,r,o){var i=
 o||{},a=i.services,s=i.callbacks;Re();var u=fc[e];n=n||{};var c;return u?c=new Error('invalid instance id "'+e+'"'):(u=new xn(e,n,s),fc[e]=u,c=wn(u,t,r,a)),c}function Sn(e){nc.Document=e.Document,nc.Element=e.Element,nc.Comment=e.Comment,nc.sendTasks=e.sendTasks,nc.Listener=e.Listener}function jn(e,t){var n,r=fc[e];return n=r?dn(r,t):new Error('invalid instance id "'+e+'"')}function In(e){Re();var t=fc[e];return t?(pn(t),delete fc[e],fc):new Error('invalid instance id "'+e+'"')}function An(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?dc[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(dc[e.type]=e))})}function Tn(e){"object"==typeof e&&en(e)}function Nn(e){"object"==typeof e&&tn(Yt,e)}function Rn(e,t){var n=fc[e];if(n&&Array.isArray(t)){var r=[];return t.forEach(function(t){var n=pc[t.method],o=[].concat(t.args);"function"==typeof n&&(o.unshift(e),r.push(n.apply(void 0,o)))}),r}return new Error('invalid instance id "'+e+'" or tasks')}function Dn(e){var t,n=fc
 [e];return t=n?vn(n):new Error('invalid instance id "'+e+'"')}function $n(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 Pn(){}function Mn(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");var o=this._app.requireModule("userTrack");o.commit(e,t,n,r)}function Fn(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)\" instead"),"undefined"==typeof window){var n=this._app.requireModule("windvane");n.call({class:"MtopWVPlugin",method:"send",data:e},t)}else{var r=this._app.requireModule("str
 eam");r.sendMtop(e,t)}}function qn(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");var n=this._app.requireModule("windvane");n.call(e,t)}function Ln(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");var n=this._app.requireModule("pageInfo");n.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");var t=this._app.requireModule("user");t.getUserInfo(e)}function Un(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");var t=this._app.requireModule("user");t.login(e)}function Jn(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");var t=this._app.requireModule("user");t.logout(e)}var Bn={browser:"0.5.0",framework:"0.19.7",transformer:">=0.1.5 <0.5"};Array.from||(Array.from=function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},r=Math.pow(2,53)-1,o=function(e){var t=n(e);return Math.min(Math.max(t,0),r)};return function(e){var n=this,r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?argum
 ents[1]:void 0;if("undefined"!=typeof a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var s,u=o(r.length),c=t(n)?Object(new n(u)):new Array(u),l=0;l<u;)s=r[l],a?c[l]="undefined"==typeof i?a(s,l):a.call(i,s,l):c[l]=s,l+=1;return c.length=u,c}}());var Wn="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},zn=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),Hn=t(function(e){var t=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=t)}),Gn=function(e){return"object"==typeof e?null!==e:"function"==typeof e},Xn=Gn,Kn=function(e){if(!Xn(e))throw TypeError(e+" is not an object!");return e},Qn=function(e){try{return!!e()}catch(e){return!0}},Zn=!Qn(function(){return 7!=Object.defineProperty({},"a",{get:function()
 {return 7}}).a}),Yn=Gn,er=zn.document,tr=Yn(er)&&Yn(er.createElement),nr=function(e){return tr?er.createElement(e):{}},rr=!Zn&&!Qn(function(){return 7!=Object.defineProperty(nr("div"),"a",{get:function(){return 7}}).a}),or=Gn,ir=function(e,t){if(!or(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!or(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!or(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!or(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},ar=Kn,sr=rr,ur=ir,cr=Object.defineProperty,lr=Zn?Object.defineProperty:function(e,t,n){if(ar(e),t=ur(t,!0),ar(n),sr)try{return cr(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},fr={f:lr},dr=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},pr=fr,hr=dr,vr=Zn?function(e,t,n){return pr.f(e,t,hr(1,n))}:function(e,t,n){return e[t]=n,e},mr={}.hasOwnProperty,yr=funct
 ion(e,t){return mr.call(e,t)},_r=0,gr=Math.random(),br=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++_r+gr).toString(36))},wr=t(function(e){var t=zn,n=vr,r=yr,o=br("src"),i="toString",a=Function[i],s=(""+a).split(i);Hn.inspectSource=function(e){return a.call(e)},(e.exports=function(e,i,a,u){var c="function"==typeof a;c&&(r(a,"name")||n(a,"name",i)),e[i]!==a&&(c&&(r(a,o)||n(a,o,e[i]?""+e[i]:s.join(String(i)))),e===t?e[i]=a:u?e[i]?e[i]=a:n(e,i,a):(delete e[i],n(e,i,a)))})(Function.prototype,i,function(){return"function"==typeof this&&this[o]||a.call(this)})}),Cr=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},kr=Cr,Or=function(e,t,n){if(kr(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},xr=zn,Er=Hn,Sr=vr,jr=wr,Ir=Or,Ar="prototype",Tr=function(e,t,n){var 
 r,o,i,a,s=e&Tr.F,u=e&Tr.G,c=e&Tr.S,l=e&Tr.P,f=e&Tr.B,d=u?xr:c?xr[t]||(xr[t]={}):(xr[t]||{})[Ar],p=u?Er:Er[t]||(Er[t]={}),h=p[Ar]||(p[Ar]={});u&&(n=t);for(r in n)o=!s&&d&&void 0!==d[r],i=(o?d:n)[r],a=f&&o?Ir(i,xr):l&&"function"==typeof i?Ir(Function.call,i):i,d&&jr(d,r,i,e&Tr.U),p[r]!=i&&Sr(p,r,a),l&&h[r]!=i&&(h[r]=i)};xr.core=Er,Tr.F=1,Tr.G=2,Tr.S=4,Tr.P=8,Tr.B=16,Tr.W=32,Tr.U=64,Tr.R=128;var Nr=Tr,Rr={}.toString,Dr=function(e){return Rr.call(e).slice(8,-1)},$r=Dr,Pr=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==$r(e)?e.split(""):Object(e)},Mr=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},Fr=Pr,qr=Mr,Lr=function(e){return Fr(qr(e))},Vr=Math.ceil,Ur=Math.floor,Jr=function(e){return isNaN(e=+e)?0:(e>0?Ur:Vr)(e)},Br=Jr,Wr=Math.min,zr=function(e){return e>0?Wr(Br(e),9007199254740991):0},Hr=Jr,Gr=Math.max,Xr=Math.min,Kr=function(e,t){return e=Hr(e),e<0?Gr(e+t,0):Xr(e,t)},Qr=Lr,Zr=zr,Yr=Kr,eo=function(e){return function(t,n,r){var 
 o,i=Qr(t),a=Zr(i.length),s=Yr(r,a);if(e&&n!=n){for(;a>s;)if(o=i[s++],o!=o)return!0}else for(;a>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}},to=zn,no="__core-js_shared__",ro=to[no]||(to[no]={}),oo=function(e){return ro[e]||(ro[e]={})},io=oo("keys"),ao=br,so=function(e){return io[e]||(io[e]=ao(e))},uo=yr,co=Lr,lo=eo(!1),fo=so("IE_PROTO"),po=function(e,t){var n,r=co(e),o=0,i=[];for(n in r)n!=fo&&uo(r,n)&&i.push(n);for(;t.length>o;)uo(r,n=t[o++])&&(~lo(i,n)||i.push(n));return i},ho="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),vo=po,mo=ho,yo=Object.keys||function(e){return vo(e,mo)},_o=Object.getOwnPropertySymbols,go={f:_o},bo={}.propertyIsEnumerable,wo={f:bo},Co=Mr,ko=function(e){return Object(Co(e))},Oo=yo,xo=go,Eo=wo,So=ko,jo=Pr,Io=Object.assign,Ao=!Io||Qn(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=Io({},e)[n]||Object.keys(Io({},t)).
 join("")!=r})?function(e,t){for(var n=arguments,r=So(e),o=arguments.length,i=1,a=xo.f,s=Eo.f;o>i;)for(var u,c=jo(n[i++]),l=a?Oo(c).concat(a(c)):Oo(c),f=l.length,d=0;f>d;)s.call(c,u=l[d++])&&(r[u]=c[u]);return r}:Io,To=Nr;To(To.S+To.F,"Object",{assign:Ao}),Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){function n(e,t){return r.call(e,t),e}var r;try{r=e.getOwnPropertyDescriptor(e.prototype,t).set,r.call({},null)}catch(o){if(e.prototype!=={}[t]||void 0==={__proto__:null}.__proto__)return;r=function(e){this[t]=e},n.polyfill=n(n({},null),e.prototype)instanceof e}return n}(Object,"__proto__"));var No=Wn,Ro=No.WXEnvironment;Ro&&"iOS"===Ro.platform&&(Wn.Promise=void 0);var Do=t(function(e){var t=oo("wks"),n=br,r=zn.Symbol,o="function"==typeof r,i=e.exports=function(e){return t[e]||(t[e]=o&&r[e]||(o?r:n)("Symbol."+e))};i.store=t}),$o=Dr,Po=Do("toStringTag"),Mo="Arguments"==$o(function(){return arguments}()),Fo=function(e,t){try{return e[t]}catch(e){}},qo=function(e){var t,n,r;re
 turn void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=Fo(t=Object(e),Po))?n:Mo?$o(t):"Object"==(r=$o(t))&&"function"==typeof t.callee?"Arguments":r},Lo=qo,Vo={};Vo[Do("toStringTag")]="z",Vo+""!="[object z]"&&wr(Object.prototype,"toString",function(){return"[object "+Lo(this)+"]"},!0);var Uo=Jr,Jo=Mr,Bo=function(e){return function(t,n){var r,o,i=String(Jo(t)),a=Uo(n),s=i.length;return a<0||a>=s?e?"":void 0:(r=i.charCodeAt(a),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?e?i.charAt(a):r:e?i.slice(a,a+2):(r-55296<<10)+(o-56320)+65536)}},Wo=!1,zo={},Ho=fr,Go=Kn,Xo=yo,Ko=Zn?Object.defineProperties:function(e,t){Go(e);for(var n,r=Xo(t),o=r.length,i=0;o>i;)Ho.f(e,n=r[i++],t[n]);return e},Qo=zn.document&&document.documentElement,Zo=Kn,Yo=Ko,ei=ho,ti=so("IE_PROTO"),ni=function(){},ri="prototype",oi=function(){var e,t=nr("iframe"),n=ei.length,r="<",o=">";for(t.style.display="none",Qo.appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"s
 cript"+o+"document.F=Object"+r+"/script"+o),e.close(),oi=e.F;n--;)delete oi[ri][ei[n]];return oi()},ii=Object.create||function(e,t){var n;return null!==e?(ni[ri]=Zo(e),n=new ni,ni[ri]=null,n[ti]=e):n=oi(),void 0===t?n:Yo(n,t)},ai=fr.f,si=yr,ui=Do("toStringTag"),ci=function(e,t,n){e&&!si(e=n?e:e.prototype,ui)&&ai(e,ui,{configurable:!0,value:t})},li=ii,fi=dr,di=ci,pi={};vr(pi,Do("iterator"),function(){return this});var hi=function(e,t,n){e.prototype=li(pi,{next:fi(1,n)}),di(e,t+" Iterator")},vi=yr,mi=ko,yi=so("IE_PROTO"),_i=Object.prototype,gi=Object.getPrototypeOf||function(e){return e=mi(e),vi(e,yi)?e[yi]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?_i:null},bi=Wo,wi=Nr,Ci=wr,ki=vr,Oi=yr,xi=zo,Ei=hi,Si=ci,ji=gi,Ii=Do("iterator"),Ai=!([].keys&&"next"in[].keys()),Ti="@@iterator",Ni="keys",Ri="values",Di=function(){return this},$i=function(e,t,n,r,o,i,a){Ei(n,t,r);var s,u,c,l=function(e){if(!Ai&&e in h)return h[e];switch(e){ca
 se Ni:return function(){return new n(this,e)};case Ri:return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d=o==Ri,p=!1,h=e.prototype,v=h[Ii]||h[Ti]||o&&h[o],m=v||l(o),y=o?d?l("entries"):m:void 0,_="Array"==t?h.entries||v:v;if(_&&(c=ji(_.call(new e)),c!==Object.prototype&&(Si(c,f,!0),bi||Oi(c,Ii)||ki(c,Ii,Di))),d&&v&&v.name!==Ri&&(p=!0,m=function(){return v.call(this)}),bi&&!a||!Ai&&!p&&h[Ii]||ki(h,Ii,m),xi[t]=m,xi[f]=Di,o)if(s={values:d?m:l(Ri),keys:i?m:l(Ni),entries:y},a)for(u in s)u in h||Ci(h,u,s[u]);else wi(wi.P+wi.F*(Ai||p),t,s);return s},Pi=Bo(!0);$i(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Pi(t,n),this._i+=e.length,{value:e,done:!1})});var Mi=Do("unscopables"),Fi=Array.prototype;void 0==Fi[Mi]&&vr(Fi,Mi,{});var qi=function(e){Fi[Mi][e]=!0},Li=function(e,t){return{value:t,done:!!e}},Vi=qi,Ui=Li,Ji=zo,Bi=Lr,Wi=$i(Array,"Array",function(e
 ,t){this._t=Bi(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Ui(1)):"keys"==t?Ui(0,n):"values"==t?Ui(0,e[n]):Ui(0,[n,e[n]])},"values");Ji.Arguments=Ji.Array,Vi("keys"),Vi("values"),Vi("entries");for(var zi=Wi,Hi=wr,Gi=zn,Xi=vr,Ki=zo,Qi=Do,Zi=Qi("iterator"),Yi=Qi("toStringTag"),ea=Ki.Array,ta=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],na=0;na<5;na++){var ra,oa=ta[na],ia=Gi[oa],aa=ia&&ia.prototype;if(aa){aa[Zi]||Xi(aa,Zi,ea),aa[Yi]||Xi(aa,Yi,oa),Ki[oa]=ea;for(ra in zi)aa[ra]||Hi(aa,ra,zi[ra],!0)}}var sa,ua,ca,la=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},fa=Kn,da=function(e,t,n,r){try{return r?t(fa(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&fa(o.call(e)),t}},pa=zo,ha=Do("iterator"),va=Array.prototype,ma=function(e){return void 0!==e&&(pa.Array===e||va[ha]===e)},ya=qo,_a=Do("iterator"),ga=zo,ba=Hn.getIteratorMe
 thod=function(e){if(void 0!=e)return e[_a]||e["@@iterator"]||ga[ya(e)]},wa=t(function(e){var t=Or,n=da,r=ma,o=Kn,i=zr,a=ba,s={},u={},c=e.exports=function(e,c,l,f,d){var p,h,v,m,y=d?function(){return e}:a(e),_=t(l,f,c?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(r(y)){for(p=i(e.length);p>g;g++)if(m=c?_(o(h=e[g])[0],h[1]):_(e[g]),m===s||m===u)return m}else for(v=y.call(e);!(h=v.next()).done;)if(m=n(v,_,h.value,c),m===s||m===u)return m};c.BREAK=s,c.RETURN=u}),Ca=Kn,ka=Cr,Oa=Do("species"),xa=function(e,t){var n,r=Ca(e).constructor;return void 0===r||void 0==(n=Ca(r)[Oa])?t:ka(n)},Ea=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Sa=Or,ja=Ea,Ia=Qo,Aa=nr,Ta=zn,Na=Ta.process,Ra=Ta.setImmediate,D
 a=Ta.clearImmediate,$a=Ta.MessageChannel,Pa=0,Ma={},Fa="onreadystatechange",qa=function(){var e=+this;if(Ma.hasOwnProperty(e)){var t=Ma[e];delete Ma[e],t()}},La=function(e){qa.call(e.data)};Ra&&Da||(Ra=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return Ma[++Pa]=function(){ja("function"==typeof e?e:Function(e),n)},sa(Pa),Pa},Da=function(e){delete Ma[e]},"process"==Dr(Na)?sa=function(e){Na.nextTick(Sa(qa,e,1))}:$a?(ua=new $a,ca=ua.port2,ua.port1.onmessage=La,sa=Sa(ca.postMessage,ca,1)):Ta.addEventListener&&"function"==typeof postMessage&&!Ta.importScripts?(sa=function(e){Ta.postMessage(e+"","*")},Ta.addEventListener("message",La,!1)):sa=Fa in Aa("script")?function(e){Ia.appendChild(Aa("script"))[Fa]=function(){Ia.removeChild(this),qa.call(e)}}:function(e){setTimeout(Sa(qa,e,1),0)});var Va={set:Ra,clear:Da},Ua=zn,Ja=Va.set,Ba=Ua.MutationObserver||Ua.WebKitMutationObserver,Wa=Ua.process,za=Ua.Promise,Ha="process"==Dr(Wa),Ga=function(){var e,t,n,r=function
 (){var r,o;for(Ha&&(r=Wa.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(Ha)n=function(){Wa.nextTick(r)};else if(Ba){var o=!0,i=document.createTextNode("");new Ba(r).observe(i,{characterData:!0}),n=function(){i.data=o=!o}}else if(za&&za.resolve){var a=za.resolve();n=function(){a.then(r)}}else n=function(){Ja.call(Ua,r)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}},Xa=wr,Ka=function(e,t,n){for(var r in t)Xa(e,r,t[r],n);return e},Qa=zn,Za=fr,Ya=Zn,es=Do("species"),ts=function(e){var t=Qa[e];Ya&&t&&!t[es]&&Za.f(t,es,{configurable:!0,get:function(){return this}})},ns=Do("iterator"),rs=!1;try{var os=[7][ns]();os.return=function(){rs=!0},Array.from(os,function(){throw 2})}catch(e){}var is,as,ss,us=function(e,t){if(!t&&!rs)return!1;var n=!1;try{var r=[7],o=r[ns]();o.next=function(){return{done:n=!0}},r[ns]=function(){return o},e(r)}catch(e){}return n},cs=Wo,ls=zn,fs=Or,ds=qo,ps=Nr,hs=Gn,vs=Cr,ms=la,ys=
 wa,_s=xa,gs=Va.set,bs=Ga(),ws="Promise",Cs=ls.TypeError,ks=ls.process,Os=ls[ws],ks=ls.process,xs="process"==ds(ks),Es=function(){},Ss=!!function(){try{var e=Os.resolve(1),t=(e.constructor={})[Do("species")]=function(e){e(Es,Es)};return(xs||"function"==typeof PromiseRejectionEvent)&&e.then(Es)instanceof t}catch(e){}}(),js=function(e,t){return e===t||e===Os&&t===ss},Is=function(e){var t;return!(!hs(e)||"function"!=typeof(t=e.then))&&t},As=function(e){return js(Os,e)?new Ts(e):new as(e)},Ts=as=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw Cs("Bad Promise constructor");t=e,n=r}),this.resolve=vs(t),this.reject=vs(n)},Ns=function(e){try{e()}catch(e){return{error:e}}},Rs=function(e,t){if(!e._n){e._n=!0;var n=e._c;bs(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&Ps(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(Cs("Promise-chain cycle")):(i=Is
 (n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&Ds(e)})}},Ds=function(e){gs.call(ls,function(){var t,n,r,o=e._v;if($s(e)&&(t=Ns(function(){xs?ks.emit("unhandledRejection",o,e):(n=ls.onunhandledrejection)?n({promise:e,reason:o}):(r=ls.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=xs||$s(e)?2:1),e._a=void 0,t)throw t.error})},$s=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!$s(t.promise))return!1;return!0},Ps=function(e){gs.call(ls,function(){var t;xs?ks.emit("rejectionHandled",e):(t=ls.onrejectionhandled)&&t({promise:e,reason:e._v})})},Ms=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),Rs(t,!0))},Fs=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Cs("Promise can't be resolved itself");(t=Is(e))?bs(function(){var r={_w:n,_d:!1};try{t.call(e,fs(Fs,r,1),fs(Ms,r,1))}catch(e){Ms.call(r,e)}}):(n._v=e,n._s=1,Rs(n,!1)
 )}catch(e){Ms.call({_w:n,_d:!1},e)}}};Ss||(Os=function(e){ms(this,Os,ws,"_h"),vs(e),is.call(this);try{e(fs(Fs,this,1),fs(Ms,this,1))}catch(e){Ms.call(this,e)}},is=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},is.prototype=Ka(Os.prototype,{then:function(e,t){var n=As(_s(this,Os));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=xs?ks.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&Rs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Ts=function(){var e=new is;this.promise=e,this.resolve=fs(Fs,e,1),this.reject=fs(Ms,e,1)}),ps(ps.G+ps.W+ps.F*!Ss,{Promise:Os}),ci(Os,ws),ts(ws),ss=Hn[ws],ps(ps.S+ps.F*!Ss,ws,{reject:function(e){var t=As(this),n=t.reject;return n(e),t.promise}}),ps(ps.S+ps.F*(cs||!Ss),ws,{resolve:function(e){if(e instanceof Os&&js(e.constructor,this))return e;var t=As(this),n=t.resolve;return n(e),t.promise}}),ps(ps.S+ps.F*!(Ss&&us(function(e){Os.all(e).catch(Es)}
 )),ws,{all:function(e){var t=this,n=As(t),r=n.resolve,o=n.reject,i=Ns(function(){var n=[],i=0,a=1;ys(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=As(t),r=n.reject,o=Ns(function(){ys(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}});var qs=["off","error","warn","info","log","debug"],Ls={},Vs=global.console,Us=global.setTimeout,Js=global.setTimeoutNative;s();var Bs=function(){},Ws=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:e}),Bs=t||function(){}};Ws.prototype.send=function(e,t,n){var r=t.action,o=t.component,i=t.ref,a=t.module,s=t.method;switch(e){case"dom":return this[r](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,i,s,n,{component:o});default:return this.moduleHandler(this.instanceId,a,s,n,{})}},Ws.prototype.callDOM=function(e,t){return this
 [e](this.instanceId,t)},Ws.prototype.callComponent=function(e,t,n){return this.componentHandler(this.instanceId,e,t,n,{})},Ws.prototype.callModule=function(e,t,n){return this.moduleHandler(this.instanceId,e,t,n,{})};var zs,Hs,Gs,Xs={},Ks=1,Qs={},Zs=[],Ys=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/,eu={},tu={createInstance:R,registerService:S,unregisterService:j};q.prototype.destroy=function(){var e=d(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var nu="div";L.prototype=Object.create(q.prototype),L.prototype.constructor=L,x(L),Object.assign(L.prototype,{appendChild:function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(k(e,this.children,this.children.length,!0),1===e.nodeType){var t=k(e,this.pureChildren,this.pureChildren.length),n=h(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(g(e,this),C(e,this.children,this.children.length,!0),this.docId&&V(this.docId,e),1===e.n
 odeType){C(e,this.pureChildren,this.pureChildren.length);var r=h(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},insertBefore:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(k(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=b(t),r=k(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=h(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(g(e,this),C(e,this.children,this.children.indexOf(t),!0),this.docId&&V(this.docId,e),1===e.nodeType){var i=b(t),a=C(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=h(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},insertAfter:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(k(e,this.children,this.children.indexOf(t)+1,
 !0),1===e.nodeType){var n=k(e,this.pureChildren,this.pureChildren.indexOf(w(t))+1),r=h(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(g(e,this),C(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&V(this.docId,e),1===e.nodeType){var o=C(e,this.pureChildren,this.pureChildren.indexOf(w(t))+1),i=h(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},removeChild:function(e,t){if(e.parentNode&&(O(e,this.children,!0),1===e.nodeType)){O(e,this.pureChildren);var n=h(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},clear:function(){var e=h(this.docId);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},setAttr:function(e,t,n){if(this.attr[e]!==t||n===!1){this.attr[e]=t;var r=h(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updat
 eAttrs"},[this.ref,o])}}},setStyle:function(e,t,n){if(this.style[e]!==t||n===!1){this.style[e]=t;var r=h(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},setClassStyle:function(e){var t=this;for(var n in this.classStyle)t.classStyle[n]="";Object.assign(this.classStyle,e);var r=h(this.docId);r&&r.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},addEvent:function(e,t){if(!this.event[e]){this.event[e]=t;var n=h(this.docId);n&&n.send("dom",{action:"addEvent"},[this.ref,e])}},removeEvent:function(e){if(this.event[e]){delete this.event[e];var t=h(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},fireEvent:function(e,t){var n=this.event[e];if(n)return n.call(this,t)},toStyle:function(){return Object.assign({},this.classStyle,this.style)},toJSON:function(){var e={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},t=Object.keys(this.event);return t.length&&(e.event=t),this.pureChildren.length&&(e
 .children=this.pureChildren.map(function(e){return e.toJSON()})),e},toString:function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"}}),U.prototype=Object.create(q.prototype),U.prototype.constructor=U,U.prototype.toString=function(){return"<!-- "+this.value+" -->"},Object.assign(J.prototype,{createFinish:function(e){var t=this.handler;return t([B("createFinish")],e)},updateFinish:function(e){var t=this.handler;return t([B("updateFinish")],e)},refreshFinish:function(e){var t=this.handler;return t([B("refreshFinish")],e)},createBody:function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[B("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return B("addElement",[t.ref,e,-1])})),this.addActions(r)},addElement:function(e,t,n){return n>=0||(n=-1),this.addActions(B("addElement",[t,e.toJSON(),n]))},removeElement:function(e){if(Arra
 y.isArray(e)){var t=e.map(function(e){return B("removeElement",[e])});return this.addActions(t)}return this.addActions(B("removeElement",[e]))},moveElement:function(e,t,n){return this.addActions(B("moveElement",[e,t,n]))},setAttr:function(e,t,n){var r={};return r[t]=n,this.addActions(B("updateAttrs",[e,r]))},setStyle:function(e,t,n){var r={};return r[t]=n,this.addActions(B("updateStyle",[e,r]))},setStyles:function(e,t){return this.addActions(B("updateStyle",[e,t]))},addEvent:function(e,t){return this.addActions(B("addEvent",[e,t]))},removeEvent:function(e,t){return this.addActions(B("removeEvent",[e,t]))},handler:function(e,t){return t&&t()},addActions:function(e){var t=this.updates,n=this.handler;return Array.isArray(e)||(e=[e]),this.batched?void t.push.apply(t,e):n(e)}});var ru={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",r
 emoveEvent:"callRemoveEvent"};G.handler=null,Object.assign(G.prototype,{getRef:function(e){return this.nodeMap[e];
-},open:function(){this.listener.batched=!1},close:function(){this.listener.batched=!0},createDocumentElement:function(){var e=this;if(!this.documentElement){var t=new L("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){m(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){m(e,t,n)}})}return this.documentElement},createBody:function(e,t){if(!this.body){var n=new L(e,t);_(this,n)}return this.body},createElement:function(e,t){return new L(e,t)},createComment:function(e){return new U(e)},fireEvent:function(e,t,n,r){if(e)return n=n||{},n.type=t,n.target=e,n.timestamp=Date.now(),r&&X(e,r),e.fireEvent(t,n)},destroy:function(){delete this.listener,delete this.nodeMap,p(this.id)}});var ou=function(e){this.instanceId=e,this.la
 stCallbackId=0,this.callbacks=[]};ou.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},ou.prototype.remove=function(e){var t=this.callbacks[e];return this.callbacks[e]=void 0,t},ou.prototype.consume=function(e,t,n){var r=this.callbacks[e];return"undefined"!=typeof n&&n!==!1||(this.callbacks[e]=void 0),"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},ou.prototype.close=function(){this.callbacks=this.callbacks.map(function(e){})};var iu={Document:G,Element:L,Comment:U,Listener:J,TaskCenter:Ws,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return global.callNative.apply(global,e)},CallbackManager:ou};G.handler=iu.sendTasks;var au,su={setNativeConsole:n,resetNativeConsole:r,setNativeTimer:s,resetNativeTimer:u,service:{register:S,unregister:j,has:I},freezePrototype:K,init:F,config:iu},uu={},cu={},lu=Q,fu=Z,du=Y,pu=ee,hu=te,vu=ne,mu=re,yu=oe,_u=ie,gu=ae,bu={init:lu,registerCompo
 nents:fu,registerModules:du,registerMethods:pu,prepareInstance:hu,createInstance:vu,refreshInstance:mu,destroyInstance:yu,getRoot:_u,receiveTasks:gu},wu=Object.freeze({default:bu,__moduleExports:bu,init:lu,registerComponents:fu,registerModules:du,registerMethods:pu,prepareInstance:hu,createInstance:vu,refreshInstance:mu,destroyInstance:yu,getRoot:_u,receiveTasks:gu}),Cu=t(function(e,t){function n(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function r(e){var t=parseFloat(e,10);return t||0===t?t:e}function o(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 i(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function a(e,t){return Xt.call(e,t)}function s(e){return"string"==typeof e||"number"==typeof e}function u(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function c(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 l(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){return null!==e&&"object"==typeof e}function p(e){return tn.call(e)===nn}function h(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function v(){}function m(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}function y(e,t){var n=d(e),r=d(t);return n&&r?JSON.stringify(e)===JSON.stringify(t):!n&&!r&&String(e)===String(t)}function _(e,t){for(var n=0;n<e.length;n++)if(y(e[n],t))return n;return-1}function g(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function b(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function w(e){if(!sn.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 C(e){
 return/native code/.test(e.toString())}function k(e){Cn.target&&kn.push(Cn.target),Cn.target=e}function O(){Cn.target=kn.pop()}function x(e,t){e.__proto__=t}function E(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];b(e,i,t[i])}}function S(e,t){if(d(e)){var n;return a(e,"__ob__")&&e.__ob__ instanceof jn?n=e.__ob__:Sn.shouldConvert&&!mn()&&(Array.isArray(e)||p(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new jn(e)),t&&n&&n.vmCount++,n}}function j(e,t,n,r){var o=new Cn,i=Object.getOwnPropertyDescriptor(e,t);if(!i||i.configurable!==!1){var a=i&&i.get,s=i&&i.set,u=S(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return Cn.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&T(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=S(t),o.notify())}})}}function I(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(a(e,t))return void(e[t]=n);var r=e.__ob__;if(!(e._isVue||r&&r.v
 mCount))return r?(j(r.value,t,n),r.dep.notify(),n):void(e[t]=n)}function A(e,t){var n=e.__ob__;e._isVue||n&&n.vmCount||a(e,t)&&(delete e[t],n&&n.dep.notify())}function T(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)&&T(t)}function N(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),s=0;s<i.length;s++)n=i[s],r=e[n],o=t[n],a(e,n)?p(r)&&p(o)&&N(r,o):I(e,n,o);return e}function R(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function D(e,t){var n=Object.create(e||null);return t?f(n,t):n}function $(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)r=t[n],"string"==typeof r&&(o=Qt(r),i[o]={type:null});else if(p(t))for(var a in t)r=t[a],o=Qt(a),i[o]=p(r)?r:{type:r};e.props=i}}function P(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function M(e,t,n){function r(r){var o=In[r]||Tn;l[r]=o(e[r],t[r],n,r)}$(t),P(t);var o=t.extends;if(o&&(e="function"
 ==typeof o?M(e,o.options,n):M(e,o,n)),t.mixins)for(var i=0,s=t.mixins.length;i<s;i++){var u=t.mixins[i];u.prototype instanceof Be&&(u=u.options),e=M(e,u,n)}var c,l={};for(c in e)r(c);for(c in t)a(e,c)||r(c);return l}function F(e,t,n,r){if("string"==typeof n){var o=e[t];if(a(o,n))return o[n];var i=Qt(n);if(a(o,i))return o[i];var s=Zt(i);if(a(o,s))return o[s];var u=o[n]||o[i]||o[s];return u}}function q(e,t,n,r){var o=t[e],i=!a(n,e),s=n[e];if(U(Boolean,o.type)&&(i&&!a(o,"default")?s=!1:U(String,o.type)||""!==s&&s!==en(e)||(s=!0)),void 0===s){s=L(r,o,e);var u=Sn.shouldConvert;Sn.shouldConvert=!0,S(s),Sn.shouldConvert=u}return s}function L(e,t,n){if(a(t,"default")){var r=t.default;return d(r),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e[n]?e[n]:"function"==typeof r&&t.type!==Function?r.call(e):r}}function V(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function U(e,t){if(!Array.isArray(t))return V(t)===V(e);for(var n=0,r=t.length;n<r;n++)if(
 V(t[n])===V(e))return!0;return!1}function J(e){return new Rn(void 0,void 0,void 0,String(e))}function B(e){var t=new Rn(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.isCloned=!0,t}function W(e){for(var t=new Array(e.length),n=0;n<e.length;n++)t[n]=B(e[n]);return t}function z(e,t,n,r,o){if(e){var i=n.$options._base;if(d(e)&&(e=i.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(e=Y(e,i,function(){n.$forceUpdate()}),!e)return;Je(e),t=t||{};var a=ee(t,e);if(e.options.functional)return H(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),ne(t);var u=e.options.name||o,c=new Rn("vue-component-"+e.cid+(u?"-"+u:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:o,children:r});return c}}}function H(e,t,n,r,o){var i={},a=e.options.props;if(a)for(var s in a)i[s]=q(s,a,t);var u=Object.create(r),c=function(e,t,n,r){return de(u,e,t,n,r,!0)},l=e.options.render.call(null
 ,c,{props:i,data:n,parent:r,children:o,slots:function(){return ye(o,r)}});return l instanceof Rn&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function G(e,t,n,r){var o=e.componentOptions,i={_isComponent:!0,parent:t,propsData:o.propsData,_componentTag:o.tag,_parentVnode:e,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function X(e,t,n,r){if(!e.child||e.child._isDestroyed){var o=e.child=G(e,qn,n,r);o.$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var i=e;K(i,i)}}function K(e,t){var n=t.componentOptions,r=t.child=e.child;r._updateFromParent(n.propsData,n.listeners,t,n.children)}function Q(e){e.child._isMounted||(e.child._isMounted=!0,xe(e.child,"mounted")),e.data.keepAlive&&(e.child._inactive=!1,xe(e.child,"activated"))}function Z(e){e.child._isDestroyed||(e.data.keepAlive?(e.child._inactive=!0,xe(e.child,"dea
 ctivated")):e.child.$destroy())}function Y(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],o=!0,i=function(n){if(d(n)&&(n=t.extend(n)),e.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(e){},s=e(i,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(i,a),o=!1,e.resolved}e.pendingCallbacks.push(n)}function ee(e,t){var n=t.options.props;if(n){var r={},o=e.attrs,i=e.props,a=e.domProps;if(o||i||a)for(var s in n){var u=en(s);te(r,i,s,u,!0)||te(r,o,s,u)||te(r,a,s,u)}return r}}function te(e,t,n,r,o){if(t){if(a(t,n))return e[n]=t[n],o||delete t[n],!0;if(a(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function ne(e){e.hook||(e.hook={});for(var t=0;t<Pn.length;t++){var n=Pn[t],r=e.hook[n],o=$n[n];e.hook[n]=r?re(o,r):o}}function re(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function oe(e,t,n,r){r+=t;var o=e.__injected||(e.__injected={});if(!o[r]){o[r]=!0;var i=e[t];i?e[t]=function(){i.apply(this,arguments),n.apply(this,arguments)}:e[t]=n}
 }function ie(e,t,n,r,o){var i,a,s,u,c,l,f;for(i in e)if(a=e[i],s=t[i],a)if(s){if(a!==s)if(Array.isArray(s)){s.length=a.length;for(var d=0;d<s.length;d++)s[d]=a[d];e[i]=s}else s.fn=a,e[i]=s}else f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,Array.isArray(a)?n(c,a.invoker=ae(a),f,l):(a.invoker||(u=a,a=e[i]={},a.fn=u,a.invoker=se(a)),n(c,a.invoker,f,l));else;for(i in t)e[i]||(f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,r(c,t[i].invoker,l))}function ae(e){return function(t){for(var n=arguments,r=1===arguments.length,o=0;o<e.length;o++)r?e[o](t):e[o].apply(null,n)}}function se(e){return function(t){var n=1===arguments.length;n?e.fn(t):e.fn.apply(null,arguments)}}function ue(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function ce(e){return s(e)?[J(e)]:Array.isArray(e)?le(e):void 0}function le(e,t){var n,r,o,i=[];for(n=0;n<e.length;n++)r=e[n],null!=r&&"boolean"!=typeof r&&(
 o=i[i.length-1],Array.isArray(r)?i.push.apply(i,le(r,(t||"")+"_"+n)):s(r)?o&&o.text?o.text+=String(r):""!==r&&i.push(J(r)):r.text&&o&&o.text?i[i.length-1]=J(o.text+r.text):(r.tag&&null==r.key&&null!=t&&(r.key="__vlist"+t+"_"+n+"__"),i.push(r)));return i}function fe(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function de(e,t,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o=Fn),pe(e,t,n,r,o)}function pe(e,t,n,r,o){if(n&&n.__ob__)return Dn();if(!t)return Dn();Array.isArray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===Fn?r=ce(r):o===Mn&&(r=ue(r));var i,a;if("string"==typeof t){var s;a=an.getTagNamespace(t),i=an.isReservedTag(t)?new Rn(an.parsePlatformTagName(t),n,r,void 0,void 0,e):(s=F(e.$options,"components",t))?z(s,n,e,r,t):new Rn(t,n,r,void 0,void 0,e)}else i=z(t,n,e,r);return i?(a&&he(i,a),i):Dn()}function he(e,t){if(e.ns=t,"foreignObject"!==e.tag&&e.children)for(var n=0,r=e.children.length;n<r;n++){var 
 o=e.children[n];o.tag&&!o.ns&&he(o,t)}}function ve(e){e.$vnode=null,e._vnode=null,e._staticTrees=null;var t=e.$options._parentVnode,n=t&&t.context;e.$slots=ye(e.$options._renderChildren,n),e.$scopedSlots={},e._c=function(t,n,r,o){return de(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return de(e,t,n,r,o,!0)},e.$options.el&&e.$mount(e.$options.el)}function me(e){function t(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&o(e[r],t+"_"+r,n);else o(e,t,n)}function o(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}e.prototype.$nextTick=function(e){return _n(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots)e.$slots[i]=W(e.$slots[i]);o&&o.data.scopedSlots&&(e.$scopedSlots=o.data.scopedSlots),r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){if(!an.errorHandler)throw t;an.errorHandler.call(null,t,e),
 a=e._vnode}return a instanceof Rn||(a=Dn()),a.parent=o,a},e.prototype._s=n,e.prototype._v=J,e.prototype._n=r,e.prototype._e=Dn,e.prototype._q=y,e.prototype._i=_,e.prototype._m=function(e,n){var r=this._staticTrees[e];return r&&!n?Array.isArray(r)?W(r):B(r):(r=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),t(r,"__static__"+e,!1),r)},e.prototype._o=function(e,n,r){return t(e,"__once__"+n+(r?"_"+r:""),!0),e},e.prototype._f=function(e){return F(this.$options,"filters",e,!0)||on},e.prototype._l=function(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(d(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return n},e.prototype._t=function(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&f(n,r),o(n)||t;var i=this.$slots[e];return i||t},e.prototype._b=functio
 n(e,t,n,r){if(n)if(d(n)){Array.isArray(n)&&(n=h(n));for(var o in n)if("class"===o||"style"===o)e[o]=n[o];else{var i=r||an.mustUseProp(t,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={});i[o]=n[o]}}else;return e},e.prototype._k=function(e,t,n){var r=an.keyCodes[t]||n;return Array.isArray(r)?r.indexOf(e)===-1:r!==e}}function ye(e,t){var n={};if(!e)return n;for(var r,o,i=[],a=0,s=e.length;a<s;a++)if(o=e[a],(o.context===t||o.functionalContext===t)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);"template"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.length&&(1!==i.length||" "!==i[0].text&&!i[0].isComment)&&(n.default=i),n}function _e(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&we(e,t)}function ge(e,t,n){n?An.$once(e,t):An.$on(e,t)}function be(e,t){An.$off(e,t)}function we(e,t,n){An=e,ie(t,n||{},ge,be,e)}function Ce(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;return(r._events[e]||(r._events[e]=[])).pus
 h(n),t.test(e)&&(r._hasHookEvent=!0),r},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;var r=n._events[e];if(!r)return n;if(1===arguments.length)return n._events[e]=null,n;for(var o,i=r.length;i--;)if(o=r[i],o===t||o.fn===t){r.splice(i,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?l(n):n;for(var r=l(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(t,r)}return t}}function ke(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=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function Oe(e){e.prototype._mount=function(e,t){var n=this;return n.$el=e,n.$options.render||(n.$options.render=Dn),xe(n,"beforeMount"),n
 ._watcher=new Hn(n,function(){n._update(n._render(),t)},v),t=!1,null==n.$vnode&&(n._isMounted=!0,xe(n,"mounted")),n},e.prototype._update=function(e,t){var n=this;n._isMounted&&xe(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=qn;qn=n,n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),qn=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype._updateFromParent=function(e,t,n,r){var o=this,i=!(!o.$options._renderChildren&&!r);if(o.$options._parentVnode=n,o.$vnode=n,o._vnode&&(o._vnode.parent=n),o.$options._renderChildren=r,e&&o.$options.props){Sn.shouldConvert=!1;for(var a=o.$options._propKeys||[],s=0;s<a.length;s++){var u=a[s];o[u]=q(u,o.$options.props,e,o)}Sn.shouldConvert=!0,o.$options.propsData=e}if(t){var c=o.$options._parentListeners;o.$options._parentListeners=t,we(o,t,c)}i&&(o.$slots=ye(r,n.context),o.$forceUpdate())},e.prototype.$forceUpdate=functi
 on(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){xe(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||i(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,xe(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}function xe(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)n[r].call(e);e._hasHookEvent&&e.$emit("hook:"+t)}function Ee(){Ln.length=0,Vn={},Un=Jn=!1}function Se(){Jn=!0;var e,t,n;for(Ln.sort(function(e,t){return e.id-t.id}),Bn=0;Bn<Ln.length;Bn++)e=Ln[Bn],t=e.id,Vn[t]=null,e.run();for(Bn=Ln.length;Bn--;)e=Ln[Bn],n=e.vm,n._watcher===e&&n._isMounted&&xe(n,"updated");yn&&an.devtools&&yn.emit("flush"),Ee()}function je(e){var t=e.id;if(null==Vn[t]){if(Vn[t]=!0,Jn){for(var n=Ln.length-1;n>=0&&Ln[n].id>e.id
 ;)n--;Ln.splice(Math.max(n,Bn)+1,0,e)}else Ln.push(e);Un||(Un=!0,_n(Se))}}function Ie(e){Gn.clear(),Ae(e,Gn)}function Ae(e,t){var n,r,o=Array.isArray(e);if((o||d(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--;)Ae(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)Ae(e[r[n]],t)}}function Te(e){e._watchers=[];var t=e.$options;t.props&&Ne(e,t.props),t.methods&&Pe(e,t.methods),t.data?Re(e):S(e._data={},!0),t.computed&&De(e,t.computed),t.watch&&Me(e,t.watch)}function Ne(e,t){var n=e.$options.propsData||{},r=e.$options._propKeys=Object.keys(t),o=!e.$parent;Sn.shouldConvert=o;for(var i=function(o){var i=r[o];j(e,i,q(i,t,n,e))},a=0;a<r.length;a++)i(a);Sn.shouldConvert=!0}function Re(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},p(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&a(r,n[o])||Le(e,n[o]);S(t,!0)}function De(e,t){for(var n in t){var r=t[n];"function"==typeof r?(X
 n.get=$e(r,e),Xn.set=v):(Xn.get=r.get?r.cache!==!1?$e(r.get,e):c(r.get,e):v,Xn.set=r.set?c(r.set,e):v),Object.defineProperty(e,n,Xn)}}function $e(e,t){var n=new Hn(t,e,v,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Cn.target&&n.depend(),n.value}}function Pe(e,t){for(var n in t)e[n]=null==t[n]?v:c(t[n],e)}function Me(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)Fe(e,n,r[o]);else Fe(e,n,r)}}function Fe(e,t,n){var r;p(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function qe(e){var t={};t.get=function(){return this._data},Object.defineProperty(e.prototype,"$data",t),e.prototype.$set=I,e.prototype.$delete=A,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var o=new Hn(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}function Le(e,t){g(t)||Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function Ve(e){e.proto
 type._init=function(e){var t=this;t._uid=Kn++,t._isVue=!0,e&&e._isComponent?Ue(t,e):t.$options=M(Je(t.constructor),e||{},t),t._renderProxy=t,t._self=t,ke(t),_e(t),xe(t,"beforeCreate"),Te(t),xe(t,"created"),ve(t)}}function Ue(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Je(e){var t=e.options;if(e.super){var n=e.super.options,r=e.superOptions,o=e.extendOptions;n!==r&&(e.superOptions=n,o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._scopeId=t._scopeId,t=e.options=M(n,o),t.name&&(t.components[t.name]=e))}return t}function Be(e){this._init(e)}function We(e){e.use=function(e){if(!e.installed){var t=l(arguments,1);return t.unshift(this),"function"==typeof e.install?e.instal
 l.apply(e,t):e.apply(null,t),e.installed=!0,this}}}function ze(e){e.mixin=function(e){this.options=M(this.options,e)}}function He(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=M(n.options,e),a.super=n,a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,an._assetTypes.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,o[r]=a,a}}function Ge(e){an._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function Xe(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e.test(t)}function Ke(e){var t={};t.get=function(){return an},Object
 .defineProperty(e,"config",t),e.util=Nn,e.set=I,e.delete=A,e.nextTick=_n,e.options=Object.create(null),an._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,f(e.options.components,Yn),We(e),ze(e),He(e),Ge(e)}function Qe(e){this.instanceId="",this.nodeId=er++,this.parentNode=null,this.nodeType=3,this.text=e}function Ze(e){return new tr.Element(e)}function Ye(e,t){return new tr.Element(e+":"+t)}function et(e){return new tr.TextNode(e)}function tt(e){return new tr.Comment(e)}function nt(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Ze("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function rt(e,t){return 3===t.nodeType?void e.setAttr("value",""):void e.removeChild(t)}function ot(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=Ze("text");n.setAttr("value",t.text),e.appendChild(n)}}function it(e){retur
 n e.parentNode}function at(e){return e.nextSibling}function st(e){return e.type}function ut(e,t){e.parentNode.setAttr("value",t)}function ct(e,t,n){e.setAttr(t,n)}function lt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.child||e.elm,a=r.$refs;t?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function ft(e){return null==e}function dt(e){return null!=e}function pt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function ht(e,t,n){var r,o,i={};for(r=t;r<=n;++r)o=e[r].key,dt(o)&&(i[o]=r);return i}function vt(e){function t(e){return new Rn(S.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=S.parentNode(e);t&&S.removeChild(t,e)}function i(e,t,n,r,o){if(e.isRootInsert=!o,!a(e,t,n,r)){var i=e.data,s=e.children,u=e.tag;if(dt(u)){e.elm=e.ns?S.createElementNS(e.ns,u):S.createEl
 ement(u,e),h(e);var f=i&&i.appendAsTree;f||(dt(i)&&d(e,t),c(n,e.elm,r)),l(e,s,t),f&&(dt(i)&&d(e,t),c(n,e.elm,r))}else e.isComment?(e.elm=S.createComment(e.text),c(n,e.elm,r)):(e.elm=S.createTextNode(e.text),c(n,e.elm,r))}}function a(e,t,n,r){var o=e.data;if(dt(o)){var i=dt(e.child)&&o.keepAlive;if(dt(o=o.hook)&&dt(o=o.init)&&o(e,!1,n,r),dt(e.child))return p(e,t),i&&u(e,t,n,r),!0}}function u(e,t,n,r){for(var o,i=e;i.child;)if(i=i.child._vnode,dt(o=i.data)&&dt(o=o.transition)){for(o=0;o<x.activate.length;++o)x.activate[o](ir,i);t.push(i);break}c(n,e.elm,r)}function c(e,t,n){e&&(n?S.insertBefore(e,t,n):S.appendChild(e,t))}function l(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)i(t[r],n,e.elm,null,!0);else s(e.text)&&S.appendChild(e.elm,S.createTextNode(e.text))}function f(e){for(;e.child;)e=e.child._vnode;return dt(e.tag)}function d(e,t){for(var n=0;n<x.create.length;++n)x.create[n](ir,e);k=e.data.hook,dt(k)&&(k.create&&k.create(ir,e),k.insert&&t.push(e))}function p(e,t){e.dat
 a.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.child.$el,f(e)?(d(e,t),h(e)):(lt(e),t.push(e))}function h(e){var t;dt(t=e.context)&&dt(t=t.$

<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
index 80305f5..86b1880 100755
Binary files a/android/sdk/libs/armeabi/libweexv8.so and b/android/sdk/libs/armeabi/libweexv8.so differ



[11/30] incubator-weex git commit: * [android] make the app playground to use v8 code cache.

Posted by zs...@apache.org.
* [android] make the app playground to use v8 code cache.

a) define a bundle banner plugin which calculate a digest for a bundle
   automatically.
b) modify the webpack config.
c) parse the bundle banner into a json object.
d) serialize v8 code caches into the path "/data/data/$appname/files/v8"


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

Branch: refs/heads/0.12-dev
Commit: d10f1ab0b345fd10f63e33b0c6b3ff907ac87b19
Parents: b7d8a7b
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Tue Feb 7 20:37:42 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 15:27:49 2017 +0800

----------------------------------------------------------------------
 android/commons/build.gradle                    |    3 +-
 .../weex/commons/AbstractWeexActivity.java      |   24 +
 .../playground/app/src/main/assets/animation.js |   11 +-
 .../app/src/main/assets/component/a-demo.js     |   11 +-
 .../src/main/assets/component/countdown-demo.js |   11 +-
 .../app/src/main/assets/component/image-demo.js |   11 +-
 .../app/src/main/assets/component/input-demo.js |   11 +-
 .../main/assets/component/list/list-basic.js    |    8 +
 .../assets/component/list/list-demo-horizon.js  |    8 +
 .../src/main/assets/component/list/list-demo.js |    8 +
 .../src/main/assets/component/marquee-demo.js   |   11 +-
 .../src/main/assets/component/navigator-demo.js |   15 +-
 .../main/assets/component/process-bar-demo.js   |   11 +-
 .../src/main/assets/component/scroller-demo.js  |   11 +-
 .../assets/component/slider-neighbor/index.js   |  291 +++
 .../slider-neighbor/slider-neighbor-item.js     |    8 +
 .../slider-neighbor/slider-neighbor-page.js     |    8 +
 .../src/main/assets/component/slider/index.js   |   44 +-
 .../main/assets/component/slider/slider-item.js |    8 +
 .../main/assets/component/slider/slider-page.js |    8 +
 .../main/assets/component/tabbar/tabbar-demo.js |   15 +-
 .../main/assets/component/tabbar/tabbar-item.js |    8 +
 .../app/src/main/assets/component/text-demo.js  |   11 +-
 .../app/src/main/assets/component/video-demo.js |   11 +-
 .../app/src/main/assets/component/web-demo.js   |   12 +-
 android/playground/app/src/main/assets/error.js | 2224 ++++++++++++++++
 .../app/src/main/assets/geolocation.js          |  191 ++
 android/playground/app/src/main/assets/hello.js |    8 +
 .../app/src/main/assets/hello_weex.js           |   28 -
 .../playground/app/src/main/assets/iconfont.js  |    8 +
 android/playground/app/src/main/assets/index.js |   17 +-
 .../app/src/main/assets/module/clipboard.js     |   28 +-
 .../app/src/main/assets/module/componentRect.js |  113 +-
 .../app/src/main/assets/module/instance-api.js  |   23 +-
 .../app/src/main/assets/module/modal.js         |   27 +-
 .../app/src/main/assets/module/picker-demo.js   |   27 +-
 .../app/src/main/assets/module/storage-demo.js  |   23 +-
 .../app/src/main/assets/module/stream-demo.js   |   27 +-
 .../src/main/assets/module/websocket-demo.js    | 2417 ++++++++++++++++++
 .../app/src/main/assets/showcase/calculator.js  |   30 +-
 .../assets/showcase/dropdown/dropdown-demo.js   |   38 +-
 .../assets/showcase/dropdown/we-dropdown.js     |   20 +-
 .../app/src/main/assets/showcase/minesweeper.js |   20 +-
 .../main/assets/showcase/new-fashion/banner.js  |   16 +-
 .../main/assets/showcase/new-fashion/banners.js |   28 +-
 .../main/assets/showcase/new-fashion/brand.js   |   44 +-
 .../assets/showcase/new-fashion/category.js     |   32 +-
 .../main/assets/showcase/new-fashion/coupon.js  |   20 +-
 .../main/assets/showcase/new-fashion/fashion.js |   46 +-
 .../main/assets/showcase/new-fashion/goods.js   |   32 +-
 .../assets/showcase/new-fashion/headlines.js    |   56 +-
 .../main/assets/showcase/new-fashion/index.js   |   34 +-
 .../main/assets/showcase/new-fashion/link.js    |   16 +-
 .../main/assets/showcase/new-fashion/main.js    |  222 +-
 .../main/assets/showcase/new-fashion/match.js   |   32 +-
 .../assets/showcase/new-fashion/resource.js     |   46 +-
 .../main/assets/showcase/new-fashion/scene.js   |   32 +-
 .../app/src/main/assets/showcase/ui.js          |   30 +-
 .../app/src/main/assets/style/index.js          |   80 +-
 .../app/src/main/assets/style/style-box.js      |   46 +-
 .../app/src/main/assets/style/style-flex.js     |   54 +-
 .../app/src/main/assets/style/style-item.js     |   20 +-
 .../app/src/main/assets/syntax/hello-world-1.js |   12 +-
 .../app/src/main/assets/syntax/hello-world-2.js |   14 +-
 .../app/src/main/assets/syntax/hello-world-3.js |   18 +-
 .../app/src/main/assets/syntax/hello-world-4.js |   22 +-
 .../app/src/main/assets/syntax/hello-world-5.js |   22 +-
 .../app/src/main/assets/syntax/hello-world.js   |   22 +-
 .../app/src/main/assets/syntax/index.js         |   30 +-
 .../src/main/assets/syntax/script-component.js  |   32 +-
 .../app/src/main/assets/syntax/script-data.js   |   20 +-
 .../app/src/main/assets/syntax/script-events.js |   20 +-
 .../src/main/assets/syntax/script-instance.js   |   20 +-
 .../src/main/assets/syntax/script-lifecycle.js  |   20 +-
 .../app/src/main/assets/syntax/script-module.js |   20 +-
 .../src/main/assets/syntax/script-options.js    |   20 +-
 .../src/main/assets/syntax/template-class.js    |   20 +-
 .../src/main/assets/syntax/template-content.js  |   28 +-
 .../src/main/assets/syntax/template-event.js    |   20 +-
 .../app/src/main/assets/syntax/template-if.js   |   20 +-
 .../assets/syntax/template-repeat-update.js     |   20 +-
 .../src/main/assets/syntax/template-repeat.js   |   20 +-
 .../src/main/assets/syntax/template-style.js    |   16 +-
 .../playground/app/src/main/assets/template.js  |   23 +-
 android/playground/app/src/main/assets/test.js  |  136 +
 .../java/com/alibaba/weex/WXPageActivity.java   |   31 +-
 .../java/com/taobao/weex/WXEnvironment.java     |   18 +
 .../java/com/taobao/weex/common/Constants.java  |    8 +
 .../java/com/taobao/weex/utils/WXUtils.java     |   84 +-
 build/examples-banner-plugin.js                 |   65 +
 build/webpack.examples.config.js                |    3 +-
 package.json                                    |    1 +
 92 files changed, 6893 insertions(+), 645 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/commons/build.gradle
----------------------------------------------------------------------
diff --git a/android/commons/build.gradle b/android/commons/build.gradle
index f2f691a..64090ab 100644
--- a/android/commons/build.gradle
+++ b/android/commons/build.gradle
@@ -49,6 +49,7 @@ dependencies {
     provided 'com.taobao.android:weex_analyzer:0.1.0.5'
     provided 'com.squareup.okhttp:okhttp:2.3.0'
     provided 'com.squareup.okhttp:okhttp-ws:2.3.0'
+    provided 'com.alibaba:fastjson:1.1.46.android'
 
     testCompile 'junit:junit:4.12'
     testCompile 'org.hamcrest:hamcrest-core:1.3'
@@ -66,4 +67,4 @@ dependencies {
 
 task wrapper(type: Wrapper) {
     gradleVersion = '2.10'
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
----------------------------------------------------------------------
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java b/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
index d42ffa4..bf87569 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
@@ -214,12 +214,17 @@ import android.view.KeyEvent;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.weex.commons.util.AssertUtil;
 import com.alibaba.weex.commons.util.ScreenUtil;
+import com.taobao.weex.common.Constants;
 import com.taobao.weex.IWXRenderListener;
+import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.utils.WXUtils;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -279,6 +284,25 @@ public abstract class AbstractWeexActivity extends AppCompatActivity implements
     AssertUtil.throwIfNull(mContainer,new RuntimeException("Can't render page, container is null"));
     Map<String, Object> options = new HashMap<>();
     options.put(WXSDKInstance.BUNDLE_URL, source);
+    // Set options.bundleDigest
+    try {
+      String banner = WXUtils.getBundleBanner(template);
+      JSONObject jsonObj = JSONObject.parseObject(banner);
+      String digest = null;
+      if (jsonObj != null) {
+        digest = jsonObj.getString(Constants.CodeCache.BANNER_DIGEST);
+      }
+      if (digest != null) {
+        options.put(Constants.CodeCache.DIGEST, digest);
+      }
+    } catch (Throwable t) {}
+    //Set options.codeCachePath
+    String path = WXEnvironment.getFilesDir(getApplicationContext());
+    path += File.separator;
+    path += Constants.CodeCache.SAVE_PATH;
+    path += File.separator;
+    options.put(Constants.CodeCache.PATH, path);
+
     mInstance.setTrackComponent(true);
     mInstance.render(
       getPageName(),

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/animation.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/animation.js b/android/playground/app/src/main/assets/animation.js
index 32b96e6..6ae347a 100644
--- a/android/playground/app/src/main/assets/animation.js
+++ b/android/playground/app/src/main/assets/animation.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "4371c408c20969c65a13d9fa5a51d925"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -780,8 +788,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/a-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/a-demo.js b/android/playground/app/src/main/assets/component/a-demo.js
index 0486d19..56e085d 100644
--- a/android/playground/app/src/main/assets/component/a-demo.js
+++ b/android/playground/app/src/main/assets/component/a-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "bd7d951b8dffd3ab47133123e937e3a0"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/countdown-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/countdown-demo.js b/android/playground/app/src/main/assets/component/countdown-demo.js
index cd44af4..434348c 100644
--- a/android/playground/app/src/main/assets/component/countdown-demo.js
+++ b/android/playground/app/src/main/assets/component/countdown-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "42bc563b62a414952e3bc04aace7897c"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/image-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/image-demo.js b/android/playground/app/src/main/assets/component/image-demo.js
index 1a0aa66..e311028 100644
--- a/android/playground/app/src/main/assets/component/image-demo.js
+++ b/android/playground/app/src/main/assets/component/image-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e2de07c3eed6548e5195268fa9599669"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/input-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/input-demo.js b/android/playground/app/src/main/assets/component/input-demo.js
index 396a1d1..f7ba9ec 100644
--- a/android/playground/app/src/main/assets/component/input-demo.js
+++ b/android/playground/app/src/main/assets/component/input-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "7433ba4d5d8f30fe6d5e3d9db6fb3cf5"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/list/list-basic.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/list/list-basic.js b/android/playground/app/src/main/assets/component/list/list-basic.js
index f059d98..37bd7ea 100644
--- a/android/playground/app/src/main/assets/component/list/list-basic.js
+++ b/android/playground/app/src/main/assets/component/list/list-basic.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "2eeb35e809bccd8c518a92942ff0205e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/list/list-demo-horizon.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/list/list-demo-horizon.js b/android/playground/app/src/main/assets/component/list/list-demo-horizon.js
index ab83a04..db9b80f 100644
--- a/android/playground/app/src/main/assets/component/list/list-demo-horizon.js
+++ b/android/playground/app/src/main/assets/component/list/list-demo-horizon.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "0fe05660e286b278d48fbe62da79bf4e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/list/list-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/list/list-demo.js b/android/playground/app/src/main/assets/component/list/list-demo.js
index af38db0..4db50da 100644
--- a/android/playground/app/src/main/assets/component/list/list-demo.js
+++ b/android/playground/app/src/main/assets/component/list/list-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f49cbcb21d54f4a3a48fecc9429d1df2"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/marquee-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/marquee-demo.js b/android/playground/app/src/main/assets/component/marquee-demo.js
index eef482e..3261b55 100644
--- a/android/playground/app/src/main/assets/component/marquee-demo.js
+++ b/android/playground/app/src/main/assets/component/marquee-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "ae96d8382266c0d24fad5c641b084827"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/navigator-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/navigator-demo.js b/android/playground/app/src/main/assets/component/navigator-demo.js
index 3c4cff0..8c7e365 100644
--- a/android/playground/app/src/main/assets/component/navigator-demo.js
+++ b/android/playground/app/src/main/assets/component/navigator-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "992133479ab7de90b597406bf57d9e30"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2221,14 +2228,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/process-bar-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/process-bar-demo.js b/android/playground/app/src/main/assets/component/process-bar-demo.js
index 47cf7fd..90a3206 100644
--- a/android/playground/app/src/main/assets/component/process-bar-demo.js
+++ b/android/playground/app/src/main/assets/component/process-bar-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "3771bf113fd85c270d38518ea7af1a5f"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/scroller-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/scroller-demo.js b/android/playground/app/src/main/assets/component/scroller-demo.js
index c569bec..6513791 100644
--- a/android/playground/app/src/main/assets/component/scroller-demo.js
+++ b/android/playground/app/src/main/assets/component/scroller-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "7e81a5d2d50e2dcff9daf08e7329aff1"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/slider-neighbor/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/slider-neighbor/index.js b/android/playground/app/src/main/assets/component/slider-neighbor/index.js
new file mode 100644
index 0000000..b2b95c2
--- /dev/null
+++ b/android/playground/app/src/main/assets/component/slider-neighbor/index.js
@@ -0,0 +1,291 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "4f269d5a6fa85e338c056a0254fa0da0"
+ * }
+ !*/
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(151)
+	var __weex_script__ = __webpack_require__(152)
+
+	__weex_define__('@weex-component/3157b803090c07c091af8fa3147f3d5c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	})
+
+	__weex_bootstrap__('@weex-component/3157b803090c07c091af8fa3147f3d5c',undefined,undefined)
+
+/***/ },
+
+/***/ 151:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "style": {
+	    "flexDirection": "column",
+	    "backgroundColor": "#ffffff",
+	    "width": 750,
+	    "height": 600,
+	    "borderWidth": 0
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "style": {
+	        "height": 410,
+	        "borderWidth": 3,
+	        "borderStyle": "solid",
+	        "borderColor": "#000000",
+	        "margin": 10
+	      },
+	      "children": [
+	        {
+	          "type": "slider-neighbor",
+	          "style": {
+	            "width": 700,
+	            "height": 400
+	          },
+	          "attr": {
+	            "neighborScale": "0.8",
+	            "neighborSpace": "30",
+	            "currentItemScale": "0.95",
+	            "interval": "3000",
+	            "neighborAlpha": "0.8",
+	            "autoPlay": function () {return this.attr_auto_play}
+	          },
+	          "children": [
+	            {
+	              "type": "container",
+	              "children": [
+	                {
+	                  "type": "image",
+	                  "style": {
+	                    "width": 650,
+	                    "backgroundColor": "#FFFFDF",
+	                    "height": 400
+	                  },
+	                  "attr": {
+	                    "src": "https://gw.alicdn.com/tps/TB1dzanMVXXXXXQXVXXXXXXXXXX-573-412.png"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "container",
+	              "children": [
+	                {
+	                  "type": "image",
+	                  "style": {
+	                    "width": 650,
+	                    "backgroundColor": "#FFFFDF",
+	                    "height": 400
+	                  },
+	                  "attr": {
+	                    "src": "https://gw.alicdn.com/tps/TB1p9CCMVXXXXa_XFXXXXXXXXXX-450-340.png"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "container",
+	              "children": [
+	                {
+	                  "type": "image",
+	                  "style": {
+	                    "width": 650,
+	                    "backgroundColor": "#FFFFDF",
+	                    "height": 400
+	                  },
+	                  "attr": {
+	                    "src": "https://gw.alicdn.com/tps/TB1zpSiMVXXXXchXFXXXXXXXXXX-448-338.png"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "container",
+	              "children": [
+	                {
+	                  "type": "image",
+	                  "style": {
+	                    "width": 650,
+	                    "backgroundColor": "#FFFFDF",
+	                    "height": 400
+	                  },
+	                  "attr": {
+	                    "src": "https://gw.alicdn.com/tps/TB1EuGIMVXXXXcoXpXXXXXXXXXX-452-337.png"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "indicator",
+	              "style": {
+	                "height": 60,
+	                "position": "absolute",
+	                "bottom": 15,
+	                "width": 700,
+	                "left": 0,
+	                "itemSelectedColor": "#0000FF",
+	                "itemSize": 20,
+	                "itemColor": "#FF0000"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    },
+	    {
+	      "type": "scroller",
+	      "style": {
+	        "height": 100,
+	        "borderWidth": 0,
+	        "margin": 10
+	      },
+	      "children": [
+	        {
+	          "type": "tc_support_subtitle",
+	          "attr": {
+	            "title": "auto-play"
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "repeat": function () {return this.btnList2100},
+	          "style": {
+	            "flexDirection": "row"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "events": {
+	                "click": "update2100"
+	              },
+	              "attr": {
+	                "flagid": function () {return this.index},
+	                "value": function () {return 'auto play: ' + (this.value)}
+	              },
+	              "repeat": function () {return this.row},
+	              "style": {
+	                "width": 310,
+	                "height": 50,
+	                "textAlign": "center",
+	                "borderWidth": 1,
+	                "borderColor": "#696969",
+	                "borderStyle": "solid",
+	                "borderRadius": 5,
+	                "margin": 10,
+	                "backgroundColor": function () {return this.bgc}
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 152:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){"use strict";
+
+	module.exports = {
+		data: function () {return {
+			log_detail: [],
+			attr_auto_play: false,
+			btnList2100: [{ row: [{ value: "false", bgc: '#EEEEEE', index: 0 }, { value: "true", bgc: '#EEEEEE', index: 1 }]
+			}]
+		}},
+		methods: {
+			update2100: function update2100(e) {
+				var self = this;
+				var index = e.target.attr.flagid;
+				for (var i = 0; i < self.btnList2100.length; i++) {
+					var row = self.btnList2100[i];
+					var columnlist = row.row;
+					for (var j = 0; j < columnlist.length; j++) {
+						var column = columnlist[j];
+						if (column.index === index) {
+							column.bgc = '#B2DFEE';
+							switch (index) {
+								case 0:
+									self.attr_auto_play = false;
+									break;
+								case 1:
+									self.attr_auto_play = true;
+									break;
+								default:
+									break;
+							}
+						} else {
+							column.bgc = '#EEEEEE';
+						}
+					}
+				}
+			}
+		}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js
index 79eed2a..4cfac3a 100644
--- a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js
+++ b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "a58f9d1c2bcd30bc0d09fdba96a34ed9"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js
index 335e7e6..a7c001c 100644
--- a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js
+++ b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "b9409ec1aa3cbde7167d1d8be94da60b"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/slider/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/slider/index.js b/android/playground/app/src/main/assets/component/slider/index.js
index 7fa54f1..3dd51b6 100644
--- a/android/playground/app/src/main/assets/component/slider/index.js
+++ b/android/playground/app/src/main/assets/component/slider/index.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "c856213bf680d7edaca1e292bf1c353e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -524,8 +532,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2328,6 +2335,39 @@
 	              ]
 	            }
 	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "auto-play = true & scrollable = false",
+	            "paddingBody": "0"
+	          },
+	          "children": [
+	            {
+	              "type": "slider",
+	              "classList": [
+	                "slider"
+	              ],
+	              "append": "tree",
+	              "attr": {
+	                "interval": function () {return this.sliders[0].interval},
+	                "autoPlay": function () {return this.sliders[0].autoPlay},
+	                "scrollable": "false"
+	              },
+	              "children": [
+	                {
+	                  "type": "indicator",
+	                  "classList": [
+	                    "indicator"
+	                  ]
+	                },
+	                {
+	                  "type": "slider-page",
+	                  "repeat": function () {return this.sliders[0].sliderPages}
+	                }
+	              ]
+	            }
+	          ]
 	        }
 	      ]
 	    },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/slider/slider-item.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/slider/slider-item.js b/android/playground/app/src/main/assets/component/slider/slider-item.js
index 2465a57..6b667d2 100644
--- a/android/playground/app/src/main/assets/component/slider/slider-item.js
+++ b/android/playground/app/src/main/assets/component/slider/slider-item.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "34acca66a0e62b4f42973fd76d844b2a"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/slider/slider-page.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/slider/slider-page.js b/android/playground/app/src/main/assets/component/slider/slider-page.js
index 908b680..43bd70f 100644
--- a/android/playground/app/src/main/assets/component/slider/slider-page.js
+++ b/android/playground/app/src/main/assets/component/slider/slider-page.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f98c63bc90652387ecc5012f97344e01"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js b/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js
index 5169593..8f2019d 100644
--- a/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js
+++ b/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "912dfb1184b615aad9a037b71b619c20"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2064,14 +2071,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js b/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js
index f172eb3..7216c2e 100644
--- a/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js
+++ b/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "4fd57e31e564370c775b265d3fdb4733"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/text-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/text-demo.js b/android/playground/app/src/main/assets/component/text-demo.js
index 9299bbe..7cfa0c7 100644
--- a/android/playground/app/src/main/assets/component/text-demo.js
+++ b/android/playground/app/src/main/assets/component/text-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "7a417d023cb6eb6ea5079386a155fec5"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/video-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/video-demo.js b/android/playground/app/src/main/assets/component/video-demo.js
index 231ed7f..fbefb37 100644
--- a/android/playground/app/src/main/assets/component/video-demo.js
+++ b/android/playground/app/src/main/assets/component/video-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "29348b4180a8c78e3a6cd4b260b74774"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/component/web-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/web-demo.js b/android/playground/app/src/main/assets/component/web-demo.js
index 22db7f3..61a3248 100644
--- a/android/playground/app/src/main/assets/component/web-demo.js
+++ b/android/playground/app/src/main/assets/component/web-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "3a484987637f61a6bce81312d94081e0"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2254,7 +2261,6 @@
 	module.exports = {
 	    methods: {
 	        goback: function goback() {
-	            var $webview = __weex_require__('@weex-module/webview');
 	            var webElement = this.$el('webview');
 	            $webview.goBack(webElement.ref);
 	        },



[02/30] incubator-weex git commit: * [android] let weex embedders have a chance to decide whether to * initialize v8.

Posted by zs...@apache.org.
* [android] let weex embedders have a chance to decide whether to
* initialize v8.

This is necessary if there are several clients share the same v8
as their Javascript engines, such as UC mobile browser and weex
may share the same v8. In that case, UC takes the chance of v8's
initialization and weex no need to do the initialization again.
If weex has its own v8, then weex needs to tell weexv8 to
initialize v8.


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

Branch: refs/heads/0.12-dev
Commit: b6313ee8d3837b4e7f52997b95189251b8052b80
Parents: 64f3282
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Wed Mar 1 20:16:03 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 13:37:34 2017 +0800

----------------------------------------------------------------------
 .../src/main/java/com/taobao/weex/WXSDKManager.java    | 11 ++++++++++-
 .../java/com/taobao/weex/bridge/WXBridgeManager.java   |  1 +
 .../src/main/java/com/taobao/weex/bridge/WXParams.java | 13 +++++++++++++
 3 files changed, 24 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b6313ee8/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index e7de867..f2181b4 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -187,8 +187,9 @@ public class WXSDKManager {
   private IWXStorageAdapter mIWXStorageAdapter;
   private URIAdapter mURIAdapter;
   private IWebSocketAdapterFactory mIWebSocketAdapterFactory;
-
   private WXValidateProcessor mWXValidateProcessor;
+  // Tell weexv8 to initialize v8, default is true.
+  private boolean mNeedInitV8 = true;
 
   private WXSDKManager() {
     mWXRenderManager = new WXRenderManager();
@@ -196,6 +197,14 @@ public class WXSDKManager {
     mBridgeManager = WXBridgeManager.getInstance();
   }
 
+  public void setNeedInitV8(boolean need) {
+    mNeedInitV8 = need;
+  }
+
+  public boolean needInitV8() {
+    return mNeedInitV8;
+  }
+
   public static WXSDKManager getInstance() {
     if (sManager == null) {
       synchronized (WXSDKManager.class) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b6313ee8/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index cfa043d..0bd3417 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -1152,6 +1152,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
     wxParams.setDeviceWidth(TextUtils.isEmpty(config.get("deviceWidth")) ? String.valueOf(WXViewUtils.getScreenWidth(WXEnvironment.sApplication)) : config.get("deviceWidth"));
     wxParams.setDeviceHeight(TextUtils.isEmpty(config.get("deviceHeight")) ? String.valueOf(WXViewUtils.getScreenHeight(WXEnvironment.sApplication)) : config.get("deviceHeight"));
     wxParams.setOptions(WXEnvironment.getCustomOptions());
+    wxParams.setNeedInitV8(WXSDKManager.getInstance().needInitV8());
     return wxParams;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b6313ee8/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java
index 3c8de9a..e7b3f5e 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java
@@ -141,6 +141,7 @@ public class WXParams {
   private String deviceHeight;
   private String shouldInfoCollect;
   private String logLevel;
+  private String needInitV8;
 
   private Map<String, String> options;
 
@@ -238,4 +239,16 @@ public class WXParams {
   public void setLogLevel(String logLevel) {
     this.logLevel = logLevel;
   }
+
+  public String getNeedInitV8() {
+    return this.needInitV8;
+  }
+
+  public void setNeedInitV8(boolean need) {
+    if (need) {
+      this.needInitV8 = "1";
+    } else {
+      this.needInitV8 = "0";
+    }
+  }
 }


[06/30] incubator-weex git commit: * [android] let embedders have a chance to take charge of library * loading.

Posted by zs...@apache.org.
* [android] let embedders have a chance to take charge of library
* loading.


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

Branch: refs/heads/0.12-dev
Commit: ab76ce72bdc679f8041a1c1c6eade57b1fd707fd
Parents: d10f1ab
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Fri Mar 3 11:08:16 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 15:27:49 2017 +0800

----------------------------------------------------------------------
 .../main/java/com/taobao/weex/InitConfig.java   |  14 ++
 .../main/java/com/taobao/weex/WXSDKEngine.java  |   3 +-
 .../main/java/com/taobao/weex/WXSDKManager.java |   7 +
 .../taobao/weex/adapter/IWXSoLoaderAdapter.java | 236 +++++++++++++++++++
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |  41 +++-
 5 files changed, 291 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ab76ce72/android/sdk/src/main/java/com/taobao/weex/InitConfig.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/InitConfig.java b/android/sdk/src/main/java/com/taobao/weex/InitConfig.java
index c9b2857..af76b77 100644
--- a/android/sdk/src/main/java/com/taobao/weex/InitConfig.java
+++ b/android/sdk/src/main/java/com/taobao/weex/InitConfig.java
@@ -209,6 +209,7 @@ import com.taobao.weex.adapter.IWXDebugAdapter;
 import com.taobao.weex.adapter.IWXHttpAdapter;
 import com.taobao.weex.adapter.IWXImgLoaderAdapter;
 import com.taobao.weex.adapter.IWXJSExceptionAdapter;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.adapter.URIAdapter;
 import com.taobao.weex.appfram.storage.IWXStorageAdapter;
@@ -224,6 +225,7 @@ public class InitConfig {
   private IWXUserTrackAdapter utAdapter;
   private IWXDebugAdapter debugAdapter;
   private IWXStorageAdapter storageAdapter;
+  private IWXSoLoaderAdapter soLoader;
   private URIAdapter mURIAdapter;
   private IWebSocketAdapterFactory webSocketAdapterFactory;
   private IWXJSExceptionAdapter mJSExceptionAdapter;
@@ -248,6 +250,11 @@ public class InitConfig {
   public IWXDebugAdapter getDebugAdapter(){
     return debugAdapter;
   }
+
+  public IWXSoLoaderAdapter getIWXSoLoaderAdapter() {
+    return soLoader;
+  }
+
   public String getFramework() {
     return framework;
   }
@@ -278,6 +285,7 @@ public class InitConfig {
     IWXUserTrackAdapter utAdapter;
     IWXDebugAdapter debugAdapter;
     IWXStorageAdapter storageAdapter;
+    IWXSoLoaderAdapter soLoader;
     URIAdapter mURIAdapter;
     IWXJSExceptionAdapter mJSExceptionAdapter;
     String framework;
@@ -326,6 +334,11 @@ public class InitConfig {
       return this;
     }
 
+    public Builder setSoLoader(IWXSoLoaderAdapter loader) {
+      this.soLoader = loader;
+      return this;
+    }
+
     public Builder setFramework(String framework){
       this.framework=framework;
       return this;
@@ -344,6 +357,7 @@ public class InitConfig {
       config.utAdapter = this.utAdapter;
       config.debugAdapter=this.debugAdapter;
       config.storageAdapter = this.storageAdapter;
+      config.soLoader=this.soLoader;
       config.framework=this.framework;
       config.mURIAdapter = this.mURIAdapter;
       config.webSocketAdapterFactory = this.webSocketAdapterFactory;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ab76ce72/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
index f7bbee7..526c989 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
@@ -120,6 +120,7 @@ import android.util.Log;
 import com.taobao.weex.adapter.IDrawableLoader;
 import com.taobao.weex.adapter.IWXHttpAdapter;
 import com.taobao.weex.adapter.IWXImgLoaderAdapter;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXJSExceptionAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.appfram.clipboard.WXClipboardModule;
@@ -268,7 +269,7 @@ public class WXSDKEngine {
             config.getDebugAdapter().initDebug(application);
           }
         }
-        WXSoInstallMgrSdk.init(application);
+        WXSoInstallMgrSdk.init(application, sm.getIWXSoLoaderAdapter());
         boolean isSoInitSuccess = WXSoInstallMgrSdk.initSo(V8_SO_NAME, 1, config!=null?config.getUtAdapter():null);
         if (!isSoInitSuccess) {
           return;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ab76ce72/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index bcf306b..821ab30 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -139,6 +139,7 @@ import com.taobao.weex.adapter.IWXDebugAdapter;
 import com.taobao.weex.adapter.IWXHttpAdapter;
 import com.taobao.weex.adapter.IWXImgLoaderAdapter;
 import com.taobao.weex.adapter.IWXJSExceptionAdapter;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.adapter.URIAdapter;
 import com.taobao.weex.appfram.navigator.IActivityNavBarSetter;
@@ -177,6 +178,7 @@ public class WXSDKManager {
 
   private IWXUserTrackAdapter mIWXUserTrackAdapter;
   private IWXImgLoaderAdapter mIWXImgLoaderAdapter;
+  private IWXSoLoaderAdapter mIWXSoLoaderAdapter;
   private IDrawableLoader mDrawableLoader;
   private IWXHttpAdapter mIWXHttpAdapter;
   private IWXDebugAdapter mIWXDebugAdapter;
@@ -394,6 +396,10 @@ public class WXSDKManager {
     return mURIAdapter;
   }
 
+  public IWXSoLoaderAdapter getIWXSoLoaderAdapter() {
+    return mIWXSoLoaderAdapter;
+  }
+
   void setInitConfig(InitConfig config){
     this.mIWXDebugAdapter = config.getDebugAdapter();
     this.mIWXHttpAdapter = config.getHttpAdapter();
@@ -404,6 +410,7 @@ public class WXSDKManager {
     this.mURIAdapter = config.getURIAdapter();
     this.mIWebSocketAdapterFactory = config.getWebSocketAdapterFactory();
     this.mIWXJSExceptionAdapter = config.getJSExceptionAdapter();
+    this.mIWXSoLoaderAdapter = config.getIWXSoLoaderAdapter();
   }
 
   public IWXDebugAdapter getIWXDebugAdapter() {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ab76ce72/android/sdk/src/main/java/com/taobao/weex/adapter/IWXSoLoaderAdapter.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXSoLoaderAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXSoLoaderAdapter.java
new file mode 100755
index 0000000..4379dab
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXSoLoaderAdapter.java
@@ -0,0 +1,236 @@
+/**
+ *
+ *                                  Apache License
+ *                            Version 2.0, January 2004
+ *                         http://www.apache.org/licenses/
+ *
+ *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *    1. Definitions.
+ *
+ *       "License" shall mean the terms and conditions for use, reproduction,
+ *       and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *       "Licensor" shall mean the copyright owner or entity authorized by
+ *       the copyright owner that is granting the License.
+ *
+ *       "Legal Entity" shall mean the union of the acting entity and all
+ *       other entities that control, are controlled by, or are under common
+ *       control with that entity. For the purposes of this definition,
+ *       "control" means (i) the power, direct or indirect, to cause the
+ *       direction or management of such entity, whether by contract or
+ *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *       outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *       "You" (or "Your") shall mean an individual or Legal Entity
+ *       exercising permissions granted by this License.
+ *
+ *       "Source" form shall mean the preferred form for making modifications,
+ *       including but not limited to software source code, documentation
+ *       source, and configuration files.
+ *
+ *       "Object" form shall mean any form resulting from mechanical
+ *       transformation or translation of a Source form, including but
+ *       not limited to compiled object code, generated documentation,
+ *       and conversions to other media types.
+ *
+ *       "Work" shall mean the work of authorship, whether in Source or
+ *       Object form, made available under the License, as indicated by a
+ *       copyright notice that is included in or attached to the work
+ *       (an example is provided in the Appendix below).
+ *
+ *       "Derivative Works" shall mean any work, whether in Source or Object
+ *       form, that is based on (or derived from) the Work and for which the
+ *       editorial revisions, annotations, elaborations, or other modifications
+ *       represent, as a whole, an original work of authorship. For the purposes
+ *       of this License, Derivative Works shall not include works that remain
+ *       separable from, or merely link (or bind by name) to the interfaces of,
+ *       the Work and Derivative Works thereof.
+ *
+ *       "Contribution" shall mean any work of authorship, including
+ *       the original version of the Work and any modifications or additions
+ *       to that Work or Derivative Works thereof, that is intentionally
+ *       submitted to Licensor for inclusion in the Work by the copyright owner
+ *       or by an individual or Legal Entity authorized to submit on behalf of
+ *       the copyright owner. For the purposes of this definition, "submitted"
+ *       means any form of electronic, verbal, or written communication sent
+ *       to the Licensor or its representatives, including but not limited to
+ *       communication on electronic mailing lists, source code control systems,
+ *       and issue tracking systems that are managed by, or on behalf of, the
+ *       Licensor for the purpose of discussing and improving the Work, but
+ *       excluding communication that is conspicuously marked or otherwise
+ *       designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *       "Contributor" shall mean Licensor and any individual or Legal Entity
+ *       on behalf of whom a Contribution has been received by Licensor and
+ *       subsequently incorporated within the Work.
+ *
+ *    2. Grant of Copyright License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       copyright license to reproduce, prepare Derivative Works of,
+ *       publicly display, publicly perform, sublicense, and distribute the
+ *       Work and such Derivative Works in Source or Object form.
+ *
+ *    3. Grant of Patent License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       (except as stated in this section) patent license to make, have made,
+ *       use, offer to sell, sell, import, and otherwise transfer the Work,
+ *       where such license applies only to those patent claims licensable
+ *       by such Contributor that are necessarily infringed by their
+ *       Contribution(s) alone or by combination of their Contribution(s)
+ *       with the Work to which such Contribution(s) was submitted. If You
+ *       institute patent litigation against any entity (including a
+ *       cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *       or a Contribution incorporated within the Work constitutes direct
+ *       or contributory patent infringement, then any patent licenses
+ *       granted to You under this License for that Work shall terminate
+ *       as of the date such litigation is filed.
+ *
+ *    4. Redistribution. You may reproduce and distribute copies of the
+ *       Work or Derivative Works thereof in any medium, with or without
+ *       modifications, and in Source or Object form, provided that You
+ *       meet the following conditions:
+ *
+ *       (a) You must give any other recipients of the Work or
+ *           Derivative Works a copy of this License; and
+ *
+ *       (b) You must cause any modified files to carry prominent notices
+ *           stating that You changed the files; and
+ *
+ *       (c) You must retain, in the Source form of any Derivative Works
+ *           that You distribute, all copyright, patent, trademark, and
+ *           attribution notices from the Source form of the Work,
+ *           excluding those notices that do not pertain to any part of
+ *           the Derivative Works; and
+ *
+ *       (d) If the Work includes a "NOTICE" text file as part of its
+ *           distribution, then any Derivative Works that You distribute must
+ *           include a readable copy of the attribution notices contained
+ *           within such NOTICE file, excluding those notices that do not
+ *           pertain to any part of the Derivative Works, in at least one
+ *           of the following places: within a NOTICE text file distributed
+ *           as part of the Derivative Works; within the Source form or
+ *           documentation, if provided along with the Derivative Works; or,
+ *           within a display generated by the Derivative Works, if and
+ *           wherever such third-party notices normally appear. The contents
+ *           of the NOTICE file are for informational purposes only and
+ *           do not modify the License. You may add Your own attribution
+ *           notices within Derivative Works that You distribute, alongside
+ *           or as an addendum to the NOTICE text from the Work, provided
+ *           that such additional attribution notices cannot be construed
+ *           as modifying the License.
+ *
+ *       You may add Your own copyright statement to Your modifications and
+ *       may provide additional or different license terms and conditions
+ *       for use, reproduction, or distribution of Your modifications, or
+ *       for any such Derivative Works as a whole, provided Your use,
+ *       reproduction, and distribution of the Work otherwise complies with
+ *       the conditions stated in this License.
+ *
+ *    5. Submission of Contributions. Unless You explicitly state otherwise,
+ *       any Contribution intentionally submitted for inclusion in the Work
+ *       by You to the Licensor shall be under the terms and conditions of
+ *       this License, without any additional terms or conditions.
+ *       Notwithstanding the above, nothing herein shall supersede or modify
+ *       the terms of any separate license agreement you may have executed
+ *       with Licensor regarding such Contributions.
+ *
+ *    6. Trademarks. This License does not grant permission to use the trade
+ *       names, trademarks, service marks, or product names of the Licensor,
+ *       except as required for reasonable and customary use in describing the
+ *       origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *    7. Disclaimer of Warranty. Unless required by applicable law or
+ *       agreed to in writing, Licensor provides the Work (and each
+ *       Contributor provides its Contributions) on an "AS IS" BASIS,
+ *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *       implied, including, without limitation, any warranties or conditions
+ *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *       PARTICULAR PURPOSE. You are solely responsible for determining the
+ *       appropriateness of using or redistributing the Work and assume any
+ *       risks associated with Your exercise of permissions under this License.
+ *
+ *    8. Limitation of Liability. In no event and under no legal theory,
+ *       whether in tort (including negligence), contract, or otherwise,
+ *       unless required by applicable law (such as deliberate and grossly
+ *       negligent acts) or agreed to in writing, shall any Contributor be
+ *       liable to You for damages, including any direct, indirect, special,
+ *       incidental, or consequential damages of any character arising as a
+ *       result of this License or out of the use or inability to use the
+ *       Work (including but not limited to damages for loss of goodwill,
+ *       work stoppage, computer failure or malfunction, or any and all
+ *       other commercial damages or losses), even if such Contributor
+ *       has been advised of the possibility of such damages.
+ *
+ *    9. Accepting Warranty or Additional Liability. While redistributing
+ *       the Work or Derivative Works thereof, You may choose to offer,
+ *       and charge a fee for, acceptance of support, warranty, indemnity,
+ *       or other liability obligations and/or rights consistent with this
+ *       License. However, in accepting such obligations, You may act only
+ *       on Your own behalf and on Your sole responsibility, not on behalf
+ *       of any other Contributor, and only if You agree to indemnify,
+ *       defend, and hold each Contributor harmless for any liability
+ *       incurred by, or claims asserted against, such Contributor by reason
+ *       of your accepting any such warranty or additional liability.
+ *
+ *    END OF TERMS AND CONDITIONS
+ *
+ *    APPENDIX: How to apply the Apache License to your work.
+ *
+ *       To apply the Apache License to your work, attach the following
+ *       boilerplate notice, with the fields enclosed by brackets "[]"
+ *       replaced with your own identifying information. (Don't include
+ *       the brackets!)  The text should be enclosed in the appropriate
+ *       comment syntax for the file format. We also recommend that a
+ *       file or class name and description of purpose be included on the
+ *       same "printed page" as the copyright notice for easier
+ *       identification within third-party archives.
+ *
+ *    Copyright 2016 Alibaba Group
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+package com.taobao.weex.adapter;
+
+/**
+ * Interface for loading library.
+ */
+public interface IWXSoLoaderAdapter {
+  /**
+   * A method <code>doLoadLibrary</code> that
+   * helps embedders to load a shared library with a short name.
+   * <p>
+   *
+   * Embedders would have a chance to take charge of library loading,
+   * they could load libraries with different class loaders,
+   * or load libraries from specified library pathes.
+   *
+   * @param shortName the name of the library
+   */
+  void doLoadLibrary(String shortName);
+
+  /**
+   * A method <code>doLoad</code> that
+   * helps embedders to load a shared library.
+   * <p>
+   *
+   * Embedders would have a chance to take charge of library loading,
+   * they could load libraries with different class loaders,
+   * or load libraries from specified library pathes.
+   *
+   * @param name the file to load.
+   */
+  void doLoad(String name);
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ab76ce72/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index 9a8583a..f1a43d1 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -209,6 +209,7 @@ import android.content.pm.ApplicationInfo;
 import android.os.Build;
 
 import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.common.WXErrorCode;
 import com.taobao.weex.common.WXPerformance;
@@ -255,9 +256,11 @@ public class WXSoInstallMgrSdk {
   private final static int X86_Size = 4451068;
 
   static Context mContext = null;
+  private static IWXSoLoaderAdapter mSoLoader = null;
 
-  public static void init(Context c) {
+  public static void init(Context c, IWXSoLoaderAdapter loader) {
     mContext = c;
+    mSoLoader = loader;
   }
 
   public static boolean isX86(){
@@ -272,8 +275,11 @@ public class WXSoInstallMgrSdk {
 
   /**
    * Load so library.
-   * First, it will try use {@link System#loadLibrary(String)} to load library.
-   * If it fails, then it will try to extract the so library and load it from arembi in the .apk
+   *
+   * If a library loader adapter exists, use this adapter to load library,
+   * otherwise use {@link System#loadLibrary(String)} to load library.
+   * If failed to load library, try to extract the so library and load it
+   * from arembi in the .apk
    *
    * @param libName library name, like webp, not necessary to be libwep.so
    * @param version the version of the so library
@@ -290,7 +296,13 @@ public class WXSoInstallMgrSdk {
        * Load library with {@link System#loadLibrary(String)}
        */
       try {
-        System.loadLibrary(libName);
+        // If a library loader adapter exists, use this adapter to load library
+        // instead of System.loadLibrary.
+        if (mSoLoader != null) {
+          mSoLoader.doLoadLibrary(libName);
+        } else {
+          System.loadLibrary(libName);
+        }
         commit(utAdapter, null, null);
 
         InitSuc = true;
@@ -438,24 +450,35 @@ public class WXSoInstallMgrSdk {
   /**
    * Load .so library
    */
-  static boolean _loadUnzipSo(String libName, int version, IWXUserTrackAdapter utAdapter) {
+  static boolean _loadUnzipSo(String libName,
+                              int version,
+                              IWXUserTrackAdapter utAdapter) {
     boolean initSuc = false;
     try {
       if (isExist(libName, version)) {
-        System.load(_targetSoFile(libName, version));
+        // If a library loader adapter exists, use this adapter to load library
+        // instead of System.load.
+        if (mSoLoader != null) {
+          mSoLoader.doLoad(_targetSoFile(libName, version));
+        } else {
+          System.load(_targetSoFile(libName, version));
+        }
         commit(utAdapter, "2000", "Load file extract from apk successfully.");
       }
       initSuc = true;
     } catch (Throwable e) {
-      commit(utAdapter, WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorCode(), WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorMsg() + ":" + e.getMessage());
+      commit(utAdapter,
+             WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorCode(),
+             WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorMsg() + ":" + e.getMessage());
       initSuc = false;
       WXLogUtils.e("", e);
     }
     return initSuc;
   }
 
-  static boolean unZipSelectedFiles(String libName, int version, IWXUserTrackAdapter utAdapter) throws ZipException, IOException {
-
+  static boolean unZipSelectedFiles(String libName,
+      int version,
+      IWXUserTrackAdapter utAdapter) throws ZipException, IOException {
     String sourcePath = "lib/armeabi/lib" + libName + ".so";
 
     String zipPath = "";


[13/30] incubator-weex git commit: * [android] add an interface for statistics.

Posted by zs...@apache.org.
* [android] add an interface for statistics.

Embedders can adapte their own classes for performance statistics or
uploading exception logs to their own log servers.
We should move WXPerformances, UserTracker, commitXXX functions
into a adapter level, this will be done in future.


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

Branch: refs/heads/0.12-dev
Commit: b807772d1f41556596529771b0e69209b1b0ee1f
Parents: ab76ce7
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Fri Mar 3 15:23:11 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 15:27:50 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/IWXStatisticsListener.java  | 252 +++++++++++++++++++
 .../main/java/com/taobao/weex/WXSDKEngine.java  |   5 +-
 .../java/com/taobao/weex/WXSDKInstance.java     |  62 ++++-
 .../main/java/com/taobao/weex/WXSDKManager.java |  16 ++
 .../com/taobao/weex/bridge/WXBridgeManager.java |  30 ++-
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |  11 +-
 6 files changed, 366 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b807772d/android/sdk/src/main/java/com/taobao/weex/IWXStatisticsListener.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/IWXStatisticsListener.java b/android/sdk/src/main/java/com/taobao/weex/IWXStatisticsListener.java
new file mode 100755
index 0000000..72e0d49
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/IWXStatisticsListener.java
@@ -0,0 +1,252 @@
+/**
+ *
+ *                                  Apache License
+ *                            Version 2.0, January 2004
+ *                         http://www.apache.org/licenses/
+ *
+ *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *    1. Definitions.
+ *
+ *       "License" shall mean the terms and conditions for use, reproduction,
+ *       and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *       "Licensor" shall mean the copyright owner or entity authorized by
+ *       the copyright owner that is granting the License.
+ *
+ *       "Legal Entity" shall mean the union of the acting entity and all
+ *       other entities that control, are controlled by, or are under common
+ *       control with that entity. For the purposes of this definition,
+ *       "control" means (i) the power, direct or indirect, to cause the
+ *       direction or management of such entity, whether by contract or
+ *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *       outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *       "You" (or "Your") shall mean an individual or Legal Entity
+ *       exercising permissions granted by this License.
+ *
+ *       "Source" form shall mean the preferred form for making modifications,
+ *       including but not limited to software source code, documentation
+ *       source, and configuration files.
+ *
+ *       "Object" form shall mean any form resulting from mechanical
+ *       transformation or translation of a Source form, including but
+ *       not limited to compiled object code, generated documentation,
+ *       and conversions to other media types.
+ *
+ *       "Work" shall mean the work of authorship, whether in Source or
+ *       Object form, made available under the License, as indicated by a
+ *       copyright notice that is included in or attached to the work
+ *       (an example is provided in the Appendix below).
+ *
+ *       "Derivative Works" shall mean any work, whether in Source or Object
+ *       form, that is based on (or derived from) the Work and for which the
+ *       editorial revisions, annotations, elaborations, or other modifications
+ *       represent, as a whole, an original work of authorship. For the purposes
+ *       of this License, Derivative Works shall not include works that remain
+ *       separable from, or merely link (or bind by name) to the interfaces of,
+ *       the Work and Derivative Works thereof.
+ *
+ *       "Contribution" shall mean any work of authorship, including
+ *       the original version of the Work and any modifications or additions
+ *       to that Work or Derivative Works thereof, that is intentionally
+ *       submitted to Licensor for inclusion in the Work by the copyright owner
+ *       or by an individual or Legal Entity authorized to submit on behalf of
+ *       the copyright owner. For the purposes of this definition, "submitted"
+ *       means any form of electronic, verbal, or written communication sent
+ *       to the Licensor or its representatives, including but not limited to
+ *       communication on electronic mailing lists, source code control systems,
+ *       and issue tracking systems that are managed by, or on behalf of, the
+ *       Licensor for the purpose of discussing and improving the Work, but
+ *       excluding communication that is conspicuously marked or otherwise
+ *       designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *       "Contributor" shall mean Licensor and any individual or Legal Entity
+ *       on behalf of whom a Contribution has been received by Licensor and
+ *       subsequently incorporated within the Work.
+ *
+ *    2. Grant of Copyright License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       copyright license to reproduce, prepare Derivative Works of,
+ *       publicly display, publicly perform, sublicense, and distribute the
+ *       Work and such Derivative Works in Source or Object form.
+ *
+ *    3. Grant of Patent License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       (except as stated in this section) patent license to make, have made,
+ *       use, offer to sell, sell, import, and otherwise transfer the Work,
+ *       where such license applies only to those patent claims licensable
+ *       by such Contributor that are necessarily infringed by their
+ *       Contribution(s) alone or by combination of their Contribution(s)
+ *       with the Work to which such Contribution(s) was submitted. If You
+ *       institute patent litigation against any entity (including a
+ *       cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *       or a Contribution incorporated within the Work constitutes direct
+ *       or contributory patent infringement, then any patent licenses
+ *       granted to You under this License for that Work shall terminate
+ *       as of the date such litigation is filed.
+ *
+ *    4. Redistribution. You may reproduce and distribute copies of the
+ *       Work or Derivative Works thereof in any medium, with or without
+ *       modifications, and in Source or Object form, provided that You
+ *       meet the following conditions:
+ *
+ *       (a) You must give any other recipients of the Work or
+ *           Derivative Works a copy of this License; and
+ *
+ *       (b) You must cause any modified files to carry prominent notices
+ *           stating that You changed the files; and
+ *
+ *       (c) You must retain, in the Source form of any Derivative Works
+ *           that You distribute, all copyright, patent, trademark, and
+ *           attribution notices from the Source form of the Work,
+ *           excluding those notices that do not pertain to any part of
+ *           the Derivative Works; and
+ *
+ *       (d) If the Work includes a "NOTICE" text file as part of its
+ *           distribution, then any Derivative Works that You distribute must
+ *           include a readable copy of the attribution notices contained
+ *           within such NOTICE file, excluding those notices that do not
+ *           pertain to any part of the Derivative Works, in at least one
+ *           of the following places: within a NOTICE text file distributed
+ *           as part of the Derivative Works; within the Source form or
+ *           documentation, if provided along with the Derivative Works; or,
+ *           within a display generated by the Derivative Works, if and
+ *           wherever such third-party notices normally appear. The contents
+ *           of the NOTICE file are for informational purposes only and
+ *           do not modify the License. You may add Your own attribution
+ *           notices within Derivative Works that You distribute, alongside
+ *           or as an addendum to the NOTICE text from the Work, provided
+ *           that such additional attribution notices cannot be construed
+ *           as modifying the License.
+ *
+ *       You may add Your own copyright statement to Your modifications and
+ *       may provide additional or different license terms and conditions
+ *       for use, reproduction, or distribution of Your modifications, or
+ *       for any such Derivative Works as a whole, provided Your use,
+ *       reproduction, and distribution of the Work otherwise complies with
+ *       the conditions stated in this License.
+ *
+ *    5. Submission of Contributions. Unless You explicitly state otherwise,
+ *       any Contribution intentionally submitted for inclusion in the Work
+ *       by You to the Licensor shall be under the terms and conditions of
+ *       this License, without any additional terms or conditions.
+ *       Notwithstanding the above, nothing herein shall supersede or modify
+ *       the terms of any separate license agreement you may have executed
+ *       with Licensor regarding such Contributions.
+ *
+ *    6. Trademarks. This License does not grant permission to use the trade
+ *       names, trademarks, service marks, or product names of the Licensor,
+ *       except as required for reasonable and customary use in describing the
+ *       origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *    7. Disclaimer of Warranty. Unless required by applicable law or
+ *       agreed to in writing, Licensor provides the Work (and each
+ *       Contributor provides its Contributions) on an "AS IS" BASIS,
+ *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *       implied, including, without limitation, any warranties or conditions
+ *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *       PARTICULAR PURPOSE. You are solely responsible for determining the
+ *       appropriateness of using or redistributing the Work and assume any
+ *       risks associated with Your exercise of permissions under this License.
+ *
+ *    8. Limitation of Liability. In no event and under no legal theory,
+ *       whether in tort (including negligence), contract, or otherwise,
+ *       unless required by applicable law (such as deliberate and grossly
+ *       negligent acts) or agreed to in writing, shall any Contributor be
+ *       liable to You for damages, including any direct, indirect, special,
+ *       incidental, or consequential damages of any character arising as a
+ *       result of this License or out of the use or inability to use the
+ *       Work (including but not limited to damages for loss of goodwill,
+ *       work stoppage, computer failure or malfunction, or any and all
+ *       other commercial damages or losses), even if such Contributor
+ *       has been advised of the possibility of such damages.
+ *
+ *    9. Accepting Warranty or Additional Liability. While redistributing
+ *       the Work or Derivative Works thereof, You may choose to offer,
+ *       and charge a fee for, acceptance of support, warranty, indemnity,
+ *       or other liability obligations and/or rights consistent with this
+ *       License. However, in accepting such obligations, You may act only
+ *       on Your own behalf and on Your sole responsibility, not on behalf
+ *       of any other Contributor, and only if You agree to indemnify,
+ *       defend, and hold each Contributor harmless for any liability
+ *       incurred by, or claims asserted against, such Contributor by reason
+ *       of your accepting any such warranty or additional liability.
+ *
+ *    END OF TERMS AND CONDITIONS
+ *
+ *    APPENDIX: How to apply the Apache License to your work.
+ *
+ *       To apply the Apache License to your work, attach the following
+ *       boilerplate notice, with the fields enclosed by brackets "[]"
+ *       replaced with your own identifying information. (Don't include
+ *       the brackets!)  The text should be enclosed in the appropriate
+ *       comment syntax for the file format. We also recommend that a
+ *       file or class name and description of purpose be included on the
+ *       same "printed page" as the copyright notice for easier
+ *       identification within third-party archives.
+ *
+ *    Copyright 2016 Alibaba Group
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+package com.taobao.weex;
+
+public interface IWXStatisticsListener {
+  /**
+   * Called when weex sdk engine begin to initialize.
+   */
+   void onSDKEngineInitialize();
+
+  /**
+   * Called when begin to load js framework.
+   */
+   void onJsFrameworkStart();
+
+  /**
+   * Called when finish loading js framework.
+   */
+   void onJsFrameworkReady();
+
+  /**
+   * Called when the render view phase of first view reached.
+   */
+   void onFirstView();
+
+  /**
+   * Called when the render view phase of first screen reached.
+   */
+  void onFirstScreen();
+
+  /**
+   * Called when to start a http request.
+   */
+  void onHttpStart();
+
+  /**
+   * Called when received a http response header data.
+   */
+  void onHeadersReceived();
+
+  /**
+   * Called when to finish a http request.
+   */
+  void onHttpFinish();
+
+  /**
+   * Called when an exception occured.
+   */
+  void onException(String instanceid, String errCode, String msg);
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b807772d/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
index 526c989..fc94ce0 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
@@ -263,13 +263,16 @@ public class WXSDKEngine {
       public void run() {
         long start = System.currentTimeMillis();
         WXSDKManager sm = WXSDKManager.getInstance();
+        sm.onSDKEngineInitialize();
         if(config != null ) {
           sm.setInitConfig(config);
           if(config.getDebugAdapter()!=null){
             config.getDebugAdapter().initDebug(application);
           }
         }
-        WXSoInstallMgrSdk.init(application, sm.getIWXSoLoaderAdapter());
+        WXSoInstallMgrSdk.init(application,
+                              sm.getIWXSoLoaderAdapter(),
+                              sm.getWXStatisticsListener());
         boolean isSoInitSuccess = WXSoInstallMgrSdk.initSo(V8_SO_NAME, 1, config!=null?config.getUtAdapter():null);
         if (!isSoInitSuccess) {
           return;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b807772d/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 29eec05..151ad1e 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -280,6 +280,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
   public static final String BUNDLE_URL = "bundleUrl";
   private IWXUserTrackAdapter mUserTrackAdapter;
   private IWXRenderListener mRenderListener;
+  private IWXStatisticsListener mStatisticsListener;
   /** package **/ Context mContext;
   private final String mInstanceId;
   private RenderContainer mRenderContainer;
@@ -590,7 +591,10 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
       wxRequest.paramMap = new HashMap<String, String>();
     }
     wxRequest.paramMap.put(KEY_USER_AGENT, WXHttpUtil.assembleUserAgent(mContext,WXEnvironment.getConfig()));
-    adapter.sendRequest(wxRequest, new WXHttpListener(pageName, renderOptions, jsonInitData, flag, System.currentTimeMillis()));
+    WXHttpListener httpListener =
+        new WXHttpListener(pageName, renderOptions, jsonInitData, flag, System.currentTimeMillis());
+    httpListener.setSDKInstance(this);
+    adapter.sendRequest(wxRequest, (IWXHttpAdapter.OnHttpListener) httpListener);
   }
 
   /**
@@ -750,6 +754,10 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
     return WXSDKManager.getInstance().getIWXHttpAdapter();
   }
 
+  public IWXStatisticsListener getWXStatisticsListener() {
+    return mStatisticsListener;
+  }
+
   public @Nullable
   IWebSocketAdapter getWXWebSocketAdapter() {
     return WXSDKManager.getInstance().getIWXWebSocketAdapter();
@@ -774,6 +782,10 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
 
   }
 
+  public void registerStatisticsListener(IWXStatisticsListener listener) {
+    mStatisticsListener = listener;
+  }
+
   /********************************
    * end register listener
    ********************************************************/
@@ -990,6 +1002,9 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
             if(mRenderListener != null) {
               mRenderListener.onViewCreated(WXSDKInstance.this, wxView);
             }
+            if (mStatisticsListener != null) {
+              mStatisticsListener.onFirstView();
+            }
           }
         }
       });
@@ -1140,6 +1155,18 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
        return;
 
     mEnd = true;
+
+    if (mStatisticsListener != null && mContext != null) {
+      runOnUiThread(new Runnable() {
+        @Override
+        public void run() {
+          if (mStatisticsListener != null && mContext != null) {
+            mStatisticsListener.onFirstScreen();
+          }
+        }
+      });
+    }
+
     mWXPerformance.screenRenderTime = System.currentTimeMillis() - mRenderStartTime;
     WXLogUtils.renderPerformanceLog("firstScreenRenderFinished", mWXPerformance.screenRenderTime);
     WXLogUtils.renderPerformanceLog("   firstScreenJSFExecuteTime", mWXPerformance.firstScreenJSFExecuteTime);
@@ -1177,12 +1204,20 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
    * UserTrack Log
    */
   public void commitUTStab(final String type, final WXErrorCode errorCode) {
-    if (mUserTrackAdapter == null || TextUtils.isEmpty(type) || errorCode==null) {
+    if (TextUtils.isEmpty(type) || errorCode == null) {
       return;
     }
+
     runOnUiThread(new Runnable() {
       @Override
       public void run() {
+        // Record exception if a render error happened.
+        if (mStatisticsListener != null && errorCode != WXErrorCode.WX_SUCCESS) {
+          mStatisticsListener.onException(mInstanceId,
+                                          errorCode.getErrorCode(),
+                                          errorCode.getErrorMsg());
+        }
+
         WXPerformance performance = new WXPerformance();
         performance.errCode = errorCode.getErrorCode();
         performance.args = errorCode.getArgs();
@@ -1245,7 +1280,8 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
     mScrollView = null;
     mContext = null;
     mRenderListener = null;
-    isDestroy=true;
+    isDestroy = true;
+    mStatisticsListener = null;
   }
 
   public boolean isDestroy(){
@@ -1491,6 +1527,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
     private Map<String, Object> options;
     private String jsonInitData;
     private WXRenderStrategy flag;
+    private WXSDKInstance instance;
     private long startRequestTime;
 
     private WXHttpListener(String pageName, Map<String, Object> options, String jsonInitData, WXRenderStrategy flag, long startRequestTime) {
@@ -1500,16 +1537,25 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
       this.flag = flag;
       this.startRequestTime = startRequestTime;
     }
-
+    
+    public void setSDKInstance(WXSDKInstance instance) {
+      this.instance = instance;
+    }
 
     @Override
     public void onHttpStart() {
-
+      if (this.instance != null
+          && this.instance.getWXStatisticsListener() != null) {
+        this.instance.getWXStatisticsListener().onHttpStart();
+      }
     }
 
     @Override
     public void onHeadersReceived(int statusCode,Map<String,List<String>> headers) {
-
+      if (this.instance != null
+          && this.instance.getWXStatisticsListener() != null) {
+        this.instance.getWXStatisticsListener().onHeadersReceived();
+      }
     }
 
     @Override
@@ -1524,6 +1570,10 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
 
     @Override
     public void onHttpFinish(WXResponse response) {
+      if (this.instance != null
+          && this.instance.getWXStatisticsListener() != null) {
+        this.instance.getWXStatisticsListener().onHttpFinish();
+      }
 
       mWXPerformance.networkTime = System.currentTimeMillis() - startRequestTime;
       if(response.extendParams!=null){

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b807772d/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index 821ab30..f7a15c1 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -132,6 +132,7 @@ import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 
+import com.taobao.weex.IWXStatisticsListener;
 import com.taobao.weex.adapter.DefaultUriAdapter;
 import com.taobao.weex.adapter.DefaultWXHttpAdapter;
 import com.taobao.weex.adapter.IDrawableLoader;
@@ -189,6 +190,7 @@ public class WXSDKManager {
   private IWXJSExceptionAdapter mIWXJSExceptionAdapter;
 
   private IWXStorageAdapter mIWXStorageAdapter;
+  private IWXStatisticsListener mStatisticsListener;
   private URIAdapter mURIAdapter;
   private IWebSocketAdapterFactory mIWebSocketAdapterFactory;
   private WXValidateProcessor mWXValidateProcessor;
@@ -201,6 +203,20 @@ public class WXSDKManager {
     mBridgeManager = WXBridgeManager.getInstance();
   }
 
+  public void registerStatisticsListener(IWXStatisticsListener listener) {
+    mStatisticsListener = listener;
+  }
+
+  public IWXStatisticsListener getWXStatisticsListener() {
+    return mStatisticsListener;
+  }
+
+  public void onSDKEngineInitialize() {
+    if (mStatisticsListener != null) {
+      mStatisticsListener.onSDKEngineInitialize();
+    }
+  }
+
   public void setNeedInitV8(boolean need) {
     mNeedInitV8 = need;
   }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b807772d/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 2792f8d..2e8e322 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -849,8 +849,16 @@ public class WXBridgeManager implements Callback,BactchExecutor {
 
   public void commitJSBridgeAlarmMonitor(String instanceId, WXErrorCode errCode, String errMsg) {
     WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+    if (instance == null || errCode == null) {
+      return;
+    }
+    // TODO: We should move WXPerformance and IWXUserTrackAdapter
+    // into a adapter level.
+    // comment out the line below to prevent commiting twice.
+    //instance.commitUTStab(WXConst.JS_BRIDGE, errCode, errMsg);
+
     IWXUserTrackAdapter adapter = WXSDKManager.getInstance().getIWXUserTrackAdapter();
-    if (instance == null || adapter == null || errCode == null) {
+    if (adapter == null) {
       return;
     }
     WXPerformance performance = new WXPerformance();
@@ -864,8 +872,17 @@ public class WXBridgeManager implements Callback,BactchExecutor {
   }
 
   public void commitJSFrameworkAlarmMonitor(final String type, final WXErrorCode errorCode, String errMsg) {
+    if (TextUtils.isEmpty(type) || errorCode == null) {
+      return;
+    }
+    if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
+      WXSDKManager.getInstance().getWXStatisticsListener().onException("0",
+          errorCode.getErrorCode(),
+          TextUtils.isEmpty(errMsg) ? errorCode.getErrorMsg() : errMsg);
+    }
+
     final IWXUserTrackAdapter userTrackAdapter = WXSDKManager.getInstance().getIWXUserTrackAdapter();
-    if (userTrackAdapter == null || TextUtils.isEmpty(type) || errorCode == null) {
+    if (userTrackAdapter == null) {
       return;
     }
     WXPerformance performance = new WXPerformance();
@@ -1076,6 +1093,10 @@ public class WXBridgeManager implements Callback,BactchExecutor {
         return;
       }
       try {
+        if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
+          WXSDKManager.getInstance().getWXStatisticsListener().onJsFrameworkStart();
+        }
+
         long start = System.currentTimeMillis();
         if(mWXBridge.initFramework(framework, assembleDefaultOptions())==INIT_FRAMEWORK_OK){
           WXEnvironment.sJSLibInitTime = System.currentTimeMillis() - start;
@@ -1083,6 +1104,11 @@ public class WXBridgeManager implements Callback,BactchExecutor {
           WXEnvironment.sSDKInitTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart;
           WXLogUtils.renderPerformanceLog("SDKInitTime", WXEnvironment.sSDKInitTime);
           mInit = true;
+
+          if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
+            WXSDKManager.getInstance().getWXStatisticsListener().onJsFrameworkReady();
+          }
+
           execRegisterFailTask();
           WXEnvironment.JsFrameworkInit = true;
           registerDomModule();

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b807772d/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index f1a43d1..d72fe1d 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -208,6 +208,7 @@ import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.os.Build;
 
+import com.taobao.weex.IWXStatisticsListener;
 import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
@@ -257,10 +258,14 @@ public class WXSoInstallMgrSdk {
 
   static Context mContext = null;
   private static IWXSoLoaderAdapter mSoLoader = null;
+  private static IWXStatisticsListener mStatisticsListener = null;
 
-  public static void init(Context c, IWXSoLoaderAdapter loader) {
+  public static void init(Context c,
+                          IWXSoLoaderAdapter loader,
+                          IWXStatisticsListener listener) {
     mContext = c;
     mSoLoader = loader;
+    mStatisticsListener = listener;
   }
 
   public static boolean isX86(){
@@ -576,6 +581,10 @@ public class WXSoInstallMgrSdk {
   }
 
   static void commit(IWXUserTrackAdapter utAdapter, String errCode, String errMsg) {
+    if (mStatisticsListener != null) {
+      mStatisticsListener.onException("0", errCode, errMsg);
+    }
+
     if (utAdapter == null) {
       return;
     }


[05/30] incubator-weex git commit: * [android] v8 code cache supports.

Posted by zs...@apache.org.
* [android] v8 code cache supports.


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

Branch: refs/heads/0.12-dev
Commit: b18fb5b6376dc6dacb98fac36948e45907c102fb
Parents: b6313ee
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Mon Feb 6 16:11:54 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 15:27:39 2017 +0800

----------------------------------------------------------------------
 .eslintrc                                       |   3 +-
 .../java/com/alibaba/weex/WXApplication.java    |   4 ++
 android/sdk/assets/main.js                      |  14 ++---
 android/sdk/libs/armeabi/libweexv8.so           | Bin 120132 -> 120120 bytes
 .../main/java/com/taobao/weex/WXSDKManager.java |  13 ++++
 .../com/taobao/weex/bridge/WXBridgeManager.java |  14 +++++
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   2 +-
 build/build.js                                  |   2 +
 html5/frameworks/legacy/app/ctrl/init.js        |  62 ++++++++++++++++++-
 html5/frameworks/legacy/static/create.js        |   8 ++-
 10 files changed, 110 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/.eslintrc
----------------------------------------------------------------------
diff --git a/.eslintrc b/.eslintrc
index bcd53f8..49dfae0 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -19,7 +19,8 @@
     "callNative": false,
     "callNativeModule": false,
     "callAddElement":false,
-    "callJS": false
+    "callJS": false,
+    "compileAndRunBundle": false
   },
 
   "rules": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
index 39c6384..400f315 100755
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
@@ -313,6 +313,10 @@ public class WXApplication extends Application {
           // We assume that the application is on an idle time.
           WXSDKManager.getInstance().notifyTrimMemory();
         }
+        // The demo code of calling 'notifySerializeCodeCache()'
+        if (true) {
+          WXSDKManager.getInstance().notifySerializeCodeCache();
+        }
       }
     });
 


[12/30] incubator-weex git commit: * [android] add an ability for playground to dump v8's heap snapshot.

Posted by zs...@apache.org.
* [android] add an ability for playground to dump v8's heap snapshot.


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

Branch: refs/heads/0.12-dev
Commit: b7d8a7b1a9e7a2a5dc99b0202c9cfbc53dd8d8bb
Parents: b18fb5b
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Wed Mar 1 20:55:25 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 15:27:49 2017 +0800

----------------------------------------------------------------------
 .../java/com/alibaba/weex/IndexActivity.java    |   7 ++++++
 android/sdk/libs/armeabi/libweexv8.so           | Bin 120120 -> 120132 bytes
 .../main/java/com/taobao/weex/WXSDKManager.java |  22 +++++++++++++++++++
 .../java/com/taobao/weex/bridge/WXBridge.java   |   6 +++++
 .../com/taobao/weex/bridge/WXBridgeManager.java |  14 ++++++++++++
 .../java/com/taobao/weex/common/IWXBridge.java  |   7 ++++++
 .../taobao/weex/common/WXJSBridgeMsgType.java   |   1 +
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   2 +-
 .../taobao/weex/bridge/WXWebsocketBridge.java   |   3 +++
 9 files changed, 61 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
index 008ca72..a2d684b 100755
--- a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
@@ -230,6 +230,7 @@ import com.google.zxing.client.android.CaptureActivity;
 import com.taobao.weex.WXRenderErrorCode;
 import com.taobao.weex.WXSDKEngine;
 import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXSoInstallMgrSdk;
 
@@ -363,6 +364,12 @@ public class IndexActivity extends AbstractWeexActivity {
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mReloadReceiver);
   }
 
+  @Override
+  public void onPause() {
+    super.onPause();
+    WXSDKManager.getInstance().takeJSHeapSnapshot("/sdcard/weex/");
+  }
+
   private static String getIndexUrl() {
     return "http://" + sCurrentIp + ":12580/examples/build/index.js";
   }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
index 86b1880..03c6e71 100755
Binary files a/android/sdk/libs/armeabi/libweexv8.so and b/android/sdk/libs/armeabi/libweexv8.so differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index 4e465e0..bcf306b 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -157,6 +157,8 @@ import com.taobao.weex.ui.WXRenderManager;
 import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
 
+import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -205,6 +207,26 @@ public class WXSDKManager {
     return mNeedInitV8;
   }
 
+  public void takeJSHeapSnapshot(String path) {
+    File file = new File(path);
+    if (!file.exists()) {
+      if (!file.mkdir()) {
+        return;
+      }
+    }
+
+    String name = String.valueOf(sInstanceId.get());
+    String filename = path;
+
+    if (!path.endsWith(File.separator)) {
+      filename += File.separator;
+    }
+    filename += name;
+    filename += ".heapsnapshot";
+
+    mBridgeManager.takeJSHeapSnapshot(filename);
+  }
+
   public static WXSDKManager getInstance() {
     if (sManager == null) {
       synchronized (WXSDKManager.class) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
index d0ce195..7172c11 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
@@ -249,6 +249,12 @@ class WXBridge implements IWXBridge {
   public native int execJSService(String javascript);
 
   /**
+   * Take v8's heap snapshot
+   * @param filename the name of the file to be written.
+   */
+  public native void takeHeapSnapshot(String filename);
+
+  /**
    * JavaScript uses this methods to call Android code
    *
    * @param instanceId

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 1860e3e..2792f8d 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -1022,6 +1022,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
         WXJSObject[] args = {obj};
         invokeExecJS("", null, METHOD_SET_TIMEOUT, args);
         break;
+      case WXJSBridgeMsgType.TAKE_HEAP_SNAPSHOT:
+        if (msg.obj != null) {
+          String filename = (String) msg.obj;
+          mWXBridge.takeHeapSnapshot(filename);
+        }
+        break;
       default:
         break;
     }
@@ -1368,4 +1374,12 @@ public class WXBridgeManager implements Callback,BactchExecutor {
     });
   }
 
+  public void takeJSHeapSnapshot(String filename) {
+    Message msg = mJSHandler.obtainMessage();
+    msg.obj = filename;
+    msg.what = WXJSBridgeMsgType.TAKE_HEAP_SNAPSHOT;
+    msg.setTarget(mJSHandler);
+    msg.sendToTarget();
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
index cea4805..5d992eb 100755
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
@@ -232,6 +232,13 @@ public interface IWXBridge extends IWXObject {
   int execJSService(String javascript);
 
   /**
+   * take the heap snapshot and serialize the heap to a local file.
+   *
+   * @param filename
+   */
+  void takeHeapSnapshot(String filename);
+
+  /**
    * js call native
 
    */

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java b/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java
index 93b6fc9..1348a5f 100755
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java
@@ -218,4 +218,5 @@ public class WXJSBridgeMsgType {
   public static final int REFRESH_INSTANCE = 0x0a;
   public static final int MODULE_TIMEOUT = 0x0b;
   public static final int MODULE_INTERVAL = 0x0c;
+  public static final int TAKE_HEAP_SNAPSHOT = 0x0d;
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index 118bf85..9a8583a 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -251,7 +251,7 @@ public class WXSoInstallMgrSdk {
   private final static String X86 = "x86";
   private final static String MIPS = "mips";
   //private final static int ARMEABI_Size = 3542844;
-  private final static int ARMEABI_Size = 120120;
+  private final static int ARMEABI_Size = 120132;
   private final static int X86_Size = 4451068;
 
   static Context mContext = null;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7d8a7b1/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
----------------------------------------------------------------------
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
index bbda765..4ee7922 100755
--- a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
@@ -302,6 +302,9 @@ public class WXWebsocketBridge implements IWXBridge,WXWebSocketManager.JSDebugge
     }
 
     @Override
+    public void takeHeapSnapshot(String filename) {}
+
+    @Override
     public void reportJSException(String instanceId, String func, String exception) {
         if (mJsManager != null) {
             mJsManager.reportJSException(instanceId, func, exception);


[24/30] incubator-weex git commit: * [android] add IExternalMoudleGetter interface

Posted by zs...@apache.org.
* [android] add IExternalMoudleGetter interface


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

Branch: refs/heads/0.12-dev
Commit: aaacf3ab9c908dbd31778bcb7658e5df6ed9f601
Parents: a6207a6
Author: zshshr <zh...@gmail.com>
Authored: Thu Mar 23 11:59:57 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Mar 23 11:59:57 2017 +0800

----------------------------------------------------------------------
 .../taobao/weex/ui/IExternalMoudleGetter.java   | 215 +++++++++++++++++++
 1 file changed, 215 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/aaacf3ab/android/sdk/src/main/java/com/taobao/weex/ui/IExternalMoudleGetter.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/IExternalMoudleGetter.java b/android/sdk/src/main/java/com/taobao/weex/ui/IExternalMoudleGetter.java
new file mode 100644
index 0000000..ba62262
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/IExternalMoudleGetter.java
@@ -0,0 +1,215 @@
+/**
+ *
+ *                                  Apache License
+ *                            Version 2.0, January 2004
+ *                         http://www.apache.org/licenses/
+ *
+ *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *    1. Definitions.
+ *
+ *       "License" shall mean the terms and conditions for use, reproduction,
+ *       and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *       "Licensor" shall mean the copyright owner or entity authorized by
+ *       the copyright owner that is granting the License.
+ *
+ *       "Legal Entity" shall mean the union of the acting entity and all
+ *       other entities that control, are controlled by, or are under common
+ *       control with that entity. For the purposes of this definition,
+ *       "control" means (i) the power, direct or indirect, to cause the
+ *       direction or management of such entity, whether by contract or
+ *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *       outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *       "You" (or "Your") shall mean an individual or Legal Entity
+ *       exercising permissions granted by this License.
+ *
+ *       "Source" form shall mean the preferred form for making modifications,
+ *       including but not limited to software source code, documentation
+ *       source, and configuration files.
+ *
+ *       "Object" form shall mean any form resulting from mechanical
+ *       transformation or translation of a Source form, including but
+ *       not limited to compiled object code, generated documentation,
+ *       and conversions to other media types.
+ *
+ *       "Work" shall mean the work of authorship, whether in Source or
+ *       Object form, made available under the License, as indicated by a
+ *       copyright notice that is included in or attached to the work
+ *       (an example is provided in the Appendix below).
+ *
+ *       "Derivative Works" shall mean any work, whether in Source or Object
+ *       form, that is based on (or derived from) the Work and for which the
+ *       editorial revisions, annotations, elaborations, or other modifications
+ *       represent, as a whole, an original work of authorship. For the purposes
+ *       of this License, Derivative Works shall not include works that remain
+ *       separable from, or merely link (or bind by name) to the interfaces of,
+ *       the Work and Derivative Works thereof.
+ *
+ *       "Contribution" shall mean any work of authorship, including
+ *       the original version of the Work and any modifications or additions
+ *       to that Work or Derivative Works thereof, that is intentionally
+ *       submitted to Licensor for inclusion in the Work by the copyright owner
+ *       or by an individual or Legal Entity authorized to submit on behalf of
+ *       the copyright owner. For the purposes of this definition, "submitted"
+ *       means any form of electronic, verbal, or written communication sent
+ *       to the Licensor or its representatives, including but not limited to
+ *       communication on electronic mailing lists, source code control systems,
+ *       and issue tracking systems that are managed by, or on behalf of, the
+ *       Licensor for the purpose of discussing and improving the Work, but
+ *       excluding communication that is conspicuously marked or otherwise
+ *       designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *       "Contributor" shall mean Licensor and any individual or Legal Entity
+ *       on behalf of whom a Contribution has been received by Licensor and
+ *       subsequently incorporated within the Work.
+ *
+ *    2. Grant of Copyright License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       copyright license to reproduce, prepare Derivative Works of,
+ *       publicly display, publicly perform, sublicense, and distribute the
+ *       Work and such Derivative Works in Source or Object form.
+ *
+ *    3. Grant of Patent License. Subject to the terms and conditions of
+ *       this License, each Contributor hereby grants to You a perpetual,
+ *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *       (except as stated in this section) patent license to make, have made,
+ *       use, offer to sell, sell, import, and otherwise transfer the Work,
+ *       where such license applies only to those patent claims licensable
+ *       by such Contributor that are necessarily infringed by their
+ *       Contribution(s) alone or by combination of their Contribution(s)
+ *       with the Work to which such Contribution(s) was submitted. If You
+ *       institute patent litigation against any entity (including a
+ *       cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *       or a Contribution incorporated within the Work constitutes direct
+ *       or contributory patent infringement, then any patent licenses
+ *       granted to You under this License for that Work shall terminate
+ *       as of the date such litigation is filed.
+ *
+ *    4. Redistribution. You may reproduce and distribute copies of the
+ *       Work or Derivative Works thereof in any medium, with or without
+ *       modifications, and in Source or Object form, provided that You
+ *       meet the following conditions:
+ *
+ *       (a) You must give any other recipients of the Work or
+ *           Derivative Works a copy of this License; and
+ *
+ *       (b) You must cause any modified files to carry prominent notices
+ *           stating that You changed the files; and
+ *
+ *       (c) You must retain, in the Source form of any Derivative Works
+ *           that You distribute, all copyright, patent, trademark, and
+ *           attribution notices from the Source form of the Work,
+ *           excluding those notices that do not pertain to any part of
+ *           the Derivative Works; and
+ *
+ *       (d) If the Work includes a "NOTICE" text file as part of its
+ *           distribution, then any Derivative Works that You distribute must
+ *           include a readable copy of the attribution notices contained
+ *           within such NOTICE file, excluding those notices that do not
+ *           pertain to any part of the Derivative Works, in at least one
+ *           of the following places: within a NOTICE text file distributed
+ *           as part of the Derivative Works; within the Source form or
+ *           documentation, if provided along with the Derivative Works; or,
+ *           within a display generated by the Derivative Works, if and
+ *           wherever such third-party notices normally appear. The contents
+ *           of the NOTICE file are for informational purposes only and
+ *           do not modify the License. You may add Your own attribution
+ *           notices within Derivative Works that You distribute, alongside
+ *           or as an addendum to the NOTICE text from the Work, provided
+ *           that such additional attribution notices cannot be construed
+ *           as modifying the License.
+ *
+ *       You may add Your own copyright statement to Your modifications and
+ *       may provide additional or different license terms and conditions
+ *       for use, reproduction, or distribution of Your modifications, or
+ *       for any such Derivative Works as a whole, provided Your use,
+ *       reproduction, and distribution of the Work otherwise complies with
+ *       the conditions stated in this License.
+ *
+ *    5. Submission of Contributions. Unless You explicitly state otherwise,
+ *       any Contribution intentionally submitted for inclusion in the Work
+ *       by You to the Licensor shall be under the terms and conditions of
+ *       this License, without any additional terms or conditions.
+ *       Notwithstanding the above, nothing herein shall supersede or modify
+ *       the terms of any separate license agreement you may have executed
+ *       with Licensor regarding such Contributions.
+ *
+ *    6. Trademarks. This License does not grant permission to use the trade
+ *       names, trademarks, service marks, or product names of the Licensor,
+ *       except as required for reasonable and customary use in describing the
+ *       origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *    7. Disclaimer of Warranty. Unless required by applicable law or
+ *       agreed to in writing, Licensor provides the Work (and each
+ *       Contributor provides its Contributions) on an "AS IS" BASIS,
+ *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *       implied, including, without limitation, any warranties or conditions
+ *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *       PARTICULAR PURPOSE. You are solely responsible for determining the
+ *       appropriateness of using or redistributing the Work and assume any
+ *       risks associated with Your exercise of permissions under this License.
+ *
+ *    8. Limitation of Liability. In no event and under no legal theory,
+ *       whether in tort (including negligence), contract, or otherwise,
+ *       unless required by applicable law (such as deliberate and grossly
+ *       negligent acts) or agreed to in writing, shall any Contributor be
+ *       liable to You for damages, including any direct, indirect, special,
+ *       incidental, or consequential damages of any character arising as a
+ *       result of this License or out of the use or inability to use the
+ *       Work (including but not limited to damages for loss of goodwill,
+ *       work stoppage, computer failure or malfunction, or any and all
+ *       other commercial damages or losses), even if such Contributor
+ *       has been advised of the possibility of such damages.
+ *
+ *    9. Accepting Warranty or Additional Liability. While redistributing
+ *       the Work or Derivative Works thereof, You may choose to offer,
+ *       and charge a fee for, acceptance of support, warranty, indemnity,
+ *       or other liability obligations and/or rights consistent with this
+ *       License. However, in accepting such obligations, You may act only
+ *       on Your own behalf and on Your sole responsibility, not on behalf
+ *       of any other Contributor, and only if You agree to indemnify,
+ *       defend, and hold each Contributor harmless for any liability
+ *       incurred by, or claims asserted against, such Contributor by reason
+ *       of your accepting any such warranty or additional liability.
+ *
+ *    END OF TERMS AND CONDITIONS
+ *
+ *    APPENDIX: How to apply the Apache License to your work.
+ *
+ *       To apply the Apache License to your work, attach the following
+ *       boilerplate notice, with the fields enclosed by brackets "[]"
+ *       replaced with your own identifying information. (Don't include
+ *       the brackets!)  The text should be enclosed in the appropriate
+ *       comment syntax for the file format. We also recommend that a
+ *       file or class name and description of purpose be included on the
+ *       same "printed page" as the copyright notice for easier
+ *       identification within third-party archives.
+ *
+ *    Copyright 2016 Alibaba Group
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+package com.taobao.weex.ui;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.common.WXModule;
+
+/**
+ * Created by zhengshihan on 16/8/25.
+ */
+public interface IExternalMoudleGetter {
+    Class<? extends WXModule> getExternalMoudleClass(String type, WXSDKInstance instance);
+}


[27/30] incubator-weex git commit: Merge branch '0.11-dev' into android-feature-20170307

Posted by zs...@apache.org.
Merge branch '0.11-dev' into android-feature-20170307

# Conflicts:
#	android/playground/app/src/main/assets/error.js
#	android/playground/app/src/main/assets/geolocation.js
#	android/playground/app/src/main/assets/index.js
#	android/playground/app/src/main/assets/module/componentRect.js
#	android/playground/app/src/main/assets/module/instance-api.js
#	android/playground/app/src/main/assets/module/modal.js
#	android/playground/app/src/main/assets/module/picker-demo.js
#	android/playground/app/src/main/assets/module/storage-demo.js
#	android/playground/app/src/main/assets/module/stream-demo.js
#	android/playground/app/src/main/assets/module/websocket-demo.js
#	android/playground/app/src/main/assets/showcase/calculator.js
#	android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
#	android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
#	android/playground/app/src/main/assets/showcase/minesweeper.js
#	android/playground/app/src/main/assets/showcase/new-fashion/banner.js
#	android/playground/app/src/main/assets/showcase/new-fashion/banners.js
#	android/playground/app/src/main/assets/showcase/new-fashion/brand.js
#	android/playground/app/src/main/assets/showcase/new-fashion/category.js
#	android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
#	android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
#	android/playground/app/src/main/assets/showcase/new-fashion/goods.js
#	android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
#	android/playground/app/src/main/assets/showcase/new-fashion/index.js
#	android/playground/app/src/main/assets/showcase/new-fashion/link.js
#	android/playground/app/src/main/assets/showcase/new-fashion/main.js
#	android/playground/app/src/main/assets/showcase/new-fashion/match.js
#	android/playground/app/src/main/assets/showcase/new-fashion/resource.js
#	android/playground/app/src/main/assets/showcase/new-fashion/scene.js
#	android/playground/app/src/main/assets/showcase/ui.js
#	android/playground/app/src/main/assets/style/index.js
#	android/playground/app/src/main/assets/style/style-box.js
#	android/playground/app/src/main/assets/style/style-flex.js
#	android/playground/app/src/main/assets/style/style-item.js
#	android/playground/app/src/main/assets/syntax/hello-world-1.js
#	android/playground/app/src/main/assets/syntax/hello-world-2.js
#	android/playground/app/src/main/assets/syntax/hello-world-3.js
#	android/playground/app/src/main/assets/syntax/hello-world-4.js
#	android/playground/app/src/main/assets/syntax/hello-world-5.js
#	android/playground/app/src/main/assets/syntax/hello-world.js
#	android/playground/app/src/main/assets/syntax/index.js
#	android/playground/app/src/main/assets/syntax/script-component.js
#	android/playground/app/src/main/assets/syntax/script-data.js
#	android/playground/app/src/main/assets/syntax/script-events.js
#	android/playground/app/src/main/assets/syntax/script-instance.js
#	android/playground/app/src/main/assets/syntax/script-lifecycle.js
#	android/playground/app/src/main/assets/syntax/script-module.js
#	android/playground/app/src/main/assets/syntax/script-options.js
#	android/playground/app/src/main/assets/syntax/template-class.js
#	android/playground/app/src/main/assets/syntax/template-content.js
#	android/playground/app/src/main/assets/syntax/template-event.js
#	android/playground/app/src/main/assets/syntax/template-if.js
#	android/playground/app/src/main/assets/syntax/template-repeat-update.js
#	android/playground/app/src/main/assets/syntax/template-repeat.js
#	android/playground/app/src/main/assets/syntax/template-style.js
#	android/playground/app/src/main/assets/template.js
#	android/playground/app/src/main/assets/test.js
#	android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
#	android/sdk/assets/main.js
#	android/sdk/libs/armeabi/libweexv8.so
#	android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
#	package.json


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

Branch: refs/heads/0.12-dev
Commit: 3e6f1c9518720d45f1f61ab67714b77e1b247efb
Parents: f8e8f58 cae9aa8
Author: zshshr <zh...@gmail.com>
Authored: Thu Mar 30 12:04:20 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Mar 30 12:04:20 2017 +0800

----------------------------------------------------------------------
 .travis.yml                                     |    4 +-
 CONTRIBUTING.md                                 |   38 +-
 Dangerfile                                      |   55 -
 Dangerfile-ios                                  |    4 +
 .../app/src/main/assets/component/image-demo.js |    2 +-
 .../assets/component/slider-neighbor/index.js   |  113 +-
 .../slider-neighbor/silder-neighbor.js          |  287 --
 .../app/src/main/assets/component/text-demo.js  |  108 +
 android/playground/app/src/main/assets/error.js |   11 +-
 .../app/src/main/assets/geolocation.js          |    8 -
 android/playground/app/src/main/assets/index.js |   17 +-
 .../app/src/main/assets/linear-gradient.js      |  367 ++
 .../app/src/main/assets/module/clipboard.js     |   10 +-
 .../app/src/main/assets/module/componentRect.js |   36 +-
 .../app/src/main/assets/module/instance-api.js  |   21 +-
 .../app/src/main/assets/module/modal.js         |   25 +-
 .../app/src/main/assets/module/picker-demo.js   |   25 +-
 .../app/src/main/assets/module/storage-demo.js  |   21 +-
 .../app/src/main/assets/module/stream-demo.js   |   21 +-
 .../src/main/assets/module/websocket-demo.js    |   25 +-
 .../app/src/main/assets/showcase/calculator.js  |   25 +-
 .../assets/showcase/dropdown/dropdown-demo.js   |   38 +-
 .../assets/showcase/dropdown/we-dropdown.js     |   20 +-
 .../app/src/main/assets/showcase/minesweeper.js |   20 +-
 .../main/assets/showcase/new-fashion/banner.js  |   16 +-
 .../main/assets/showcase/new-fashion/banners.js |   28 +-
 .../main/assets/showcase/new-fashion/brand.js   |   44 +-
 .../assets/showcase/new-fashion/category.js     |   32 +-
 .../main/assets/showcase/new-fashion/coupon.js  |   20 +-
 .../main/assets/showcase/new-fashion/fashion.js |   46 +-
 .../main/assets/showcase/new-fashion/goods.js   |   32 +-
 .../assets/showcase/new-fashion/headlines.js    |   56 +-
 .../main/assets/showcase/new-fashion/index.js   |   29 +-
 .../main/assets/showcase/new-fashion/link.js    |   16 +-
 .../main/assets/showcase/new-fashion/main.js    |  209 +-
 .../main/assets/showcase/new-fashion/match.js   |   32 +-
 .../assets/showcase/new-fashion/resource.js     |   46 +-
 .../main/assets/showcase/new-fashion/scene.js   |   32 +-
 .../src/main/assets/showcase/pseudo-class.js    | 2425 +++++++++++++
 .../app/src/main/assets/showcase/ui.js          |   28 +-
 .../app/src/main/assets/style/index.js          |   80 +-
 .../app/src/main/assets/style/style-box.js      |   44 +-
 .../app/src/main/assets/style/style-flex.js     |   52 +-
 .../app/src/main/assets/style/style-item.js     |   20 +-
 .../app/src/main/assets/syntax/hello-world-1.js |   12 +-
 .../app/src/main/assets/syntax/hello-world-2.js |   12 +-
 .../app/src/main/assets/syntax/hello-world-3.js |   16 +-
 .../app/src/main/assets/syntax/hello-world-4.js |   20 +-
 .../app/src/main/assets/syntax/hello-world-5.js |   20 +-
 .../app/src/main/assets/syntax/hello-world.js   |   20 +-
 .../app/src/main/assets/syntax/index.js         |   28 +-
 .../src/main/assets/syntax/script-component.js  |   32 +-
 .../app/src/main/assets/syntax/script-data.js   |   20 +-
 .../app/src/main/assets/syntax/script-events.js |   20 +-
 .../src/main/assets/syntax/script-instance.js   |   20 +-
 .../src/main/assets/syntax/script-lifecycle.js  |   20 +-
 .../app/src/main/assets/syntax/script-module.js |   20 +-
 .../src/main/assets/syntax/script-options.js    |   20 +-
 .../src/main/assets/syntax/template-class.js    |   20 +-
 .../src/main/assets/syntax/template-content.js  |   28 +-
 .../src/main/assets/syntax/template-event.js    |   20 +-
 .../app/src/main/assets/syntax/template-if.js   |   20 +-
 .../assets/syntax/template-repeat-update.js     |   20 +-
 .../src/main/assets/syntax/template-repeat.js   |   20 +-
 .../src/main/assets/syntax/template-style.js    |   16 +-
 .../playground/app/src/main/assets/template.js  |   23 +-
 android/playground/app/src/main/assets/test.js  |   16 +-
 .../app/src/main/assets/vue/animation.js        |  709 ++++
 .../app/src/main/assets/vue/components/a.js     |  438 +++
 .../src/main/assets/vue/components/countdown.js |  640 ++++
 .../app/src/main/assets/vue/components/image.js |  641 ++++
 .../app/src/main/assets/vue/components/input.js |  364 ++
 .../app/src/main/assets/vue/components/list.js  |  246 ++
 .../src/main/assets/vue/components/marquee.js   |  534 +++
 .../src/main/assets/vue/components/navigator.js | 1059 ++++++
 .../src/main/assets/vue/components/scroller.js  |  304 ++
 .../src/main/assets/vue/components/slider.js    |  898 +++++
 .../src/main/assets/vue/components/tabbar.js    |  599 ++++
 .../app/src/main/assets/vue/components/text.js  |  513 +++
 .../app/src/main/assets/vue/components/video.js |  396 +++
 .../app/src/main/assets/vue/components/web.js   |  459 +++
 .../playground/app/src/main/assets/vue/hello.js |   99 +
 .../app/src/main/assets/vue/iconfont.js         |  204 ++
 .../playground/app/src/main/assets/vue/index.js |  496 +++
 .../src/main/assets/vue/modules/clipboard.js    |  691 ++++
 .../src/main/assets/vue/modules/instance-api.js |  304 ++
 .../app/src/main/assets/vue/modules/modal.js    |  581 +++
 .../app/src/main/assets/vue/modules/storage.js  |  381 ++
 .../app/src/main/assets/vue/modules/stream.js   |  477 +++
 .../src/main/assets/vue/showcase/calculator.js  |  340 ++
 .../src/main/assets/vue/showcase/itemlist.js    | 1062 ++++++
 .../src/main/assets/vue/showcase/new-fashion.js | 3302 ++++++++++++++++++
 .../src/main/assets/vue/showcase/progress.js    |  336 ++
 .../app/src/main/assets/vue/style/index.js      | 1566 +++++++++
 .../app/src/main/assets/vue/style/style-box.js  |  780 +++++
 .../app/src/main/assets/vue/style/style-flex.js |  919 +++++
 .../app/src/main/assets/vue/style/style-item.js |  155 +
 .../src/main/assets/vue/syntax/hello-world-1.js |   95 +
 .../src/main/assets/vue/syntax/hello-world-2.js |  112 +
 .../src/main/assets/vue/syntax/hello-world-3.js |  127 +
 .../src/main/assets/vue/syntax/hello-world-4.js |  167 +
 .../src/main/assets/vue/syntax/hello-world-5.js |  173 +
 .../src/main/assets/vue/syntax/hello-world.js   |  183 +
 .../main/assets/vue/syntax/script-component.js  |  224 ++
 .../src/main/assets/vue/syntax/script-data.js   |  214 ++
 .../src/main/assets/vue/syntax/script-events.js |  161 +
 .../main/assets/vue/syntax/script-instance.js   |  196 ++
 .../main/assets/vue/syntax/script-lifecycle.js  |  155 +
 .../src/main/assets/vue/syntax/script-module.js |  156 +
 .../main/assets/vue/syntax/script-options.js    |  182 +
 .../main/assets/vue/syntax/template-class.js    |  161 +
 .../main/assets/vue/syntax/template-content.js  |  189 +
 .../main/assets/vue/syntax/template-event.js    |  197 ++
 .../src/main/assets/vue/syntax/template-if.js   |  165 +
 .../assets/vue/syntax/template-repeat-update.js |  195 ++
 .../main/assets/vue/syntax/template-repeat.js   |  170 +
 .../main/assets/vue/syntax/template-style.js    |  144 +
 .../app/src/main/assets/vue/template.js         |  796 +++++
 .../playground/app/src/main/ic_launcher-web.png |  Bin 0 -> 19935 bytes
 .../java/com/alibaba/weex/WXApplication.java    |    5 +
 .../java/com/alibaba/weex/WXPageActivity.java   |   39 +-
 .../alibaba/weex/extend/component/WXMask.java   |  167 +
 .../extend/component/dom/WXMaskDomObject.java   |  231 ++
 .../extend/module/location/DefaultLocation.java |  110 +-
 .../alibaba/weex/extend/view/WXMaskView.java    |  220 ++
 .../src/main/res/mipmap-hdpi/ic_launcher.png    |  Bin 5248 -> 1755 bytes
 .../src/main/res/mipmap-mdpi/ic_launcher.png    |  Bin 4303 -> 1221 bytes
 .../src/main/res/mipmap-xhdpi/ic_launcher.png   |  Bin 6354 -> 2451 bytes
 .../src/main/res/mipmap-xxhdpi/ic_launcher.png  |  Bin 7930 -> 3939 bytes
 .../src/main/res/mipmap-xxxhdpi/ic_launcher.png |  Bin 10633 -> 5608 bytes
 android/sdk/assets/main.js                      |   14 +-
 android/sdk/build.gradle                        |   21 +-
 android/sdk/libs/x86/libweexv8.so               |  Bin 4340864 -> 4336768 bytes
 .../java/com/taobao/weex/WXSDKInstance.java     |   54 +-
 .../main/java/com/taobao/weex/WXSDKManager.java |    2 +-
 .../com/taobao/weex/bridge/WXBridgeManager.java |   85 +-
 .../taobao/weex/bridge/WXValidateProcessor.java |   15 +-
 .../java/com/taobao/weex/common/Constants.java  |    1 +
 .../com/taobao/weex/common/WXImageStrategy.java |    2 +-
 .../java/com/taobao/weex/common/WXThread.java   |    9 +
 .../java/com/taobao/weex/dom/WXDomModule.java   |    2 +-
 .../java/com/taobao/weex/dom/WXDomObject.java   |    6 +-
 .../com/taobao/weex/dom/WXDomStatement.java     |    4 +-
 .../taobao/weex/dom/WXRecyclerDomObject.java    |    4 +-
 .../main/java/com/taobao/weex/dom/WXStyle.java  |   65 +-
 .../com/taobao/weex/ui/WXRenderStatement.java   |   12 +-
 .../weex/ui/animation/WXAnimationModule.java    |   16 +-
 .../ui/component/AbstractEditComponent.java     |   10 +-
 .../taobao/weex/ui/component/WXBaseRefresh.java |   10 -
 .../taobao/weex/ui/component/WXComponent.java   |   67 +-
 .../com/taobao/weex/ui/component/WXEmbed.java   |    4 +-
 .../com/taobao/weex/ui/component/WXHeader.java  |    5 +
 .../com/taobao/weex/ui/component/WXImage.java   |   61 +-
 .../taobao/weex/ui/component/WXIndicator.java   |    2 +-
 .../com/taobao/weex/ui/component/WXLoading.java |    5 +
 .../com/taobao/weex/ui/component/WXRefresh.java |    5 +
 .../taobao/weex/ui/component/WXScroller.java    |   16 +-
 .../weex/ui/component/WXSliderNeighbor.java     |    7 +-
 .../taobao/weex/ui/component/WXVContainer.java  |    3 +-
 .../ui/component/list/BasicListComponent.java   |   52 +-
 .../ui/component/list/ListComponentView.java    |    1 +
 .../ui/component/list/SimpleRecyclerView.java   |   77 +-
 .../ui/component/list/StickyHeaderHelper.java   |  337 ++
 .../taobao/weex/ui/component/list/WXCell.java   |   11 +
 .../weex/ui/component/pesudo/PesudoStatus.java  |    2 +-
 .../com/taobao/weex/ui/module/WXMetaModule.java |    7 +-
 .../weex/ui/view/border/BorderDrawable.java     |    4 +-
 .../taobao/weex/ui/view/gesture/WXGesture.java  |    8 +-
 .../adapter/WXRecyclerViewOnScrollListener.java |   28 +-
 .../refresh/wrapper/BounceRecyclerView.java     |  112 +-
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   11 +-
 .../java/com/taobao/weex/utils/WXViewUtils.java |   14 +-
 .../test/java/com/taobao/weex/TestActivity.java |    6 +-
 .../java/com/taobao/weex/dom/WXStyleTest.java   |   23 +-
 .../taobao/weex/ui/module/WXMetaModuleTest.java |   10 +-
 .../taobao/weex/utils/FunctionParserTest.java   |   11 +-
 build/webpack.macacatest.config.js              |    6 +-
 dangerfile.js                                   |  117 +
 doc/_config.yml                                 |    9 +-
 doc/advanced/extend-to-android.md               |    2 +-
 doc/package.json                                |    2 +-
 doc/source/cn/faq.md                            |    6 +-
 doc/source/cn/guide/contributing.md             |  106 +
 doc/source/cn/guide/dev-with-weexpack.md        |   11 -
 doc/source/cn/guide/index.md                    |  123 +-
 doc/source/cn/guide/integrate-to-your-app.md    |    6 +-
 doc/source/cn/guide/intro/devtools.md           |   99 -
 doc/source/cn/guide/intro/index.md              |    2 +-
 doc/source/cn/guide/intro/using-vue.md          |    2 +-
 doc/source/cn/guide/intro/write-once.md         |    2 +-
 doc/source/cn/guide/set-up-env.md               |  128 +
 doc/source/cn/guide/tools/devtools.md           |  111 +
 doc/source/cn/guide/tools/index.md              |   11 +
 doc/source/cn/guide/tools/weexpack.md           |  388 ++
 .../cn/references/advanced/extend-jsfm.md       |    2 +-
 .../cn/references/advanced/extend-to-android.md |   22 +-
 .../cn/references/advanced/extend-to-html5.md   |    2 +-
 .../cn/references/advanced/extend-to-ios.md     |  233 +-
 doc/source/cn/references/advanced/index.md      |    2 +-
 .../advanced/integrate-devtool-to-android.md    |    6 +-
 .../advanced/integrate-devtool-to-ios.md        |    8 +-
 doc/source/cn/references/android-apis.md        |   25 +-
 doc/source/cn/references/common-style.md        |   10 +-
 doc/source/cn/references/components/a.md        |   25 +-
 doc/source/cn/references/components/cell.md     |    7 +-
 doc/source/cn/references/components/div.md      |   12 +-
 doc/source/cn/references/components/image.md    |   18 +-
 .../cn/references/components/indicator.md       |    3 +-
 doc/source/cn/references/components/input.md    |    2 +-
 doc/source/cn/references/components/list.md     |    6 +-
 doc/source/cn/references/components/loading.md  |    2 +
 doc/source/cn/references/components/refresh.md  |    4 +-
 doc/source/cn/references/components/scroller.md |    6 +-
 doc/source/cn/references/components/slider.md   |    2 +-
 doc/source/cn/references/components/switch.md   |    2 +-
 doc/source/cn/references/components/text.md     |    2 +-
 doc/source/cn/references/components/textarea.md |    2 +-
 doc/source/cn/references/components/video.md    |    2 +-
 doc/source/cn/references/components/web.md      |    2 +-
 doc/source/cn/references/gesture.md             |    3 +-
 doc/source/cn/references/ios-apis.md            |    4 +-
 doc/source/cn/references/js-service/index.md    |  118 +
 .../cn/references/migration/difference.md       |    2 +-
 doc/source/cn/references/migration/index.md     |    2 +-
 .../references/migration/migration-from-weex.md |    2 +-
 doc/source/cn/references/modules/animation.md   |    4 +-
 doc/source/cn/references/modules/clipboard.md   |    2 +-
 doc/source/cn/references/modules/dom.md         |    8 +-
 doc/source/cn/references/modules/globalevent.md |    2 +-
 doc/source/cn/references/modules/index.md       |   31 +-
 doc/source/cn/references/modules/modal.md       |    2 +-
 doc/source/cn/references/modules/navigator.md   |    2 +-
 doc/source/cn/references/modules/storage.md     |    4 +-
 doc/source/cn/references/modules/stream.md      |    2 +-
 doc/source/cn/references/modules/websocket.md   |  215 ++
 doc/source/cn/references/modules/webview.md     |    2 +-
 doc/source/cn/references/path.md                |   32 +-
 .../cn/references/vue/difference-of-vuex.md     |    2 +-
 .../cn/references/vue/difference-with-web.md    |    9 +-
 doc/source/cn/references/vue/index.md           |    2 +-
 .../cn/v-0.10/advanced/extend-to-html5.md       |    2 +-
 .../cn/v-0.10/advanced/integrate-to-android.md  |    4 +-
 .../cn/v-0.10/references/modules/globalevent.md |    2 +-
 .../cn/v-0.10/references/modules/storage.md     |    2 +-
 doc/source/cn/v-0.10/tools/devtools.md          |    4 +-
 doc/source/faq.md                               |    5 +-
 doc/source/guide/contributing.md                |  106 +
 doc/source/guide/dev-with-weexpack.md           |   12 -
 doc/source/guide/index.md                       |   49 +-
 doc/source/guide/integrate-to-your-app.md       |  274 +-
 doc/source/guide/intro/devtools.md              |  100 -
 doc/source/guide/intro/using-vue.md             |    2 +-
 doc/source/guide/set-up-env.md                  |   93 +
 doc/source/guide/tools/devtools.md              |  100 +
 doc/source/guide/tools/index.md                 |   11 +
 doc/source/guide/tools/weexpack.md              |  300 ++
 doc/source/references/advanced/extend-jsfm.md   |  159 +-
 .../references/advanced/extend-to-android.md    |   20 +-
 .../references/advanced/extend-to-html5.md      |   88 +-
 .../advanced/integrate-devtool-to-android.md    |  137 +-
 .../advanced/integrate-devtool-to-ios.md        |  184 +-
 doc/source/references/android-apis.md           |  211 +-
 doc/source/references/common-style.md           |   16 +-
 doc/source/references/components/a.md           |    2 +-
 doc/source/references/components/cell.md        |    4 +-
 doc/source/references/components/div.md         |    6 +-
 doc/source/references/components/image.md       |   11 +-
 doc/source/references/components/indicator.md   |    6 +-
 doc/source/references/components/input.md       |    4 +-
 doc/source/references/components/list.md        |    4 +-
 doc/source/references/components/refresh.md     |    4 +-
 doc/source/references/components/scroller.md    |   10 +-
 doc/source/references/components/slider.md      |   12 +-
 doc/source/references/components/switch.md      |    4 +-
 doc/source/references/components/text.md        |    2 +-
 doc/source/references/components/textarea.md    |    4 +-
 doc/source/references/components/video.md       |    4 +-
 doc/source/references/components/web.md         |    6 +-
 doc/source/references/gesture.md                |    2 +-
 doc/source/references/ios-apis.md               |   70 +-
 doc/source/references/modules/animation.md      |    2 +-
 doc/source/references/modules/clipboard.md      |    2 +-
 doc/source/references/modules/dom.md            |    8 +-
 doc/source/references/modules/globalevent.md    |    6 +-
 doc/source/references/modules/index.md          |   31 +-
 doc/source/references/modules/modal.md          |    2 +-
 doc/source/references/modules/navigator.md      |    2 +-
 doc/source/references/modules/storage.md        |    4 +-
 doc/source/references/modules/stream.md         |    2 +-
 doc/source/references/modules/websocket.md      |  214 ++
 doc/source/references/modules/webview.md        |    8 +-
 doc/source/references/native-dom-api.md         |  203 +-
 doc/source/references/platfrom-difference.md    |   11 +
 doc/source/references/vue/difference-of-vuex.md |   85 +-
 .../references/vue/difference-with-web.md       |  143 +-
 doc/source/references/weex-variable.md          |   41 +-
 doc/source/v-0.10/advanced/extend-to-html5.md   |    2 +-
 .../v-0.10/advanced/integrate-to-android.md     |    6 +-
 .../guide/how-to/preview-in-playground-app.md   |    2 +-
 .../v-0.10/references/modules/globalevent.md    |    2 +-
 doc/themes/weex/languages/cn.yml                |    5 +-
 doc/themes/weex/languages/en.yml                |   45 +-
 .../weex/layout/_partial/after-footer.ejs       |    2 +-
 doc/themes/weex/layout/_partial/footer.ejs      |    8 +-
 doc/themes/weex/layout/_partial/header.ejs      |   30 +-
 doc/themes/weex/layout/_partial/search-form.ejs |    2 +-
 doc/themes/weex/layout/_partial/sidebar.ejs     |   15 +-
 doc/themes/weex/layout/_partial/slider.ejs      |    2 +-
 doc/themes/weex/layout/index.ejs                |   29 +-
 doc/themes/weex/source/css/index.scss           |    4 +-
 doc/themes/weex/source/css/media-queries.scss   |    3 +
 doc/themes/weex/source/css/partial/footer.scss  |    1 +
 doc/themes/weex/source/css/partial/header.scss  |   32 +-
 .../weex/source/css/partial/search-form.scss    |    3 -
 doc/themes/weex/source/css/partial/sidebar.scss |    1 +
 doc/themes/weex/source/js/common.js             |   77 +-
 doc/themes/weex/source/js/example.js            |    2 +-
 examples/component/image-demo.we                |    2 +-
 examples/component/input-demo.we                |  253 +-
 examples/component/list/list-basic.we           |   79 +-
 examples/component/scroller-demo.we             |   64 +-
 examples/component/slider-tab.we                |  100 +
 examples/include/example-list-item.we           |   30 +-
 examples/index.we                               |    4 +-
 examples/module/chatroom-demo.we                |  227 ++
 examples/module/websocket-demo.we               |   52 +-
 examples/showcase/boxshadow.we                  |   46 +
 examples/vue/components/input.vue               |  203 +-
 examples/vue/components/list.vue                |    3 +
 examples/vue/components/waterfall.vue           |   17 +-
 examples/vue/index.vue                          |    1 +
 examples/vue/showcase/boxshadow.vue             |   39 +
 html5/frameworks/legacy/app/ctrl/init.js        |    2 +
 html5/shared/freeze.js                          |   58 +-
 html5/test/unit/shared/index.js                 |    2 +-
 ios/playground/WeexDemo/Info.plist              |    2 +-
 ios/playground/WeexDemo/WXDemoViewController.m  |    2 +-
 ios/playground/bundlejs/component/image-demo.js |    2 +-
 ios/playground/bundlejs/component/input-demo.js | 2683 ++++----------
 .../bundlejs/component/lengthunitwx-demo.js     |  329 ++
 .../bundlejs/component/list/list-basic.js       |  132 +-
 .../component/list/list-demo-horizon.js         |   12 +-
 .../bundlejs/component/list/list-demo.js        |   12 +-
 .../bundlejs/component/list/waterfall.js        |  877 +++++
 .../bundlejs/component/marquee-demo.js          |   13 +-
 .../bundlejs/component/process-bar-demo.js      |   17 +-
 .../bundlejs/component/scroller-demo.js         |  219 +-
 .../bundlejs/component/slider-neighbor/index.js |    8 +-
 .../slider-neighbor/slider-neighbor-item.js     |   12 +-
 .../slider-neighbor/slider-neighbor-page.js     |   28 +-
 ios/playground/bundlejs/component/slider-tab.js |  633 ++++
 .../bundlejs/component/slider/index.js          |   56 +-
 .../bundlejs/component/slider/slider-item.js    |   12 +-
 .../bundlejs/component/slider/slider-page.js    |   28 +-
 ios/playground/bundlejs/component/text-demo.js  |   24 +-
 ios/playground/bundlejs/component/video-demo.js |   24 +-
 ios/playground/bundlejs/component/web-demo.js   |   25 +-
 ios/playground/bundlejs/error.js                |   20 +-
 ios/playground/bundlejs/geolocation.js          |   46 +-
 ios/playground/bundlejs/hello.js                |    4 +-
 ios/playground/bundlejs/iconfont.js             |   12 +-
 ios/playground/bundlejs/index.js                |  270 +-
 ios/playground/bundlejs/linear-gradient.js      |    8 +-
 ios/playground/bundlejs/module/chatroom-demo.js |  370 ++
 ios/playground/bundlejs/module/clipboard.js     |   61 +-
 ios/playground/bundlejs/module/componentRect.js |   28 +-
 ios/playground/bundlejs/module/instance-api.js  |   61 +-
 ios/playground/bundlejs/module/modal.js         |   27 +-
 ios/playground/bundlejs/module/picker-demo.js   |   27 +-
 ios/playground/bundlejs/module/storage-demo.js  |   61 +-
 ios/playground/bundlejs/module/stream-demo.js   |   61 +-
 .../bundlejs/module/websocket-demo.js           | 2661 ++++++--------
 ios/playground/bundlejs/showcase/boxshadow.js   |  269 ++
 ios/playground/bundlejs/showcase/calculator.js  |   30 +-
 .../bundlejs/showcase/dropdown/dropdown-demo.js |   38 +-
 .../bundlejs/showcase/dropdown/we-dropdown.js   |   12 +-
 ios/playground/bundlejs/showcase/minesweeper.js |   12 +-
 .../bundlejs/showcase/pseudo-class.js           |   30 +-
 ios/playground/bundlejs/showcase/ui.js          |   30 +-
 ios/playground/bundlejs/style/index.js          |   82 +-
 ios/playground/bundlejs/style/style-box.js      |   46 +-
 ios/playground/bundlejs/style/style-flex.js     |   54 +-
 ios/playground/bundlejs/style/style-item.js     |   12 +-
 ios/playground/bundlejs/syntax/hello-world-1.js |    4 +-
 ios/playground/bundlejs/syntax/hello-world-2.js |    4 +-
 ios/playground/bundlejs/syntax/hello-world-3.js |    8 +-
 ios/playground/bundlejs/syntax/hello-world-4.js |   12 +-
 ios/playground/bundlejs/syntax/hello-world-5.js |   12 +-
 ios/playground/bundlejs/syntax/hello-world.js   |   12 +-
 ios/playground/bundlejs/syntax/index.js         |  296 +-
 .../bundlejs/syntax/script-component.js         |   24 +-
 ios/playground/bundlejs/syntax/script-data.js   |   12 +-
 ios/playground/bundlejs/syntax/script-events.js |   20 +-
 .../bundlejs/syntax/script-instance.js          |   12 +-
 .../bundlejs/syntax/script-lifecycle.js         |   12 +-
 ios/playground/bundlejs/syntax/script-module.js |   12 +-
 .../bundlejs/syntax/script-options.js           |   12 +-
 .../bundlejs/syntax/template-class.js           |   12 +-
 .../bundlejs/syntax/template-content.js         |   20 +-
 .../bundlejs/syntax/template-event.js           |   12 +-
 ios/playground/bundlejs/syntax/template-if.js   |   12 +-
 .../bundlejs/syntax/template-repeat-update.js   |   12 +-
 .../bundlejs/syntax/template-repeat.js          |   12 +-
 .../bundlejs/syntax/template-style.js           |    8 +-
 ios/playground/bundlejs/template.js             |   12 +-
 ios/playground/bundlejs/test.js                 |    8 +-
 ios/playground/bundlejs/vue/animation.js        |  120 +-
 ios/playground/bundlejs/vue/components/a.js     |   97 +-
 .../bundlejs/vue/components/countdown.js        |  122 +-
 ios/playground/bundlejs/vue/components/image.js |  142 +-
 ios/playground/bundlejs/vue/components/input.js |  735 +++-
 ios/playground/bundlejs/vue/components/list.js  |   44 +-
 .../bundlejs/vue/components/marquee.js          |  105 +-
 .../bundlejs/vue/components/navigator.js        |  187 +-
 .../bundlejs/vue/components/scroller.js         |   48 +-
 .../bundlejs/vue/components/slider.js           |  341 +-
 .../bundlejs/vue/components/tabbar.js           |  133 +-
 ios/playground/bundlejs/vue/components/text.js  |  132 +-
 ios/playground/bundlejs/vue/components/video.js |   72 +-
 .../bundlejs/vue/components/waterfall.js        |  877 +++++
 ios/playground/bundlejs/vue/components/web.js   |   74 +-
 ios/playground/bundlejs/vue/hello.js            |   19 +-
 ios/playground/bundlejs/vue/iconfont.js         |   36 +-
 ios/playground/bundlejs/vue/index.js            |  139 +-
 .../bundlejs/vue/modules/clipboard.js           |  147 +-
 .../bundlejs/vue/modules/instance-api.js        |   59 +-
 ios/playground/bundlejs/vue/modules/modal.js    |  105 +-
 ios/playground/bundlejs/vue/modules/storage.js  |   71 +-
 ios/playground/bundlejs/vue/modules/stream.js   |   95 +-
 .../bundlejs/vue/showcase/boxshadow.js          |  244 ++
 .../bundlejs/vue/showcase/calculator.js         |   72 +-
 .../bundlejs/vue/showcase/itemlist.js           |  166 +-
 .../bundlejs/vue/showcase/new-fashion.js        |  557 +--
 .../bundlejs/vue/showcase/progress.js           |   63 +-
 ios/playground/bundlejs/vue/style/index.js      |  418 +--
 ios/playground/bundlejs/vue/style/style-box.js  |  180 +-
 ios/playground/bundlejs/vue/style/style-flex.js |  238 +-
 ios/playground/bundlejs/vue/style/style-item.js |   26 +-
 .../bundlejs/vue/syntax/hello-world-1.js        |   17 +-
 .../bundlejs/vue/syntax/hello-world-2.js        |   23 +-
 .../bundlejs/vue/syntax/hello-world-3.js        |   28 +-
 .../bundlejs/vue/syntax/hello-world-4.js        |   32 +-
 .../bundlejs/vue/syntax/hello-world-5.js        |   32 +-
 .../bundlejs/vue/syntax/hello-world.js          |   32 +-
 .../bundlejs/vue/syntax/script-component.js     |   64 +-
 .../bundlejs/vue/syntax/script-data.js          |   36 +-
 .../bundlejs/vue/syntax/script-events.js        |   32 +-
 .../bundlejs/vue/syntax/script-instance.js      |   30 +-
 .../bundlejs/vue/syntax/script-lifecycle.js     |   32 +-
 .../bundlejs/vue/syntax/script-module.js        |   30 +-
 .../bundlejs/vue/syntax/script-options.js       |   28 +-
 .../bundlejs/vue/syntax/template-class.js       |   34 +-
 .../bundlejs/vue/syntax/template-content.js     |   49 +-
 .../bundlejs/vue/syntax/template-event.js       |   36 +-
 .../bundlejs/vue/syntax/template-if.js          |   32 +-
 .../vue/syntax/template-repeat-update.js        |   40 +-
 .../bundlejs/vue/syntax/template-repeat.js      |   50 +-
 .../bundlejs/vue/syntax/template-style.js       |   27 +-
 ios/playground/bundlejs/vue/template.js         |  181 +-
 ios/sdk/WeexSDK.podspec                         |    2 +-
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |    4 +-
 ios/sdk/WeexSDK/Resources/main.js               |   14 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h |    2 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m |    2 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |   18 +-
 ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m |   15 +-
 .../Component/Recycler/WXMultiColumnLayout.h    |    2 +
 .../Component/Recycler/WXMultiColumnLayout.m    |   10 +-
 .../Component/Recycler/WXRecyclerComponent.m    |  143 +-
 .../Recycler/WXRecyclerDataController.h         |    4 +
 .../Recycler/WXRecyclerDataController.m         |   18 +
 .../Recycler/WXRecyclerUpdateController.m       |   14 +-
 .../Component/WXComponent+GradientColor.m       |    3 +
 .../Sources/Component/WXImageComponent.m        |    1 +
 .../WeexSDK/Sources/Component/WXListComponent.m |   90 +-
 .../Sources/Component/WXLoadingComponent.m      |   13 -
 .../Sources/Component/WXRefreshComponent.m      |   18 +-
 .../Sources/Component/WXScrollerComponent.m     |   28 +-
 .../Sources/Component/WXSliderComponent.m       |    9 +-
 .../WeexSDK/Sources/Component/WXWebComponent.m  |    2 +-
 .../Sources/Display/WXComponent+BoxShadow.h     |    5 +-
 .../Sources/Display/WXComponent+BoxShadow.m     |   22 +-
 .../WeexSDK/Sources/Events/WXComponent+Events.m |    4 +
 ios/sdk/WeexSDK/Sources/Layout/Layout.c         |    3 +
 .../WeexSDK/Sources/Layout/WXComponent+Layout.m |   16 +-
 .../Sources/Manager/WXComponentManager.m        |    3 +-
 .../Sources/Manager/WXInvocationConfig.h        |    1 -
 .../Sources/Manager/WXInvocationConfig.m        |   12 -
 ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m |    5 +-
 ios/sdk/WeexSDK/Sources/Model/WXComponent.m     |    2 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |    4 +-
 .../WeexSDK/Sources/Module/WXAnimationModule.m  |   46 +-
 .../WeexSDK/Sources/Module/WXNavigatorModule.m  |    5 +-
 ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m |  239 +-
 .../WXResourceRequestHandlerDefaultImpl.m       |    7 +-
 ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m   |   40 +-
 ios/sdk/WeexSDK/Sources/Utility/WXDefine.h      |    2 +-
 ios/sdk/WeexSDK/Sources/Utility/WXUtility.m     |   42 +-
 .../Sources/View/WXComponent+ViewManagement.m   |    2 +
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |    1 +
 package.json                                    |   18 +-
 test/ci-funcs.sh                                |    6 +-
 test/pages/components/recycler.vue              |  487 +++
 test/scripts/components/recycler.test.js        |  412 +++
 504 files changed, 45290 insertions(+), 10219 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/playground/app/src/main/assets/component/image-demo.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/playground/app/src/main/assets/component/text-demo.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/playground/app/src/main/assets/module/clipboard.js
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
----------------------------------------------------------------------

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

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index d501ffb,c70b405..8b0e3d7
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@@ -249,10 -249,8 +249,9 @@@ import com.taobao.weex.ui.component.Nes
  import com.taobao.weex.ui.component.WXBasicComponentType;
  import com.taobao.weex.ui.component.WXComponent;
  import com.taobao.weex.ui.component.WXComponentFactory;
- import com.taobao.weex.ui.component.WXVContainer;
  import com.taobao.weex.ui.view.WXScrollView;
  import com.taobao.weex.ui.view.WXScrollView.WXScrollViewListener;
 +import com.taobao.weex.utils.Trace;
  import com.taobao.weex.utils.WXFileUtils;
  import com.taobao.weex.utils.WXJsonUtils;
  import com.taobao.weex.utils.WXLogUtils;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------

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

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index 8907dab,77492b5..11a4d48
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@@ -208,9 -208,8 +208,10 @@@ import android.content.Context
  import android.content.pm.ApplicationInfo;
  import android.os.Build;
  
 +import com.taobao.weex.IWXStatisticsListener;
+ import com.taobao.weappplus_sdk.BuildConfig;
  import com.taobao.weex.WXEnvironment;
 +import com.taobao.weex.adapter.IWXSoLoaderAdapter;
  import com.taobao.weex.adapter.IWXUserTrackAdapter;
  import com.taobao.weex.common.WXErrorCode;
  import com.taobao.weex.common.WXPerformance;
@@@ -252,20 -251,13 +253,20 @@@ public class WXSoInstallMgrSdk 
    private final static String ARMEABI = "armeabi"; //default
    private final static String X86 = "x86";
    private final static String MIPS = "mips";
-   private final static int ARMEABI_Size = 3649404;
-   //private final static int ARMEABI_Size = 124236;
-   private final static int X86_Size = 4451068;
++
+   private final static int ARMEABI_Size = 3583820;
+   private final static int X86_Size = 4340864;
  
    static Context mContext = null;
 +  private static IWXSoLoaderAdapter mSoLoader = null;
 +  private static IWXStatisticsListener mStatisticsListener = null;
  
 -  public static void init(Context c) {
 +  public static void init(Context c,
 +                          IWXSoLoaderAdapter loader,
 +                          IWXStatisticsListener listener) {
      mContext = c;
 +    mSoLoader = loader;
 +    mStatisticsListener = listener;
    }
  
    public static boolean isX86(){

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/3e6f1c95/html5/frameworks/legacy/app/ctrl/init.js
----------------------------------------------------------------------



[14/30] incubator-weex git commit: * [android] update weexv8 to fix a crash in debug mode.

Posted by zs...@apache.org.
* [android] update weexv8 to fix a crash in debug mode.


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

Branch: refs/heads/0.12-dev
Commit: ff351c94357db2959448c12d5dd9b5f7821c4d3b
Parents: b807772
Author: butuo.dbt <bu...@alibaba-inc.com>
Authored: Mon Mar 6 16:35:23 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 15:27:50 2017 +0800

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


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ff351c94/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
index 03c6e71..5bdfe39 100755
Binary files a/android/sdk/libs/armeabi/libweexv8.so and b/android/sdk/libs/armeabi/libweexv8.so differ


[29/30] incubator-weex git commit: * [android] fix merge error

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


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

Branch: refs/heads/0.12-dev
Commit: e00277acf77e061d8af769051e87a295a56518ef
Parents: 6bc2a18
Author: zshshr <zh...@gmail.com>
Authored: Thu Mar 30 13:43:04 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Mar 30 13:43:04 2017 +0800

----------------------------------------------------------------------
 .../main/java/com/taobao/weex/WXSDKManager.java | 72 +++++++++++++++++---
 1 file changed, 64 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e00277ac/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index 461faf0..fc182b4 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -139,6 +139,7 @@ import com.taobao.weex.adapter.IWXDebugAdapter;
 import com.taobao.weex.adapter.IWXHttpAdapter;
 import com.taobao.weex.adapter.IWXImgLoaderAdapter;
 import com.taobao.weex.adapter.IWXJSExceptionAdapter;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.adapter.URIAdapter;
 import com.taobao.weex.appfram.navigator.IActivityNavBarSetter;
@@ -157,6 +158,7 @@ import com.taobao.weex.ui.WXRenderManager;
 import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -175,6 +177,7 @@ public class WXSDKManager {
 
   private IWXUserTrackAdapter mIWXUserTrackAdapter;
   private IWXImgLoaderAdapter mIWXImgLoaderAdapter;
+  private IWXSoLoaderAdapter mIWXSoLoaderAdapter;
   private IDrawableLoader mDrawableLoader;
   private IWXHttpAdapter mIWXHttpAdapter;
   private IWXDebugAdapter mIWXDebugAdapter;
@@ -185,10 +188,12 @@ public class WXSDKManager {
   private IWXJSExceptionAdapter mIWXJSExceptionAdapter;
 
   private IWXStorageAdapter mIWXStorageAdapter;
+  private IWXStatisticsListener mStatisticsListener;
   private URIAdapter mURIAdapter;
   private IWebSocketAdapterFactory mIWebSocketAdapterFactory;
-
   private WXValidateProcessor mWXValidateProcessor;
+  // Tell weexv8 to initialize v8, default is true.
+  private boolean mNeedInitV8 = true;
 
   private WXSDKManager() {
     mWXRenderManager = new WXRenderManager();
@@ -196,14 +201,46 @@ public class WXSDKManager {
     mBridgeManager = WXBridgeManager.getInstance();
   }
 
-  private WXSDKManager(WXRenderManager renderManager) {
-    mWXRenderManager = renderManager;
-    mWXDomManager = new WXDomManager(renderManager);
-    mBridgeManager = WXBridgeManager.getInstance();
+  public void registerStatisticsListener(IWXStatisticsListener listener) {
+    mStatisticsListener = listener;
+  }
+
+  public IWXStatisticsListener getWXStatisticsListener() {
+    return mStatisticsListener;
+  }
+
+  public void onSDKEngineInitialize() {
+    if (mStatisticsListener != null) {
+      mStatisticsListener.onSDKEngineInitialize();
+    }
   }
 
-  static void initInstance(WXRenderManager renderManager){
-    sManager = new WXSDKManager(renderManager);
+  public void setNeedInitV8(boolean need) {
+    mNeedInitV8 = need;
+  }
+
+  public boolean needInitV8() {
+    return mNeedInitV8;
+  }
+
+  public void takeJSHeapSnapshot(String path) {
+    File file = new File(path);
+    if (!file.exists()) {
+      if (!file.mkdir()) {
+        return;
+      }
+    }
+
+    String name = String.valueOf(sInstanceId.get());
+    String filename = path;
+
+    if (!path.endsWith(File.separator)) {
+      filename += File.separator;
+    }
+    filename += name;
+    filename += ".heapsnapshot";
+
+    mBridgeManager.takeJSHeapSnapshot(filename);
   }
 
   public static WXSDKManager getInstance() {
@@ -355,7 +392,7 @@ public class WXSDKManager {
     return mIWXJSExceptionAdapter;
   }
 
-   void setIWXJSExceptionAdapter(IWXJSExceptionAdapter IWXJSExceptionAdapter) {
+  void setIWXJSExceptionAdapter(IWXJSExceptionAdapter IWXJSExceptionAdapter) {
     mIWXJSExceptionAdapter = IWXJSExceptionAdapter;
   }
 
@@ -373,6 +410,10 @@ public class WXSDKManager {
     return mURIAdapter;
   }
 
+  public IWXSoLoaderAdapter getIWXSoLoaderAdapter() {
+    return mIWXSoLoaderAdapter;
+  }
+
   void setInitConfig(InitConfig config){
     this.mIWXDebugAdapter = config.getDebugAdapter();
     this.mIWXHttpAdapter = config.getHttpAdapter();
@@ -383,6 +424,7 @@ public class WXSDKManager {
     this.mURIAdapter = config.getURIAdapter();
     this.mIWebSocketAdapterFactory = config.getWebSocketAdapterFactory();
     this.mIWXJSExceptionAdapter = config.getJSExceptionAdapter();
+    this.mIWXSoLoaderAdapter = config.getIWXSoLoaderAdapter();
   }
 
   public IWXDebugAdapter getIWXDebugAdapter() {
@@ -417,6 +459,20 @@ public class WXSDKManager {
   public void notifyTrimMemory() {
     mBridgeManager.notifyTrimMemory();
   }
+
+  /**
+   * Weex embedders can use <code>notifySerializeCodeCache</code> to
+   * serialize code caches if the jsfm has the alility to compile 'new Function'
+   * against js bundles on the weex native side.
+   *
+   * It's a good time to serialize a code cache after exiting a weex page.
+   * Then, the next time of entering the same weex page, V8 would compile
+   * 'new Function' against the code cache deseriazed from the js bundle.
+   */
+  public void notifySerializeCodeCache() {
+    mBridgeManager.notifySerializeCodeCache();
+  }
+
   public @Nullable
   IWebSocketAdapter getIWXWebSocketAdapter() {
     if (mIWebSocketAdapterFactory != null) {


[30/30] incubator-weex git commit: Merge branch 'android-feature-20170307' into 0.12-dev

Posted by zs...@apache.org.
Merge branch 'android-feature-20170307' into 0.12-dev

* android-feature-20170307:
  * [android] fix merge error
  * [android] add IExternalMoudleGetter interface
  * [android] Reduce parameters passed in for 'init()' in vue1.0.
  * [android] update jsfm to 0.19.15 to uc v8
  * [android] weex sdk may use another build files to build and cause compiling errors if these build files don't contain any ENABLE_TRACE.
  * [android] Add trace on Java side and Add a switch to enable/disable * trace on Java side as well as on V8 side. Trace is available on debug * production by default.
  * [android] fix * https://aone.alibaba-inc.com/project/469098/issue/10392126
  * [android] use u3 v8 as weex's default v8 engine.
  * [android] update weexv8 to fix a crash in debug mode.
  * [android] add an interface for statistics.
  * [android] let embedders have a chance to take charge of library * loading.
  * [android] make the app playground to use v8 code cache.
  * [android] add an ability for playground to dump v8's heap snapshot.
  * [android] v8 code cache supports.
  * [android] let weex embedders have a chance to decide whether to * initialize v8.
  * [android] make weex sdk depends on a new weexv8 which depends on the * library v8uc.


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

Branch: refs/heads/0.12-dev
Commit: ba19f5522674ea1fffc80d421702535bfdc8f242
Parents: 80df1aa e00277a
Author: zshshr <zh...@gmail.com>
Authored: Thu Mar 30 19:38:08 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Mar 30 19:38:08 2017 +0800

----------------------------------------------------------------------
 .eslintrc                                       |   5 +-
 android/commons/build.gradle                    |   3 +-
 .../weex/commons/AbstractWeexActivity.java      |  24 ++
 android/playground/app/build.gradle             |   3 +-
 .../playground/app/src/main/assets/animation.js |  11 +-
 .../app/src/main/assets/component/a-demo.js     |  11 +-
 .../src/main/assets/component/countdown-demo.js |  11 +-
 .../app/src/main/assets/component/image-demo.js |  11 +-
 .../app/src/main/assets/component/input-demo.js |  11 +-
 .../main/assets/component/list/list-basic.js    |   8 +
 .../assets/component/list/list-demo-horizon.js  |   8 +
 .../src/main/assets/component/list/list-demo.js |   8 +
 .../src/main/assets/component/marquee-demo.js   |  11 +-
 .../src/main/assets/component/navigator-demo.js |  15 +-
 .../main/assets/component/process-bar-demo.js   |  11 +-
 .../src/main/assets/component/scroller-demo.js  |  11 +-
 .../slider-neighbor/slider-neighbor-item.js     |   8 +
 .../slider-neighbor/slider-neighbor-page.js     |   8 +
 .../src/main/assets/component/slider/index.js   |  11 +-
 .../main/assets/component/slider/slider-item.js |   8 +
 .../main/assets/component/slider/slider-page.js |   8 +
 .../main/assets/component/tabbar/tabbar-demo.js |  15 +-
 .../main/assets/component/tabbar/tabbar-item.js |   8 +
 .../app/src/main/assets/component/text-demo.js  |  11 +-
 .../app/src/main/assets/component/video-demo.js |  11 +-
 .../app/src/main/assets/component/web-demo.js   |  11 +-
 android/playground/app/src/main/assets/hello.js |   8 +
 .../playground/app/src/main/assets/iconfont.js  |   8 +
 .../app/src/main/assets/module/clipboard.js     |  11 +-
 .../java/com/alibaba/weex/IndexActivity.java    |   6 +
 .../java/com/alibaba/weex/WXApplication.java    |   4 +
 .../extend/WXInstanceStatisticsListener.java    | 268 +++++++++++++++++
 android/sdk/build.gradle                        |   2 +
 android/sdk/libs/armeabi/libweexv8.so           | Bin 3583820 -> 3563544 bytes
 android/sdk/libs/x86/libweexv8.so               | Bin 4336768 -> 4545544 bytes
 .../com/taobao/weex/IWXStatisticsListener.java  | 252 ++++++++++++++++
 .../main/java/com/taobao/weex/InitConfig.java   |  14 +
 .../java/com/taobao/weex/WXEnvironment.java     |  18 ++
 .../main/java/com/taobao/weex/WXSDKEngine.java  |   5 +-
 .../java/com/taobao/weex/WXSDKInstance.java     |  65 +++-
 .../main/java/com/taobao/weex/WXSDKManager.java |  72 ++++-
 .../taobao/weex/adapter/IWXSoLoaderAdapter.java | 236 +++++++++++++++
 .../java/com/taobao/weex/bridge/WXBridge.java   |   6 +
 .../com/taobao/weex/bridge/WXBridgeManager.java |  59 +++-
 .../java/com/taobao/weex/bridge/WXParams.java   |  13 +
 .../java/com/taobao/weex/common/Constants.java  |   8 +
 .../java/com/taobao/weex/common/IWXBridge.java  |   7 +
 .../taobao/weex/common/WXJSBridgeMsgType.java   |   1 +
 .../taobao/weex/ui/IExternalMoudleGetter.java   | 215 +++++++++++++
 .../java/com/taobao/weex/utils/OsVersion.java   | 233 ++++++++++++++
 .../main/java/com/taobao/weex/utils/Trace.java  | 301 +++++++++++++++++++
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |  51 +++-
 .../java/com/taobao/weex/utils/WXUtils.java     |  84 +++++-
 .../taobao/weex/bridge/WXWebsocketBridge.java   |   3 +
 build/build.js                                  |   2 +
 build/examples-banner-plugin.js                 |  65 ++++
 build/webpack.examples.config.js                |   3 +-
 html5/frameworks/legacy/app/ctrl/init.js        |  55 +++-
 html5/frameworks/legacy/static/create.js        |   5 +-
 html5/frameworks/legacy/static/life.js          |  17 ++
 60 files changed, 2291 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ba19f552/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
----------------------------------------------------------------------
diff --cc android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
index 008ca72,a2d684b..7e047e9
--- a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
@@@ -363,6 -364,12 +363,12 @@@ public class IndexActivity extends Abst
      LocalBroadcastManager.getInstance(this).unregisterReceiver(mReloadReceiver);
    }
  
+   @Override
+   public void onPause() {
+     super.onPause();
 -    WXSDKManager.getInstance().takeJSHeapSnapshot("/sdcard/weex/");
++//    WXSDKManager.getInstance().takeJSHeapSnapshot("/sdcard/weex/");
+   }
+ 
    private static String getIndexUrl() {
      return "http://" + sCurrentIp + ":12580/examples/build/index.js";
    }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ba19f552/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --cc android/sdk/libs/armeabi/libweexv8.so
index 334b7a5,5d1d696..471bb04
Binary files differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ba19f552/android/sdk/libs/x86/libweexv8.so
----------------------------------------------------------------------
diff --cc android/sdk/libs/x86/libweexv8.so
index 73fc022,73fc022..b20a73b
Binary files differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ba19f552/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
----------------------------------------------------------------------


[15/30] incubator-weex git commit: * [android] use u3 v8 as weex's default v8 engine.

Posted by zs...@apache.org.
* [android] use u3 v8 as weex's default v8 engine.


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

Branch: refs/heads/0.12-dev
Commit: eb85033e5bf232619528e279561493801e559ba3
Parents: ff351c9
Author: bruno.duan <br...@gmail.com>
Authored: Tue Mar 7 16:11:12 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Tue Mar 7 16:11:12 2017 +0800

----------------------------------------------------------------------
 android/playground/app/libs/armeabi/libv8uc.so  | Bin 4501896 -> 0 bytes
 android/sdk/libs/armeabi/libweexv8.so           | Bin 120132 -> 3645300 bytes
 .../taobao/weex/utils/WXSoInstallMgrSdk.java    |   4 ++--
 3 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eb85033e/android/playground/app/libs/armeabi/libv8uc.so
----------------------------------------------------------------------
diff --git a/android/playground/app/libs/armeabi/libv8uc.so b/android/playground/app/libs/armeabi/libv8uc.so
deleted file mode 100755
index eeafbf7..0000000
Binary files a/android/playground/app/libs/armeabi/libv8uc.so and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eb85033e/android/sdk/libs/armeabi/libweexv8.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
index 5bdfe39..57fbcda 100755
Binary files a/android/sdk/libs/armeabi/libweexv8.so and b/android/sdk/libs/armeabi/libweexv8.so differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eb85033e/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index d72fe1d..f6d2e9e 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -252,8 +252,8 @@ public class WXSoInstallMgrSdk {
   private final static String ARMEABI = "armeabi"; //default
   private final static String X86 = "x86";
   private final static String MIPS = "mips";
-  //private final static int ARMEABI_Size = 3542844;
-  private final static int ARMEABI_Size = 120132;
+  private final static int ARMEABI_Size = 3645300;
+  //private final static int ARMEABI_Size = 120132;
   private final static int X86_Size = 4451068;
 
   static Context mContext = null;


[28/30] incubator-weex git commit: Merge branch '0.12-dev' into android-feature-20170307

Posted by zs...@apache.org.
Merge branch '0.12-dev' into android-feature-20170307

# Conflicts:
#	android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java


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

Branch: refs/heads/0.12-dev
Commit: 6bc2a1826086972dfcb7a5bb78c967cfd1a290b4
Parents: 3e6f1c9 5855c68
Author: zshshr <zh...@gmail.com>
Authored: Thu Mar 30 12:11:00 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Mar 30 12:11:00 2017 +0800

----------------------------------------------------------------------
 CHANGELOG.md                                    |    7 +
 .../main/java/com/taobao/weex/WXSDKEngine.java  |    1 -
 .../java/com/taobao/weex/WXSDKInstance.java     |    6 +-
 .../main/java/com/taobao/weex/WXSDKManager.java |   72 +-
 .../taobao/weex/adapter/DefaultUriAdapter.java  |    8 +-
 .../com/taobao/weex/bridge/WXBridgeManager.java |    3 +-
 .../com/taobao/weex/dom/ApplyStyleConsumer.java |  245 ++++
 .../java/com/taobao/weex/dom/DOMAction.java     |  216 +++
 .../com/taobao/weex/dom/DOMActionContext.java   |  255 ++++
 .../taobao/weex/dom/DOMActionContextImpl.java   |  620 +++++++++
 .../java/com/taobao/weex/dom/RenderAction.java  |  215 +++
 .../taobao/weex/dom/RenderActionContext.java    |  218 +++
 .../com/taobao/weex/dom/RenderActionTask.java   |  227 ++++
 .../java/com/taobao/weex/dom/WXDomHandler.java  |   82 +-
 .../java/com/taobao/weex/dom/WXDomManager.java  |  300 +----
 .../java/com/taobao/weex/dom/WXDomModule.java   |  439 +-----
 .../java/com/taobao/weex/dom/WXDomObject.java   |    4 +-
 .../com/taobao/weex/dom/WXDomStatement.java     | 1272 ------------------
 .../dom/action/AbstractAddElementAction.java    |  313 +++++
 .../dom/action/AbstractLayoutFinishAction.java  |  240 ++++
 .../java/com/taobao/weex/dom/action/Action.java |  212 +++
 .../com/taobao/weex/dom/action/Actions.java     |  350 +++++
 .../weex/dom/action/AddElementAction.java       |  295 ++++
 .../taobao/weex/dom/action/AddEventAction.java  |  262 ++++
 .../taobao/weex/dom/action/AddRuleAction.java   |  254 ++++
 .../taobao/weex/dom/action/AnimationAction.java |  463 +++++++
 .../weex/dom/action/CreateBodyAction.java       |  302 +++++
 .../weex/dom/action/CreateFinishAction.java     |  224 +++
 .../weex/dom/action/GetComponentRectAction.java |  299 ++++
 .../weex/dom/action/InvokeMethodAction.java     |  236 ++++
 .../weex/dom/action/MoveElementAction.java      |  281 ++++
 .../weex/dom/action/RefreshFinishAction.java    |  221 +++
 .../weex/dom/action/RemoveElementAction.java    |  286 ++++
 .../weex/dom/action/RemoveEventAction.java      |  264 ++++
 .../weex/dom/action/ScrollToElementAction.java  |  257 ++++
 .../weex/dom/action/UpdateAttributeAction.java  |  263 ++++
 .../weex/dom/action/UpdateFinishAction.java     |  237 ++++
 .../weex/dom/action/UpdateStyleAction.java      |  298 ++++
 .../taobao/weex/ui/IExternalMoudleGetter.java   |  215 +++
 .../taobao/weex/ui/RenderActionContextImpl.java |  299 ++++
 .../com/taobao/weex/ui/WXRenderManager.java     |  191 +--
 .../com/taobao/weex/ui/WXRenderStatement.java   |  556 --------
 .../ui/animation/DimensionUpdateListener.java   |    6 +-
 .../weex/ui/animation/WXAnimationBean.java      |    5 +-
 .../weex/ui/animation/WXAnimationModule.java    |  199 +--
 .../weex/ui/component/NestedContainer.java      |    2 +
 .../taobao/weex/ui/component/WXComponent.java   |   12 +-
 .../com/taobao/weex/ui/component/WXEmbed.java   |    6 +
 .../java/com/taobao/weex/WXSDKManagerTest.java  |    2 +-
 .../com/taobao/weex/dom/WXDomStatementTest.java |  119 +-
 .../com/taobao/weex/dom/action/TestActions.java |   59 +
 .../taobao/weex/ui/WXRenderStatementTest.java   |    4 +-
 .../ui/animation/WXAnimationModuleTest.java     |   18 +-
 circle.yml                                      |   37 -
 test/pages/dom-operation.we                     |    5 +-
 test/scripts/dom.test.js                        |    9 +
 56 files changed, 8400 insertions(+), 3091 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6bc2a182/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6bc2a182/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------

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


[22/30] incubator-weex git commit: * [android] update jsfm to 0.19.15 to uc v8

Posted by zs...@apache.org.
* [android] update jsfm to 0.19.15 to uc v8


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

Branch: refs/heads/0.12-dev
Commit: eb2eba80b231c265a6769f330c0145eec03557c3
Parents: 76a38ad
Author: atomtong <to...@qq.com>
Authored: Mon Mar 20 14:02:14 2017 +0800
Committer: atomtong <to...@qq.com>
Committed: Mon Mar 20 14:02:14 2017 +0800

----------------------------------------------------------------------
 android/sdk/assets/main.js | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[20/30] incubator-weex git commit: * [android] weex sdk may use another build files to build and cause compiling errors if these build files don't contain any ENABLE_TRACE.

Posted by zs...@apache.org.
* [android] weex sdk may use another build files to build and cause compiling errors if these build files don't contain any ENABLE_TRACE.


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

Branch: refs/heads/0.12-dev
Commit: 76a38ad9893d281d0f520de70c0fac45c0ecf519
Parents: 849ff61
Author: bruno.duan <br...@gmail.com>
Authored: Fri Mar 17 15:57:10 2017 +0800
Committer: bruno.duan <br...@gmail.com>
Committed: Fri Mar 17 16:20:25 2017 +0800

----------------------------------------------------------------------
 android/sdk/src/main/java/com/taobao/weex/utils/Trace.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/76a38ad9/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java b/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
index 048ba61..1255e8f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
@@ -234,7 +234,11 @@ public class Trace {
     // If you turn sEnabled on, weex would trace logs on Java side
     // as well as on V8 side, please take care of turning sEnabled on
     // to avoid performance impact.
-    sEnabled = com.taobao.weappplus_sdk.BuildConfig.ENABLE_TRACE;
+    // FIXME: weex sdk may use another build files to build and cause
+    // compiling errors if these build files don't contain any
+    // ENABLE_TRACE, just comment out the line below.
+    //sEnabled = com.taobao.weappplus_sdk.BuildConfig.ENABLE_TRACE;
+    sEnabled = false;
 
     if (sEnabled == true && OsVersion.isAtLeastJB_MR2()) {
       sTrace = new TraceJBMR2();


[03/30] incubator-weex git commit: * [android] v8 code cache supports.

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index f2181b4..4e465e0 100755
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -417,6 +417,19 @@ public class WXSDKManager {
     mBridgeManager.notifyTrimMemory();
   }
 
+  /**
+   * Weex embedders can use <code>notifySerializeCodeCache</code> to
+   * serialize code caches if the jsfm has the alility to compile 'new Function'
+   * against js bundles on the weex native side.
+   *
+   * It's a good time to serialize a code cache after exiting a weex page.
+   * Then, the next time of entering the same weex page, V8 would compile
+   * 'new Function' against the code cache deseriazed from the js bundle.
+   */
+  public void notifySerializeCodeCache() {
+    mBridgeManager.notifySerializeCodeCache();
+  }
+
   public @Nullable
   IWebSocketAdapter getIWXWebSocketAdapter() {
     if (mIWebSocketAdapterFactory != null) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 0bd3417..1860e3e 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -286,6 +286,8 @@ public class WXBridgeManager implements Callback,BactchExecutor {
   public static final String METHOD_CALLBACK = "callback";
   public static final String METHOD_REFRESH_INSTANCE = "refreshInstance";
   public static final String METHOD_NOTIFY_TRIM_MEMORY = "notifyTrimMemory";
+  public static final String METHOD_NOTIFY_SERIALIZE_CODE_CACHE =
+      "notifySerializeCodeCache";
 
   public static final String KEY_METHOD = "method";
   public static final String KEY_ARGS = "args";
@@ -1354,4 +1356,16 @@ public class WXBridgeManager implements Callback,BactchExecutor {
     return ret;
   }
 
+  public void notifySerializeCodeCache() {
+    post(new Runnable() {
+      @Override
+      public void run() {
+        if (!isJSFrameworkInit())
+          return;
+        
+        invokeExecJS("", null, METHOD_NOTIFY_SERIALIZE_CODE_CACHE, new WXJSObject[0]);
+      }
+    });
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
index 9a8583a..118bf85 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -251,7 +251,7 @@ public class WXSoInstallMgrSdk {
   private final static String X86 = "x86";
   private final static String MIPS = "mips";
   //private final static int ARMEABI_Size = 3542844;
-  private final static int ARMEABI_Size = 120132;
+  private final static int ARMEABI_Size = 120120;
   private final static int X86_Size = 4451068;
 
   static Context mContext = null;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/build/build.js
----------------------------------------------------------------------
diff --git a/build/build.js b/build/build.js
index f9b6868..10b9e40 100644
--- a/build/build.js
+++ b/build/build.js
@@ -1,3 +1,5 @@
+"use strict"
+
 const fs = require('fs')
 const path = require('path')
 const gzip = require('zlib').createGzip()

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/html5/frameworks/legacy/app/ctrl/init.js
----------------------------------------------------------------------
diff --git a/html5/frameworks/legacy/app/ctrl/init.js b/html5/frameworks/legacy/app/ctrl/init.js
index 0e5d0be..d9c403a 100644
--- a/html5/frameworks/legacy/app/ctrl/init.js
+++ b/html5/frameworks/legacy/app/ctrl/init.js
@@ -21,8 +21,11 @@ import { updateActions } from './misc'
  * @param  {object} app
  * @param  {string} code
  * @param  {object} data
+ * @param  {string} bundleUrl
+ * @param  {string} bundleDigest
+ * @param  {string} codeCachePath
  */
-export function init (app, code, data, services) {
+export function init (app, code, data, services, bundleUrl, bundleDigest, codeCachePath) {
   console.debug('[JS Framework] Intialize an instance with:\n', data)
   let result
 
@@ -78,6 +81,7 @@ export function init (app, code, data, services) {
   // run code and get result
   const { WXEnvironment } = global
   const timerAPIs = {}
+
   /* istanbul ignore if */
   if (WXEnvironment && WXEnvironment.platform !== 'Web') {
     // timer APIs polyfill in native
@@ -117,7 +121,15 @@ export function init (app, code, data, services) {
     __weex_viewmodel__: bundleVm,
     weex: weexGlobalObject
   }, timerAPIs, services)
-  callFunction(globalObjects, functionBody)
+  if (!callFunctionNative(globalObjects,
+                          functionBody,
+                          bundleUrl,
+                          bundleDigest,
+                          codeCachePath)) {
+    // If failed to compile functionBody on native side,
+    // fallback to callFunction.
+    callFunction(globalObjects, functionBody)
+  }
 
   return result
 }
@@ -140,3 +152,49 @@ function callFunction (globalObjects, body) {
   const result = new Function(...globalKeys)
   return result(...globalValues)
 }
+
+/**
+ * Call a new function generated on the V8 native side.
+ * @param  {object} globalObjects
+ * @param  {string} code
+ * @param  {string} url
+ * @param  {string} digest
+ * @param  {string} path
+ * @return {boolean} return true if no error occurred.
+ */
+function callFunctionNative (globalObjects, body, url, digest, path) {
+  if (typeof compileAndRunBundle !== 'function') {
+    return false
+  }
+
+  let fn = void 0
+  let isNativeCompileOk = false
+  let script = '(function ('
+  const globalKeys = []
+  const globalValues = []
+  for (const key in globalObjects) {
+    globalKeys.push(key)
+    globalValues.push(globalObjects[key])
+  }
+  for (let i = 0; i < globalKeys.length - 1; ++i) {
+    script += globalKeys[i]
+    script += ','
+  }
+  script += globalKeys[globalKeys.length - 1]
+  script += ') {'
+  script += body
+  script += '} )'
+
+  try {
+    fn = compileAndRunBundle(script, url, digest, path)
+    if (fn && typeof fn === 'function') {
+      fn(...globalValues)
+      isNativeCompileOk = true
+    }
+  }
+  catch (e) {
+    console.error(e)
+  }
+
+  return isNativeCompileOk
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b18fb5b6/html5/frameworks/legacy/static/create.js
----------------------------------------------------------------------
diff --git a/html5/frameworks/legacy/static/create.js b/html5/frameworks/legacy/static/create.js
index b81c9d3..3bf7a98 100644
--- a/html5/frameworks/legacy/static/create.js
+++ b/html5/frameworks/legacy/static/create.js
@@ -24,7 +24,13 @@ export function createInstance (id, code, options, data, info) {
   if (!instance) {
     instance = new App(id, options)
     instanceMap[id] = instance
-    result = initApp(instance, code, data, services)
+    result = initApp(instance,
+                     code,
+                     data,
+                     services,
+                     options.bundleUrl,
+                     options.bundleDigest,
+                     options.codeCachePath)
   }
   else {
     result = new Error(`invalid instance id "${id}"`)


[10/30] incubator-weex git commit: * [android] make the app playground to use v8 code cache.

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/error.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/error.js b/android/playground/app/src/main/assets/error.js
new file mode 100644
index 0000000..114c859
--- /dev/null
+++ b/android/playground/app/src/main/assets/error.js
@@ -0,0 +1,2224 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f896450c2023a601771c46369fe5d72c"
+ * }
+ !*/
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(185)
+	var __weex_script__ = __webpack_require__(186)
+
+	__weex_define__('@weex-component/a62071d3ca8239528c69d72539119e08', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	})
+
+	__weex_bootstrap__('@weex-component/a62071d3ca8239528c69d72539119e08',undefined,undefined)
+
+/***/ },
+/* 1 */,
+/* 2 */,
+/* 3 */,
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(5);
+	__webpack_require__(9);
+	__webpack_require__(13);
+	__webpack_require__(17);
+	__webpack_require__(21);
+	__webpack_require__(25);
+	__webpack_require__(66);
+	__webpack_require__(70);
+	__webpack_require__(74);
+	__webpack_require__(78);
+	__webpack_require__(79);
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(6)
+	var __weex_style__ = __webpack_require__(7)
+	var __weex_script__ = __webpack_require__(8)
+
+	__weex_define__('@weex-component/wxc-button', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['btn', 'btn-' + (this.type), 'btn-sz-' + (this.size)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['btn-txt', 'btn-txt-' + (this.type), 'btn-txt-sz-' + (this.size)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 7 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    size: 'large',
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(10)
+	var __weex_style__ = __webpack_require__(11)
+	var __weex_script__ = __webpack_require__(12)
+
+	__weex_define__('@weex-component/wxc-hn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['h' + (this.level)]},
+	  "style": {
+	    "justifyContent": "center"
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['txt-h' + (this.level)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 11 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "h1": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h2": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h3": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "txt-h1": {
+	    "fontSize": 70
+	  },
+	  "txt-h2": {
+	    "fontSize": 52
+	  },
+	  "txt-h3": {
+	    "fontSize": 42
+	  }
+	}
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    level: 1,
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(14)
+	var __weex_style__ = __webpack_require__(15)
+	var __weex_script__ = __webpack_require__(16)
+
+	__weex_define__('@weex-component/wxc-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "item"
+	  ],
+	  "events": {
+	    "touchstart": "touchstart",
+	    "touchend": "touchend"
+	  },
+	  "style": {
+	    "backgroundColor": function () {return this.bgColor}
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd"
+	  }
+	}
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    bgColor: '#ffffff'
+	  }},
+	  methods: {
+	    touchstart: function touchstart() {},
+	    touchend: function touchend() {}
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(18)
+	var __weex_style__ = __webpack_require__(19)
+	var __weex_script__ = __webpack_require__(20)
+
+	__weex_define__('@weex-component/wxc-panel', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['panel', 'panel-' + (this.type)]},
+	  "style": {
+	    "borderWidth": function () {return this.border}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['panel-header', 'panel-header-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingHead},
+	        "paddingBottom": function () {return this.paddingHead},
+	        "paddingLeft": function () {return this.paddingHead*1.5},
+	        "paddingRight": function () {return this.paddingHead*1.5}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": function () {return ['panel-body', 'panel-body-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingBody},
+	        "paddingBottom": function () {return this.paddingBody},
+	        "paddingLeft": function () {return this.paddingBody*1.5},
+	        "paddingRight": function () {return this.paddingBody*1.5}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 19 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    title: '',
+	    paddingBody: 20,
+	    paddingHead: 20,
+	    dataClass: '',
+	    border: 0
+	  }},
+	  ready: function ready() {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(22)
+	var __weex_style__ = __webpack_require__(23)
+	var __weex_script__ = __webpack_require__(24)
+
+	__weex_define__('@weex-component/wxc-tip', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['tip', 'tip-' + (this.type)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['tip-txt', 'tip-txt-' + (this.type)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+/* 24 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'success',
+	    value: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(26)
+	var __weex_style__ = __webpack_require__(27)
+	var __weex_script__ = __webpack_require__(28)
+
+	__weex_define__('@weex-component/wxc-countdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "overflow": "hidden",
+	    "flexDirection": "row"
+	  },
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden"
+	  }
+	}
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var _assign = __webpack_require__(29);
+
+	var _assign2 = _interopRequireDefault(_assign);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	    data: function () {return {
+	        now: 0,
+	        remain: 0,
+	        time: {
+	            elapse: 0,
+	            D: '0',
+	            DD: '0',
+	            h: '0',
+	            hh: '00',
+	            H: '0',
+	            HH: '0',
+	            m: '0',
+	            mm: '00',
+	            M: '0',
+	            MM: '0',
+	            s: '0',
+	            ss: '00',
+	            S: '0',
+	            SS: '0'
+	        },
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.remain <= 0) {
+	            return;
+	        }
+
+	        this.now = Date.now();
+	        this.nextTick();
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            if (this.outofview) {
+	                setTimeout(this.nextTick.bind(this), 1000);
+	            } else {
+	                this.time.elapse = parseInt((Date.now() - this.now) / 1000);
+
+	                if (this.calc()) {
+	                    this.$emit('tick', (0, _assign2.default)({}, this.time));
+	                    setTimeout(this.nextTick.bind(this), 1000);
+	                } else {
+	                    this.$emit('alarm', (0, _assign2.default)({}, this.time));
+	                }
+	                this._app.updateActions();
+	            }
+	        },
+	        format: function format(str) {
+	            if (str.length >= 2) {
+	                return str;
+	            } else {
+	                return '0' + str;
+	            }
+	        },
+	        calc: function calc() {
+	            var remain = this.remain - this.time.elapse;
+	            if (remain < 0) {
+	                remain = 0;
+	            }
+	            this.time.D = String(parseInt(remain / 86400));
+	            this.time.DD = this.format(this.time.D);
+	            this.time.h = String(parseInt((remain - parseInt(this.time.D) * 86400) / 3600));
+	            this.time.hh = this.format(this.time.h);
+	            this.time.H = String(parseInt(remain / 3600));
+	            this.time.HH = this.format(this.time.H);
+	            this.time.m = String(parseInt((remain - parseInt(this.time.H) * 3600) / 60));
+	            this.time.mm = this.format(this.time.m);
+	            this.time.M = String(parseInt(remain / 60));
+	            this.time.MM = this.format(this.time.M);
+	            this.time.s = String(remain - parseInt(this.time.M) * 60);
+	            this.time.ss = this.format(this.time.s);
+	            this.time.S = String(remain);
+	            this.time.SS = this.format(this.time.S);
+
+	            return remain > 0;
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(30), __esModule: true };
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(31);
+	module.exports = __webpack_require__(34).Object.assign;
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.3.1 Object.assign(target, source)
+	var $export = __webpack_require__(32);
+
+	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(47)});
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global    = __webpack_require__(33)
+	  , core      = __webpack_require__(34)
+	  , ctx       = __webpack_require__(35)
+	  , hide      = __webpack_require__(37)
+	  , PROTOTYPE = 'prototype';
+
+	var $export = function(type, name, source){
+	  var IS_FORCED = type & $export.F
+	    , IS_GLOBAL = type & $export.G
+	    , IS_STATIC = type & $export.S
+	    , IS_PROTO  = type & $export.P
+	    , IS_BIND   = type & $export.B
+	    , IS_WRAP   = type & $export.W
+	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+	    , expProto  = exports[PROTOTYPE]
+	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+	    , key, own, out;
+	  if(IS_GLOBAL)source = name;
+	  for(key in source){
+	    // contains in native
+	    own = !IS_FORCED && target && target[key] !== undefined;
+	    if(own && key in exports)continue;
+	    // export native or passed
+	    out = own ? target[key] : source[key];
+	    // prevent global pollution for namespaces
+	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+	    // bind timers to global for call from export context
+	    : IS_BIND && own ? ctx(out, global)
+	    // wrap global constructors for prevent change them in library
+	    : IS_WRAP && target[key] == out ? (function(C){
+	      var F = function(a, b, c){
+	        if(this instanceof C){
+	          switch(arguments.length){
+	            case 0: return new C;
+	            case 1: return new C(a);
+	            case 2: return new C(a, b);
+	          } return new C(a, b, c);
+	        } return C.apply(this, arguments);
+	      };
+	      F[PROTOTYPE] = C[PROTOTYPE];
+	      return F;
+	    // make static versions for prototype methods
+	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+	    if(IS_PROTO){
+	      (exports.virtual || (exports.virtual = {}))[key] = out;
+	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+	    }
+	  }
+	};
+	// type bitmap
+	$export.F = 1;   // forced
+	$export.G = 2;   // global
+	$export.S = 4;   // static
+	$export.P = 8;   // proto
+	$export.B = 16;  // bind
+	$export.W = 32;  // wrap
+	$export.U = 64;  // safe
+	$export.R = 128; // real proto method for `library` 
+	module.exports = $export;
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+	var global = module.exports = typeof window != 'undefined' && window.Math == Math
+	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// optional / simple context binding
+	var aFunction = __webpack_require__(36);
+	module.exports = function(fn, that, length){
+	  aFunction(fn);
+	  if(that === undefined)return fn;
+	  switch(length){
+	    case 1: return function(a){
+	      return fn.call(that, a);
+	    };
+	    case 2: return function(a, b){
+	      return fn.call(that, a, b);
+	    };
+	    case 3: return function(a, b, c){
+	      return fn.call(that, a, b, c);
+	    };
+	  }
+	  return function(/* ...args */){
+	    return fn.apply(that, arguments);
+	  };
+	};
+
+/***/ },
+/* 36 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+	  return it;
+	};
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP         = __webpack_require__(38)
+	  , createDesc = __webpack_require__(46);
+	module.exports = __webpack_require__(42) ? function(object, key, value){
+	  return dP.f(object, key, createDesc(1, value));
+	} : function(object, key, value){
+	  object[key] = value;
+	  return object;
+	};
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject       = __webpack_require__(39)
+	  , IE8_DOM_DEFINE = __webpack_require__(41)
+	  , toPrimitive    = __webpack_require__(45)
+	  , dP             = Object.defineProperty;
+
+	exports.f = __webpack_require__(42) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+	  anObject(O);
+	  P = toPrimitive(P, true);
+	  anObject(Attributes);
+	  if(IE8_DOM_DEFINE)try {
+	    return dP(O, P, Attributes);
+	  } catch(e){ /* empty */ }
+	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+	  if('value' in Attributes)O[P] = Attributes.value;
+	  return O;
+	};
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40);
+	module.exports = function(it){
+	  if(!isObject(it))throw TypeError(it + ' is not an object!');
+	  return it;
+	};
+
+/***/ },
+/* 40 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  return typeof it === 'object' ? it !== null : typeof it === 'function';
+	};
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = !__webpack_require__(42) && !__webpack_require__(43)(function(){
+	  return Object.defineProperty(__webpack_require__(44)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Thank's IE8 for his funny defineProperty
+	module.exports = !__webpack_require__(43)(function(){
+	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 43 */
+/***/ function(module, exports) {
+
+	module.exports = function(exec){
+	  try {
+	    return !!exec();
+	  } catch(e){
+	    return true;
+	  }
+	};
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40)
+	  , document = __webpack_require__(33).document
+	  // in old IE typeof document.createElement is 'object'
+	  , is = isObject(document) && isObject(document.createElement);
+	module.exports = function(it){
+	  return is ? document.createElement(it) : {};
+	};
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.1 ToPrimitive(input [, PreferredType])
+	var isObject = __webpack_require__(40);
+	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+	// and the second argument - flag - preferred type is a string
+	module.exports = function(it, S){
+	  if(!isObject(it))return it;
+	  var fn, val;
+	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  throw TypeError("Can't convert object to primitive value");
+	};
+
+/***/ },
+/* 46 */
+/***/ function(module, exports) {
+
+	module.exports = function(bitmap, value){
+	  return {
+	    enumerable  : !(bitmap & 1),
+	    configurable: !(bitmap & 2),
+	    writable    : !(bitmap & 4),
+	    value       : value
+	  };
+	};
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	// 19.1.2.1 Object.assign(target, source, ...)
+	var getKeys  = __webpack_require__(48)
+	  , gOPS     = __webpack_require__(63)
+	  , pIE      = __webpack_require__(64)
+	  , toObject = __webpack_require__(65)
+	  , IObject  = __webpack_require__(52)
+	  , $assign  = Object.assign;
+
+	// should work with symbols and should have deterministic property order (V8 bug)
+	module.exports = !$assign || __webpack_require__(43)(function(){
+	  var A = {}
+	    , B = {}
+	    , S = Symbol()
+	    , K = 'abcdefghijklmnopqrst';
+	  A[S] = 7;
+	  K.split('').forEach(function(k){ B[k] = k; });
+	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+	  var T     = toObject(target)
+	    , aLen  = arguments.length
+	    , index = 1
+	    , getSymbols = gOPS.f
+	    , isEnum     = pIE.f;
+	  while(aLen > index){
+	    var S      = IObject(arguments[index++])
+	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+	      , length = keys.length
+	      , j      = 0
+	      , key;
+	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+	  } return T;
+	} : $assign;
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+	var $keys       = __webpack_require__(49)
+	  , enumBugKeys = __webpack_require__(62);
+
+	module.exports = Object.keys || function keys(O){
+	  return $keys(O, enumBugKeys);
+	};
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var has          = __webpack_require__(50)
+	  , toIObject    = __webpack_require__(51)
+	  , arrayIndexOf = __webpack_require__(55)(false)
+	  , IE_PROTO     = __webpack_require__(59)('IE_PROTO');
+
+	module.exports = function(object, names){
+	  var O      = toIObject(object)
+	    , i      = 0
+	    , result = []
+	    , key;
+	  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+	  // Don't enum bug & hidden keys
+	  while(names.length > i)if(has(O, key = names[i++])){
+	    ~arrayIndexOf(result, key) || result.push(key);
+	  }
+	  return result;
+	};
+
+/***/ },
+/* 50 */
+/***/ function(module, exports) {
+
+	var hasOwnProperty = {}.hasOwnProperty;
+	module.exports = function(it, key){
+	  return hasOwnProperty.call(it, key);
+	};
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// to indexed object, toObject with fallback for non-array-like ES3 strings
+	var IObject = __webpack_require__(52)
+	  , defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return IObject(defined(it));
+	};
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// fallback for non-array-like ES3 and non-enumerable old V8 strings
+	var cof = __webpack_require__(53);
+	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+	  return cof(it) == 'String' ? it.split('') : Object(it);
+	};
+
+/***/ },
+/* 53 */
+/***/ function(module, exports) {
+
+	var toString = {}.toString;
+
+	module.exports = function(it){
+	  return toString.call(it).slice(8, -1);
+	};
+
+/***/ },
+/* 54 */
+/***/ function(module, exports) {
+
+	// 7.2.1 RequireObjectCoercible(argument)
+	module.exports = function(it){
+	  if(it == undefined)throw TypeError("Can't call method on  " + it);
+	  return it;
+	};
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// false -> Array#indexOf
+	// true  -> Array#includes
+	var toIObject = __webpack_require__(51)
+	  , toLength  = __webpack_require__(56)
+	  , toIndex   = __webpack_require__(58);
+	module.exports = function(IS_INCLUDES){
+	  return function($this, el, fromIndex){
+	    var O      = toIObject($this)
+	      , length = toLength(O.length)
+	      , index  = toIndex(fromIndex, length)
+	      , value;
+	    // Array#includes uses SameValueZero equality algorithm
+	    if(IS_INCLUDES && el != el)while(length > index){
+	      value = O[index++];
+	      if(value != value)return true;
+	    // Array#toIndex ignores holes, Array#includes - not
+	    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+	      if(O[index] === el)return IS_INCLUDES || index || 0;
+	    } return !IS_INCLUDES && -1;
+	  };
+	};
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.15 ToLength
+	var toInteger = __webpack_require__(57)
+	  , min       = Math.min;
+	module.exports = function(it){
+	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+	};
+
+/***/ },
+/* 57 */
+/***/ function(module, exports) {
+
+	// 7.1.4 ToInteger
+	var ceil  = Math.ceil
+	  , floor = Math.floor;
+	module.exports = function(it){
+	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+	};
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(57)
+	  , max       = Math.max
+	  , min       = Math.min;
+	module.exports = function(index, length){
+	  index = toInteger(index);
+	  return index < 0 ? max(index + length, 0) : min(index, length);
+	};
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var shared = __webpack_require__(60)('keys')
+	  , uid    = __webpack_require__(61);
+	module.exports = function(key){
+	  return shared[key] || (shared[key] = uid(key));
+	};
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global = __webpack_require__(33)
+	  , SHARED = '__core-js_shared__'
+	  , store  = global[SHARED] || (global[SHARED] = {});
+	module.exports = function(key){
+	  return store[key] || (store[key] = {});
+	};
+
+/***/ },
+/* 61 */
+/***/ function(module, exports) {
+
+	var id = 0
+	  , px = Math.random();
+	module.exports = function(key){
+	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+	};
+
+/***/ },
+/* 62 */
+/***/ function(module, exports) {
+
+	// IE 8- don't enum bug keys
+	module.exports = (
+	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+	).split(',');
+
+/***/ },
+/* 63 */
+/***/ function(module, exports) {
+
+	exports.f = Object.getOwnPropertySymbols;
+
+/***/ },
+/* 64 */
+/***/ function(module, exports) {
+
+	exports.f = {}.propertyIsEnumerable;
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.13 ToObject(argument)
+	var defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return Object(defined(it));
+	};
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(67)
+	var __weex_style__ = __webpack_require__(68)
+	var __weex_script__ = __webpack_require__(69)
+
+	__weex_define__('@weex-component/wxc-marquee', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 67 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrap"
+	  ],
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "id": "anim",
+	      "classList": [
+	        "anim"
+	      ],
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 68 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden",
+	    "position": "relative"
+	  },
+	  "anim": {
+	    "flexDirection": "column",
+	    "position": "absolute",
+	    "transform": "translateY(0) translateZ(0)"
+	  }
+	}
+
+/***/ },
+/* 69 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	    data: function () {return {
+	        step: 0,
+	        count: 0,
+	        index: 1,
+	        duration: 0,
+	        interval: 0,
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.interval > 0 && this.step > 0 && this.duration > 0) {
+	            this.nextTick();
+	        }
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            var self = this;
+	            if (this.outofview) {
+	                setTimeout(self.nextTick.bind(self), self.interval);
+	            } else {
+	                setTimeout(function () {
+	                    self.animation(self.nextTick.bind(self));
+	                }, self.interval);
+	            }
+	        },
+	        animation: function animation(cb) {
+	            var self = this;
+	            var offset = -self.step * self.index;
+	            var $animation = __weex_require__('@weex-module/animation');
+	            $animation.transition(this.$el('anim'), {
+	                styles: {
+	                    transform: 'translateY(' + String(offset) + 'px) translateZ(0)'
+	                },
+	                timingFunction: 'ease',
+	                duration: self.duration
+	            }, function () {
+	                self.index = (self.index + 1) % self.count;
+	                self.$emit('change', {
+	                    index: self.index,
+	                    count: self.count
+	                });
+	                cb && cb();
+	            });
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(71)
+	var __weex_style__ = __webpack_require__(72)
+	var __weex_script__ = __webpack_require__(73)
+
+	__weex_define__('@weex-component/wxc-navbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 71 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "height": function () {return this.height},
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "attr": {
+	    "dataRole": function () {return this.dataRole}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": [
+	        "right-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.rightItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "value": function () {return this.rightItemTitle}
+	      },
+	      "shown": function () {return !this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "right-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "src": function () {return this.rightItemSrc}
+	      },
+	      "shown": function () {return this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "left-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.leftItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "value": function () {return this.leftItemTitle}
+	      },
+	      "shown": function () {return !this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "left-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "src": function () {return this.leftItemSrc}
+	      },
+	      "shown": function () {return this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "center-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "center",
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 72 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "width": 750
+	  },
+	  "right-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "right": 32,
+	    "textAlign": "right",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "left-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "left": 32,
+	    "textAlign": "left",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "center-text": {
+	    "position": "absolute",
+	    "bottom": 25,
+	    "left": 172,
+	    "right": 172,
+	    "textAlign": "center",
+	    "fontSize": 36,
+	    "fontWeight": "bold"
+	  },
+	  "left-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "left": 28,
+	    "width": 50,
+	    "height": 50
+	  },
+	  "right-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "right": 28,
+	    "width": 50,
+	    "height": 50
+	  }
+	}
+
+/***/ },
+/* 73 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+
+	    backgroundColor: 'black',
+
+	    height: 88,
+
+	    title: "",
+
+	    titleColor: 'black',
+
+	    rightItemSrc: '',
+
+	    rightItemTitle: '',
+
+	    rightItemColor: 'black',
+
+	    leftItemSrc: '',
+
+	    leftItemTitle: '',
+
+	    leftItemColor: 'black'
+	  }},
+	  methods: {
+	    onclickrightitem: function onclickrightitem(e) {
+	      this.$dispatch('naviBar.rightItem.click', {});
+	    },
+	    onclickleftitem: function onclickleftitem(e) {
+	      this.$dispatch('naviBar.leftItem.click', {});
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(70)
+	var __weex_template__ = __webpack_require__(75)
+	var __weex_style__ = __webpack_require__(76)
+	var __weex_script__ = __webpack_require__(77)
+
+	__weex_define__('@weex-component/wxc-navpage', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 75 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "wxc-navbar",
+	      "attr": {
+	        "dataRole": function () {return this.dataRole},
+	        "height": function () {return this.height},
+	        "backgroundColor": function () {return this.backgroundColor},
+	        "title": function () {return this.title},
+	        "titleColor": function () {return this.titleColor},
+	        "leftItemSrc": function () {return this.leftItemSrc},
+	        "leftItemTitle": function () {return this.leftItemTitle},
+	        "leftItemColor": function () {return this.leftItemColor},
+	        "rightItemSrc": function () {return this.rightItemSrc},
+	        "rightItemTitle": function () {return this.rightItemTitle},
+	        "rightItemColor": function () {return this.rightItemColor}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "wrapper"
+	      ],
+	      "style": {
+	        "marginTop": function () {return this.height}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 76 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "width": 750
+	  }
+	}
+
+/***/ },
+/* 77 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+	    backgroundColor: 'black',
+	    height: 88,
+	    title: "",
+	    titleColor: 'black',
+	    rightItemSrc: '',
+	    rightItemTitle: '',
+	    rightItemColor: 'black',
+	    leftItemSrc: '',
+	    leftItemTitle: '',
+	    leftItemColor: 'black'
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 78 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(79)
+	var __weex_template__ = __webpack_require__(83)
+	var __weex_style__ = __webpack_require__(84)
+	var __weex_script__ = __webpack_require__(85)
+
+	__weex_define__('@weex-component/wxc-tabbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(80)
+	var __weex_style__ = __webpack_require__(81)
+	var __weex_script__ = __webpack_require__(82)
+
+	__weex_define__('@weex-component/wxc-tabitem', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 80 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "events": {
+	    "click": "onclickitem"
+	  },
+	  "children": [
+	    {
+	      "type": "image",
+	      "classList": [
+	        "top-line"
+	      ],
+	      "attr": {
+	        "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "tab-icon"
+	      ],
+	      "attr": {
+	        "src": function () {return this.icon}
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "tab-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 81 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flex": 1,
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "height": 88
+	  },
+	  "top-line": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 2
+	  },
+	  "tab-icon": {
+	    "marginTop": 5,
+	    "width": 40,
+	    "height": 40
+	  },
+	  "tab-text": {
+	    "marginTop": 5,
+	    "textAlign": "center",
+	    "fontSize": 20
+	  }
+	}
+
+/***/ },
+/* 82 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    index: 0,
+	    title: '',
+	    titleColor: '#000000',
+	    icon: '',
+	    backgroundColor: '#ffffff'
+	  }},
+	  methods: {
+	    onclickitem: function onclickitem(e) {
+	      var vm = this;
+	      var params = {
+	        index: vm.index
+	      };
+	      vm.$dispatch('tabItem.onClick', params);
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 83 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "embed",
+	      "classList": [
+	        "content"
+	      ],
+	      "style": {
+	        "visibility": function () {return this.visibility}
+	      },
+	      "repeat": function () {return this.tabItems},
+	      "attr": {
+	        "src": function () {return this.src},
+	        "type": "weex"
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "tabbar"
+	      ],
+	      "append": "tree",
+	      "children": [
+	        {
+	          "type": "wxc-tabitem",
+	          "repeat": function () {return this.tabItems},
+	          "attr": {
+	            "index": function () {return this.index},
+	            "icon": function () {return this.icon},
+	            "title": function () {return this.title},
+	            "titleColor": function () {return this.titleColor}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 84 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "width": 750,
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "content": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "marginTop": 0,
+	    "marginBottom": 88
+	  },
+	  "tabbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 88
+	  }
+	}
+
+/***/ },
+/* 85 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    tabItems: [],
+	    selectedIndex: 0,
+	    selectedColor: '#ff0000',
+	    unselectedColor: '#000000'
+	  }},
+	  created: function created() {
+	    this.selected(this.selectedIndex);
+
+	    this.$on('tabItem.onClick', function (e) {
+	      var detail = e.detail;
+	      this.selectedIndex = detail.index;
+	      this.selected(detail.index);
+
+	      var params = {
+	        index: detail.index
+	      };
+	      this.$dispatch('tabBar.onClick', params);
+	    });
+	  },
+	  methods: {
+	    selected: function selected(index) {
+	      for (var i = 0; i < this.tabItems.length; i++) {
+	        var tabItem = this.tabItems[i];
+	        if (i == index) {
+	          tabItem.icon = tabItem.selectedImage;
+	          tabItem.titleColor = this.selectedColor;
+	          tabItem.visibility = 'visible';
+	        } else {
+	          tabItem.icon = tabItem.image;
+	          tabItem.titleColor = this.unselectedColor;
+	          tabItem.visibility = 'hidden';
+	        }
+	      }
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 86 */,
+/* 87 */,
+/* 88 */,
+/* 89 */,
+/* 90 */,
+/* 91 */,
+/* 92 */,
+/* 93 */,
+/* 94 */,
+/* 95 */,
+/* 96 */,
+/* 97 */,
+/* 98 */,
+/* 99 */,
+/* 100 */,
+/* 101 */,
+/* 102 */,
+/* 103 */,
+/* 104 */,
+/* 105 */,
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */,
+/* 116 */,
+/* 117 */,
+/* 118 */,
+/* 119 */,
+/* 120 */,
+/* 121 */,
+/* 122 */,
+/* 123 */,
+/* 124 */,
+/* 125 */,
+/* 126 */,
+/* 127 */,
+/* 128 */,
+/* 129 */,
+/* 130 */,
+/* 131 */,
+/* 132 */,
+/* 133 */,
+/* 134 */,
+/* 135 */,
+/* 136 */,
+/* 137 */,
+/* 138 */,
+/* 139 */,
+/* 140 */,
+/* 141 */,
+/* 142 */,
+/* 143 */,
+/* 144 */,
+/* 145 */,
+/* 146 */,
+/* 147 */,
+/* 148 */,
+/* 149 */,
+/* 150 */,
+/* 151 */,
+/* 152 */,
+/* 153 */,
+/* 154 */,
+/* 155 */,
+/* 156 */,
+/* 157 */,
+/* 158 */,
+/* 159 */,
+/* 160 */,
+/* 161 */,
+/* 162 */,
+/* 163 */,
+/* 164 */,
+/* 165 */,
+/* 166 */,
+/* 167 */,
+/* 168 */,
+/* 169 */,
+/* 170 */,
+/* 171 */,
+/* 172 */,
+/* 173 */,
+/* 174 */,
+/* 175 */,
+/* 176 */,
+/* 177 */,
+/* 178 */,
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "children": [
+	    {
+	      "type": "image",
+	      "attr": {
+	        "src": "http://gw.alicdn.com/mt/TB1GJDuMVXXXXbMaXXXXXXXXXXX-200-200.png"
+	      },
+	      "style": {
+	        "width": 200,
+	        "height": 200,
+	        "margin": 30
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 40
+	      },
+	      "attr": {
+	        "value": "\u4f60\u8bbf\u95ee\u7684\u8d44\u6e90\u4e0d\u5b58\u5728"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 30,
+	        "margin": 30,
+	        "color": "#999999"
+	      },
+	      "attr": {
+	        "value": "\u53bb\u770b\u770b\u5176\u4ed6\u9875\u9762\u5427"
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "borderWidth": 3,
+	        "borderRadius": 8,
+	        "borderColor": "#A9A9A9"
+	      },
+	      "events": {
+	        "click": "go_home"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 45,
+	            "marginTop": 16,
+	            "marginBottom": 16,
+	            "marginLeft": 45,
+	            "marginRight": 45
+	          },
+	          "attr": {
+	            "value": "\u53bb\u9996\u9875"
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 186 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){"use strict";
+
+	__webpack_require__(4);
+	module.exports = {
+	    data: function () {return {}},
+	    methods: {
+	        go_home: function go_home(event) {
+	            this.$openURL("https://www.taobao.com");
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/geolocation.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/geolocation.js b/android/playground/app/src/main/assets/geolocation.js
new file mode 100644
index 0000000..5145191
--- /dev/null
+++ b/android/playground/app/src/main/assets/geolocation.js
@@ -0,0 +1,191 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "db8a01416580a8c1e63f9c1508f4f268"
+ * }
+ !*/
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(187)
+	var __weex_script__ = __webpack_require__(188)
+
+	__weex_define__('@weex-component/c1022e7ee9ce09ed1eadcf7bffe1b341', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	})
+
+	__weex_bootstrap__('@weex-component/c1022e7ee9ce09ed1eadcf7bffe1b341',undefined,undefined)
+
+/***/ },
+
+/***/ 34:
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+
+/***/ 187:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "children": [
+	    {
+	      "type": "div",
+	      "style": {
+	        "alignItems": "center"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 30,
+	            "color": "#000000"
+	          },
+	          "attr": {
+	            "value": function () {return this.location}
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 35,
+	            "color": "#FFA07A"
+	          },
+	          "attr": {
+	            "value": function () {return this.watchlocation}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 188:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){"use strict";
+
+	var _stringify = __webpack_require__(189);
+
+	var _stringify2 = _interopRequireDefault(_stringify);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	    data: function () {return {
+	        location: "\u7b49\u5f85\u5b9a\u4f4d\u6570\u636e",
+	        watchlocation: "watch location",
+	        i: 0
+	    }},
+	    created: function created() {
+	        var geolocation = __weex_require__('@weex-module/geolocation');
+	        geolocation.getCurrentPosition(function (result) {
+	            console.log("into--[getCurrentPosition success] result:" + (0, _stringify2.default)(result));
+	            this.location = (0, _stringify2.default)(result);
+	        }.bind(this), function (result) {
+	            console.log("into--[getCurrentPosition error] result:" + (0, _stringify2.default)(result));
+	            this.location = (0, _stringify2.default)(result);
+	        }.bind(this), { enableHighAcuracy: false, address: true });
+
+	        geolocation.watchPosition(function (result) {
+	            console.log("into--[watchPosition success] result:" + (0, _stringify2.default)(result));
+	            var str = this.watchlocation + '\n' + (0, _stringify2.default)(result);
+	            this.watchlocation = str;
+	            this.i += 1;
+
+	            if (this.i == 2) {
+	                geolocation.clearWatch(result.registerId);
+	                __weex_require__('@weex-module/modal').toast({
+	                    'message': "[clear watch] id:" + result.registerId,
+	                    'duration': 1
+	                });
+	            }
+	        }.bind(this), function (result) {
+	            console.log("into--[watchPosition success] result:" + (0, _stringify2.default)(result));
+	            this.watchlocation = (0, _stringify2.default)(result);
+	        }.bind(this), { enableHighAcuracy: false, address: true });
+	    },
+	    methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+
+/***/ 189:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(190), __esModule: true };
+
+/***/ },
+
+/***/ 190:
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/hello.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/hello.js b/android/playground/app/src/main/assets/hello.js
index f445dee..44f8cf3 100644
--- a/android/playground/app/src/main/assets/hello.js
+++ b/android/playground/app/src/main/assets/hello.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "86ed5dd60f58efe1a84b64e8c7eacb7a"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/hello_weex.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/hello_weex.js b/android/playground/app/src/main/assets/hello_weex.js
deleted file mode 100644
index fddcc12..0000000
--- a/android/playground/app/src/main/assets/hello_weex.js
+++ /dev/null
@@ -1,28 +0,0 @@
-define('@weex-component/037a188b382be8b4caa073b6cf436427', function(require, exports, module) {
-
-    ;
-
-    ;
-    module.exports.style = {}
-
-    ;
-    module.exports.template = {
-        "type": "div",
-        "children": [{
-            "type": "text",
-            "style": {
-                "fontSize": 100
-            },
-            "attr": {
-                "value": "Hello World."
-            }
-        }]
-    }
-
-    ;
-})
-
-// require module
-bootstrap('@weex-component/037a188b382be8b4caa073b6cf436427', {
-    "transformerVersion": "0.3.1"
-})
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/iconfont.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/iconfont.js b/android/playground/app/src/main/assets/iconfont.js
index 06176a5..14b0c16 100644
--- a/android/playground/app/src/main/assets/iconfont.js
+++ b/android/playground/app/src/main/assets/iconfont.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "6ee7e2ff19346198a8505e7e4911ff81"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/index.js b/android/playground/app/src/main/assets/index.js
index df12bd1..c750186 100644
--- a/android/playground/app/src/main/assets/index.js
+++ b/android/playground/app/src/main/assets/index.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e8ac3f0bfa40656cf157fd3a3564569b"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2064,14 +2071,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },
@@ -2958,7 +2965,7 @@
 	module.exports = {
 	  data: function () {return {
 	    root: 'examples',
-	    items: [{ name: 'hello', title: 'Hello World' }, { name: 'style/index', title: 'Common Style' }, { name: 'animation', title: 'Animation' }, { name: 'component/text-demo', title: 'Text' }, { name: 'component/image-demo', title: 'Image' }, { name: 'component/input-demo', title: 'Input' }, { name: 'component/scroller-demo', title: 'Scroller' }, { name: 'component/list/list-basic', title: 'List (Basic)' }, { name: 'component/list/list-demo', title: 'List (Advanced)' }, { name: 'component/slider/index', title: 'Slider' }, { name: 'component/a-demo', title: 'A' }, { name: 'component/video-demo', title: 'Video' }, { name: 'component/countdown-demo', title: 'Countdown' }, { name: 'component/marquee-demo', title: 'Marquee' }, { name: 'component/web-demo', title: 'Web' }, { name: 'component/navigator-demo', title: 'Navigator' }, { name: 'component/tabbar/tabbar-demo', title: 'Tabbar' }, { name: 'component/process-bar-demo', title: 'ProcessBar' }, { name: 'module/instance-api', title: 'In
 stance API' }, { name: 'module/modal', title: 'Modal' }, { name: 'module/stream-demo', title: 'Stream' }, { name: 'module/storage-demo', title: 'Storage' }, { name: 'module/picker-demo', title: 'Picker' }, { name: 'module/componentRect', title: 'componentRect' }, { name: 'module/clipboard', title: 'Clipboard' }, { name: 'showcase/new-fashion/index', title: 'Activity' }, { name: 'showcase/calculator', title: 'Calculator' }, { name: 'showcase/minesweeper', title: 'Minesweeper' }, { name: 'showcase/ui', title: 'UI Gallery' }, { name: 'showcase/dropdown/dropdown-demo', title: 'Dropdown' }]
+	    items: [{ name: 'hello', title: 'Hello World' }, { name: 'style/index', title: 'Common Style' }, { name: 'animation', title: 'Animation' }, { name: 'component/text-demo', title: 'Text' }, { name: 'component/image-demo', title: 'Image' }, { name: 'component/input-demo', title: 'Input' }, { name: 'component/scroller-demo', title: 'Scroller' }, { name: 'component/list/list-basic', title: 'List (Basic)' }, { name: 'component/list/list-demo', title: 'List (Advanced)' }, { name: 'component/slider/index', title: 'Slider' }, { name: 'component/slider-neighbor/index', title: 'Slider Neighbor' }, { name: 'component/a-demo', title: 'A' }, { name: 'component/video-demo', title: 'Video' }, { name: 'component/countdown-demo', title: 'Countdown' }, { name: 'component/marquee-demo', title: 'Marquee' }, { name: 'component/web-demo', title: 'Web' }, { name: 'component/navigator-demo', title: 'Navigator' }, { name: 'component/tabbar/tabbar-demo', title: 'Tabbar' }, { name: 'component/process-bar-
 demo', title: 'ProcessBar' }, { name: 'module/instance-api', title: 'Instance API' }, { name: 'module/modal', title: 'Modal' }, { name: 'module/stream-demo', title: 'Stream' }, { name: 'module/websocket-demo', title: 'WebSocket' }, { name: 'module/storage-demo', title: 'Storage' }, { name: 'module/picker-demo', title: 'Picker' }, { name: 'module/componentRect', title: 'componentRect' }, { name: 'module/clipboard', title: 'Clipboard' }, { name: 'showcase/new-fashion/index', title: 'Activity' }, { name: 'showcase/calculator', title: 'Calculator' }, { name: 'showcase/minesweeper', title: 'Minesweeper' }, { name: 'showcase/ui', title: 'UI Gallery' }, { name: 'showcase/dropdown/dropdown-demo', title: 'Dropdown' }]
 	  }}
 	};}
 	/* generated by weex-loader */

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/clipboard.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/clipboard.js b/android/playground/app/src/main/assets/module/clipboard.js
index 52eb12e..7902edb 100644
--- a/android/playground/app/src/main/assets/module/clipboard.js
+++ b/android/playground/app/src/main/assets/module/clipboard.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "ec884d99f54fb0db5203d061a7d1f15d"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2281,22 +2288,23 @@
 	    },
 
 	    doCopy: function doCopy() {
-	      textToCopy = "autoGenerateTextToCopy" + Math.random();
+	      var self = this;
+	      var textToCopy = "autoGenerateTextToCopy" + Math.random();
 
-	      var $clipboard = __weex_require__('@weex-module/clipboard');
-	      $clipboard.setString(textToCopy);
+	      var clipboard = __weex_require__('@weex-module/clipboard');
+	      clipboard.setString(textToCopy);
 
-	      this.textToCopy = textToCopy;
-	      this.tips = "copy done. Now system clipboard has string of '" + textToCopy + "', try PASTE button, or paste in another app.";
+	      self.textToCopy = textToCopy;
+	      self.tips = "copy done. Now system clipboard has string of '" + textToCopy + "', try PASTE button, or paste in another app.";
 	    },
 
 	    doPaste: function doPaste() {
-	      var $clipboard = __weex_require__('@weex-module/clipboard');
+	      var clipboard = __weex_require__('@weex-module/clipboard');
 	      var me = this;
-	      $clipboard.getString(function (ret) {
+	      clipboard.getString(function (ret) {
 	        console.log("paste result is " + (0, _stringify2.default)(ret));
 
-	        me.textFromPaste = ret.data;
+	        me.textFromPaste = (0, _stringify2.default)(ret);
 	        me.tips = "Paste done. Only support native(Android/iOS) NOW. according to security reason, paste in html5 is not supported.";
 	      });
 	    }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/componentRect.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/componentRect.js b/android/playground/app/src/main/assets/module/componentRect.js
index 10bb3ce..97d9b27 100644
--- a/android/playground/app/src/main/assets/module/componentRect.js
+++ b/android/playground/app/src/main/assets/module/componentRect.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "a1e931e3345935bf41b995459d49022f"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -45,9 +53,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(207)
-	var __weex_style__ = __webpack_require__(208)
-	var __weex_script__ = __webpack_require__(209)
+	__webpack_require__(207)
+	var __weex_template__ = __webpack_require__(211)
+	var __weex_style__ = __webpack_require__(212)
+	var __weex_script__ = __webpack_require__(213)
 
 	__weex_define__('@weex-component/3cccb00caad47f9888c7597d009c670e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,6 +76,100 @@
 /***/ },
 
 /***/ 207:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(208)
+	var __weex_style__ = __webpack_require__(209)
+	var __weex_script__ = __webpack_require__(210)
+
+	__weex_define__('@weex-component/multi-text', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+
+/***/ 208:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "flexDirection": "row"
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": [
+	        "text-style",
+	        "text-descript"
+	      ],
+	      "attr": {
+	        "value": function () {return this.descript}
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "text-style",
+	        "text-detail"
+	      ],
+	      "attr": {
+	        "value": function () {return this.detail}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 209:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "text-style": {
+	    "fontSize": 30,
+	    "marginTop": 15,
+	    "marginLeft": 15,
+	    "marginBottom": 15
+	  },
+	  "text-descript": {
+	    "fontWeight": "bold",
+	    "flex": 1
+	  },
+	  "text-detail": {
+	    "flex": 1
+	  }
+	}
+
+/***/ },
+
+/***/ 210:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    descript: '',
+	    detail: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+
+/***/ 211:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -335,7 +438,7 @@
 
 /***/ },
 
-/***/ 208:
+/***/ 212:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -412,7 +515,7 @@
 
 /***/ },
 
-/***/ 209:
+/***/ 213:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/instance-api.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/instance-api.js b/android/playground/app/src/main/assets/module/instance-api.js
index 94234d3..6a1b351 100644
--- a/android/playground/app/src/main/assets/module/instance-api.js
+++ b/android/playground/app/src/main/assets/module/instance-api.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "92849a2127e0fc72bb0d236b334d78c4"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,8 +52,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(210)
-	var __weex_script__ = __webpack_require__(211)
+	var __weex_template__ = __webpack_require__(214)
+	var __weex_script__ = __webpack_require__(215)
 
 	__weex_define__('@weex-component/2c1f438ffab50b73880065c54d5a1b0c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2163,7 +2170,11 @@
 /* 207 */,
 /* 208 */,
 /* 209 */,
-/* 210 */
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2188,7 +2199,7 @@
 	}
 
 /***/ },
-/* 211 */
+/* 215 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/modal.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/modal.js b/android/playground/app/src/main/assets/module/modal.js
index d541347..7cb0397 100644
--- a/android/playground/app/src/main/assets/module/modal.js
+++ b/android/playground/app/src/main/assets/module/modal.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f373f5cf79e050cd67c47c3f0f6ba1a9"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,9 +52,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(212)
-	var __weex_style__ = __webpack_require__(213)
-	var __weex_script__ = __webpack_require__(214)
+	var __weex_template__ = __webpack_require__(216)
+	var __weex_style__ = __webpack_require__(217)
+	var __weex_script__ = __webpack_require__(218)
 
 	__weex_define__('@weex-component/3e30f1e2562a57b329ab7ebd1387f07b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2154,7 +2161,11 @@
 /* 209 */,
 /* 210 */,
 /* 211 */,
-/* 212 */
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2228,13 +2239,13 @@
 	}
 
 /***/ },
-/* 213 */
+/* 217 */
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
-/* 214 */
+/* 218 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/picker-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/picker-demo.js b/android/playground/app/src/main/assets/module/picker-demo.js
index d463747..c51f891 100644
--- a/android/playground/app/src/main/assets/module/picker-demo.js
+++ b/android/playground/app/src/main/assets/module/picker-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "dccbcd3e89a6a624c7c37bfcaf8e0379"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,9 +52,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(215)
-	var __weex_style__ = __webpack_require__(216)
-	var __weex_script__ = __webpack_require__(217)
+	var __weex_template__ = __webpack_require__(219)
+	var __weex_style__ = __webpack_require__(220)
+	var __weex_script__ = __webpack_require__(221)
 
 	__weex_define__('@weex-component/713f21e067b638ad251dbcb7d5b37be5', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2157,7 +2164,11 @@
 /* 212 */,
 /* 213 */,
 /* 214 */,
-/* 215 */
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2268,7 +2279,7 @@
 	}
 
 /***/ },
-/* 216 */
+/* 220 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2280,7 +2291,7 @@
 	}
 
 /***/ },
-/* 217 */
+/* 221 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/storage-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/storage-demo.js b/android/playground/app/src/main/assets/module/storage-demo.js
index 3a8147e..01fe562 100644
--- a/android/playground/app/src/main/assets/module/storage-demo.js
+++ b/android/playground/app/src/main/assets/module/storage-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "30aadc9d6e61d74a5eb0b31e0f125301"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,8 +52,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(218)
-	var __weex_script__ = __webpack_require__(219)
+	var __weex_template__ = __webpack_require__(222)
+	var __weex_script__ = __webpack_require__(223)
 
 	__weex_define__('@weex-component/6f110d391fd7b90c9a19583f6ee1a7cf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2171,7 +2178,11 @@
 /* 215 */,
 /* 216 */,
 /* 217 */,
-/* 218 */
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2260,7 +2271,7 @@
 	}
 
 /***/ },
-/* 219 */
+/* 223 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d10f1ab0/android/playground/app/src/main/assets/module/stream-demo.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/module/stream-demo.js b/android/playground/app/src/main/assets/module/stream-demo.js
index 565bc42..76c462c 100644
--- a/android/playground/app/src/main/assets/module/stream-demo.js
+++ b/android/playground/app/src/main/assets/module/stream-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "19d6853f1e199ebf6e36833d7ce44948"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,8 +52,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(220)
-	var __weex_script__ = __webpack_require__(221)
+	var __weex_template__ = __webpack_require__(224)
+	var __weex_script__ = __webpack_require__(225)
 
 	__weex_define__('@weex-component/2c445dcf67fa0895d197edb5ffa2f439', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2173,7 +2180,11 @@
 /* 217 */,
 /* 218 */,
 /* 219 */,
-/* 220 */
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2290,7 +2301,7 @@
 	}
 
 /***/ },
-/* 221 */
+/* 225 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2359,8 +2370,8 @@
 	    stream.fetch({
 	      method: 'POST',
 	      url: POST_URL,
-	      type: 'json'
-	    }, function (ret) {
+	      type: 'json',
+	      body: (0, _stringify2.default)({ username: 'weex' }) }, function (ret) {
 	      if (!ret.ok) {
 	        me.postResult = "request failed";
 	      } else {


[21/30] incubator-weex git commit: * [android] update jsfm to 0.19.15 to uc v8

Posted by zs...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eb2eba80/android/sdk/assets/main.js
----------------------------------------------------------------------
diff --git a/android/sdk/assets/main.js b/android/sdk/assets/main.js
index 0373696..7ac45a2 100644
--- a/android/sdk/assets/main.js
+++ b/android/sdk/assets/main.js
@@ -1,7 +1,7 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.19.8, Build 2017-03-10 15:57."),this.getJSFMVersion=function(){return"0.19.8"};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()}(this,function(){"use strict";function e(e){return e&&e.__esModule?e.default:e}function t(e,t){return t={exports:{}},e(t,t.exports),t.exports}function n(){if(o(),"undefined"==typeof global.console||global.WXEnvironment&&"iOS"===global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&global.nativeLog.apply(global,a(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&global.nativeLog.apply(global,a(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&global.nativeLog.apply(global,a(
 e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&global.nativeLog.apply(global,a(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&global.nativeLog.apply(global,a(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,s=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:s},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],
 t=arguments.length;t--;)e[t]=arguments[t];i("error")&&console.__ori__.error.apply(console,e)}}}function r(){Ps={},global.console=Ms}function o(){Ns.forEach(function(e){var t=Ns.indexOf(e);Ps[e]={},Ns.forEach(function(n){var r=Ns.indexOf(n);r<=t&&(Ps[e][n]=!0)})})}function i(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return Ps[t]&&Ps[t][e]}function a(e){return e.map(function(e){var t=Object.prototype.toString.call(e);return e="[object object]"===t.toLowerCase()?JSON.stringify(e):String(e)})}function s(){if("undefined"==typeof setTimeout&&"function"==typeof Rs){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Rs(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function u(){global.setTimeout=$s,global.setTimeoutCallback=null}function c(){Object.freeze(Object),Object.freeze(Array),Object.freeze(Object.prototype),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype
 ),Object.freeze(Boolean.prototype),Object.freeze(Error.prototype),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function l(e,t){e&&(Fs[e]=t)}function f(e){return Fs[e]}function d(e){delete Fs[e]}function p(e){var t=Fs[e];return t&&t.taskCenter?t.taskCenter:null}function h(){return(Ls++).toString()}function v(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,_(t,r)):(t.children.forEach(function(e){e.parentNode=t}),y(e,t),t.docId=e.id,t.ownerDocument=e,_(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),m(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function m(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 y(e,t){t.role="body",t.depth
 =1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function _(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){_(t,e)})}function g(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function b(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function w(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 O(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 x(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 E(){this.nodeId=h(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function C(e){Bs=e}function k(e,t){if(t&&t.length){var n=function(t){Bs.call(this,e,t,!0)};n.prototype=Object.create(Bs.prototype),Object.defineProperty(n.prototype,"constructor",{configurable:!1,enumerable:!1,writable:!1,value:Bs}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=p(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Vs[e]=n}}function S(e,t,n){void 0===e&&(e=Us);var r=Vs[e];return r&&!n?new r(t):(t=t||{},this.nodeType=1,this.nodeId=h(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],void(this.pureChildren=[]))}function j(e,t){var n=f(e);n.nodeMap[t.nodeId]=t}function A(){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=zs.prototype,n=function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Js(e,[{module:"dom",method:n,args:t}],"-1")}};for(var r in e)n(r);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Js(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Js(e,[{module:t,method:n,args:r}])}}function I(e,t){N(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Hs.push({name:e,options:t}))}function T(e){Hs.some(function(t,n){if(t.name===e)return Hs.splice(n,1),!0})}function N(e){return P(e)>=0}fu
 nction P(e){return Hs.map(function(e){return e.name}).indexOf(e)}function M(e){var t,n=Gs.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function $(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Hs.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 R(e,t,n,r){var o=Xs[e];if(!o){o=M(t)||{},qs[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=$(e,i,Ws),Xs[e]=i,qs[o.framework].createInstance(e,t,n,r,i)}return new Error('invalid instance id "'+e+'"')}function D(e){Ks[e]=function(){for(var t=[],n=arguments.length;n--;)t[n
 ]=arguments[n];"registerComponents"===e&&F(t[0]);for(var r in qs){var o=qs[r];o&&o[e]&&o[e].apply(o,t)}}}function F(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&k(e.type,e.methods)})}function L(e){Ks[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Xs[r];if(o&&qs[o.framework]){var i=(a=qs[o.framework])[e].apply(a,t);return"refreshInstance"===e?Hs.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:o,runtime:Ws})}):"destroyInstance"===e&&(Hs.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Ws})}),delete Xs[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function B(e,t){Ks[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Xs[r];return o&&qs[o.framework]?(i=qs[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function V(e){Ws=e||{},qs=Ws.frameworks||{},A();for(var t in qs){var n=qs[t];n.init(e)}return["registerComponents","registerModules","
 registerMethods"].forEach(D),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(L),B("receiveTasks","callJS"),Ks}function U(e){this.nodeType=8,this.nodeId=h(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function J(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] invalid parameter, handler must be a function")}function z(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function q(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=H(e,t[r],n);if(o===-1)return o}}}function W(e,t){return"dom"===e&&Qs[t]&&"function"==typeof global[Qs[t]]}function H(e,t,n){var r=t.module,o=t.method,i=t.args;return W(r,o)?global[Qs[o]].apply(global,[e].concat(i,["-
 1"])):n(e,[t],"-1")}function G(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,l(e,this),this.nodeMap={};var r=G.Listener||J;this.listener=new r(e,n||q(e,G.handler)),this.taskCenter=new zs(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:G.handler),this.createDocumentElement()}function X(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)}function K(){c(),Object.freeze(Zs.Element),Object.freeze(Zs.Comment),Object.freeze(Zs.Listener),Object.freeze(Zs.Document.prototype),Object.freeze(Zs.Element.prototype),Object.freeze(Zs.Comment.prototype),Object.freeze(Zs.Listener.prototype)}function Q(e){tu.Document=e.Document,tu.Element=e.Element,tu.Comment=e.Comment,tu.sendTasks=e.sendTasks}function Z(e){}function Y(e){}function ee(e){}function te(e,t,n){}function ne(e,t,n,r,o){var i=new tu.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCal
 lback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},nu[e]=i;var u=Object.assign({Document:tu.Document,Element:tu.Element,Comment:tu.Comment,sendTasks:tu.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);c.push(t);var d=new(Function.prototype.bind.apply(Function,[null].concat(c)));return d.apply(void 0,l)}function re(e,t){}function oe(e){delete nu[e]}function ie(e){return nu[e].body.toJSON()}function ae(e,t){var n={fireEvent:function(e,t,n,r,o){var i=nu[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){var o=nu[e];return o.handleCallback(t,n,r)}},r=nu[e];if(r&&Array.isArray(t)){var o=[];return t.forEach(function(t){var r=n[t.method],i=[].concat(t.args);"function"==typeof r&&(i.unshift(e),o.push(r.apply(void 0,i)))}),o}}function se(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function ue(e){var t=this._ids[e];if(t)return t.el}function ce(e
 ){var t=this._ids[e];if(t)return t.vm}function le(e){var t=this._app,n=t.differ;return n.then(function(){e()})}function fe(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){var r=this._app.requireModule("dom");r.scrollToElement(n.ref,{offset:t})}}function de(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){var i=this._app.requireModule("animation");i.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 pe(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 he(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead");var n=this._app.requireModule("st
 ream");n.sendHttp(e,t)}function ve(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead");var t=this._app.requireModule("event");t.openURL(e)}function me(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead");var t=this._app.requireModule("pageInfo");t.setTitle(e)}function ye(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 ge(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:
 !0,configurable:!0})}function be(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function we(e,t){return Au.call(e,t)}function Oe(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 xe(e){return null!==e&&"object"==typeof e}function Ee(e){return Iu.call(e)===Tu}function Ce(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function ke(){return"object"==typeof nativeSet?nativeSet.create():new Ys}function Se(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function je(e){var t=e.replace(Pu,"").replace(Mu,"");return t}function Ae(e){return e.replace(Ru,"")}function Ie(){this.id=Vu++,this.subs=[]}function Te(e){Ie.target&&Uu.push(Ie.target),Ie.target=e}function Ne(){Ie.target=Uu.pop()}function Pe(){Ie.target=null,Uu=[]}function Me(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=++Ju,this.active=!0
 ,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=ke(),this.newDepIds=ke(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function $e(e,t){var n,r,o,i;if(t||(t=zu,t.clear()),o=Array.isArray(e),i=xe(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--;)$e(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)$e(e[r[n]],t)}}function Re(e){if(this.value=e,this.dep=new Ie,ge(e,"__ob__",this),Array.isArray(e)){var t=Nu?De:Fe;t(e,Wu,Hu),this.observeArray(e)}else this.walk(e)}function De(e,t){e.__proto__=t}function Fe(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];ge(e,i,t[i])}}function Le(e,t){if(xe(e)){var n;return we(e,"__ob__")&&e.__ob__ instanceof Re?n=e.__ob__:(Array.isArray(e)||Ee(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Re(e)),n&&t&&n.addVm(t),n}}function Be(e,t,n){var r=new Ie,o=Object.getOwnPropertyDescriptor(e,t);if(!o||o.configurable!==!1){var i=o&&o.get,a=o&&o.set,s=Le(n);O
 bject.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Ie.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&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){var o=i?i.call(e):n;t!==o&&(a?a.call(e,t):n=t,s=Le(t),r.notify())}})}}function Ve(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(we(e,t))return void(e[t]=n);if(e._isVue)return void Ve(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];Je(i,t)}return n}function Ue(e,t){if(we(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];ze(o,t)}}}function Je(e,t){(Gu.indexOf(t)>-1||!Ce(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function ze(e,t){Ce(t)||delete e[t]}functio
 n qe(e){e._watchers=[],We(e),Ge(e),Ke(e)}function We(e){var t=e._data;Ee(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)Je(e,n[r]);Le(t,e)}function He(){}function Ge(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=Xe(r,e),o.set=He):(o.get=r.get?r.cache!==!1?Xe(r.get,e):Oe(r.get,e):He,o.set=r.set?Oe(r.set,e):He),Object.defineProperty(e,n,o)}}function Xe(e,t){var n=new Me(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Ie.target&&n.depend(),n.value}}function Ke(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Qe(e){var t=e.type,n=Ku[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Se(e[r])&&"object"===Se(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function Ze(e,t,n){ot(e,t,n.id,e),it(e,t,n.attr),st(e,t,n.classList),ut(e,t,n.style),lt(e,t,n.events)}function Ye(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.re
 duce(function(e,t){return e[t]=!0,e},{})),tt(r,i,e,t),tt(n.attr,i,e,t)}function et(e,t,n,r){void 0===r&&(r={}),rt(n.classList,e,t),nt(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function tt(e,t,n,r){if(e){var o=function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=pt(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}};for(var i in e)o(i)}}function nt(e,t,n){var r=function(r){var o=e[r];if("function"==typeof o){var i=pt(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)};for(var o in e)r(o)}function rt(e,t,n){function r(e,t){"array"===Se(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=pt(t,e,function(e){r(e,i),at(n._rootEl,o,e)});r(a,i),at(n._rootEl,o,a)}else null!=e&&(r(e,i),at(n._rootEl,o,e))}}function ot(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,wr
 itable:!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),pt(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function it(e,t,n){ft(e,t,"attr",n)}function at(e,t,n){for(var r={},o=n.length,i=function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})},a=0;a<o;a++)i(a);e.setClassStyle(r)}function st(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=pt(e,n,function(e){at(t,r,e)});at(t,r,o)}else at(t,r,n)}}function ut(e,t,n){ft(e,t,"style",n)}function ct(e,t,n,r){t.addEvent(n,Oe(r,e))}function lt(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],a||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ct(e,t,i,a)}}function ft(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?dt(e,t,n,a,s):t[Qu[n]](a,s)}}function dt(e,t,n,r,o){var i=Qu[n],a=pt(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 pt(e,t,n){if(e._static)return t.call(e,e);var r=new Me(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)});return r.value}function ht(e,t){var n=e._app.doc;return n.createBody(t)}function vt(e,t){var n=e._app.doc;return n.createElement(t)}function mt(e,t){var n=yt(e),r=_t(e),o=Zu++;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 yt(e){var t=e._app.doc,n=t.createComment("start");return n}function _t(e){var t=e._app.doc,n=t.createComment("end");return n}function gt(e,t,n){i
 f(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=bt(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 bt(e,t,n){return t.element?Ot(t,n):wt(t,n)}function wt(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function Ot(e,t){var n=t.parentNode;if(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,r!==-1}),r}}function xt(e,t,n){void 0===n&&(n=!1),t.element?Ct(t,n):Et(t),t._vm&&t._vm.$emit("hook:destroyed")}function Et(e){var t=e.parentNode;t&&t.removeChild(e)}function Ct(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||Et(e.start),n.forEach(function(e){Et(e)}),t||Et(e.end)}function kt(e){var t=e._options||
 {},n=t.template||{};t.replace?n.children&&1===n.children.length?St(e,n.children[0],e._parentEl):St(e,n.children,e._parentEl):St(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function St(e,t,n,r){var o=e._app||{};if(o.lastSignal!==-1){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),jt(t))return void Mt(e,t,n,r);if(r=r||{},At(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=mt(e,n));if(It(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!"):$t(e,t,n));if(Tt(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!"):Rt(e,t,n,r));var i=r.type||t.type;if(Nt(i,r))return void Dt(e,t,n,i,r);var a=i,s=Pt(e,t,a);if(s)return console.debu
 g("[JS Framework] compile composed component by",t),void Ft(e,s,t,n,a,r);console.debug("[JS Framework] compile native component by",t),Lt(e,t,n,a)}}function jt(e){return Array.isArray(e)}function At(e){return"content"===e.type||"slot"===e.type}function It(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Tt(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Nt(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Pt(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Mt(e,t,n,r){var o=mt(e,n);t.forEach(function(t){St(e,t,o,r)})}function $t(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=mt(e,n);c.children=[],c.data=[],c.vms=[],Vt(e,t,c,{getter:i,key:a,value:s,track
 By:u,oldStyle:o})}function Rt(e,t,n,r){var o={shown:!0},i=mt(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Ut(e,t,i,o)}function Dt(e,t,n,r,o){var i=r.call(e),a=_e({type:i},o),s=mt(e,n);n.element&&n.children&&n.children.push(s),pt(e,r,function(n){var r=_e({type:n},o);xt(e,s,!0),St(e,t,s,r)}),St(e,t,s,a)}function Ft(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),ot(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){Ye(e,this,n,i.repeat)},"hook:ready":function(){this._content&&Bt(e,n,this._content)}});et(e,s,n,r)}function Lt(e,t,n,r){Qe(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=ht(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=vt(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,Oe(c,s))}}Ze(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||{};f.lastSignal===-1||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=gt(e,o,n)),f.lastSignal!==-1&&Bt(e,t,o),f.lastSignal!==-1&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=gt(e,o,n))}function Bt(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return St(e,t,n),r.lastSignal!==-1})}function Vt(e,t,n,r){function o(e,r,o){var a;c?(a=e,xe(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=zt(o,a);i.push(s)
 ,St(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=Jt(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)):xt(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),bt(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 Ut(e,t,n,r){var o=Jt(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?St(e,t,n,r):xt(e,n,!0))});n.display=!!o,o&&St(e,t,n,r)}function Jt(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return pt(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 zt(e,t){var n=Object.create(e);return n._data=t,We(n),Ge(n),n._realParent=e,e._static&&(n._static=e._static),n}function qt(e,t){if(t instanceof qt)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 Wt(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new qt(e,t);o.forEach(function(e){e.call(n,i)})}}function Ht(e,t){var n=new qt(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Gt(e,t){var n=new qt(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}
 function Xt(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 Kt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function Qt(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]);Yu.forEach(function(t){e.$on("hook:"+t,n[t])})}function Zt(e){e.$emit=Wt,e.$dispatch=Ht,e.$broadcast=Gt,e.$on=Xt,e.$off=Kt}function Yt(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,Qt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._ini
 ted=!0,this._data="function"==typeof a?a():a,o&&_e(this._data,o),qe(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,kt(this))}function en(e,t){var n=function(n){var r=ec[n];r||(r={},ec[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})};for(var r in e)n(r)}function tn(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function nn(e,t){var n=ec[t],r={},o=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]})}})};for(var i in n)o(i);return r}function rn(e,t){var n=e.customComponentMap;return n[t]}function on(e,t,n){var r=e.customComponentMap;return r[t]?void console.error("[JS Framework] define a component("+t+") that already exists"):void(r[t]=n)}function an(e){var t=tc.valid(e);if(t)return e;e="string"==typeof e?e:"";for(var n=e.split("."),r=0,o=[];r<3;){var i="string"==typeof n[r]&&n[r]?n[r]:"0";o.push(i),r++}return o.join(".")}function sn(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n},i=e.toLowerCase();return r.errorMessage=o(e,t,n),i.indexOf("osversion")>=0?r.code=1001:i.indexOf("appversion")>=0?r.code=1002:i.indexOf("weexversion")>=0?r.code=1003:i.indexOf("devicemodel")>=0&&(r.code=1004),r}function un(e,t){t=t||global.WXEnvironment,t=Ee(t)?t:{};var n={isDowngrade:!1};if("function"===Se(e)){var r=e.call(this,t,{semver:tc,normalizeVersion:an});r=!!r,n=r?sn("custom","","custom params"):n}els
 e{e=Ee(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=an(p),v=an(t[s]);if(tc.satisfies(v,h)){n=sn(u,l,p);break}}else if(d){var m="array"===Se(p)?p:[p];if(m.indexOf(l)>=0){n=sn(u,l,p);break}}}}return n}function cn(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function ln(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Du(t))o=je(t);else{if(!Bu(t))return new Error("Wrong component name: "+t);if(o=Ae(t),!rn(e,o))return new Error("It's not a component: "+t)}if(n=Ee(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!tc.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=un(n.downgrade);return i.isDowngra
 de?(e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),
-new Error("Downgrade["+i.code+"]: "+i.errorMessage)):(n.viewport&&cn(e,n.viewport),void(e.vm=new Yt(o,null,{_app:e},null,r)))}function fn(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),on(e,t,n)}function dn(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+'"')}function pn(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&hn(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 hn(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.l
 ength;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)hn(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 vn(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function mn(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 mn(e,t,n,r)!==!1});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 yn(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 _n(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}function _n(e){e.differ.
 flush()}function gn(e,t){var n;return"array"!==Se(t)&&(t=[t]),t.forEach(function(t){n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function bn(e,t,n,r,o,i,a){console.debug("[JS Framework] Intialize an instance with:\n",n);var s,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return nc.apply(void 0,[e].concat(t))},c=function(t,r,o){s=ln(e,t,r,o||n),_n(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},l=Yt,f=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return fn.apply(void 0,[e].concat(t))},d=function(t,n){s=ln(e,t,{},n)},p=function(t){return function(n){s=ln(e,t,{},n)}},h=e.doc,v=function(t){return e.requireModule(je(t))},m={config:e.options,define:u,bootstrap:c,requireModule:v,document:h,Vm:l};Object.freeze(m);var y;"function"==typeof t?y=t.toString().substr(12):t&&(y=t.toString()),y='(function(global){\n\n"use strict";\n\n '+y+" \n\n})(Object.create(this))
 ";var _=global.WXEnvironment,g={};if(_&&"Web"!==_.platform){var b=e.requireModule("timer");Object.assign(g,{setTimeout:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=function(){e[0].apply(e,e.slice(2))};b.setTimeout(n,e[1])},setInterval:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=function(){e[0].apply(e,e.slice(2))};b.setInterval(n,e[1])},clearTimeout:function(e){b.clearTimeout(e)},clearInterval:function(e){b.clearInterval(e)}})}var w=Object.assign({define:u,require:p,bootstrap:c,register:f,render:d,__weex_define__:u,__weex_bootstrap__:c,__weex_document__:h,__weex_require__:v,__weex_viewmodel__:l,weex:m},g,r);return On(w,y,o,i,a)||wn(w,y),s}function wn(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t);var i=new(Function.prototype.bind.apply(Function,[null].concat(n)));return i.apply(void 0,r)}function On(e,t,n,r,o){if("function"!=typeof compileAndRunBundle)return!1;var i=void 0,a=!1,s="(function (",u=[],c=[];for(v
 ar l in e)u.push(l),c.push(e[l]);for(var f=0;f<u.length-1;++f)s+=u[f],s+=",";s+=u[u.length-1],s+=") {",s+=t,s+="} )";try{i=compileAndRunBundle(s,n,r,o),i&&"function"==typeof i&&(i.apply(void 0,c),a=!0)}catch(e){console.error(e)}return a}function xn(e,t){var n=e[t];for(var r in n)n[r]()}function En(e,t){var n=e[t];for(var r in n){var o=n[r];o.forEach(function(e){e()})}}function Cn(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new Xu.Document(e,this.options.bundleUrl,null,Xu.Listener),this.differ=new rc(e)}function kn(e,t,n,r,o){var i=o||{},a=i.services;Pe();var s=oc[e];n=n||{};var u;return s?u=new Error('invalid instance id "'+e+'"'):(s=new Cn(e,n),oc[e]=s,u=bn(s,t,r,a,n.bundleUrl,n.bundleDigest,n.codeCachePath)),u}function Sn(e){Xu.Document=e.Document,Xu.Element=e.Element,Xu.Comment=e.Comment,Xu.sendTasks=e.sendTasks,Xu.Listener=e.Listener}function jn(e,t){var n,r=oc[e];return n=r?dn(r,t):new Error('invalid instance id "'+e+
 '"')}function An(e){markupState(),Pe();var t=oc[e];if(!t)return new Error('invalid instance id "'+e+'"');pn(t),delete oc[e];var n=Math.round(e),r=18;if(n>0){var o=n%r;o||notifyTrimMemory()}return oc}function In(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?ic[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(ic[e.type]=e))})}function Tn(e){"object"==typeof e&&en(e)}function Nn(e){"object"==typeof e&&tn(Yt,e)}function Pn(e,t){var n=oc[e];if(n&&Array.isArray(t)){var r=[];return t.forEach(function(t){var n=ac[t.method],o=[].concat(t.args);"function"==typeof n&&(o.unshift(e),r.push(n.apply(void 0,o)))}),r}return new Error('invalid instance id "'+e+'" or tasks')}function Mn(e){var t,n=oc[e];return t=n?vn(n):new Error('invalid instance id "'+e+'"')}function $n(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 Rn(){}var Dn=
 {browser:"0.5.0",framework:"0.19.8",transformer:">=0.1.5 <0.5"};Array.from||(Array.from=function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},r=Math.pow(2,53)-1,o=function(e){var t=n(e);return Math.min(Math.max(t,0),r)};return function(e){var n=this,r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if("undefined"!=typeof a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var s,u=o(r.length),c=t(n)?Object(new n(u)):new Array(u),l=0;l<u;)s=r[l],a?c[l]="undefined"==typeof i?a(s,l):a.call(i,s,l):c[l]=s,l+=1;return c.length=u,c}}());var Fn="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof 
 self?self:{},Ln=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),Bn=t(function(e){var t=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=t)}),Vn=function(e){return"object"==typeof e?null!==e:"function"==typeof e},Un=Vn,Jn=function(e){if(!Un(e))throw TypeError(e+" is not an object!");return e},zn=function(e){try{return!!e()}catch(e){return!0}},qn=!zn(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),Wn=Vn,Hn=Ln.document,Gn=Wn(Hn)&&Wn(Hn.createElement),Xn=function(e){return Gn?Hn.createElement(e):{}},Kn=!qn&&!zn(function(){return 7!=Object.defineProperty(Xn("div"),"a",{get:function(){return 7}}).a}),Qn=Vn,Zn=function(e,t){if(!Qn(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!Qn(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!Qn(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toStrin
 g)&&!Qn(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},Yn=Jn,er=Kn,tr=Zn,nr=Object.defineProperty,rr=qn?Object.defineProperty:function(e,t,n){if(Yn(e),t=tr(t,!0),Yn(n),er)try{return nr(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},or={f:rr},ir=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},ar=or,sr=ir,ur=qn?function(e,t,n){return ar.f(e,t,sr(1,n))}:function(e,t,n){return e[t]=n,e},cr={}.hasOwnProperty,lr=function(e,t){return cr.call(e,t)},fr=0,dr=Math.random(),pr=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++fr+dr).toString(36))},hr=t(function(e){var t=Ln,n=ur,r=lr,o=pr("src"),i="toString",a=Function[i],s=(""+a).split(i);Bn.inspectSource=function(e){return a.call(e)},(e.exports=function(e,i,a,u){var c="function"==typeof a;c&&(r(a,"name")||n(a,"name",i)),e[i]!==a&&(c&&(r(a,o)||n(a,o,e[i]?""+e[i]:s.join(String(i)))),e===t?e[i
 ]=a:u?e[i]?e[i]=a:n(e,i,a):(delete e[i],n(e,i,a)))})(Function.prototype,i,function(){return"function"==typeof this&&this[o]||a.call(this)})}),vr=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},mr=vr,yr=function(e,t,n){if(mr(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},_r=Ln,gr=Bn,br=ur,wr=hr,Or=yr,xr="prototype",Er=function(e,t,n){var r,o,i,a,s=e&Er.F,u=e&Er.G,c=e&Er.S,l=e&Er.P,f=e&Er.B,d=u?_r:c?_r[t]||(_r[t]={}):(_r[t]||{})[xr],p=u?gr:gr[t]||(gr[t]={}),h=p[xr]||(p[xr]={});u&&(n=t);for(r in n)o=!s&&d&&void 0!==d[r],i=(o?d:n)[r],a=f&&o?Or(i,_r):l&&"function"==typeof i?Or(Function.call,i):i,d&&wr(d,r,i,e&Er.U),p[r]!=i&&br(p,r,a),l&&h[r]!=i&&(h[r]=i)};_r.core=gr,Er.F=1,Er.G=2,Er.S=4,Er.P=8,Er.B=16,Er.W=32,Er.U=64,Er.R=128;var Cr=Er,kr={}.toString,Sr=function(e){ret
 urn kr.call(e).slice(8,-1)},jr=Sr,Ar=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==jr(e)?e.split(""):Object(e)},Ir=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},Tr=Ar,Nr=Ir,Pr=function(e){return Tr(Nr(e))},Mr=Math.ceil,$r=Math.floor,Rr=function(e){return isNaN(e=+e)?0:(e>0?$r:Mr)(e)},Dr=Rr,Fr=Math.min,Lr=function(e){return e>0?Fr(Dr(e),9007199254740991):0},Br=Rr,Vr=Math.max,Ur=Math.min,Jr=function(e,t){return e=Br(e),e<0?Vr(e+t,0):Ur(e,t)},zr=Pr,qr=Lr,Wr=Jr,Hr=function(e){return function(t,n,r){var o,i=zr(t),a=qr(i.length),s=Wr(r,a);if(e&&n!=n){for(;a>s;)if(o=i[s++],o!=o)return!0}else for(;a>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}},Gr=Ln,Xr="__core-js_shared__",Kr=Gr[Xr]||(Gr[Xr]={}),Qr=function(e){return Kr[e]||(Kr[e]={})},Zr=Qr("keys"),Yr=pr,eo=function(e){return Zr[e]||(Zr[e]=Yr(e))},to=lr,no=Pr,ro=Hr(!1),oo=eo("IE_PROTO"),io=function(e,t){var n,r=no(e),o=0,i=[];for(n in r)n!=oo&&to(r,n)&&i.push(n);for(
 ;t.length>o;)to(r,n=t[o++])&&(~ro(i,n)||i.push(n));return i},ao="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),so=io,uo=ao,co=Object.keys||function(e){return so(e,uo)},lo=Object.getOwnPropertySymbols,fo={f:lo},po={}.propertyIsEnumerable,ho={f:po},vo=Ir,mo=function(e){return Object(vo(e))},yo=co,_o=fo,go=ho,bo=mo,wo=Ar,Oo=Object.assign,xo=!Oo||zn(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=Oo({},e)[n]||Object.keys(Oo({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=bo(e),o=arguments.length,i=1,a=_o.f,s=go.f;o>i;)for(var u,c=wo(n[i++]),l=a?yo(c).concat(a(c)):yo(c),f=l.length,d=0;f>d;)s.call(c,u=l[d++])&&(r[u]=c[u]);return r}:Oo,Eo=Cr;Eo(Eo.S+Eo.F,"Object",{assign:xo}),Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){function n(e,t){return r.call(e,t),e}var r;try{r=e.getOwnPropertyDescriptor(e.prototype,t).set,r.call({},null)}catch(o)
 {if(e.prototype!=={}[t]||void 0==={__proto__:null}.__proto__)return;r=function(e){this[t]=e},n.polyfill=n(n({},null),e.prototype)instanceof e}return n}(Object,"__proto__"));var Co=Fn,ko=Co.WXEnvironment;ko&&"iOS"===ko.platform&&(Fn.Promise=void 0);var So=t(function(e){var t=Qr("wks"),n=pr,r=Ln.Symbol,o="function"==typeof r,i=e.exports=function(e){return t[e]||(t[e]=o&&r[e]||(o?r:n)("Symbol."+e))};i.store=t}),jo=Sr,Ao=So("toStringTag"),Io="Arguments"==jo(function(){return arguments}()),To=function(e,t){try{return e[t]}catch(e){}},No=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=To(t=Object(e),Ao))?n:Io?jo(t):"Object"==(r=jo(t))&&"function"==typeof t.callee?"Arguments":r},Po=No,Mo={};Mo[So("toStringTag")]="z",Mo+""!="[object z]"&&hr(Object.prototype,"toString",function(){return"[object "+Po(this)+"]"},!0);var $o=Rr,Ro=Ir,Do=function(e){return function(t,n){var r,o,i=String(Ro(t)),a=$o(n),s=i.length;return a<0||a>=s?e?"":void 0:(r=i.charCodeAt(a
 ),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?e?i.charAt(a):r:e?i.slice(a,a+2):(r-55296<<10)+(o-56320)+65536)}},Fo=!1,Lo={},Bo=or,Vo=Jn,Uo=co,Jo=qn?Object.defineProperties:function(e,t){Vo(e);for(var n,r=Uo(t),o=r.length,i=0;o>i;)Bo.f(e,n=r[i++],t[n]);return e},zo=Ln.document&&document.documentElement,qo=Jn,Wo=Jo,Ho=ao,Go=eo("IE_PROTO"),Xo=function(){},Ko="prototype",Qo=function(){var e,t=Xn("iframe"),n=Ho.length,r="<",o=">";for(t.style.display="none",zo.appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+o+"document.F=Object"+r+"/script"+o),e.close(),Qo=e.F;n--;)delete Qo[Ko][Ho[n]];return Qo()},Zo=Object.create||function(e,t){var n;return null!==e?(Xo[Ko]=qo(e),n=new Xo,Xo[Ko]=null,n[Go]=e):n=Qo(),void 0===t?n:Wo(n,t)},Yo=or.f,ei=lr,ti=So("toStringTag"),ni=function(e,t,n){e&&!ei(e=n?e:e.prototype,ti)&&Yo(e,ti,{configurable:!0,value:t})},ri=Zo,oi=ir,ii=ni,ai={};ur(ai,So("iterator"),function(){return this});var si=function(e,
 t,n){e.prototype=ri(ai,{next:oi(1,n)}),ii(e,t+" Iterator")},ui=lr,ci=mo,li=eo("IE_PROTO"),fi=Object.prototype,di=Object.getPrototypeOf||function(e){return e=ci(e),ui(e,li)?e[li]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?fi:null},pi=Fo,hi=Cr,vi=hr,mi=ur,yi=lr,_i=Lo,gi=si,bi=ni,wi=di,Oi=So("iterator"),xi=!([].keys&&"next"in[].keys()),Ei="@@iterator",Ci="keys",ki="values",Si=function(){return this},ji=function(e,t,n,r,o,i,a){gi(n,t,r);var s,u,c,l=function(e){if(!xi&&e in h)return h[e];switch(e){case Ci:return function(){return new n(this,e)};case ki:return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d=o==ki,p=!1,h=e.prototype,v=h[Oi]||h[Ei]||o&&h[o],m=v||l(o),y=o?d?l("entries"):m:void 0,_="Array"==t?h.entries||v:v;if(_&&(c=wi(_.call(new e)),c!==Object.prototype&&(bi(c,f,!0),pi||yi(c,Oi)||mi(c,Oi,Si))),d&&v&&v.name!==ki&&(p=!0,m=function(){return v.call(this)}),pi&&!a||!xi&&!p&&h
 [Oi]||mi(h,Oi,m),_i[t]=m,_i[f]=Si,o)if(s={values:d?m:l(ki),keys:i?m:l(Ci),entries:y},a)for(u in s)u in h||vi(h,u,s[u]);else hi(hi.P+hi.F*(xi||p),t,s);return s},Ai=Do(!0);ji(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Ai(t,n),this._i+=e.length,{value:e,done:!1})});var Ii=So("unscopables"),Ti=Array.prototype;void 0==Ti[Ii]&&ur(Ti,Ii,{});var Ni=function(e){Ti[Ii][e]=!0},Pi=function(e,t){return{value:t,done:!!e}},Mi=Ni,$i=Pi,Ri=Lo,Di=Pr,Fi=ji(Array,"Array",function(e,t){this._t=Di(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$i(1)):"keys"==t?$i(0,n):"values"==t?$i(0,e[n]):$i(0,[n,e[n]])},"values");Ri.Arguments=Ri.Array,Mi("keys"),Mi("values"),Mi("entries");for(var Li=Fi,Bi=hr,Vi=Ln,Ui=ur,Ji=Lo,zi=So,qi=zi("iterator"),Wi=zi("toStringTag"),Hi=Ji.Array,Gi=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],Xi=0;Xi<
 5;Xi++){var Ki,Qi=Gi[Xi],Zi=Vi[Qi],Yi=Zi&&Zi.prototype;if(Yi){Yi[qi]||Ui(Yi,qi,Hi),Yi[Wi]||Ui(Yi,Wi,Qi),Ji[Qi]=Hi;for(Ki in Li)Yi[Ki]||Bi(Yi,Ki,Li[Ki],!0)}}var ea,ta,na,ra=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},oa=Jn,ia=function(e,t,n,r){try{return r?t(oa(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&oa(o.call(e)),t}},aa=Lo,sa=So("iterator"),ua=Array.prototype,ca=function(e){return void 0!==e&&(aa.Array===e||ua[sa]===e)},la=No,fa=So("iterator"),da=Lo,pa=Bn.getIteratorMethod=function(e){if(void 0!=e)return e[fa]||e["@@iterator"]||da[la(e)]},ha=t(function(e){var t=yr,n=ia,r=ca,o=Jn,i=Lr,a=pa,s={},u={},c=e.exports=function(e,c,l,f,d){var p,h,v,m,y=d?function(){return e}:a(e),_=t(l,f,c?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(r(y)){for(p=i(e.length);p>g;g++)if(m=c?_(o(h=e[g])[0],h[1]):_(e[g]),m===s||m===u)return m}else for(v=y.call(e);!(h=v.next()).done;)if(m=n(v,_,h
 .value,c),m===s||m===u)return m};c.BREAK=s,c.RETURN=u}),va=Jn,ma=vr,ya=So("species"),_a=function(e,t){var n,r=va(e).constructor;return void 0===r||void 0==(n=va(r)[ya])?t:ma(n)},ga=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},ba=yr,wa=ga,Oa=zo,xa=Xn,Ea=Ln,Ca=Ea.process,ka=Ea.setImmediate,Sa=Ea.clearImmediate,ja=Ea.MessageChannel,Aa=0,Ia={},Ta="onreadystatechange",Na=function(){var e=+this;if(Ia.hasOwnProperty(e)){var t=Ia[e];delete Ia[e],t()}},Pa=function(e){Na.call(e.data)};ka&&Sa||(ka=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return Ia[++Aa]=function(){wa("function"==typeof e?e:Function(e),n)},ea(Aa),Aa},Sa=function(e){delete Ia[e]},"process"==Sr(Ca)?ea=function(e){Ca.nextTick(ba(
 Na,e,1))}:ja?(ta=new ja,na=ta.port2,ta.port1.onmessage=Pa,ea=ba(na.postMessage,na,1)):Ea.addEventListener&&"function"==typeof postMessage&&!Ea.importScripts?(ea=function(e){Ea.postMessage(e+"","*")},Ea.addEventListener("message",Pa,!1)):ea=Ta in xa("script")?function(e){Oa.appendChild(xa("script"))[Ta]=function(){Oa.removeChild(this),Na.call(e)}}:function(e){setTimeout(ba(Na,e,1),0)});var Ma={set:ka,clear:Sa},$a=Ln,Ra=Ma.set,Da=$a.MutationObserver||$a.WebKitMutationObserver,Fa=$a.process,La=$a.Promise,Ba="process"==Sr(Fa),Va=function(){var e,t,n,r=function(){var r,o;for(Ba&&(r=Fa.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(Ba)n=function(){Fa.nextTick(r)};else if(Da){var o=!0,i=document.createTextNode("");new Da(r).observe(i,{characterData:!0}),n=function(){i.data=o=!o}}else if(La&&La.resolve){var a=La.resolve();n=function(){a.then(r)}}else n=function(){Ra.call($a,r)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o
 ),e||(e=o,n()),t=o}},Ua=hr,Ja=function(e,t,n){for(var r in t)Ua(e,r,t[r],n);return e},za=Ln,qa=or,Wa=qn,Ha=So("species"),Ga=function(e){var t=za[e];Wa&&t&&!t[Ha]&&qa.f(t,Ha,{configurable:!0,get:function(){return this}})},Xa=So("iterator"),Ka=!1;try{var Qa=[7][Xa]();Qa.return=function(){Ka=!0},Array.from(Qa,function(){throw 2})}catch(e){}var Za,Ya,es,ts=function(e,t){if(!t&&!Ka)return!1;var n=!1;try{var r=[7],o=r[Xa]();o.next=function(){return{done:n=!0}},r[Xa]=function(){return o},e(r)}catch(e){}return n},ns=Fo,rs=Ln,os=yr,is=No,as=Cr,ss=Vn,us=vr,cs=ra,ls=ha,fs=_a,ds=Ma.set,ps=Va(),hs="Promise",vs=rs.TypeError,ms=rs.process,ys=rs[hs],ms=rs.process,_s="process"==is(ms),gs=function(){},bs=!!function(){try{var e=ys.resolve(1),t=(e.constructor={})[So("species")]=function(e){e(gs,gs)};return(_s||"function"==typeof PromiseRejectionEvent)&&e.then(gs)instanceof t}catch(e){}}(),ws=function(e,t){return e===t||e===ys&&t===es},Os=function(e){var t;return!(!ss(e)||"function"!=typeof(t=e.then))&&
 t},xs=function(e){return ws(ys,e)?new Es(e):new Ya(e)},Es=Ya=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw vs("Bad Promise constructor");t=e,n=r}),this.resolve=us(t),this.reject=us(n)},Cs=function(e){try{e()}catch(e){return{error:e}}},ks=function(e,t){if(!e._n){e._n=!0;var n=e._c;ps(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&As(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(vs("Promise-chain cycle")):(i=Os(n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&Ss(e)})}},Ss=function(e){ds.call(rs,function(){var t,n,r,o=e._v;if(js(e)&&(t=Cs(function(){_s?ms.emit("unhandledRejection",o,e):(n=rs.onunhandledrejection)?n({promise:e,reason:o}):(r=rs.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=_s||js(e)?2:1),e._a=void 0,t)throw t.error})},js=function(e){if(1==e._h)return!1;for(var
  t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!js(t.promise))return!1;return!0},As=function(e){ds.call(rs,function(){var t;_s?ms.emit("rejectionHandled",e):(t=rs.onrejectionhandled)&&t({promise:e,reason:e._v})})},Is=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),ks(t,!0))},Ts=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw vs("Promise can't be resolved itself");(t=Os(e))?ps(function(){var r={_w:n,_d:!1};try{t.call(e,os(Ts,r,1),os(Is,r,1))}catch(e){Is.call(r,e)}}):(n._v=e,n._s=1,ks(n,!1))}catch(e){Is.call({_w:n,_d:!1},e)}}};bs||(ys=function(e){cs(this,ys,hs,"_h"),us(e),Za.call(this);try{e(os(Ts,this,1),os(Is,this,1))}catch(e){Is.call(this,e)}},Za=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},Za.prototype=Ja(ys.prototype,{then:function(e,t){var n=xs(fs(this,ys));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=_s?ms.domain:void 0,this._c.p
 ush(n),this._a&&this._a.push(n),this._s&&ks(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Es=function(){var e=new Za;this.promise=e,this.resolve=os(Ts,e,1),this.reject=os(Is,e,1)}),as(as.G+as.W+as.F*!bs,{Promise:ys}),ni(ys,hs),Ga(hs),es=Bn[hs],as(as.S+as.F*!bs,hs,{reject:function(e){var t=xs(this),n=t.reject;return n(e),t.promise}}),as(as.S+as.F*(ns||!bs),hs,{resolve:function(e){if(e instanceof ys&&ws(e.constructor,this))return e;var t=xs(this),n=t.resolve;return n(e),t.promise}}),as(as.S+as.F*!(bs&&ts(function(e){ys.all(e).catch(gs)})),hs,{all:function(e){var t=this,n=xs(t),r=n.resolve,o=n.reject,i=Cs(function(){var n=[],i=0,a=1;ls(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=xs(t),r=n.reject,o=Cs(function(){ls(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}});var Ns=["off","error","w
 arn","info","log","debug"],Ps={},Ms=global.console,$s=global.setTimeout,Rs=global.setTimeoutNative;s();var Ds=function(e){this.instanceId=e,this.lastCallbackId=0,this.callbacks=[]};Ds.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},Ds.prototype.remove=function(e){var t=this.callbacks[e];return this.callbacks[e]=void 0,t},Ds.prototype.consume=function(e,t,n){var r=this.callbacks[e];return"undefined"!=typeof n&&n!==!1||(this.callbacks[e]=void 0),"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},Ds.prototype.close=function(){this.callbacks=this.callbacks.map(function(e){})};var Fs={},Ls=1;E.prototype.destroy=function(){var e=f(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var Bs,Vs={},Us="div";S.prototype=Object.create(E.prototype),S.prototype.constructor=S,C(S),Object.assign(S.prototype,{appendChild:function(e){if(!e.parentNode||e.pare
 ntNode===this)if(e.parentNode){if(O(e,this.children,this.children.length,!0),1===e.nodeType){var t=O(e,this.pureChildren,this.pureChildren.length),n=p(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(_(e,this),w(e,this.children,this.children.length,!0),this.docId&&j(this.docId,e),1===e.nodeType){w(e,this.pureChildren,this.pureChildren.length);var r=p(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},insertBefore:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(O(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=g(t),r=O(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=p(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(_(e,this),w(e,this.children,this.children.indexOf(t),!0),this.docId&&j(this.docId,e),1===e.nodeType){var i=g(t),a=w(e,this.pureCh
 ildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=p(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},insertAfter:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(O(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=O(e,this.pureChildren,this.pureChildren.indexOf(b(t))+1),r=p(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(_(e,this),w(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&j(this.docId,e),1===e.nodeType){var o=w(e,this.pureChildren,this.pureChildren.indexOf(b(t))+1),i=p(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},removeChild:function(e,t){if(e.parentNode&&(x(e,this.children,!0),1===e.nodeType)){x(e,this.pureChildren);var n=p(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},clear:function(){var e=p(this.doc
 Id);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},setAttr:function(e,t,n){if(this.attr[e]!==t||n===!1){this.attr[e]=t;var r=p(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},setStyle:function(e,t,n){if(this.style[e]!==t||n===!1){this.style[e]=t;var r=p(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},setClassStyle:function(e){var t=this;for(var n in this.classStyle)t.classStyle[n]="";Object.assign(this.classStyle,e);var r=p(this.docId);r&&r.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},addEvent:function(e,t){if(!this.event[e]){this.event[e]=t;var n=p(this.docId);n&&n.send("dom",{action:"addEvent"},[this.ref,e])}},removeEvent:function(e){if(this.event[e]){delete this.event[e];var t=p(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,
 e])}},fireEvent:function(e,t){var n=this.event[e];if(n)return n.call(this,t)},toStyle:function(){return Object.assign({},this.classStyle,this.style)},toJSON:function(){var e={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},t=Object.keys(this.event);return t.length&&(e.event=t),this.pureChildren.length&&(e.children=this.pureChildren.map(function(e){return e.toJSON()})),e},toString:function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"}});var Js=function(){},zs=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:e}),Object.defineProperty(this,"callbackManager",{enumerable:!0,value:new Ds}),Js=t||function(){}};zs.prototype.callback=function(e,t,n){return this.callbackManager.consume(e,t,n)},zs.prototype.destroyCallback=function(){return this.callbackManager.close()},zs.prototype.typof=function(e){v
 ar t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()},zs.prototype.normalize=function(e){var t=this.typof(e);switch(t){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof S?e.ref:e;case"function":return this.callbackManager.add(e).toString();default:return JSON.stringify(e)}},zs.prototype.send=function(e,t,n){var r=this,o=t.action,i=t.component,a=t.ref,s=t.module,u=t.method;switch(n=n.map(function(e){return r.normalize(e)}),e){case"dom":return this[o](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,a,u,n,{component:i});default:return this.moduleHandler(this.instanceId,s,u,n,{})}},zs.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},zs.prototype.callComponent=function(e,t,n){return this.componentHandler(this.instanceId,e,t,n,{})},zs.prototype.callModule=function(e,t,n){
 return this.moduleHandler(this.instanceId,e,t,n,{})};var qs,Ws,Hs=[],Gs=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/,Xs={},Ks={createInstance:R,registerService:I,unregisterService:T};U.prototype=Object.create(E.prototype),U.prototype.constructor=U,U.prototype.toString=function(){return"<!-- "+this.value+" -->"},Object.assign(J.prototype,{createFinish:function(e){var t=this.handler;return t([z("createFinish")],e)},updateFinish:function(e){var t=this.handler;return t([z("updateFinish")],e)},refreshFinish:function(e){var t=this.handler;return t([z("refreshFinish")],e)},createBody:function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[z("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return z("addElement",[t.ref,e,-1])})),this.addActions(r)},addElement:function(e,t,n){return n>=0||(n=-1),this.addActions(z("addElement",[t,e.toJSON(),n]))},removeElement:function(e){if(Array.isArray(e)){var t=e.map(function(e){return z("removeElement",[e])});return this.addActions(t)}return thi
 s.addActions(z("removeElement",[e]))},moveElement:function(e,t,n){return this.addActions(z("moveElement",[e,t,n]))},setAttr:function(e,t,n){var r={};return r[t]=n,this.addActions(z("updateAttrs",[e,r]))},setStyle:function(e,t,n){var r={};return r[t]=n,this.addActions(z("updateStyle",[e,r]))},setStyles:function(e,t){return this.addActions(z("updateStyle",[e,t]))},addEvent:function(e,t){return this.addActions(z("addEvent",[e,t]))},removeEvent:function(e,t){return this.addActions(z("removeEvent",[e,t]))},handler:function(e,t){return t&&t()},addActions:function(e){var t=this.updates,n=this.handler;return Array.isArray(e)||(e=[e]),this.batched?void t.push.apply(t,e):n(e)}});var Qs={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};G.handler=null,Object.assign(G.prototype,{getRef:function(e){return this.nod
 eMap[e]},open:function(){this.listener.batched=!1},close:function(){this.listener.batched=!0},createDocumentElement:function(){var e=this;if(!this.documentElement){var t=new S("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){v(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){v(e,t,n)}})}return this.documentElement},createBody:function(e,t){if(!this.body){var n=new S(e,t);y(this,n)}return this.body},createElement:function(e,t){return new S(e,t)},createComment:function(e){return new U(e)},fireEvent:function(e,t,n,r){if(e)return n=n||{},n.type=t,n.target=e,n.timestamp=Date.now(),r&&X(e,r),e.fireEvent(t,n)},destroy:function(){delete this.listener,delete this.nodeMap,d(this.id)}});var Zs={Document:G,Element:S,Comment:
 U,Listener:J,TaskCenter:zs,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];
-return global.callNative.apply(global,e)}};G.handler=Zs.sendTasks;var Ys,eu={setNativeConsole:n,resetNativeConsole:r,setNativeTimer:s,resetNativeTimer:u,service:{register:I,unregister:T,has:N},freezePrototype:K,init:V,config:Zs},tu={},nu={},ru=Q,ou=Z,iu=Y,au=ee,su=te,uu=ne,cu=re,lu=oe,fu=ie,du=ae,pu={init:ru,registerComponents:ou,registerModules:iu,registerMethods:au,prepareInstance:su,createInstance:uu,refreshInstance:cu,destroyInstance:lu,getRoot:fu,receiveTasks:du},hu=Object.freeze({default:pu,__moduleExports:pu,init:ru,registerComponents:ou,registerModules:iu,registerMethods:au,prepareInstance:su,createInstance:uu,refreshInstance:cu,destroyInstance:lu,getRoot:fu,receiveTasks:du}),vu=t(function(e,t){function n(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function r(e){var t=parseFloat(e,10);return t||0===t?t:e}function o(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()]}:fun
 ction(e){return n[e]}}function i(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function a(e,t){return Xt.call(e,t)}function s(e){return"string"==typeof e||"number"==typeof e}function u(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function c(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 l(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){return null!==e&&"object"==typeof e}function p(e){return tn.call(e)===nn}function h(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function v(){}function m(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}function y(e,t){var n=d(e),r=d(t);return n&&r?JSON.stringify(e)===JSON.stringify(t):!n&&!r&&String(e)===String(t)}function _(e,t){for(var n=0;n<e.length;n++)if(y(e[n],t))re
 turn n;return-1}function g(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function b(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function w(e){if(!sn.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 O(e){return/native code/.test(e.toString())}function x(e){On.target&&xn.push(On.target),On.target=e}function E(){On.target=xn.pop()}function C(e,t){e.__proto__=t}function k(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];b(e,i,t[i])}}function S(e,t){if(d(e)){var n;return a(e,"__ob__")&&e.__ob__ instanceof jn?n=e.__ob__:Sn.shouldConvert&&!mn()&&(Array.isArray(e)||p(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new jn(e)),t&&n&&n.vmCount++,n}}function j(e,t,n,r){var o=new On,i=Object.getOwnPropertyDescriptor(e,t);if(!i||i.configurable!==!1){var a=i&&i.get,s=i&&i.set,u=S(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return On.
 target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&T(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=S(t),o.notify())}})}}function A(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(a(e,t))return void(e[t]=n);var r=e.__ob__;if(!(e._isVue||r&&r.vmCount))return r?(j(r.value,t,n),r.dep.notify(),n):void(e[t]=n)}function I(e,t){var n=e.__ob__;e._isVue||n&&n.vmCount||a(e,t)&&(delete e[t],n&&n.dep.notify())}function T(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)&&T(t)}function N(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),s=0;s<i.length;s++)n=i[s],r=e[n],o=t[n],a(e,n)?p(r)&&p(o)&&N(r,o):A(e,n,o);return e}function P(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function M(e,t){var n=Object.create(e||null);return t?f(n,t):n}function $(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)r=t[n],"string"==typeof r&&(o=Qt(r
 ),i[o]={type:null});else if(p(t))for(var a in t)r=t[a],o=Qt(a),i[o]=p(r)?r:{type:r};e.props=i}}function R(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function D(e,t,n){function r(r){var o=An[r]||In;l[r]=o(e[r],t[r],n,r)}$(t),R(t);var o=t.extends;if(o&&(e="function"==typeof o?D(e,o.options,n):D(e,o,n)),t.mixins)for(var i=0,s=t.mixins.length;i<s;i++){var u=t.mixins[i];u.prototype instanceof ze&&(u=u.options),e=D(e,u,n)}var c,l={};for(c in e)r(c);for(c in t)a(e,c)||r(c);return l}function F(e,t,n,r){if("string"==typeof n){var o=e[t];if(a(o,n))return o[n];var i=Qt(n);if(a(o,i))return o[i];var s=Zt(i);if(a(o,s))return o[s];var u=o[n]||o[i]||o[s];return u}}function L(e,t,n,r){var o=t[e],i=!a(n,e),s=n[e];if(U(Boolean,o.type)&&(i&&!a(o,"default")?s=!1:U(String,o.type)||""!==s&&s!==en(e)||(s=!0)),void 0===s){s=B(r,o,e);var u=Sn.shouldConvert;Sn.shouldConvert=!0,S(s),Sn.shouldConvert=u}return s}function B(e,t,n){if(a(t,"default")){var r
 =t.default;return d(r),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e[n]?e[n]:"function"==typeof r&&t.type!==Function?r.call(e):r}}function V(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function U(e,t){if(!Array.isArray(t))return V(t)===V(e);for(var n=0,r=t.length;n<r;n++)if(V(t[n])===V(e))return!0;return!1}function J(){Nn.length=0,Pn={},Mn=$n=!1}function z(){for($n=!0,Nn.sort(function(e,t){return e.id-t.id}),Rn=0;Rn<Nn.length;Rn++){var e=Nn[Rn],t=e.id;Pn[t]=null,e.run()}yn&&an.devtools&&yn.emit("flush"),J()}function q(e){var t=e.id;if(null==Pn[t]){if(Pn[t]=!0,$n){for(var n=Nn.length-1;n>=0&&Nn[n].id>e.id;)n--;Nn.splice(Math.max(n,Rn)+1,0,e)}else Nn.push(e);Mn||(Mn=!0,_n(z))}}function W(e){Vn.clear(),H(e,Vn)}function H(e,t){var n,r,o=Array.isArray(e);if((o||d(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--;)H(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)H(e[r[n]],t
 )}}function G(e){e._watchers=[];var t=e.$options;t.props&&X(e,t.props),t.methods&&Y(e,t.methods),t.data?K(e):S(e._data={},!0),t.computed&&Q(e,t.computed),t.watch&&ee(e,t.watch)}function X(e,t){var n=e.$options.propsData||{},r=e.$options._propKeys=Object.keys(t),o=!e.$parent;Sn.shouldConvert=o;for(var i=function(o){var i=r[o];j(e,i,L(i,t,n,e))},a=0;a<r.length;a++)i(a);Sn.shouldConvert=!0}function K(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},p(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&a(r,n[o])||re(e,n[o]);S(t,!0)}function Q(e,t){for(var n in t){var r=t[n];"function"==typeof r?(Un.get=Z(r,e),Un.set=v):(Un.get=r.get?r.cache!==!1?Z(r.get,e):c(r.get,e):v,Un.set=r.set?c(r.set,e):v),Object.defineProperty(e,n,Un)}}function Z(e,t){var n=new Ln(t,e,v,{lazy:!0});return function(){return n.dirty&&n.evaluate(),On.target&&n.depend(),n.value}}function Y(e,t){for(var n in t)e[n]=null==t[n]?v:c(t[n],e)}function ee(e,t){for(var n in t){var 
 r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)te(e,n,r[o]);else te(e,n,r)}}function te(e,t,n){var r;p(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function ne(e){var t={};t.get=function(){return this._data},Object.defineProperty(e.prototype,"$data",t),e.prototype.$set=A,e.prototype.$delete=I,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var o=new Ln(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}function re(e,t){g(t)||Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function oe(e){return new Jn(void 0,void 0,void 0,String(e))}function ie(e){var t=new Jn(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.isCloned=!0,t}function ae(e){for(var t=new Array(e.length),n=0;n<e.length;n++)t[n]=ie(e[n]);return t}function se(e,t,n,r){r+=t;var o=e.__injected||(e.__injected={});if(!
 o[r]){o[r]=!0;var i=e[t];i?e[t]=function(){i.apply(this,arguments),n.apply(this,arguments)}:e[t]=n}}function ue(e,t,n,r,o){var i,a,s,u,c,l,f;for(i in e)if(a=e[i],s=t[i],a)if(s){if(a!==s)if(Array.isArray(s)){s.length=a.length;for(var d=0;d<s.length;d++)s[d]=a[d];e[i]=s}else s.fn=a,e[i]=s}else f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,Array.isArray(a)?n(c,a.invoker=ce(a),f,l):(a.invoker||(u=a,a=e[i]={},a.fn=u,a.invoker=le(a)),n(c,a.invoker,f,l));else;for(i in t)e[i]||(f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,r(c,t[i].invoker,l))}function ce(e){return function(t){for(var n=arguments,r=1===arguments.length,o=0;o<e.length;o++)r?e[o](t):e[o].apply(null,n)}}function le(e){return function(t){var n=1===arguments.length;n?e.fn(t):e.fn.apply(null,arguments)}}function fe(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function de(e){return s(e)?[oe(e)]:Array.isArray(e)?pe(e):
 void 0}function pe(e,t){var n,r,o,i=[];for(n=0;n<e.length;n++)r=e[n],null!=r&&"boolean"!=typeof r&&(o=i[i.length-1],Array.isArray(r)?i.push.apply(i,pe(r,(t||"")+"_"+n)):s(r)?o&&o.text?o.text+=String(r):""!==r&&i.push(oe(r)):r.text&&o&&o.text?i[i.length-1]=oe(o.text+r.text):(r.tag&&null==r.key&&null!=t&&(r.key="__vlist"+t+"_"+n+"__"),i.push(r)));return i}function he(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function ve(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&_e(e,t)}function me(e,t,n){n?Bn.$once(e,t):Bn.$on(e,t)}function ye(e,t){Bn.$off(e,t)}function _e(e,t,n){Bn=e,ue(t,n||{},me,ye,e)}function ge(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;return(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0),r},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this;if(!arguments.leng
 th)return n._events=Object.create(null),n;var r=n._events[e];if(!r)return n;if(1===arguments.length)return n._events[e]=null,n;for(var o,i=r.length;i--;)if(o=r[i],o===t||o.fn===t){r.splice(i,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?l(n):n;for(var r=l(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(t,r)}return t}}function be(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=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function we(e){e.prototype._mount=function(e,t){var n=this;return n.$el=e,n.$options.render||(n.$options.render=zn),Oe(n,"beforeMount"),n._watcher=new Ln(n,function(){n._update(n._render(),t)},v),t=!1,null==n.$vnode&&(n._isMounted=!0,Oe(n,"mounted")),n},e.prototype._update=function(e,t){var n=this;n._isMounted&&Oe(n,"beforeUpdate");var r=n.$el,o=n._vno
 de,i=qn;qn=n,n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),qn=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el),n._isMounted&&Oe(n,"updated")},e.prototype._updateFromParent=function(e,t,n,r){var o=this,i=!(!o.$options._renderChildren&&!r);if(o.$options._parentVnode=n,o.$vnode=n,o._vnode&&(o._vnode.parent=n),o.$options._renderChildren=r,e&&o.$options.props){Sn.shouldConvert=!1;for(var a=o.$options._propKeys||[],s=0;s<a.length;s++){var u=a[s];o[u]=L(u,o.$options.props,e,o)}Sn.shouldConvert=!0,o.$options.propsData=e}if(t){var c=o.$options._parentListeners;o.$options._parentListeners=t,_e(o,t,c)}i&&(o.$slots=Be(r,n.context),o.$forceUpdate())},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){Oe(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._is
 BeingDestroyed||e.$options.abstract||i(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,Oe(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}function Oe(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)n[r].call(e);e._hasHookEvent&&e.$emit("hook:"+t)}function xe(e,t,n,r,o){if(e){var i=n.$options._base;if(d(e)&&(e=i.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(e=Ie(e,i,function(){n.$forceUpdate()}),!e)return;Je(e),t=t||{};var a=Te(t,e);if(e.options.functional)return Ee(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),Pe(t);var u=e.options.name||o,c=new Jn("vue-component-"+e.cid+(u?"-"+u:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:o,children:r});return c}}}function Ee(e,t,n,r,o){var i={},a=e.options.props;if(a)for(var s in a)i[s]=L(s,a,t);var u=Object.creat
 e(r),c=function(e,t,n,r){return $e(u,e,t,n,r,!0)},l=e.options.render.call(null,c,{props:i,data:n,parent:r,children:o,slots:function(){return Be(o,r)}});return l instanceof Jn&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function Ce(e,t,n,r){var o=e.componentOptions,i={_isComponent:!0,parent:t,propsData:o.propsData,_componentTag:o.tag,_parentVnode:e,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function ke(e,t,n,r){if(!e.child||e.child._isDestroyed){var o=e.child=Ce(e,qn,n,r);o.$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var i=e;Se(i,i)}}function Se(e,t){var n=t.componentOptions,r=t.child=e.child;r._updateFromParent(n.propsData,n.listeners,t,n.children)}function je(e){e.child._isMounted||(e.child._isMounted=!0,Oe(e.child,"mounted")),e.data.keepAlive&&(e.child._inactive=!1,Oe(e.child,"activated"))}functio
 n Ae(e){e.child._isDestroyed||(e.data.keepAlive?(e.child._inactive=!0,Oe(e.child,"deactivated")):e.child.$destroy())}function Ie(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],o=!0,i=function(n){if(d(n)&&(n=t.extend(n)),e.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(e){},s=e(i,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(i,a),o=!1,e.resolved}e.pendingCallbacks.push(n)}function Te(e,t){var n=t.options.props;if(n){var r={},o=e.attrs,i=e.props,a=e.domProps;if(o||i||a)for(var s in n){var u=en(s);Ne(r,i,s,u,!0)||Ne(r,o,s,u)||Ne(r,a,s,u)}return r}}function Ne(e,t,n,r,o){if(t){if(a(t,n))return e[n]=t[n],o||delete t[n],!0;if(a(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function Pe(e){e.hook||(e.hook={});for(var t=0;t<Hn.length;t++){var n=Hn[t],r=e.hook[n],o=Wn[n];e.hook[n]=r?Me(o,r):o}}function Me(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function $e(e,t,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o
 =Xn),Re(e,t,n,r,o)}function Re(e,t,n,r,o){if(n&&n.__ob__)return zn();if(!t)return zn();Array.isArray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===Xn?r=de(r):o===Gn&&(r=fe(r));var i,a;if("string"==typeof t){var s;a=an.getTagNamespace(t),i=an.isReservedTag(t)?new Jn(an.parsePlatformTagName(t),n,r,void 0,void 0,e):(s=F(e.$options,"components",t))?xe(s,n,e,r,t):new Jn(t,n,r,void 0,void 0,e)}else i=xe(t,n,e,r);return i?(a&&De(i,a),i):zn()}function De(e,t){if(e.ns=t,"foreignObject"!==e.tag&&e.children)for(var n=0,r=e.children.length;n<r;n++){var o=e.children[n];o.tag&&!o.ns&&De(o,t)}}function Fe(e){e.$vnode=null,e._vnode=null,e._staticTrees=null;var t=e.$options._parentVnode,n=t&&t.context;e.$slots=Be(e.$options._renderChildren,n),e.$scopedSlots={},e._c=function(t,n,r,o){return $e(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return $e(e,t,n,r,o,!0)},e.$options.el&&e.$mount(e.$options.el)}function Le(e){function t(e,t,n){if(Array.isArray(e))for(va
 r r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&o(e[r],t+"_"+r,n);else o(e,t,n)}function o(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}e.prototype.$nextTick=function(e){return _n(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots)e.$slots[i]=ae(e.$slots[i]);o&&o.data.scopedSlots&&(e.$scopedSlots=o.data.scopedSlots),r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){if(!an.errorHandler)throw t;an.errorHandler.call(null,t,e),a=e._vnode}return a instanceof Jn||(a=zn()),a.parent=o,a},e.prototype._s=n,e.prototype._v=oe,e.prototype._n=r,e.prototype._e=zn,e.prototype._q=y,e.prototype._i=_,e.prototype._m=function(e,n){var r=this._staticTrees[e];return r&&!n?Array.isArray(r)?ae(r):ie(r):(r=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),t(r,"__static__"+e,!1),r)},e.prototype._o=function(e,n,r){return t(e,"_
 _once__"+n+(r?"_"+r:""),!0),e},e.prototype._f=function(e){return F(this.$options,"filters",e,!0)||on},e.prototype._l=function(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(d(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return n},e.prototype._t=function(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&f(n,r),o(n)||t;var i=this.$slots[e];return i||t},e.prototype._b=function(e,t,n,r){if(n)if(d(n)){Array.isArray(n)&&(n=h(n));for(var o in n)if("class"===o||"style"===o)e[o]=n[o];else{var i=r||an.mustUseProp(t,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={});i[o]=n[o]}}else;return e},e.prototype._k=function(e,t,n){var r=an.keyCodes[t]||n;return Array.isArray(r)?r.indexOf(e)===-1:r!==e}}function Be(e,t){var n={};if(!e)return n;for(var r,o,i=[],a=0,s=e.length;a<s;a++)if(o=e[a]
 ,(o.context===t||o.functionalContext===t)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);"template"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.length&&(1!==i.length||" "!==i[0].text&&!i[0].isComment)&&(n.default=i),n}function Ve(e){e.prototype._init=function(e){var t=this;t._uid=Kn++,t._isVue=!0,e&&e._isComponent?Ue(t,e):t.$options=D(Je(t.constructor),e||{},t),t._renderProxy=t,t._self=t,be(t),ve(t),Oe(t,"beforeCreate"),G(t),Oe(t,"created"),Fe(t)}}function Ue(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Je(e){var t=e.options;if(e.super){var n=e.super.options,r=e.superOptions,o=e.extendOptions;n!==r&&(e.superOptions=n,o.render=t.render,o.staticRenderF
 ns=t.staticRenderFns,o._scopeId=t._scopeId,t=e.options=D(n,o),t.name&&(t.components[t.name]=e))}return t}function ze(e){this._init(e)}function qe(e){e.use=function(e){if(!e.installed){var t=l(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):e.apply(null,t),e.installed=!0,this}}}function We(e){e.mixin=function(e){this.options=D(this.options,e)}}function He(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=D(n.options,e),a.super=n,a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,an._assetTypes.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,o[r]=a,a}}function Ge(e){an._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._bas
 e.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function Xe(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e.test(t)}function Ke(e){var t={};t.get=function(){return an},Object.defineProperty(e,"config",t),e.util=Tn,e.set=A,e.delete=I,e.nextTick=_n,e.options=Object.create(null),an._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,f(e.options.components,Yn),qe(e),We(e),He(e),Ge(e)}function Qe(e){this.instanceId="",this.nodeId=er++,this.parentNode=null,this.nodeType=3,this.text=e}function Ze(e){return new tr.Element(e)}function Ye(e,t){return new tr.Element(e+":"+t)}function et(e){return new tr.TextNode(e)}function tt(e){return new tr.Comment(e)}function nt(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Ze("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function rt(e,t){e.removeC
 hild(t)}function ot(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=Ze("text");n.setAttr("value",t.text),e.appendChild(n)}}function it(e){return e.parentNode}function at(e){return e.nextSibling}function st(e){return e.type}function ut(e,t){e.parentNode.setAttr("value",t)}function ct(e,t,n){e.setAttr(t,n)}function lt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.child||e.elm,a=r.$refs;t?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function ft(e){return null==e}function dt(e){return null!=e}function pt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function ht(e,t,n){var r,o,i={};for(r=t;r<=n;++r)o=e[r].key,dt(o)&&(i[o]=r);return i}function vt(e){function t(e){return new Jn(S.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listener
 s=t,n}function r(e){var t=S.parentNode(e);t&&S.removeChild(t,e)}function i(e,t,n,r,o){if(e.isRootInsert=!o,!a(e,t,n,r)){var i=e.data,s=e.children,u=e.tag;if(dt(u)){e.elm=e.ns?S.createElementNS(e.ns,u):S.createElement(u,e),h(e);var f=i&&i.appendAsTree;f||(dt(i)&&d(e,t),c(n,e.elm,r)),l(e,s,t),f&&(dt(i)&&d(e,t),c(n,e.elm,r))}else e.isComment?(e.elm=S.createComment(e.text),c(n,e.elm,r)):(e.elm=S.createTextNode(e.text),c(n,e.elm,r))}}function a(e,t,n,r){var o=e.data;if(dt(o)){var i=dt(e.child)&&o.keepAlive;if(dt(o=o.hook)&&dt(o=o.init)&&o(e,!1,n,r),dt(e.child))return p(e,t),i&&u(e,t,n,r),!0}}function u(e,t,n,r){for(var o,i=e;i.child;)if(i=i.child._vnode,dt(o=i.data)&&dt(o=o.transition)){for(o=0;o<C.activate.length;++o)C.activate[o](ir,i);t.push(i);break}c(n,e.elm,r)}function c(e,t,n){e&&(n?S.insertBefore(e,t,n):S.appendChild(e,t))}function l(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)i(t[r],n,e.elm,null,!0);else s(e.text)&&S.appendChild(e.elm,S.createTextNode(e.text))}function
  f(e){for(;e.child;)e=e.child._vnode;return dt(e.tag)}function d(e,t){for(var n=0;n<C.create.length;++n)C.create[n](ir,e);x=e.data.hook,dt(x)&&(x.create&&x.create(ir,e),x.insert&&t.push(e))}function p(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.child.$el,f(e)?(d(e,t),h(e)):(lt(e),t.push(e))}function h(e){var t;dt(t=e.context)&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,""),dt(t=qn)&&t!==e.context&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,"")}function v(e,t,n,r,o,a){for(;r<=o;++r)i(n[r],a,e,t)}function m(e){var t,n,r=e.data;if(dt(r))for(dt(t=r.hook)&&dt(t=t.destroy)&&t(e),t=0;t<C.destroy.length;++t)C.destroy[t](e);if(dt(t=e.children))for(n=0;n<e.children.length;++n)m(e.children[n])}function y(e,t,n,o){for(;n<=o;++n){var i=t[n];dt(i)&&(dt(i.tag)?(_(i),m(i)):r(i.elm))}}function _(e,t){if(t||dt(e.data)){var o=C.remove.length+1;for(t?t.listeners+=o:t=n(e.elm,o),dt(x=e.child)&&dt(x=x._vnode)&&dt(x.data)&&_(x,t),x=0;x<C.remove.length;++x)C.remove
 [x](e,t);dt(x=e.data.hook)&&dt(x=x.remove)?x(e,t):t()}else r(e.elm)}function g(e,t,n,r,o){for(var a,s,u,c,l=0,f=0,d=t.length-1,p=t[0],h=t[d],m=n.length-1,_=n[0],g=n[m],w=!o;l<=d&&f<=m;)ft(p)?p=t[++l]:ft(h)?h=t[--d]:pt(p,_)?(b(p,_,r),p=t[++l],_=n[++f]):pt(h,g)?(b(h,g,r),h=t[--d],g=n[--m]):pt(p,g)?(b(p,g,r),w&&S.insertBefore(e,p.elm,S.nextSibling(h.elm)),p=t[++l],g=n[--m]):pt(h,_)?(b(h,_,r),w&&S.insertBefore(e,h.elm,p.elm),h=t[--d],_=n[++f]):(ft(a)&&(a=ht(t,l,d)),s=dt(_.key)?a[_.key]:null,ft(s)?(i(_,r,e,p.elm),_=n[++f]):(u=t[s],pt(u,_)?(b(u,_,r),t[s]=void 0,w&&S.insertBefore(e,_.elm,p.elm),_=n[++f]):(i(_,r,e,p.elm),_=n[++f])));l>d?(c=ft(n[m+1])?null:n[m+1].elm,v(e,c,n,f,m,r)):f>m&&y(e,t,l,d)}function b(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return t.elm=e.elm,void(t.child=e.child);var o,i=t.data,a=dt(i);a&&dt(o=i.hook)&&dt(o=o.prepatch)&&o(e,t);var s=t.elm=e.elm,u=e.children,c=t.children;if(a&&f(t)){for(o=0;o<C.update.length;++o)C.update[o]
 (e,t);dt(o=i.hook)&&dt(o=o.update)&&o(e,t)}ft(t.text)?dt(u)&&dt(c)?u!==c&&g(s,u,c,n,r):dt(c)?(dt(e.text)&&S.setTextContent(s,""),v(s,null,c,0,c.length-1,n)):dt(u)?y(s,u,0,u.length-1):dt(e.text)&&S.setT

<TRUNCATED>