You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by cx...@apache.org on 2017/03/27 07:42:07 UTC

[01/18] incubator-weex git commit: * [ios] fix list insert cell out of bounds crash

Repository: incubator-weex
Updated Branches:
  refs/heads/0.12-dev e1be952b2 -> d07363641


* [ios] fix list insert cell out of bounds crash


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

Branch: refs/heads/0.12-dev
Commit: 1d7998d12339b54a9a4f9364526458200d6f6281
Parents: 69a69c5
Author: acton393 <zh...@gmail.com>
Authored: Fri Mar 24 23:48:44 2017 +0800
Committer: acton393 <zh...@gmail.com>
Committed: Fri Mar 24 23:48:44 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXListComponent.m | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1d7998d1/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
index e019eba..bc31995 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
@@ -407,6 +407,10 @@
     WXAssert(section, @"no section found for section number:%ld", sectionNum);
     NSMutableArray *completedSections;
     BOOL isReload = [section.rows containsObject:cell];
+    if (!isReload && row > [section.rows count]) {
+        // protect crash when row out of bounds
+        return ;
+    }
     if (!isReload) {
         [section.rows insertObject:cell atIndex:row];
         // deep copy


[05/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/showcase/progress.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/showcase/progress.js b/android/playground/app/src/main/assets/vue/showcase/progress.js
new file mode 100644
index 0000000..8ed8cf0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/progress.js
@@ -0,0 +1,336 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(541)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(542)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/progress.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 541:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var INC = 20;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      fullW: 600,
+	      w: 40
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var me = this;
+	    setInterval(function () {
+	      if (me.w >= me.fullW) {
+	        me.w = 0;
+	      }
+	      me.w = me.w + INC >= me.fullW ? me.fullW : me.w + INC;
+	    }, 33);
+	  }
+	};
+
+/***/ },
+
+/***/ 542:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Basic",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    style: {
+	      width: _vm.fullW,
+	      borderColor: '#333',
+	      borderWidth: 1,
+	      borderStyle: 'solid'
+	    }
+	  }, [_h('div', {
+	    style: {
+	      width: _vm.w,
+	      height: 60,
+	      backgroundColor: '#333'
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/style/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/style/index.js b/android/playground/app/src/main/assets/vue/style/index.js
new file mode 100644
index 0000000..a1e6cd0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/index.js
@@ -0,0 +1,1566 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(543)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(544)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(557)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/index.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 543:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "bg-item": {
+	    "width": 690,
+	    "marginBottom": 10
+	  }
+	}
+
+/***/ },
+
+/***/ 544:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    styleBox: __webpack_require__(545),
+	    styleFlex: __webpack_require__(553),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 545:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(546)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(547)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(552)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-box.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 546:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "box": {
+	    "backgroundColor": "#f5f5f5",
+	    "width": 260,
+	    "height": 260,
+	    "paddingLeft": 40,
+	    "paddingTop": 40,
+	    "paddingRight": 40,
+	    "paddingBottom": 40,
+	    "marginLeft": 40,
+	    "marginTop": 40,
+	    "marginRight": 40,
+	    "marginBottom": 40,
+	    "borderWidth": 40,
+	    "borderColor": "#333333",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 547:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 548:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 552:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "Box Model",
+	      "padding-body": "0",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["box"]
+	  }, ["Box"])]), _h('panel', {
+	    attrs: {
+	      "title": "border",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "border-width",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "2px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "10px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderLeftWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderBottomWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-color",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#ddd"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "red"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-style",
+	      "type": ""
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "10px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "just support four edges"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dashed",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": "",
+	      "type": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dotted",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-radius",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      width: "75px",
+	      borderRadius: "38px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderTopLeftRadius: "20px",
+	      borderTopRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderBottomLeftRadius: "20px",
+	      borderBottomRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 553:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(554)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(555)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(556)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-flex.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 554:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "row": {
+	    "flexDirection": "row",
+	    "marginBottom": 10
+	  },
+	  "row-align": {
+	    "height": 160,
+	    "borderWidth": 3,
+	    "borderColor": "#dddddd",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 555:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 556:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "flex-direction",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "row"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "column"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "column"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "justify-content",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "space-between"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "align-items",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "stretch"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex",
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "value": "flex:2"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:2"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "3"
+	    },
+	    attrs: {
+	      "value": "flex:3"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex-wrap",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "wrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:wrap"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "nowrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:nowrap"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 557:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('style-box'), _h('style-flex'), _h('panel', {
+	    attrs: {
+	      "title": "opacity",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      opacity: "1"
+	    },
+	    attrs: {
+	      "value": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      opacity: "0.9"
+	    },
+	    attrs: {
+	      "value": "0.9"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      opacity: "0.5"
+	    },
+	    attrs: {
+	      "value": "0.5"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      opacity: "0.2"
+	    },
+	    attrs: {
+	      "value": "0.2"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "background-color",
+	      "type": "primary"
+	    }
+	  }, [_h('div', [_h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "#333"
+	    },
+	    attrs: {
+	      "value": "#333"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "#333333"
+	    },
+	    attrs: {
+	      "value": "#333333"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "rgb(238, 162, 54)"
+	    },
+	    attrs: {
+	      "value": "rgb()"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "rgba(238, 162, 54, 0.5)"
+	    },
+	    attrs: {
+	      "value": "rgba()"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "red"
+	    },
+	    attrs: {
+	      "value": "red"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/style/style-box.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/style/style-box.js b/android/playground/app/src/main/assets/vue/style/style-box.js
new file mode 100644
index 0000000..d018835
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/style-box.js
@@ -0,0 +1,780 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(546)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(547)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(552)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-box.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 546:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "box": {
+	    "backgroundColor": "#f5f5f5",
+	    "width": 260,
+	    "height": 260,
+	    "paddingLeft": 40,
+	    "paddingTop": 40,
+	    "paddingRight": 40,
+	    "paddingBottom": 40,
+	    "marginLeft": 40,
+	    "marginTop": 40,
+	    "marginRight": 40,
+	    "marginBottom": 40,
+	    "borderWidth": 40,
+	    "borderColor": "#333333",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 547:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 548:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 552:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "Box Model",
+	      "padding-body": "0",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["box"]
+	  }, ["Box"])]), _h('panel', {
+	    attrs: {
+	      "title": "border",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "border-width",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "2px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "10px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderLeftWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderBottomWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-color",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#ddd"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "red"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-style",
+	      "type": ""
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "10px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "just support four edges"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dashed",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": "",
+	      "type": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dotted",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-radius",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      width: "75px",
+	      borderRadius: "38px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderTopLeftRadius: "20px",
+	      borderTopRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderBottomLeftRadius: "20px",
+	      borderBottomRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/style/style-flex.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/style/style-flex.js b/android/playground/app/src/main/assets/vue/style/style-flex.js
new file mode 100644
index 0000000..b5e4e82
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/style-flex.js
@@ -0,0 +1,919 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(554)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(555)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(556)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-flex.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 548:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 554:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "row": {
+	    "flexDirection": "row",
+	    "marginBottom": 10
+	  },
+	  "row-align": {
+	    "height": 160,
+	    "borderWidth": 3,
+	    "borderColor": "#dddddd",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 555:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 556:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "flex-direction",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "row"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "column"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "column"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "justify-content",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "space-between"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "align-items",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "stretch"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex",
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "value": "flex:2"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:2"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "3"
+	    },
+	    attrs: {
+	      "value": "flex:3"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex-wrap",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "wrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:wrap"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "nowrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:nowrap"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/style/style-item.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/style/style-item.js b/android/playground/app/src/main/assets/vue/style/style-item.js
new file mode 100644
index 0000000..35b36fb
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/style-item.js
@@ -0,0 +1,155 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/hello-world-1.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-1.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-1.js
new file mode 100644
index 0000000..4a0919b
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-1.js
@@ -0,0 +1,95 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* template */
+	var __vue_template__ = __webpack_require__(561)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-1.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 561:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', ["Hello World"])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/hello-world-2.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-2.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-2.js
new file mode 100644
index 0000000..de7f9e0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-2.js
@@ -0,0 +1,112 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* template */
+	var __vue_template__ = __webpack_require__(562)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-2.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 562:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      alignItems: "center",
+	      marginTop: "120px"
+	    }
+	  }, [_h('image', {
+	    staticStyle: {
+	      width: "360px",
+	      height: "82px"
+	    },
+	    attrs: {
+	      "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	    }
+	  }), _h('text', {
+	    staticStyle: {
+	      fontSize: "48px"
+	    }
+	  }, ["Hello World"])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file



[07/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/showcase/itemlist.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/showcase/itemlist.js b/android/playground/app/src/main/assets/vue/showcase/itemlist.js
new file mode 100644
index 0000000..036f742
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/itemlist.js
@@ -0,0 +1,1062 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(494)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(495)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(496)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/itemlist.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 494:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "flexRow": {
+	    "flexDirection": "row"
+	  },
+	  "flexColumn": {
+	    "flexDirection": "column"
+	  },
+	  "fixed": {
+	    "position": "fixed",
+	    "bottom": 50,
+	    "left": 50,
+	    "width": 300,
+	    "height": 50,
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "shopImg": {
+	    "width": 220,
+	    "height": 220
+	  },
+	  "list": {
+	    "flexDirection": "column",
+	    "overflow": "hidden",
+	    "width": 750,
+	    "height": 1200,
+	    "backgroundColor": "#dddddd"
+	  },
+	  "cell": {
+	    "backgroundColor": "#dddddd",
+	    "flexDirection": "column",
+	    "width": 750
+	  },
+	  "shopDiv": {
+	    "flexDirection": "column",
+	    "backgroundColor": "#ffffff",
+	    "margin": 5,
+	    "padding": 10,
+	    "borderWidth": 1,
+	    "borderColor": "#cccccc",
+	    "overflow": "visible"
+	  },
+	  "shopRowList": {
+	    "flexDirection": "column",
+	    "borderWidth": 1,
+	    "borderColor": "#cccccc",
+	    "overflow": "visible",
+	    "margin": 5,
+	    "padding": 10,
+	    "backgroundColor": "#ffffff"
+	  },
+	  "shopHeader": {
+	    "flexDirection": "row",
+	    "width": 720
+	  },
+	  "shopFooter": {
+	    "flexDirection": "row",
+	    "width": 720
+	  },
+	  "smallImg": {
+	    "width": 20,
+	    "height": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 495:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      shopList: [{
+	        id: 1,
+	        scopeValue: 1,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Mendeleyev',
+	        PersonVisitTime: 'today',
+	        shopDesc: 'Genius only means hard-working all one\'s life',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1rtOnHpXXXXXLaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB15KrfFVXXXXXJXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1t5YBGVXXXXXcaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 2,
+	        scopeValue: 2,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Napoleon',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'The man who has made up his mind to win will never say "impossible "',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/2655929383/TB2.qITjpXXXXcIXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/imgextra/i3/2655929383/TB2eWwZjpXXXXbHXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2655929383/TB2tgQWjpXXXXbZXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 3,
+	        scopeValue: 3,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Balzac',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'There is no such thing as a great talent without great will - power',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/TB1AFz9LXXXXXbrXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2557954751/TB2is2njXXXXXatXpXXXXXXXXXX_!!2557954751.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2557954751/TB2PNYGjXXXXXbXXXXXXXXXXXXX_!!2557954751.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 4,
+	        scopeValue: 4,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Thomas Carlyle',
+	        PersonVisitTime: '3 day ago',
+	        shopDesc: 'Cease to struggle and you cease to live',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2zbwdfXXXXXa4XpXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2L7ZAfXXXXXXOXXXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2p9wufXXXXXbiXXXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 5,
+	        scopeValue: 5,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Addison',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'A strong man will struggle with the storms of fate',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/bao/uploaded/i3/TB1MQ8_KVXXXXaLXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/53218032/TB2bGSqiXXXXXXyXpXXXXXXXXXX_!!53218032.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1kP2zKFXXXXbIXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 6,
+	        scopeValue: 1,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Ruskin',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'Living without an aim is like sailing without a compass',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB11yFnHXXXXXakaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/32720628/TB2CRJUcXXXXXXwXpXXXXXXXXXX_!!32720628.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB17LUzHXXXXXcEaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 7,
+	        scopeValue: 2,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Yiming',
+	        PersonVisitTime: 'today',
+	        shopDesc: 'Live a noble and honest life. Reviving past times in your old age will help you to enjoy your life again',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB1hvNoJXXXXXaMaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/2058567235/TB2V8iygFXXXXaRXpXXXXXXXXXX_!!2058567235.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2058567235/TB2im1QgFXXXXX8XXXXXXXXXXXX_!!2058567235.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 8,
+	        scopeValue: 3,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Brown',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'Behind every successful man there\'s a lot u unsuccessful years',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/bao/uploaded/i1/TB18BZ2KFXXXXb8XFXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/2775383848/TB2r012jVXXXXXHXpXXXXXXXXXX_!!2775383848.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/imgextra/i3/2775383848/TB2iI9VjVXXXXaoXpXXXXXXXXXX_!!2775383848.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 9,
+	        scopeValue: 4,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'YIMING',
+	        PersonVisitTime: 'today',
+	        shopDesc: 'Enrich your life today,. yesterday is history.tomorrow is mystery',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/bao/uploaded/i1/TB1JB.rLpXXXXXLXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/2702739128/TB2JdvmjVXXXXXjXXXXXXXXXXXX_!!2702739128.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2702739128/TB2A.e6jVXXXXXGXpXXXXXXXXXX_!!2702739128.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 10,
+	        scopeValue: 5,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'YIMING',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'The secret of success is constancy to purpose',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/bao/uploaded/i3/TB17zXOGXXXXXbEXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/2265445951/TB22ACTbFXXXXXBXXXXXXXXXXXX_!!2265445951.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/imgextra/i3/2265445951/TB2oXqUbFXXXXXIXXXXXXXXXXXX_!!2265445951.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+	      }]
+	    };
+	  },
+	  methods: {
+	    loadmore: function loadmore(e) {
+	      modal.toast({
+	        'message': 'loadmore',
+	        'duration': 2.0
+	      });
+	    },
+	    oncellclick: function oncellclick(id) {
+	      modal.toast({
+	        'message': 'row ' + id + ' clicked',
+	        'duration': 2.0
+	      });
+	    }
+	  }
+
+	};
+
+/***/ },
+
+/***/ 496:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list', {
+	    staticClass: ["list"],
+	    attrs: {
+	      "loadmoreoffset": "2000"
+	    },
+	    on: {
+	      "loadmore": _vm.loadmore
+	    }
+	  }, [_vm._l((_vm.shopList), function(item) {
+	    return _h('cell', {
+	      staticClass: ["cell"],
+	      attrs: {
+	        "scope": item.scopeValue
+	      },
+	      on: {
+	        "click": function($event) {
+	          _vm.oncellclick(item.id)
+	        }
+	      }
+	    }, [_h('div', {
+	      staticClass: ["shopDiv"]
+	    }, [_h('div', {
+	      staticClass: ["shopHeader"],
+	      staticStyle: {
+	        flexDirection: "row"
+	      }
+	    }, [_h('div', {
+	      staticStyle: {
+	        flex: "2",
+	        flexDirection: "row"
+	      }
+	    }, [_h('div', [_h('image', {
+	      staticStyle: {
+	        width: "60",
+	        height: "60"
+	      },
+	      attrs: {
+	        "src": item.PersonPhoto
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        flexDirection: "column",
+	        marginLeft: "5"
+	      }
+	    }, [_h('div', {
+	      staticStyle: {
+	        marginTop: "5"
+	      }
+	    }, [_h('text', {
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.PersonName)])]), _h('div', {
+	      staticStyle: {
+	        marginTop: "5"
+	      }
+	    }, [_h('text', {
+	      staticStyle: {
+	        fontSize: "20",
+	        color: "#cccccc"
+	      }
+	    }, [_vm._s(item.PersonVisitTime)])])])]), _vm._m(0, true)]), _h('div', {
+	      staticClass: ["shopBody"],
+	      staticStyle: {
+	        flexDirection: "column"
+	      }
+	    }, [_h('div', {
+	      staticClass: ["descDiv"],
+	      staticStyle: {
+	        marginTop: "10",
+	        marginLeft: "10"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopDesc"],
+	      staticStyle: {
+	        fontSize: "25"
+	      }
+	    }, [_vm._s(item.shopDesc)])]), _h('div', {
+	      staticStyle: {
+	        flexDirection: "row"
+	      }
+	    }, [_vm._l((item.shopImgList), function(img) {
+	      return _h('div', {
+	        staticClass: ["imgDiv"],
+	        staticStyle: {
+	          flex: "1",
+	          flexDirection: "column",
+	          margin: "10"
+	        }
+	      }, [_h('div', [_h('image', {
+	        staticClass: ["shopImg"],
+	        style: {
+	          width: img.shopImgWidth,
+	          height: img.shopImgHeight
+	        },
+	        attrs: {
+	          "src": img.shopImg
+	        }
+	      })]), _vm._m(1, true)])
+	    })])]), _h('div', {
+	      staticClass: ["shopFooter"],
+	      staticStyle: {
+	        flexDirection: "row",
+	        marginTop: "10",
+	        marginLeft: "10",
+	        justifyContent: "flex-end"
+	      }
+	    }, [_h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shopLikeImg", "smallImg"],
+	      attrs: {
+	        "src": item.shopLikeImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "15"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopLikeText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shopLikeText)])]), _h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shopCommentImg", "smallImg"],
+	      attrs: {
+	        "src": item.shopCommentImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "15"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopCommentText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shopCommentText)])]), _h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shopLookImg", "smallImg"],
+	      attrs: {
+	        "src": item.shopLookImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "15"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopLookText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shopLookText)])]), _h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shareImg", "smallImg"],
+	      attrs: {
+	        "src": item.shareImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "20"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shareText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shareText)])])])])])
+	  })])
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      flex: "5",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row",
+	      marginLeft: "10",
+	      marginTop: "10"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i4/TB1zkDeIFXXXXXrXVXX07tlTXXX-200-200.png_88x88xz.jpg"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["Hope"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "90",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i2/TB1hRb1IXXXXXX3XVXXXQaP.pXX-87-87.jpeg"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["Mem"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "170",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i3/TB1DGkJJFXXXXaZXFXX07tlTXXX-200-200.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["auth"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "250",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["Friend"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "330",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["issue"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "410",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://gtms02.alicdn.com/tps/i2/TB11ZZfIVXXXXbMXFXXEDhGGXXX-32-32.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["super"])])])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      flex: "1",
+	      marginTop: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flex: "1",
+	      justifyContent: "center",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', {
+	    staticStyle: {
+	      marginLeft: "5"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      fontSize: "20",
+	      textAlign: "center"
+	    }
+	  }, ["Up"])])]), _h('div', {
+	    staticStyle: {
+	      flex: "1",
+	      justifyContent: "center",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', {
+	    staticStyle: {
+	      marginLeft: "5"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      fontSize: "20",
+	      textAlign: "center"
+	    }
+	  }, ["down"])])])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file


[02/18] incubator-weex git commit: Merge branch '0.11-dev' of https://github.com/acton393/incubator-weex into 0.11-dev

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

Branch: refs/heads/0.12-dev
Commit: 373ae386a24cd7dd7d57956baa508df279bac3fd
Parents: 66aeba2 1d7998d
Author: cxfeng <cx...@apache.org>
Authored: Fri Mar 24 23:50:59 2017 +0800
Committer: cxfeng <cx...@apache.org>
Committed: Fri Mar 24 23:50:59 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXListComponent.m | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------



[13/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..00a7fbb
--- /dev/null
+++ b/android/playground/app/src/main/assets/module/websocket-demo.js
@@ -0,0 +1,2412 @@
+/******/ (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__(228)
+	var __weex_style__ = __webpack_require__(229)
+	var __weex_script__ = __webpack_require__(230)
+
+	__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"
+	  },
+	  "panel-body": {}
+	}
+
+/***/ },
+/* 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 */,
+/* 227 */,
+/* 228 */
+/***/ 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}
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 229 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "input": {
+	    "fontSize": 40,
+	    "height": 80,
+	    "width": 600
+	  }
+	}
+
+/***/ },
+/* 230 */
+/***/ 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/93063f14/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..33b2729 100644
--- a/android/playground/app/src/main/assets/showcase/calculator.js
+++ b/android/playground/app/src/main/assets/showcase/calculator.js
@@ -44,9 +44,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__(231)
+	var __weex_style__ = __webpack_require__(232)
+	var __weex_script__ = __webpack_require__(233)
 
 	__weex_define__('@weex-component/603eadccfc85e9db6c45c597933fe8fe', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2164,7 +2164,16 @@
 /* 219 */,
 /* 220 */,
 /* 221 */,
-/* 222 */
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2414,7 +2423,7 @@
 	}
 
 /***/ },
-/* 223 */
+/* 232 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2447,7 +2456,7 @@
 	}
 
 /***/ },
-/* 224 */
+/* 233 */
 /***/ 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/93063f14/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..f06bb81 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
@@ -45,10 +45,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__(234)
+	var __weex_template__ = __webpack_require__(238)
+	var __weex_style__ = __webpack_require__(239)
+	var __weex_script__ = __webpack_require__(240)
 
 	__weex_define__('@weex-component/f7fd132bdb4ce0ff6745c3887b3163e2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -93,12 +93,12 @@
 
 /***/ },
 
-/***/ 225:
+/***/ 234:
 /***/ 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__(235)
+	var __weex_style__ = __webpack_require__(236)
+	var __weex_script__ = __webpack_require__(237)
 
 	__weex_define__('@weex-component/we-dropdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 226:
+/***/ 235:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -222,7 +222,7 @@
 
 /***/ },
 
-/***/ 227:
+/***/ 236:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -306,7 +306,7 @@
 
 /***/ },
 
-/***/ 228:
+/***/ 237:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -404,7 +404,7 @@
 
 /***/ },
 
-/***/ 229:
+/***/ 238:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -502,7 +502,7 @@
 
 /***/ },
 
-/***/ 230:
+/***/ 239:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -575,7 +575,7 @@
 
 /***/ },
 
-/***/ 231:
+/***/ 240:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -586,7 +586,7 @@
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
-	__webpack_require__(225);
+	__webpack_require__(234);
 
 	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/93063f14/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..7b4b48c 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
@@ -45,9 +45,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__(235)
+	var __weex_style__ = __webpack_require__(236)
+	var __weex_script__ = __webpack_require__(237)
 
 	__weex_define__('@weex-component/ffbcbcf1bd6120b070f00ceafeb0160e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 226:
+/***/ 235:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -172,7 +172,7 @@
 
 /***/ },
 
-/***/ 227:
+/***/ 236:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -256,7 +256,7 @@
 
 /***/ },
 
-/***/ 228:
+/***/ 237:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..06fa880 100644
--- a/android/playground/app/src/main/assets/showcase/minesweeper.js
+++ b/android/playground/app/src/main/assets/showcase/minesweeper.js
@@ -45,9 +45,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__(241)
+	var __weex_style__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/c0df89e239d226d3a0c6f418314cda04', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 232:
+/***/ 241:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +130,7 @@
 
 /***/ },
 
-/***/ 233:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -164,7 +164,7 @@
 
 /***/ },
 
-/***/ 234:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..5bbf0d8 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
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/df4a1d587e74e64ad99011cd2bcf06b7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -83,7 +83,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..112fb13 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
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/a29a28169794adc0c69ea3ddb07ed6a2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -64,7 +64,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -84,7 +84,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -114,11 +114,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -134,7 +134,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -200,7 +200,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..14ec49b 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
@@ -45,10 +45,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__(249)
+	var __weex_template__ = __webpack_require__(250)
+	var __weex_style__ = __webpack_require__(251)
+	var __weex_script__ = __webpack_require__(252)
 
 	__weex_define__('@weex-component/81fdd9b8b8bce1b304791aba10e15462', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -203,7 +203,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -235,12 +235,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -256,7 +256,7 @@
 
 /***/ },
 
-/***/ 241:
+/***/ 250:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -299,7 +299,7 @@
 
 /***/ },
 
-/***/ 242:
+/***/ 251:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -315,7 +315,7 @@
 
 /***/ },
 
-/***/ 243:
+/***/ 252:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..a5b54d0 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
@@ -45,10 +45,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__(246)
+	var __weex_template__ = __webpack_require__(253)
+	var __weex_style__ = __webpack_require__(254)
+	var __weex_script__ = __webpack_require__(255)
 
 	__weex_define__('@weex-component/b33b928e3758831c19b31a06d4f5e634', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 244:
+/***/ 253:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -295,7 +295,7 @@
 
 /***/ },
 
-/***/ 245:
+/***/ 254:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -343,7 +343,7 @@
 
 /***/ },
 
-/***/ 246:
+/***/ 255:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..4e9aca6 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
@@ -45,9 +45,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__(256)
+	var __weex_style__ = __webpack_require__(257)
+	var __weex_script__ = __webpack_require__(258)
 
 	__weex_define__('@weex-component/160152a0a99527e4b8664677a7d4610b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 247:
+/***/ 256:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -131,7 +131,7 @@
 
 /***/ },
 
-/***/ 248:
+/***/ 257:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -179,7 +179,7 @@
 
 /***/ },
 
-/***/ 249:
+/***/ 258:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..e275cf1 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
@@ -45,11 +45,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__(246)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(259)
+	var __weex_style__ = __webpack_require__(260)
+	var __weex_script__ = __webpack_require__(261)
 
 	__weex_define__('@weex-component/3a0fc3e27dd7bb14f409fca1ac4baac7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +68,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +88,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +118,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +138,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +204,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +236,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,7 +257,7 @@
 
 /***/ },
 
-/***/ 250:
+/***/ 259:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -312,7 +312,7 @@
 
 /***/ },
 
-/***/ 251:
+/***/ 260:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -324,7 +324,7 @@
 
 /***/ },
 
-/***/ 252:
+/***/ 261:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..ad689a0 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
@@ -45,10 +45,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__(246)
+	var __weex_template__ = __webpack_require__(262)
+	var __weex_style__ = __webpack_require__(263)
+	var __weex_script__ = __webpack_require__(264)
 
 	__weex_define__('@weex-component/4ee2a41c614b4058c24278d8a41a24eb', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 253:
+/***/ 262:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -263,7 +263,7 @@
 
 /***/ },
 
-/***/ 254:
+/***/ 263:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -289,7 +289,7 @@
 
 /***/ },
 
-/***/ 255:
+/***/ 264:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..23f0fac 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
@@ -45,11 +45,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__(265)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(268)
+	var __weex_style__ = __webpack_require__(269)
+	var __weex_script__ = __webpack_require__(270)
 
 	__weex_define__('@weex-component/5efec0a39c4d8f94c5e8f7170c422834', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +68,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +88,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +118,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +138,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +204,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +236,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,11 +257,11 @@
 
 /***/ },
 
-/***/ 256:
+/***/ 265:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_script__ = __webpack_require__(267)
 
 	__weex_define__('@weex-component/link', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -277,7 +277,7 @@
 
 /***/ },
 
-/***/ 257:
+/***/ 266:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -296,7 +296,7 @@
 
 /***/ },
 
-/***/ 258:
+/***/ 267:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -320,7 +320,7 @@
 
 /***/ },
 
-/***/ 259:
+/***/ 268:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -394,7 +394,7 @@
 
 /***/ },
 
-/***/ 260:
+/***/ 269:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -450,7 +450,7 @@
 
 /***/ },
 
-/***/ 261:
+/***/ 270:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..cfe73f4 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
@@ -44,9 +44,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__(271)
+	var __weex_style__ = __webpack_require__(272)
+	var __weex_script__ = __webpack_require__(273)
 
 	__weex_define__('@weex-component/5e0e45b25bc002a471e5967e4452d911', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3007,7 +3007,16 @@
 /* 259 */,
 /* 260 */,
 /* 261 */,
-/* 262 */
+/* 262 */,
+/* 263 */,
+/* 264 */,
+/* 265 */,
+/* 266 */,
+/* 267 */,
+/* 268 */,
+/* 269 */,
+/* 270 */,
+/* 271 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3026,7 +3035,7 @@
 	}
 
 /***/ },
-/* 263 */
+/* 272 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3040,7 +3049,7 @@
 	}
 
 /***/ },
-/* 264 */
+/* 273 */
 /***/ 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/93063f14/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..6b1e1f5 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
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_script__ = __webpack_require__(267)
 
 	__weex_define__('@weex-component/4921d4510db0a127687a84f88dda307c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 257:
+/***/ 266:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -82,7 +82,7 @@
 
 /***/ },
 
-/***/ 258:
+/***/ 267:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';



[17/18] incubator-weex git commit: * [example] update image demo

Posted by cx...@apache.org.
* [example] update image demo


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

