You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by to...@apache.org on 2018/03/07 07:01:12 UTC
[3/5] incubator-weex git commit: * [WEEX-240] [android] feature
update for weexsandbox and size off so 1. every page will has a runtime
context independent of other page 2. At the beginning of js,
will use // {"framework" : "Rax"} or // {"framework" :
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7c5ef1c6/android/sdk/assets/weex-rax.js
----------------------------------------------------------------------
diff --git a/android/sdk/assets/weex-rax.js b/android/sdk/assets/weex-rax.js
new file mode 100644
index 0000000..19ffa62
--- /dev/null
+++ b/android/sdk/assets/weex-rax.js
@@ -0,0 +1,8299 @@
+/* Prepare Rax Environment APIs 0.4.20, Build 2018-02-26 19:32. */
+
+var global = this; var process = {env:{}};
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (factory());
+}(this, (function () { 'use strict';
+
+function unwrapExports (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+}
+
+function createCommonjsModule(fn, module) {
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
+}
+
+var api = createCommonjsModule(function (module) {
+module.exports = /******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 3);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/*!***************************************************************************************************************************!*\
+ !*** ./packages/weex-rax-framework-api/node_modules/.npminstall/event-target-shim/2.0.0/event-target-shim/lib/commons.js ***!
+ \***************************************************************************************************************************/
+/*! dynamic exports provided */
+/*! all exports used */
+/*! ModuleConcatenation bailout: Module is not an ECMAScript module */
+/***/ (function(module, exports, __webpack_require__) {
+
+var createUniqueKey = module.exports.createUniqueKey = (
+ typeof Symbol !== "undefined" ? Symbol : //eslint-disable-line no-undef
+ /* otherwise */ function createUniqueKey(name) {
+ return "[[" + name + "_" + Math.random().toFixed(8).slice(2) + "]]"
+ }
+);
+
+/**
+ * Checks whether the given value is a non-null object or not.
+ *
+ * @param {any} x - The value to be check.
+ * @returns {boolean} `true` if the value is a non-null object.
+ * @private
+ */
+var isObject = module.exports.isObject = function isObject(x) {
+ return typeof x === "object" && x !== null
+};
+
+/**
+ * The key of listeners.
+ *
+ * @type {symbol|string}
+ * @private
+ */
+module.exports.LISTENERS = createUniqueKey("listeners");
+
+/**
+ * A value of kind for listeners which are registered in the capturing phase.
+ *
+ * @type {number}
+ * @private
+ */
+module.exports.CAPTURE = 1;
+
+/**
+ * A value of kind for listeners which are registered in the bubbling phase.
+ *
+ * @type {number}
+ * @private
+ */
+module.exports.BUBBLE = 2;
+
+/**
+ * A value of kind for listeners which are registered as an attribute.
+ *
+ * @type {number}
+ * @private
+ */
+module.exports.ATTRIBUTE = 3;
+
+/**
+ * @typedef object ListenerNode
+ * @property {function} listener - A listener function.
+ * @property {number} kind - The kind of the listener.
+ * @property {ListenerNode|null} next - The next node.
+ * If this node is the last, this is `null`.
+ */
+
+/**
+ * Creates a node of singly linked list for a list of listeners.
+ *
+ * @param {function} listener - A listener function.
+ * @param {number} kind - The kind of the listener.
+ * @param {object} [options] - The option object.
+ * @param {boolean} [options.once] - The flag to remove the listener at the first call.
+ * @param {boolean} [options.passive] - The flag to ignore `event.preventDefault` method.
+ * @returns {ListenerNode} The created listener node.
+ */
+module.exports.newNode = function newNode(listener, kind, options) {
+ var obj = isObject(options);
+
+ return {
+ listener: listener,
+ kind: kind,
+ once: obj && Boolean(options.once),
+ passive: obj && Boolean(options.passive),
+ next: null,
+ }
+};
+
+
+/***/ }),
+/* 1 */
+/*!********************************************************!*\
+ !*** ./packages/weex-rax-framework-api/src/emitter.js ***!
+ \********************************************************/
+/*! dynamic exports provided */
+/*! all exports used */
+/*! ModuleConcatenation bailout: Module is not an ECMAScript module */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true; } Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) { defineProperties(Constructor.prototype, protoProps); } if (staticProps) { defineProperties(Constructor, staticProps); } return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var EventEmitter = function () {
+ function EventEmitter() {
+ _classCallCheck(this, EventEmitter);
+
+ this._listeners = {};
+ }
+
+ /**
+ * Adds a listener function to the specified event.
+ * @param {String} type
+ * @param {Function} listener
+ * @param {Boolean} once
+ */
+
+
+ _createClass(EventEmitter, [{
+ key: "_addListener",
+ value: function _addListener(type, listener, once) {
+ this._listeners[type] = this._listeners[type] || [];
+ this._listeners[type].push({ listener: listener, once: once });
+ return this;
+ }
+
+ /**
+ * Adds a listener function to the specified event.
+ * @param {String} type
+ * @param {Function} listener
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+
+ }, {
+ key: "on",
+ value: function on(type, listener) {
+ return this._addListener(type, listener, false);
+ }
+ }, {
+ key: "once",
+ value: function once(type, listener) {
+ return this._addListener(type, listener, true);
+ }
+
+ /**
+ * Removes a listener function to the specified event.
+ * @param {String} type
+ * @param {Function} listener
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+
+ }, {
+ key: "off",
+ value: function off(type, listener) {
+ // alias
+ if (!this._listeners[type]) {
+ return this;
+ }
+ if (!this._listeners[type].length) {
+ return this;
+ }
+ if (!listener) {
+ delete this._listeners[type];
+ return this;
+ }
+ this._listeners[type] = this._listeners[type].filter(function (_listener) {
+ return !(_listener.listener === listener);
+ });
+ return this;
+ }
+
+ /**
+ * Emits an specified event.
+ * @param {String} type
+ * @param {Object} payload
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+
+ }, {
+ key: "emit",
+ value: function emit(type, payload) {
+ var _this = this;
+
+ if (!this._listeners[type]) {
+ return this;
+ }
+ this._listeners[type].forEach(function (_listener) {
+ _listener.listener.apply(_this, [payload]);
+ if (_listener.once) {
+ _this.removeListener(type, _listener.listener);
+ }
+ });
+ return this;
+ }
+ }]);
+
+ return EventEmitter;
+}();
+
+exports.default = EventEmitter;
+module.exports = exports["default"];
+
+/***/ }),
+/* 2 */
+/*!********************************************************************************************************************************!*\
+ !*** ./packages/weex-rax-framework-api/node_modules/.npminstall/event-target-shim/2.0.0/event-target-shim/lib/event-target.js ***!
+ \********************************************************************************************************************************/
+/*! dynamic exports provided */
+/*! all exports used */
+/*! ModuleConcatenation bailout: Module is not an ECMAScript module */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Commons = __webpack_require__(/*! ./commons */ 0);
+var CustomEventTarget = __webpack_require__(/*! ./custom-event-target */ 15);
+var EventWrapper = __webpack_require__(/*! ./event-wrapper */ 16);
+var isObject = Commons.isObject;
+var LISTENERS = Commons.LISTENERS;
+var CAPTURE = Commons.CAPTURE;
+var BUBBLE = Commons.BUBBLE;
+var ATTRIBUTE = Commons.ATTRIBUTE;
+var newNode = Commons.newNode;
+var defineCustomEventTarget = CustomEventTarget.defineCustomEventTarget;
+var createEventWrapper = EventWrapper.createEventWrapper;
+var STOP_IMMEDIATE_PROPAGATION_FLAG = EventWrapper.STOP_IMMEDIATE_PROPAGATION_FLAG;
+var PASSIVE_LISTENER_FLAG = EventWrapper.PASSIVE_LISTENER_FLAG;
+
+//------------------------------------------------------------------------------
+// Constants
+//------------------------------------------------------------------------------
+
+/**
+ * A flag which shows there is the native `EventTarget` interface object.
+ *
+ * @type {boolean}
+ * @private
+ */
+var HAS_EVENTTARGET_INTERFACE = (
+ typeof window !== "undefined" &&
+ typeof window.EventTarget !== "undefined"
+);
+
+//------------------------------------------------------------------------------
+// Public Interface
+//------------------------------------------------------------------------------
+
+/**
+ * An implementation for `EventTarget` interface.
+ *
+ * @constructor
+ * @public
+ */
+var EventTarget = module.exports = function EventTarget() {
+ var arguments$1 = arguments;
+
+ if (this instanceof EventTarget) {
+ // this[LISTENERS] is a Map.
+ // Its key is event type.
+ // Its value is ListenerNode object or null.
+ //
+ // interface ListenerNode {
+ // var listener: Function
+ // var kind: CAPTURE|BUBBLE|ATTRIBUTE
+ // var next: ListenerNode|null
+ // }
+ Object.defineProperty(this, LISTENERS, {value: Object.create(null)});
+ }
+ else if (arguments.length === 1 && Array.isArray(arguments[0])) {
+ return defineCustomEventTarget(EventTarget, arguments[0])
+ }
+ else if (arguments.length > 0) {
+ var types = Array(arguments.length);
+ for (var i = 0; i < arguments.length; ++i) {
+ types[i] = arguments$1[i];
+ }
+
+ // To use to extend with attribute listener properties.
+ // e.g.
+ // class MyCustomObject extends EventTarget("message", "error") {
+ // //...
+ // }
+ return defineCustomEventTarget(EventTarget, types)
+ }
+ else {
+ throw new TypeError("Cannot call a class as a function")
+ }
+};
+
+EventTarget.prototype = Object.create(
+ (HAS_EVENTTARGET_INTERFACE ? window.EventTarget : Object).prototype,
+ {
+ constructor: {
+ value: EventTarget,
+ writable: true,
+ configurable: true,
+ },
+
+ addEventListener: {
+ value: function addEventListener(type, listener, options) {
+ if (listener == null) {
+ return false
+ }
+ if (typeof listener !== "function" && typeof listener !== "object") {
+ throw new TypeError("\"listener\" is not an object.")
+ }
+
+ var capture = isObject(options) ? Boolean(options.capture) : Boolean(options);
+ var kind = (capture ? CAPTURE : BUBBLE);
+ var node = this[LISTENERS][type];
+ if (node == null) {
+ this[LISTENERS][type] = newNode(listener, kind, options);
+ return true
+ }
+
+ var prev = null;
+ while (node != null) {
+ if (node.listener === listener && node.kind === kind) {
+ // Should ignore a duplicated listener.
+ return false
+ }
+ prev = node;
+ node = node.next;
+ }
+
+ prev.next = newNode(listener, kind, options);
+ return true
+ },
+ configurable: true,
+ writable: true,
+ },
+
+ removeEventListener: {
+ value: function removeEventListener(type, listener, options) {
+ var this$1 = this;
+
+ if (listener == null) {
+ return false
+ }
+
+ var capture = isObject(options) ? Boolean(options.capture) : Boolean(options);
+ var kind = (capture ? CAPTURE : BUBBLE);
+ var prev = null;
+ var node = this[LISTENERS][type];
+ while (node != null) {
+ if (node.listener === listener && node.kind === kind) {
+ if (prev == null) {
+ this$1[LISTENERS][type] = node.next;
+ }
+ else {
+ prev.next = node.next;
+ }
+ return true
+ }
+
+ prev = node;
+ node = node.next;
+ }
+
+ return false
+ },
+ configurable: true,
+ writable: true,
+ },
+
+ dispatchEvent: {
+ value: function dispatchEvent(event) {
+ var this$1 = this;
+
+ // If listeners aren't registered, terminate.
+ var type = event.type;
+ var node = this[LISTENERS][type];
+ if (node == null) {
+ return true
+ }
+
+ // Since we cannot rewrite several properties, so wrap object.
+ var wrapped = createEventWrapper(event, this);
+
+ // This doesn't process capturing phase and bubbling phase.
+ // This isn't participating in a tree.
+ var prev = null;
+ while (node != null) {
+ // Remove this listener if it's once
+ if (node.once) {
+ if (prev == null) {
+ this$1[LISTENERS][type] = node.next;
+ }
+ else {
+ prev.next = node.next;
+ }
+ }
+ else {
+ prev = node;
+ }
+
+ // Call this listener
+ wrapped[PASSIVE_LISTENER_FLAG] = node.passive;
+ if (typeof node.listener === "function") {
+ node.listener.call(this$1, wrapped);
+ }
+ else if (node.kind !== ATTRIBUTE && typeof node.listener.handleEvent === "function") {
+ node.listener.handleEvent(wrapped);
+ }
+
+ // Break if `event.stopImmediatePropagation` was called.
+ if (wrapped[STOP_IMMEDIATE_PROPAGATION_FLAG]) {
+ break
+ }
+
+ node = node.next;
+ }
+
+ return !wrapped.defaultPrevented
+ },
+ configurable: true,
+ writable: true,
+ },
+ }
+);
+
+
+/***/ }),
+/* 3 */
+/*!******************************************************!*\
+ !*** ./packages/weex-rax-framework-api/src/index.js ***!
+ \******************************************************/
+/*! dynamic exports provided */
+/*! all exports used */
+/*! ModuleConcatenation bailout: Module is not an ECMAScript module */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+exports.injectContext = injectContext;
+exports.resetInstanceContext = resetInstanceContext;
+
+var _builtin = __webpack_require__(/*! ./builtin */ 4);
+
+var _emitter = __webpack_require__(/*! ./emitter */ 1);
+
+var _emitter2 = _interopRequireDefault(_emitter);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var MODULE_NAME_PREFIX = '@weex-module/';
+var MODAL_MODULE = MODULE_NAME_PREFIX + 'modal';
+var NAVIGATOR_MODULE = MODULE_NAME_PREFIX + 'navigator';
+var GLOBAL_EVENT_MODULE = MODULE_NAME_PREFIX + 'globalEvent';
+// Instance hub
+// const instances = {};
+// Bundles hub
+var noop = function noop() {};
+var weex = {};
+
+function genBuiltinModules(modules, moduleFactories, context) {
+ for (var moduleName in moduleFactories) {
+ modules[moduleName] = {
+ factory: moduleFactories[moduleName].bind(context),
+ module: { exports: {} },
+ isInitialized: false
+ };
+ }
+ return modules;
+}
+
+function injectContext() {
+ var instanceContext = new Function('return this')();
+ var window = resetInstanceContext(instanceContext);
+ for (var key in window) {
+ if (typeof instanceContext[key] === 'undefined' && key != '__weex_data__') {
+ instanceContext[key] = window[key];
+ }
+ }
+}
+
+/**
+ * create a Weex instance
+ *
+ * @param {string} instanceId
+ * @param {string} __weex_code__
+ * @param {object} [__weex_options__] {bundleUrl, debug}
+ */
+// export function createInstance(instanceId, __weex_code__, __weex_options__, __weex_data__, __weex_config__) {
+function resetInstanceContext(instanceContext) {
+ var instanceId = instanceContext.instanceId,
+ document = instanceContext.document,
+ bundleUrl = instanceContext.bundleUrl,
+ __weex_document__ = instanceContext.__weex_document__,
+ __weex_options__ = instanceContext.__weex_options__,
+ __weex_data__ = instanceContext.__weex_data__,
+ __weex_config__ = instanceContext.__weex_config__;
+
+
+ weex = __weex_options__.weex;
+
+ // Mark start time
+ var responseEnd = Date.now();
+ var __weex_env__ = (typeof WXEnvironment === 'undefined' ? 'undefined' : _typeof(WXEnvironment)) === 'object' && WXEnvironment || {};
+ // For better performance use built-in promise first
+ var shared = __webpack_require__(/*! runtime-shared/dist/shared.function */ 6)();
+
+ var Promise = typeof Promise === 'function' ? Promise : shared.Promise;
+ var _Symbol = typeof _Symbol === 'function' ? _Symbol : shared.Symbol;
+ var Set = typeof Set === 'function' ? Set : shared.Set;
+ var Map = typeof Map === 'function' ? Map : shared.Map;
+ var WeakMap = typeof WeakMap === 'function' ? WeakMap : shared.WeakMap;
+ var WeakSet = typeof WeakSet === 'function' ? WeakSet : shared.WeakSet;
+ var URL = shared.URL,
+ URLSearchParams = shared.URLSearchParams,
+ FontFace = shared.FontFace,
+ matchMedia = shared.matchMedia;
+ // let bundleUrl = __weex_options__.bundleUrl || 'about:blank';
+
+ if (!bundleUrl) {
+ console.error('Error: Must have bundleUrl option when createInstance, downgrade to "about:blank".');
+ } else if (!bundleUrl.split('//')[0]) {
+ bundleUrl = 'https:' + bundleUrl;
+ }
+
+ var documentURL = new URL(bundleUrl);
+ var modules = {};
+
+ // Generate native modules map at instance init
+ // genNativeModules(modules, document);
+ var __weex_define__ = __webpack_require__(/*! ./define.weex */ 7)(modules);
+ var __weex_require__ = __webpack_require__(/*! ./require.weex */ 8)(modules, weex);
+ var __weex_downgrade__ = __webpack_require__(/*! ./downgrade.weex */ 9)(__weex_require__);
+ // Extend document
+ __webpack_require__(/*! ./document.weex */ 11)(__weex_require__, document);
+
+ var location = __webpack_require__(/*! ./location.weex */ 12)(__weex_require__, documentURL);
+
+ var _require = __webpack_require__(/*! ./fetch.weex */ 13)(__weex_require__, Promise),
+ fetch = _require.fetch,
+ Headers = _require.Headers,
+ Request = _require.Request,
+ Response = _require.Response;
+
+ var XMLHttpRequest = __webpack_require__(/*! ./xmlhttprequest.weex */ 14)(__weex_require__);
+ var WebSocket = __webpack_require__(/*! ./websocket.weex */ 17)(__weex_require__);
+
+ var _require2 = __webpack_require__(/*! ./timer.weex */ 18)(__weex_require__, document),
+ setTimeout = _require2.setTimeout,
+ clearTimeout = _require2.clearTimeout,
+ setInterval = _require2.setInterval,
+ clearInterval = _require2.clearInterval,
+ requestAnimationFrame = _require2.requestAnimationFrame,
+ cancelAnimationFrame = _require2.cancelAnimationFrame;
+
+ var _require3 = __webpack_require__(/*! ./base64.weex */ 19)(),
+ atob = _require3.atob,
+ btoa = _require3.btoa;
+
+ var performance = __webpack_require__(/*! ./performance.weex */ 20)(responseEnd);
+
+ var _require4 = __webpack_require__(/*! ./event.weex */ 21)(),
+ Event = _require4.Event,
+ CustomEvent = _require4.CustomEvent;
+
+ var windowEmitter = new _emitter2.default();
+
+ var errorHandler = null;
+ function registerErrorHandler() {
+ if (registerErrorHandler.once) { return; }
+
+ var globalEvent = __weex_require__(GLOBAL_EVENT_MODULE);
+ globalEvent.addEventListener('exception', function (e) {
+ // TODO: miss lineno and colno
+ // window.onerror = function(messageOrEvent, source, lineno, colno, error) { ... }
+ errorHandler(e.exception, e.bundleUrl, 0, 0, new Error(e.exception, e.bundleUrl, 0));
+ });
+
+ registerErrorHandler.once = true;
+ }
+
+ var window = {
+ // ES
+ Promise: Promise,
+ Symbol: _Symbol,
+ Map: Map,
+ Set: Set,
+ WeakMap: WeakMap,
+ WeakSet: WeakSet,
+ // W3C: https://www.w3.org/TR/html5/browsers.html#browsing-context-name
+ name: '',
+ // This read-only property indicates whether the referenced window is closed or not.
+ closed: false,
+ atob: atob,
+ btoa: btoa,
+ performance: performance,
+ // W3C
+ document: document,
+ location: location,
+ // https://www.w3.org/TR/2009/WD-html5-20090423/browsers.html#dom-navigator
+ navigator: {
+ product: 'Weex',
+ platform: __weex_env__.platform,
+ appName: __weex_env__.appName,
+ appVersion: __weex_env__.appVersion,
+ // Weex/0.12 iOS/9.3 (iPhone7,2) AppName/0.12
+ userAgent: 'Weex/' + __weex_env__.weexVersion + ' ' + __weex_env__.platform + '/' + __weex_env__.osVersion + ' (' + __weex_env__.deviceModel + ') ' + __weex_env__.appName + '/' + __weex_env__.appVersion
+ },
+ // https://drafts.csswg.org/cssom-view/#the-screen-interface
+ screen: {
+ width: __weex_env__.deviceWidth,
+ height: __weex_env__.deviceHeight,
+ availWidth: __weex_env__.deviceWidth,
+ availHeight: __weex_env__.deviceHeight,
+ colorDepth: 24,
+ pixelDepth: 24
+ },
+ devicePixelRatio: __weex_env__.scale,
+ fetch: fetch,
+ Headers: Headers,
+ Response: Response,
+ Request: Request,
+ XMLHttpRequest: XMLHttpRequest,
+ URL: URL,
+ URLSearchParams: URLSearchParams,
+ FontFace: FontFace,
+ WebSocket: WebSocket,
+ Event: Event,
+ CustomEvent: CustomEvent,
+ matchMedia: matchMedia,
+ setTimeout: setTimeout,
+ clearTimeout: clearTimeout,
+ setInterval: setInterval,
+ clearInterval: clearInterval,
+ requestAnimationFrame: requestAnimationFrame,
+ cancelAnimationFrame: cancelAnimationFrame,
+ setImmediate: typeof setImmediate === 'function' && setImmediate || function (fn) {
+ setTimeout(fn, 0);
+ },
+ clearImmediate: typeof setImmediate === 'function' && setImmediate || function (id) {
+ clearTimeout(id);
+ },
+ frameworkVersion: null,
+ alert: function alert(message) {
+ var modal = __weex_require__(MODAL_MODULE);
+ modal.alert({
+ message: message
+ }, function () {});
+ },
+ open: function open(url) {
+ var weexNavigator = __weex_require__(NAVIGATOR_MODULE);
+ weexNavigator.push({
+ url: url,
+ animated: true
+ }, noop);
+ },
+ close: function close() {
+ var weexNavigator = __weex_require__(NAVIGATOR_MODULE);
+ weexNavigator.close({
+ animated: true
+ }, noop, noop);
+ },
+ postMessage: function postMessage(message, targetOrigin) {
+ var event = {
+ origin: location.origin,
+ data: JSON.parse(JSON.stringify(message)),
+ type: 'message',
+ source: window // FIXME: maybe not export window
+ };
+
+ if (typeof BroadcastChannel === 'function') {
+ if (targetOrigin == '*') {
+ var stack = new BroadcastChannel('message');
+ stack.postMessage(event);
+ } else {
+ var stack = new BroadcastChannel('message' + targetOrigin);
+ stack.postMessage(event);
+ }
+ }
+ },
+ addEventListener: function addEventListener(type, listener) {
+ if (type === 'message') {
+ if (typeof BroadcastChannel === 'function') {
+ var stack = new BroadcastChannel('message');
+ var thisStack = new BroadcastChannel('message' + bundleUrl);
+ stack.onmessage = function (e) {
+ listener(e.data);
+ };
+ thisStack.onmessage = function (e) {
+ listener(e.data);
+ };
+ }
+ } else {
+ windowEmitter.on(type, listener);
+ }
+ },
+ removeEventListener: function removeEventListener(type, listener) {
+ windowEmitter.off(type, listener);
+ },
+ dispatchEvent: function dispatchEvent(e) {
+ windowEmitter.emit(e.type, e);
+ },
+ set onerror(handler) {
+ if (typeof handler == 'function') {
+ errorHandler = handler;
+ registerErrorHandler();
+ } else {
+ errorHandler = null;
+ }
+ },
+ get onerror() {
+ return errorHandler;
+ },
+ // ModuleJS
+ define: __weex_define__,
+ require: __weex_require__,
+ // Weex
+ callNative: function callNative() {},
+ __weex_document__: __weex_document__,
+ __weex_module_supports__: weex.isRegisteredModule,
+ __weex_tag_supports__: weex.isRegisteredComponent,
+ __weex_define__: __weex_define__,
+ __weex_require__: __weex_require__,
+ __weex_downgrade__: __weex_downgrade__,
+ __weex_env__: __weex_env__,
+ __weex_code__: '',
+ __weex_options__: __weex_options__,
+ __weex_data__: __weex_data__,
+ __weex_config__: __weex_config__
+ };
+
+ genBuiltinModules(modules, _builtin.ModuleFactories, window);
+
+ window.self = window.window = window;
+
+ console.log('Rax jsfm init window', typeof window === 'undefined' ? 'undefined' : _typeof(window));
+ return window;
+}
+
+/***/ }),
+/* 4 */
+/*!********************************************************!*\
+ !*** ./packages/weex-rax-framework-api/src/builtin.js ***!
+ \********************************************************/
+/*! dynamic exports provided */
+/*! all exports used */
+/*! ModuleConcatenation bailout: Module is not an ECMAScript module */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var ModuleFactories = exports.ModuleFactories = {
+ 'rax': __webpack_require__(/*! rax/dist/rax.factory */ 5)
+};
+
+/***/ }),
+/* 5 */
+/*!******************************************!*\
+ !*** ./packages/rax/dist/rax.factory.js ***!
+ \******************************************/
+/*! dynamic exports provided */
+/*! all exports used */
+/*! ModuleConcatenation bailout: Module is not an ECMAScript module */
+/***/ (function(module, exports) {
+
+module.exports = function(require, exports, module) {
+ var __weex_document__ = this["__weex_document__"];
+var document = this["document"];
+ module.exports = /******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 17);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+/*
+ * Stateful things in runtime
+ */
+exports.default = {
+ component: null,
+ mountID: 1,
+ sandbox: true,
+ // Roots
+ rootComponents: {},
+ rootInstances: {},
+ // Inject
+ hook: null,
+ driver: null,
+ monitor: null
+};
+module.exports = exports["default"];
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _host = __webpack_require__(0);
+
+var _host2 = _interopRequireDefault(_host);
+
+var _element = __webpack_require__(6);
+
+var _unmountComponentAtNode = __webpack_require__(9);
+
+var _unmountComponentAtNode2 = _interopRequireDefault(_unmountComponentAtNode);
+
+var _instantiateComponent = __webpack_require__(2);
+
+var _instantiateComponent2 = _interopRequireDefault(_instantiateComponent);
+
+var _shouldUpdateComponent = __webpack_require__(3);
+
+var _shouldUpdateComponent2 = _interopRequireDefault(_shouldUpdateComponent);
+
+var _root = __webpack_require__(19);
+
+var _root2 = _interopRequireDefault(_root);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Instance manager
+ */
+var KEY = '$$instance';
+
+exports.default = {
+ set: function set(node, instance) {
+ if (!node[KEY]) {
+ node[KEY] = instance;
+ // Record root instance to roots map
+ if (instance.rootID) {
+ _host2.default.rootInstances[instance.rootID] = instance;
+ _host2.default.rootComponents[instance.rootID] = instance._internal;
+ }
+ }
+ },
+ get: function get(node) {
+ return node[KEY];
+ },
+ remove: function remove(node) {
+ var instance = this.get(node);
+ if (instance) {
+ node[KEY] = null;
+ if (instance.rootID) {
+ delete _host2.default.rootComponents[instance.rootID];
+ delete _host2.default.rootInstances[instance.rootID];
+ }
+ }
+ },
+ mount: function mount(element, container, parentInstance) {
+ _host2.default.driver.beforeRender && _host2.default.driver.beforeRender();
+
+ // Real native root node is body
+ if (container == null) {
+ container = _host2.default.driver.createBody();
+ }
+
+ // Get the context from the conceptual parent component.
+ var parentContext = void 0;
+ if (parentInstance) {
+ var parentInternal = parentInstance._internal;
+ parentContext = parentInternal._processChildContext(parentInternal._context);
+ }
+
+ var prevRootInstance = this.get(container);
+ var hasPrevRootInstance = prevRootInstance && prevRootInstance.isRootComponent;
+
+ if (hasPrevRootInstance) {
+ var prevRenderedComponent = prevRootInstance.getRenderedComponent();
+ var prevElement = prevRenderedComponent._currentElement;
+ if ((0, _shouldUpdateComponent2.default)(prevElement, element)) {
+ var prevUnmaskedContext = prevRenderedComponent._context;
+ prevRenderedComponent.updateComponent(prevElement, element, prevUnmaskedContext, parentContext || prevUnmaskedContext);
+
+ return prevRootInstance;
+ } else {
+ _host2.default.hook.Reconciler.unmountComponent(prevRootInstance);
+ (0, _unmountComponentAtNode2.default)(container);
+ }
+ }
+
+ var wrappedElement = (0, _element.createElement)(_root2.default, null, element);
+ var renderedComponent = (0, _instantiateComponent2.default)(wrappedElement);
+ var defaultContext = parentContext || {};
+ var rootInstance = renderedComponent.mountComponent(container, null, defaultContext);
+ this.set(container, rootInstance);
+
+ // After render callback
+ _host2.default.driver.afterRender && _host2.default.driver.afterRender(rootInstance);
+
+ // Devtool render new root hook
+ _host2.default.hook.Mount._renderNewRootComponent(rootInstance._internal);
+
+ return rootInstance;
+ }
+};
+module.exports = exports['default'];
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _host = __webpack_require__(0);
+
+var _host2 = _interopRequireDefault(_host);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function instantiateComponent(element) {
+ var instance = void 0;
+
+ if (element === undefined || element === null || element === false || element === true) {
+ instance = new _host2.default.EmptyComponent();
+ } else if (Array.isArray(element)) {
+ instance = new _host2.default.FragmentComponent(element);
+ } else if ((typeof element === 'undefined' ? 'undefined' : _typeof(element)) === 'object' && element.type) {
+ // Special case string values
+ if (typeof element.type === 'string') {
+ instance = new _host2.default.NativeComponent(element);
+ } else {
+ instance = new _host2.default.CompositeComponent(element);
+ }
+ } else if (typeof element === 'string' || typeof element === 'number') {
+ instance = new _host2.default.TextComponent(element);
+ } else {
+ throw new Error('Invalid element type: ' + element + '. (keys: ' + Object.keys(element) + ')');
+ }
+
+ instance._mountIndex = 0;
+
+ return instance;
+}
+
+exports.default = instantiateComponent;
+module.exports = exports['default'];
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+function shouldUpdateComponent(prevElement, nextElement) {
+ // TODO: prevElement and nextElement could be array
+ var prevEmpty = prevElement === null;
+ var nextEmpty = nextElement === null;
+ if (prevEmpty || nextEmpty) {
+ return prevEmpty === nextEmpty;
+ }
+
+ var prevType = typeof prevElement === 'undefined' ? 'undefined' : _typeof(prevElement);
+ var nextType = typeof nextElement === 'undefined' ? 'undefined' : _typeof(nextElement);
+ if (prevType === 'string' || prevType === 'number') {
+ return nextType === 'string' || nextType === 'number';
+ } else {
+ return prevType === 'object' && nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;
+ }
+}
+
+exports.default = shouldUpdateComponent;
+module.exports = exports['default'];
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true; } Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) { defineProperties(Constructor.prototype, protoProps); } if (staticProps) { defineProperties(Constructor, staticProps); } return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * Base component class.
+ */
+var Component = function () {
+ function Component(props, context, updater) {
+ _classCallCheck(this, Component);
+
+ this.props = props;
+ this.context = context;
+ this.refs = {};
+ this.updater = updater;
+ }
+
+ _createClass(Component, [{
+ key: "isComponentClass",
+ value: function isComponentClass() {}
+ }, {
+ key: "setState",
+ value: function setState(partialState, callback) {
+ this.updater.setState(this, partialState, callback);
+ }
+ }, {
+ key: "forceUpdate",
+ value: function forceUpdate(callback) {
+ this.updater.forceUpdate(this, callback);
+ }
+ }]);
+
+ return Component;
+}();
+
+exports.default = Component;
+module.exports = exports["default"];
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _instance = __webpack_require__(1);
+
+var _instance2 = _interopRequireDefault(_instance);
+
+var _host = __webpack_require__(0);
+
+var _host2 = _interopRequireDefault(_host);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = {
+ ComponentTree: {
+ getClosestInstanceFromNode: function getClosestInstanceFromNode(node) {
+ return _instance2.default.get(node);
+ },
+ getNodeFromInstance: function getNodeFromInstance(inst) {
+ // inst is an internal instance (but could be a composite)
+ while (inst._renderedComponent) {
+ inst = inst._renderedComponent;
+ }
+
+ if (inst) {
+ return inst._nativeNode;
+ } else {
+ return null;
+ }
+ }
+ },
+ Mount: {
+ _instancesByReactRootID: _host2.default.rootComponents,
+
+ // Stub - React DevTools expects to find this method and replace it
+ // with a wrapper in order to observe new root components being added
+ _renderNewRootComponent: function _renderNewRootComponent() {}
+ },
+ Reconciler: {
+ // Stubs - React DevTools expects to find these methods and replace them
+ // with wrappers in order to observe components being mounted, updated and
+ // unmounted
+ mountComponent: function mountComponent() {},
+ receiveComponent: function receiveComponent() {},
+ unmountComponent: function unmountComponent() {}
+ },
+ // monitor the info of all components
+ monitor: null
+};
+module.exports = exports['default'];
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+exports.createElement = createElement;
+exports.createFactory = createFactory;
+exports.cloneElement = cloneElement;
+exports.isValidElement = isValidElement;
+
+var _host = __webpack_require__(0);
+
+var _host2 = _interopRequireDefault(_host);
+
+var _flattenChildren = __webpack_require__(7);
+
+var _flattenChildren2 = _interopRequireDefault(_flattenChildren);
+
+var _universalEnv = __webpack_require__(8);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var RESERVED_PROPS = {
+ key: true,
+ ref: true
+};
+
+function getRenderErrorInfo() {
+ if (_host2.default.component) {
+ var name = _host2.default.component.getName();
+ if (name) {
+ return ' Check the render method of `' + name + '`.';
+ }
+ }
+ return '';
+}
+
+function Element(type, key, ref, props, owner) {
+ if (_universalEnv.isWeex) {
+ props = filterProps(type, props);
+ }
+
+ return {
+ // Built-in properties that belong on the element
+ type: type,
+ key: key,
+ ref: ref,
+ props: props,
+ // Record the component responsible for creating this element.
+ _owner: owner
+ };
+}
+
+exports.default = Element;
+
+
+function flattenStyle(style) {
+ if (!style) {
+ return undefined;
+ }
+
+ if (!Array.isArray(style)) {
+ return style;
+ } else {
+ var result = {};
+ for (var i = 0; i < style.length; ++i) {
+ var computedStyle = flattenStyle(style[i]);
+ if (computedStyle) {
+ for (var key in computedStyle) {
+ result[key] = computedStyle[key];
+ }
+ }
+ }
+ return result;
+ }
+}
+
+// TODO: move to weex-drvier
+function filterProps(type, props) {
+ // Only for weex text
+ if (type === 'text') {
+ var children = props.children;
+ var value = props.value;
+
+ // Value is first
+ if (value == null && children != null) {
+ if (Array.isArray(children)) {
+ children = children.map(function (val) {
+ if (typeof val === 'number' || typeof val === 'string') {
+ return val;
+ } else {
+ return '';
+ }
+ }).join('');
+ } else if (typeof children !== 'number' && typeof children !== 'string') {
+ children = '';
+ }
+
+ props.value = String(children);
+ }
+
+ props.children = null;
+ }
+
+ return props;
+}
+
+function createElement(type, config, children) {
+ var arguments$1 = arguments;
+
+ if (type == null) {
+ throw Error('createElement: type should not be null or undefined.' + getRenderErrorInfo());
+ }
+ // Reserved names are extracted
+ var props = {};
+ var propName = void 0;
+ var key = null;
+ var ref = null;
+
+ if (config != null) {
+ ref = config.ref === undefined ? null : config.ref;
+ key = config.key === undefined ? null : String(config.key);
+ // Remaining properties are added to a new props object
+ for (propName in config) {
+ if (!RESERVED_PROPS[propName]) {
+ props[propName] = config[propName];
+ }
+ }
+ }
+
+ var childrenLength = arguments.length - 2;
+ if (childrenLength > 0) {
+ if (childrenLength === 1 && !Array.isArray(children)) {
+ props.children = children;
+ } else {
+ var childArray = children;
+ if (childrenLength > 1) {
+ childArray = new Array(childrenLength);
+ for (var i = 0; i < childrenLength; i++) {
+ childArray[i] = arguments$1[i + 2];
+ }
+ }
+ props.children = (0, _flattenChildren2.default)(childArray);
+ }
+ }
+
+ // Resolve default props
+ if (type && type.defaultProps) {
+ var defaultProps = type.defaultProps;
+ for (propName in defaultProps) {
+ if (props[propName] === undefined) {
+ props[propName] = defaultProps[propName];
+ }
+ }
+ }
+
+ if (props.style && (Array.isArray(props.style) || _typeof(props.style) === 'object')) {
+ props.style = flattenStyle(props.style);
+ }
+
+ return new Element(type, key, ref, props, _host2.default.component);
+}
+
+function createFactory(type) {
+ var factory = createElement.bind(null, type);
+ // Expose the type on the factory and the prototype so that it can be
+ // easily accessed on elements. E.g. `<Foo />.type === Foo`.
+ // This should not be named `constructor` since this may not be the function
+ // that created the element, and it may not even be a constructor.
+ factory.type = type;
+ return factory;
+}
+
+function cloneElement(element, config) {
+ var arguments$1 = arguments;
+
+ if (!isValidElement(element)) {
+ throw Error('cloneElement: not a valid element.' + getRenderErrorInfo());
+ }
+
+ // Original props are copied
+ var props = Object.assign({}, element.props);
+
+ // Reserved names are extracted
+ var key = element.key;
+ var ref = element.ref;
+
+ // Owner will be preserved, unless ref is overridden
+ var owner = element._owner;
+
+ if (config) {
+ // Should reset ref and owner if has a new ref
+ if (config.ref !== undefined) {
+ ref = config.ref;
+ owner = _host2.default.component;
+ }
+
+ if (config.key !== undefined) {
+ key = String(config.key);
+ }
+
+ // Resolve default props
+ var defaultProps = void 0;
+ if (element.type && element.type.defaultProps) {
+ defaultProps = element.type.defaultProps;
+ }
+ // Remaining properties override existing props
+ var propName = void 0;
+ for (propName in config) {
+ if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
+ if (config[propName] === undefined && defaultProps !== undefined) {
+ // Resolve default props
+ props[propName] = defaultProps[propName];
+ } else {
+ props[propName] = config[propName];
+ }
+ }
+ }
+ }
+
+ for (var _len = arguments.length, children = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+ children[_key - 2] = arguments$1[_key];
+ }
+
+ if (children.length) {
+ props.children = (0, _flattenChildren2.default)(children);
+ }
+
+ return new Element(element.type, key, ref, props, owner);
+}
+
+function isValidElement(object) {
+ return (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && object !== null && object.type && object.props;
+}
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = flattenChildren;
+function traverseChildren(children, result) {
+ if (Array.isArray(children)) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ traverseChildren(children[i], result);
+ }
+ } else {
+ result.push(children);
+ }
+}
+
+function flattenChildren(children) {
+ if (children == null) {
+ return children;
+ }
+ var result = [];
+ traverseChildren(children, result);
+
+ if (result.length === 1) {
+ result = result[0];
+ }
+
+ return result;
+}
+module.exports = exports["default"];
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof2(obj);
+} : function (obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj);
+};
+
+// https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename
+var isWeb = exports.isWeb = (typeof navigator === 'undefined' ? 'undefined' : _typeof(navigator)) === 'object' && (navigator.appCodeName === 'Mozilla' || navigator.product === 'Gecko');
+var isNode = exports.isNode = typeof process !== 'undefined' && !!(process.versions && process.versions.node);
+var isWeex = exports.isWeex = typeof callNative === 'function';
+var isReactNative = exports.isReactNative = typeof __fbBatchedBridgeConfig !== 'undefined';
+exports['default'] = module.exports;
+exports.default = module.exports;
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = unmountComponentAtNode;
+
+var _instance = __webpack_require__(1);
+
+var _instance2 = _interopRequireDefault(_instance);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function unmountComponentAtNode(node) {
+ var component = _instance2.default.get(node);
+
+ if (!component) {
+ return false;
+ }
+
+ _instance2.default.remove(node);
+ component._internal.unmountComponent();
+
+ return true;
+}
+module.exports = exports['default'];
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _inject = __webpack_require__(22);
+
+var _inject2 = _interopRequireDefault(_inject);
+
+var _instance = __webpack_require__(1);
+
+var _instance2 = _interopRequireDefault(_instance);
+
+var _host = __webpack_require__(0);
+
+var _host2 = _interopRequireDefault(_host);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function render(element, container, options, callback) {
+ // Compatible with `render(element, container, callback)`
+ if (typeof options === 'function') {
+ callback = options;
+ options = null;
+ }
+
+ options = options || {};
+ // Init inject
+ (0, _inject2.default)(options);
+
+ var rootComponent = _instance2.default.mount(element, container, options.parent);
+ var componentInstance = rootComponent.getPublicInstance();
+
+ if (callback) {
+ callback.call(componentInstance);
+ }
+
+ return componentInstance;
+}
+
+exports.default = render;
+module.exports = exports['default'];
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true; } Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) { defineProperties(Constructor.prototype, protoProps); } if (staticProps) { defineProperties(Constructor, staticProps); } return Constructor; }; }();
+
+var _host = __webpack_require__(0);
+
+var _host2 = _interopRequireDefault(_host);
+
+var _ref = __webpack_require__(12);
+
+var _ref2 = _interopRequireDefault(_ref);
+
+var _instantiateComponent = __webpack_require__(2);
+
+var _instantiateComponent2 = _interopRequireDefault(_instantiateComponent);
+
+var _shouldUpdateComponent = __webpack_require__(3);
+
+var _shouldUpdateComponent2 = _interopRequireDefault(_shouldUpdateComponent);
+
+var _getElementKeyName = __webpack_require__(13);
+
+var _getElementKeyName2 = _interopRequireDefault(_getElementKeyName);
+
+var _instance = __webpack_require__(1);
+
+var _instance2 = _interopRequireDefault(_instance);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var STYLE = 'style';
+var CHILDREN = 'children';
+var TREE = 'tree';
+var EVENT_PREFIX_REGEXP = /on[A-Z]/;
+
+/**
+ * Native Component
+ */
+
+var NativeComponent = function () {
+ function NativeComponent(element) {
+ _classCallCheck(this, NativeComponent);
+
+ this._currentElement = element;
+ }
+
+ _createClass(NativeComponent, [{
+ key: 'mountComponent',
+ value: function mountComponent(parent, parentInstance, context, childMounter) {
+ // Parent native element
+ this._parent = parent;
+ this._parentInstance = parentInstance;
+ this._context = context;
+ this._mountID = _host2.default.mountID++;
+
+ var props = this._currentElement.props;
+ var type = this._currentElement.type;
+ var instance = {
+ _internal: this,
+ type: type,
+ props: props
+ };
+ var appendType = props.append; // Default is node
+
+ this._instance = instance;
+
+ // Clone a copy for style diff
+ this._prevStyleCopy = Object.assign({}, props.style);
+
+ var nativeNode = this.getNativeNode();
+
+ if (appendType !== TREE) {
+ if (childMounter) {
+ childMounter(nativeNode, parent);
+ } else {
+ _host2.default.driver.appendChild(nativeNode, parent);
+ }
+ }
+
+ if (this._currentElement && this._currentElement.ref) {
+ _ref2.default.attach(this._currentElement._owner, this._currentElement.ref, this);
+ }
+
+ // Process children
+ var children = props.children;
+ if (children != null) {
+ this.mountChildren(children, context);
+ }
+
+ if (appendType === TREE) {
+ if (childMounter) {
+ childMounter(nativeNode, parent);
+ } else {
+ _host2.default.driver.appendChild(nativeNode, parent);
+ }
+ }
+
+ _host2.default.hook.Reconciler.mountComponent(this);
+
+ return instance;
+ }
+ }, {
+ key: 'mountChildren',
+ value: function mountChildren(children, context) {
+ var _this = this;
+
+ if (!Array.isArray(children)) {
+ children = [children];
+ }
+
+ var renderedChildren = this._renderedChildren = {};
+
+ var renderedChildrenImage = children.map(function (element, index) {
+ var renderedChild = (0, _instantiateComponent2.default)(element);
+ var name = (0, _getElementKeyName2.default)(renderedChildren, element, index);
+ renderedChildren[name] = renderedChild;
+ renderedChild._mountIndex = index;
+ // Mount
+ var mountImage = renderedChild.mountComponent(_this.getNativeNode(), _this._instance, context, null);
+ return mountImage;
+ });
+
+ return renderedChildrenImage;
+ }
+ }, {
+ key: 'unmountChildren',
+ value: function unmountChildren(notRemoveChild) {
+ var renderedChildren = this._renderedChildren;
+
+ if (renderedChildren) {
+ for (var name in renderedChildren) {
+ var renderedChild = renderedChildren[name];
+ renderedChild.unmountComponent(notRemoveChild);
+ }
+ this._renderedChildren = null;
+ }
+ }
+ }, {
+ key: 'unmountComponent',
+ value: function unmountComponent(notRemoveChild) {
+ if (this._nativeNode) {
+ var ref = this._currentElement.ref;
+ if (ref) {
+ _ref2.default.detach(this._currentElement._owner, ref, this);
+ }
+
+ _instance2.default.remove(this._nativeNode);
+ if (!notRemoveChild) {
+ _host2.default.driver.removeChild(this._nativeNode, this._parent);
+ }
+ _host2.default.driver.removeAllEventListeners(this._nativeNode);
+ }
+
+ this.unmountChildren(notRemoveChild);
+
+ _host2.default.hook.Reconciler.unmountComponent(this);
+
+ this._currentElement = null;
+ this._nativeNode = null;
+ this._parent = null;
+ this._parentInstance = null;
+ this._context = null;
+ this._instance = null;
+ this._prevStyleCopy = null;
+ }
+ }, {
+ key: 'updateComponent',
+ value: function updateComponent(prevElement, nextElement, prevContext, nextContext) {
+ // Replace current element
+ this._currentElement = nextElement;
+
+ _ref2.default.update(prevElement, nextElement, this);
+
+ var prevProps = prevElement.props;
+ var nextProps = nextElement.props;
+
+ this.updateProperties(prevProps, nextProps);
+ this.updateChildren(nextProps.children, nextContext);
+
+ _host2.default.hook.Reconciler.receiveComponent(this);
+ }
+ }, {
+ key: 'updateProperties',
+ value: function updateProperties(prevProps, nextProps) {
+ var this$1 = this;
+
+ var propKey = void 0;
+ var styleName = void 0;
+ var styleUpdates = void 0;
+ for (propKey in prevProps) {
+ if (propKey === CHILDREN || nextProps.hasOwnProperty(propKey) || !prevProps.hasOwnProperty(propKey) || prevProps[propKey] == null) {
+ continue;
+ }
+ if (propKey === STYLE) {
+ var lastStyle = this$1._prevStyleCopy;
+ for (styleName in lastStyle) {
+ if (lastStyle.hasOwnProperty(styleName)) {
+ styleUpdates = styleUpdates || {};
+ styleUpdates[styleName] = '';
+ }
+ }
+ this$1._prevStyleCopy = null;
+ } else if (EVENT_PREFIX_REGEXP.test(propKey)) {
+ if (typeof prevProps[propKey] === 'function') {
+ _host2.default.driver.removeEventListener(this$1.getNativeNode(), propKey.slice(2).toLowerCase(), prevProps[propKey]);
+ }
+ } else {
+ _host2.default.driver.removeAttribute(this$1.getNativeNode(), propKey, prevProps[propKey]);
+ }
+ }
+
+ for (propKey in nextProps) {
+ var nextProp = nextProps[propKey];
+ var prevProp = propKey === STYLE ? this$1._prevStyleCopy : prevProps != null ? prevProps[propKey] : undefined;
+ if (propKey === CHILDREN || !nextProps.hasOwnProperty(propKey) || nextProp === prevProp || nextProp == null && prevProp == null) {
+ continue;
+ }
+ // Update style
+ if (propKey === STYLE) {
+ if (nextProp) {
+ // Clone property
+ nextProp = this$1._prevStyleCopy = Object.assign({}, nextProp);
+ } else {
+ this$1._prevStyleCopy = null;
+ }
+
+ if (prevProp != null) {
+ // Unset styles on `prevProp` but not on `nextProp`.
+ for (styleName in prevProp) {
+ if (prevProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
+ styleUpdates = styleUpdates || {};
+ styleUpdates[styleName] = '';
+ }
+ }
+ // Update styles that changed since `prevProp`.
+ for (styleName in nextProp) {
+ if (nextProp.hasOwnProperty(styleName) && prevProp[styleName] !== nextProp[styleName]) {
+ styleUpdates = styleUpdates || {};
+ styleUpdates[styleName] = nextProp[styleName];
+ }
+ }
+ } else {
+ // Assign next prop when prev style is null
+ styleUpdates = nextProp;
+ }
+
+ // Update event binding
+ } else if (EVENT_PREFIX_REGEXP.test(propKey)) {
+ var eventName = propKey.slice(2).toLowerCase();
+
+ if (typeof prevProp === 'function') {
+ _host2.default.driver.removeEventListener(this$1.getNativeNode(), eventName, prevProp, nextProps);
+ }
+
+ if (typeof nextProp === 'function') {
+ _host2.default.driver.addEventListener(this$1.getNativeNode(), eventName, nextProp, nextProps);
+ }
+ // Update other property
+ } else {
+ if (nextProp != null) {
+ _host2.default.driver.setAttribute(this$1.getNativeNode(), propKey, nextProp);
+ } else {
+ _host2.default.driver.removeAttribute(this$1.getNativeNode(), propKey, prevProps[propKey]);
+ }
+
+ }
+ }
+
+ if (styleUpdates) {
+ _host2.default.driver.setStyles(this.getNativeNode(), styleUpdates);
+ }
+ }
+ }, {
+ key: 'updateChildren',
+ value: function updateChildren(nextChildrenElements, context) {
+ var _this2 = this;
+
+ // prev rendered children
+ var prevChildren = this._renderedChildren;
+
+ if (nextChildrenElements == null && prevChildren == null) {
+ return;
+ }
+
+ var nextChildren = {};
+ var oldNodes = {};
+
+ if (nextChildrenElements != null) {
+ if (!Array.isArray(nextChildrenElements)) {
+ nextChildrenElements = [nextChildrenElements];
+ }
+
+ // Update next children elements
+ for (var index = 0, length = nextChildrenElements.length; index < length; index++) {
+ var nextElement = nextChildrenElements[index];
+ var name = (0, _getElementKeyName2.default)(nextChildren, nextElement, index);
+ var prevChild = prevChildren && prevChildren[name];
+ var prevElement = prevChild && prevChild._currentElement;
+
+ if (prevChild != null && (0, _shouldUpdateComponent2.default)(prevElement, nextElement)) {
+ // Pass the same context when updating chidren
+ prevChild.updateComponent(prevElement, nextElement, context, context);
+ nextChildren[name] = prevChild;
+ } else {
+ // Unmount the prevChild when nextChild is different element type.
+ if (prevChild) {
+ var oldNativeNode = prevChild.getNativeNode();
+ // Delay remove child
+ prevChild.unmountComponent(true);
+ oldNodes[name] = oldNativeNode;
+ }
+ // The child must be instantiated before it's mounted.
+ nextChildren[name] = (0, _instantiateComponent2.default)(nextElement);
+ }
+ }
+ }
+
+ var firstPrevChild = void 0;
+ var delayRemoveFirstPrevChild = void 0;
+ // Unmount children that are no longer present.
+ if (prevChildren != null) {
+ for (var _name in prevChildren) {
+ if (!prevChildren.hasOwnProperty(_name)) {
+ continue;
+ }
+
+ var _prevChild = prevChildren[_name];
+ var shouldRemove = !nextChildren[_name];
+
+ // Store old first child ref for append node ahead and maybe delay remove it
+ if (!firstPrevChild) {
+ firstPrevChild = _prevChild;
+ delayRemoveFirstPrevChild = shouldRemove;
+ } else if (shouldRemove) {
+ _prevChild.unmountComponent();
+ }
+ }
+ }
+
+ if (nextChildren != null) {
+ (function () {
+ // `nextIndex` will increment for each child in `nextChildren`, but
+ // `lastIndex` will be the last index visited in `prevChildren`.
+ var lastIndex = 0;
+ var nextIndex = 0;
+ var lastPlacedNode = null;
+ var nextNativeNode = [];
+
+ var _loop = function _loop(_name2) {
+ if (!nextChildren.hasOwnProperty(_name2)) {
+ return 'continue';
+ }
+
+ var nextChild = nextChildren[_name2];
+ var prevChild = prevChildren && prevChildren[_name2];
+
+ if (prevChild === nextChild) {
+ var prevChildNativeNode = prevChild.getNativeNode();
+ // Convert to array type
+ if (!Array.isArray(prevChildNativeNode)) {
+ prevChildNativeNode = [prevChildNativeNode];
+ }
+
+ // If the index of `child` is less than `lastIndex`, then it needs to
+ // be moved. Otherwise, we do not need to move it because a child will be
+ // inserted or moved before `child`.
+ if (prevChild._mountIndex < lastIndex) {
+ // Get the last child
+ if (Array.isArray(lastPlacedNode)) {
+ lastPlacedNode = lastPlacedNode[lastPlacedNode.length - 1];
+ }
+
+ for (var _i = prevChildNativeNode.length - 1; _i >= 0; _i--) {
+ _host2.default.driver.insertAfter(prevChildNativeNode[_i], lastPlacedNode);
+ }
+ }
+
+ nextNativeNode = nextNativeNode.concat(prevChildNativeNode);
+
+ lastIndex = Math.max(prevChild._mountIndex, lastIndex);
+ prevChild._mountIndex = nextIndex;
+ } else {
+ if (prevChild != null) {
+ // Update `lastIndex` before `_mountIndex` gets unset by unmounting.
+ lastIndex = Math.max(prevChild._mountIndex, lastIndex);
+ }
+
+ var parent = _this2.getNativeNode();
+ // Fragment extended native component, so if parent is fragment should get this._parent
+ if (Array.isArray(parent)) {
+ parent = _this2._parent;
+ }
+
+ nextChild.mountComponent(parent, _this2._instance, context, function (newChild, parent) {
+ // TODO: Rework the duplicate code
+ var oldChild = oldNodes[_name2];
+ if (!Array.isArray(newChild)) {
+ newChild = [newChild];
+ }
+
+ if (oldChild) {
+ // The oldChild or newChild all maybe fragment
+ if (!Array.isArray(oldChild)) {
+ oldChild = [oldChild];
+ }
+
+ // If newChild count large then oldChild
+ var lastNewChild = void 0;
+ for (var _i2 = 0; _i2 < newChild.length; _i2++) {
+ var child = newChild[_i2];
+ if (oldChild[_i2]) {
+ _host2.default.driver.replaceChild(child, oldChild[_i2]);
+ } else {
+ _host2.default.driver.insertAfter(child, lastNewChild);
+ }
+ lastNewChild = child;
+ }
+
+ // If newChild count less then oldChild
+ if (newChild.length < oldChild.length) {
+ for (var _i3 = newChild.length; _i3 < oldChild.length; _i3++) {
+ _host2.default.driver.removeChild(oldChild[_i3]);
+ }
+ }
+ } else {
+ // Insert child at a specific index
+
+ // Get the last child
+ if (Array.isArray(lastPlacedNode)) {
+ lastPlacedNode = lastPlacedNode[lastPlacedNode.length - 1];
+ }
+
+ var prevFirstNativeNode = void 0;
+
+ if (firstPrevChild && !lastPlacedNode) {
+ prevFirstNativeNode = firstPrevChild.getNativeNode();
+ if (Array.isArray(prevFirstNativeNode)) {
+ prevFirstNativeNode = prevFirstNativeNode[0];
+ }
+ }
+
+ for (var _i4 = newChild.length - 1; _i4 >= 0; _i4--) {
+ var _child = newChild[_i4];
+ if (lastPlacedNode) {
+ _host2.default.driver.insertAfter(_child, lastPlacedNode);
+ } else if (prevFirstNativeNode) {
+ _host2.default.driver.insertBefore(_child, prevFirstNativeNode);
+ } else {
+ _host2.default.driver.appendChild(_child, parent);
+ }
+ }
+ }
+
+ nextNativeNode = nextNativeNode.concat(newChild);
+ });
+ nextChild._mountIndex = nextIndex;
+ }
+
+ nextIndex++;
+ lastPlacedNode = nextChild.getNativeNode();
+ };
+
+ for (var _name2 in nextChildren) {
+ var _ret2 = _loop(_name2);
+
+ if (_ret2 === 'continue') { continue; }
+ }
+
+ // Sync update native refs
+ if (Array.isArray(_this2._nativeNode)) {
+ // Clear all and push the new array
+ _this2._nativeNode.splice(0, _this2._nativeNode.length);
+ for (var i = 0; i < nextNativeNode.length; i++) {
+ _this2._nativeNode.push(nextNativeNode[i]);
+ }
+ }
+ })();
+ }
+
+ if (delayRemoveFirstPrevChild) {
+ firstPrevChild.unmountComponent();
+ }
+
+ this._renderedChildren = nextChildren;
+ }
+ }, {
+ key: 'getNativeNode',
+ value: function getNativeNode() {
+ if (this._nativeNode == null) {
+ this._nativeNode = _host2.default.driver.createElement(this._instance);
+ _instance2.default.set(this._nativeNode, this._instance);
+ }
+
+ return this._nativeNode;
+ }
+ }, {
+ key: 'getPublicInstance',
+ value: function getPublicInstance() {
+ return this.getNativeNode();
+ }
+ }, {
+ key: 'getName',
+ value: function getName() {
+ return this._currentElement.type;
+ }
+ }]);
+
+ return NativeComponent;
+}();
+
+exports.default = NativeComponent;
+module.exports = exports['default'];
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+/*
+ * Ref manager
+ */
+
+exports.default = {
+ update: function update(prevElement, nextElement, component) {
+ var prevRef = prevElement != null && prevElement.ref;
+ var nextRef = nextElement != null && nextElement.ref;
+
+ // Update refs in owner component
+ if (prevRef !== nextRef) {
+ // Detach prev RenderedElement's ref
+ prevRef != null && this.detach(prevElement._owner, prevRef, component);
+ // Attach next RenderedElement's ref
+ nextRef != null && this.attach(nextElement._owner, nextRef, component);
+ }
+ },
+ attach: function attach(ownerComponent, ref, component) {
+ if (!ownerComponent) {
+ throw new Error('You might be adding a ref to a component that was not created inside a component\'s ' + '`render` method, or you have multiple copies of Rax loaded.');
+ }
+
+ var instance = component.getPublicInstance();
+ if (typeof ref === 'function') {
+ ref(instance);
+ } else {
+ ownerComponent._instance.refs[ref] = instance;
+ }
+ },
+ detach: function detach(ownerComponent, ref, component) {
+ if (typeof ref === 'function') {
+ // When the referenced component is unmounted and whenever the ref changes, the old ref will be called with null as an argument.
+ ref(null);
+ } else {
+ // Must match component and ref could detach the ref on owner when A's before ref is B's current ref
+ var instance = component.getPublicInstance();
+ if (ownerComponent._instance.refs[ref] === instance) {
+ delete ownerComponent._instance.refs[ref];
+ }
+ }
+ }
+};
+module.exports = exports['default'];
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+exports.default = function (children, element, index) {
+ var elementKey = element && element.key;
+ var hasKey = typeof elementKey === 'string';
+ var defaultName = '.' + index.toString(36);
+
+ if (hasKey) {
+ var keyName = '$' + elementKey;
+ // Child keys must be unique.
+ var keyUnique = children[keyName] === undefined;
+ // Only the first child will be used when encountered two children with the same key
+ if (!keyUnique) { console.warn('Encountered two children with the same key "' + elementKey + '".'); }
+
+ return keyUnique ? keyName : defaultName;
+ } else {
+ return defaultName;
+ }
+};
+
+module.exports = exports['default'];
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof2(obj);
+} : function (obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj);
+};
+
+exports.isRem = isRem;
+exports.calcRem = calcRem;
+exports.getRem = getRem;
+exports.setRem = setRem;
+exports.isUnitNumber = isUnitNumber;
+exports.convertUnit = convertUnit;
+/**
+ * CSS properties which accept numbers but are not in units of "px".
+ */
+var UNITLESS_NUMBER_PROPS = {
+ animationIterationCount: true,
+ borderImageOutset: true,
+ borderImageSlice: true,
+ borderImageWidth: true,
+ boxFlex: true,
+ boxFlexGroup: true,
+ boxOrdinalGroup: true,
+ columnCount: true,
+ flex: true,
+ flexGrow: true,
+ flexPositive: true,
+ flexShrink: true,
+ flexNegative: true,
+ flexOrder: true,
+ gridRow: true,
+ gridColumn: true,
+ fontWeight: true,
+ lineClamp: true,
+ // We make lineHeight default is px that is diff with w3c spec
+ // lineHeight: true,
+ opacity: true,
+ order: true,
+ orphans: true,
+ tabSize: true,
+ widows: true,
+ zIndex: true,
+ zoom: true,
+ // Weex only
+ lines: true
+};
+var SUFFIX = 'rem';
+var REM_REG = /[-+]?\d*\.?\d+rem/g;
+var GLOBAL_REM_UNIT = '__global_rem_unit__';
+var global = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' ? window : (typeof global === 'undefined' ? 'undefined' : _typeof(global)) === 'object' ? global : {};
+// Default 1 rem to 1 px
+if (global[GLOBAL_REM_UNIT] == null) {
+ global[GLOBAL_REM_UNIT] = 1;
+}
+
+/**
+ * Is string contains rem
+ * @param {String} str
+ * @returns {Boolean}
+ */
+function isRem(str) {
+ return typeof str === 'string' && str.indexOf(SUFFIX) !== -1;
+}
+
+/**
+ * Calculate rem to pixels: '1.2rem' => 1.2 * rem
+ * @param {String} str
+ * @param {Number} rem
+ * @returns {number}
+ */
+function calcRem(str) {
+ var remUnit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : global[GLOBAL_REM_UNIT];
+
+ return str.replace(REM_REG, function (rem) {
+ return parseFloat(rem) * remUnit + 'px';
+ });
+}
+
+function getRem() {
+ return global[GLOBAL_REM_UNIT];
+}
+
+function setRem(rem) {
+ global[GLOBAL_REM_UNIT] = rem;
+}
+
+function isUnitNumber(val, prop) {
+ return typeof val === 'number' && !UNITLESS_NUMBER_PROPS[prop];
+}
+
+function convertUnit(val, prop) {
+ var remUnit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : global[GLOBAL_REM_UNIT];
+
+ if (prop && isUnitNumber(val, prop)) {
+ return val * remUnit + 'px';
+ } else if (isRem(val)) {
+ return calcRem(val, remUnit);
+ }
+
+ return val;
+}
+exports['default'] = module.exports;
+exports.default = module.exports;
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.transformPropsAttrsToStyle = transformPropsAttrsToStyle;
+exports.renamePropsAttr = renamePropsAttr;
+/**
+ * transformPropAttrsToStyle
+ *
+ * @param {Object} props
+ * @param {Array} attrs
+ */
+function transformPropsAttrsToStyle(props, attrs) {
+ props.style = props.style || {};
+
+ attrs.forEach(function (attr) {
+ if (props[attr] && !props.style[attr]) {
+ props.style[attr] = props[attr];
+ delete props[attr];
+ }
+ });
+
+ return props;
+}
+
+/**
+ * renamePropsAttr
+ *
+ * @param {Object} props
+ * @param {String} originalAttrName
+ * @param {String} newAttrName
+ */
+function renamePropsAttr(props, originalAttrName, newAttrName) {
+ if (props[originalAttrName] && !props[newAttrName]) {
+ props[newAttrName] = props[originalAttrName];
+ delete props[originalAttrName];
+ }
+
+ return props;
+}
+exports["default"] = module.exports;
+exports.default = module.exports;
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _host = __webpack_require__(0);
+
+var _host2 = _interopRequireDefault(_host);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function findDOMNode(instance) {
+ if (instance == null) {
+ return null;
+ }
+
+ // If a native node, weex may not export ownerDocument property
+ if (instance.ownerDocument || instance.nodeType) {
+ return instance;
+ }
+
+ // Native component
+ if (instance._nativeNode) {
+ return instance._nativeNode;
+ }
+
+ if (typeof instance == 'string') {
+ return _host2.default.driver.getElementById(instance);
+ }
+
+ if (typeof instance.render !== 'function') {
+ throw new Error('findDOMNode: find by neither component nor DOM node.');
+ }
+
+ // Composite component
+ var internal = instance._internal;
+
+ if (internal) {
+ while (!internal._nativeNode) {
+ internal = internal._renderedComponent;
+ // If not mounted
+ if (internal == null) {
+ return null;
+ }
+ }
+ return internal._nativeNode;
+ } else {
+ throw new Error('findDOMNode: find on an unmounted component.');
+ }
+}
+
+exports.default = findDOMNode;
+module.exports = exports['default'];
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Children = exports.version = exports.setNativeProps = exports.findComponentInstance = exports.unmountComponentAtNode = exports.findDOMNode = exports.hydrate = exports.render = exports.PropTypes = exports.PureComponent = exports.Component = exports.createFactory = exports.isValidElement = exports.cloneElement = exports.createElement = undefined;
+
+__webpack_require__(18);
+
+var _element = __webpack_require__(6);
+
+var _component = __webpack_require__(4);
+
+var _component2 = _interopRequireDefault(_component);
+
+var _purecomponent = __webpack_require__(20);
+
+var _purecomponent2 = _interopRequireDefault(_purecomponent);
+
+var _proptypes = __webpack_require__(21);
+
+var _proptypes2 = _interopRequireDefault(_proptypes);
+
+var _render2 = __webpack_require__(10);
+
+var _render3 = _interopRequireDefault(_render2);
+
+var _hydrate2 = __webpack_require__(42);
+
+var _hydrate3 = _interopRequireDefault(_hydrate2);
+
+var _findDOMNode2 = __webpack_require__(16);
+
+var _findDOMNode3 = _interopRequireDefault(_findDOMNode2);
+
+var _unmountComponentAtNode2 = __webpack_require__(9);
+
+var _unmountComponentAtNode3 = _interopRequireDefault(_unmountComponentAtNode2);
+
+var _findComponentInstance2 = __webpack_require__(43);
+
+var _findComponentInstance3 = _interopRequireDefault(_findComponentInstance2);
+
+var _setNativeProps2 = __webpack_require__(44);
+
+var _setNativeProps3 = _interopRequireDefault(_setNativeProps2);
+
+var _version2 = __webpack_require__(45);
+
+var _version3 = _interopRequireDefault(_version2);
+
+var _children = __webpack_require__(46);
+
+var _children2 = _interopRequireDefault(_children);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.createElement = _element.createElement;
+exports.cloneElement = _element.cloneElement;
+exports.isValidElement = _element.isValidElement;
+exports.createFactory = _element.createFactory;
+exports.Component = _component2.default;
+exports.PureComponent = _purecomponent2.default;
+exports.PropTypes = _proptypes2.default;
+exports.render = _render3.default;
+exports.hydrate = _hydrate3.default;
+exports.findDOMNode = _findDOMNode3.default;
+exports.unmountComponentAtNode = _unmountComponentAtNode3.default;
+exports.findComponentInstance = _findComponentInstance3.default;
+exports.setNativeProps = _setNativeProps3.default;
+exports.version = _version3.default;
+exports.Children = _children2.default;
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var _hook = __webpack_require__(5);
+
+var _hook2 = _interopRequireDefault(_hook);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
+if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
+ __REACT_DEVTOOLS_GLOBAL_HOOK__.inject(_hook2.default);
+}
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true; } Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) { defineProperties(Constructor.prototype, protoProps); } if (staticProps) { defineProperties(Constructor, staticProps); } return Constructor; }; }();
+
+var _component = __webpack_require__(4);
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) { Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } }
+
+var rootCounter = 1;
+
+var Root = function (_Component) {
+ _inherits(Root, _Component);
+
+ function Root() {
+ var arguments$1 = arguments;
+
+ var _ref;
+
+ var _temp, _this, _ret;
+
+ _classCallCheck(this, Root);
+
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments$1[_key];
+ }
+
+ return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Root.__proto__ || Object.getPrototypeOf(Root)).call.apply(_ref, [this].concat(args))), _this), _this.rootID = rootCounter++, _temp), _possibleConstructorReturn(_this, _ret);
+ }
+
+ _createClass(Root, [{
+ key: 'isRootComponent',
+ value: function isRootComponent() {}
+ }, {
+ key: 'render',
+ value: function render() {
+ return this.props.children;
+ }
+ }, {
+ key: 'getPublicInstance',
+ value: function getPublicInstance() {
+ return this.getRenderedComponent().getPublicInstance();
+ }
+ }, {
+ key: 'getRenderedComponent',
+ value: function getRenderedComponent() {
+ return this._internal._renderedComponent;
+ }
+ }]);
+
+ return Root;
+}(_component2.default);
+
+exports.default = Root;
+module.exports = exports['default'];
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true; } Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) { defineProperties(Constructor.prototype, protoProps); } if (staticProps) { defineProperties(Constructor, staticProps); } return Constructor; }; }();
+
+var _component = __webpack_require__(4);
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) { Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } }
+
+/**
+ * Pure component class.
+ */
+var PureComponent = function (_Component) {
+ _inherits(PureComponent, _Component);
+
+ fu
<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7c5ef1c6/android/sdk/libs/armeabi/libweexjsb.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so
old mode 100644
new mode 100755
index f0287cf..48bee08
Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