weex-nuke
Version:
基于 Rax 、Weex 的高性能组件体系 ~~
93 lines (84 loc) • 2.15 kB
JavaScript
/** @jsx createElement */
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _rax = require('rax');
var isWeb = typeof callNative !== 'function';
function createEle(type) {
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var children = arguments[2];
var el = document.createElement(type);
if (children) {
if (!Array.isArray(children)) {
children = [children];
}
children.forEach(function (child) {
child && el.appendChild(child);
});
}
(0, _rax.setNativeProps)(el, opts);
return el;
}
function append(ele) {
document.body.appendChild(ele);
}
function ready(callback) {
if (callback) {
callbacks = callbacks || [];
callbacks.push(callback);
}
if (document.body) {
clearInterval(timer);
timer = null;
while (callbacks.length) {
callbacks.shift()();
}
} else if (!timer) {
timer = setInterval(bodyReady, 16);
}
}
function getRect(ref) {
return new Promise(function (resolve, reject) {
var res = {
width: null,
height: null,
isSuccess: false
};
if (!ref) {
reject(res);
}
var domEl = (0, _rax.findDOMNode)(ref);
if (domEl) {
if (isWeb) {
var size = domEl.getBoundingClientRect();
resolve(_extends({
isSuccess: true
}, size));
}
} else {
try {
var dom = require('@weex-module/dom');
dom.getComponentRect(domEl.ref, function (e) {
if (e && e.size) {
resolve(_extends({
isSuccess: true
}, e.size));
} else {
reject(res);
}
});
} catch (e) {
reject(res);
}
}
});
}
exports.default = {
createEle: createEle,
append: append,
ready: ready,
getRect: getRect
};
module.exports = exports['default'];