Branch: refs/heads/0.12-dev
Commit: 5cb0819472bf7db3d2843e1634f9d7fea1dee368
Parents: 5a992e0
Author: xkli <56...@qq.com>
Authored: Mon Mar 27 15:12:52 2017 +0800
Committer: xkli <56...@qq.com>
Committed: Mon Mar 27 15:12:52 2017 +0800

----------------------------------------------------------------------
 android/playground/app/src/main/assets/component/image-demo.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5cb08194/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..82e2727 100644
--- a/android/playground/app/src/main/assets/component/image-demo.js
+++ b/android/playground/app/src/main/assets/component/image-demo.js
@@ -2319,7 +2319,7 @@
 	__webpack_require__(4);
 	module.exports = {
 	  data: function () {return {
-	    img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    img: 'http://gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
 	  }}
 	};}
 	/* generated by weex-loader */


[08/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/index.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/index.js b/android/playground/app/src/main/assets/vue/index.js
new file mode 100644
index 0000000..2270e82
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/index.js
@@ -0,0 +1,496 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(468)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(480)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/index.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 421:
+/***/ function(module, exports) {
+
+	exports.getBaseURL = function (vm) {
+	  var bundleUrl = vm.$getConfig().bundleUrl;
+	  var nativeBase;
+	  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/')>=0;
+	  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+	  if (isAndroidAssets) {
+	    nativeBase = 'file://assets/';
+	  }
+	  else if (isiOSAssets) {
+	    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+	  }
+	  else {
+	    var host = 'localhost:12580';
+	    var matches = /\/\/([^\/]+?)\//.exec(vm.$getConfig().bundleUrl);
+	    if (matches && matches.length >= 2) {
+	      host = matches[1];
+	    }
+	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
+	  }
+	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  // in Native
+	  var base = nativeBase;
+	  if (typeof window === 'object') {
+	    // in Browser or WebView
+	    base = h5Base;
+	  }
+	  return base
+	}
+
+
+/***/ },
+
+/***/ 468:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      items: [
+	      // common
+	      { name: 'vue/syntax/hello-world', title: 'Hello World' }, { name: 'vue/style/index', title: 'Common Style' }, { name: 'vue/animation', title: 'Animation' },
+
+	      // component
+	      { name: 'vue/components/text', title: 'Text' }, { name: 'vue/components/image', title: 'Image' }, { name: 'vue/components/input', title: 'Input' }, { name: 'vue/components/scroller', title: 'Scroller' }, { name: 'vue/components/list', title: 'List' }, { name: 'vue/components/slider', title: 'Slider' }, { name: 'vue/components/a', title: 'A' }, { name: 'vue/components/video', title: 'Video' }, { name: 'vue/components/countdown', title: 'Countdown' }, { name: 'vue/components/marquee', title: 'Marquee' }, { name: 'vue/components/web', title: 'Web' }, { name: 'vue/components/navigator', title: 'Navigator' }, { name: 'vue/components/tabbar', title: 'Tabbar' },
+
+	      // module
+	      { name: 'vue/modules/instance-api', title: 'Instance API' }, { name: 'vue/modules/modal', title: 'Modal' }, { name: 'vue/modules/stream', title: 'Stream' }, { name: 'vue/modules/storage', title: 'Storage' },
+	      // {name: 'module/clipboard', title: 'Clipboard'}, // 0.8 , developing
+
+	      // showcase
+	      { name: 'vue/showcase/progress', title: 'Progress Bar' }, { name: 'vue/showcase/itemlist', title: 'List (Advanced)' }, { name: 'vue/showcase/calculator', title: 'Calculator' }]
+	    };
+	  },
+	  components: {
+	    exampleList: __webpack_require__(469)
+	  }
+	};
+
+/***/ },
+
+/***/ 469:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(470)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(479)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/example-list.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 470:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var getBaseURL = __webpack_require__(421).getBaseURL;
+	module.exports = {
+	  props: {
+	    dir: {
+	      default: 'examples'
+	    }, // examples, test ...
+	    items: {
+	      default: [{ name: 'hello', title: 'Hello World', url: '' }]
+	    }
+	  },
+	  components: {
+	    exampleListItem: __webpack_require__(471)
+	  },
+	  created: function created() {
+	    var base = getBaseURL(this);
+	    for (var i in this.items) {
+	      var item = this.items[i];
+	      if (!item.url) {
+	        item.url = base + item.name + '.js';
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 471:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(472)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(473)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(478)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/example-list-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 472:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item-txt": {
+	    "fontSize": 48,
+	    "color": "#555555"
+	  }
+	}
+
+/***/ },
+
+/***/ 473:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var event = __weex_require_module__('event');
+	module.exports = {
+	  props: {
+	    title: { default: '456' },
+	    url: { default: '' }
+	  },
+	  components: {
+	    listItem: __webpack_require__(474)
+	  },
+	  methods: {
+	    redirect: function redirect() {
+	      event.openURL(this.url);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 474:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(475)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(476)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(477)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/list-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 475:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd"
+	  }
+	}
+
+/***/ },
+
+/***/ 476:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    bgColor: { default: '#ffffff' }
+	  },
+	  methods: {
+	    click: function click() {
+	      this.$emit('click');
+	    },
+	    touchstart: function touchstart() {
+	      // FIXME android touch
+	      // TODO adaptive opposite bgColor
+	      // this.bgColor = '#e6e6e6';
+	    },
+	    touchend: function touchend() {
+	      // FIXME android touchend not triggered
+	      // this.bgColor = '#ffffff';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 477:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["item"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    on: {
+	      "click": _vm.click,
+	      "touchstart": _vm.touchstart,
+	      "touchend": _vm.touchend
+	    }
+	  }, [_vm._t("default")])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 478:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list-item', {
+	    on: {
+	      "click": _vm.redirect
+	    }
+	  }, [_h('text', {
+	    staticClass: ["item-txt"]
+	  }, [_vm._s(_vm.title)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 479:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list', [_vm._l((_vm.items), function(item) {
+	    return _h('cell', {
+	      appendAsTree: true,
+	      attrs: {
+	        "append": "tree"
+	      }
+	    }, [_h('example-list-item', {
+	      attrs: {
+	        "title": item.title,
+	        "url": item.url
+	      }
+	    })])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 480:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('example-list', {
+	    attrs: {
+	      "items": _vm.items,
+	      "dir": "examples"
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/modules/clipboard.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/modules/clipboard.js b/android/playground/app/src/main/assets/vue/modules/clipboard.js
new file mode 100644
index 0000000..ea4f907
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/clipboard.js
@@ -0,0 +1,691 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(481)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(482)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/clipboard.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 481:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	var clipboard = __weex_require_module__('clipboard');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      textToCopy: '',
+	      textFromPaste: '',
+	      tips: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393),
+	    button: __webpack_require__(387)
+	  },
+	  mounted: function mounted() {
+	    this.tips = "1. Just click COPY button. It will auto generate a string with random text, and copy to system clipboard. \n 2. do copy in another app, then come back and click PASTE button.";
+	  },
+	  methods: {
+	    doCopy: function doCopy() {
+	      modal.toast({ 'message': 'doCopy!', duration: 0.5 });
+	      textToCopy = "autoGenerateTextToCopy" + Math.random();
+	      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.";
+	    },
+	    doPaste: function doPaste() {
+	      var me = this;
+	      modal.toast({ 'message': 'doPaste!', duration: 0.5 });
+	      clipboard.getString(function (ret) {
+	        console.log("paste result is " + JSON.stringify(ret));
+	        me.textFromPaste = ret.data;
+	        me.tips = "Paste done. Only support native(Android/iOS) NOW. according to security reason, paste in html5 is not supported.";
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 482:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Clipboard",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "Copy to clipboard5"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      lineHeight: "40px",
+	      fontSize: "28px"
+	    }
+	  }, [_vm._s(_vm.textToCopy)]), _h('button', {
+	    attrs: {
+	      "type": "info",
+	      "size": "middle",
+	      "value": "Copy"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.doCopy($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Paste from clipboard"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      lineHeight: "40px",
+	      fontSize: "28px"
+	    }
+	  }, [_vm._s(_vm.textFromPaste)]), _h('button', {
+	    attrs: {
+	      "type": "info",
+	      "size": "middle",
+	      "value": "Paste"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.doPaste($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Result"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "value": _vm.tips
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/modules/instance-api.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/modules/instance-api.js b/android/playground/app/src/main/assets/vue/modules/instance-api.js
new file mode 100644
index 0000000..9cff934
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/instance-api.js
@@ -0,0 +1,304 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(483)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(484)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/instance-api.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 483:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      config: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var config = this.$getConfig();
+	    console.log('config', JSON.stringify(config));
+	    this.config = JSON.stringify(config, null, 2);
+	  }
+	};
+
+/***/ },
+
+/***/ 484:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "$getConfig()",
+	      "type": "primary"
+	    }
+	  }, [_h('text', [_vm._s(_vm.config)])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/modules/modal.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/modules/modal.js b/android/playground/app/src/main/assets/vue/modules/modal.js
new file mode 100644
index 0000000..5b8805f
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/modal.js
@@ -0,0 +1,581 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(485)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(486)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/modal.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 485:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {};
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    toast: function toast(msg, duration) {
+	      if (!msg || typeof msg !== 'string') {
+	        msg = 'I am Toast show!';
+	      }
+	      duration = duration || 2;
+	      modal.toast({
+	        'message': msg,
+	        'duration': duration
+	      });
+	    },
+	    alert: function alert(msg, okTitle, cancelTitle) {
+	      if (!msg || typeof msg !== 'string') {
+	        msg = "I am Alert!";
+	      }
+	      modal.alert({
+	        'message': msg,
+	        'okTitle': okTitle,
+	        'cancelTitle': cancelTitle
+	      }, function () {
+	        modal.toast({ message: "Click Alert OK Bnt!!" });
+	      });
+	    },
+	    confirm: function confirm(msg, okTitle, cancelTitle) {
+	      if (!msg || typeof msg !== 'string') {
+	        msg = "I am Confirm!";
+	      }
+	      okTitle = okTitle || "OK";
+	      cancelTitle = cancelTitle || "Cancel";
+	      modal.confirm({
+	        'message': msg,
+	        'okTitle': okTitle,
+	        'cancelTitle': cancelTitle
+	      }, function (result) {
+	        modal.toast({ message: "Click Confirm  " + JSON.stringify(result) });
+	      });
+	    },
+	    prompt: function prompt() {
+	      modal.prompt({
+	        'message': 'I am Prompt!',
+	        'okTitle': 'ok',
+	        'cancelTitle': 'cancel'
+	      }, function (result) {
+	        modal.toast({ message: "Click Prompt  " + JSON.stringify(result) });
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 486:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Toast",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "type": "primary",
+	      "value": "Toast"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.toast($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Dialog",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "success",
+	      "value": "Alert"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.alert($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "value": "Confirm"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.confirm($event)
+	      }
+	    }
+	  }), _h('button', {
+	    attrs: {
+	      "type": "warning",
+	      "value": "Prompt"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.prompt($event)
+	      }
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/modules/storage.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/modules/storage.js b/android/playground/app/src/main/assets/vue/modules/storage.js
new file mode 100644
index 0000000..13a3d93
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/storage.js
@@ -0,0 +1,381 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(487)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(488)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/storage.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 487:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var storage = __weex_require_module__('storage');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      setItemResult: 'loading',
+	      getItemResult: 'loading',
+	      removeItemResult: 'loading',
+	      lengthResult: 'loading',
+	      getAllKeysResult: 'loading'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var me = this;
+
+	    //setItem
+	    storage.setItem('foo', 'foo-value', function (e) {
+	      console.log('set [foo<->foo-value]:' + JSON.stringify(e));
+	      me.setItemResult = 'foo:' + JSON.stringify(e) + '\n';
+	    });
+	    storage.setItem('bar', 'bar-value', function (e) {
+	      console.log('set [bar<->bar-value]:' + JSON.stringify(e));
+	      me.setItemResult = me.setItemResult + 'bar:' + JSON.stringify(e);
+	    });
+
+	    //getItem
+	    storage.getItem('foo', function (e) {
+	      console.log('get foo result:' + JSON.stringify(e));
+	      me.getItemResult = 'get foo,value is ' + e.data + '\n';
+	    });
+	    storage.getItem('bar', function (e) {
+	      console.log('get bar result:' + JSON.stringify(e));
+	      me.getItemResult += 'get bar,value is ' + e.data;
+	    });
+
+	    //length
+	    storage.length(function (e) {
+	      console.log('length:' + JSON.stringify(e));
+	      me.lengthResult = 'current length is ' + e.data;
+	    });
+
+	    //getAllKeys
+	    storage.getAllKeys(function (e) {
+	      console.log('getAllKeys:' + JSON.stringify(e));
+	      me.getAllKeysResult = '' + e.data;
+	      //me.getAllKeysResult +=' '+ typeof e.data
+	    });
+
+	    //removeItem
+	    storage.removeItem('foo', function (e) {
+	      console.log('remove foo:' + JSON.stringify(e));
+	      me.removeItemResult = 'remove item foo ' + e.result;
+	    });
+	  }
+	};
+
+/***/ },
+
+/***/ 488:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "storage API",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "setItem"
+	    }
+	  }, [_h('text', [_vm._s(_vm.setItemResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "getItem"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getItemResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "length"
+	    }
+	  }, [_h('text', [_vm._s(_vm.lengthResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "getAllKeys"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getAllKeysResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "removeItem"
+	    }
+	  }, [_h('text', [_vm._s(_vm.removeItemResult)])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/modules/stream.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/modules/stream.js b/android/playground/app/src/main/assets/vue/modules/stream.js
new file mode 100644
index 0000000..785a8bf
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/stream.js
@@ -0,0 +1,477 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(489)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(490)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/stream.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 489:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var stream = __weex_require_module__('stream');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      getJsonpResult: 'loading...',
+	      getResult: 'loading...',
+	      postResult: 'loading...',
+	      putResult: 'loading...',
+	      deleteResult: 'loading...',
+	      headResult: 'loading...',
+	      patchResult: 'loading...'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var me = this;
+	    var GET_URL_JSONP = 'http://jsfiddle.net/echo/jsonp/?callback=anything&result=content_in_response';
+	    var GET_URL = 'http://httpbin.org/get';
+	    var POST_URL = 'http://httpbin.org/post';
+	    var PUT_URL = 'http://httpbin.org/put';
+	    var DELETE_URL = 'http://httpbin.org/delete';
+	    var HEAD_URL = 'http://httpbin.org/status/418';
+	    var PATCH_URL = 'http://httpbin.org/patch';
+
+	    stream.fetch({
+	      method: 'GET',
+	      url: GET_URL_JSONP,
+	      type: 'jsonp'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.getJsonpResult = "request failed";
+	      } else {
+	        console.log('get:' + ret);
+	        me.getJsonpResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get jsonp in progress:' + response.length);
+	      me.getJsonpResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'GET',
+	      url: GET_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.getResult = "request failed";
+	      } else {
+	        console.log('get:' + ret);
+	        me.getResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.getResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'POST',
+	      url: POST_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.postResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.postResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.postResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'PUT',
+	      url: PUT_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.putResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.putResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.putResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'DELETE',
+	      url: DELETE_URL,
+	      type: 'json'
+	    }, function (ret) {
+
+	      if (!ret.ok) {
+	        me.deleteResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.deleteResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.deleteResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'HEAD',
+	      url: HEAD_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (ret.statusText !== 'I\'m a teapot') {
+	        me.headResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.headResult = ret.statusText;
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.headResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'PATCH',
+	      url: PATCH_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.patchResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.patchResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.patchResult = "bytes received:" + response.length;
+	    });
+	  }
+	};
+
+/***/ },
+
+/***/ 490:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "stream.fetch",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "method = GET"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = GET / type = jsonp"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getJsonpResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = POST"
+	    }
+	  }, [_h('text', [_vm._s(_vm.postResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = PUT"
+	    }
+	  }, [_h('text', [_vm._s(_vm.putResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = DELETE"
+	    }
+	  }, [_h('text', [_vm._s(_vm.deleteResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = HEAD"
+	    }
+	  }, [_h('text', [_vm._s(_vm.headResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = PATCH"
+	    }
+	  }, [_h('text', [_vm._s(_vm.patchResult)])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/showcase/calculator.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/showcase/calculator.js b/android/playground/app/src/main/assets/vue/showcase/calculator.js
new file mode 100644
index 0000000..eb5e7c0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/calculator.js
@@ -0,0 +1,340 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(491)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(492)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(493)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/calculator.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 491:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "row": {
+	    "flexDirection": "row"
+	  },
+	  "result": {
+	    "textAlign": "right",
+	    "backgroundColor": "#666666",
+	    "fontSize": 40,
+	    "color": "#FFFFFF",
+	    "height": 100,
+	    "padding": 30,
+	    "margin": 5
+	  },
+	  "btn": {
+	    "flex": 1,
+	    "textAlign": "center",
+	    "backgroundColor": "#eeeeee",
+	    "fontSize": 36,
+	    "height": 100,
+	    "padding": 30,
+	    "margin": 5
+	  },
+	  "btn-operator": {
+	    "backgroundColor": "#666699",
+	    "fontSize": 40,
+	    "color": "#FFFFFF"
+	  }
+	}
+
+/***/ },
+
+/***/ 492:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var OP = ['+', '-', '*', '/'];
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      result: '',
+	      inputs: []
+	    };
+	  },
+	  methods: {
+	    input: function input(e) {
+	      modal.toast({ message: 'input: ' + e.target.attr.value, duration: 1 });
+	      var value = e.target.attr['value'];
+	      var inputs = this.inputs;
+	      var lastOne = inputs.length ? inputs[inputs.length - 1] : '';
+	      if (OP.indexOf(lastOne) > -1 && OP.indexOf(value) > -1) {
+	        return;
+	      }
+	      inputs.push(value);
+	      var buf = [],
+	          char;
+	      for (var i = 0; i < inputs.length; i++) {
+	        char = inputs[i];
+	        if (OP.indexOf(char) > -1) {
+	          char = ' ' + char + ' ';
+	        }
+	        buf.push(char);
+	      }
+	      this.result = buf.join('');
+	    },
+	    calculate: function calculate() {
+	      var result = eval(this.result);
+	      this.inputs = [result];
+	      this.result = result;
+	    },
+	    clear: function clear() {
+	      this.inputs = [];
+	      this.result = '';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 493:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      padding: "5px"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["result"]
+	  }, [_vm._s(_vm.result)]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["1"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["2"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["3"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["+"])]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["4"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["5"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["6"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["-"])]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["7"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["8"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["9"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["*"])]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["0"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["."]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.clear
+	    }
+	  }, ["AC"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.calculate
+	    }
+	  }, ["="])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file


[06/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/showcase/new-fashion.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/showcase/new-fashion.js b/android/playground/app/src/main/assets/vue/showcase/new-fashion.js
new file mode 100644
index 0000000..37e2558
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/new-fashion.js
@@ -0,0 +1,3302 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(497)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(498)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(540)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/new-fashion.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 497:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "content": {
+	    "color": "#353535",
+	    "backgroundColor": "#666666",
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "refresh": {
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "loading": {
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  }
+	}
+
+/***/ },
+
+/***/ 498:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	var timer = __weex_require_module__('timer');
+
+	module.exports = {
+	  components: {
+	    headlines: __webpack_require__(499),
+	    category: __webpack_require__(512),
+	    coupon: __webpack_require__(516),
+	    goods: __webpack_require__(520),
+	    resource: __webpack_require__(524),
+	    scene: __webpack_require__(528),
+	    match: __webpack_require__(532),
+	    brand: __webpack_require__(536)
+	  },
+	  data: {
+	    navBarHeight: 88,
+	    cnt: 0,
+	    show0: true,
+	    show1: false,
+	    show2: false,
+	    displayRefresh: 'show',
+	    displayLoading: 'show',
+	    showData: {}
+	  },
+	  created: function created() {
+	    this.showData = {
+	      "header": {
+	        "topBanner": "https://gw.alicdn.com/tps/TB1J48kMXXXXXXtapXXXXXXXXXX-750-782.jpg",
+	        "ruleLink": "https://chaoshi.m.tmall.com/",
+	        "isShowShare": true,
+	        "shareInfo": {
+	          "shareTitle": "\u6211\u662f\u5206\u4eab\u6807\u9898",
+	          "shareIntro": " \u6211\u662f\u5206\u4eab\u5185\u5bb9\u6d4b\u8bd5",
+	          "allLink": "https://www.tmall.com",
+	          "mobileImage": "https://gw.alicdn.com/tps/TB1J48kMXXXXXXtapXXXXXXXXXX-750-782.jpg",
+	          "pcImage": "https://img.alicdn.com/tps/i4/TB1Dyw1LVXXXXXEapXXSutbFXXX.jpg",
+	          "shareScene": "\u6211\u662f\u6d4b\u8bd5\u4e1a\u52a1",
+	          "bizId": ""
+	        },
+	        "announceHdBanner": "https://gw.alicdn.com/tps/i4/TB1fzclLVXXXXaVaXXXwu0bFXXX.png",
+	        "bannerItems": [{
+	          "img": "https://img.alicdn.com/tps/TB1U8LHLVXXXXa3XpXXXXXXXXXX-233-172.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1U8LHLVXXXXa3XpXXXXXXXXXX-233-172.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1U8LHLVXXXXa3XpXXXXXXXXXX-233-172.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "fashion": {
+	        "isHide": false,
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "bigBannerImg": "https://gw.alicdn.com/tps/TB1tO.aLVXXXXcvXpXXXXXXXXXX-750-262.jpg",
+	        "bigBannerUrl": "https://chaoshi.m.tmall.com/",
+	        "smallBannerItems": [{
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }],
+	        "isHideStarBanner": false,
+	        "firstStarBannerItems": [{
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }],
+	        "secondStarBannerItems": [{
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }],
+	        "thirdStarBannerItems": [{
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "goods": {
+	        "isHide": false,
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "bannerItems": [{
+	          "img1": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url1": "https://chaoshi.m.tmall.com/",
+	          "img2": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url2": "https://chaoshi.m.tmall.com/",
+	          "img3": "https://gw.alicdn.com/tps/TB12MPFLVXXXXXnXVXXXXXXXXXX-250-592.jpg",
+	          "url3": "https://chaoshi.m.tmall.com/",
+	          "img4": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url4": "https://chaoshi.m.tmall.com/",
+	          "img5": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url5": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img1": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url1": "https://chaoshi.m.tmall.com/",
+	          "img2": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url2": "https://chaoshi.m.tmall.com/",
+	          "img3": "https://gw.alicdn.com/tps/TB12MPFLVXXXXXnXVXXXXXXXXXX-250-592.jpg",
+	          "url3": "https://chaoshi.m.tmall.com/",
+	          "img4": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url4": "https://chaoshi.m.tmall.com/",
+	          "img5": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url5": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "coupon": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg"
+	      },
+	      "scene": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "_backup": {
+	          "id": "03653",
+	          "data": [{
+	            "id": "1395",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1395&scm=1003.1.03653.MAIN_1395_710531&pos=1",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i2/TB1n6bVLVXXXXcCXVXXTCU0QpXX-300-300.jpg",
+	            "sceneCat": "50008881,50008883,50008882,50008884,50012774,50012775,50012776,50012781,50008886,50012766,50012771,50012772,50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,16240,50012773,50006846,50010394,50008888,50008890,50008889,50012784,50012785,50012786,50012787,50008885,50012777,50012778,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50011740,50006843,50006842,124942005,50010368,50011892,50011894,50023751,121366037,121458036,121392038,121420035,121364028,121468026,121400029,121418030,121478031,121480030,121366035,121424025,121426030,121484030,121412031,125054002,125074007,125074008,125104003,125080003,125024006,125080004,121400030,121424024,121482025,121418031,121402028,121388035",
+	            "finalScore": "77.26011111111112",
+	            "_pos_": 1,
+	            "entityType": "MAIN",
+	            "benefitImg": "//img.alicdn.com/tps/i3/TB1Onr9LVXXXXbiXpXXB8gAQpXX-300-100.png"
+	          }, {
+	            "id": "1394",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1394&scm=1003.1.03653.MAIN_1394_710531&pos=2",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB13mj1LVXXXXa.XFXXTCU0QpXX-300-300.jpg",
+	            "sceneCat": "50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,162402,50008903,50011413,162403,50000697,1629,50011277,121412004,50008897,50008901,50008899,50013194,50008904,50008905,50008898,162103,50008900,50013196,121434004,50005065,162702,162701,162703,1636,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50011740,50006843,50006842,124986002,50010368, 50011892,50011894,121480030,121366035,121424025,121426030,121484030,121412031",
+	            "finalScore": "77.06103999999999",
+	            "_pos_": 2,
+	            "entityType": "MAIN",
+	            "benefitImg": "//img.alicdn.com/tps/i2/TB17kvVLVXXXXaTXVXXB8gAQpXX-300-100.png"
+	          }, {
+	            "id": "1396",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1396&scm=1003.1.03653.MAIN_1396_710531&pos=3",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i2/TB1ZOAXLVXXXXa0XXXXTCU0QpXX-300-300.jpg",
+	            "sceneCat": "50010368,50011892,50011894,50013794,50010792,50010790,50010790,121434025,121396024,50010793,50010789,50010793,121386035,121392037,121458034,121392036,121482027,121392015,121368014,121418013,121392016,50011982,122690003,302910,50012010,122654005,50012019,50012825,50012027,50012042,50011744,50012906,50012907,50008881,50008883,50008882?,50012784?,50022889,50022728,50013228,50013896,50014775,50019578,50014822,50026394,50019694,50019279,50019272,50014079,50014078,50014076,50014077,50017238,121464011,121468014,50019130,50019127,50019126,50019128,50019125,50015984,50014803,50014802,50015980,50014788,50014787,50019526,50014791,50019520,50013932,50014677,50015978,50014786,50014785,50522001,50014493,50023100,121418021,121388027,121424021,121418020,121368020,50012036,50012044,50012043,50010368, 50011892, 50019274,50012044,50012048,50012043,50013228,50013238,50011726,50019279,50015984,50014803,50014802,50019526,50014791,50019520,50013932,50014677,50019526,50013314,5002
 3341,50016752,50016749,50016747,50016744,50016741,50016740,50016739,50016738,50016737,50016769,50016763,50016750,50007003,302910,50012010,50012032,50012033,50011745,50011746,50011894,121458034,121756003,121426033,50011982,50011979,121390006,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,162402,50008903,50011413,162403,50000697,1629,50011277,121412004,50008897,50008901,50008899,50013194,50008904,50008905,50008898,162103,50008900,50013196,121434004,50005065,162702,162701,162703,1636,1512,123534001,14,50008090,50012341,50132002,50012342,50012343,50012345,50012346,50013189,50010527,121394006,50013618,50010537,50012424,121452038,121484044,50010540,50010548,50024769,121450007,50013697,50010218,50005960,50005962,50012820,50012406,5002
 3620,50023605,50008829,50024064,50023440,50008687,124392001,50023771,50006804,50012410,124482010,121398023,50023789,50011975",
+	            "finalScore": "76.76379487179486",
+	            "_pos_": 3,
+	            "entityType": "MAIN",
+	            "benefitImg": "//img.alicdn.com/tps/i3/TB1Usn.LVXXXXaoXpXXB8gAQpXX-300-100.png"
+	          }, {
+	            "id": "1619",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1619&scm=1003.1.03653.SUB_1619_710531&pos=4",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i2/TB1MpoBLVXXXXbxXpXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,122654005,50011740,50009032,124688012\uff0c213202,121396029,121476023,121410029,213203,50023326,213205,50022686,50023293,50466023,50024999,50016885\uff0c50011894",
+	            "finalScore": "75.88480000000001",
+	            "_pos_": 4,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i4/TB1j0AxLVXXXXaRXFXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1612",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1612&scm=1003.1.03653.SUB_1612_710531&pos=5",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i3/TB1NNwyLVXXXXaEXVXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50010850,50000671,162104,162116,123216004",
+	            "finalScore": "75.23733333333334",
+	            "_pos_": 5,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i1/TB1PsoBLVXXXXbQXpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1610",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1610&scm=1003.1.03653.SUB_1610_710531&pos=6",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i4/TB1EkczLVXXXXcVXpXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "121484044,121452038,50012342,50012027,50012032,50006843,50010850,50000671,162104,1623,50011277,162116,123216004,50008898,121366037,121458036,121392038,121420035,121364028,121468026,121472031,121476036,121470042,121418032,121410036,121472032,121420032,121470040,121384032,121460028,121448028,121400030,121424024,121482025,121418031,121402028,121388035,121460029,121400028,121400029,121418030,121476034,121478031,121448029,121480030,121366035,121424025,121426030,121484030,121412031,121384033,121424023,121402027,121408039,121420033,121452028,121466040,121416029,121482028,121420034,121396046,121422052,121370037,121424031,21364043,121472040,121412045,121424032,125054002,125074007,125074008,125104003,125080003,125024006,125080004",
+	            "finalScore": "75.00533333333334",
+	            "_pos_": 6,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i2/TB1RzwFLVXXXXXsXpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1620",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1620&scm=1003.1.03653.SUB_1620_710531&pos=7",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1IJsILVXXXXbGXXXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50010789,50010790,50010792,50010793,50010794,50010796,50010797,50010798,50010801,50010803,50010805,50010807,50010808,50010813,50010814,50010815,50013794,121382014,121386023,121388007,121388008,121398004,121364007,121398006,121410007,121426007,121452004,50012010,50012027,50012032\uff0c124688012, 124986002, 124942005\uff0c50010850,50000671,162104,162201,50022566,162116,1623,50011277,50008897,162401,162402",
+	            "finalScore": "74.72522222222223",
+	            "_pos_": 7,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i1/TB16A.yLVXXXXX8XFXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1608",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1608&scm=1003.1.03653.SUB_1608_710531&pos=8",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i3/TB1xA3jLVXXXXXqapXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50012010,50012027,50012032,50007003,50008881,50008883,1623,162116,50010850,123216004",
+	            "finalScore": "74.626",
+	            "_pos_": 8,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i2/TB1WvoALVXXXXcdXpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1615",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1615&scm=1003.1.03653.SUB_1615_710531&pos=9",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1PVctLVXXXXchXFXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50011978,50011979,50011980,50011993,50011996,50011997,121390006,121408011,121474010,50010789,50010790,50010792,50010793,50010803,50013794,121398004,121410007\uff0c213205,121470030,50024980,121408030",
+	            "finalScore": "74.02799999999999",
+	            "_pos_": 9,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i4/TB1yKwBLVXXXXa4XpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1618",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1618&scm=1003.1.03653.SUB_1618_710531&pos=10",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1vn3sLVXXXXX5XVXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50008886,50012766,50012771,50012772,50012773,50008090,111219,50012100,50012082,50012478,50012475,213202,50018977,121396029,121476023,50018994,121410029,213203,50023326,50003820,213205,50022686,50012481,50013976?,50001871,122854005,121458010,121452006,121416008,50008779,50002777,121394007,121386009,50010825,50013810,121434010,50001865,50008565,50008246,50017192,121404045,121368009,121462014,50019372,50008248,121418011,50008249,50017193,50008252,50008251,50000512,121364047",
+	            "finalScore": "73.94212121212121",
+	            "_pos_": 10,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i4/TB1kSkpLVXXXXbTXVXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1617",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1617&scm=1003.1.03653.SUB_1617_710531&pos=11",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1ELwrLVXXXXaNXVXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50013189,50010527,121394006,50013618,50010537,50012424,121452038,121484044,50010540,50010548,50024769,50012341,50132002,50012342,50012343,50012345,50012346,50012341,50132002,50012342,50012343,50012345,50012346",
+	            "finalScore": "73.78883333333334",
+	            "_pos_": 11,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i3/TB1CtsuLVXXXXcJXFXX3bpXTXXX-170-100.png"
+	          }],
+	          "exposureParam": "//ac.mmstat.com/1.gif?apply=vote&abbucket=_AB-M1001_B5&com=02&acm=03653.1003.1.710531&cod=03653&cache=jWl8FJsb&aldid=TPMkJDIw&logtype=4&abtest=_AB-LR1001-PR1001&scm=1003.1.03653.710531&ip=42.120.74.104",
+	          "serverTime": 1458296110334
+	        }
+	      },
+	      "resource": {
+	        "isHide": false,
+	        "bigBannerImg": "https://gw.alicdn.com/tps/TB1tO.aLVXXXXcvXpXXXXXXXXXX-750-262.jpg",
+	        "bigBannerUrl": "https://chaoshi.m.tmall.com/",
+	        "smallBannerItems": [{
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "category": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "_backup": {
+	          "main": [],
+	          "sub": [{
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/dqc?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_15_735362&pos=1",
+	            "entityType": "OTHER",
+	            "colour": "b4ebff",
+	            "industryTitle": "\u6570\u7801",
+	            "_pos_": 1,
+	            "industryBenefit": "\u75af\u62a2\u5927\u724c\u65b0\u54c1",
+	            "industryId": "15",
+	            "industryImg": "//img.alicdn.com/tps/i4/TB1_xG.LVXXXXbWaXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/xihu?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_13_735362&pos=2",
+	            "entityType": "OTHER",
+	            "colour": "cdffa4",
+	            "industryTitle": "\u6d17\u62a4",
+	            "_pos_": 2,
+	            "industryBenefit": "\u7206\u6b3e1\u5206\u94b1\u62a2",
+	            "industryId": "13",
+	            "industryImg": "//img.alicdn.com/tps/i3/TB1Ft_CLVXXXXX2XXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/mobilephone?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_14_735362&pos=3",
+	            "entityType": "OTHER",
+	            "colour": "c5ffdf",
+	            "industryTitle": "\u624b\u673a",
+	            "_pos_": 3,
+	            "industryBenefit": "1\u5143\u62a2\u4f18\u60e0\u5238",
+	            "industryId": "14",
+	            "industryImg": "//img.alicdn.com/tps/i3/TB1mJjuLVXXXXc.XXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/xiangbaohuanxin?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_11_735362&pos=4",
+	            "entityType": "OTHER",
+	            "colour": "ffccdc",
+	            "industryTitle": "\u7bb1\u5305",
+	            "_pos_": 4,
+	            "industryBenefit": "\u6781\u81f4\u7115\u65b0\u5c16\u8d27",
+	            "industryId": "11",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1_5P9KVXXXXayaXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/newfood?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_12_735362&pos=5",
+	            "entityType": "OTHER",
+	            "colour": "fff5a3",
+	            "industryTitle": "\u98df\u54c1",
+	            "_pos_": 5,
+	            "industryBenefit": "\u65b0\u54c11\u5206\u8bd5\u5403",
+	            "industryId": "12",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1HfLzLVXXXXb_XXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/zbps?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_3_735362&pos=6",
+	            "entityType": "OTHER",
+	            "colour": "bbffe5",
+	            "industryTitle": "\u73e0\u5b9d\u914d\u9970",
+	            "_pos_": 6,
+	            "industryBenefit": "\u5927\u724c1\u6298\u79d2\u6740",
+	            "industryId": "3",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1s5y.LVXXXXb.aXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/getbeauty?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_2_735362&pos=7",
+	            "entityType": "OTHER",
+	            "colour": "ffd1b6",
+	            "industryTitle": "\u7f8e\u5986",
+	            "_pos_": 7,
+	            "industryBenefit": "\u5373\u523b\u9884\u7ea6\u7f8e\u4e3d",
+	            "industryId": "2",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1lNvoLVXXXXaoXFXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/guojixfs?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_1_735362&pos=8",
+	            "entityType": "OTHER",
+	            "colour": "b9eaf2",
+	            "industryTitle": "\u5929\u732b\u56fd\u9645",
+	            "_pos_": 8,
+	            "industryBenefit": "\u5524\u9192\u5168\u7403\u6f6e\u6d41",
+	            "industryId": "1",
+	            "industryImg": "//img.alicdn.com/tps/i4/TB1JHbkLVXXXXblXFXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/newnv?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_10_735362&pos=9",
+	            "entityType": "OTHER",
+	            "colour": "fff8ee",
+	            "industryTitle": "\u978b\u5c65",
+	            "_pos_": 9,
+	            "industryBenefit": "\u6f6e\u54c1\u7cbe\u9009\u978b\u5c65",
+	            "industryId": "10",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1RovwLVXXXXXnXpXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/nvzhuang?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_7_735362&pos=10",
+	            "entityType": "OTHER",
+	            "colour": "d5cbe8",
+	            "industryTitle": "\u5973\u88c5",
+	            "_pos_": 10,
+	            "industryBenefit": "\u6298\u540e\u7528\u5238\u62a2\u65b0",
+	            "industryId": "7",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1BOncLVXXXXXSaXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/man?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_6_735362&pos=11",
+	            "entityType": "OTHER",
+	            "colour": "cbe9a9",
+	            "industryTitle": "\u7537\u88c5",
+	            "_pos_": 11,
+	            "industryBenefit": "\u65b0\u54c1\u4f4e\u81f39.9\u5143",
+	            "industryId": "6",
+	            "industryImg": "//img.alicdn.com/tps/i4/TB1t9TmLVXXXXbkXFXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/myxfs?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_5_735362&pos=12",
+	            "entityType": "OTHER",
+	            "colour": "f8e1ff",
+	            "industryTitle": "\u6bcd\u5a74\u7ae5\u88c5",
+	            "_pos_": 12,
+	            "industryBenefit": "\u8de8\u5e97\u6ee1299\u51cf40",
+	            "industryId": "5",
+	            "industryImg": "//img.alicdn.com/tps/i3/TB1kpziLVXXXXabXVXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/jfjs?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_4_735362&pos=13",
+	            "entityType": "OTHER",
+	            "colour": "bbffe5",
+	            "industryTitle": "\u5bb6\u7eba\u5bb6\u9970",
+	            "_pos_": 13,
+	            "industryBenefit": "\u5168\u573a\u4f4e\u81f39.9\u5143",
+	            "industryId": "4",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1lUjzLVXXXXbAXXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/neiyi328?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_9_735362&pos=14",
+	            "entityType": "OTHER",
+	            "colour": "ffc7c9",
+	            "industryTitle": "\u5185\u8863",
+	            "_pos_": 14,
+	            "industryBenefit": "\u65b0\u54c13\u6298\u8d77",
+	            "industryId": "9",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1S7PuLVXXXXcVXXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/ydhw?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_8_735362&pos=15",
+	            "entityType": "OTHER",
+	            "colour": "cbdbfe",
+	            "industryTitle": "\u8fd0\u52a8\u6237\u5916",
+	            "_pos_": 15,
+	            "industryBenefit": "\u5927\u724c\u65b0\u54c1\u62a2\u5238",
+	            "industryId": "8",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1mQDALVXXXXbdXXXXrdvGIFXX-248-155.jpg"
+	          }],
+	          "isFormal": false,
+	          "exposureParam": "//ac.mmstat.com/1.gif?apply=vote&abbucket=_AB-M1011_B5&com=02&acm=03654.1003.1.735362&cod=03654&cache=CG5ZB02B&aldid=e5zPEI6R&logtype=4&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.735362&ip=42.120.74.159",
+	          "id": "03654"
+	        }
+	      },
+	      "brand": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "bannerItems": [{
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "match": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "isShowTmSpecBanner": true,
+	        "tmSpecBanner": {
+	          "img": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        },
+	        "bannerItems": [{
+	          "leftImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }]
+	      }
+	    };
+	    this.simLoadingData(this.cnt++);
+	  },
+	  methods: {
+	    handleRefresh: function handleRefresh(e) {
+	      var vm = this;
+	      vm.displayRefresh = 'show';
+	      if (timer) {
+	        timer.setTimeout(function () {
+	          vm.displayRefresh = 'hide';
+	        }, 2000);
+	      } else {
+	        modal.alert({
+	          message: 'refreshing.'
+	        }, function () {
+	          vm.displayRefresh = 'hide';
+	        });
+	      }
+	    },
+	    handleLoading: function handleLoading(e) {
+	      var vm = this;
+	      vm.displayLoading = 'show';
+	      modal.toast({
+	        message: 'loading.'
+	      });
+	      if (timer) {
+	        timer.setTimeout(function () {
+	          vm.simLoadingData(vm.cnt++);
+	          vm.displayLoading = 'hide';
+	        }, 2000);
+	      } else {
+	        vm.simLoadingData(vm.cnt++);
+	        vm.displayLoading = 'hide';
+	      }
+	    },
+	    simLoadingData: function simLoadingData(num) {
+	      if (num >= 3) {
+	        modal.toast({
+	          message: '\u5df2\u5230\u5e95\u90e8'
+	        });
+	        return;
+	      }
+	      this['show' + num] = true;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 499:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(500)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(501)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(511)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/headlines.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 500:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "banner": {
+	    "width": 750,
+	    "height": 782
+	  },
+	  "share-container": {
+	    "position": "absolute",
+	    "right": 100,
+	    "top": 15,
+	    "zIndex": 100,
+	    "fontSize": 20,
+	    "color": "#ffffff",
+	    "backgroundColor": "#000000",
+	    "borderRadius": 17,
+	    "width": 110,
+	    "height": 35,
+	    "justifyContent": "center",
+	    "alignItems": "center"
+	  },
+	  "rule-container": {
+	    "position": "absolute",
+	    "right": 22,
+	    "top": 15,
+	    "zIndex": 100,
+	    "fontSize": 20,
+	    "color": "#ffffff",
+	    "backgroundColor": "#000000",
+	    "borderRadius": 17,
+	    "width": 70,
+	    "height": 35,
+	    "justifyContent": "center"
+	  },
+	  "announce": {
+	    "backgroundColor": "#f5f3f4",
+	    "width": 716,
+	    "height": 286,
+	    "position": "absolute",
+	    "bottom": 17,
+	    "left": 17,
+	    "borderRadius": 5
+	  },
+	  "announce-hd": {
+	    "width": 700,
+	    "height": 90,
+	    "marginTop": 8,
+	    "marginBottom": 8,
+	    "marginLeft": 5,
+	    "marginRight": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 501:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    link: __webpack_require__(502),
+	    banners: __webpack_require__(505)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_233: 233,
+	      NUMBER_172: 172,
+	      NUMBER_3: 3
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 502:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(503)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(504)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/link.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 503:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  props: ['text', 'href'],
+	  methods: {
+	    clickHandler: function clickHandler() {
+	      modal.toast({
+	        message: 'click',
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 504:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    on: {
+	      "click": _vm.clickHandler
+	    }
+	  }, [_vm._s(_vm.text)])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 505:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(506)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(510)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/banners.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 506:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: ['ds', 'width', 'height', 'space', 'direction']
+	};
+
+/***/ },
+
+/***/ 507:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(508)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(509)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/banner.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 508:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  props: ['width', 'height', 'src', 'href'],
+	  data: function data() {
+	    return {
+	      quality: 'normal'
+	    };
+	  },
+	  methods: {
+	    clickHandler: function clickHandler() {
+	      modal.toast({
+	        message: 'click',
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 509:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('image', {
+	    style: {
+	      width: _vm.width,
+	      height: _vm.height
+	    },
+	    attrs: {
+	      "src": _vm.src,
+	      "image-quality": _vm.quality
+	    },
+	    on: {
+	      "click": _vm.clickHandler
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 510:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.direction === 'row') ? _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_vm._l((_vm.ds), function(i, item) {
+	    return _h('div', {
+	      style: {
+	        width: _vm.width,
+	        height: _vm.height,
+	        marginLeft: (i % _vm.ds.length ? _vm.space : 0)
+	      }
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.width,
+	        "height": _vm.height,
+	        "src": item.img,
+	        "href": item.url
+	      }
+	    })])
+	  })]) : _vm._e(), (_vm.direction === 'column') ? _h('div', [_vm._l((_vm.ds), function(i, item) {
+	    return _h('div', {
+	      style: {
+	        width: _vm.width,
+	        height: _vm.height,
+	        marginTop: (i % _vm.ds.length ? _vm.space : 0)
+	      }
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.width,
+	        "height": _vm.height,
+	        "src": item.img,
+	        "href": item.url
+	      }
+	    })])
+	  })]) : _vm._e()])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 511:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["container"]
+	  }, [_h('image', {
+	    staticClass: ["banner"],
+	    attrs: {
+	      "src": _vm.ds.topBanner
+	    }
+	  }), _h('div', {
+	    staticClass: ["rule-container"]
+	  }, [_h('link', {
+	    staticStyle: {
+	      fontSize: "22px",
+	      color: "#ffffff",
+	      textAlign: "center"
+	    },
+	    attrs: {
+	      "text": "\u5e2e\u52a9",
+	      "href": _vm.ds.ruleLink
+	    }
+	  })]), _h('div', {
+	    staticClass: ["announce"]
+	  }, [_h('image', {
+	    staticClass: ["announce-hd"],
+	    attrs: {
+	      "src": _vm.ds.announceHdBanner
+	    }
+	  }), _h('banners', {
+	    staticStyle: {
+	      marginLeft: "6",
+	      marginRight: "6"
+	    },
+	    attrs: {
+	      "ds": _vm.ds.bannerItems,
+	      "direction": "row",
+	      "width": _vm.NUMBER_233,
+	      "height": _vm.NUMBER_172,
+	      "space": _vm.NUMBER_3
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 512:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(513)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(514)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(515)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/category.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 513:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "shop-list": {
+	    "flexDirection": "row"
+	  },
+	  "shop-img-container": {
+	    "marginRight": 2
+	  },
+	  "sub-item": {
+	    "position": "absolute",
+	    "width": 248,
+	    "height": 241,
+	    "alignItems": "center",
+	    "backgroundColor": "#ffffff"
+	  },
+	  "sub-item-bg": {
+	    "width": 248,
+	    "height": 86
+	  },
+	  "sub-item-title": {
+	    "position": "absolute",
+	    "left": 0,
+	    "top": 0,
+	    "width": 248,
+	    "textAlign": "center"
+	  },
+	  "industry-title": {
+	    "fontSize": 28,
+	    "color": "#484848",
+	    "textAlign": "center",
+	    "marginTop": 10,
+	    "height": 34
+	  },
+	  "industry-benefit": {
+	    "fontSize": 24,
+	    "color": "#999999",
+	    "textAlign": "center"
+	  }
+	}
+
+/***/ },
+
+/***/ 514:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var demoContent = {
+	  "main": [{
+	    "shopList": [{
+	      "id": "619123122",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1Cl5MLVXXXXXTaXXXSutbFXXX.jpg",
+	      "finalScore": "0.884765209440857",
+	      "shopUrl": "http://liangpinpuzi.tmall.com/campaign-3735-7.htm",
+	      "entityType": "SHOP",
+	      "brandId": "7724367"
+	    }, {
+	      "id": "880734502",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1HN2XLVXXXXbkXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8822246866512714",
+	      "shopUrl": "http://sanzhisongshu.tmall.com/campaign-3735-7.htm",
+	      "entityType": "SHOP",
+	      "brandId": "147280915"
+	    }, {
+	      "id": "392147177",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1yq6dLVXXXXbXXpXXSutbFXXX.jpg",
+	      "finalScore": "0.8805854724243631",
+	      "shopUrl": "http://zhouheiya.tmall.com/campaign-3735-6.htm",
+	      "entityType": "SHOP",
+	      "brandId": "111496"
+	    }, {
+	      "id": "2081058060",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1w4jxLVXXXXaxXXXXtKXbFXXX.gif",
+	      "finalScore": "0.8640439551049249",
+	      "shopUrl": "http://rongxintang.tmall.com/campaign-3735-6.htm",
+	      "entityType": "SHOP",
+	      "brandId": "8709890"
+	    }],
+	    "finalScore": "4.657333333333334",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#fff5a3",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/newfood?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_12_735362&pos=1",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i1/TB1LHh4MXXXXXbsXpXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "1",
+	    "industryBenefit": null,
+	    "industryId": "12",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i4/TB1wshUMXXXXXXaXVXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "520557274",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1aMjXLVXXXXbUaXXXSutbFXXX.jpg",
+	      "finalScore": "0.8986382989845325",
+	      "shopUrl": "http://newbalance.tmall.com/campaign-3735-20.htm",
+	      "entityType": "SHOP",
+	      "brandId": "20584"
+	    }, {
+	      "id": "746866993",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1pXG9LVXXXXaLXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8917855242977327",
+	      "shopUrl": "http://vans.tmall.com/campaign-3735-19.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29529"
+	    }, {
+	      "id": "1612713147",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1jHfXLVXXXXXPXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8895943606442631",
+	      "shopUrl": "http://dcshoecousa.tmall.com/campaign-3735-8.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3851662"
+	    }, {
+	      "id": "2379251418",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1sbLlLVXXXXbeXXXXSutbFXXX.jpg",
+	      "finalScore": "0.8881539668874383",
+	      "shopUrl": "http://baijinydhw.tmall.com/campaign-3735-2.htm",
+	      "entityType": "SHOP",
+	      "brandId": "20579"
+	    }],
+	    "finalScore": "4.545333333333334",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#cbdbfe",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/ydhw?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_8_735362&pos=2",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i3/TB1h4kzLVXXXXawXpXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "2",
+	    "industryBenefit": null,
+	    "industryId": "8",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i4/TB19VMjLVXXXXaeaXXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "811383091",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1q49ZLVXXXXaJXVXXSutbFXXX.jpg",
+	      "finalScore": "0.8723682716749482",
+	      "shopUrl": "http://tongrentangbj.tmall.com/campaign-3735-9.htm",
+	      "entityType": "SHOP",
+	      "brandId": "44652"
+	    }, {
+	      "id": "838914626",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1GQYbLVXXXXaXXVXXSutbFXXX.jpg",
+	      "finalScore": "0.5027131908086584",
+	      "shopUrl": "http://jouo.tmall.com/campaign-3735-3.htm",
+	      "entityType": "SHOP",
+	      "brandId": "14170081"
+	    }, {
+	      "id": "1077716829",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1rdW2LVXXXXagapXXSutbFXXX.jpg",
+	      "finalScore": "0.5015387557024262",
+	      "shopUrl": "http://wetcode.tmall.com/campaign-3735-14.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3675642"
+	    }, {
+	      "id": "1664976033",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1Q.rpLVXXXXXiXpXXSutbFXXX.jpg",
+	      "finalScore": "0.5014897109669442",
+	      "shopUrl": "http://hanhoohzp.tmall.com/campaign-3735-17.htm",
+	      "entityType": "SHOP",
+	      "brandId": "78888695"
+	    }],
+	    "finalScore": "4.526666666666666",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#ffd1b6",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/getbeauty?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_2_735362&pos=3",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i4/TB1Djt9MXXXXXanXXXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "3",
+	    "industryBenefit": null,
+	    "industryId": "2",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i3/TB1_gVQMXXXXXX9XVXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "2153169655",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1nlK7LVXXXXaRXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8820210808835905",
+	      "shopUrl": "http://ctkicks.tmall.com/campaign-3735-15.htm",
+	      "entityType": "SHOP",
+	      "brandId": "20584"
+	    }, {
+	      "id": "2784101115",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1RrS.LVXXXXcrXpXXSutbFXXX.jpg",
+	      "finalScore": "0.5930383227012586",
+	      "shopUrl": "http://tomtailor.tmall.com/campaign-3735-0.htm",
+	      "entityType": "SHOP",
+	      "brandId": "213474060"
+	    }, {
+	      "id": "2183813726",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1kmS_LVXXXXaBaXXXSutbFXXX.jpg",
+	      "finalScore": "0.5882558957771681",
+	      "shopUrl": "http://huaiyuan.tmall.com/campaign-3735-5.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29465"
+	    }, {
+	      "id": "1785908005",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1dB6zLVXXXXcJXXXXSutbFXXX.jpg",
+	      "finalScore": "0.5694211862124341",
+	      "shopUrl": "http://axonus.tmall.com/campaign-3735-1.htm",
+	      "entityType": "SHOP",
+	      "brandId": "115035841"
+	    }],
+	    "finalScore": "4.413955555555555",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#b9eaf2",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/guojixfs?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_1_735362&pos=4",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i3/TB1_T7ALVXXXXXOXXXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "4",
+	    "industryBenefit": null,
+	    "industryId": "1",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i2/TB1s7koLVXXXXafXFXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "2453054335",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1RX_vLVXXXXchXpXXSutbFXXX.jpg",
+	      "finalScore": "0.8463447899590267",
+	      "shopUrl": "http://nanshizixing.tmall.com/campaign-3735-2.htm",
+	      "entityType": "SHOP",
+	      "brandId": "844502560"
+	    }, {
+	      "id": "1041773234",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1Q7jpLVXXXXX8XpXXSutbFXXX.jpg",
+	      "finalScore": "0.560952734503075",
+	      "shopUrl": "http://dapu.tmall.com/campaign-3735-8.htm",
+	      "entityType": "SHOP",
+	      "brandId": "14493763"
+	    }, {
+	      "id": "300031438",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB13VC4LVXXXXarXVXXSutbFXXX.jpg",
+	      "finalScore": "0.5450674634839442",
+	      "shopUrl": "http://kangerxin.tmall.com/campaign-3735-10.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3781905"
+	    }, {
+	      "id": "92042735",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1PxYcLVXXXXasaXXXSutbFXXX.jpg",
+	      "finalScore": "0.5448023228053981",
+	      "shopUrl": "http://shuixing.tmall.com/campaign-3735-10.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3685660"
+	    }],
+	    "finalScore": "4.13",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#bbffe5",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/jfjs?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_4_735362&pos=5",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i3/TB1jeoCLVXXXXcoXXXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "5",
+	    "industryBenefit": null,
+	    "industryId": "4",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i4/TB1C5.fLVXXXXb3aXXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "822428555",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1g46aLVXXXXcUXVXXSutbFXXX.jpg",
+	      "finalScore": "0.9183458776971917",
+	      "shopUrl": "http://playboyyd.tmall.com/campaign-3735-11.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29510"
+	    }, {
+	      "id": "196993935",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1pHG8LVXXXXbraXXXSutbFXXX.jpg",
+	      "finalScore": "0.9105525246667775",
+	      "shopUrl": "https://uniqlo.tmall.com/campaign-3735-56.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29527"
+	    }, {
+	      "id": "505753958",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1WKYyLVXXXXXHXXXXSutbFXXX.jpg",
+	      "finalScore": "0.90750966370726",
+	      "shopUrl": "http://bonas.tmall.com/campaign-3735-11.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3486580"
+	    }, {
+	      "id": "2113823580",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1itHkLVXXXXX9XFXXSutbFXXX.jpg",
+	      "finalScore": "0.5900977955635289",
+	      "shopUrl": "http://kafanya.tmall.com/campaign-3735-7.htm",
+	      "entityType": "SHOP",
+	      "brandId": "110684218"
+	    }],
+	    "finalScore": "4.088",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#ffc7c9",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/neiyi328?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_9_735362&pos=6",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i1/TB1tl3tLVXXXXbbXFXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "6",
+	    "industryBenefit": null,
+	    "industryId": "9",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i2/TB1AkIyLVXXXXbjXpXXeWjm2pXX-750-240.jpg"
+	  }],
+	  "sub": [{
+	    "shopList": null,
+	    "finalScore": "4.033333333333333",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/zbps?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_3_735362&pos=7",
+	    "entityType": "OTHER",
+	    "colour": "#bbffe5",
+	    "industryTitle": "\u73e0\u5b9d\u914d\u9970",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "7",
+	    "industryBenefit": "\u5927\u724c1\u6298\u79d2\u6740",
+	    "industryId": "3",
+	    "industryImg": "//img.alicdn.com/tps/i1/TB1s5y.LVXXXXb.aXXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.8773333333333335",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/dqc?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_15_735362&pos=8",
+	    "entityType": "OTHER",
+	    "colour": "#b4ebff",
+	    "industryTitle": "\u6570\u7801",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "8",
+	    "industryBenefit": "\u75af\u62a2\u5927\u724c\u65b0\u54c1",
+	    "industryId": "15",
+	    "industryImg": "//img.alicdn.com/tps/i4/TB1_xG.LVXXXXbWaXXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.8359999999999994",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/man?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_6_735362&pos=9",
+	    "entityType": "OTHER",
+	    "colour": "#cbe9a9",
+	    "industryTitle": "\u7537\u88c5",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "9",
+	    "industryBenefit": "\u65b0\u54c1\u4f4e\u81f39.9\u5143",
+	    "industryId": "6",
+	    "industryImg": "//img.alicdn.com/tps/i1/TB1mO2qLVXXXXXiXFXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.243333333333333",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/xihu?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_13_735362&pos=10",
+	    "entityType": "OTHER",
+	    "colour": "#cdffa4",
+	    "industryTitle": "\u6d17\u62a4",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "10",
+	    "industryBenefit": "\u7206\u6b3e1\u5206\u94b1\u62a2",
+	    "industryId": "13",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1Ft_CLVXXXXX2XXXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.1553333333333335",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/myxfs?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_5_735362&pos=11",
+	    "entityType": "OTHER",
+	    "colour": "#f8e1ff",
+	    "industryTitle": "\u6bcd\u5a74\u7ae5\u88c5",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "11",
+	    "industryBenefit": "\u8de8\u5e97\u6ee1299\u51cf40",
+	    "industryId": "5",
+	    "industryImg": "//img.alicdn.com/tps/i4/TB1c.HvLVXXXXXPXpXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "2.6739999999999995",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/nvzhuang?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_7_735362&pos=12",
+	    "entityType": "OTHER",
+	    "colour": "#d5cbe8",
+	    "industryTitle": "\u5973\u88c5",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "12",
+	    "industryBenefit": "\u6298\u540e\u7528\u5238\u62a2\u65b0",
+	    "industryId": "7",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1JdfsLVXXXXbRXpXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "0.0",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/mobilephone?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_14_735362&pos=13",
+	    "entityType": "OTHER",
+	    "colour": "#c5ffdf",
+	    "industryTitle": "\u624b\u673a",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "13",
+	    "industryBenefit": "1\u5143\u62a2\u4f18\u60e0\u5238",
+	    "industryId": "14",
+	    "industryImg": "//img.alicdn.com/tps/i4/TB1M3zhLVXXXXX4XVXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "0.0",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/xiangbaohuanxin?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_11_735362&pos=14",
+	    "entityType": "OTHER",
+	    "colour": "#ffccdc",
+	    "industryTitle": "\u7bb1\u5305",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "14",
+	    "industryBenefit": "\u6781\u81f4\u7115\u65b0\u5c16\u8d27",
+	    "industryId": "11",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1gE6kLVXXXXcrXFXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "0.0",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/newnv?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_10_735362&pos=15",
+	    "entityType": "OTHER",
+	    "colour": "#fff8ee",
+	    "industryTitle": "\u978b\u5c65",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "15",
+	    "industryBenefit": "\u6f6e\u54c1\u7cbe\u9009\u978b\u5c65",
+	    "industryId": "10",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1.qzpLVXXXXX.XFXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }],
+	  "isFormal": "false",
+	  "exposureParam": "//ac.mmstat.com/1.gif?apply=vote&abbucket=_AB-M1011_B14&com=02&acm=03654.1003.1.735362&cod=03654&cache=U5revsTn&aldid=KXPpnvEH&logtype=4&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.735362&ip=",
+	  "id": "03654"
+	};
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_248: 248,
+	      NUMBER_155: 155,
+	      NUMBER_373: 373,
+	      NUMBER_237: 237,
+	      NUMBER_186: 186,
+	      NUMBER_208: 208,
+	      NUMBER_750: 750,
+	      subItemBg: '//gw.alicdn.com/tps/TB1QzUfLVXXXXaOXVXXXXXXXXXX-248-86.jpg',
+	      items: [],
+	      subItems: []
+	    };
+	  },
+	  created: function created() {
+	    this.initData(demoContent);
+	  },
+	  methods: {
+	    getSubItemTop: function getSubItemTop(i) {
+	      return (i - i % 3) / 3 * (241 + 3);
+	    },
+	    getSubItemLeft: function getSubItemLeft(i) {
+	      return i % 3 * (248 + 3);
+	    },
+	    initData: function initData(content) {
+	      this.items = content.main;
+	      this.subItems = content.sub;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 515:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('div', {
+	    staticClass: ["item-container"]
+	  }, [_vm._l((_vm.items), function(i, item) {
+	    return _h('div', {
+	      style: {
+	        width: 750,
+	        paddingBottom: 14,
+	        backgroundColor: item.colour
+	      }
+	    }, [_h('div', [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_750,
+	        "height": _vm.NUMBER_237,
+	        "src": i % 2 === 0 ? item.leftBannerImg : item.rightBannerImg,
+	        "href": item.bannerUrl
+	      }
+	    })]), _h('div', {
+	      staticClass: ["shop-list"]
+	    }, [_vm._l((item.shopList), function(shop) {
+	      return _h('div', {
+	        staticClass: ["shop-img-container"]
+	      }, [_h('banner', {
+	        attrs: {
+	          "width": _vm.NUMBER_186,
+	          "height": _vm.NUMBER_208,
+	          "src": shop.picUrl,
+	          "href": shop.shopUrl
+	        }
+	      })])
+	    })])])
+	  })]), _h('div', {
+	    staticClass: ["sub-item-container"],
+	    style: {
+	      height: Math.round(_vm.subItems.length / 3) * (241 + 3)
+	    }
+	  }, [_vm._l((_vm.subItems), function(i, item) {
+	    return _h('div', {
+	      staticClass: ["sub-item"],
+	      style: {
+	        top: _vm.getSubItemTop(i),
+	        left: _vm.getSubItemLeft(i)
+	      }
+	    }, [_h('image', {
+	      staticClass: ["sub-item-bg"],
+	      attrs: {
+	        "src": _vm.subItemBg
+	      }
+	    }), _h('div', {
+	      staticClass: ["sub-item-img"]
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_248,
+	        "height": _vm.NUMBER_155,
+	        "src": item.industryImg,
+	        "href": item.industryUrl
+	      }
+	    })]), _h('div', {
+	      staticClass: ["sub-item-title"]
+	    }, [_h('text', {
+	      staticClass: ["industry-title"],
+	      attrs: {
+	        "href": item.industryUrl
+	      }
+	    }, [_vm._s(item.industryTitle)]), _h('text', {
+	      staticClass: ["industry-benefit"],
+	      attrs: {
+	        "href": item.industryUrl
+	      }
+	    }, [_vm._s(item.industryBenefit)])])])
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 516:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(517)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(518)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(519)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/coupon.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 517:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "wrapper": {
+	    "color": "#FF4550",
+	    "width": 750,
+	    "height": 230
+	  },
+	  "my-coupon": {
+	    "width": 180,
+	    "height": 39,
+	    "position": "absolute",
+	    "top": 15,
+	    "right": 149
+	  },
+	  "guides": {
+	    "height": 39,
+	    "width": 110,
+	    "position": "absolute",
+	    "top": 15,
+	    "right": 32
+	  },
+	  "lottery": {
+	    "width": 348,
+	    "height": 76,
+	    "position": "absolute",
+	    "top": 132,
+	    "right": 70
+	  },
+	  "info": {
+	    "fontSize": 18,
+	    "position": "absolute",
+	    "top": 84,
+	    "right": 70
+	  },
+	  "img": {
+	    "width": 750,
+	    "height": 230
+	  }
+	}
+
+/***/ },
+
+/***/ 518:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      currentStatus: '//img.alicdn.com/tps/i4/TB1cYBKMXXXXXayaXXXkxHk2pXX-750-228.jpg_q75.jpg'
+	    };
+	  },
+	  methods: {
+	    handleClick: function handleClick(e) {
+	      modal.toast({
+	        message: 'click',
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 519:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    attrs: {
+	      "src": _vm.currentStatus
+	    }
+	  }), _h('div', {
+	    staticClass: ["my-coupon"],
+	    on: {
+	      "click": _vm.handleClick
+	    }
+	  }), _h('div', {
+	    staticClass: ["guides"],
+	    on: {
+	      "click": _vm.handleClick
+	    }
+	  }), _h('div', {
+	    staticClass: ["lottery"],
+	    on: {
+	      "click": _vm.handleClick
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 520:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(521)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(522)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(523)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/goods.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 521:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "slider": {
+	    "height": 652
+	  },
+	  "pannel": {
+	    "width": 750,
+	    "height": 592,
+	    "flexDirection": "row"
+	  },
+	  "middle-col": {
+	    "marginLeft": 4,
+	    "marginRight": 4,
+	    "width": 240,
+	    "height": 588
+	  }
+	}
+
+/***/ },
+
+/***/ 522:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_251: 251,
+	      NUMBER_240: 240,
+	      NUMBER_292: 292,
+	      NUMBER_588: 588
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 523:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return (!_vm.ds.isHide) ? _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('slider', {
+	    staticClass: ["slider"],
+	    attrs: {
+	      "show-indicators": "true",
+	      "auto-play": "true",
+	      "interval": "3000"
+	    }
+	  }, [_vm._l((_vm.ds.bannerItems), function(item) {
+	    return _h('div', {
+	      staticClass: ["pannel"]
+	    }, [_h('div', [_h('banner', {
+	      staticStyle: {
+	        marginBottom: "4"
+	      },
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img1,
+	        "href": item.url1
+	      }
+	    }), _h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img2,
+	        "href": item.url2
+	      }
+	    })]), _h('div', {
+	      staticClass: ["middle-col"]
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_240,
+	        "height": _vm.NUMBER_588,
+	        "src": item.img3,
+	        "href": item.url3
+	      }
+	    })]), _h('div', [_h('banner', {
+	      staticStyle: {
+	        marginBottom: "4"
+	      },
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img4,
+	        "href": item.url4
+	      }
+	    }), _h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img5,
+	        "href": item.url5
+	      }
+	    })])])
+	  }), _h('indicator', {
+	    staticStyle: {
+	      position: "absolute",
+	      width: "714",
+	      height: "200",
+	      left: "10",
+	      bottom: "-80",
+	      itemSize: "20",
+	      itemColor: "#999999",
+	      itemSelectedColor: "#000000"
+	    }
+	  })])]) : _vm._e()
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 524:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(525)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(526)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(527)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/resource.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 525:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "big-banner-container": {
+	    "marginBottom": 4
+	  }
+	}
+
+/***/ },
+
+/***/ 526:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banners: __webpack_require__(505),
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_750: 750,
+	      NUMBER_200: 200,
+	      NUMBER_373: 373,
+	      NUMBER_224: 224,
+	      NUMBER_4: 4
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 527:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return (!_vm.ds.isHide) ? _h('div', [_h('div', {
+	    staticClass: ["big-banner-container"]
+	  }, [_h('banner', {
+	    attrs: {
+	      "width": _vm.NUMBER_750,
+	      "height": _vm.NUMBER_200,
+	      "src": _vm.ds.bigBannerImg,
+	      "href": _vm.ds.bigBannerUrl
+	    }
+	  })]), _h('banners', {
+	    attrs: {
+	      "direction": "row",
+	      "ds": _vm.ds.smallBannerItems,
+	      "width": _vm.NUMBER_373,
+	      "height": _vm.NUMBER_224,
+	      "space": _vm.NUMBER_4
+	    }
+	  })]) : _vm._e()
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 528:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(529)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(530)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(531)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/scene.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 529:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "item": {
+	    "width": 750,
+	    "height": 340,
+	    "marginBottom": 4
+	  },
+	  "item-img": {
+	    "position": "absolute",
+	    "left": 110,
+	    "top": 20
+	  },
+	  "right-item-img": {
+	    "position": "absolute",
+	    "right": 110,
+	    "top": 20
+	  },
+	  "benifit-img": {
+	    "position": "absolute",
+	    "right": 5,
+	    "top": 160
+	  },
+	  "right-benifit-img": {
+	    "position": "absolute",
+	    "left": 40,
+	    "top": 160
+	  },
+	  "small-item-container": {
+	    "width": 750
+	  },
+	  "small-item": {
+	    "position": "absolute",
+	    "width": 373,
+	    "height": 230,
+	    "flexDirection": "row"
+	  },
+	  "small-item-bg": {
+	    "width": 373,
+	    "height": 230
+	  },
+	  "small-item-img": {
+	    "position": "absolute",
+	    "left": 12,
+	    "top": 12
+	  },
+	  "small-benifit-img": {
+	    "position": "absolute",
+	    "right": 0,
+	    "top": 65
+	  }
+	}
+
+/***/ },
+
+/***/ 530:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var demoContent = [{
+	  "id": "1111",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1392&scm=1003.1.03653.SUB_1111_740603&pos=1",
+	  "_s_": "d",
+	  "itemImg": "https://img.alicdn.com/tps/TB1c7t.MXXXXXchXXXXXXXXXXXX-182-206.jpg",
+	  "sceneCat": "50012010,50012027,50012032,50007003,50008881,50008883,1623,162116,50010850,123216004",
+	  "finalScore": "10000.0",
+	  "_pos_": "1",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/TB1Zgl2MXXXXXaYXFXXXXXXXXXX-170-100.png"
+	}, {
+	  "id": "1396",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1396&scm=1003.1.03653.SUB_1396_740603&pos=2",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i2/TB1O1VfMXXXXXX0aXXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50010368,50011892,50011894,50013794,50010792,50010790,50010790,121434025,121396024,50010793,50010789,50010793,121386035,121392037,121458034,121392036,121482027,121392015,121368014,121418013,121392016,50011982,122690003,302910,50012010,122654005,50012019,50012825,50012027,50012042,50011744,50012906,50012907,50008881,50008883,50008882?,50012784?,50022889,50022728,50013228,50013896,50014775,50019578,50014822,50026394,50019694,50019279,50019272,50014079,50014078,50014076,50014077,50017238,121464011,121468014,50019130,50019127,50019126,50019128,50019125,50015984,50014803,50014802,50015980,50014788,50014787,50019526,50014791,50019520,50013932,50014677,50015978,50014786,50014785,50522001,50014493,50023100,121418021,121388027,121424021,121418020,121368020,50012036,50012044,50012043,50010368, 50011892, 50019274,50012044,50012048,50012043,50013228,50013238,50011726,50019279,50015984,50014803,50014802,50019526,50014791,50019520,50013932,50014677,50019526,50013314,50023341,50016
 752,50016749,50016747,50016744,50016741,50016740,50016739,50016738,50016737,50016769,50016763,50016750,50007003,302910,50012010,50012032,50012033,50011745,50011746,50011894,121458034,121756003,121426033,50011982,50011979,121390006,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,162402,50008903,50011413,162403,50000697,1629,50011277,121412004,50008897,50008901,50008899,50013194,50008904,50008905,50008898,162103,50008900,50013196,121434004,50005065,162702,162701,162703,1636,1512,123534001,14,50008090,50012341,50132002,50012342,50012343,50012345,50012346,50013189,50010527,121394006,50013618,50010537,50012424,121452038,121484044,50010540,50010548,50024769,121450007,50013697,50010218,50005960,50005962,50012820,50012406,50023620,50023
 605,50008829,50024064,50023440,50008687,124392001,50023771,50006804,50012410,124482010,121398023,50023789,50011975",
+	  "finalScore": "10000.0",
+	  "_pos_": "2",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i1/TB1cp4sMXXXXXbLXFXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1616",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1616&scm=1003.1.03653.SUB_1616_740603&pos=3",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i4/TB1dlEALVXXXXbxXpXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50009032,50007003,302910,1512,124688012,124986002,124942005,50023722,50010368,50011892,50011894",
+	  "finalScore": "10000.0",
+	  "_pos_": "3",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i3/TB1fxonLVXXXXXUaXXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "16424",
+	  "sceneUrl": "https://brand.tmall.com/mobilestreet/subject.htm?id=16424&acm=03653.1003.1.740603&aldid=VyrSqx06&spm=0.0.0.0.Wv8ion&scm=1003.1.03653.SUB_16424_740603&pos=4",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i4/TB1.i2_LVXXXXbrXpXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50012043,50012036,50010850,50000671,1622,50000852,162104,50000697,162205,162116,50012027,50012032,50012028,50012033,50012042,50008882,50012772,50006846,50008881,50000436,50011123,3035,50010167,50000557,50010158,50010159,50010402,50010160,50011980,50011993,121390006,50011978,50011977,50011979,121454013,50011745",
+	  "finalScore": "6.729749999999999",
+	  "_pos_": "4",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i2/TB1bhH5LVXXXXapXFXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "16425",
+	  "sceneUrl": "https://brand.tmall.com/mobilestreet/subject.htm?id=16360&acm=03653.1003.1.740603&aldid=VyrSqx06&spm=0.0.0.0.MttFEC&scm=1003.1.03653.SUB_16425_740603&pos=5",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i3/TB15ywbLVXXXXcdXXXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50012043,50012036,50010850,50000671,1622,50000852,162104,50000697,162205,162116,50012027,50012032,50012028,50012033,50012042,50008882,50012772,50006846,50008881,50000436,50011123,3035,50010167,50000557,50010158,50010159,50010402,50010160,50011980,50011993,121390006,500119

<TRUNCATED>


[11/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..a19e84a 100644
--- a/android/playground/app/src/main/assets/style/style-flex.js
+++ b/android/playground/app/src/main/assets/style/style-flex.js
@@ -44,10 +44,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__(301)
+	var __weex_template__ = __webpack_require__(309)
+	var __weex_style__ = __webpack_require__(310)
+	var __weex_script__ = __webpack_require__(311)
 
 	__weex_define__('@weex-component/601bcbb157cb7b89fd0d4cc63178b528', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2232,12 +2232,24 @@
 /* 286 */,
 /* 287 */,
 /* 288 */,
-/* 289 */
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */
 /***/ 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__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2254,7 +2266,7 @@
 
 
 /***/ },
-/* 290 */
+/* 302 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2272,7 +2284,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 303 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2291,7 +2303,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2310,11 +2322,11 @@
 
 
 /***/ },
-/* 293 */,
-/* 294 */,
-/* 295 */,
-/* 296 */,
-/* 297 */
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2940,7 +2952,7 @@
 	}
 
 /***/ },
