• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_ABSTRACT_H
17 #define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_ABSTRACT_H
18 
19 #include <cstdint>
20 #include <optional>
21 
22 #include "base/geometry/dimension.h"
23 #include "base/geometry/dimension_rect.h"
24 #include "base/json/json_util.h"
25 #include "base/log/log.h"
26 #include "base/memory/ace_type.h"
27 #include "base/utils/system_properties.h"
28 #include "bridge/declarative_frontend/engine/bindings.h"
29 #include "bridge/declarative_frontend/engine/functions/js_function.h"
30 #include "bridge/declarative_frontend/engine/js_ref_ptr.h"
31 #include "core/common/container.h"
32 #include "core/common/resource/resource_manager.h"
33 #include "core/common/resource/resource_object.h"
34 #include "core/common/resource/resource_wrapper.h"
35 #include "core/components/common/properties/popup_param.h"
36 #include "core/components/theme/theme_manager.h"
37 #include "core/components_ng/event/gesture_event_hub.h"
38 #include "core/components_ng/pattern/overlay/sheet_presentation_pattern.h"
39 #include "core/components_ng/pattern/tabs/tab_content_model.h"
40 #include "core/components_ng/pattern/text/text_model.h"
41 #include "core/components_ng/pattern/text/text_menu_extension.h"
42 #include "core/components_ng/property/gradient_property.h"
43 #include "core/components_ng/property/transition_property.h"
44 #include "interfaces/inner_api/ace/ai/image_analyzer.h"
45 
46 namespace OHOS::Ace::Framework {
47 
48 constexpr int32_t DEFAULT_TAP_FINGERS = 1;
49 constexpr int32_t DEFAULT_TAP_COUNTS = 1;
50 constexpr float DEFAULT_PROGRESS_TOTAL = 100.0f;
51 
52 enum class ResourceType : uint32_t {
53     COLOR = 10001,
54     FLOAT,
55     STRING,
56     PLURAL,
57     BOOLEAN,
58     INTARRAY,
59     INTEGER,
60     PATTERN,
61     STRARRAY,
62     MEDIA = 20000,
63     RAWFILE = 30000
64 };
65 
66 static std::vector<std::pair<int32_t, RefPtr<ResourceObject>>> DEFAULT_RESOURCE_PAIR_ARRAY;
67 
68 enum class JSCallbackInfoType { STRING, NUMBER, OBJECT, BOOLEAN, FUNCTION };
69 
70 struct LocalizedCalcDimension {
71     std::optional<CalcDimension> start;
72     std::optional<CalcDimension> end;
73     std::optional<CalcDimension> top;
74     std::optional<CalcDimension> bottom;
75     RefPtr<ResourceObject> leftResObj;
76     RefPtr<ResourceObject> rightResObj;
77     RefPtr<ResourceObject> topResObj;
78     RefPtr<ResourceObject> bottomResObj;
79 };
80 
81 struct CommonCalcDimension {
82     std::optional<CalcDimension> left;
83     std::optional<CalcDimension> right;
84     std::optional<CalcDimension> top;
85     std::optional<CalcDimension> bottom;
86     RefPtr<ResourceObject> leftResObj;
87     RefPtr<ResourceObject> rightResObj;
88     RefPtr<ResourceObject> topResObj;
89     RefPtr<ResourceObject> bottomResObj;
90 };
91 
92 struct LocalizedColor {
93     std::optional<Color> start;
94     std::optional<Color> end;
95     std::optional<Color> top;
96     std::optional<Color> bottom;
97     RefPtr<ResourceObject> startResObj;
98     RefPtr<ResourceObject> endResObj;
99     RefPtr<ResourceObject> topResObj;
100     RefPtr<ResourceObject> bottomResObj;
101 };
102 
103 struct CommonColor {
104     std::optional<Color> left;
105     std::optional<Color> right;
106     std::optional<Color> top;
107     std::optional<Color> bottom;
108     RefPtr<ResourceObject> leftResObj;
109     RefPtr<ResourceObject> rightResObj;
110     RefPtr<ResourceObject> topResObj;
111     RefPtr<ResourceObject> bottomResObj;
112 };
113 
114 RefPtr<ResourceObject> GetResourceObject(const JSRef<JSObject>& jsObj);
115 RefPtr<ResourceObject> GetResourceObjectByBundleAndModule(const JSRef<JSObject>& jsObj);
116 RefPtr<ResourceWrapper> CreateResourceWrapper(const JSRef<JSObject>& jsObj, RefPtr<ResourceObject>& resourceObject);
117 RefPtr<ResourceWrapper> CreateResourceWrapper();
118 using PopupOnWillDismiss = std::function<void(int32_t)>;
119 class JSViewAbstract {
120 public:
121     static RefPtr<ResourceObject> GetResourceObject(const JSRef<JSObject>& jsObj);
122     static void SetPixelRoundMode(const JSCallbackInfo& info);
123     static uint8_t GetPixelRoundMode();
124     static void GetAngle(
125         const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, std::optional<float>& angle);
126     static void GetJsAngle(
127         int32_t key, const JSRef<JSVal>& jsValue, std::optional<float>& angle);
128     static void GetJsAngleWithDefault(
129         int32_t key, const JSRef<JSObject>& jsObj, std::optional<float>& angle, float defaultValue);
130     static inline void CheckAngle(std::optional<float>& angle);
131     static void GetPerspective(const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, float& perspective);
132     static void GetJsPerspective(int32_t key, const JSRef<JSObject>& jsValue, float& perspective);
133     static void GetGradientColorStops(Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue);
134     static void GetFractionStops(
135         std::vector<std::pair<float, float>>& fractionStops, const JSRef<JSVal>& array);
136     static void NewGetGradientColorStops(NG::Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue);
137     static void NewGetJsGradientColorStops(NG::Gradient& gradient, const JSRef<JSVal>& colorStops,
138         const int32_t mapIdx = 0);
139     static void NewGetJsGradientColorStopsCheck(NG::Gradient& gradient, const JSRef<JSVal>& colorStops);
140 
141     static void JsScale(const JSCallbackInfo& info);
142     static void SetTabBarSymbolOptionApply(const JSCallbackInfo& info, TabBarSymbol& symbolApply,
143         const JSRef<JSVal>& modifierNormalObj, const JSRef<JSVal>& modifierSelectedObj);
144     static void SetDragPreviewOptionApply(const JSCallbackInfo& info, NG::DragPreviewOption& previewOption);
145     static void SetDragNumberBadge(const JSCallbackInfo& info, NG::DragPreviewOption& option);
146     static void SetDefaultScale();
147     static void JsScaleX(const JSCallbackInfo& info);
148     static void JsScaleY(const JSCallbackInfo& info);
149     static void JsOpacity(const JSCallbackInfo& info);
150     static void JsTranslate(const JSCallbackInfo& info);
151     static void SetDefaultTranslate();
152     static void JsTranslateX(const JSCallbackInfo& info);
153     static void JsTranslateY(const JSCallbackInfo& info);
154     static void JsRotate(const JSCallbackInfo& info);
155     static void SetDefaultRotate();
156     static void JsRotateX(const JSCallbackInfo& info);
157     static void JsRotateY(const JSCallbackInfo& info);
158     static void JsTransform(const JSCallbackInfo& info);
159     static void JsTransform3D(const JSCallbackInfo& info);
160     static void SetDefaultTransform();
161     static void SetDefaultTransform3D();
162     static void JsTransition(const JSCallbackInfo& info);
163     static void ParseDragPreviewConfig(const JSCallbackInfo& info, NG::DragDropInfo& dragPreviewInfo);
164     static void ParseDragPreviewValue(const JSCallbackInfo& info, NG::DragDropInfo& dragPreviewInfo);
165     static void ParseDragPreviewBuilderNode(const JSCallbackInfo& info, NG::DragDropInfo& dragPreviewInfo,
166         const JSRef<JSVal>& builder);
167     static void ParseDragInteractionOptions(const JSCallbackInfo& info, NG::DragPreviewOption& previewOption);
168     static NG::DragPreviewOption ParseDragPreviewOptions(const JSCallbackInfo& info);
169     static NG::TransitionOptions ParseJsTransition(const JSRef<JSObject>& jsObj);
170     static RefPtr<NG::ChainedTransitionEffect> ParseJsTransitionEffect(const JSCallbackInfo& info);
171     static void JsWidth(const JSCallbackInfo& info);
172     static void JsHeight(const JSCallbackInfo& info);
173     static void JsToolbar(const JSCallbackInfo& info);
174     static void JsBackgroundColor(const JSCallbackInfo& info);
175     static void JsBackgroundImage(const JSCallbackInfo& info);
176     static void JsBackgroundImageSize(const JSCallbackInfo& info);
177     static void JsBackgroundImagePosition(const JSCallbackInfo& info);
178     static void ParseBlurOption(const JSRef<JSObject>& jsBlurOption, BlurOption& blurOption);
179     static void ParseBackgroundImageOption(const JSCallbackInfo& jsOption, int32_t& repeatIndex, bool& syncMode);
180     static void ParseInactiveColor(const JSRef<JSObject>& jsOption, BlurStyleOption& styleOption);
181     static void ParseBlurStyleOption(const JSRef<JSObject>& jsOption, BlurStyleOption& styleOption);
182     static void ParseSysOptions(const JSRef<JSObject>& jsSysOptions, SysOptions& sysOptions);
183     static void JsBackgroundBlurStyle(const JSCallbackInfo& info);
184     static void JsBackgroundEffect(const JSCallbackInfo& info);
185     static void GetEffectOptionColor(const JSRef<JSObject>& jsOption, EffectOption& effectOption);
186     static void GetEffectOptionInactiveColorUpdate(const RefPtr<ResourceObject>& inactiveColorObj,
187         EffectOption& effectOption);
188     static void GetEffectOptionInactiveColor(const JSRef<JSObject>& jsOption, EffectOption& effectOption);
189     static void ParseEffectOption(const JSRef<JSObject>& jsObj, EffectOption& effectOption);
190     static void ParseBrightnessOption(const JSRef<JSObject>& jsObj, BrightnessOption& brightnessOption);
191     static void JsForegroundBlurStyle(const JSCallbackInfo& info);
192     static void JsForegroundEffect(const JSCallbackInfo& info);
193     static void JsSphericalEffect(const JSCallbackInfo& info);
194     static void GetPixelStretchEffectLeftObj(
195         const JSRef<JSObject>& jsObject, CalcDimension& left, PixStretchEffectOption& option);
196     static void GetPixelStretchEffectRightObj(
197         const JSRef<JSObject>& jsObject, CalcDimension& right, PixStretchEffectOption& option);
198     static void GetPixelStretchEffectTopObj(
199         const JSRef<JSObject>& jsObject, CalcDimension& top, PixStretchEffectOption& option);
200     static void GetPixelStretchEffectBottomObj(
201         const JSRef<JSObject>& jsObject, CalcDimension& bottom, PixStretchEffectOption& option);
202     static void JsPixelStretchEffect(const JSCallbackInfo& info);
203     static bool InitPixStretchEffect(
204         CalcDimension& left, CalcDimension& right, CalcDimension& top, CalcDimension bottom);
205     static void JsLightUpEffect(const JSCallbackInfo& info);
206     static void JsBackground(const JSCallbackInfo& info);
207     static void JsBindMenu(const JSCallbackInfo& info);
208     static void JsBindContextMenu(const JSCallbackInfo& info);
209     static void MenuDefaultParam(NG::MenuParam& menuParam);
210     static void ParseContentMenuCommonParam(
211         const JSCallbackInfo& info, const JSRef<JSObject>& menuObj, NG::MenuParam& menuParam);
212     static int32_t OpenMenu(NG::MenuParam& menuParam, const RefPtr<NG::UINode>& customNode, const int32_t& targetId);
213     static int32_t UpdateMenu(const NG::MenuParam& menuParam, const RefPtr<NG::UINode>& customNode);
214     static int32_t CloseMenu(const RefPtr<NG::UINode>& customNode);
215     static void JsBindContentCover(const JSCallbackInfo& info);
216     static void ParseModalStyle(const JSRef<JSObject>& paramObj, NG::ModalStyle& modalStyle);
217     static void ParseModalTransition(const JSRef<JSVal>& jsValue,
218         std::optional<NG::ModalTransition>& modalTransition,
219         NG::ModalTransition defaultTransition = NG::ModalTransition::DEFAULT);
220     static void ParseEnableSafeArea(const JSRef<JSObject>& paramObj, NG::ContentCoverParam& contentCoverParam);
221     static void JsBindSheet(const JSCallbackInfo& info);
222     static bool CheckJSCallbackInfo(
223         const std::string& callerName, const JSRef<JSVal>& tmpInfo, std::vector<JSCallbackInfoType>& infoTypes);
224     static RefPtr<NG::ChainedTransitionEffect> ParseChainedTransition(
225         const JSRef<JSObject>& object, const JSExecutionContext& context, const RefPtr<NG::FrameNode> node = nullptr);
226     static bool ParseSheetIsShow(
227         const JSCallbackInfo& info, const std::string& name, std::function<void(const std::string&)>& callback);
228     static void ParseSheetStyle(
229         const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle, bool isPartialUpdate = false);
230     static NG::SheetEffectEdge ParseSheetEffectEdge(const JSRef<JSObject>& paramObj);
231     static void ParseBindSheetBorderRadius(const JSRef<JSVal>& args, NG::SheetStyle& sheetStyle);
232     static void ParseBindSheetBorderRadius(const JSRef<JSVal>& args,
233         NG::SheetStyle& sheetStyle, RefPtr<ResourceObject>& resourceObj);
234     static bool ParseBindSheetBorderRadiusProps(const JSRef<JSVal>& args, NG::BorderRadiusProperty& radius);
235     static std::optional<CalcDimension> ParseBindSheetBorderRadiusProp(const JSRef<JSObject>& object,
236         const char* prop, RefPtr<ResourceObject>& resourceObj);
237     static bool ParseSheetMode(const std::string heightStr, NG::SheetHeight& detent);
238     static bool ParseSheetDetents(const JSRef<JSVal>& args,
239         std::vector<NG::SheetHeight>& sheetDetents, NG::SheetStyle& sheetStyle);
240     static bool ParseSheetHeight(const JSRef<JSVal>& args, NG::SheetHeight& detent, bool isReset);
241     static bool ParseSheetHeight(const JSRef<JSVal>& args,
242         NG::SheetHeight& detent, bool isReset, RefPtr<ResourceObject>& resObj);
243     static bool ParseSheetBackgroundBlurStyle(const JSRef<JSVal>& args, BlurStyleOption& blurStyleOptions);
244     static bool ParseSheetLevel(const JSRef<JSVal>& args, NG::SheetLevel& sheetLevel);
245     static void ParseCallback(const JSRef<JSObject>& paramObj,
246         std::function<void(const float)>& callbackDidChange, const char* prop);
247     static void ParseLifeCycleCallback(const JSRef<JSObject>& paramObj, std::function<void()>& lifeCycleCallBack,
248         const char* prop);
249     static void ParseSpringBackCallback(const JSRef<JSObject>& paramObj,
250         std::function<void()>& sheetSpringBack, const char* prop);
251     static void ParseSheetCallback(const JSRef<JSObject>& paramObj, std::function<void()>& onAppear,
252         std::function<void()>& onDisappear, std::function<void()>& shouldDismiss,
253         std::function<void(const int32_t info)>& onWillDismiss, std::function<void()>& onWillAppear,
254         std::function<void()>& onWillDisappear, std::function<void(const float)>& onHeightDidChange,
255         std::function<void(const float)>& onDetentsDidChange, std::function<void(const float)>& onWidthDidChange,
256         std::function<void(const float)>& onTypeDidChange, std::function<void()>& sheetSpringBack);
257     static void ParseSheetTitle(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle,
258         std::function<void()>& titleBuilderFunction);
259     static panda::Local<panda::JSValueRef> JsDismissSheet(panda::JsiRuntimeCallInfo* runtimeCallInfo);
260     static panda::Local<panda::JSValueRef> JsDismissContentCover(panda::JsiRuntimeCallInfo* runtimeCallInfo);
261     static panda::Local<panda::JSValueRef> JsSheetSpringBack(panda::JsiRuntimeCallInfo* runtimeCallInfo);
262     static void ParseModalTransitonEffect(
263         const JSRef<JSObject>& paramObj, NG::ContentCoverParam& contentCoverParam, const JSExecutionContext& context);
264     static void ParseOverlayCallback(const JSRef<JSObject>& paramObj, std::function<void()>& onAppear,
265         std::function<void()>& onDisappear, std::function<void()>& onWillAppear, std::function<void()>& onWillDisappear,
266         std::function<void(const int32_t& info)>& onWillDismiss);
267     static void JsBorderColor(const JSCallbackInfo& info);
268     static void ParseBorderColor(const JSRef<JSVal>& args);
269     static void JsPadding(const JSCallbackInfo& info);
270     static void JsMargin(const JSCallbackInfo& info);
271     static void SetSafeAreaPadding(const JSCallbackInfo& info);
272     static void ParseMarginOrPadding(const JSCallbackInfo& info, EdgeType type);
273     static void ParseMarginOrPaddingCorner(JSRef<JSObject> obj, std::optional<CalcDimension>& top,
274         std::optional<CalcDimension>& bottom, std::optional<CalcDimension>& left, std::optional<CalcDimension>& right);
275     static void ParseMarginOrPaddingCorner(JSRef<JSObject> obj, CommonCalcDimension& commonCalcDimension);
276     static void ParseLocalizedMarginOrLocalizedPaddingCorner(
277         const JSRef<JSObject>& object, LocalizedCalcDimension& localizedCalcDimension);
278     static bool ParseCommonMarginOrPaddingCorner(
279         const JSRef<JSObject>& object, CommonCalcDimension& commonCalcDimension);
280     static void GetBorderRadiusByLengthMetrics(const char* key, JSRef<JSObject>& object, CalcDimension& radius);
281     static void JsOutline(const JSCallbackInfo& info);
282     static void JsOutlineWidth(const JSCallbackInfo& info);
283     static void JsOutlineColor(const JSCallbackInfo& info);
284     static void JsOutlineStyle(const JSCallbackInfo& info);
285     static void JsOutlineRadius(const JSCallbackInfo& info);
286     static void JsBorder(const JSCallbackInfo& info);
287     static void JsBorderWidth(const JSCallbackInfo& info);
288     static void ParseBorderWidth(const JSRef<JSVal>& args);
289     static void JsBorderRadius(const JSCallbackInfo& info);
290     static void ParseBorderRadius(const JSRef<JSVal>& args);
291     static void JsBorderStyle(const JSCallbackInfo& info);
292     static void ParseBorderStyle(const JSRef<JSVal>& args);
293     static void ParseDashGap(const JSRef<JSVal>& args);
294     static void ParseDashWidth(const JSRef<JSVal>& args);
295     static void JsBorderImage(const JSCallbackInfo& info);
296     static void ParseBorderImageRepeat(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
297     static void ParseBorderImageOutset(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
298     static void ParseBorderImageSlice(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
299     static void ParseBorderImageWidth(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
300     static bool ParseBorderImageDimension(
301         const JSRef<JSVal>& args, BorderImage::BorderImageOption& borderImageDimension);
302     static void ParseBorderImageLengthMetrics(
303         const JSRef<JSObject>& object, LocalizedCalcDimension& localizedCalcDimension);
304     static void UpdateGradientWithDirection(NG::Gradient& lineGradient, NG::GradientDirection direction);
305     static void ParseBorderImageLinearGradient(const JSRef<JSVal>& args, uint8_t& bitset);
306     static void JsUseEffect(const JSCallbackInfo& info);
307     static void JsUseShadowBatching(const JSCallbackInfo& info);
308     static void JsBlur(const JSCallbackInfo& info);
309     static void JsColorBlend(const JSCallbackInfo& info);
310     static void JsBackdropBlur(const JSCallbackInfo& info);
311     static void JsLinearGradientBlur(const JSCallbackInfo& info);
312     static void JsBackgroundBrightness(const JSCallbackInfo& info);
313     static void JsBackgroundBrightnessInternal(const JSCallbackInfo& info);
314     static void JsForegroundBrightness(const JSCallbackInfo& info);
315     static void JsWindowBlur(const JSCallbackInfo& info);
316     static void JsFlexBasis(const JSCallbackInfo& info);
317     static void JsFlexGrow(const JSCallbackInfo& info);
318     static void JsFlexShrink(const JSCallbackInfo& info);
319     static void JsAlignSelf(const JSCallbackInfo& info);
320     static void JsDisplayPriority(const JSCallbackInfo& info);
321     static void JsSharedTransition(const JSCallbackInfo& info);
322     static void JsGeometryTransition(const JSCallbackInfo& info);
323     static void JsGridSpan(const JSCallbackInfo& Info);
324     static void JsGridOffset(const JSCallbackInfo& info);
325     static void JsUseSizeType(const JSCallbackInfo& Info);
326     static void JsHoverEffect(const JSCallbackInfo& info);
327     static void JsOnMouse(const JSCallbackInfo& info);
328     static void JsOnAxisEvent(const JSCallbackInfo& info);
329     static void JsOnHover(const JSCallbackInfo& info);
330     static void JsOnHoverMove(const JSCallbackInfo& info);
331     static void JsOnAccessibilityHover(const JSCallbackInfo& info);
332     static void JsOnClick(const JSCallbackInfo& info);
333     static void JsOnGestureJudgeBegin(const JSCallbackInfo& args);
334     static void JsOnTouchIntercept(const JSCallbackInfo& info);
335     static void JsShouldBuiltInRecognizerParallelWith(const JSCallbackInfo& info);
336     static void JsOnGestureRecognizerJudgeBegin(const JSCallbackInfo& info);
337     static void JsOnTouchTestDone(const JSCallbackInfo& info);
338     static void JsClickEffect(const JSCallbackInfo& info);
339     static void JsRestoreId(int32_t restoreId);
340     static void JsOnVisibleAreaChange(const JSCallbackInfo& info);
341     static void JsOnVisibleAreaApproximateChange(const JSCallbackInfo& info);
342     static void JsHitTestBehavior(const JSCallbackInfo& info);
343     static void JsOnChildTouchTest(const JSCallbackInfo& info);
344     static void JsForegroundColor(const JSCallbackInfo& info);
345     static void JsSetFreeze(const JSCallbackInfo& info);
346     static void ParseSheetSubWindowValue(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle);
347 
348     // outer border
349     static void ParseOuterBorderColor(const JSRef<JSVal>& args);
350     static void ParseOuterBorderWidth(const JSRef<JSVal>& args);
351     static void ParseOuterBorderWidthNew(const JSRef<JSVal>& args);
352     static void ParseOuterBorderRadius(const JSRef<JSVal>& args);
353     static void ParseOuterBorderStyle(const JSRef<JSVal>& args);
354     static void ParseEdgeOutlineWidthLeft(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth);
355     static void ParseEdgeOutlineWidthRight(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth);
356     static void ParseEdgeOutlineWidthTop(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth);
357     static void ParseEdgeOutlineWidthBottom(const JSRef<JSObject>& object, NG::BorderWidthProperty& borderWidth);
358 
359     // response region
360     static void JsResponseRegion(const JSCallbackInfo& info);
361     static bool ParseJsResponseRegionArray(const JSRef<JSVal>& jsValue, std::vector<DimensionRect>& result);
362     static bool ParseJsDimensionRect(const JSRef<JSVal>& jsValue, DimensionRect& result);
363 
364     // for dynamic $r
365     static void CompleteResourceObject(JSRef<JSObject>& jsObj);
366     static void CompleteResourceObjectWithBundleName(
367         JSRef<JSObject>& jsObj, std::string& bundleName, std::string& moduleName, int32_t& resId);
368     static bool ConvertResourceType(const std::string& typeName, ResourceType& resType);
369     static bool ParseDollarResource(const JSRef<JSVal>& jsValue, std::string& targetModule, ResourceType& resType,
370         std::string& resName, bool isParseType);
371 
372     // mouse response response region
373     static void JsMouseResponseRegion(const JSCallbackInfo& info);
374 
375     static bool ParseJsLengthNG(
376         const JSRef<JSVal>& jsValue, NG::CalcLength& result, DimensionUnit defaultUnit, bool isSupportPercent = true);
377     static bool ParseJsLengthNG(const JSRef<JSVal>& jsValue, NG::CalcLength& result, DimensionUnit defaultUnit,
378         RefPtr<ResourceObject>& rsourceObj, bool isSupportPercent = true);
379     static bool ParseJsLengthVpNG(const JSRef<JSVal>& jsValue, NG::CalcLength& result, bool isSupportPercent = true);
380     static bool ParseJsLengthVpNG(const JSRef<JSVal>& jsValue, NG::CalcLength& result,
381         RefPtr<ResourceObject>& resObj, bool isSupportPercent = true);
382 
383     // for number and string with no unit, use default dimension unit.
384     static bool ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit);
385     static bool ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit,
386         RefPtr<ResourceObject>& resObj);
387     static bool ParseJsDimensionVp(const JSRef<JSVal>& jsValue, CalcDimension& result);
388     static bool ParseJsDimensionVp(const JSRef<JSVal>& jsValue, CalcDimension& result,
389         RefPtr<ResourceObject>& resObj);
390     static bool ParseJsDimensionFp(const JSRef<JSVal>& jsValue, CalcDimension& result);
391     static bool ParseJsDimensionFp(const JSRef<JSVal>& jsValue, CalcDimension& result,
392         RefPtr<ResourceObject>& resObj);
393     static bool ParseJsDimensionPx(const JSRef<JSVal>& jsValue, CalcDimension& result);
394     static bool ParseJsDimensionPx(const JSRef<JSVal>& jsValue, CalcDimension& result,
395         RefPtr<ResourceObject>& resObj);
396     static bool ParseLengthMetricsToDimension(const JSRef<JSVal>& jsValue, CalcDimension& result);
397     static bool ParseLengthMetricsToDimension(
398         const JSRef<JSVal>& jsValue, CalcDimension& result, RefPtr<ResourceObject>& resObj);
399     static bool ParseLengthMetricsToPositiveDimension(const JSRef<JSVal>& jsValue, CalcDimension& result);
400     static bool ParseLengthMetricsToPositiveDimension(
401         const JSRef<JSVal>& jsValue, CalcDimension& result, RefPtr<ResourceObject>& resObj);
402     static bool ParseColorMetricsToColor(const JSRef<JSVal>& jsValue, Color& result);
403     static bool ParseColorMetricsToColor(const JSRef<JSVal>& jsValue, Color& result, RefPtr<ResourceObject>& resObj);
404     static bool ParseJsDouble(const JSRef<JSVal>& jsValue, double& result);
405     static bool ParseJsDouble(const JSRef<JSVal>& jsValue, double& result, RefPtr<ResourceObject>& resObj);
406     static bool ParseJsInt32(const JSRef<JSVal>& jsValue, int32_t& result);
407     static bool ParseJsColorFromResource(const JSRef<JSVal>& jsValue, Color& result, RefPtr<ResourceObject>& resObj);
408     static bool ParseJsObjColorFromResource(const JSRef<JSObject> &jsObj, Color& result,
409         RefPtr<ResourceObject>& resObj);
410     static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result);
411     static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result,
412         RefPtr<ResourceObject>& resObj);
413     static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result, const Color& defaultColor);
414     static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result,
415         const Color& defaultColor, RefPtr<ResourceObject>& resObj);
416     static bool ParseJsColorStrategy(const JSRef<JSVal>& jsValue, ForegroundColorStrategy& strategy);
417     static bool ParseJsShadowColorStrategy(const JSRef<JSVal>& jsValue, ShadowColorStrategy& strategy);
418     static bool ParseJsFontFamilies(const JSRef<JSVal>& jsValue, std::vector<std::string>& result);
419     static bool ParseJsFontFamilies(const JSRef<JSVal>& jsValue, std::vector<std::string>& result,
420         RefPtr<ResourceObject>& resObj);
421 
422     static bool ParseJsDimensionNG(
423         const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit, bool isSupportPercent = true);
424     static bool ParseJsDimensionNG(const JSRef<JSVal>& jsValue, CalcDimension& result,
425         DimensionUnit defaultUnit, RefPtr<ResourceObject>& resObj, bool isSupportPercent = true);
426     static bool ParseJsDimensionVpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true);
427     static bool ParseJsDimensionVpNG(const JSRef<JSVal>& jsValue, CalcDimension& result,
428         RefPtr<ResourceObject>& resObj, bool isSupportPercent = true);
429     static bool ParseJsDimensionFpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true);
430     static bool ParseJsDimensionFpNG(const JSRef<JSVal>& jsValue, CalcDimension& result,
431         RefPtr<ResourceObject>& resObj, bool isSupportPercent = true);
432     static bool ParseJsLengthMetricsVp(const JSRef<JSObject>& jsObj, CalcDimension& result);
433     static bool ParseJsLengthMetricsVpWithResObj(const JSRef<JSObject>& jsObj, CalcDimension& result,
434         RefPtr<ResourceObject>& rsourceObj);
435     static bool ParseJsonDimension(const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result,
436         DimensionUnit defaultUnit, bool checkIllegal = false);
437     static bool ParseJsonDimensionVp(
438         const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result, bool checkIllegal = false);
439     static bool ParseJsonDouble(const std::unique_ptr<JsonValue>& jsonValue, double& result);
440     static bool ParseJsonColor(const std::unique_ptr<JsonValue>& jsonValue, Color& result);
441     static bool ParseJsString(const JSRef<JSVal>& jsValue, std::string& result);
442     static bool ParseJsString(const JSRef<JSVal>& jsValue, std::string& result,
443         RefPtr<ResourceObject>& resObj);
444     static bool ParseJsString(const JSRef<JSVal>& jsValue, std::u16string& result);
445     static bool ParseJsString(const JSRef<JSVal>& jsValue, std::u16string& result,
446         RefPtr<ResourceObject>& resObj);
447     static bool ParseJsMedia(const JSRef<JSVal>& jsValue, std::string& result);
448     static bool ParseJsMedia(const JSRef<JSVal>& jsValue, std::string& result,
449         RefPtr<ResourceObject>& resObj);
450     static bool ParseJsMediaWithBundleName(const JSRef<JSVal>& jsValue, std::string& result, std::string& bundleName,
451         std::string& moduleName, int32_t& resId);
452     static bool ParseJsMediaWithBundleName(const JSRef<JSVal>& jsValue, std::string& result,
453         std::string& bundleName, std::string& moduleName, int32_t& resId, RefPtr<ResourceObject>& resObj);
454     static bool ParseResourceToDouble(const JSRef<JSVal>& jsValue, double& result,
455         RefPtr<ResourceObject>& resObj);
456     static bool ParseJsBool(const JSRef<JSVal>& jsValue, bool& result);
457     static bool ParseJsBool(const JSRef<JSVal>& jsValue, bool& result,
458         RefPtr<ResourceObject>& resObj);
459     static bool ParseJsInteger(const JSRef<JSVal>& jsValue, uint32_t& result);
460     static bool ParseJsInteger(const JSRef<JSVal>& jsValue, int32_t& result);
461     static bool ParseJsIntegerArray(const JSRef<JSVal>& jsValue, std::vector<uint32_t>& result);
462     static bool ParseJsIntegerArray(const JSRef<JSVal>& jsValue, std::vector<uint32_t>& result,
463         RefPtr<ResourceObject>& resObj, std::vector<RefPtr<ResourceObject>>& resObjArray);
464     static bool ParseJsStrArray(const JSRef<JSVal>& jsValue, std::vector<std::string>& result);
465     static bool ParseJsStrArray(const JSRef<JSVal>& jsValue, std::vector<std::string>& result,
466         RefPtr<ResourceObject>& resObj, std::vector<RefPtr<ResourceObject>>& resObjArray);
467     static bool ParseJsLengthMetricsArray(const JSRef<JSVal>& jsValue, std::vector<Dimension>& result);
468     static bool ParseJsLengthMetricsArray(const JSRef<JSVal>& jsValue, std::vector<Dimension>& result,
469         std::vector<RefPtr<ResourceObject>>& resObjArray);
470     static bool IsGetResourceByName(const JSRef<JSObject>& jsObj);
471     static bool GetJsMediaBundleInfo(const JSRef<JSVal>& jsValue, std::string& bundleName, std::string& moduleName);
472     static void ParseShadowPropsUpdate(const JSRef<JSObject>& jsObj, double& radius, Shadow& shadow);
473     static bool ParseShadowProps(const JSRef<JSVal>& jsValue, Shadow& shadow, const bool configChangePerform = false);
474     static void ParseShadowOffsetXY(const JSRef<JSObject>& jsObj, Shadow& shadow);
475     static bool GetShadowFromTheme(ShadowStyle shadowStyle, Shadow& shadow, const bool configChangePerform = false);
476     static bool ParseJsResource(const JSRef<JSVal>& jsValue, CalcDimension& result);
477     static bool ParseJsResource(const JSRef<JSVal>& jsValue, CalcDimension& result,
478         RefPtr<ResourceObject>& resObj);
479     static bool ParseDataDetectorConfig(const JSCallbackInfo& info, TextDetectConfig& textDetectConfig);
480     static bool ParseAIEntityColor(const JSRef<JSObject>& obj, TextDetectConfig& textDetectConfig);
481     static bool ParseInvertProps(const JSRef<JSVal>& jsValue, InvertVariant& invert);
482     static std::pair<CalcDimension, CalcDimension> ParseSize(const JSCallbackInfo& info);
483     static void JsUseAlign(const JSCallbackInfo& info);
484     static void JsZIndex(const JSCallbackInfo& info);
485     static void SetDirection(const std::string& dir);
486     static void JsSize(const JSCallbackInfo& info);
487     static void JsConstraintSize(const JSCallbackInfo& info);
488     static void JsLayoutPriority(const JSCallbackInfo& info);
489     static void JsLayoutWeight(const JSCallbackInfo& info);
490 
491     static void JsAlign(const JSCallbackInfo& info);
492     static void JsLayoutGravity(const JSCallbackInfo& info);
493     static void JsPosition(const JSCallbackInfo& info);
494     static void JsMarkAnchor(const JSCallbackInfo& info);
495     static void JsOffset(const JSCallbackInfo& info);
496     static void JsEnabled(const JSCallbackInfo& info);
497     static void JsAspectRatio(const JSCallbackInfo& info);
498     static void JsOverlay(const JSCallbackInfo& info);
499     static Alignment ParseAlignment(int32_t align);
500     static LayoutCalPolicy ParseLayoutPolicy(const std::string& layoutPolicy);
501     static Alignment ParseLocalizedAlignment(std::string localizedAlignment);
502     static void JsAlignRules(const JSCallbackInfo& info);
503     static void JsChainMode(const JSCallbackInfo& info);
504 
505     static void SetVisibility(const JSCallbackInfo& info);
506     static void Pop();
507 
508     static void JsSetDraggable(bool draggable);
509     static void JsSetDragPreviewOptions(const JSCallbackInfo& info);
510     static void JsOnDragStart(const JSCallbackInfo& info);
511     static bool ParseAndUpdateDragItemInfo(const JSRef<JSVal>& info, NG::DragDropBaseInfo& dragInfo);
512     static RefPtr<AceType> ParseDragNode(const JSRef<JSVal>& info);
513     static void JsOnDragEnter(const JSCallbackInfo& info);
514     static void JsOnDragSpringLoading(const JSCallbackInfo& info);
515     static void JsOnDragEnd(const JSCallbackInfo& info);
516     static void JsOnDragMove(const JSCallbackInfo& info);
517     static void JsOnDragLeave(const JSCallbackInfo& info);
518     static void JsOnPreDrag(const JSCallbackInfo& info);
519     static void JsOnDrop(const JSCallbackInfo& info);
520     static void JsOnAreaChange(const JSCallbackInfo& info);
521     static void JsOnSizeChange(const JSCallbackInfo& info);
522 
523     static void JsLinearGradient(const JSCallbackInfo& info);
524     static void JsRadialGradient(const JSCallbackInfo& info);
525     static void JsSweepGradient(const JSCallbackInfo& info);
526     static void NewJsLinearGradient(const JSCallbackInfo& info, NG::Gradient& gradient);
527     static void NewLinearGradient(const JSRef<JSObject>& jsObj, NG::Gradient& gradient);
528     static void SetGradientDirection(NG::Gradient& newGradient, const GradientDirection& direction);
529     static void NewJsRadialGradient(const JSCallbackInfo& info, NG::Gradient& gradient);
530     static void NewJsSweepGradient(const JSCallbackInfo& info, NG::Gradient& gradient);
531     static void NewRadialGradient(const JSRef<JSObject>& jsObj, NG::Gradient& gradient);
532     static void ParseSweepGradientPartly(const JSRef<JSObject>& obj, NG::Gradient& newGradient);
533     static void JsMotionPath(const JSCallbackInfo& info);
534     static void JsMotionBlur(const JSCallbackInfo& info);
535     static void JsShadow(const JSCallbackInfo& info);
536     static void JsBlendMode(const JSCallbackInfo& info);
537     static void JsAdvancedBlendMode(const JSCallbackInfo& info);
538     static void JsGrayScale(const JSCallbackInfo& info);
539     static void JsBrightness(const JSCallbackInfo& info);
540     static void JsContrast(const JSCallbackInfo& info);
541     static void JsSaturate(const JSCallbackInfo& info);
542     static void JsSepia(const JSCallbackInfo& info);
543     static void JsInvert(const JSCallbackInfo& info);
544     static void JsSystemBarEffect(const JSCallbackInfo& info);
545     static void JsHueRotate(const JSCallbackInfo& info);
546 
547     static void JsClip(const JSCallbackInfo& info);
548     static void JsClipShape(const JSCallbackInfo& info);
549 
550     static void ParseProgressMaskResObj(const JSRef<JSVal>& jColor, Color& colorVal,
551         RefPtr<NG::ProgressMaskProperty>& progressMask);
552     static void ParseJsMaskProperty(const JSRef<JSObject>& paramObject);
553     static void JsMask(const JSCallbackInfo& info);
554     static void JsMaskShape(const JSCallbackInfo& info);
555 
556     static void JsKey(const std::string& key);
557     static void JsId(const JSCallbackInfo& info);
558 
559     static void JsFocusable(const JSCallbackInfo& info);
560     static void JsTabStop(const JSCallbackInfo& info);
561     static void JsNextFocus(const JSCallbackInfo& info);
562     static void JsFocusBox(const JSCallbackInfo& info);
563     static void JsOnFocusMove(const JSCallbackInfo& args);
564     static void JsOnKeyEvent(const JSCallbackInfo& args);
565     static void JsDispatchKeyEvent(const JSCallbackInfo& args);
566     static void JsOnFocus(const JSCallbackInfo& args);
567     static void JsOnBlur(const JSCallbackInfo& args);
568     static void JsTabIndex(const JSCallbackInfo& info);
569     static void JsFocusOnTouch(const JSCallbackInfo& info);
570     static void JsDefaultFocus(const JSCallbackInfo& info);
571     static void JsGroupDefaultFocus(const JSCallbackInfo& info);
572     static void JsDebugLine(const JSCallbackInfo& info);
573     static void JsOpacityPassThrough(const JSCallbackInfo& info);
574     static void JsTransitionPassThrough(const JSCallbackInfo& info);
575     static void JsKeyboardShortcut(const JSCallbackInfo& info);
576     static void JsOnFocusAxisEvent(const JSCallbackInfo& args);
577     static void JsOnCrownEvent(const JSCallbackInfo& args);
578 
579     static void JsObscured(const JSCallbackInfo& info);
580     static void JsPrivacySensitive(const JSCallbackInfo& info);
581 
582     static void JsAccessibilityGroup(const JSCallbackInfo& info);
583     static void JsAccessibilityText(const JSCallbackInfo& info);
584     static void JsAccessibilityTextHint(const std::string& text);
585     static void JsAccessibilityNextFocusId(const JSCallbackInfo& info);
586     static void JsAccessibilityDescription(const JSCallbackInfo& info);
587     static void JsAccessibilityImportance(const std::string& importance);
588     static void JsAccessibilityLevel(const std::string& level);
589     static void JsAccessibilitySelected(const JSCallbackInfo& info);
590     static void JsAccessibilityChecked(const JSCallbackInfo& info);
591     static void JsAccessibilityRole(const JSCallbackInfo& info);
592     static void JsOnAccessibilityFocus(const JSCallbackInfo& info);
593     static void JsOnAccessibilityActionIntercept(const JSCallbackInfo& info);
594     static void JsOnAccessibilityHoverTransparent(const JSCallbackInfo& info);
595     static void JsAccessibilityDefaultFocus(const JSCallbackInfo& info);
596     static void JsAccessibilityUseSamePage(const JSCallbackInfo& info);
597     static void JsAccessibilityScrollTriggerable(const JSCallbackInfo& info);
598     static void JsAccessibilityFocusDrawLevel(const JSCallbackInfo& info);
599     static void JsAllowDrop(const JSCallbackInfo& info);
600     static void JsDrawModifier(const JSCallbackInfo& info);
601     static void JsDragPreview(const JSCallbackInfo& info);
602     static void JsAccessibilityVirtualNode(const JSCallbackInfo& info);
603 
604     static void ParseAccessibilityDescriptionJson(const std::string& description,
605         std::pair<bool, std::string>& autoEventPair, std::pair<bool, std::string>& descriptionPair);
606 
607     static void JSCreateAnimatableProperty(const JSCallbackInfo& info);
608     static void JSUpdateAnimatableProperty(const JSCallbackInfo& info);
609     static void JSRenderGroup(const JSCallbackInfo& info);
610     static void JSRenderFit(const JSCallbackInfo& info);
611     static void JsExpandSafeArea(const JSCallbackInfo& info);
612     static void JsIgnoreLayoutSafeArea(const JSCallbackInfo& info);
613     static void JsGestureModifier(const JSCallbackInfo& info);
614     static void JsCustomProperty(const JSCallbackInfo& info);
615 
616     static void JsBackgroundImageResizable(const JSCallbackInfo& info);
617     static void JsSetDragEventStrictReportingEnabled(const JSCallbackInfo& info);
618     static void JsEnableDropDisallowedBadge(const JSCallbackInfo& info);
619     static void JsCancelDataLoading(const std::string& key);
620     static void SetSymbolOptionApply(const JSCallbackInfo& info,
621         std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, const JSRef<JSVal> modifierObj);
622     static void SetTextStyleApply(const JSCallbackInfo& info,
623         std::function<void(WeakPtr<NG::FrameNode>)>& textStyleApply, const JSRef<JSVal>& modifierObj);
624 
625 #ifndef WEARABLE_PRODUCT
626     static void JsBindPopup(const JSCallbackInfo& info);
627     static void JsBindTips(const JSCallbackInfo& info);
628     static void SetPopupDismiss(
629         const JSCallbackInfo& info, const JSRef<JSObject>& popupObj, const RefPtr<PopupParam>& popupParam);
630     static PopupOnWillDismiss ParsePopupCallback(const JSCallbackInfo& info, const JSRef<JSObject>& paramObj);
631     static panda::Local<panda::JSValueRef> JsDismissPopup(panda::JsiRuntimeCallInfo* runtimeCallInfo);
632     static void ParseContentPopupCommonParam(
633         const JSCallbackInfo& info, const JSRef<JSObject>& popupObj, const RefPtr<PopupParam>& popupParam);
634     static int32_t OpenPopup(const RefPtr<PopupParam>& param, const RefPtr<NG::UINode>& customNode);
635     static int32_t UpdatePopup(const RefPtr<PopupParam>& param, const RefPtr<NG::UINode>& customNode);
636     static int32_t ClosePopup(const RefPtr<NG::UINode>& customNode);
637     static int32_t GetPopupParam(RefPtr<PopupParam>& param, const RefPtr<NG::UINode>& customNode);
638 #endif
639 
640     /**
641      * Binds the native methods to the the js object
642      */
643     static void JSBind(BindingTarget globalObj);
644     static void JsNotifyDragStartRequest(const JSCallbackInfo& info);
645     static void ParseDialogCallback(const JSRef<JSObject>& paramObj,
646         std::function<void(const int32_t& info, const int32_t& instanceId)>& onWillDismiss);
647     static void ParseAppearDialogCallback(const JSCallbackInfo& info, DialogProperties& dialogProperties);
648     static panda::Local<panda::JSValueRef> JsDismissDialog(panda::JsiRuntimeCallInfo* runtimeCallInfo);
649 
GetPipelineContext()650     static RefPtr<PipelineBase> GetPipelineContext()
651     {
652         auto container = Container::Current();
653         CHECK_NULL_RETURN(container, nullptr);
654         return container->GetPipelineContext();
655     }
656 
657     template<typename T>
GetTheme()658     static RefPtr<T> GetTheme()
659     {
660         auto pipelineContext = GetPipelineContext();
661         CHECK_NULL_RETURN(pipelineContext, nullptr);
662         auto themeManager = pipelineContext->GetThemeManager();
663         CHECK_NULL_RETURN(themeManager, nullptr);
664         auto node = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode();
665         return node ? themeManager->GetTheme<T>(node->GetThemeScopeId()) : themeManager->GetTheme<T>();
666     }
667 
668     template<typename T>
GetTheme(int32_t themeScopeId)669     static RefPtr<T> GetTheme(int32_t themeScopeId)
670     {
671         auto pipelineContext = GetPipelineContext();
672         CHECK_NULL_RETURN(pipelineContext, nullptr);
673         auto themeManager = pipelineContext->GetThemeManager();
674         CHECK_NULL_RETURN(themeManager, nullptr);
675         return themeManager->GetTheme<T>(themeScopeId);
676     }
677 
678     /**
679      * box properties setter
680      */
681     static const Border& GetBorder();
682     static void SetMarginTop(const JSCallbackInfo& info);
683     static void SetMarginBottom(const JSCallbackInfo& info);
684     static void SetMarginLeft(const JSCallbackInfo& info);
685     static void SetMarginRight(const JSCallbackInfo& info);
686     static void SetPaddingTop(const JSCallbackInfo& info);
687     static void SetPaddingBottom(const JSCallbackInfo& info);
688     static void SetPaddingLeft(const JSCallbackInfo& info);
689     static void SetPaddingRight(const JSCallbackInfo& info);
690     static void SetBorder(const Border& border);
691     static void SetBorderStyle(int32_t style);
692     static void SetBorderColor(const Color& color, const AnimationOption& option);
693     static void SetBorderWidth(const CalcDimension& value, const AnimationOption& option);
694     static void SetColorBlend(Color color);
695     static void SetLinearGradientBlur(NG::LinearGradientBlurPara blurPara);
696     static void SetDynamicLightUp(float rate, float lightUpDegree);
697     static void SetBgDynamicBrightness(BrightnessOption brightnessOption);
698     static void SetFgDynamicBrightness(BrightnessOption brightnessOption);
699     static void SetWindowBlur(float progress, WindowBlurStyle blurStyle);
700     static RefPtr<ThemeConstants> GetThemeConstants(const JSRef<JSObject>& jsObj = JSRef<JSObject>());
701     static bool JsWidth(const JSRef<JSVal>& jsValue);
702     static bool JsHeight(const JSRef<JSVal>& jsValue);
703     static void GetBorderRadius(const char* key, JSRef<JSObject>& object, CalcDimension& radius);
704     static void GetBorderRadiusResObj(const char* key, JSRef<JSObject>& object, CalcDimension& radius,
705         RefPtr<ResourceObject>& resObj);
706     static void RegisterTextBackgroundStyleResource(TextBackgroundStyle& textBackgroundStyle,
707         RefPtr<ResourceObject>& resObjTopLeft, RefPtr<ResourceObject>& resObjTopRight,
708         RefPtr<ResourceObject>& resObjBottomLeft, RefPtr<ResourceObject>& resObjBottomRight);
709     static bool ParseAllBorderRadiuses(JSRef<JSObject>& object, CalcDimension& topLeft, CalcDimension& topRight,
710         CalcDimension& bottomLeft, CalcDimension& bottomRight);
711     static bool ParseAllBorderRadiuses(JSRef<JSObject>& object, CalcDimension& topLeft, CalcDimension& topRight,
712         CalcDimension& bottomLeft, CalcDimension& bottomRight, TextBackgroundStyle& textBackgroundStyle);
713     static void ParseAllBorderRadiuses(JSRef<JSObject>& object, NG::BorderRadiusProperty& borderRadius);
714     static void JsPointLight(const JSCallbackInfo& info);
715 
716     template<typename T>
ParseJsInteger(const JSRef<JSVal> & jsValue,T & result)717     static bool ParseJsInteger(const JSRef<JSVal>& jsValue, T& result)
718     {
719         RefPtr<ResourceObject> resObj;
720         return ParseJsInteger(jsValue, result, resObj);
721     }
722 
723     template<typename T>
ParseJsInteger(const JSRef<JSVal> & jsValue,T & result,RefPtr<ResourceObject> & resObj)724     static bool ParseJsInteger(const JSRef<JSVal>& jsValue, T& result, RefPtr<ResourceObject>& resObj)
725     {
726         if (jsValue->IsNumber()) {
727             result = jsValue->ToNumber<T>();
728             return true;
729         }
730 
731         if (!jsValue->IsObject()) {
732             return false;
733         }
734         JSRef<JSObject> jsObj = JSRef<JSObject>::Cast(jsValue);
735         CompleteResourceObject(jsObj);
736         int32_t resType = jsObj->GetPropertyValue<int32_t>("type", -1);
737         if (resType == -1) {
738             return false;
739         }
740 
741         JSRef<JSVal> resId = jsObj->GetProperty("id");
742         if (!resId->IsNumber()) {
743             return false;
744         }
745 
746         resObj = SystemProperties::ConfigChangePerform() ? GetResourceObject(jsObj) :
747             GetResourceObjectByBundleAndModule(jsObj);
748         auto resourceWrapper = CreateResourceWrapper(jsObj, resObj);
749         auto resIdNum = resId->ToNumber<int32_t>();
750         if (resIdNum == -1) {
751             if (!IsGetResourceByName(jsObj)) {
752                 return false;
753             }
754             JSRef<JSVal> args = jsObj->GetProperty("params");
755             if (!args->IsArray()) {
756                 return false;
757             }
758             JSRef<JSArray> params = JSRef<JSArray>::Cast(args);
759             auto param = params->GetValueAt(0);
760             if (resType == static_cast<int32_t>(ResourceType::INTEGER)) {
761                 result = static_cast<T>(resourceWrapper->GetIntByName(param->ToString()));
762                 return true;
763             }
764             return false;
765         }
766         if (resType == static_cast<int32_t>(ResourceType::INTEGER)) {
767             result = static_cast<T>(resourceWrapper->GetInt(resId->ToNumber<uint32_t>()));
768             return true;
769         }
770         return false;
771     }
772 
GetFunctionKeyName(FunctionKey functionkey)773     static std::string GetFunctionKeyName(FunctionKey functionkey)
774     {
775         std::map<FunctionKey, std::string> keyNameMap {
776             {FunctionKey::ESC, "ESC"},
777             {FunctionKey::F1, "F1"},
778             {FunctionKey::F2, "F2"},
779             {FunctionKey::F3, "F3"},
780             {FunctionKey::F4, "F4"},
781             {FunctionKey::F5, "F5"},
782             {FunctionKey::F6, "F6"},
783             {FunctionKey::F7, "F7"},
784             {FunctionKey::F8, "F8"},
785             {FunctionKey::F9, "F9"},
786             {FunctionKey::F10, "F10"},
787             {FunctionKey::F11, "F11"},
788             {FunctionKey::F12, "F12"},
789             {FunctionKey::TAB, "TAB"},
790             {FunctionKey::DPAD_UP, "DPAD_UP"},
791             {FunctionKey::DPAD_DOWN, "DPAD_DOWN"},
792             {FunctionKey::DPAD_LEFT, "DPAD_LEFT"},
793             {FunctionKey::DPAD_RIGHT, "DPAD_RIGHT"}
794         };
795         auto result = keyNameMap.find(functionkey);
796         return (result != keyNameMap.end()) ? result->second : std::string();
797     }
798 
799     static bool CheckColor(const JSRef<JSVal>& jsValue, Color& result, const char* componentName, const char* propName);
800     static bool CheckColor(
801         const JSRef<JSVal>& jsValue, Color& result, const char* componentName, const char* propName,
802         RefPtr<ResourceObject>& resourceObject);
803     static bool CheckLength(
804         const JSRef<JSVal>& jsValue, CalcDimension& result, const char* componentName, const char* propName);
805     static bool CheckLength(
806         const JSRef<JSVal>& jsValue, CalcDimension& result, const char* componentName, const char* propName,
807         RefPtr<ResourceObject>& resourceObject);
808     static bool CheckResource(RefPtr<ResourceObject> resourceObject,
809         RefPtr<ResourceWrapper> resourceWrapper);
810     static bool CheckCustomSymbolId(RefPtr<ResourceWrapper> resourceWrapper, JSRef<JSVal>& resId,
811         std::uint32_t& symbolId);
812     static bool ParseJsSymbolId(
813         const JSRef<JSVal>& jsValue, uint32_t& symbolId, RefPtr<ResourceObject>& symbolResourceObject);
814     static void ParseJsSymbolCustomFamilyNames(std::vector<std::string>& customFamilyNames,
815         const JSRef<JSVal>& jsValue);
816     static bool ParseJsSymbolColor(const JSRef<JSVal>& jsValue, std::vector<Color>& result,
817         bool enableResourceUpdate = false,
818         std::vector<std::pair<int32_t, RefPtr<ResourceObject>>>& resObjArr = DEFAULT_RESOURCE_PAIR_ARRAY);
819     static bool ParseBorderWidthProps(const JSRef<JSVal>& args, NG::BorderWidthProperty& borderWidthProperty);
820     static bool ParseBorderWidthProps(const JSRef<JSVal>& args,
821         NG::BorderWidthProperty& borderWidthProperty, RefPtr<ResourceObject>& resourceObj);
822     static bool ParseBorderColorProps(const JSRef<JSVal>& args, NG::BorderColorProperty& colorProperty);
823     static bool ParseBorderColorProps(const JSRef<JSVal>& args,
824         NG::BorderColorProperty& colorProperty, RefPtr<ResourceObject>& resourceObj);
825     static bool ParseBorderStyleProps(const JSRef<JSVal>& args, NG::BorderStyleProperty& borderStyleProperty);
826     static bool ParseBorderRadius(const JSRef<JSVal>& args, NG::BorderRadiusProperty& radius, bool notNegative = true);
827     static void ParseCommonBorderRadiusProps(
828         const JSRef<JSObject>& object, NG::BorderRadiusProperty& radius, bool notNegative = true);
829     static void ParseBorderRadiusProps(const JSRef<JSObject>& object, NG::BorderRadiusProperty& radius);
830     static bool ParseEditMenuOptions(const JSCallbackInfo& info, NG::OnCreateMenuCallback& onCreateMenuCallback,
831         NG::OnMenuItemClickCallback& onMenuItemClick, NG::OnPrepareMenuCallback& onPrepareMenuCallback);
832     static void SetDialogProperties(const JSRef<JSObject>& obj, DialogProperties& properties);
833     static void SetDialogHoverModeProperties(const JSRef<JSObject>& obj, DialogProperties& properties);
834     static void SetDialogBlurStyleOption(const JSRef<JSObject>& obj, DialogProperties& properties);
835     static void SetDialogEffectOption(const JSRef<JSObject>& obj, DialogProperties& properties);
836     static std::function<void(NG::DrawingContext& context)> GetDrawCallback(
837         const RefPtr<JsFunction>& jsDraw, const JSExecutionContext& execCtx, JSRef<JSObject> modifier);
838 
839     static RefPtr<NG::ChainedTransitionEffect> ParseNapiChainedTransition(
840         const JSRef<JSObject>& object, const JSExecutionContext& context);
841     static void JsFocusScopeId(const JSCallbackInfo& info);
842     static void JsFocusScopePriority(const JSCallbackInfo& info);
843     static int32_t ParseJsPropertyId(const JSRef<JSVal>& jsValue);
844     static void JsVisualEffect(const JSCallbackInfo& info);
845     static void JsBackgroundFilter(const JSCallbackInfo& info);
846     static void JsForegroundFilter(const JSCallbackInfo& info);
847     static void JsCompositingFilter(const JSCallbackInfo& info);
848     static NG::PaddingProperty GetLocalizedPadding(const std::optional<CalcDimension>& top,
849         const std::optional<CalcDimension>& bottom, const std::optional<CalcDimension>& start,
850         const std::optional<CalcDimension>& end);
851     static NG::MarginProperty GetEdgeMargins(const CommonCalcDimension& commonCalcDimension);
852     static void GetEdgeMarginsResObj(NG::MarginProperty& margins, const CommonCalcDimension& commonCalcDimension);
853     static NG::PaddingProperty GetEdgePaddingsOrSafeAreaPaddings(const CommonCalcDimension& commonCalcDimension);
854     static NG::BorderColorProperty GetLocalizedBorderColor(const std::optional<Color>& colorStart,
855         const std::optional<Color>& colorEnd, const std::optional<Color>& colorTop,
856         const std::optional<Color>& colorBottom);
857     static NG::BorderColorProperty GetLocalizedBorderColor(const CommonColor& commonColor);
858     static NG::BorderColorProperty GetBorderColor(const CommonColor& commonColor);
859     static NG::BorderRadiusProperty GetLocalizedBorderRadius(const std::optional<Dimension>& radiusTopStart,
860         const std::optional<Dimension>& radiusTopEnd, const std::optional<Dimension>& radiusBottomStart,
861         const std::optional<Dimension>& radiusBottomEnd);
862     static void ParseDetentSelection(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle);
863     template<typename T>
RegisterResource(const std::string & key,const RefPtr<ResourceObject> & resObj,T value)864     static void RegisterResource(const std::string& key, const RefPtr<ResourceObject>& resObj, T value)
865     {
866         auto frameNode = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode();
867         CHECK_NULL_VOID(frameNode);
868         auto pattern = frameNode->GetPattern();
869         CHECK_NULL_VOID(pattern);
870         pattern->RegisterResource<T>(key, resObj, value);
871     }
872     static void UnRegisterResource(const std::string& key);
873     static void ParseDragSpringLoadingConfiguration(
874         const JSRef<JSObject>& paramObj, const RefPtr<NG::DragSpringLoadingConfiguration>& config);
875     static void SetBorderRadiusWithCheck(std::optional<NG::BorderRadiusProperty>& result,
876         NG::BorderRadiusProperty& dimension);
877     static bool CheckLengthMetrics(const JSRef<JSObject>& object);
878     static void CompleteResourceObjectFromColor(RefPtr<ResourceObject>& resObj,
879         Color& color, bool state);
880 
881 private:
882     static bool CheckDarkResource(const RefPtr<ResourceObject>& resObj);
883     static bool ParseJsStrArrayInternal(const JSRef<JSArray>& jsArray, std::vector<std::string>& result,
884         std::vector<RefPtr<ResourceObject>>& resObjArray);
885     static bool ParseJsIntegerArrayInternal(const JSRef<JSArray>& jsArray, std::vector<uint32_t>& result,
886         std::vector<RefPtr<ResourceObject>>& resObjArray);
887     static bool ParseJsStringObj(const JSRef<JSVal>& jsValue, std::string& result, RefPtr<ResourceObject>& resObj);
888     static bool ParseJSMediaWithRawFile(const JSRef<JSObject>& jsObj, std::string& result,
889         RefPtr<ResourceWrapper>& resourceWrapper);
890     static bool ParseJSMediaInternal(const JSRef<JSObject>& jsValue, std::string& result,
891         RefPtr<ResourceObject>& resObj);
892     static bool ParseResourceToDoubleByName(
893         const JSRef<JSObject>& jsObj, int32_t resType, const RefPtr<ResourceWrapper>& resourceWrapper, double& result);
894     static bool ParseResourceToDoubleById(
895         int32_t resId, int32_t resType, const RefPtr<ResourceWrapper>& resourceWrapper, double& result);
896     static bool ParseJsDimensionByNameInternal(const JSRef<JSObject>& jsObj, CalcDimension& result,
897         DimensionUnit defaultUnit, RefPtr<ResourceWrapper>& resourceWrapper, int32_t resType);
898     static void ParseMenuItemsSymbolId(const JSRef<JSVal>& jsStartIcon, NG::MenuOptionsParam menuOptionsParam);
899     static std::vector<NG::MenuOptionsParam> ParseMenuItems(const JSRef<JSArray>& menuItemsArray, bool showShortcut);
900     static void ParseOnCreateMenu(
901         const JSCallbackInfo& info, const JSRef<JSVal>& jsFunc, NG::OnCreateMenuCallback& onCreateMenuCallback);
902     static void ParseOnPrepareMenu(
903         const JSCallbackInfo& info, const JSRef<JSVal>& jsFunc, NG::OnPrepareMenuCallback& onPrepareMenuCallback);
904     static JSRef<JSVal> CreateJsTextMenuItem(const NG::MenuItemParam& menuItemParam);
905     static JSRef<JSVal> CreateJsTextRange(const NG::MenuItemParam& menuItemParam);
906     static JSRef<JSObject> CreateJsTextMenuId(const std::string& id);
907     static JSRef<JSArray> CreateJsOnMenuItemClick(const NG::MenuItemParam& menuItemParam);
908     static JSRef<JSVal> CreateJsSystemMenuItems(const std::vector<NG::MenuItemParam>& systemMenuItems);
909     static void CompleteResourceObjectInner(
910         JSRef<JSObject>& jsObj, std::string& bundleName, std::string& moduleName, int32_t& resIdValue);
911     static NG::LayoutSafeAreaEdge ParseJsLayoutSafeAreaEdgeArray(
912         const JSRef<JSArray>& jsSafeAreaEdges, NG::LayoutSafeAreaEdge defaultVal);
913     static bool ParseAllBorderRadiusesForOutLine(JSRef<JSObject>& object, NG::BorderRadiusProperty& borderRadius);
914     static void GetBorderRadiusTopLeft(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius);
915     static void GetBorderRadiusTopRight(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius);
916     static void GetBorderRadiusBottomLeft(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius);
917     static void GetBorderRadiusBottomRight(const JSRef<JSVal>& jsValue, NG::BorderRadiusProperty& borderRadius);
918     static void ParseSweepGradientCenter(NG::Gradient& newGradient, const JSRef<JSArray> centerArray);
919     static void ParseRadialGradientCenter(NG::Gradient& newGradient, const JSRef<JSArray> centerArray);
920     static void NewParseGradientColor(NG::Gradient& gradient, RefPtr<ResourceObject>& resObj,
921         NG::GradientColor& gradientColor, int32_t& indx);
922     static void NewParseSweepGradientColor(NG::Gradient& gradient, RefPtr<ResourceObject>& resObj,
923         NG::GradientColor& gradientColor, int32_t& indx);
924     static void NewParseRadialGradientColor(NG::Gradient& gradient, RefPtr<ResourceObject>& resObj,
925         NG::GradientColor& gradientColor, int32_t& indx);
926     static bool ParseBackgroundBuilder(
927         const JSCallbackInfo& info, const JSRef<JSVal>& jsFunc, std::function<void()>& builderFunc);
928 };
929 } // namespace OHOS::Ace::Framework
930 #endif // JS_VIEW_ABSTRACT_H
931