| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.STRINGIFY_JSON = exports.ATTR_DATASET_EVENT_OPTS = exports.addEventOpts = exports.createCustomEventExpr = exports.createTransformOn = exports.defaultMatch = void 0;
- const uni_shared_1 = require("@dcloudio/uni-shared");
- const compiler_core_1 = require("@vue/compiler-core");
- const utils_1 = require("../utils");
- function defaultMatch(name, node, context) {
- return isCustomEvent(name) && (0, utils_1.isUserComponent)(node, context);
- }
- exports.defaultMatch = defaultMatch;
- /**
- * 百度、快手小程序的自定义组件,不支持动态事件绑定,故转换为静态事件 + dataset
- * @param baseTransformOn
- * @returns
- */
- function createTransformOn(baseTransformOn, { match } = {
- match: defaultMatch,
- }) {
- return (dir, node, context, augmentor) => {
- const res = baseTransformOn(dir, node, context, augmentor);
- const { name, arg, exp } = dir;
- if (name !== 'on' || !arg || !exp || !(0, compiler_core_1.isStaticExp)(arg)) {
- return res;
- }
- if (!match(arg.content, node, context)) {
- return res;
- }
- const value = res.props[0].value;
- res.props[0].value = createCustomEventExpr();
- addEventOpts(node.tagType === 1 /* ElementTypes.COMPONENT */
- ? (0, uni_shared_1.customizeEvent)(arg.content)
- : arg.content, value, node, context);
- return res;
- };
- }
- exports.createTransformOn = createTransformOn;
- function createCustomEventExpr() {
- return (0, compiler_core_1.createSimpleExpression)('__e', true);
- }
- exports.createCustomEventExpr = createCustomEventExpr;
- function addEventOpts(event, value, node, context) {
- const attrName = node.tagType === 1 /* ElementTypes.COMPONENT */
- ? ATTR_DATA_EVENT_OPTS
- : exports.ATTR_DATASET_EVENT_OPTS;
- const opts = (0, compiler_core_1.findProp)(node, attrName, true);
- if (!opts) {
- node.props.push(createDataEventOptsProp(attrName, event, value, context));
- }
- else {
- const children = opts.exp.children;
- children.splice(children.length - 2, 0, createDataEventOptsProperty(event, value));
- }
- }
- exports.addEventOpts = addEventOpts;
- const ATTR_DATA_EVENT_OPTS = 'eO';
- exports.ATTR_DATASET_EVENT_OPTS = 'data-e-o';
- function createDataEventOptsProperty(event, exp) {
- return (0, compiler_core_1.createCompoundExpression)([`'${event}'`, ': ', exp, ',']);
- }
- exports.STRINGIFY_JSON = Symbol(`stringifyJson`);
- function createDataEventOptsProp(name, event, exp, context) {
- const children = [];
- const stringify = name === ATTR_DATA_EVENT_OPTS;
- if (stringify) {
- children.push(context.helperString(exports.STRINGIFY_JSON) + '(');
- }
- children.push('{', createDataEventOptsProperty(event, exp), '}');
- if (stringify) {
- children.push(')');
- }
- return {
- type: 7 /* NodeTypes.DIRECTIVE */,
- name: 'bind',
- loc: compiler_core_1.locStub,
- modifiers: [],
- arg: (0, compiler_core_1.createSimpleExpression)(name, true),
- exp: (0, compiler_core_1.createCompoundExpression)(children),
- };
- }
- const builtInEvents = [
- '__l',
- 'tap',
- 'longtap',
- 'longpress',
- 'touchstart',
- 'touchmove',
- 'touchcancel',
- 'touchend',
- 'touchforcechange',
- 'transitionend',
- 'animationstart',
- 'animationiteration',
- 'animationend',
- ];
- function isCustomEvent(name) {
- return !builtInEvents.includes(name);
- }
|