UNPKG

@zakijs/plugin-compiler-alipay

Version:

mor complier plugin for alipay mini program

225 lines 6.16 kB
"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