-/* 298 */
+/* 310 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2957,7 +2969,7 @@
 	}
 
 /***/ },
-/* 299 */
+/* 311 */
 /***/ 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/93063f14/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..7282a86 100644
--- a/android/playground/app/src/main/assets/style/style-item.js
+++ b/android/playground/app/src/main/assets/style/style-item.js
@@ -45,9 +45,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__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/db2a20e3c65e67c0f449e29c05c9d644', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 290:
+/***/ 302:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,7 +85,7 @@
 
 /***/ },
 
-/***/ 291:
+/***/ 303:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 292:
+/***/ 304:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..dbdf788 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
@@ -45,7 +45,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(306)
+	var __weex_template__ = __webpack_require__(318)
 
 	__weex_define__('@weex-component/5e6bbced7515fc4165499153f5d8276a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +57,7 @@
 
 /***/ },
 
-/***/ 306:
+/***/ 318:
 /***/ function(module, exports) {
 
 	module.exports = {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..ef0a76f 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
@@ -45,7 +45,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(307)
+	var __weex_template__ = __webpack_require__(319)
 
 	__weex_define__('@weex-component/25608f094c039b891a20c8161b9c650b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +57,7 @@
 
 /***/ },
 
-/***/ 307:
+/***/ 319:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -70,7 +70,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/93063f14/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..373dd3b 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
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(308)
-	var __weex_style__ = __webpack_require__(309)
+	var __weex_template__ = __webpack_require__(320)
+	var __weex_style__ = __webpack_require__(321)
 
 	__weex_define__('@weex-component/695862caffb746fa67bb70cbd1bb819e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -60,7 +60,7 @@
 
 /***/ },
 
-/***/ 308:
+/***/ 320:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -72,7 +72,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 +92,7 @@
 
 /***/ },
 
-/***/ 309:
+/***/ 321:
 /***/ function(module, exports) {
 
 	module.exports = {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..101f04e 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
@@ -45,9 +45,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__(322)
+	var __weex_style__ = __webpack_require__(323)
+	var __weex_script__ = __webpack_require__(324)
 
 	__weex_define__('@weex-component/efbfb8ecf417c1cf14746fdf4099343d', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 310:
+/***/ 322:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +98,7 @@
 
 /***/ },
 
-/***/ 311:
+/***/ 323:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -117,14 +117,14 @@
 
 /***/ },
 
-/***/ 312:
+/***/ 324:
 /***/ 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/93063f14/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..c49f915 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
@@ -45,9 +45,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__(325)
+	var __weex_style__ = __webpack_require__(326)
+	var __weex_script__ = __webpack_require__(327)
 
 	__weex_define__('@weex-component/06cb3b1cf32d7e68eb4f41a491128601', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 313:
+/***/ 325:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 314:
+/***/ 326:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,14 +120,14 @@
 
 /***/ },
 
-/***/ 315:
+/***/ 327:
 /***/ 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/93063f14/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..e460375 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world.js
@@ -45,9 +45,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__(315)
+	var __weex_style__ = __webpack_require__(316)
+	var __weex_script__ = __webpack_require__(317)
 
 	__weex_define__('@weex-component/ca86dd7272942388d48952706d37e8a7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 303:
+/***/ 315:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 304:
+/***/ 316:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,14 +120,14 @@
 
 /***/ },
 
-/***/ 305:
+/***/ 317:
 /***/ 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/93063f14/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..18c01bf 100644
--- a/android/playground/app/src/main/assets/syntax/index.js
+++ b/android/playground/app/src/main/assets/syntax/index.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(316)
-	var __weex_script__ = __webpack_require__(317)
+	var __weex_template__ = __webpack_require__(328)
+	var __weex_script__ = __webpack_require__(329)
 
 	__weex_define__('@weex-component/7c0aa0b76c7fe063e27065c721bee1a0', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3242,7 +3242,19 @@
 /* 313 */,
 /* 314 */,
 /* 315 */,
-/* 316 */
+/* 316 */,
+/* 317 */,
+/* 318 */,
+/* 319 */,
+/* 320 */,
+/* 321 */,
+/* 322 */,
+/* 323 */,
+/* 324 */,
+/* 325 */,
+/* 326 */,
+/* 327 */,
+/* 328 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3254,7 +3266,7 @@
 	}
 
 /***/ },
-/* 317 */
+/* 329 */
 /***/ 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/93063f14/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..69c5cde 100644
--- a/android/playground/app/src/main/assets/syntax/script-component.js
+++ b/android/playground/app/src/main/assets/syntax/script-component.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(318)
-	var __weex_script__ = __webpack_require__(319)
+	var __weex_template__ = __webpack_require__(330)
+	var __weex_script__ = __webpack_require__(331)
 
 	__weex_define__('@weex-component/2a5ba7e55afcba45accf15b3179f0016', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 318:
+/***/ 330:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -96,12 +96,12 @@
 
 /***/ },
 
-/***/ 319:
+/***/ 331:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(320);
+	__webpack_require__(332);
 	module.exports = {
 	  data: function () {return {
 	    items: [{ title: 'A', url: 'a' }, { title: 'B', url: 'b' }, { title: 'C', url: 'c' }]
@@ -112,12 +112,12 @@
 
 /***/ },
 
-/***/ 320:
+/***/ 332:
 /***/ 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__(333)
+	var __weex_style__ = __webpack_require__(334)
+	var __weex_script__ = __webpack_require__(335)
 
 	__weex_define__('@weex-component/sub', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -135,7 +135,7 @@
 
 /***/ },
 
-/***/ 321:
+/***/ 333:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -150,7 +150,7 @@
 
 /***/ },
 
-/***/ 322:
+/***/ 334:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -162,7 +162,7 @@
 
 /***/ },
 
-/***/ 323:
+/***/ 335:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..b41c2fb 100644
--- a/android/playground/app/src/main/assets/syntax/script-data.js
+++ b/android/playground/app/src/main/assets/syntax/script-data.js
@@ -45,9 +45,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__(336)
+	var __weex_style__ = __webpack_require__(337)
+	var __weex_script__ = __webpack_require__(338)
 
 	__weex_define__('@weex-component/2267e3020f57f77e5d733a60b4ea145b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 324:
+/***/ 336:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 325:
+/***/ 337:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,7 +127,7 @@
 
 /***/ },
 
-/***/ 326:
+/***/ 338:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..4c5b691 100644
--- a/android/playground/app/src/main/assets/syntax/script-events.js
+++ b/android/playground/app/src/main/assets/syntax/script-events.js
@@ -45,9 +45,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__(339)
+	var __weex_style__ = __webpack_require__(340)
+	var __weex_script__ = __webpack_require__(341)
 
 	__weex_define__('@weex-component/491ca7f339a97e2fe3e130536e8fb536', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -92,7 +92,7 @@
 
 /***/ },
 
-/***/ 327:
+/***/ 339:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 328:
+/***/ 340:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,7 +127,7 @@
 
 /***/ },
 
-/***/ 329:
+/***/ 341:
 /***/ 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/93063f14/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..95ef8bb 100644
--- a/android/playground/app/src/main/assets/syntax/script-instance.js
+++ b/android/playground/app/src/main/assets/syntax/script-instance.js
@@ -45,9 +45,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__(342)
+	var __weex_style__ = __webpack_require__(343)
+	var __weex_script__ = __webpack_require__(344)
 
 	__weex_define__('@weex-component/e463d05fb45b7117577286bed2b723ab', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 330:
+/***/ 342:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 331:
+/***/ 343:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +98,7 @@
 
 /***/ },
 
-/***/ 332:
+/***/ 344:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..5ce1835 100644
--- a/android/playground/app/src/main/assets/syntax/script-lifecycle.js
+++ b/android/playground/app/src/main/assets/syntax/script-lifecycle.js
@@ -45,9 +45,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__(345)
+	var __weex_style__ = __webpack_require__(346)
+	var __weex_script__ = __webpack_require__(347)
 
 	__weex_define__('@weex-component/bc7273b0d417cff1bb0a2e09e3cd1c92', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 333:
+/***/ 345:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -90,7 +90,7 @@
 
 /***/ },
 
-/***/ 334:
+/***/ 346:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 335:
+/***/ 347:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..658505f 100644
--- a/android/playground/app/src/main/assets/syntax/script-module.js
+++ b/android/playground/app/src/main/assets/syntax/script-module.js
@@ -45,9 +45,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__(348)
+	var __weex_style__ = __webpack_require__(349)
+	var __weex_script__ = __webpack_require__(350)
 
 	__weex_define__('@weex-component/0c363fe819262ec8f8baf1e516e1d694', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 336:
+/***/ 348:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -89,7 +89,7 @@
 
 /***/ },
 
-/***/ 337:
+/***/ 349:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 338:
+/***/ 350:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..38ca125 100644
--- a/android/playground/app/src/main/assets/syntax/script-options.js
+++ b/android/playground/app/src/main/assets/syntax/script-options.js
@@ -45,9 +45,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__(351)
+	var __weex_style__ = __webpack_require__(352)
+	var __weex_script__ = __webpack_require__(353)
 
 	__weex_define__('@weex-component/d8cdc8a8832b252e92de2e6e8a50dd36', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 339:
+/***/ 351:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -86,7 +86,7 @@
 
 /***/ },
 
-/***/ 340:
+/***/ 352:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +97,7 @@
 
 /***/ },
 
