@lynx-js/web-mainthread-apis 0.13.4 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +93 -0
- package/dist/createMainThreadGlobalThis.d.ts +25 -0
- package/dist/createMainThreadGlobalThis.js +454 -0
- package/dist/createMainThreadLynx.d.ts +3 -0
- package/dist/{MainThreadLynx.js → createMainThreadLynx.js} +2 -5
- package/dist/crossThreadHandlers/registerCallLepusMethodHandler.d.ts +2 -3
- package/dist/crossThreadHandlers/registerCallLepusMethodHandler.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/prepareMainThreadAPIs.d.ts +3 -4
- package/dist/prepareMainThreadAPIs.js +30 -16
- package/dist/pureElementPAPIs.d.ts +32 -0
- package/dist/pureElementPAPIs.js +140 -0
- package/dist/utils/createCrossThreadEvent.d.ts +2 -3
- package/dist/utils/createCrossThreadEvent.js +23 -12
- package/dist/utils/createExposureService.d.ts +2 -2
- package/dist/utils/createExposureService.js +4 -5
- package/dist/utils/decodeCssInJs.js +1 -1
- package/package.json +3 -3
- package/dist/MainThreadLynx.d.ts +0 -10
- package/dist/MainThreadRuntime.d.ts +0 -92
- package/dist/MainThreadRuntime.js +0 -186
- package/dist/elementAPI/ElementThreadElement.d.ts +0 -27
- package/dist/elementAPI/ElementThreadElement.js +0 -2
- package/dist/elementAPI/attributeAndProperty/attributeAndPropertyFunctions.d.ts +0 -30
- package/dist/elementAPI/attributeAndProperty/attributeAndPropertyFunctions.js +0 -127
- package/dist/elementAPI/domTree/domTreeFunctions.d.ts +0 -11
- package/dist/elementAPI/domTree/domTreeFunctions.js +0 -49
- package/dist/elementAPI/elementCreating/elementCreatingFunctions.d.ts +0 -15
- package/dist/elementAPI/elementCreating/elementCreatingFunctions.js +0 -123
- package/dist/elementAPI/event/eventFunctions.d.ts +0 -25
- package/dist/elementAPI/event/eventFunctions.js +0 -142
- package/dist/elementAPI/style/styleFunctions.d.ts +0 -10
- package/dist/elementAPI/style/styleFunctions.js +0 -89
- /package/dist/{elementAPI/style → style}/cssPropertyMap.d.ts +0 -0
- /package/dist/{elementAPI/style → style}/cssPropertyMap.js +0 -0
- /package/dist/{elementAPI/style → style}/transformInlineStyle.d.ts +0 -0
- /package/dist/{elementAPI/style → style}/transformInlineStyle.js +0 -0
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
2
|
-
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
|
-
// LICENSE file in the root directory of this source tree.
|
|
4
|
-
import { componentIdAttribute, LynxEventNameToW3cByTagName, LynxEventNameToW3cCommon, lynxTagAttribute, W3cEventNameToLynx, } from '@lynx-js/web-constants';
|
|
5
|
-
import { elementToRuntimeInfoMap, getElementByUniqueId, } from '../../MainThreadRuntime.js';
|
|
6
|
-
import { createCrossThreadEvent } from '../../utils/createCrossThreadEvent.js';
|
|
7
|
-
export function createEventFunctions(runtime) {
|
|
8
|
-
const btsHandler = (event) => {
|
|
9
|
-
if (!event.currentTarget) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
const currentTarget = event.currentTarget;
|
|
13
|
-
const isCapture = event.eventPhase === Event.CAPTURING_PHASE;
|
|
14
|
-
const lynxEventName = W3cEventNameToLynx[event.type] ?? event.type;
|
|
15
|
-
const runtimeInfo = runtime[elementToRuntimeInfoMap].get(currentTarget);
|
|
16
|
-
const hname = isCapture
|
|
17
|
-
? runtimeInfo.eventHandlerMap[lynxEventName]?.capture
|
|
18
|
-
?.handler
|
|
19
|
-
: runtimeInfo.eventHandlerMap[lynxEventName]?.bind
|
|
20
|
-
?.handler;
|
|
21
|
-
const crossThreadEvent = createCrossThreadEvent(runtime, event, lynxEventName);
|
|
22
|
-
if (typeof hname === 'string') {
|
|
23
|
-
const parentComponentUniqueId = runtimeInfo.parentComponentUniqueId;
|
|
24
|
-
const parentComponent = runtime[getElementByUniqueId](Number(parentComponentUniqueId));
|
|
25
|
-
const componentId = parentComponent?.getAttribute(lynxTagAttribute) !== 'page'
|
|
26
|
-
? parentComponent?.getAttribute(componentIdAttribute) ?? undefined
|
|
27
|
-
: undefined;
|
|
28
|
-
if (componentId) {
|
|
29
|
-
runtime.config.callbacks.publicComponentEvent(componentId, hname, crossThreadEvent);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
runtime.config.callbacks.publishEvent(hname, crossThreadEvent);
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
else if (hname) {
|
|
37
|
-
crossThreadEvent.target.elementRefptr =
|
|
38
|
-
event.target;
|
|
39
|
-
if (crossThreadEvent.currentTarget) {
|
|
40
|
-
crossThreadEvent.currentTarget
|
|
41
|
-
.elementRefptr = event.currentTarget;
|
|
42
|
-
}
|
|
43
|
-
runtime.runWorklet?.(hname.value, [crossThreadEvent]);
|
|
44
|
-
}
|
|
45
|
-
return false;
|
|
46
|
-
};
|
|
47
|
-
const btsCatchHandler = (event) => {
|
|
48
|
-
const handlerTriggered = btsHandler(event);
|
|
49
|
-
if (handlerTriggered)
|
|
50
|
-
event.stopPropagation();
|
|
51
|
-
};
|
|
52
|
-
function __AddEvent(element, eventType, eventName, newEventHandler) {
|
|
53
|
-
eventName = eventName.toLowerCase();
|
|
54
|
-
const isCatch = eventType === 'catchEvent' || eventType === 'capture-catch';
|
|
55
|
-
const isCapture = eventType.startsWith('capture');
|
|
56
|
-
const runtimeInfo = runtime[elementToRuntimeInfoMap].get(element);
|
|
57
|
-
const currentHandler = isCapture
|
|
58
|
-
? runtimeInfo.eventHandlerMap[eventName]?.capture
|
|
59
|
-
: runtimeInfo.eventHandlerMap[eventName]?.bind;
|
|
60
|
-
const currentRegisteredHandler = isCatch ? btsCatchHandler : btsHandler;
|
|
61
|
-
if (currentHandler) {
|
|
62
|
-
if (!newEventHandler) {
|
|
63
|
-
/**
|
|
64
|
-
* remove handler
|
|
65
|
-
*/
|
|
66
|
-
element.removeEventListener(eventName, currentRegisteredHandler, {
|
|
67
|
-
capture: isCapture,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
/**
|
|
73
|
-
* append new handler
|
|
74
|
-
*/
|
|
75
|
-
if (newEventHandler) {
|
|
76
|
-
const htmlEventName = LynxEventNameToW3cByTagName[element.tagName]?.[eventName]
|
|
77
|
-
?? LynxEventNameToW3cCommon[eventName] ?? eventName;
|
|
78
|
-
element.addEventListener(htmlEventName, currentRegisteredHandler, {
|
|
79
|
-
capture: isCapture,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (newEventHandler) {
|
|
84
|
-
const info = {
|
|
85
|
-
type: eventType,
|
|
86
|
-
handler: newEventHandler,
|
|
87
|
-
};
|
|
88
|
-
if (!runtimeInfo.eventHandlerMap[eventName]) {
|
|
89
|
-
runtimeInfo.eventHandlerMap[eventName] = {
|
|
90
|
-
capture: undefined,
|
|
91
|
-
bind: undefined,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
if (isCapture) {
|
|
95
|
-
runtimeInfo.eventHandlerMap[eventName].capture = info;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
runtimeInfo.eventHandlerMap[eventName].bind = info;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function __GetEvent(element, eventName, eventType) {
|
|
103
|
-
const runtimeInfo = runtime[elementToRuntimeInfoMap].get(element);
|
|
104
|
-
eventName = eventName.toLowerCase();
|
|
105
|
-
const isCapture = eventType.startsWith('capture');
|
|
106
|
-
const handler = isCapture
|
|
107
|
-
? runtimeInfo.eventHandlerMap[eventName]?.capture
|
|
108
|
-
: runtimeInfo.eventHandlerMap[eventName]?.bind;
|
|
109
|
-
return handler?.handler;
|
|
110
|
-
}
|
|
111
|
-
function __GetEvents(element) {
|
|
112
|
-
const eventHandlerMap = runtime[elementToRuntimeInfoMap].get(element).eventHandlerMap;
|
|
113
|
-
const eventInfos = [];
|
|
114
|
-
for (const [lynxEventName, info] of Object.entries(eventHandlerMap)) {
|
|
115
|
-
for (const atomInfo of [info.bind, info.capture]) {
|
|
116
|
-
if (atomInfo) {
|
|
117
|
-
const { type, handler } = atomInfo;
|
|
118
|
-
if (handler) {
|
|
119
|
-
eventInfos.push({
|
|
120
|
-
type: type,
|
|
121
|
-
name: lynxEventName,
|
|
122
|
-
function: handler,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return eventInfos;
|
|
129
|
-
}
|
|
130
|
-
function __SetEvents(element, listeners) {
|
|
131
|
-
for (const { type: eventType, name: lynxEventName, function: eventHandler } of listeners) {
|
|
132
|
-
__AddEvent(element, eventType, lynxEventName, eventHandler);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return {
|
|
136
|
-
__AddEvent,
|
|
137
|
-
__GetEvent,
|
|
138
|
-
__GetEvents,
|
|
139
|
-
__SetEvents,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=eventFunctions.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type CssInJsInfo } from '@lynx-js/web-constants';
|
|
2
|
-
import { type MainThreadRuntime } from '../../MainThreadRuntime.js';
|
|
3
|
-
export declare function createStyleFunctions(runtime: MainThreadRuntime, cssInJsInfo: CssInJsInfo): {
|
|
4
|
-
__AddClass: (element: HTMLElement, className: string) => void;
|
|
5
|
-
__SetClasses: (element: HTMLElement, classNames: string | null) => void;
|
|
6
|
-
__GetClasses: (element: HTMLElement) => string[];
|
|
7
|
-
__AddInlineStyle: (element: HTMLElement, key: number | string, value: string | number | null | undefined) => void;
|
|
8
|
-
__SetInlineStyles: (element: HTMLElement, value: string | Record<string, string> | undefined) => void;
|
|
9
|
-
__SetCSSId: (elements: (HTMLElement)[], cssId: string | number) => void;
|
|
10
|
-
};
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
2
|
-
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
|
-
// LICENSE file in the root directory of this source tree.
|
|
4
|
-
import { cssIdAttribute } from '@lynx-js/web-constants';
|
|
5
|
-
import hyphenateStyleName from 'hyphenate-style-name';
|
|
6
|
-
import { queryCSSProperty } from './cssPropertyMap.js';
|
|
7
|
-
import { decodeCssInJs } from '../../utils/decodeCssInJs.js';
|
|
8
|
-
import { transformInlineStyleString, transformParsedStyles, } from './transformInlineStyle.js';
|
|
9
|
-
import { elementToRuntimeInfoMap, updateCSSInJsStyle, } from '../../MainThreadRuntime.js';
|
|
10
|
-
export function createStyleFunctions(runtime, cssInJsInfo) {
|
|
11
|
-
function __AddClass(element, className) {
|
|
12
|
-
const newClassName = ((element.className ?? '') + ' ' + className)
|
|
13
|
-
.trim();
|
|
14
|
-
element.setAttribute('class', newClassName);
|
|
15
|
-
if (!runtime.config.pageConfig.enableCSSSelector) {
|
|
16
|
-
const newStyleStr = decodeCssInJs(newClassName, cssInJsInfo, element.getAttribute(cssIdAttribute));
|
|
17
|
-
runtime[updateCSSInJsStyle](runtime[elementToRuntimeInfoMap].get(element).uniqueId, newStyleStr);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function __SetClasses(element, classNames) {
|
|
21
|
-
classNames
|
|
22
|
-
? element.setAttribute('class', classNames)
|
|
23
|
-
: element.removeAttribute('class');
|
|
24
|
-
if (!runtime.config.pageConfig.enableCSSSelector) {
|
|
25
|
-
const newStyleStr = decodeCssInJs(classNames ?? '', cssInJsInfo, element.getAttribute(cssIdAttribute));
|
|
26
|
-
runtime[updateCSSInJsStyle](runtime[elementToRuntimeInfoMap].get(element).uniqueId, newStyleStr ?? '');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function __GetClasses(element) {
|
|
30
|
-
return (element.className ?? '').split(' ').filter(e => e);
|
|
31
|
-
}
|
|
32
|
-
function __AddInlineStyle(element, key, value) {
|
|
33
|
-
let dashName;
|
|
34
|
-
if (typeof key === 'number') {
|
|
35
|
-
const queryResult = queryCSSProperty(key);
|
|
36
|
-
dashName = queryResult.dashName;
|
|
37
|
-
if (queryResult.isX) {
|
|
38
|
-
console.error(`[lynx-web] css property: ${dashName} is not supported.`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
dashName = key;
|
|
43
|
-
}
|
|
44
|
-
const valueStr = typeof value === 'number' ? value.toString() : value;
|
|
45
|
-
if (!valueStr) { // null or undefined
|
|
46
|
-
element.style.removeProperty(dashName);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
const { transformedStyle } = transformParsedStyles([[
|
|
50
|
-
dashName,
|
|
51
|
-
valueStr,
|
|
52
|
-
]]);
|
|
53
|
-
for (const [property, value] of transformedStyle) {
|
|
54
|
-
element.style.setProperty(property, value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
function __SetInlineStyles(element, value) {
|
|
59
|
-
if (!value)
|
|
60
|
-
return;
|
|
61
|
-
const { transformedStyle } = typeof value === 'string'
|
|
62
|
-
? transformInlineStyleString(value)
|
|
63
|
-
: transformParsedStyles(Object.entries(value).map(([k, value]) => [
|
|
64
|
-
hyphenateStyleName(k),
|
|
65
|
-
value,
|
|
66
|
-
]));
|
|
67
|
-
const transformedStyleStr = transformedStyle.map(([property, value]) => `${property}:${value};`).join('');
|
|
68
|
-
element.setAttribute('style', transformedStyleStr);
|
|
69
|
-
}
|
|
70
|
-
function __SetCSSId(elements, cssId) {
|
|
71
|
-
cssId = cssId.toString();
|
|
72
|
-
for (const element of elements) {
|
|
73
|
-
element.setAttribute(cssIdAttribute, cssId);
|
|
74
|
-
if (!runtime.config.pageConfig.enableCSSSelector) {
|
|
75
|
-
const cls = element.getAttribute('class');
|
|
76
|
-
cls && __SetClasses(element, cls);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
__AddClass,
|
|
82
|
-
__SetClasses,
|
|
83
|
-
__GetClasses,
|
|
84
|
-
__AddInlineStyle,
|
|
85
|
-
__SetInlineStyles,
|
|
86
|
-
__SetCSSId,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=styleFunctions.js.map
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|