@tarojs/taro-h5
Version:
Taro h5 framework
280 lines (277 loc) • 12.6 kB
JavaScript
import { __awaiter } from 'tslib';
import Taro from '@tarojs/api';
import { Current } from '@tarojs/runtime';
import { getParameterError, temporarilyNotSupport } from '../../../utils/index.js';
import { MethodHandler } from '../../../utils/handler.js';
import ActionSheet from './actionSheet.js';
import Modal from './modal.js';
import Toast from './toast.js';
// 交互
let status = 'default';
// inject necessary style
function init(doc) {
if (status === 'ready')
return;
const taroStyle = doc.createElement('style');
taroStyle.textContent =
'@font-face{font-weight:normal;font-style:normal;font-family:"taro";src:url("data:application/x-font-ttf;charset=utf-8;base64, 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") format("truetype");}@-webkit-keyframes taroLoading{0%{-webkit-transform:rotate3d(0, 0, 1, 0deg);}100%{-webkit-transform:rotate3d(0, 0, 1, 360deg);transform:rotate3d(0, 0, 1, 360deg);}}@keyframes taroLoading{0%{-webkit-transform:rotate3d(0, 0, 1, 0deg);}100%{-webkit-transform:rotate3d(0, 0, 1, 360deg);transform:rotate3d(0, 0, 1, 360deg);}}.taro-modal__foot:after {content: "";position: absolute;left: 0;top: 0;right: 0;height: 1px;border-top: 1px solid #D5D5D6;color: #D5D5D6;-webkit-transform-origin: 0 0;transform-origin: 0 0;-webkit-transform: scaleY(0.5);transform: scaleY(0.5);} .taro-model__btn:active {background-color: #EEEEEE}.taro-model__btn:not(:first-child):after {content: "";position: absolute;left: 0;top: 0;width: 1px;bottom: 0;border-left: 1px solid #D5D5D6;color: #D5D5D6;-webkit-transform-origin: 0 0;transform-origin: 0 0;-webkit-transform: scaleX(0.5);transform: scaleX(0.5);}.taro-actionsheet__cell:not(:last-child):after {content: "";position: absolute;left: 0;bottom: 0;right: 0;height: 1px;border-top: 1px solid #e5e5e5;color: #e5e5e5;-webkit-transform-origin: 0 0;transform-origin: 0 0;-webkit-transform: scaleY(0.5);transform: scaleY(0.5);}';
doc.querySelector('head').appendChild(taroStyle);
status = 'ready';
}
const toast = new Toast();
const modal = new Modal();
const actionSheet = new ActionSheet();
const showToast = (options = { title: '' }) => {
init(document);
options = Object.assign({
title: '',
icon: 'success',
image: '',
duration: 1500,
mask: false
}, options);
const { success, fail, complete } = options;
const handle = new MethodHandler({ name: 'showToast', success, fail, complete });
if (typeof options.title !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'title',
correct: 'String',
wrong: options.title
})
});
}
if (typeof options.duration !== 'number') {
return handle.fail({
errMsg: getParameterError({
para: 'duration',
correct: 'Number',
wrong: options.duration
})
});
}
if (options.image && typeof options.image !== 'string')
options.image = '';
options.mask = !!options.mask;
let errMsg = '';
if (!toast.el) {
errMsg = toast.create(options, 'toast');
}
else {
errMsg = toast.show(options, 'toast');
}
return handle.success({ errMsg });
};
const hideToast = ({ noConflict = false, success, fail, complete } = {}) => {
const handle = new MethodHandler({ name: 'hideToast', success, fail, complete });
if (!toast.el)
return handle.success();
toast.hide(0, noConflict ? 'toast' : '');
return handle.success();
};
const showLoading = (options = { title: '' }) => {
init(document);
options = Object.assign({
title: '',
mask: false
}, options);
const { success, fail, complete } = options;
const handle = new MethodHandler({ name: 'showLoading', success, fail, complete });
const config = {
icon: 'loading',
image: '',
duration: -1
};
options = Object.assign({}, options, config);
if (typeof options.title !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'title',
correct: 'String',
wrong: options.title
})
});
}
options.mask = !!options.mask;
let errMsg = '';
if (!toast.el) {
errMsg = toast.create(options, 'loading');
}
else {
errMsg = toast.show(options, 'loading');
}
return handle.success({ errMsg });
};
const hideLoading = ({ noConflict = false, success, fail, complete } = {}) => {
const handle = new MethodHandler({ name: 'hideLoading', success, fail, complete });
if (!toast.el)
return handle.success();
toast.hide(0, noConflict ? 'loading' : '');
return handle.success();
};
const showModal = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (options = {}) {
init(document);
options = Object.assign({
title: '',
content: '',
showCancel: true,
cancelText: '取消',
cancelColor: '#000000',
confirmText: '确定',
confirmColor: '#3CC51F'
}, options);
const { success, fail, complete } = options;
const handle = new MethodHandler({ name: 'showModal', success, fail, complete });
if (typeof options.title !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'title',
correct: 'String',
wrong: options.title
})
});
}
if (typeof options.content !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'content',
correct: 'String',
wrong: options.content
})
});
}
if (typeof options.cancelText !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'cancelText',
correct: 'String',
wrong: options.cancelText
})
});
}
if (options.cancelText.replace(/[\u0391-\uFFE5]/g, 'aa').length > 8) {
return handle.fail({
errMsg: 'cancelText length should not larger then 4 Chinese characters'
});
}
if (typeof options.confirmText !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'confirmText',
correct: 'String',
wrong: options.confirmText
})
});
}
if (options.confirmText.replace(/[\u0391-\uFFE5]/g, 'aa').length > 8) {
return handle.fail({
errMsg: 'confirmText length should not larger then 4 Chinese characters'
});
}
if (typeof options.cancelColor !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'cancelColor',
correct: 'String',
wrong: options.cancelColor
})
});
}
if (typeof options.confirmColor !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'confirmColor',
correct: 'String',
wrong: options.confirmColor
})
});
}
options.showCancel = !!options.showCancel;
let result = '';
if (!modal.el) {
result = yield modal.create(options);
}
else {
result = yield modal.show(options);
}
const res = { cancel: !1, confirm: !1 };
res[result] = !0;
return handle.success(res);
});
function hideModal() {
if (!modal.el)
return;
modal.hide();
}
const showActionSheet = (...args_2) => __awaiter(void 0, [...args_2], void 0, function* (options = { itemList: [] }, methodName = 'showActionSheet') {
init(document);
options = Object.assign({
itemColor: '#000000',
itemList: []
}, options);
const { success, fail, complete } = options;
const handle = new MethodHandler({ name: methodName, success, fail, complete });
// list item String
if (!Array.isArray(options.itemList)) {
return handle.fail({
errMsg: getParameterError({
para: 'itemList',
correct: 'Array',
wrong: options.itemList
})
});
}
if (options.itemList.length < 1) {
return handle.fail({ errMsg: 'parameter error: parameter.itemList should have at least 1 item' });
}
if (options.itemList.length > 6) {
return handle.fail({ errMsg: 'parameter error: parameter.itemList should not be large than 6' });
}
for (let i = 0; i < options.itemList.length; i++) {
if (typeof options.itemList[i] !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: `itemList[${i}]`,
correct: 'String',
wrong: options.itemList[i]
})
});
}
}
if (typeof options.itemColor !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'itemColor',
correct: 'String',
wrong: options.itemColor
})
});
}
let result = '';
if (!actionSheet.el) {
result = yield actionSheet.create(options);
}
else {
result = yield actionSheet.show(options);
}
if (typeof result === 'string') {
return handle.fail(({ errMsg: result }));
}
else {
return handle.success(({ tapIndex: result }));
}
});
Taro.eventCenter.on('__afterTaroRouterChange', () => {
var _a, _b;
if (toast.currentPath && toast.currentPath !== ((_a = Current.page) === null || _a === void 0 ? void 0 : _a.path)) {
hideToast();
hideLoading();
}
if (modal.currentPath && modal.currentPath !== ((_b = Current.page) === null || _b === void 0 ? void 0 : _b.path)) {
hideModal();
}
});
const enableAlertBeforeUnload = /* @__PURE__ */ temporarilyNotSupport('enableAlertBeforeUnload');
const disableAlertBeforeUnload = /* @__PURE__ */ temporarilyNotSupport('disableAlertBeforeUnload');
export { disableAlertBeforeUnload, enableAlertBeforeUnload, hideLoading, hideToast, showActionSheet, showLoading, showModal, showToast };
//# sourceMappingURL=index.js.map