-/***/ 341:
+/***/ 353:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..d866656 100644
--- a/android/playground/app/src/main/assets/syntax/template-class.js
+++ b/android/playground/app/src/main/assets/syntax/template-class.js
@@ -45,9 +45,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__(354)
+	var __weex_style__ = __webpack_require__(355)
+	var __weex_script__ = __webpack_require__(356)
 
 	__weex_define__('@weex-component/14c303543be596aa2a969ac47565db7c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 342:
+/***/ 354:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 343:
+/***/ 355:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -119,7 +119,7 @@
 
 /***/ },
 
-/***/ 344:
+/***/ 356:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..c283437 100644
--- a/android/playground/app/src/main/assets/syntax/template-content.js
+++ b/android/playground/app/src/main/assets/syntax/template-content.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(345)
-	var __weex_script__ = __webpack_require__(346)
+	var __weex_template__ = __webpack_require__(357)
+	var __weex_script__ = __webpack_require__(358)
 
 	__weex_define__('@weex-component/2b26a2ba0096277f201ca0b657282838', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 345:
+/***/ 357:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,22 +85,22 @@
 
 /***/ },
 
-/***/ 346:
+/***/ 358:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(347);}
+	__webpack_require__(359);}
 	/* generated by weex-loader */
 
 
 /***/ },
 
-/***/ 347:
+/***/ 359:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(348)
-	var __weex_style__ = __webpack_require__(349)
+	var __weex_template__ = __webpack_require__(360)
+	var __weex_style__ = __webpack_require__(361)
 
 	__weex_define__('@weex-component/btn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -113,7 +113,7 @@
 
 /***/ },
 
-/***/ 348:
+/***/ 360:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +130,7 @@
 
 /***/ },
 
-/***/ 349:
+/***/ 361:
 /***/ function(module, exports) {
 
 	module.exports = {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..183d534 100644
--- a/android/playground/app/src/main/assets/syntax/template-event.js
+++ b/android/playground/app/src/main/assets/syntax/template-event.js
@@ -45,9 +45,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__(362)
+	var __weex_style__ = __webpack_require__(363)
+	var __weex_script__ = __webpack_require__(364)
 
 	__weex_define__('@weex-component/40a248d5d833060161447365b18603fa', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 350:
+/***/ 362:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +146,7 @@
 
 /***/ },
 
-/***/ 351:
+/***/ 363:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -168,7 +168,7 @@
 
 /***/ },
 
-/***/ 352:
+/***/ 364:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..7bbd646 100644
--- a/android/playground/app/src/main/assets/syntax/template-if.js
+++ b/android/playground/app/src/main/assets/syntax/template-if.js
@@ -45,9 +45,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__(365)
+	var __weex_style__ = __webpack_require__(366)
+	var __weex_script__ = __webpack_require__(367)
 
 	__weex_define__('@weex-component/6019f2874c768d147034c91e003e5ba4', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 353:
+/***/ 365:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +109,7 @@
 
 /***/ },
 
-/***/ 354:
+/***/ 366:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -128,7 +128,7 @@
 
 /***/ },
 
