wepy-ant
Version:
参见:[小程序框架wepy](https://github.com/wepyjs/wepy)
233 lines (186 loc) • 7.83 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _event = require('./event');
var _event2 = _interopRequireDefault(_event);
var _util = require('./util');
var _util2 = _interopRequireDefault(_util);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var PAGE_EVENT = ['onLoad', 'onReady', 'onShow', 'onHide', 'onUnload', 'onPullDownRefresh', 'onReachBottom', 'onShareAppMessage'];
var APP_EVENT = ['onLaunch', 'onShow', 'onHide', 'onError'];
var $bindEvt = function $bindEvt(config, com, prefix) {
com.$prefix = _util2.default.camelize(prefix || '');
Object.getOwnPropertyNames(com.components || {}).forEach(function (name) {
var cClass = com.components[name];
var child = new cClass();
child.$initMixins();
child.$name = name;
var comPrefix = prefix ? prefix + child.$name + '$' : '$' + child.$name + '$';
com.$com[name] = child;
$bindEvt(config, child, comPrefix);
});
Object.getOwnPropertyNames(com.constructor.prototype || []).forEach(function (prop) {
if (prop !== 'constructor' && PAGE_EVENT.indexOf(prop) === -1) {
config[prop] = function () {
com.constructor.prototype[prop].apply(com, arguments);
com.$apply();
};
}
});
var allMethods = Object.getOwnPropertyNames(com.methods || []);
com.$mixins.forEach(function (mix) {
allMethods = allMethods.concat(Object.getOwnPropertyNames(mix.methods || []));
});
allMethods.forEach(function (method, i) {
config[com.$prefix + method] = function (e) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
var evt = new _event2.default('system', this, e.type);
evt.$transfor(e);
var wepyParams = [],
paramsLength = 0,
tmp = void 0,
p = void 0,
comIndex = void 0;
if (e.currentTarget && e.currentTarget.dataset) {
tmp = e.currentTarget.dataset;
while (tmp['wpy' + method.toLowerCase() + (p = String.fromCharCode(65 + paramsLength++))] !== undefined) {
wepyParams.push(tmp['wpy' + method.toLowerCase() + p]);
}
if (tmp.comIndex !== undefined) {
comIndex = tmp.comIndex;
}
}
if (comIndex !== undefined) {
comIndex = ('' + comIndex).split('-');
var level = comIndex.length,
_tmp = level;
while (level-- > 0) {
_tmp = level;
var tmpcom = com;
while (_tmp-- > 0) {
tmpcom = tmpcom.$parent;
}
tmpcom.$setIndex(comIndex.shift());
}
}
args = [].concat(wepyParams);
var rst = void 0,
mixRst = void 0;
var comfn = com.methods[method];
if (comfn) {
rst = comfn.apply(com, args.concat(evt));
}
com.$mixins.forEach(function (mix) {
mix.methods[method] && (mixRst = mix.methods[method].apply(com, args.concat(evt)));
});
com.$apply();
return comfn ? rst : mixRst;
};
});
return config;
};
exports.default = {
$createApp: function $createApp(appClass, appConfig) {
var config = {};
var app = new appClass();
if (!this.$instance) {
app.$init(this, appConfig);
this.$instance = app;
}
if (arguments.length === 2 && arguments[1] === true) {
config.$app = app;
}
app.$wxapp = getApp();
APP_EVENT.forEach(function (v) {
config[v] = function () {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var rst = void 0;
app[v] && (rst = app[v].apply(app, args));
return rst;
};
});
return config;
},
$createPage: function $createPage(pageClass, pagePath) {
var self = this;
var config = {},
k = void 0;
var page = new pageClass();
if (typeof pagePath === 'string') {
this.$instance.$pages['/' + pagePath] = page;
}
page.$initMixins();
if (typeof pagePath === 'boolean' && pagePath || arguments.length === 3 && arguments[2] === true) config.$page = page;
config.onLoad = function () {
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
page.$name = pageClass.name || 'unnamed';
page.$init(this, self.$instance, self.$instance);
var prevPage = self.$instance.__prevPage__;
var secParams = {};
secParams.from = prevPage ? prevPage : undefined;
if (prevPage && Object.keys(prevPage.$preloadData).length > 0) {
secParams.preload = prevPage.$preloadData;
prevPage.$preloadData = {};
}
if (page.$prefetchData && Object.keys(page.$prefetchData).length > 0) {
secParams.prefetch = page.$prefetchData;
page.$prefetchData = {};
}
args.push(secParams);
page.onLoad && page.onLoad.apply(page, args);
page.$mixins.forEach(function (mix) {
mix['onLoad'] && mix['onLoad'].apply(page, args);
});
page.$apply();
};
config.onShow = function () {
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
self.$instance.__prevPage__ = page;
page.onShow && page.onShow.apply(page, args);
page.$mixins.forEach(function (mix) {
mix['onShow'] && mix['onShow'].apply(page, args);
});
var pages = getCurrentPages();
var pageId = pages[pages.length - 1].__route__;
if (self.$instance.__route__ !== pageId) {
self.$instance.__route__ = pageId;
page.onRoute && page.onRoute.apply(page, args);
page.$mixins.forEach(function (mix) {
mix['onRoute'] && mix['onRoute'].apply(page, args);
});
}
page.$apply();
};
PAGE_EVENT.forEach(function (v) {
if (v !== 'onLoad' && v !== 'onShow') {
config[v] = function () {
for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
var rst = void 0;
page[v] && (rst = page[v].apply(page, args));
if (v === 'onShareAppMessage') return rst;
page.$mixins.forEach(function (mix) {
mix[v] && mix[v].apply(page, args);
});
page.$apply();
return rst;
};
}
});
if (!page.onShareAppMessage) {
delete config.onShareAppMessage;
}
return $bindEvt(config, page, '');
}
};
//# sourceMappingURL=base.js.map
;