@zakijs/plugin-compiler-alipay
Version:
mor complier plugin for alipay mini program
225 lines • 6.16 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNativePropName = exports.getNativeEventName = exports.isNativeEvent = exports.getEventName = exports.isCatchEventAttr = exports.isEventAttr = void 0;
const utils_1 = require("@morjs/utils");
/**
* 所有组件都支持的基础事件
*/
const commonNativeEvent = [
// touch
'touchstart',
'touchmove',
'touchend',
'touchcancel',
// tap
'tap',
'longtap',
// animation
'transitionend',
'animationiteration',
'animationstart',
'animationend'
];
/**
* 原生小程序组件下支持的事件(用于区分自定义事件和原生事件)
*/
const tagNativeEvent = {
view: ['appear', 'disappear', 'firstappear'],
swiper: ['change', 'transition', 'animationend'],
'scroll-view': ['scrolltoupper', 'scrolltolower', 'scroll'],
'movable-view': ['change', 'changeend', 'scale'],
'page-container': [
'beforeenter',
'enter',
'entercancelled',
'afterenter',
'beforeleave',
'leave',
'leavecancelled',
'afterleave',
'clickoverlay'
],
form: ['submit', 'reset'],
input: ['input', 'confirm', 'focus', 'blur'],
textarea: ['input', 'confirm', 'focus', 'blur'],
'radio-group': ['change'],
checkbox: ['change'],
'checkbox-group': ['change'],
switch: ['change'],
slider: ['change', 'changing'],
'picker-view': ['change', 'pickstart', 'pickend'],
picker: ['change'],
image: ['load', 'error'],
video: [
'play',
'pause',
'ended',
'timeupdate',
'loading',
'stop',
'renderstart',
'error',
'fullscreenchange',
'useraction'
],
map: [
'markertap',
'callouttap',
'controltap',
'regionchange',
'paneltap',
'initcomplete'
],
'web-view': ['message', 'load', 'error'],
camera: ['ready', 'stop', 'error', 'scancode'],
canvas: ['ready'],
lifestyle: ['follow'],
'subscribe-message': ['complete'],
'page-meta': ['scroll']
};
/**
* 基础事件在当前小程序环境对应的事件
*/
const commonReplaceNativeEvent = {
longTap: 'longpress',
touchStart: 'touchstart',
touchMove: 'touchmove',
touchCancel: 'touchcancel',
touchEnd: 'touchend',
transitionEnd: 'transitionend',
animationStart: 'animationstart',
animationIteration: 'animationiteration',
animationEnd: 'animationend'
};
/**
* 原生小程序组件事件在当前小程序环境中对应的事件
*/
const tagReplaceNativeEvent = {
'scroll-view': {
scrollToUpper: 'scrolltoupper',
scrollToLower: 'scrolltolower'
},
checkbox: {
change: 'tap'
},
map: {
regionChange: 'regionchange',
markerTap: 'markertap',
calloutTap: 'callouttap',
controlTap: 'controltap'
}
};
const tagReplacePropName = {
slider: {
'background-color': 'backgroundColor',
'active-color': 'activeColor',
'handle-size': 'block-size',
handleSize: 'block-size',
'handle-color': 'block-color',
handleColor: 'block-color'
}
};
/**
* 判断小程序组件属性是否是事件(是否以on开头)
*/
const eventAttrReg = /^on([A-Za-z]+)/;
/**
* 是否是事件属性
*
* @export
* @param {string} attr 属性名
* @returns {boolean} 是否是事件属性
*/
function isEventAttr(attr) {
return eventAttrReg.test(attr);
}
exports.isEventAttr = isEventAttr;
/**
* 判断小程序组件属性是否是catch事件(是否以catch开头)
*/
const catchEventAttrReg = /^catch([A-Za-z]+)/;
/**
* 是否是catch事件属性
*
* @export
* @param {string} attr 属性名
* @returns {boolean} 是否是catch事件属性
*/
function isCatchEventAttr(attr) {
return catchEventAttrReg.test(attr);
}
exports.isCatchEventAttr = isCatchEventAttr;
/**
* 获取属性上的事件名(去除on、catch后的字符串)
*
* @export
* @param {string} attr 属性名
* @returns {string} 事件名
*/
function getEventName(attr) {
const onMatch = attr.match(eventAttrReg);
if (onMatch) {
const eventName = onMatch[1];
return utils_1.lodash.lowerFirst(eventName);
}
const catchMatch = attr.match(catchEventAttrReg);
if (catchMatch) {
const eventName = catchMatch[1];
return utils_1.lodash.lowerFirst(eventName);
}
return '';
}
exports.getEventName = getEventName;
/**
* 是否是小程序组件原生事件
*
* @export
* @param {string} eventName 事件名
* @param {string} tag 小程序组件名
* @returns {boolean} 是否是小程序组件原生事件
*/
function isNativeEvent(eventName, tag) {
const eventLowerName = eventName.toLowerCase();
if (commonNativeEvent.includes(eventLowerName)) {
return true;
}
if (tag in tagNativeEvent && tagNativeEvent[tag].includes(eventLowerName)) {
return true;
}
return false;
}
exports.isNativeEvent = isNativeEvent;
/**
* 获取当前小程序环境下的小程序组件原生组件事件名
*
* @export
* @param {string} eventName 事件名
* @param {string} tag 小程序组件名
* @returns {string} 事件名
*/
function getNativeEventName(eventName, tag) {
if (eventName in commonReplaceNativeEvent) {
return commonReplaceNativeEvent[eventName];
}
if (tag in tagReplaceNativeEvent && eventName in tagReplaceNativeEvent[tag]) {
return tagReplaceNativeEvent[tag][eventName];
}
return eventName;
}
exports.getNativeEventName = getNativeEventName;
/**
* 获取当前小程序环境下的小程序组件原生属性名
*
* @export
* @param {string} tag 小程序组件名
* @param {string} propName 属性名
* @returns {string} 属性名
*/
function getNativePropName(tag, propName) {
if (tag in tagReplacePropName && propName in tagReplacePropName[tag]) {
return tagReplacePropName[tag][propName];
}
return propName;
}
exports.getNativePropName = getNativePropName;
//# sourceMappingURL=templateEvents.js.map