-/***/ 355:
+/***/ 367:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..f4eccef 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
@@ -45,9 +45,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__(371)
+	var __weex_style__ = __webpack_require__(372)
+	var __weex_script__ = __webpack_require__(373)
 
 	__weex_define__('@weex-component/01700b62cc1ab66f2cbfd893c5c95eaf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 359:
+/***/ 371:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -124,7 +124,7 @@
 
 /***/ },
 
-/***/ 360:
+/***/ 372:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +146,7 @@
 
 /***/ },
 
-/***/ 361:
+/***/ 373:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..dfcc2d0 100644
--- a/android/playground/app/src/main/assets/syntax/template-repeat.js
+++ b/android/playground/app/src/main/assets/syntax/template-repeat.js
@@ -45,9 +45,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__(368)
+	var __weex_style__ = __webpack_require__(369)
+	var __weex_script__ = __webpack_require__(370)
 
 	__weex_define__('@weex-component/19638a010faa9c01b41851f36c4157df', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 356:
+/***/ 368:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -227,7 +227,7 @@
 
 /***/ },
 
-/***/ 357:
+/***/ 369:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -241,7 +241,7 @@
 
 /***/ },
 
-/***/ 358:
+/***/ 370:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..6651158 100644
--- a/android/playground/app/src/main/assets/syntax/template-style.js
+++ b/android/playground/app/src/main/assets/syntax/template-style.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(362)
-	var __weex_script__ = __webpack_require__(363)
+	var __weex_template__ = __webpack_require__(374)
+	var __weex_script__ = __webpack_require__(375)
 
 	__weex_define__('@weex-component/301fb11cc58bbe739f3ee7ecea123456', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 362:
+/***/ 374:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +97,7 @@
 
 /***/ },
 
-/***/ 363:
+/***/ 375:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..bde736f 100644
--- a/android/playground/app/src/main/assets/template.js
+++ b/android/playground/app/src/main/assets/template.js
@@ -45,9 +45,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__(376)
+	var __weex_style__ = __webpack_require__(377)
+	var __weex_script__ = __webpack_require__(378)
 
 	__weex_define__('@weex-component/b40420dfe575cbe06a71dd757f5b9128', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2109,7 +2109,7 @@
 
 /***/ },
 
-/***/ 364:
+/***/ 376:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2220,14 +2220,14 @@
 
 /***/ },
 
-/***/ 365:
+/***/ 377:
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
 
-/***/ 366:
+/***/ 378:
 /***/ 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/93063f14/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..b09e4d1
--- /dev/null
+++ b/android/playground/app/src/main/assets/test.js
@@ -0,0 +1,128 @@
+/******/ (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__(379)
+	var __weex_script__ = __webpack_require__(380)
+
+	__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)
+
+/***/ },
+
+/***/ 379:
+/***/ 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}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 380:
+/***/ 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/93063f14/android/playground/app/src/main/assets/vue/animation.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/animation.js b/android/playground/app/src/main/assets/vue/animation.js
new file mode 100644
index 0000000..c6c8b3d
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/animation.js
@@ -0,0 +1,709 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(381)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(382)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(391)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/animation.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 381:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "block": {
+	    "position": "absolute",
+	    "width": 250,
+	    "height": 250,
+	    "top": 300,
+	    "left": 400,
+	    "backgroundColor": "#F0AD4E",
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "block-txt": {
+	    "color": "#FFFFFF",
+	    "fontSize": 70
+	  }
+	}
+
+/***/ },
+
+/***/ 382:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var animation = __weex_require_module__('animation');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      transformOrigin: 'center center',
+	      current_rotate: 0,
+	      current_scale: 1,
+	      current_color: '#FF0000',
+	      current_opacity: 1,
+	      current_translate: '',
+	      current_transform: '',
+	      isStop: true
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    anim: function anim(styles, timingFunction, duration, callback) {
+	      animation.transition(this.$refs.block.ref, {
+	        styles: styles,
+	        timingFunction: timingFunction,
+	        duration: duration
+	      }, callback);
+	    },
+	    rotate: function rotate() {
+	      var self = this;
+	      self.current_rotate += 90;
+	      self.anim({
+	        transform: 'rotate(' + self.current_rotate + 'deg)'
+	      }, 'ease-in-out', 500, function () {
+	        if (self.current_rotate === 360) {
+	          self.current_rotate = 0;
+	        } else {
+	          self.rotate();
+	        }
+	      });
+	    },
+	    translate: function translate() {
+	      this.current_translate = this.current_translate ? '' : 'translate(50%, 50%)';
+	      this.anim({
+	        transform: this.current_translate
+	      }, 'ease-in', 500, function () {});
+	    },
+	    scale: function scale() {
+	      var self = this;
+	      self.current_scale = self.current_scale === 2 ? .5 : 2;
+	      self.anim({
+	        transform: 'scale(' + self.current_scale + ')'
+	      }, 'linear', 500, function () {});
+	    },
+	    transform: function transform() {
+	      var self = this;
+	      this.current_transform = this.current_transform ? '' : 'rotate(45deg) scale(1.5)';
+	      this.anim({
+	        transform: this.current_transform,
+	        transformOrigin: 'left top'
+	      }, 'ease-out', 500, function () {
+	        if (self.current_transform !== '') {
+	          self.anim({
+	            transform: 'rotate(-90deg) scale(1.2)',
+	            transformOrigin: 'left top'
+	          }, 'ease-out', 500, function () {});
+	        } else {}
+	      });
+	    },
+	    composite: function composite() {
+	      var self = this;
+	      self.current_transform = self.current_transform ? '' : 'rotate(45deg) scale(1.5) translate(50%, 50%)';
+	      self.current_color = self.current_color === '#F0AD4E' ? '#D9534F' : '#F0AD4E';
+	      self.current_opacity = self.current_opacity === 1 ? 0.1 : 1;
+	      this.anim({
+	        transform: this.current_transform,
+	        transformOrigin: 'left top',
+	        backgroundColor: self.current_color,
+	        opacity: self.current_opacity
+	      }, 'ease-out', 1000, function () {});
+	    },
+	    color: function color() {
+	      var self = this;
+	      self.current_color = self.current_color === '#F0AD4E' ? '#D9534F' : '#F0AD4E';
+	      self.anim({
+	        backgroundColor: self.current_color
+	      }, 'linear', 500, function () {});
+	    },
+	    opacity: function opacity() {
+	      var self = this;
+	      self.current_opacity = self.current_opacity === 1 ? 0.1 : 1;
+	      self.anim({
+	        opacity: self.current_opacity
+	      }, 'linear', 500, function () {});
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 391:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "Transform",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "value": "Rotate",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.rotate($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Scale",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.scale($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Translate",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.translate($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Transform",
+	      "type": "success",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.transform($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Others",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "value": "BgColor",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.color($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Opacity",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.opacity($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "All",
+	      "type": "success",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.composite($event)
+	      }
+	    }
+	  })]), _h('div', {
+	    ref: "block",
+	    staticClass: ["block"],
+	    style: {
+	      transformOrigin: _vm.transformOrigin
+	    }
+	  }, [_h('text', {
+	    staticClass: ["block-txt"]
+	  }, ["Anim"])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/a.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/a.js b/android/playground/app/src/main/assets/vue/components/a.js
new file mode 100644
index 0000000..95cc130
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/a.js
@@ -0,0 +1,438 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(392)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(397)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/a.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 392:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393)
+	  }
+	};
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 397:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Hyperlink",
+	      "type": "primary"
+	    }
+	  }, [_h('a', {
+	    attrs: {
+	      "href": "http://alibaba.github.io/weex/index.html"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "info",
+	      "value": "Click me to see how 'A' element opens a new world."
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/countdown.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/countdown.js b/android/playground/app/src/main/assets/vue/components/countdown.js
new file mode 100644
index 0000000..d4f0f6f
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/countdown.js
@@ -0,0 +1,640 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(398)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(399)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(404)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/countdown.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 398:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "ctno1": {
+	    "borderRadius": 8,
+	    "paddingTop": 6,
+	    "paddingBottom": 6,
+	    "paddingRight": 4,
+	    "paddingLeft": 4,
+	    "marginLeft": 2,
+	    "marginRight": 2,
+	    "backgroundColor": "rgb(242,222,222)",
+	    "color": "rgb(169,68,66)"
+	  },
+	  "ctno2": {
+	    "borderRadius": 8,
+	    "paddingTop": 30,
+	    "paddingBottom": 30,
+	    "paddingLeft": 16,
+	    "paddingRight": 16,
+	    "backgroundColor": "rgb(217,237,247)",
+	    "color": "rgb(49,112,143)",
+	    "textAlign": "center",
+	    "fontSize": 40
+	  }
+	}
+
+/***/ },
+
+/***/ 399:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      countdown1: {
+	        remain: 5000,
+	        time: {
+	          D: '0',
+	          hh: '00',
+	          mm: '00',
+	          ss: '00'
+	        }
+	      },
+	      countdown2: {
+	        remain: 5000,
+	        time: {
+	          MM: '0',
+	          ss: '0'
+	        }
+	      }
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    countdown: __webpack_require__(400)
+	  },
+	  methods: {
+	    tick: function tick(e, k) {
+	      this[k].time = JSON.parse(JSON.stringify(e));
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 400:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(401)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(402)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(403)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/countdown.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 401:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden"
+	  }
+	}
+
+/***/ },
+
+/***/ 402:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	function format(str) {
+	  if (str.length >= 2) {
+	    return str;
+	  } else {
+	    return '0' + str;
+	  }
+	}
+
+	function getTime(target, now) {
+	  var remain = parseInt((target - now) / 1000);
+	  var D = String(parseInt(remain / 86400));
+	  var DD = format(D);
+	  var h = String(parseInt((remain - parseInt(D) * 86400) / 3600));
+	  var hh = format(h);
+	  var H = String(parseInt(remain / 3600));
+	  var HH = format(H);
+	  var m = String(parseInt((remain - parseInt(H) * 3600) / 60));
+	  var mm = format(m);
+	  var M = String(parseInt(remain / 60));
+	  var MM = format(M);
+	  var s = String(remain - parseInt(M) * 60);
+	  var ss = format(s);
+	  var S = String(remain);
+	  var SS = format(S);
+	  return {
+	    D: D, DD: DD,
+	    h: h, hh: hh,
+	    H: H, HH: HH,
+	    m: m, mm: mm,
+	    M: M, MM: MM,
+	    s: s, ss: ss,
+	    S: S, SS: SS
+	  };
+	}
+
+	module.exports = {
+	  props: {
+	    remain: {
+	      default: 0
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      now: 0,
+	      target: 0,
+	      outofview: false
+	    };
+	  },
+	  created: function created() {
+	    this.now = Date.now();
+	    this.target = this.now + this.remain * 1000;
+	    if (this.remain > 0) {
+	      this.run();
+	    }
+	  },
+	  methods: {
+	    run: function run() {
+	      if (!this.outofview) {
+	        this.now = Date.now();
+	      }
+	      var time = getTime(this.target, this.now);
+	      if (this.target >= this.now) {
+	        this.$emit('tick', time);
+	      } else {
+	        this.$emit('alarm', time);
+	        return;
+	      }
+	      setTimeout(this.run.bind(this), 1000);
+	    },
+	    appeared: function appeared() {
+	      this.outofview = false;
+	    },
+	    disappeared: function disappeared() {
+	      this.outofview = true;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 403:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      overflow: "hidden",
+	      flexDirection: "row"
+	    },
+	    on: {
+	      "appear": _vm.appeared,
+	      "disappear": _vm.disappeared
+	    }
+	  }, [_vm._t("default")])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 404:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Countdown",
+	      "type": "primary"
+	    }
+	  }, [_h('countdown', {
+	    staticStyle: {
+	      width: "750",
+	      marginTop: "20",
+	      marginBottom: "20"
+	    },
+	    attrs: {
+	      "remain": _vm.countdown1.remain
+	    },
+	    on: {
+	      "tick": function($event) {
+	        _vm.tick($event, 'countdown1')
+	      }
+	    }
+	  }, [_h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.D)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["day(s)"]), _h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.hh)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["hour(s)"]), _h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.mm)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["minute(s)"]), _h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.ss)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["second(s)"])]), _h('countdown', {
+	    staticStyle: {
+	      width: "600"
+	    },
+	    attrs: {
+	      "remain": _vm.countdown2.remain
+	    },
+	    on: {
+	      "tick": function($event) {
+	        _vm.tick($event, 'countdown2')
+	      }
+	    }
+	  }, [_h('text', {
+	    staticClass: ["ctno2"]
+	  }, [_vm._s(_vm.countdown2.time.MM)]), _h('text', {
+	    staticClass: ["ctno2"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, [":"]), _h('text', {
+	    staticClass: ["ctno2"]
+	  }, [_vm._s(_vm.countdown2.time.ss)])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file


[10/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/image.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/image.js b/android/playground/app/src/main/assets/vue/components/image.js
new file mode 100644
index 0000000..975ec97
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/image.js
@@ -0,0 +1,641 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(405)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(406)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(407)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/image.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 405:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "img": {
+	    "marginBottom": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 406:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393)
+	  }
+	};
+
+/***/ },
+
+/***/ 407:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "width x height",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Weex screen width is 750"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "300px",
+	      height: "300px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "200px",
+	      height: "200px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "50px",
+	      height: "50px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "GIF Animation",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Depanding on Native ImageSDK"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "96px",
+	      height: "96px"
+	    },
+	    attrs: {
+	      "src": "https://gtd.alicdn.com/tps/i4/T1HcvHXd4nXXb6ROYh-48-48.gif"
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "68px",
+	      height: "68px",
+	      marginLeft: "20px"
+	    },
+	    attrs: {
+	      "src": "https://gw.alicdn.com/tps/TB1El.mKXXXXXXyapXXXXXXXXXX-34-34.gif"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "Base64",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Depanding on Native ImageSDK"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "96px",
+	      height: "96px"
+	    },
+	    attrs: {
+	      "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAMAAABgOjJdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO1QTFRFhomSb3J8XGBrdnqDgYWNlJefV1tmfoGKU1diT1NfgISNgoWOYmZwio2Vi4+Wc3eAkJObZGhzUlZiaGt2U1djfYCKZGdyhYiQeHyFio6VgYWOVVllbHB6XWFsY2ZxaWx3jZCYXmFsfYCJcnZ/UVVham54V1tng4aPb3N8WV1pX2JtZWl0YWVvVlpmiYyUWVxohomRd3uEdHiBeX2GZ2t1hIeQVFhkf4OMbnJ8fYGKdnqEb3N9kJScY2dycnaAjpKZdHeBjpKajI+Yc3eBhYiRf4KLXmFtio6Wi4+XjZCZkJSbkZScjI+XlJifTlJe+rAZcwAAAZBJREFUeNp0lOeWgjAQhSdUBQRRbFjX7tpW3XUt23tL3v9xNigJIHh/zRk+5iR3ZgIkULWmwgv+A7VWDWWBR/nSt2gLUzIVbLH1lo8RRW1wEfqxPtCKUaKTMUhURuUhTIi6Q07l6LuAEFdpEld6tWNEx00CKKJ3jsR1xSHJcj4bB+LmkpxT49Yj8mqQUVBBciUk8ITepESJ+5AqY1+uwny5IjDPcADoN0BIwjLOsjKZOewtbi/9fvi338a44CetIai2H/cokPLj9tfEj2wVzD4rIWMlfpu+CXc5Pw4qh5X7AUw4gZIswUENGT8lAN1fMBVeAxIIxYR3Nin0imOe52emdxkyP8aY+0S9Y2d63cNoxvACRTaeI70slst+cjYCAnXmuuS1RKKmy1hKBX0hzaC3KOsxsmz2Ir2NzMcEbVCo+cf5oDOWOzNAucpxxoglnZlT1+KzXk4kymKwL4ttN+73dhHeuWV85zLL073Vw3v7MdDuE3a/JRrCmqwFQ2yV8gmvg/d+aPCMH0GLvB//
 AgwAo1MTpxsaxVoAAAAASUVORK5CYII="
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "68px",
+	      height: "68px",
+	      marginLeft: "20px"
+	    },
+	    attrs: {
+	      "src": "data:image/gif;base64,R0lGODlhIgAiANU7AMvLy83Nzdra2srKysnJyejo6MbGxtzc3M7Ozuzs7NTU1N3d3fz8/NfX1/j4+Ovr6+/v79DQ0Obm5v39/d/f3/f398/Pz9vb2+np6fn5+f7+/tXV1fX19dnZ2erq6tHR0fb29sjIyMfHx+Li4vLy8u7u7ufn5/r6+uPj49bW1tPT09LS0sTExPT09ODg4O3t7eHh4eTk5MXFxd7e3vHx8fPz8/Dw8OXl5djY2P///8zMzP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlp
 ZDo0Q0QxODlDNENEOEQxMUUzOEIzM0I1ODVGNjU1MjBBQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0Q0QxODlDNUNEOEQxMUUzOEIzM0I1ODVGNjU1MjBBQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRDRDE4OUMyQ0Q4RDExRTM4QjMzQjU4NUY2NTUyMEFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRDRDE4OUMzQ0Q4RDExRTM4QjMzQjU4NUY2NTUyMEFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEBQAAOwAsAAAAACIAIgAABv/AnXBIFDIEnxmoyGw6hw6LTrdKPK9PhmI6lWC/xQN3agWDMWNdhDTJmZ+gS1oXUDUoD8dbOHk05oAIHS8aYDRbgIlTDTVXGiiKkVwFTgwdkpg6GE1ymZIRJUUjnpkURBCkmQJDDBueAQGJACEAOqtCCaQhBgOAAxEAAAtCGQKeBAAIyGkiFzk3Ii64UpghCg45EstTAAYQOS0DMUKjmLMPOTkVAQRc3d8cA
 ZQ7YpgDAzbpHDrt3AYlOTggeCDEmL0B3wLyc+ctBwgEHgpmupdwXz8dAGTAC2BCCIWJBACqYzfGwIEcHkSM21EgFiYRC9I9uDcm2IoAAGAIaYFIEgBkAh8UBJvTbUCAYUIkkDLAwiggWLagREiF6ZaQAlQlIR3SKeucAJuITLjkNc2CE0yOlOWiIsOTAgjKNnB7pYKLuKQimJhgxkEBJC7nWFBwwAPaPTs0kJBwIMWGDSkaHECRoMKTIAAh+QQFAAA7ACwPAA0AEgAJAAAGRMCdUKcTGo3E4jF5RDKHSaUzCdtFn9ar5IrVBUQsA+JBDBkMISuSIJAsdgkAgFIojHaDpm3nOJKEFQFpTTsgUi+EiUJBACH5BAUAADsALA8AEQASAAgAAAYfQJ1wSCzqEA+jcmh5LZeWxFOJ8EyVkqsRpi0uukRBEAAh+QQFAAA7ACwPABEAEgAIAAAGWcCdcEgUBkQsAzFkMISKO4JAskAkAABKoTDaDYYAgy3nQHgGA1IuVwk8hQAZJAfSmQaE17pNIBoOOR4iMTsiC2sPaERYKwEAcAQfClhQYQMBfiyXUDsBmDtBACH5BAUAADsALA8ADQASAAkAAAZRwJ1wSBwCAMVdYJkMhGSiYYDAYhmSIVyJQnDtCApTYXY0yiC51iAGCD1yucrUaEBzAoXBwAbnfOklOX4PemiCf0QQOyCJQhw6BEk7d0MlkpdBACH5BAUAADsALBAADQAQAAQAAAYmwN0uEBAajyGAMWQYHIW6QQQA0O0ACILyKLrkbqLQzpGTEJ6GYxAAIfkEBQAAOwAsEAANABAABAAABiTA3U6nExqPgKIwQDwuQzKRLrBjsQxKYwhXohAIO9ODAnDKjkEAIfkEBQAAOwAsDwANABIACQAABkPAnXBIHOp0xR0yqTwum86k8wiDTo1TnSQbFeoCIpYB8TiGDIaQ0kgQSBa7BABAKRRGu0HRtnMQSUIVAWpJIE8vTIlBACH5BA
 UAADsALA8AEQASAAgAAAYfQJ1wSCzqEA+jcmh5LZeWxFOJ8EyVkqsRpi0uukRBEAAh+QQFAAA7ACwPABEAEgAIAAAGWcCdcEgUBkQsAzFkMISKO4JAskAkAABKoTDaDYYAgy3nQHgGA1IuVwk8hQAZJAfSmQaE17pNIBoOOR4iMTsiC2sPaERYKwEAcAQfClhQYQMBfiyXUDsBmDtBACH5BAUAADsALA8ADQASAAkAAAZQwJ1wSBwCAMVdICkMhGSiYYDAYhmSIVyJQnDtCArTg3I0yiC51iAGCD1yucrUaEBzAoXBwAbnfOklOX4PemiCf0QQOyCJQhw6BEx3QyVMlkEAIfkEBWQAOwAsEAANABAABAAABibA3S4QEBqPIYAxZBgchbpBBADQ7QAIgvIouuRuotDOkZMQnoZjEAA7"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "resize",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "resize=stretch(default) 600 x 200 "
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "600px",
+	      height: "200px",
+	      borderStyle: "solid",
+	      borderWidth: "1px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "src": _vm.img,
+	      "resize": "stretch"
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "resize=contain 600 x 200 "
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "600px",
+	      height: "200px",
+	      borderStyle: "solid",
+	      borderWidth: "1px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "src": _vm.img,
+	      "resize": "contain"
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "resize=cover 600 x 200"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "600px",
+	      height: "200px",
+	      borderStyle: "solid",
+	      borderWidth: "1px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "src": _vm.img,
+	      "resize": "cover"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/input.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/input.js b/android/playground/app/src/main/assets/vue/components/input.js
new file mode 100644
index 0000000..d996ab4
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/input.js
@@ -0,0 +1,364 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(408)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(409)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(410)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/input.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 408:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "input": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 400
+	  }
+	}
+
+/***/ },
+
+/***/ 409:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      txtInput: '',
+	      txtChange: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  methods: {
+	    onchange: function onchange(event) {
+	      this.txtChange = event.value;
+	      modal.toast({
+	        message: 'onchange: ' + event.value,
+	        duration: 2
+	      });
+	    },
+	    oninput: function oninput(event) {
+	      this.txtInput = event.value;
+	      modal.toast({
+	        message: 'onitput: ' + event.value,
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 410:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "input",
+	      "type": "primary"
+	    }
+	  }, [_h('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "Text Input",
+	      "autofocus": "true",
+	      "value": ""
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  }), _h('text', ["oninput: " + _vm._s(_vm.txtInput)]), _h('text', ["onchange: " + _vm._s(_vm.txtChange)])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/list.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/list.js b/android/playground/app/src/main/assets/vue/components/list.js
new file mode 100644
index 0000000..e8d18d2
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/list.js
@@ -0,0 +1,246 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(411)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(412)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(413)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/list.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 411:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "list": {
+	    "height": 850
+	  },
+	  "count": {
+	    "fontSize": 48,
+	    "margin": 10
+	  },
+	  "indicator": {
+	    "height": 40,
+	    "width": 40,
+	    "color": "#45b5f0"
+	  },
+	  "row": {
+	    "width": 750
+	  },
+	  "item": {
+	    "justifyContent": "center",
+	    "borderBottomWidth": 2,
+	    "borderBottomColor": "#c0c0c0",
+	    "height": 100,
+	    "padding": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 412:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  methods: {
+	    onappear: function onappear(e) {
+	      var appearId = this.rows[e.target.attr.index].id;
+	      nativeLog('+++++', appearId);
+	      var appearIds = this.appearIds;
+	      appearIds.push(appearId);
+	      this.getMinAndMaxIds(appearIds);
+	    },
+	    ondisappear: function ondisappear(e) {
+	      var disAppearId = this.rows[e.target.attr.index].id;
+	      nativeLog('+++++', disAppearId);
+	      var appearIds = this.appearIds;
+	      var index = appearIds.indexOf(disAppearId);
+	      if (index > -1) {
+	        appearIds.splice(index, 1);
+	      }
+	      this.getMinAndMaxIds(appearIds);
+	    },
+	    getMinAndMaxIds: function getMinAndMaxIds(appearIds) {
+	      appearIds.sort(function (a, b) {
+	        return a - b;
+	      });
+	      this.appearIds = appearIds;
+	      this.appearMax = appearIds[appearIds.length - 1];
+	      this.appearMin = appearIds[0];
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      appearMin: 1,
+	      appearMax: 1,
+	      appearIds: [],
+	      rows: [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }, { id: 7 }, { id: 8 }, { id: 9 }, { id: 10 }, { id: 11 }, { id: 12 }, { id: 13 }, { id: 14 }, { id: 15 }, { id: 16 }, { id: 17 }, { id: 18 }, { id: 19 }, { id: 20 }, { id: 21 }, { id: 22 }, { id: 23 }, { id: 24 }, { id: 25 }, { id: 26 }, { id: 27 }, { id: 28 }, { id: 29 }]
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 413:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('list', {
+	    staticClass: ["list"]
+	  }, [_vm._l((_vm.rows), function(v, i) {
+	    return _h('cell', {
+	      staticClass: ["row"],
+	      appendAsTree: true,
+	      attrs: {
+	        "append": "tree",
+	        "index": i
+	      },
+	      on: {
+	        "appear": _vm.onappear,
+	        "disappear": _vm.ondisappear
+	      }
+	    }, [_h('div', {
+	      staticClass: ["item"]
+	    }, [_h('text', {
+	      staticClass: ["item-title"]
+	    }, ["row " + _vm._s(v.id)])])])
+	  })]), _h('text', {
+	    staticClass: ["count"],
+	    attrs: {
+	      "value": 'Appear items: ' + _vm.appearMin + ' ~ ' + _vm.appearMax
+	    }
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/marquee.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/marquee.js b/android/playground/app/src/main/assets/vue/components/marquee.js
new file mode 100644
index 0000000..8f71cff
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/marquee.js
@@ -0,0 +1,534 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(414)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(419)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/marquee.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 414:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      marquee: {
+	        height: 30,
+	        duration: 1500,
+	        interval: 2000,
+	        list: [{ text: 'Introducing Bots on Messenger' }, { text: 'Capturing 3D 360-Stereo VR Video' }, { text: 'The Future of Video on Facebook' }, { text: 'Announcing Vue.js 2.0' }, { text: 'Not Your Average Virtual-DOM' }, { text: 'Templates, JSX, or Hyperscript?' }]
+	      }
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    marquee: __webpack_require__(415)
+	  },
+	  methods: {
+	    marqueeChange: function marqueeChange(e) {
+	      console.log(e);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 415:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(416)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(417)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(418)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/marquee.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 416:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden",
+	    "position": "relative"
+	  },
+	  "anim": {
+	    "flexDirection": "column",
+	    "position": "absolute",
+	    "transform": "translateY(0) translateZ(0)"
+	  }
+	}
+
+/***/ },
+
+/***/ 417:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var _animation = __weex_require_module__('animation');
+
+	module.exports = {
+	  props: {
+	    step: { default: 0 },
+	    count: { default: 0 },
+	    index: { default: 1 },
+	    duration: { default: 0 },
+	    interval: { default: 0 },
+	    outofview: { default: false }
+	  },
+	  created: function created() {
+	    if (this.interval > 0 && this.step > 0 && this.duration > 0) {
+	      this.run();
+	    }
+	  },
+	  methods: {
+	    run: function run() {
+	      if (this.outofview) {
+	        setTimeout(this.run.bind(this), this.interval);
+	      } else {
+	        setTimeout(function () {
+	          this.animation(this.run.bind(this));
+	        }.bind(this), this.interval);
+	      }
+	    },
+	    animation: function animation(cb) {
+	      var offset = -this.step * this.index;
+	      _animation.transition(this.$refs.anim.ref, {
+	        styles: {
+	          transform: 'translateY(' + offset + 'px) translateZ(0)'
+	        },
+	        timingFunction: 'ease',
+	        duration: this.duration
+	      }, function () {
+	        this.index = (this.index + 1) % this.count;
+	        this.$emit('change', {
+	          index: this.index,
+	          count: this.count
+	        });
+	        cb && cb();
+	      }.bind(this));
+	    },
+	    appeared: function appeared() {
+	      this.outofview = false;
+	    },
+	    disappeared: function disappeared() {
+	      this.outofview = true;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 418:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrap"],
+	    on: {
+	      "appear": _vm.appeared,
+	      "disappear": _vm.disappeared
+	    }
+	  }, [_h('div', {
+	    ref: "anim",
+	    staticClass: ["anim"]
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 419:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Marquee",
+	      "type": "primary"
+	    }
+	  }, [_h('marquee', {
+	    style: {
+	      width: 700,
+	      height: _vm.marquee.height * 2,
+	      backgroundColor: 'rgb(223, 240, 216)',
+	      borderRadius: 8,
+	      paddingLeft: 10,
+	      paddingRight: 10
+	    },
+	    attrs: {
+	      "step": _vm.marquee.height * 2,
+	      "count": _vm.marquee.list.length,
+	      "interval": _vm.marquee.interval,
+	      "duration": _vm.marquee.duration
+	    },
+	    on: {
+	      "change": _vm.marqueeChange
+	    }
+	  }, [_vm._l((_vm.marquee.list), function(item) {
+	    return _h('div', {
+	      style: {
+	        height: _vm.marquee.height * _vm.marquee.length,
+	        paddingTop: _vm.marquee.height * 0.5,
+	        paddingBottom: _vm.marquee.height * 0.5,
+	        overflow: 'hidden'
+	      }
+	    }, [_h('text', {
+	      style: {
+	        height: _vm.marquee.height,
+	        color: 'rgb(60, 118, 61)',
+	        fontSize: 28
+	      }
+	    }, [_vm._s(item.text)])])
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/navigator.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/navigator.js b/android/playground/app/src/main/assets/vue/components/navigator.js
new file mode 100644
index 0000000..5fdefce
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/navigator.js
@@ -0,0 +1,1059 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(420)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(430)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/navigator.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 420:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var navigator = __weex_require_module__('navigator');
+	var getBaseURL = __webpack_require__(421).getBaseURL;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      navBarHeight: 88,
+	      title: 'Navigator',
+	      dir: 'examples',
+	      baseURL: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    navpage: __webpack_require__(422),
+	    button: __webpack_require__(387)
+	  },
+	  created: function created() {
+	    this.$getConfig(function (config) {
+	      var env = config.env;
+	      if (env.platform == 'iOS') {
+	        var scale = env.scale;
+	        var deviceWidth = env.deviceWidth / scale;
+	        this.navBarHeight = 64.0 * 750.0 / deviceWidth;
+	      }
+	    }.bind(this));
+	    this.baseURL = getBaseURL(this);
+	  },
+	  methods: {
+	    naviBarLeftItemClick: function naviBarLeftItemClick(e) {
+	      modal.toast({ message: 'naviBarLeftItemClick', duration: 2 });
+	    },
+	    naviBarRightItemClick: function naviBarRightItemClick(e) {
+	      modal.toast({ message: 'naviBarRightItemClick', duration: 2 });
+	    },
+	    push: function push() {
+	      var params = {
+	        'url': this.baseURL + 'vue/components/navigator.js?test=1',
+	        'animated': 'true'
+	      };
+	      navigator.push(params, function () {});
+	    },
+	    pop: function pop() {
+	      var params = {
+	        'url': this.baseURL + 'vue/components/navigator.js?test=1',
+	        'animated': 'true'
+	      };
+	      navigator.pop(params, function () {});
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 421:
+/***/ function(module, exports) {
+
+	exports.getBaseURL = function (vm) {
+	  var bundleUrl = vm.$getConfig().bundleUrl;
+	  var nativeBase;
+	  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/')>=0;
+	  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+	  if (isAndroidAssets) {
+	    nativeBase = 'file://assets/';
+	  }
+	  else if (isiOSAssets) {
+	    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+	  }
+	  else {
+	    var host = 'localhost:12580';
+	    var matches = /\/\/([^\/]+?)\//.exec(vm.$getConfig().bundleUrl);
+	    if (matches && matches.length >= 2) {
+	      host = matches[1];
+	    }
+	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
+	  }
+	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  // in Native
+	  var base = nativeBase;
+	  if (typeof window === 'object') {
+	    // in Browser or WebView
+	    base = h5Base;
+	  }
+	  return base
+	}
+
+
+/***/ },
+
+/***/ 422:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(423)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(424)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(429)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/navpage.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 423:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "width": 750
+	  }
+	}
+
+/***/ },
+
+/***/ 424:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    navbar: __webpack_require__(425)
+	  },
+	  props: {
+	    dataRole: { default: 'navbar' },
+	    backgroundColor: { default: 'black' },
+	    height: { default: 88 },
+	    title: { default: "" },
+	    titleColor: { default: 'black' },
+	    rightItemSrc: { default: '' },
+	    rightItemTitle: { default: '' },
+	    rightItemColor: { default: 'black' },
+	    leftItemSrc: { default: '' },
+	    leftItemTitle: { default: '' },
+	    leftItemColor: { default: 'black' }
+	  },
+	  methods: {
+	    naviBarRightItemClick: function naviBarRightItemClick(e) {
+	      this.$emit('naviBarRightItemClick', e);
+	    },
+	    naviBarLeftItemClick: function naviBarLeftItemClick(e) {
+	      this.$emit('naviBarLeftItemClick', e);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 425:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(426)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(427)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(428)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/navbar.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 426:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 427:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    dataRole: { default: 'navbar' },
+	    //\u5bfc\u822a\u6761\u80cc\u666f\u8272
+	    backgroundColor: { default: 'black' },
+	    //\u5bfc\u822a\u6761\u9ad8\u5ea6
+	    height: { default: 88 },
+	    //\u5bfc\u822a\u6761\u6807\u9898 
+	    title: { default: '' },
+	    //\u5bfc\u822a\u6761\u6807\u9898\u989c\u8272
+	    titleColor: { default: 'black' },
+	    //\u53f3\u4fa7\u6309\u94ae\u56fe\u7247
+	    rightItemSrc: { default: '' },
+	    //\u53f3\u4fa7\u6309\u94ae\u6807\u9898
+	    rightItemTitle: { default: '' },
+	    //\u53f3\u4fa7\u6309\u94ae\u6807\u9898\u989c\u8272
+	    rightItemColor: { default: 'black' },
+	    //\u5de6\u4fa7\u6309\u94ae\u56fe\u7247
+	    leftItemSrc: { default: '' },
+	    //\u5de6\u4fa7\u6309\u94ae\u6807\u9898
+	    leftItemTitle: { default: '' },
+	    //\u5de6\u4fa7\u6309\u94ae\u989c\u8272
+	    leftItemColor: { default: 'black' }
+	  },
+	  methods: {
+	    onclickrightitem: function onclickrightitem(e) {
+	      this.$emit('naviBarRightItemClick');
+	    },
+	    onclickleftitem: function onclickleftitem(e) {
+	      this.$emit('naviBarLeftItemClick');
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 428:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["container"],
+	    style: {
+	      height: _vm.height,
+	      backgroundColor: _vm.backgroundColor
+	    },
+	    attrs: {
+	      "dataRole": _vm.dataRole
+	    }
+	  }, [(!_vm.rightItemSrc) ? _h('text', {
+	    staticClass: ["right-text"],
+	    style: {
+	      color: _vm.rightItemColor
+	    },
+	    attrs: {
+	      "naviItemPosition": "right"
+	    },
+	    on: {
+	      "click": _vm.onclickrightitem
+	    }
+	  }, [_vm._s(_vm.rightItemTitle)]) : _vm._e(), (_vm.rightItemSrc) ? _h('image', {
+	    staticClass: ["right-image"],
+	    attrs: {
+	      "naviItemPosition": "right",
+	      "src": _vm.rightItemSrc
+	    },
+	    on: {
+	      "click": _vm.onclickrightitem
+	    }
+	  }) : _vm._e(), (!_vm.leftItemSrc) ? _h('text', {
+	    staticClass: ["left-text"],
+	    style: {
+	      color: _vm.leftItemColor
+	    },
+	    attrs: {
+	      "naviItemPosition": "left"
+	    },
+	    on: {
+	      "click": _vm.onclickleftitem
+	    }
+	  }, [_vm._s(_vm.leftItemTitle)]) : _vm._e(), (_vm.leftItemSrc) ? _h('image', {
+	    staticClass: ["left-image"],
+	    attrs: {
+	      "naviItemPosition": "left",
+	      "src": _vm.leftItemSrc
+	    },
+	    on: {
+	      "click": _vm.onclickleftitem
+	    }
+	  }) : _vm._e(), _h('text', {
+	    staticClass: ["center-text"],
+	    style: {
+	      color: _vm.titleColor
+	    },
+	    attrs: {
+	      "naviItemPosition": "center"
+	    }
+	  }, [_vm._s(_vm.title)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 429:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('navbar', {
+	    attrs: {
+	      "dataRole": _vm.dataRole,
+	      "height": _vm.height,
+	      "backgroundColor": _vm.backgroundColor,
+	      "title": _vm.title,
+	      "titleColor": _vm.titleColor,
+	      "leftItemSrc": _vm.leftItemSrc,
+	      "leftItemTitle": _vm.leftItemTitle,
+	      "leftItemColor": _vm.leftItemColor,
+	      "rightItemSrc": _vm.rightItemSrc,
+	      "rightItemTitle": _vm.rightItemTitle,
+	      "rightItemColor": _vm.rightItemColor
+	    },
+	    on: {
+	      "naviBarRightItemClick": _vm.naviBarRightItemClick,
+	      "naviBarLeftItemClick": _vm.naviBarLeftItemClick
+	    }
+	  }), _h('div', {
+	    staticClass: ["wrapper"],
+	    style: {
+	      marginTop: _vm.height
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 430:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('navpage', {
+	    attrs: {
+	      "dataRole": "none",
+	      "height": _vm.navBarHeight,
+	      "title": _vm.title,
+	      "backgroundColor": "#ff5898",
+	      "titleColor": "white",
+	      "leftItemTitle": "More",
+	      "leftItemColor": "white",
+	      "rightItemSrc": "http://gtms02.alicdn.com/tps/i2/TB1ED7iMpXXXXXEXXXXWA_BHXXX-48-48.png"
+	    },
+	    on: {
+	      "naviBarLeftItemClick": _vm.naviBarLeftItemClick,
+	      "naviBarRightItemClick": _vm.naviBarRightItemClick
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "push a new page"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "push"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.push($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "pop to the last page"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "type": "success",
+	      "size": "small",
+	      "value": "pop"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.pop($event)
+	      }
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/scroller.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/scroller.js b/android/playground/app/src/main/assets/vue/components/scroller.js
new file mode 100644
index 0000000..922f338
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/scroller.js
@@ -0,0 +1,304 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(431)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(432)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(433)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/scroller.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 431:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "refresh-view": {
+	    "height": 120,
+	    "width": 750,
+	    "display": "flex",
+	    "MsFlexAlign": "center",
+	    "WebkitAlignItems": "center",
+	    "WebkitBoxAlign": "center",
+	    "alignItems": "center"
+	  },
+	  "refresh-arrow": {
+	    "fontSize": 30,
+	    "color": "#45b5f0"
+	  },
+	  "loading-view": {
+	    "height": 80,
+	    "width": 750,
+	    "justifyContent": "center",
+	    "alignItems": "center"
+	  },
+	  "indicator": {
+	    "height": 40,
+	    "width": 40,
+	    "color": "#45b5f0"
+	  },
+	  "header": {
+	    "backgroundColor": "#45b5f0",
+	    "padding": 20,
+	    "height": 88,
+	    "justifyContent": "center"
+	  },
+	  "header-title": {
+	    "color": "#FFFFFF",
+	    "fontWeight": "bold"
+	  },
+	  "item": {
+	    "justifyContent": "center",
+	    "borderBottomWidth": 2,
+	    "borderBottomColor": "#c0c0c0",
+	    "height": 100,
+	    "padding": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 432:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  methods: {
+	    onrefresh: function onrefresh(e) {
+	      var self = this;
+	      self.refresh_display = 'show';
+	      setTimeout(function () {
+	        self.refresh_display = 'hide';
+	      }, 1000);
+	    },
+	    onloading: function onloading(e) {
+	      var self = this;
+	      self.loading_display = 'show';
+	      setTimeout(function () {
+	        self.loading_display = 'hide';
+	      }, 1000);
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      refresh_display: 'hide',
+	      loading_display: 'hide',
+	      sections: [{
+	        title: 'Header 1',
+	        items: [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]
+	      }, {
+	        title: 'Header 2',
+	        items: [{ id: 6 }, { id: 7 }, { id: 8 }, { id: 9 }, { id: 10 }, { id: 11 }]
+	      }],
+	      moreSections: [{
+	        title: 'Header 3',
+	        items: [{ id: 12 }, { id: 13 }, { id: 14 }, { id: 15 }, { id: 16 }, { id: 17 }, { id: 18 }]
+	      }, {
+	        title: 'Header 4',
+	        items: [{ id: 19 }, { id: 20 }, { id: 21 }, { id: 22 }]
+	      }, {
+	        title: 'Header 5',
+	        items: [{ id: 23 }, { id: 24 }, { id: 25 }, { id: 26 }, { id: 27 }]
+	      }, {
+	        title: 'Header 6',
+	        items: [{ id: 28 }, { id: 29 }, { id: 30 }, { id: 31 }, { id: 32 }]
+	      }]
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 433:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', {
+	    staticClass: ["list"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree"
+	    }
+	  }, [_vm._l((_vm.sections), function(sec) {
+	    return _h('div', {
+	      staticClass: ["section"]
+	    }, [_h('div', {
+	      staticClass: ["header"]
+	    }, [_h('text', {
+	      staticClass: ["header-title"]
+	    }, [_vm._s(sec.title)])]), _vm._l((sec.items), function(item) {
+	      return _h('div', {
+	        staticClass: ["item"]
+	      }, [_h('text', {
+	        staticClass: ["item-title"]
+	      }, ["row " + _vm._s(item.id)])])
+	    })])
+	  }), _h('loading', {
+	    staticClass: ["loading-view"],
+	    attrs: {
+	      "display": _vm.loading_display,
+	      "onloading": "onloading"
+	    }
+	  }, [_h('loading-indicator', {
+	    staticStyle: {
+	      height: "60",
+	      width: "60"
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file


[14/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..09b72b4
--- /dev/null
+++ b/android/playground/app/src/main/assets/geolocation.js
@@ -0,0 +1,183 @@
+/******/ (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/93063f14/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/93063f14/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..1264d6b 100644
--- a/android/playground/app/src/main/assets/index.js
+++ b/android/playground/app/src/main/assets/index.js
@@ -2958,7 +2958,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: 'linear-gradient', title: 'Gradient Color' }, { 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-dem
 o', 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' }, { name: 'showcase/pseudo-class', title: 'PseudoClass' }]
 	  }}
 	};}
 	/* generated by weex-loader */

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/linear-gradient.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/linear-gradient.js b/android/playground/app/src/main/assets/linear-gradient.js
new file mode 100644
index 0000000..3866ce5
--- /dev/null
+++ b/android/playground/app/src/main/assets/linear-gradient.js
@@ -0,0 +1,367 @@
+/******/ (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__(205)
+	var __weex_style__ = __webpack_require__(206)
+
+	__weex_define__('@weex-component/695f94322dfa977e2812d2616f20e495', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/695f94322dfa977e2812d2616f20e495',undefined,undefined)
+
+/***/ },
+
+/***/ 205:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "style": {
+	    "backgroundColor": "#3a3a3a"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to right,#43C6AC,#F8FFAE)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to right"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to left,#DCE35B,#45B649)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to left"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to bottom,#3494E6,#EC6EAD)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to bottom"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to top,#ee0979,#ff6a00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to top"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "flexDirection": "row",
+	        "alignItems": "center",
+	        "justifyContent": "center"
+	      },
+	      "children": [
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to bottom right,#00c3ff,#ffff1c)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to bottom right"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to top left,#ff00cc,#333399)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to top left"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to right,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to right"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to left,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to left"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to bottom,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to bottom"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to top,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to top"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "flexDirection": "row",
+	        "alignItems": "center",
+	        "justifyContent": "center"
+	      },
+	      "children": [
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to bottom right,#a80077,#66ff00)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to bottom right"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to top left,#a80077,#66ff00)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to top left"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 206:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container1": {
+	    "margin": 10,
+	    "width": 730,
+	    "height": 200,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "border": "solid",
+	    "borderRadius": 10
+	  },
+	  "container2": {
+	    "margin": 10,
+	    "width": 300,
+	    "height": 300,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "border": "solid",
+	    "borderRadius": 10
+	  },
+	  "direction": {
+	    "fontSize": 40,
+	    "color": "#FFFFFF"
+	  }
+	}
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..227c758 100644
--- a/android/playground/app/src/main/assets/module/clipboard.js
+++ b/android/playground/app/src/main/assets/module/clipboard.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(205)
-	var __weex_script__ = __webpack_require__(206)
+	var __weex_template__ = __webpack_require__(207)
+	var __weex_script__ = __webpack_require__(208)
 
 	__weex_define__('@weex-component/e93e729eb05598f04027627a24c804bf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2158,7 +2158,9 @@
 /* 202 */,
 /* 203 */,
 /* 204 */,
-/* 205 */
+/* 205 */,
+/* 206 */,
+/* 207 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2252,7 +2254,7 @@
 	}
 
 /***/ },
-/* 206 */
+/* 208 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2281,22 +2283,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/93063f14/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..f8e1d32 100644
--- a/android/playground/app/src/main/assets/module/componentRect.js
+++ b/android/playground/app/src/main/assets/module/componentRect.js
@@ -45,9 +45,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__(209)
+	var __weex_template__ = __webpack_require__(213)
+	var __weex_style__ = __webpack_require__(214)
+	var __weex_script__ = __webpack_require__(215)
 
 	__weex_define__('@weex-component/3cccb00caad47f9888c7597d009c670e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +67,101 @@
 
 /***/ },
 
-/***/ 207:
+/***/ 209:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(210)
+	var __weex_style__ = __webpack_require__(211)
+	var __weex_script__ = __webpack_require__(212)
+
+	__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__
+
+	})
+
+
+/***/ },
+
+/***/ 210:
+/***/ 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}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 211:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 212:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    descript: '',
+	    detail: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+
+/***/ 213:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -335,7 +430,7 @@
 
 /***/ },
 
-/***/ 208:
+/***/ 214:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -412,7 +507,7 @@
 
 /***/ },
 
-/***/ 209:
+/***/ 215:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..512d721 100644
--- a/android/playground/app/src/main/assets/module/instance-api.js
+++ b/android/playground/app/src/main/assets/module/instance-api.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(210)
-	var __weex_script__ = __webpack_require__(211)
+	var __weex_template__ = __webpack_require__(216)
+	var __weex_script__ = __webpack_require__(217)
 
 	__weex_define__('@weex-component/2c1f438ffab50b73880065c54d5a1b0c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2163,7 +2163,13 @@
 /* 207 */,
 /* 208 */,
 /* 209 */,
-/* 210 */
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2188,7 +2194,7 @@
 	}
 
 /***/ },
-/* 211 */
+/* 217 */
 /***/ 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/93063f14/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..a98d0d0 100644
--- a/android/playground/app/src/main/assets/module/modal.js
+++ b/android/playground/app/src/main/assets/module/modal.js
@@ -44,9 +44,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__(218)
+	var __weex_style__ = __webpack_require__(219)
+	var __weex_script__ = __webpack_require__(220)
 
 	__weex_define__('@weex-component/3e30f1e2562a57b329ab7ebd1387f07b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2154,7 +2154,13 @@
 /* 209 */,
 /* 210 */,
 /* 211 */,
-/* 212 */
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2228,13 +2234,13 @@
 	}
 
 /***/ },
-/* 213 */
+/* 219 */
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
-/* 214 */
+/* 220 */
 /***/ 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/93063f14/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..2f2e1c8 100644
--- a/android/playground/app/src/main/assets/module/picker-demo.js
+++ b/android/playground/app/src/main/assets/module/picker-demo.js
@@ -44,9 +44,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__(221)
+	var __weex_style__ = __webpack_require__(222)
+	var __weex_script__ = __webpack_require__(223)
 
 	__weex_define__('@weex-component/713f21e067b638ad251dbcb7d5b37be5', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2157,7 +2157,13 @@
 /* 212 */,
 /* 213 */,
 /* 214 */,
-/* 215 */
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2268,7 +2274,7 @@
 	}
 
 /***/ },
-/* 216 */
+/* 222 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2280,7 +2286,7 @@
 	}
 
 /***/ },
-/* 217 */
+/* 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/93063f14/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..5aa0088 100644
--- a/android/playground/app/src/main/assets/module/storage-demo.js
+++ b/android/playground/app/src/main/assets/module/storage-demo.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(218)
-	var __weex_script__ = __webpack_require__(219)
+	var __weex_template__ = __webpack_require__(224)
+	var __weex_script__ = __webpack_require__(225)
 
 	__weex_define__('@weex-component/6f110d391fd7b90c9a19583f6ee1a7cf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2171,7 +2171,13 @@
 /* 215 */,
 /* 216 */,
 /* 217 */,
-/* 218 */
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2260,7 +2266,7 @@
 	}
 
 /***/ },
-/* 219 */
+/* 225 */
 /***/ 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/93063f14/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..36cfffe 100644
--- a/android/playground/app/src/main/assets/module/stream-demo.js
+++ b/android/playground/app/src/main/assets/module/stream-demo.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(220)
-	var __weex_script__ = __webpack_require__(221)
+	var __weex_template__ = __webpack_require__(226)
+	var __weex_script__ = __webpack_require__(227)
 
 	__weex_define__('@weex-component/2c445dcf67fa0895d197edb5ffa2f439', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2173,7 +2173,13 @@
 /* 217 */,
 /* 218 */,
 /* 219 */,
-/* 220 */
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2290,7 +2296,7 @@
 	}
 
 /***/ },
-/* 221 */
+/* 227 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2359,8 +2365,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 {


[18/18] incubator-weex git commit: Merge commit '5cb0819472bf7db3d2843e1634f9d7fea1dee368' into 0.12-dev

Posted by cx...@apache.org.
Merge commit '5cb0819472bf7db3d2843e1634f9d7fea1dee368' 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/d0736364
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d0736364
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d0736364

Branch: refs/heads/0.12-dev
Commit: d07363641f3d8e1624d4d921cf6a80c38a53248d
Parents: e1be952 5cb0819
Author: cxfeng <cx...@apache.org>
Authored: Mon Mar 27 15:41:52 2017 +0800
Committer: cxfeng <cx...@apache.org>
Committed: Mon Mar 27 15:41:52 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
 examples/component/image-demo.we                |    2 +-
 .../WeexSDK/Sources/Component/WXListComponent.m |    4 +
 129 files changed, 33181 insertions(+), 863 deletions(-)
----------------------------------------------------------------------



[15/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
Merge branch 'v0.10.0-playground' into 0.11-dev

* v0.10.0-playground:
  *[android] update app version 0.10.0
  *[android] update app version
  *[android] update example
  \u66f4\u65b0example
  *[android] update ic_launcher
  * [android] update app version
  * [android] update weex_inspector version
  * [android] add mask component
  * [android] update verison
  * [android] add linear-gradient.we

# Conflicts:
#	android/playground/app/build.gradle
#	android/sdk/assets/main.js
#	android/sdk/build.gradle
#	examples/module/websocket-demo.we
#	examples/vue/components/input.vue
#	examples/vue/include/marquee.vue
#	examples/vue/index.vue
#	examples/vue/showcase/calculator.vue
#	examples/vue/template.vue


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

Branch: refs/heads/0.12-dev
Commit: 93063f1425289e2b501a0bd821f5e1153e52849a
Parents: 373ae38
Author: xkli <56...@qq.com>
Authored: Mon Mar 27 14:58:56 2017 +0800
Committer: xkli <56...@qq.com>
Committed: Mon Mar 27 14:58:56 2017 +0800

----------------------------------------------------------------------
 .../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
 126 files changed, 33175 insertions(+), 861 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..a6ce716
--- /dev/null
+++ b/android/playground/app/src/main/assets/component/slider-neighbor/index.js
@@ -0,0 +1,264 @@
+/******/ (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": "div",
+	  "style": {
+	    "flexDirection": "column",
+	    "backgroundColor": "#ffffff",
+	    "width": 750,
+	    "height": 600,
+	    "borderWidth": 0
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "style": {
+	        "width": 700,
+	        "height": 400,
+	        "borderWidth": 1,
+	        "borderStyle": "solid",
+	        "borderColor": "#000000",
+	        "margin": 0
+	      },
+	      "children": [
+	        {
+	          "type": "slider-neighbor",
+	          "style": {
+	            "width": 700,
+	            "height": 400
+	          },
+	          "attr": {
+	            "neighborScale": "0.8",
+	            "neighborSpace": "30",
+	            "currentItemScale": "0.90",
+	            "interval": "3000",
+	            "neighborAlpha": "0.8",
+	            "autoPlay": function () {return this.attr_auto_play}
+	          },
+	          "children": [
+	            {
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "backgroundColor": "#FFFFDF",
+	                "height": 400
+	              },
+	              "attr": {
+	                "src": "https://gw.alicdn.com/tps/TB1dzanMVXXXXXQXVXXXXXXXXXX-573-412.png"
+	              }
+	            },
+	            {
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "backgroundColor": "#FFFFDF",
+	                "height": 400
+	              },
+	              "attr": {
+	                "src": "https://gw.alicdn.com/tps/TB1p9CCMVXXXXa_XFXXXXXXXXXX-450-340.png"
+	              }
+	            },
+	            {
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "backgroundColor": "#FFFFDF",
+	                "height": 400
+	              },
+	              "attr": {
+	                "src": "https://gw.alicdn.com/tps/TB1zpSiMVXXXXchXFXXXXXXXXXX-448-338.png"
+	              }
+	            },
+	            {
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "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": "div",
+	      "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/93063f14/android/playground/app/src/main/assets/component/slider-neighbor/silder-neighbor.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/component/slider-neighbor/silder-neighbor.js b/android/playground/app/src/main/assets/component/slider-neighbor/silder-neighbor.js
deleted file mode 100644
index eaad725..0000000
--- a/android/playground/app/src/main/assets/component/slider-neighbor/silder-neighbor.js
+++ /dev/null
@@ -1,287 +0,0 @@
-/******/ (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/4abbbff77bbabe33ce2a4c6bd84a533a', [], 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/4abbbff77bbabe33ce2a4c6bd84a533a',undefined,undefined)
-
-/***/ },
-
-/***/ 151:
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "scroller",
-	  "style": {
-	    "flexDirection": "column",
-	    "backgroundColor": "#ffffff",
-	    "width": 750,
-	    "height": 600,
-	    "borderWidth": 0
-	  },
-	  "children": [
-	    {
-	      "type": "tc_support_maintitle",
-	      "attr": {
-	        "title": "AG_Test_Slider-Neighbor_Auto_Play"
-	      }
-	    },
-	    {
-	      "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.7",
-	            "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/93063f14/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..cfca88c 100644
--- a/android/playground/app/src/main/assets/component/slider/index.js
+++ b/android/playground/app/src/main/assets/component/slider/index.js
@@ -2328,6 +2328,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/93063f14/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..695bee4 100644
--- a/android/playground/app/src/main/assets/component/text-demo.js
+++ b/android/playground/app/src/main/assets/component/text-demo.js
@@ -2310,6 +2310,114 @@
 	          "attr": {
 	            "value": "bold"
 	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "100"
+	          },
+	          "attr": {
+	            "value": "100"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "200"
+	          },
+	          "attr": {
+	            "value": "200"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "300"
+	          },
+	          "attr": {
+	            "value": "300"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "400"
+	          },
+	          "attr": {
+	            "value": "400"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "500"
+	          },
+	          "attr": {
+	            "value": "500"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "600"
+	          },
+	          "attr": {
+	            "value": "600"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "700"
+	          },
+	          "attr": {
+	            "value": "700"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "800"
+	          },
+	          "attr": {
+	            "value": "800"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "900"
+	          },
+	          "attr": {
+	            "value": "900"
+	          }
 	        }
 	      ]
 	    },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..393d070 100644
--- a/android/playground/app/src/main/assets/component/web-demo.js
+++ b/android/playground/app/src/main/assets/component/web-demo.js
@@ -2254,7 +2254,6 @@
 	module.exports = {
 	    methods: {
 	        goback: function goback() {
-	            var $webview = __weex_require__('@weex-module/webview');
 	            var webElement = this.$el('webview');
 	            $webview.goBack(webElement.ref);
 	        },

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..2b0ade1
--- /dev/null
+++ b/android/playground/app/src/main/assets/error.js
@@ -0,0 +1,2217 @@
+/******/ (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"
+	  },
+	  "panel-body": {}
+	}
+
+/***/ },
+/* 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


[04/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/hello-world-3.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-3.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-3.js
new file mode 100644
index 0000000..2726128
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-3.js
@@ -0,0 +1,127 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(563)
+	)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(564)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-3.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 563:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 564:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello World"])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/hello-world-4.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-4.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-4.js
new file mode 100644
index 0000000..d46a4cc
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-4.js
@@ -0,0 +1,167 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(565)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(566)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(567)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-4.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 565:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 566:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    target: 'World'
+	  }
+	};
+
+/***/ },
+
+/***/ 567:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": _vm.logoUrl
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.target)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/hello-world-5.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-5.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-5.js
new file mode 100644
index 0000000..1818b65
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-5.js
@@ -0,0 +1,173 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(568)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(569)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(570)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-5.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 568:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 569:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    target: 'World'
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.target = 'Weex';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 570:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": _vm.logoUrl
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.target)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/hello-world.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world.js b/android/playground/app/src/main/assets/vue/syntax/hello-world.js
new file mode 100644
index 0000000..e7bce00
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world.js
@@ -0,0 +1,183 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(558)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(559)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(560)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 558:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 559:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    target: 'World'
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.target = 'Weex';
+	      console.log('target:', this.target);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 560:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": _vm.logoUrl
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.target)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/script-component.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-component.js b/android/playground/app/src/main/assets/vue/syntax/script-component.js
new file mode 100644
index 0000000..c27cffc
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-component.js
@@ -0,0 +1,224 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(571)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(576)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-component.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 571:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      items: [{ title: 'A', url: 'a' }, { title: 'B', url: 'b' }, { title: 'C', url: 'c' }]
+	    };
+	  },
+	  components: {
+	    item: __webpack_require__(572)
+	  }
+	};
+
+/***/ },
+
+/***/ 572:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(573)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(574)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(575)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/include/sub.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 573:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item-txt": {
+	    "fontSize": 48,
+	    "color": "#555555"
+	  }
+	}
+
+/***/ },
+
+/***/ 574:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: ['url', 'title']
+	};
+
+/***/ },
+
+/***/ 575:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item-txt"]
+	  }, [_vm._s(_vm.title)])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 576:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list', [_vm._l((_vm.items), function(item) {
+	    return _h('cell', [_h('text', [_vm._s(item.title)]), _h('item', {
+	      attrs: {
+	        "title": 'a'
+	      }
+	    })])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/script-data.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-data.js b/android/playground/app/src/main/assets/vue/syntax/script-data.js
new file mode 100644
index 0000000..77e919a
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-data.js
@@ -0,0 +1,214 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(577)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(578)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(579)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-data.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 577:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 578:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	// // if this is a sub component and the parent component could set `firstName` and `lastName` by:
+	// // `<subcomponent first-name="John" last-name="Smith"></subcomponent>`
+	// // but the `date` won't be changed from parent component
+	// module.exports = {
+	//   props: ['firstName', 'lastName'],
+	//   data: function () {
+	//     return {
+	//       date: Date.now()
+	//     }
+	//   }
+	// }
+
+	// // more `props` formats like
+	// module.exports = {
+	//   props: {
+	//     firstName: {
+	//       default: 'John'
+	//     },
+	//     lastName: {
+	//       type: String,
+	//       default: 'Smith'
+	//     }
+	//   },
+	//   data: function () {
+	//     return {
+	//       date: Date.now()
+	//     }
+	//   }
+	// }
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      firstName: 'John',
+	      lastName: 'Smith',
+	      date: Date.now()
+	    };
+	  },
+	  methods: {
+	    update: function update() {
+	      this.today = '2016-01-01';
+	      console.log('today:', this.today);
+	    }
+	  },
+	  computed: {
+	    fullName: function fullName() {
+	      return this.firstName + ' ' + this.lastName;
+	    },
+	    today: {
+	      get: function get() {
+	        return new Date(this.date).toDateString();
+	      },
+	      set: function set(v) {
+	        this.date = Date.parse(v);
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 579:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.firstName)]), _h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.lastName)]), _h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.fullName)]), _h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.today)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/script-events.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-events.js b/android/playground/app/src/main/assets/vue/syntax/script-events.js
new file mode 100644
index 0000000..ef2a671
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-events.js
@@ -0,0 +1,161 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(580)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(581)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(582)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-events.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 580:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 581:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: []
+	    };
+	  },
+	  mounted: function mounted() {
+	    function custom(e) {
+	      this.list.push('custom: ' + JSON.stringify(e));
+	      console.log(this.list);
+	    }
+
+	    this.$emit('custom', { x: 1 });
+
+	    this.$on('custom', custom);
+	    this.$emit('custom', { x: 2 });
+
+	    this.$off('custom', custom);
+	    this.$emit('custom', { x: 3 });
+	  }
+	};
+
+/***/ },
+
+/***/ 582:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_vm._l((_vm.list), function(value) {
+	    return _h('text', {
+	      staticClass: ["title"]
+	    }, [_vm._s(value)])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/script-instance.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-instance.js b/android/playground/app/src/main/assets/vue/syntax/script-instance.js
new file mode 100644
index 0000000..2af274c
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-instance.js
@@ -0,0 +1,196 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(583)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(584)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(585)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-instance.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 583:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 584:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      x: 1,
+	      y: 2
+	    };
+	  },
+	  methods: {
+	    foo: function foo() {
+	      console.log('foo');
+	    },
+	    test: function test() {
+
+	      // access data/props
+	      console.log(this.x);
+
+	      // access computed
+	      console.log(this.z);
+
+	      // call methods
+	      this.foo();
+
+	      // get config
+	      console.log(this.$getConfig());
+
+	      // listen and fire component events
+	      this.$emit('custom');
+	      this.$on('custom', this.foo);
+	      this.$off('custom', this.foo);
+
+	      // // parent component and sub components
+	      // this.$parent.$emit('custom')
+	      // this.$refs['sub'].$emit('custom')
+
+	      // // find element
+	      // var dom = __weex_require_module__('dom')
+	      // dom.scrollToElement(this.$el('title'), {offset: 0})
+	    }
+	  },
+	  computed: {
+	    z: function z() {
+	      return this.x + this.y;
+	    }
+	  },
+	  mounted: function mounted() {
+	    this.test();
+	  }
+	};
+
+/***/ },
+
+/***/ 585:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "id": "title"
+	    }
+	  }, ["Please check out the source code."])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/script-lifecycle.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-lifecycle.js b/android/playground/app/src/main/assets/vue/syntax/script-lifecycle.js
new file mode 100644
index 0000000..3c52de4
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-lifecycle.js
@@ -0,0 +1,155 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(586)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(587)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(588)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-lifecycle.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 586:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 587:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var initMessage;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: ['Lifecycle List']
+	    };
+	  },
+	  init: function init() {
+	    initMessage = 'component init: nothing more happen even the data initialization';
+	    console.log('init:', this.list);
+	  },
+	  created: function created() {
+	    this.list.push(initMessage);
+	    this.list.push('component created: data observed');
+	    console.log('created:', this.list);
+	  },
+	  mounted: function mounted() {
+	    this.list.push('component mounted: virtual dom generated');
+	    console.log('mounted:', this.list);
+	  }
+	};
+
+/***/ },
+
+/***/ 588:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_vm._l((_vm.list), function(value) {
+	    return _h('text', {
+	      staticClass: ["title"]
+	    }, [_vm._s(value)])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/script-module.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-module.js b/android/playground/app/src/main/assets/vue/syntax/script-module.js
new file mode 100644
index 0000000..4e904f3
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-module.js
@@ -0,0 +1,156 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(589)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(590)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(591)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-module.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 589:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 590:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  methods: {
+	    test: function test() {
+	      modal.toast({
+	        message: 'Toast!',
+	        duration: 3
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 591:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.test
+	    }
+	  }, ["Toast!"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/script-options.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-options.js b/android/playground/app/src/main/assets/vue/syntax/script-options.js
new file mode 100644
index 0000000..25e9d94
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-options.js
@@ -0,0 +1,182 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(592)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(593)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(594)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-options.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 592:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 593:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  // // import sub components
+	  // components: {
+	  //   item: require('./components/sub.vue')
+	  // },
+
+	  // // for sub component only
+	  // props: ['a', 'b'],
+
+	  // for root component only
+	  data: {
+	    x: 1,
+	    y: 2
+	  },
+	  // // for sub component only
+	  // data: function () {
+	  //   return {
+	  //     x: 1,
+	  //     y: 2
+	  //   }
+	  // }
+
+	  methods: {
+	    foo: function foo() {
+	      console.log('foo');
+	    }
+	  },
+
+	  computed: {
+	    z: function z() {
+	      return this.x + this.y;
+	    }
+	  },
+
+	  init: function init() {},
+	  created: function created() {},
+	  mounted: function mounted() {}
+	};
+
+/***/ },
+
+/***/ 594:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Please check out the source code."])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/template-class.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-class.js b/android/playground/app/src/main/assets/vue/syntax/template-class.js
new file mode 100644
index 0000000..1b70b78
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-class.js
@@ -0,0 +1,161 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(595)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(596)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(597)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-class.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 595:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "a": {
+	    "fontSize": 48
+	  },
+	  "b": {
+	    "color": "#ff0000"
+	  }
+	}
+
+/***/ },
+
+/***/ 596:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    x: ''
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.x = 'b';
+	      console.log('x', this.x);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 597:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('text', {
+	    staticClass: ["a"]
+	  }, ["Hello"]), _h('text', {
+	    staticClass: ["b"]
+	  }, ["Hello"]), _h('text', {
+	    class: ['a', _vm.x]
+	  }, ["Hello"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/template-content.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-content.js b/android/playground/app/src/main/assets/vue/syntax/template-content.js
new file mode 100644
index 0000000..d9bddef
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-content.js
@@ -0,0 +1,189 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(598)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(602)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-content.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 598:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    btn: __webpack_require__(599)
+	  }
+	};
+
+/***/ },
+
+/***/ 599:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(600)
+	)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(601)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/include/btn.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 600:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 601:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["btn"]
+	  }, [_vm._t("default")])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 602:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('btn', [_h('text', ["Click!"])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/template-event.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-event.js b/android/playground/app/src/main/assets/vue/syntax/template-event.js
new file mode 100644
index 0000000..61e8a88
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-event.js
@@ -0,0 +1,197 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(603)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(604)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(605)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-event.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 603:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "subtitle": {
+	    "fontSize": 36
+	  },
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 604:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      name: 'Steve',
+	      temp: 'Mike'
+	    };
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.setName('David');
+	      console.log('setName', this.name);
+	    },
+	    setName: function setName(value) {
+	      this.name = value;
+	      console.log('name', this.name);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 605:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.name)]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, ["Update 1"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": function($event) {
+	        _vm.update($event)
+	      }
+	    }
+	  }, ["Update 1"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": function($event) {
+	        _vm.setName(_vm.temp, $event)
+	      }
+	    }
+	  }, ["Update 2"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": function($event) {
+	        _vm.setName('John')
+	      }
+	    }
+	  }, ["Update 3"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/template-if.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-if.js b/android/playground/app/src/main/assets/vue/syntax/template-if.js
new file mode 100644
index 0000000..192f88b
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-if.js
@@ -0,0 +1,165 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(606)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(607)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(608)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-if.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 606:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 607:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    flag: true
+	  },
+	  methods: {
+	    toggle: function toggle(e) {
+	      this.flag = !this.flag;
+	      console.log('this.flag:', this.flag);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 608:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.toggle
+	    }
+	  }, ["Toggle"]), (_vm.flag) ? _h('text', {
+	    staticClass: ["title"]
+	  }, ["I'm ON"]) : _vm._e(), (!_vm.flag) ? _h('text', {
+	    staticClass: ["title"]
+	  }, ["I'm Off"]) : _vm._e()])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/template-repeat-update.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-repeat-update.js b/android/playground/app/src/main/assets/vue/syntax/template-repeat-update.js
new file mode 100644
index 0000000..1d28c34
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-repeat-update.js
@@ -0,0 +1,195 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(612)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(613)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(614)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-repeat-update.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 612:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "subtitle": {
+	    "fontSize": 36
+	  },
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 613:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: [{ key: 1, text: 'a' }, { key: 2, text: 'a' }, { key: 3, text: 'b' }, { key: 4, text: 'c' }, { key: 5, text: 'a' }],
+	      flag: true
+	    };
+	  },
+	  methods: {
+	    update: function update(e) {
+	      // equals to `this.list.text = 'foo'`
+	      // DO NOT USE: `this.list[2] = {key: 3, text: 'foo'}}`
+	      Vue.set(this.list, 2, { key: 3, text: 'foo' });
+	      console.log('this.list', this.list);
+	    },
+	    mutate: function mutate(e) {
+	      if (this.list.length % 2) {
+	        this.list.push({ key: 'x', text: 'bar' });
+	      } else {
+	        this.list.pop();
+	      }
+	      console.log('this.list', this.list);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 614:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Track by"]), _vm._l((_vm.list), function(item, k, $index) {
+	    return _h('text', {
+	      staticClass: ["subtitle"],
+	      attrs: {
+	        "track-by": "item.key"
+	      }
+	    }, [_vm._s($index) + "-" + _vm._s(item.text)])
+	  }), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, ["Update"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.mutate
+	    }
+	  }, ["Mutate"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/template-repeat.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-repeat.js b/android/playground/app/src/main/assets/vue/syntax/template-repeat.js
new file mode 100644
index 0000000..f2dc598
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-repeat.js
@@ -0,0 +1,170 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(609)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(610)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(611)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-repeat.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 609:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "subtitle": {
+	    "fontSize": 36
+	  }
+	}
+
+/***/ },
+
+/***/ 610:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: ['a', 'b', 'c', 'd', 'e'],
+	      list2: [{ text: 'a' }, { text: 'b' }, { text: 'c' }, { text: 'd' }, { text: 'e' }]
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 611:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Custom item"]), _vm._l((_vm.list), function(item) {
+	    return _h('text', {
+	      staticClass: ["subtitle"]
+	    }, [_vm._s(item)])
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Custom key and item"]), _vm._l((_vm.list), function(i, v) {
+	    return _h('text', {
+	      staticClass: ["subtitle"]
+	    }, [_vm._s(i) + "-" + _vm._s(v)])
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Array of Object"]), _vm._l((_vm.list2), function(item, k, index) {
+	    return _h('text', {
+	      staticClass: ["subtitle"]
+	    }, ["> " + _vm._s(index) + "-" + _vm._s(item.text)])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/syntax/template-style.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-style.js b/android/playground/app/src/main/assets/vue/syntax/template-style.js
new file mode 100644
index 0000000..845da94
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-style.js
@@ -0,0 +1,144 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(615)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(616)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-style.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 615:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      size: 32,
+	      color: '#ff0000'
+	    };
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.size = 48;
+	      console.log('this.size', this.size);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 616:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      fontSize: "48px",
+	      color: "#0000ff"
+	    }
+	  }, ["Hello"]), _h('text', {
+	    style: {
+	      fontSize: _vm.size,
+	      color: _vm.color
+	    }
+	  }, ["Hello"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file


[03/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/template.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/template.js b/android/playground/app/src/main/assets/vue/template.js
new file mode 100644
index 0000000..26a1496
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/template.js
@@ -0,0 +1,796 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(617)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(622)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/template.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 617:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    hn: __webpack_require__(618),
+	    tip: __webpack_require__(393),
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    toast: function toast() {
+	      modal.toast({ message: 'a toast', duration: 2 });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 618:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(619)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(620)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(621)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/hn.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 619:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 620:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    level: { default: 1 },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 621:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['h' + _vm.level],
+	    staticStyle: {
+	      justifyContent: "center"
+	    }
+	  }, [_h('text', {
+	    class: ['txt-h' + _vm.level]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 622:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Dialog",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "success",
+	      "value": "It's a weex example template."
+	    }
+	  }), _h('hn', {
+	    attrs: {
+	      "level": "1",
+	      "value": "H1"
+	    }
+	  }), _h('button', {
+	    attrs: {
+	      "type": "primary",
+	      "value": "Toast"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.toast($event)
+	      }
+	    }
+	  }), _h('hn', {
+	    attrs: {
+	      "level": "2",
+	      "value": "H3"
+	    }
+	  }), _h('button', {
+	    attrs: {
+	      "type": "warning",
+	      "value": "Toast"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.toast($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Image",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Weex screen width is 750"
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "400px",
+	      height: "400px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  }), _h('panel', {
+	    attrs: {
+	      "title": "Image",
+	      "type": "default"
+	    }
+	  }, [_h('text', ["sub info"])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/ic_launcher-web.png
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/ic_launcher-web.png b/android/playground/app/src/main/ic_launcher-web.png
new file mode 100644
index 0000000..bb92223
Binary files /dev/null and b/android/playground/app/src/main/ic_launcher-web.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..59bdb6b 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
@@ -214,6 +214,8 @@ import com.alibaba.weex.commons.adapter.JSExceptionAdapter;
 import com.alibaba.weex.extend.PlayDebugAdapter;
 import com.alibaba.weex.extend.component.RichText;
 import com.alibaba.weex.extend.component.WXComponentSyncTest;
+import com.alibaba.weex.extend.component.WXMask;
+import com.alibaba.weex.extend.component.dom.WXMaskDomObject;
 import com.alibaba.weex.extend.module.GeolocationModule;
 import com.alibaba.weex.extend.module.MyModule;
 import com.alibaba.weex.extend.module.RenderModule;
@@ -263,6 +265,9 @@ public class WXApplication extends Application {
       WXSDKEngine.registerModule("event", WXEventModule.class);
       WXSDKEngine.registerModule("syncTest", SyncTestModule.class);
 
+      WXSDKEngine.registerComponent("mask",WXMask.class);
+      WXSDKEngine.registerDomObject("mask", WXMaskDomObject.class);
+
       WXSDKEngine.registerModule("myModule", MyModule.class);
       WXSDKEngine.registerModule("geolocation", GeolocationModule.class);
       /**

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java
new file mode 100644
index 0000000..d7af4fb
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java
@@ -0,0 +1,167 @@
+/**
+ * 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.component;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.support.annotation.NonNull;
+import android.view.Gravity;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.PopupWindow;
+
+import com.alibaba.weex.extend.view.WXMaskView;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXVContainer;
+
+/**
+ * Created by lixinke on 2016/12/26.
+ */
+
+public class WXMask extends WXVContainer {
+
+  private PopupWindow mPopupWindow;
+  private WXMaskView mContainerView;
+
+  public WXMask(WXSDKInstance instance, WXDomObject dom, WXVContainer parent) {
+    super(instance, dom, parent);
+  }
+
+  @Override
+  protected View initComponentHostView(@NonNull Context context) {
+
+    mContainerView = new WXMaskView(context);
+    mPopupWindow = new PopupWindow(context);
+    mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+    mPopupWindow.setClippingEnabled(false);
+    mPopupWindow.setContentView(mContainerView);
+    mPopupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
+    mPopupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
+    mPopupWindow.showAtLocation(((Activity) context).getWindow().getDecorView(), Gravity.TOP, (int) getDomObject().getLayoutX(), (int) getDomObject().getLayoutY());
+
+    return mContainerView;
+  }
+
+  @Override
+  public boolean isVirtualComponent() {
+    return true;
+  }
+
+  @Override
+  public void removeVirtualComponent() {
+    if (mPopupWindow.isShowing()) {
+      mPopupWindow.dismiss();
+    }
+  }
+}

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

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/java/com/alibaba/weex/extend/view/WXMaskView.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/view/WXMaskView.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/view/WXMaskView.java
new file mode 100644
index 0000000..ffb1b89
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/view/WXMaskView.java
@@ -0,0 +1,220 @@
+/**
+ *
+ *                                  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.view;
+
+import android.content.Context;
+
+import com.taobao.weex.ui.view.WXFrameLayout;
+
+/**
+ * Created by lixinke on 2016/12/26.
+ */
+
+public class WXMaskView extends WXFrameLayout {
+
+  public WXMaskView(Context context) {
+    super(context);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png
index a3e1db8..0e70a40 100755
Binary files a/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png
index eddeab5..0da5e44 100755
Binary files a/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 83c8831..5d95120 100755
Binary files a/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 2ba4638..6901b4e 100755
Binary files a/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index e622712..ac38da2 100755
Binary files a/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ


[09/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/slider.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/slider.js b/android/playground/app/src/main/assets/vue/components/slider.js
new file mode 100644
index 0000000..c67c482
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/slider.js
@@ -0,0 +1,898 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(434)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(435)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(444)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/slider.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 434:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "body": {
+	    "backgroundColor": "#ffffff"
+	  },
+	  "slider": {
+	    "flexDirection": "row",
+	    "width": 690,
+	    "height": 360
+	  },
+	  "indicator": {
+	    "position": "absolute",
+	    "width": 690,
+	    "height": 420,
+	    "top": 140,
+	    "left": 240,
+	    "itemColor": "#dddddd",
+	    "itemSelectedColor": "rgb(40, 96, 144)"
+	  }
+	}
+
+/***/ },
+
+/***/ 435:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var img0 = '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg';
+	var img1 = '//gw.alicdn.com/tps/i1/TB1M3sQMpXXXXakXXXXApNeJVXX-360-360.png';
+	module.exports = {
+	  data: function data() {
+	    return {
+	      eventCnt: 0,
+	      togglePlayMsg: 'pause',
+	      sliders: [{
+	        interval: 1000,
+	        autoPlay: true,
+	        sliderPages: [{
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }]
+	      }, {
+	        interval: 3000,
+	        autoPlay: true,
+	        sliderPages: [{
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }]
+	      }, {
+	        interval: 5000,
+	        autoPlay: true,
+	        sliderPages: [{
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }]
+	      }]
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    sliderPage: __webpack_require__(436)
+	  },
+	  methods: {
+	    togglePlay: function togglePlay() {
+	      var autoPlay = this.sliders[0].autoPlay;
+	      autoPlay = !autoPlay;
+	      this.sliders[0].autoPlay = autoPlay;
+	      this.togglePlayMsg = autoPlay ? 'pause' : 'play';
+	    },
+	    handleSliderChange: function handleSliderChange() {
+	      var nowCnt = this.eventCnt + 1;
+	      this.eventCnt = nowCnt;
+	    },
+	    setInterval1: function setInterval1() {
+	      this.sliders[0].interval = 1000;
+	    },
+	    setInterval3: function setInterval3() {
+	      this.sliders[0].interval = 3000;
+	    },
+	    setInterval5: function setInterval5() {
+	      this.sliders[0].interval = 5000;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 436:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(437)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(438)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(443)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/slider-page.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 437:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "slider-page": {
+	    "flexDirection": "row",
+	    "justifyContent": "space-between",
+	    "width": 714,
+	    "height": 420
+	  }
+	}
+
+/***/ },
+
+/***/ 438:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    items: { default: [] }
+	  },
+	  components: {
+	    sliderItem: __webpack_require__(439)
+	  }
+	};
+
+/***/ },
+
+/***/ 439:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(440)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(441)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(442)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/slider-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 440:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "slider-item": {
+	    "width": 348,
+	    "height": 400
+	  }
+	}
+
+/***/ },
+
+/***/ 441:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    image: { default: '' },
+	    link: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 442:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('image', {
+	    staticClass: ["slider-item"],
+	    attrs: {
+	      "src": _vm.image
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 443:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["slider-page"]
+	  }, [_vm._l((_vm.items), function(v) {
+	    return _h('slider-item', {
+	      attrs: {
+	        "image": v.image,
+	        "link": v.link
+	      }
+	    })
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 444:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', {
+	    staticClass: ["body"]
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "auto-play",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "auto-play = false",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[1].interval,
+	      "autoPlay": "false"
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "auto-play = true",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])])]), _h('panel', {
+	    attrs: {
+	      "title": 'Event, ' + _vm.eventCnt + ' change',
+	      "type": "primary"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    },
+	    on: {
+	      "change": _vm.handleSliderChange
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "Indicator",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "default style",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    },
+	    on: {
+	      "change": _vm.handleSliderChange
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "width & height",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticStyle: {
+	      itemColor: "#dddddd",
+	      width: "714",
+	      height: "460"
+	    }
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "left & top",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[1].interval,
+	      "autoPlay": _vm.sliders[1].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"],
+	    staticStyle: {
+	      top: "-140",
+	      left: "-240"
+	    }
+	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "itemColor & itemSelectedColor",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[2].interval,
+	      "autoPlay": _vm.sliders[2].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"],
+	    staticStyle: {
+	      itemSelectedColor: "rgb(217, 83, 79)"
+	    }
+	  }), _vm._l((_vm.sliders[2].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "itemSize",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[1].interval,
+	      "autoPlay": _vm.sliders[1].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticStyle: {
+	      itemColor: "#dddddd",
+	      itemSize: "40",
+	      top: "140",
+	      left: "180",
+	      width: "700",
+	      height: "380"
+	    }
+	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/tabbar.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/tabbar.js b/android/playground/app/src/main/assets/vue/components/tabbar.js
new file mode 100644
index 0000000..85d581a
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/tabbar.js
@@ -0,0 +1,599 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(445)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(454)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/tabbar.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 421:
+/***/ function(module, exports) {
+
+	exports.getBaseURL = function (vm) {
+	  var bundleUrl = vm.$getConfig().bundleUrl;
+	  var nativeBase;
+	  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/')>=0;
+	  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+	  if (isAndroidAssets) {
+	    nativeBase = 'file://assets/';
+	  }
+	  else if (isiOSAssets) {
+	    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+	  }
+	  else {
+	    var host = 'localhost:12580';
+	    var matches = /\/\/([^\/]+?)\//.exec(vm.$getConfig().bundleUrl);
+	    if (matches && matches.length >= 2) {
+	      host = matches[1];
+	    }
+	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
+	  }
+	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  // in Native
+	  var base = nativeBase;
+	  if (typeof window === 'object') {
+	    // in Browser or WebView
+	    base = h5Base;
+	  }
+	  return base
+	}
+
+
+/***/ },
+
+/***/ 445:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var getBaseURL = __webpack_require__(421).getBaseURL;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      dir: 'examples',
+	      tabItems: [{
+	        index: 0,
+	        title: 'tab1',
+	        titleColor: '#000000',
+	        icon: '',
+	        image: 'http://gtms01.alicdn.com/tps/i1/TB1qw.hMpXXXXagXXXX9t7RGVXX-46-46.png',
+	        selectedImage: 'http://gtms04.alicdn.com/tps/i4/TB16jjPMpXXXXazXVXX9t7RGVXX-46-46.png',
+	        src: 'component/tabbar/tabbar-item.js?itemId=tab1',
+	        visibility: 'visible'
+	      }, {
+	        index: 1,
+	        title: 'tab2',
+	        titleColor: '#000000',
+	        icon: '',
+	        image: 'http://gtms03.alicdn.com/tps/i3/TB1LEn9MpXXXXaUXpXX9t7RGVXX-46-46.png',
+	        selectedImage: 'http://gtms02.alicdn.com/tps/i2/TB1qysbMpXXXXcnXXXX9t7RGVXX-46-46.png',
+	        src: 'component/tabbar/tabbar-item.js?itemId=tab2',
+	        visibility: 'hidden'
+	      }, {
+	        index: 2,
+	        title: 'tab3',
+	        titleColor: '#000000',
+	        icon: '',
+	        image: 'http://gtms01.alicdn.com/tps/i1/TB1B0v5MpXXXXcvXpXX9t7RGVXX-46-46.png',
+	        selectedImage: 'http://gtms04.alicdn.com/tps/i4/TB1NxY5MpXXXXcrXpXX9t7RGVXX-46-46.png',
+	        src: 'component/tabbar/tabbar-item.js?itemId=tab3',
+	        visibility: 'hidden'
+	      }]
+	    };
+	  },
+	  components: {
+	    tabbar: __webpack_require__(446)
+	  },
+	  created: function created() {
+	    var baseURL = getBaseURL(this);
+	    for (var i = 0; i < this.tabItems.length; i++) {
+	      var tabItem = this.tabItems[i];
+	      tabItem.src = baseURL + tabItem.src;
+	    }
+	  },
+	  methods: {
+	    tabBarOnClick: function tabBarOnClick(e) {
+	      console.log('tabBarOnClick', e.index);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 446:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(447)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(448)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(453)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tabbar.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 447:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 448:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    tabItems: { default: [] },
+	    selectedColor: { default: '#ff0000' },
+	    unselectedColor: { default: '#000000' }
+	  },
+	  data: function data() {
+	    return {
+	      selectedIndex: 0
+	    };
+	  },
+	  components: {
+	    tabitem: __webpack_require__(449)
+	  },
+	  created: function created() {
+	    this.select(this.selectedIndex);
+	  },
+	  methods: {
+	    tabItemOnClick: function tabItemOnClick(e) {
+	      this.selectedIndex = e.index;
+	      this.select(e.index);
+	      this.$emit('tabBarOnClick', e);
+	    },
+	    select: function select(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';
+	        }
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 449:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(450)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(451)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(452)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tabitem.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 450:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 451:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    index: { default: 0 },
+	    title: { default: '' },
+	    titleColor: { default: '#000000' },
+	    icon: { default: '' },
+	    backgroundColor: { default: '#ffffff' }
+	  },
+	  methods: {
+	    onclickitem: function onclickitem(e) {
+	      var params = {
+	        index: this.index
+	      };
+	      this.$emit('tabItemOnClick', params);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 452:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["container"],
+	    style: {
+	      backgroundColor: _vm.backgroundColor
+	    },
+	    on: {
+	      "click": _vm.onclickitem
+	    }
+	  }, [_h('image', {
+	    staticClass: ["top-line"],
+	    attrs: {
+	      "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
+	    }
+	  }), _h('image', {
+	    staticClass: ["tab-icon"],
+	    attrs: {
+	      "src": _vm.icon
+	    }
+	  }), _h('text', {
+	    staticClass: ["tab-text"],
+	    style: {
+	      color: _vm.titleColor
+	    }
+	  }, [_vm._s(_vm.title)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 453:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_vm._l((_vm.tabItems), function(item) {
+	    return _h('embed', {
+	      staticClass: ["content"],
+	      style: {
+	        visibility: item.visibility
+	      },
+	      attrs: {
+	        "src": item.src,
+	        "type": "weex"
+	      }
+	    })
+	  }), _h('div', {
+	    staticClass: ["tabbar"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree"
+	    }
+	  }, [_vm._l((_vm.tabItems), function(item) {
+	    return _h('tabitem', {
+	      attrs: {
+	        "index": item.index,
+	        "icon": item.icon,
+	        "title": item.title,
+	        "titleColor": item.titleColor
+	      },
+	      on: {
+	        "tabItemOnClick": _vm.tabItemOnClick
+	      }
+	    })
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 454:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      flexDirection: "column"
+	    }
+	  }, [_h('tabbar', {
+	    attrs: {
+	      "tabItems": _vm.tabItems
+	    },
+	    on: {
+	      "tabBarOnClick": _vm.tabBarOnClick
+	    }
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/text.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/text.js b/android/playground/app/src/main/assets/vue/components/text.js
new file mode 100644
index 0000000..4b3ff9a
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/text.js
@@ -0,0 +1,513 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(455)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(456)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(457)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/text.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ 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"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 455:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "txt": {
+	    "marginBottom": 12,
+	    "fontSize": 40
+	  }
+	}
+
+/***/ },
+
+/***/ 456:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383)
+	  }
+	};
+
+/***/ },
+
+/***/ 457:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "color",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"]
+	  }, ["default is black"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "#286090"
+	    }
+	  }, ["#286090"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "#0f0"
+	    }
+	  }, ["#0f0"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "red"
+	    }
+	  }, ["keyword"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "rgb(238, 162, 54)"
+	    }
+	  }, ["rgb(238, 162, 54)"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "rgba(238, 162, 54, 0.5)"
+	    }
+	  }, ["rgba(238, 162, 54, 0.5)"])]), _h('panel', {
+	    attrs: {
+	      "title": "font-size",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontSize: "32px"
+	    }
+	  }, ["32"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontSize: "64px"
+	    }
+	  }, ["64"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontSize: "100px"
+	    }
+	  }, ["100"])]), _h('panel', {
+	    attrs: {
+	      "title": "font-style",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontStyle: "normal"
+	    }
+	  }, ["normal"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontStyle: "italic"
+	    }
+	  }, ["italic"])]), _h('panel', {
+	    attrs: {
+	      "title": "font-weight",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontWeight: "normal"
+	    }
+	  }, ["normal"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontWeight: "bold"
+	    }
+	  }, ["bold"])]), _h('panel', {
+	    attrs: {
+	      "title": "text-decoration",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textDecoration: "none"
+	    }
+	  }, ["none"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textDecoration: "underline"
+	    }
+	  }, ["underline"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textDecoration: "line-through"
+	    }
+	  }, ["line-through"])]), _h('panel', {
+	    attrs: {
+	      "title": "text-align",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textAlign: "left"
+	    }
+	  }, ["left"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, ["center"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textAlign: "right"
+	    }
+	  }, ["right"])]), _h('panel', {
+	    attrs: {
+	      "title": "text-overflow",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      lines: "1"
+	    }
+	  }, ["no text-overflow, no text-overflow"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textOverflow: "clip",
+	      width: "450px",
+	      lines: "1"
+	    }
+	  }, ["text-overflow: clip, text-overflow: clip"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textOverflow: "ellipsis",
+	      width: "450px",
+	      lines: "1"
+	    }
+	  }, ["text-overflow: ellipsis, text-overflow: ellipsis"])]), _h('panel', {
+	    attrs: {
+	      "title": "line-height",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"]
+	  }, ["no lineheight setting"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      lineHeight: "50"
+	    }
+	  }, ["lineheight 50"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      lineHeight: "80"
+	    }
+	  }, [" lineheight 80"])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/video.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/video.js b/android/playground/app/src/main/assets/vue/components/video.js
new file mode 100644
index 0000000..17b1165
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/video.js
@@ -0,0 +1,396 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(458)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(459)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(460)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/video.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 458:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "video": {
+	    "width": 750,
+	    "height": 460,
+	    "marginBottom": 80
+	  }
+	}
+
+/***/ },
+
+/***/ 459:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      playStatus: 'play'
+	    };
+	  },
+	  components: {
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    pause: function pause() {
+	      this.playStatus = 'pause';
+	      modal.toast({ 'message': 'click pause' });
+	    },
+	    play: function play() {
+	      this.playStatus = 'play';
+	      modal.toast({ 'message': 'click play' });
+	    },
+	    onpause: function onpause(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video pause' });
+	    },
+	    onstart: function onstart(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video start' });
+	    },
+	    onfinish: function onfinish(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video finish' });
+	    },
+	    onfail: function onfail(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video fail' });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 460:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('video', {
+	    staticClass: ["video"],
+	    attrs: {
+	      "onpause": "onpause",
+	      "onstart": "onstart",
+	      "onfinish": "onfinish",
+	      "onfail": "onfail",
+	      "src": "http://g.tbcdn.cn/ali-wireless-h5/res/0.0.6/toy.mp4",
+	      "auto-play": "true",
+	      "playStatus": _vm.playStatus
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row",
+	      justifyContent: "center"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "value": "Pause"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.pause($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginLeft: "20px"
+	    },
+	    attrs: {
+	      "value": "Play",
+	      "type": "primary"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.play($event)
+	      }
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/components/web.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/components/web.js b/android/playground/app/src/main/assets/vue/components/web.js
new file mode 100644
index 0000000..01c4680
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/web.js
@@ -0,0 +1,459 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(461)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(462)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(463)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/web.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ 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
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 461:
+/***/ 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": 70
+	  },
+	  "toolbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 70
+	  }
+	}
+
+/***/ },
+
+/***/ 462:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var webview = __weex_require_module__('webview');
+	module.exports = {
+	  components: {
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    goback: function goback() {
+	      var el = this.$refs.webview;
+	      webview.goBack(el);
+	    },
+	    goforward: function goforward() {
+	      var el = this.$refs.webview;
+	      webview.goForward(el);
+	    },
+	    refresh: function refresh() {
+	      var el = this.$refs.webview;
+	      webview.reload(el);
+	    },
+	    startload: function startload(e) {},
+	    finishload: function finishload(e) {},
+	    failload: function failload(e) {}
+	  }
+	};
+
+/***/ },
+
+/***/ 463:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('div', {
+	    staticClass: ["toolbar"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree"
+	    }
+	  }, [_h('button', {
+	    staticStyle: {
+	      marginLeft: "30px",
+	      width: "210px",
+	      marginTop: "5px",
+	      marginBottom: "5px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "back"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.goback($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginLeft: "30px",
+	      width: "210px",
+	      marginTop: "5px",
+	      marginBottom: "5px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "forward"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.goforward($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginLeft: "30px",
+	      width: "210px",
+	      marginTop: "5px",
+	      marginBottom: "5px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "refresh"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.refresh($event)
+	      }
+	    }
+	  })]), _h('web', {
+	    ref: "webview",
+	    staticClass: ["content"],
+	    attrs: {
+	      "src": "http://alibaba.github.io/weex/index.html"
+	    },
+	    on: {
+	      "pagestart": _vm.startload,
+	      "pagefinish": _vm.finishload,
+	      "error": _vm.failload
+	    }
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/hello.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/hello.js b/android/playground/app/src/main/assets/vue/hello.js
new file mode 100644
index 0000000..6f21da1
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/hello.js
@@ -0,0 +1,99 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* template */
+	var __vue_template__ = __webpack_require__(464)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/hello.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 464:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "100px"
+	    }
+	  }, ["Hello World."])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/vue/iconfont.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/vue/iconfont.js b/android/playground/app/src/main/assets/vue/iconfont.js
new file mode 100644
index 0000000..30ceb05
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/iconfont.js
@@ -0,0 +1,204 @@
+// { "framework": "Vue" }
+
+/******/ (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 __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(465)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(466)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(467)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/iconfont.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 465:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title1": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont1"
+	  },
+	  "title2": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont2"
+	  },
+	  "title3": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont3"
+	  },
+	  "title4": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont4"
+	  }
+	}
+
+/***/ },
+
+/***/ 466:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var domModule = __weex_require_module__('dom');
+	module.exports = {
+	  created: function created() {
+	    //\u76ee\u524d\u652f\u6301ttf\u3001woff\u6587\u4ef6\uff0c\u4e0d\u652f\u6301svg\u3001eot\u7c7b\u578b
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont1",
+	      'src': "url('iconfont.ttf')"
+	    });
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont2",
+	      'src': "url('http://at.alicdn.com/t/font_1469606063_76593.ttf')"
+	    });
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont3",
+	      'src': "url('http://at.alicdn.com/t/font_1469606522_9417143.woff')"
+	    });
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont4",
+	      'src': "url('file:///storage/emulated/0/Android/data/com.alibaba.weex/cache/http:__at.alicdn.com_t_font_1469606063_76593.ttf')"
+	    });
+	  }
+	};
+
+/***/ },
+
+/***/ 467:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title1"]
+	  }, ["Assets: \ue606\ue605\ue604\ue603\ue602\ue601\ue600"]), _h('text', {
+	    staticClass: ["title2"]
+	  }, ["http ttf: \ue606\ue605\ue604\ue603\ue602\ue601\ue600"]), _h('text', {
+	    staticClass: ["title3"]
+	  }, ["http woff: \ue606\ue605\ue604\ue603\ue602\ue601\ue600"]), _h('text', {
+	    staticClass: ["title4"]
+	  }, ["file: \ue606\ue605\ue604\ue603\ue602\ue601\ue600"])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file


[12/18] incubator-weex git commit: Merge branch 'v0.10.0-playground' into 0.11-dev

Posted by cx...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..ff4ffd4 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
@@ -44,17 +44,17 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(265)
-	__webpack_require__(266)
-	__webpack_require__(267)
-	__webpack_require__(268)
-	__webpack_require__(269)
-	__webpack_require__(273)
+	__webpack_require__(274)
+	__webpack_require__(275)
+	__webpack_require__(276)
 	__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__(278)
+	__webpack_require__(282)
+	__webpack_require__(286)
+	__webpack_require__(290)
+	var __weex_template__ = __webpack_require__(291)
+	var __weex_style__ = __webpack_require__(292)
+	var __weex_script__ = __webpack_require__(293)
 
 	__weex_define__('@weex-component/7e1771848154855ce84d79183d543f9a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2988,7 +2988,16 @@
 /* 232 */,
 /* 233 */,
 /* 234 */,
-/* 235 */
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */,
+/* 240 */,
+/* 241 */,
+/* 242 */,
+/* 243 */,
+/* 244 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3007,7 +3016,7 @@
 	}
 
 /***/ },
-/* 236 */
+/* 245 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3036,11 +3045,11 @@
 
 
 /***/ },
-/* 237 */
+/* 246 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3055,7 +3064,7 @@
 
 
 /***/ },
-/* 238 */
+/* 247 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3120,7 +3129,7 @@
 	}
 
 /***/ },
-/* 239 */
+/* 248 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3151,12 +3160,12 @@
 
 
 /***/ },
-/* 240 */
+/* 249 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3171,7 +3180,7 @@
 
 
 /***/ },
-/* 241 */
+/* 250 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3213,7 +3222,7 @@
 	}
 
 /***/ },
-/* 242 */
+/* 251 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3228,7 +3237,7 @@
 	}
 
 /***/ },
-/* 243 */
+/* 252 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -3268,7 +3277,7 @@
 
 
 /***/ },
-/* 244 */
+/* 253 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3425,7 +3434,7 @@
 	}
 
 /***/ },
-/* 245 */
+/* 254 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3472,7 +3481,7 @@
 	}
 
 /***/ },
-/* 246 */
+/* 255 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -3916,7 +3925,7 @@
 
 
 /***/ },
-/* 247 */
+/* 256 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3980,7 +3989,7 @@
 	}
 
 /***/ },
-/* 248 */
+/* 257 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4027,7 +4036,7 @@
 	}
 
 /***/ },
-/* 249 */
+/* 258 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -4053,10 +4062,10 @@
 
 
 /***/ },
-/* 250 */,
-/* 251 */,
-/* 252 */,
-/* 253 */
+/* 259 */,
+/* 260 */,
+/* 261 */,
+/* 262 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4181,7 +4190,7 @@
 	}
 
 /***/ },
-/* 254 */
+/* 263 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4206,7 +4215,7 @@
 	}
 
 /***/ },
-/* 255 */
+/* 264 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4234,11 +4243,11 @@
 
 
 /***/ },
-/* 256 */
+/* 265 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_script__ = __webpack_require__(267)
 
 	__weex_define__('@weex-component/link', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4253,7 +4262,7 @@
 
 
 /***/ },
-/* 257 */
+/* 266 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4271,7 +4280,7 @@
 	}
 
 /***/ },
-/* 258 */
+/* 267 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -4294,7 +4303,7 @@
 
 
 /***/ },
-/* 259 */
+/* 268 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4367,7 +4376,7 @@
 	}
 
 /***/ },
-/* 260 */
+/* 269 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4422,7 +4431,7 @@
 	}
 
 /***/ },
-/* 261 */
+/* 270 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4447,17 +4456,17 @@
 
 
 /***/ },
-/* 262 */,
-/* 263 */,
-/* 264 */,
-/* 265 */
+/* 271 */,
+/* 272 */,
+/* 273 */,
+/* 274 */
 /***/ 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__(265)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(268)
+	var __weex_style__ = __webpack_require__(269)
+	var __weex_script__ = __webpack_require__(270)
 
 	__weex_define__('@weex-component/headlines', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4474,13 +4483,13 @@
 
 
 /***/ },
-/* 266 */
+/* 275 */
 /***/ 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__(246)
+	var __weex_template__ = __webpack_require__(253)
+	var __weex_style__ = __webpack_require__(254)
+	var __weex_script__ = __webpack_require__(255)
 
 	__weex_define__('@weex-component/category', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4497,12 +4506,12 @@
 
 
 /***/ },
-/* 267 */
+/* 276 */
 /***/ 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__(256)
+	var __weex_style__ = __webpack_require__(257)
+	var __weex_script__ = __webpack_require__(258)
 
 	__weex_define__('@weex-component/coupon', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4519,13 +4528,13 @@
 
 
 /***/ },
-/* 268 */
+/* 277 */
 /***/ 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__(246)
+	var __weex_template__ = __webpack_require__(262)
+	var __weex_style__ = __webpack_require__(263)
+	var __weex_script__ = __webpack_require__(264)
 
 	__weex_define__('@weex-component/goods', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4542,14 +4551,14 @@
 
 
 /***/ },
-/* 269 */
+/* 278 */
 /***/ 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__(246)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(279)
+	var __weex_style__ = __webpack_require__(280)
+	var __weex_script__ = __webpack_require__(281)
 
 	__weex_define__('@weex-component/resource', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4566,7 +4575,7 @@
 
 
 /***/ },
-/* 270 */
+/* 279 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4604,7 +4613,7 @@
 	}
 
 /***/ },
-/* 271 */
+/* 280 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4618,7 +4627,7 @@
 	}
 
 /***/ },
-/* 272 */
+/* 281 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4636,13 +4645,13 @@
 
 
 /***/ },
-/* 273 */
+/* 282 */
 /***/ 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__(246)
+	var __weex_template__ = __webpack_require__(283)
+	var __weex_style__ = __webpack_require__(284)
+	var __weex_script__ = __webpack_require__(285)
 
 	__weex_define__('@weex-component/scene', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4659,7 +4668,7 @@
 
 
 /***/ },
-/* 274 */
+/* 283 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4751,7 +4760,7 @@
 	}
 
 /***/ },
-/* 275 */
+/* 284 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4810,7 +4819,7 @@
 	}
 
 /***/ },
-/* 276 */
+/* 285 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -5022,13 +5031,13 @@
 
 
 /***/ },
-/* 277 */
+/* 286 */
 /***/ 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__(246)
+	var __weex_template__ = __webpack_require__(287)
+	var __weex_style__ = __webpack_require__(288)
+	var __weex_script__ = __webpack_require__(289)
 
 	__weex_define__('@weex-component/match', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -5045,7 +5054,7 @@
 
 
 /***/ },
-/* 278 */
+/* 287 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5124,7 +5133,7 @@
 	}
 
 /***/ },
-/* 279 */
+/* 288 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5138,7 +5147,7 @@
 	}
 
 /***/ },
-/* 280 */
+/* 289 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -5175,13 +5184,13 @@
 
 
 /***/ },
-/* 281 */
+/* 290 */
 /***/ 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__(249)
+	var __weex_template__ = __webpack_require__(250)
+	var __weex_style__ = __webpack_require__(251)
+	var __weex_script__ = __webpack_require__(252)
 
 	__weex_define__('@weex-component/brand', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -5198,7 +5207,7 @@
 
 
 /***/ },
-/* 282 */
+/* 291 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5341,7 +5350,7 @@
 	}
 
 /***/ },
-/* 283 */
+/* 292 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5367,7 +5376,7 @@
 	}
 
 /***/ },
-/* 284 */
+/* 293 */
 /***/ 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/93063f14/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..96976e4 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
@@ -45,10 +45,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__(246)
+	var __weex_template__ = __webpack_require__(287)
+	var __weex_style__ = __webpack_require__(288)
+	var __weex_script__ = __webpack_require__(289)
 
 	__weex_define__('@weex-component/e4f94096a035d75578fa1eb2d8967b5f', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 278:
+/***/ 287:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -217,7 +217,7 @@
 
 /***/ },
 
-/***/ 279:
+/***/ 288:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -232,7 +232,7 @@
 
 /***/ },
 
-/***/ 280:
+/***/ 289:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..b08afa9 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
@@ -45,11 +45,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__(246)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(279)
+	var __weex_style__ = __webpack_require__(280)
+	var __weex_script__ = __webpack_require__(281)
 
 	__weex_define__('@weex-component/898d20378eee87156b93aef1be724cdb', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +68,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +88,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +118,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +138,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +204,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +236,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,7 +257,7 @@
 
 /***/ },
 
-/***/ 270:
+/***/ 279:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -296,7 +296,7 @@
 
 /***/ },
 
-/***/ 271:
+/***/ 280:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -311,7 +311,7 @@
 
 /***/ },
 
-/***/ 272:
+/***/ 281:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..a30842a 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
@@ -45,10 +45,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__(246)
+	var __weex_template__ = __webpack_require__(283)
+	var __weex_style__ = __webpack_require__(284)
+	var __weex_script__ = __webpack_require__(285)
 
 	__weex_define__('@weex-component/18e03f6e7e4b9d87e4b470dfec07a573', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 274:
+/***/ 283:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -230,7 +230,7 @@
 
 /***/ },
 
-/***/ 275:
+/***/ 284:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -290,7 +290,7 @@
 
 /***/ },
 
-/***/ 276:
+/***/ 285:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/android/playground/app/src/main/assets/showcase/pseudo-class.js
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/assets/showcase/pseudo-class.js b/android/playground/app/src/main/assets/showcase/pseudo-class.js
new file mode 100644
index 0000000..59a8b52
--- /dev/null
+++ b/android/playground/app/src/main/assets/showcase/pseudo-class.js
@@ -0,0 +1,2425 @@
+/******/ (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__(294)
+	var __weex_style__ = __webpack_require__(295)
+	var __weex_script__ = __webpack_require__(296)
+
+	__weex_define__('@weex-component/07aaf1221ad656e37ebe37291f40d193', [], 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/07aaf1221ad656e37ebe37291f40d193',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"
+	  },
+	  "panel-body": {}
+	}
+
+/***/ },
+/* 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 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */,
+/* 232 */,
+/* 233 */,
+/* 234 */,
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */,
+/* 240 */,
+/* 241 */,
+/* 242 */,
+/* 243 */,
+/* 244 */,
+/* 245 */,
+/* 246 */,
+/* 247 */,
+/* 248 */,
+/* 249 */,
+/* 250 */,
+/* 251 */,
+/* 252 */,
+/* 253 */,
+/* 254 */,
+/* 255 */,
+/* 256 */,
+/* 257 */,
+/* 258 */,
+/* 259 */,
+/* 260 */,
+/* 261 */,
+/* 262 */,
+/* 263 */,
+/* 264 */,
+/* 265 */,
+/* 266 */,
+/* 267 */,
+/* 268 */,
+/* 269 */,
+/* 270 */,
+/* 271 */,
+/* 272 */,
+/* 273 */,
+/* 274 */,
+/* 275 */,
+/* 276 */,
+/* 277 */,
+/* 278 */,
+/* 279 */,
+/* 280 */,
+/* 281 */,
+/* 282 */,
+/* 283 */,
+/* 284 */,
+/* 285 */,
+/* 286 */,
+/* 287 */,
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "children": [
+	    {
+	      "type": "scroller",
+	      "children": [
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "active",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "div",
+	              "classList": [
+	                "wrapper"
+	              ],
+	              "children": [
+	                {
+	                  "type": "image",
+	                  "attr": {
+	                    "src": function () {return this.logoUrl}
+	                  },
+	                  "classList": [
+	                    "logo"
+	                  ]
+	                },
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "attr": {
+	                    "value": "please click image"
+	                  }
+	                }
+	              ]
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "focus",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "Input Text",
+	                "autofocus": function () {return this.autofocus},
+	                "value": "test active"
+	              },
+	              "classList": [
+	                "focusinput"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "enabled",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "Input Text",
+	                "autofocus": function () {return this.autofocus},
+	                "value": "test active"
+	              },
+	              "classList": [
+	                "enabledinput"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "disabled",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "Input Text",
+	                "autofocus": function () {return this.autofocus},
+	                "value": "test active",
+	                "disabled": "true"
+	              },
+	              "classList": [
+	                "disabledinput"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 295 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 20
+	  },
+	  "title": {
+	    "fontSize": 24
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82,
+	    "backgroundColor": "#008000",
+	    "width:active": 180,
+	    "height:active": 82,
+	    "backgroundColor:active": "#FF0000"
+	  },
+	  "focusinput": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 700,
+	    "color:focus": "#008000",
+	    "backgroundColor:focus": "#FF0000"
+	  },
+	  "enabledinput": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 700,
+	    "color:enabled": "#FFFF00",
+	    "backgroundColor:enabled": "#0000FF"
+	  },
+	  "disabledinput": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 700,
+	    "color:disabled": "#FFFFFF",
+	    "backgroundColor:disabled": "#808080"
+	  }
+	}
+
+/***/ },
+/* 296 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	__webpack_require__(4);
+	module.exports = {
+	    data: function () {return {
+	        logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	        autofocus: false
+	    }},
+	    methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/93063f14/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..fb73ceb 100644
--- a/android/playground/app/src/main/assets/showcase/ui.js
+++ b/android/playground/app/src/main/assets/showcase/ui.js
@@ -44,9 +44,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__(297)
+	var __weex_style__ = __webpack_require__(298)
+	var __weex_script__ = __webpack_require__(299)
 
 	__weex_define__('@weex-component/045f40e22d4b6e9c9f36354367812ecd', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2227,7 +2227,19 @@
 /* 282 */,
 /* 283 */,
 /* 284 */,
-/* 285 */
+/* 285 */,
+/* 286 */,
+/* 287 */,
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2390,7 +2402,7 @@
 	}
 
 /***/ },
-/* 286 */
+/* 298 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2401,7 +2413,7 @@
 	}
 
 /***/ },
-/* 287 */
+/* 299 */
 /***/ 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/93063f14/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..3bccccf 100644
--- a/android/playground/app/src/main/assets/style/index.js
+++ b/android/playground/app/src/main/assets/style/index.js
@@ -44,12 +44,12 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(288)
-	__webpack_require__(296)
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(300)
-	var __weex_style__ = __webpack_require__(301)
-	var __weex_script__ = __webpack_require__(302)
+	__webpack_require__(300)
+	__webpack_require__(308)
+	__webpack_require__(301)
+	var __weex_template__ = __webpack_require__(312)
+	var __weex_style__ = __webpack_require__(313)
+	var __weex_script__ = __webpack_require__(314)
 
 	__weex_define__('@weex-component/2bb97ed0198ea3308e26ee13c0047c9c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2233,13 +2233,25 @@
 /* 285 */,
 /* 286 */,
 /* 287 */,
-/* 288 */
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */
 /***/ 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__(301)
+	var __weex_template__ = __webpack_require__(305)
+	var __weex_style__ = __webpack_require__(306)
+	var __weex_script__ = __webpack_require__(307)
 
 	__weex_define__('@weex-component/style-box', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2256,12 +2268,12 @@
 
 
 /***/ },
-/* 289 */
+/* 301 */
 /***/ 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__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2278,7 +2290,7 @@
 
 
 /***/ },
-/* 290 */
+/* 302 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2296,7 +2308,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 303 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2315,7 +2327,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2334,7 +2346,7 @@
 
 
 /***/ },
-/* 293 */
+/* 305 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2600,7 +2612,7 @@
 	}
 
 /***/ },
-/* 294 */
+/* 306 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2623,7 +2635,7 @@
 	}
 
 /***/ },
-/* 295 */
+/* 307 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2638,13 +2650,13 @@
 
 
 /***/ },
-/* 296 */
+/* 308 */
 /***/ 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__(301)
+	var __weex_template__ = __webpack_require__(309)
+	var __weex_style__ = __webpack_require__(310)
+	var __weex_script__ = __webpack_require__(311)
 
 	__weex_define__('@weex-component/style-flex', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2661,7 +2673,7 @@
 
 
 /***/ },
-/* 297 */
+/* 309 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3287,7 +3299,7 @@
 	}
 
 /***/ },
-/* 298 */
+/* 310 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3304,7 +3316,7 @@
 	}
 
 /***/ },
-/* 299 */
+/* 311 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3314,7 +3326,7 @@
 
 
 /***/ },
-/* 300 */
+/* 312 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3457,7 +3469,7 @@
 	}
 
 /***/ },
-/* 301 */
+/* 313 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3468,7 +3480,7 @@
 	}
 
 /***/ },
-/* 302 */
+/* 314 */
 /***/ 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/93063f14/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..21eb15b 100644
--- a/android/playground/app/src/main/assets/style/style-box.js
+++ b/android/playground/app/src/main/assets/style/style-box.js
@@ -44,10 +44,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__(301)
+	var __weex_template__ = __webpack_require__(305)
+	var __weex_style__ = __webpack_require__(306)
+	var __weex_script__ = __webpack_require__(307)
 
 	__weex_define__('@weex-component/1cc382dbc23ca75e8dd34af712ba54f1', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2232,12 +2232,24 @@
 /* 286 */,
 /* 287 */,
 /* 288 */,
-/* 289 */
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */
 /***/ 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__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2254,7 +2266,7 @@
 
 
 /***/ },
-/* 290 */
+/* 302 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2272,7 +2284,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 303 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2291,7 +2303,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2310,7 +2322,7 @@
 
 
 /***/ },
-/* 293 */
+/* 305 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2576,7 +2588,7 @@
 	}
 
 /***/ },
-/* 294 */
+/* 306 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2599,7 +2611,7 @@
 	}
 
 /***/ },
-/* 295 */
+/* 307 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';



[16/18] incubator-weex git commit: * [example] modify img address

Posted by cx...@apache.org.
* [example] modify img address


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

Branch: refs/heads/0.12-dev
Commit: 5a992e0565f107041bee6f979589c362f0d9c6f2
Parents: 93063f1
Author: xkli <56...@qq.com>
Authored: Mon Mar 27 15:08:37 2017 +0800
Committer: xkli <56...@qq.com>
Committed: Mon Mar 27 15:08:37 2017 +0800

----------------------------------------------------------------------
 examples/component/image-demo.we | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/5a992e05/examples/component/image-demo.we
----------------------------------------------------------------------
diff --git a/examples/component/image-demo.we b/examples/component/image-demo.we
index e24417c..ed9f05e 100644
--- a/examples/component/image-demo.we
+++ b/examples/component/image-demo.we
@@ -44,7 +44,7 @@
 require('weex-components');
 module.exports = {
   data: {
-    img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+    img: 'http://gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
   }
 }
 </script>
\ No newline at end of file