• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 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/text/text_menu_extension.h"
40 #include "core/components_ng/property/gradient_property.h"
41 #include "core/components_ng/property/transition_property.h"
42 #include "interfaces/inner_api/ace/ai/image_analyzer.h"
43 
44 namespace OHOS::Ace::Framework {
45 
46 constexpr int32_t DEFAULT_TAP_FINGERS = 1;
47 constexpr int32_t DEFAULT_TAP_COUNTS = 1;
48 constexpr float DEFAULT_PROGRESS_TOTAL = 100.0f;
49 
50 enum class ResourceType : uint32_t {
51     COLOR = 10001,
52     FLOAT,
53     STRING,
54     PLURAL,
55     BOOLEAN,
56     INTARRAY,
57     INTEGER,
58     PATTERN,
59     STRARRAY,
60     MEDIA = 20000,
61     RAWFILE = 30000
62 };
63 
64 enum class JSCallbackInfoType { STRING, NUMBER, OBJECT, BOOLEAN, FUNCTION };
65 
66 RefPtr<ResourceObject> GetResourceObject(const JSRef<JSObject>& jsObj);
67 RefPtr<ResourceObject> GetResourceObjectByBundleAndModule(const JSRef<JSObject>& jsObj);
68 RefPtr<ResourceWrapper> CreateResourceWrapper(const JSRef<JSObject>& jsObj, RefPtr<ResourceObject>& resourceObject);
69 RefPtr<ResourceWrapper> CreateResourceWrapper();
70 
71 class JSViewAbstract {
72 public:
73     static void GetAngle(
74         const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, std::optional<float>& angle);
75     static void GetJsAngle(
76         const std::string& key, const JSRef<JSVal>& jsValue, std::optional<float>& angle);
77     static void CheckAngle(std::optional<float>& angle);
78     static void GetPerspective(const std::string& key, const std::unique_ptr<JsonValue>& jsonValue, float& perspective);
79     static void GetJsPerspective(const std::string& key, const JSRef<JSVal>& jsValue, float& perspective);
80     static void GetGradientColorStops(Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue);
81     static void GetFractionStops(
82         std::vector<std::pair<float, float>>& fractionStops, const JSRef<JSVal>& array);
83     static void NewGetGradientColorStops(NG::Gradient& gradient, const std::unique_ptr<JsonValue>& jsonValue);
84     static void NewGetJsGradientColorStops(NG::Gradient& gradient, const JSRef<JSVal>& colorStops);
85 
86     static void JsScale(const JSCallbackInfo& info);
87     static void SetDefaultScale();
88     static void JsScaleX(const JSCallbackInfo& info);
89     static void JsScaleY(const JSCallbackInfo& info);
90     static void JsOpacity(const JSCallbackInfo& info);
91     static void JsTranslate(const JSCallbackInfo& info);
92     static void SetDefaultTranslate();
93     static void JsTranslateX(const JSCallbackInfo& info);
94     static void JsTranslateY(const JSCallbackInfo& info);
95     static void JsRotate(const JSCallbackInfo& info);
96     static void SetDefaultRotate();
97     static void JsRotateX(const JSCallbackInfo& info);
98     static void JsRotateY(const JSCallbackInfo& info);
99     static void JsTransform(const JSCallbackInfo& info);
100     static void SetDefaultTransform();
101     static void JsTransition(const JSCallbackInfo& info);
102     static NG::TransitionOptions ParseTransition(std::unique_ptr<JsonValue>& transitionArgs);
103     static NG::TransitionOptions ParseJsTransition(const JSRef<JSVal>& transitionArgs);
104     static void JsWidth(const JSCallbackInfo& info);
105     static void JsHeight(const JSCallbackInfo& info);
106     static void JsBackgroundColor(const JSCallbackInfo& info);
107     static void JsBackgroundImage(const JSCallbackInfo& info);
108     static void JsBackgroundImageSize(const JSCallbackInfo& info);
109     static void JsBackgroundImagePosition(const JSCallbackInfo& info);
110     static void ParseBlurOption(const JSRef<JSObject>& jsBlurOption, BlurOption& blurOption);
111     static void JsBackgroundBlurStyle(const JSCallbackInfo& info);
112     static void JsBackgroundEffect(const JSCallbackInfo& info);
113     static void ParseEffectOption(const JSRef<JSObject>& jsObj, EffectOption& effectOption);
114     static void JsForegroundBlurStyle(const JSCallbackInfo& info);
115     static void JsSphericalEffect(const JSCallbackInfo& info);
116     static void JsPixelStretchEffect(const JSCallbackInfo& info);
117     static void JsLightUpEffect(const JSCallbackInfo& info);
118     static void JsBackground(const JSCallbackInfo& info);
119     static void JsBindMenu(const JSCallbackInfo& info);
120     static void JsBindContextMenu(const JSCallbackInfo& info);
121     static void JsBindContentCover(const JSCallbackInfo& info);
122     static void ParseModalStyle(const JSRef<JSObject>& paramObj, NG::ModalStyle& modalStyle);
123     static void JsBindSheet(const JSCallbackInfo& info);
124     static void ParseSheetStyle(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle);
125     static bool ParseSheetDetents(const JSRef<JSVal>& args, std::vector<NG::SheetHeight>& sheetDetents);
126     static void ParseSheetDetentHeight(const JSRef<JSVal>& args, NG::SheetHeight& detent);
127     static bool ParseSheetBackgroundBlurStyle(const JSRef<JSVal>& args, BlurStyleOption& blurStyleOptions);
128     static void ParseSheetCallback(const JSRef<JSObject>& paramObj, std::function<void()>& onAppear,
129         std::function<void()>& onDisappear, std::function<void()>& shouldDismiss);
130     static void ParseSheetTitle(const JSRef<JSObject>& paramObj, NG::SheetStyle& sheetStyle,
131         std::function<void()>& titleBuilderFunction);
132     static panda::Local<panda::JSValueRef> JsDismissSheet(panda::JsiRuntimeCallInfo* runtimeCallInfo);
133     static void ParseOverlayCallback(
134         const JSRef<JSObject>& paramObj, std::function<void()>& onAppear, std::function<void()>& onDisappear);
135     static void JsBorderColor(const JSCallbackInfo& info);
136     static void ParseBorderColor(const JSRef<JSVal>& args);
137     static void JsPadding(const JSCallbackInfo& info);
138     static void JsMargin(const JSCallbackInfo& info);
139     static void ParseMarginOrPadding(const JSCallbackInfo& info, bool isMargin);
140     static void ParseMarginOrPaddingCorner(JSRef<JSObject> obj, std::optional<CalcDimension>& top,
141         std::optional<CalcDimension>& bottom, std::optional<CalcDimension>& left, std::optional<CalcDimension>& right);
142     static void JsOutline(const JSCallbackInfo& info);
143     static void JsOutlineWidth(const JSCallbackInfo& info);
144     static void JsOutlineColor(const JSCallbackInfo& info);
145     static void JsOutlineStyle(const JSCallbackInfo& info);
146     static void JsOutlineRadius(const JSCallbackInfo& info);
147     static void JsBorder(const JSCallbackInfo& info);
148     static void JsBorderWidth(const JSCallbackInfo& info);
149     static void ParseBorderWidth(const JSRef<JSVal>& args);
150     static void JsBorderRadius(const JSCallbackInfo& info);
151     static void ParseBorderRadius(const JSRef<JSVal>& args);
152     static void JsBorderStyle(const JSCallbackInfo& info);
153     static void ParseBorderStyle(const JSRef<JSVal>& args);
154     static void JsBorderImage(const JSCallbackInfo& info);
155     static void ParseBorderImageRepeat(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
156     static void ParseBorderImageOutset(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
157     static void ParseBorderImageSlice(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
158     static void ParseBorderImageWidth(const JSRef<JSVal>& args, RefPtr<BorderImage>& borderImage);
159     static void ParseBorderImageDimension(
160         const JSRef<JSVal>& args, BorderImage::BorderImageOption& borderImageDimension);
161     static void ParseBorderImageLinearGradient(const JSRef<JSVal>& args, uint8_t& bitset);
162     static void JsUseEffect(const JSCallbackInfo& info);
163     static void JsUseShadowBatching(const JSCallbackInfo& info);
164     static void JsBlur(const JSCallbackInfo& info);
165     static void JsColorBlend(const JSCallbackInfo& info);
166     static void JsBackdropBlur(const JSCallbackInfo& info);
167     static void JsLinearGradientBlur(const JSCallbackInfo& info);
168     static void JsBackgroundBrightness(const JSCallbackInfo& info);
169     static void JsWindowBlur(const JSCallbackInfo& info);
170     static void JsFlexBasis(const JSCallbackInfo& info);
171     static void JsFlexGrow(const JSCallbackInfo& info);
172     static void JsFlexShrink(const JSCallbackInfo& info);
173     static void JsAlignSelf(const JSCallbackInfo& info);
174     static void JsDisplayPriority(const JSCallbackInfo& info);
175     static void JsSharedTransition(const JSCallbackInfo& info);
176     static void JsGeometryTransition(const JSCallbackInfo& info);
177     static void JsGridSpan(const JSCallbackInfo& Info);
178     static void JsGridOffset(const JSCallbackInfo& info);
179     static void JsUseSizeType(const JSCallbackInfo& Info);
180     static void JsHoverEffect(const JSCallbackInfo& info);
181     static void JsOnMouse(const JSCallbackInfo& info);
182     static void JsOnHover(const JSCallbackInfo& info);
183     static void JsOnClick(const JSCallbackInfo& info);
184     static void JsOnGestureJudgeBegin(const JSCallbackInfo& args);
185     static void JsClickEffect(const JSCallbackInfo& info);
186     static void JsRestoreId(int32_t restoreId);
187     static void JsOnVisibleAreaChange(const JSCallbackInfo& info);
188     static void JsHitTestBehavior(const JSCallbackInfo& info);
189     static void JsOnChildTouchTest(const JSCallbackInfo& info);
190     static void JsForegroundColor(const JSCallbackInfo& info);
191     static void JsSetFreeze(const JSCallbackInfo& info);
192 
193     // outer border
194     static void ParseOuterBorderColor(const JSRef<JSVal>& args);
195     static void ParseOuterBorderWidth(const JSRef<JSVal>& args);
196     static void ParseOuterBorderRadius(const JSRef<JSVal>& args);
197     static void ParseOuterBorderStyle(const JSRef<JSVal>& args);
198 
199     // response region
200     static void JsResponseRegion(const JSCallbackInfo& info);
201     static bool ParseJsResponseRegionArray(const JSRef<JSVal>& jsValue, std::vector<DimensionRect>& result);
202     static bool ParseJsDimensionRect(const JSRef<JSVal>& jsValue, DimensionRect& result);
203 
204     // for dynamic $r
205     static void CompleteResourceObject(JSRef<JSObject>& jsObj);
206     static bool ConvertResourceType(const std::string& typeName, ResourceType& resType);
207     static bool ParseDollarResource(const JSRef<JSVal>& jsValue, ResourceType& resType, std::string& resName);
208 
209     // mouse response response region
210     static void JsMouseResponseRegion(const JSCallbackInfo& info);
211 
212     // for number and string with no unit, use default dimension unit.
213     static bool ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit);
214     static bool ParseJsDimensionVp(const JSRef<JSVal>& jsValue, CalcDimension& result);
215     static bool ParseJsDimensionFp(const JSRef<JSVal>& jsValue, CalcDimension& result);
216     static bool ParseJsDimensionPx(const JSRef<JSVal>& jsValue, CalcDimension& result);
217     static bool ParseJsDouble(const JSRef<JSVal>& jsValue, double& result);
218     static bool ParseJsInt32(const JSRef<JSVal>& jsValue, int32_t& result);
219     static bool ParseJsColorFromResource(const JSRef<JSVal>& jsValue, Color& result);
220     static bool ParseJsColor(const JSRef<JSVal>& jsValue, Color& result);
221     static bool ParseJsColorStrategy(const JSRef<JSVal>& jsValue, ForegroundColorStrategy& strategy);
222     static bool ParseJsShadowColorStrategy(const JSRef<JSVal>& jsValue, ShadowColorStrategy& strategy);
223     static bool ParseJsFontFamilies(const JSRef<JSVal>& jsValue, std::vector<std::string>& result);
224 
225     static bool ParseJsDimensionNG(
226         const JSRef<JSVal>& jsValue, CalcDimension& result, DimensionUnit defaultUnit, bool isSupportPercent = true);
227     static bool ParseJsDimensionVpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true);
228     static bool ParseJsDimensionFpNG(const JSRef<JSVal>& jsValue, CalcDimension& result, bool isSupportPercent = true);
229 
230     static bool ParseJsonDimension(const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result,
231         DimensionUnit defaultUnit, bool checkIllegal = false);
232     static bool ParseJsonDimensionVp(
233         const std::unique_ptr<JsonValue>& jsonValue, CalcDimension& result, bool checkIllegal = false);
234     static bool ParseJsonDouble(const std::unique_ptr<JsonValue>& jsonValue, double& result);
235     static bool ParseJsonColor(const std::unique_ptr<JsonValue>& jsonValue, Color& result);
236     static bool ParseJsString(const JSRef<JSVal>& jsValue, std::string& result);
237     static bool ParseJsMedia(const JSRef<JSVal>& jsValue, std::string& result);
238     static bool ParseResourceToDouble(const JSRef<JSVal>& jsValue, double& result);
239     static bool ParseJsBool(const JSRef<JSVal>& jsValue, bool& result);
240     static bool ParseJsInteger(const JSRef<JSVal>& jsValue, uint32_t& result);
241     static bool ParseJsInteger(const JSRef<JSVal>& jsValue, int32_t& result);
242     static bool ParseJsIntegerArray(const JSRef<JSVal>& jsValue, std::vector<uint32_t>& result);
243     static bool ParseJsStrArray(const JSRef<JSVal>& jsValue, std::vector<std::string>& result);
244     static bool IsGetResourceByName(const JSRef<JSObject>& jsObj);
245     static void GetJsMediaBundleInfo(const JSRef<JSVal>& jsValue, std::string& bundleName, std::string& moduleName);
246     static bool ParseShadowProps(const JSRef<JSVal>& jsValue, Shadow& shadow);
247     static bool GetShadowFromTheme(ShadowStyle shadowStyle, Shadow& shadow);
248     static bool ParseJsResource(const JSRef<JSVal>& jsValue, CalcDimension& result);
249     static bool ParseDataDetectorConfig(const JSCallbackInfo& info, std::string& types,
250         std::function<void(const std::string&)>& onResult);
251     static bool ParseInvertProps(const JSRef<JSVal>& jsValue, InvertVariant& invert);
252 
253     static std::pair<CalcDimension, CalcDimension> ParseSize(const JSCallbackInfo& info);
254     static void JsUseAlign(const JSCallbackInfo& info);
255     static void JsZIndex(const JSCallbackInfo& info);
256     static void SetDirection(const std::string& dir);
257     static void JsSize(const JSCallbackInfo& info);
258     static void JsConstraintSize(const JSCallbackInfo& info);
259     static void JsLayoutPriority(const JSCallbackInfo& info);
260     static void JsPixelRound(const JSCallbackInfo& info);
261     static void JsLayoutWeight(const JSCallbackInfo& info);
262 
263     static void JsAlign(const JSCallbackInfo& info);
264     static void JsPosition(const JSCallbackInfo& info);
265     static void JsMarkAnchor(const JSCallbackInfo& info);
266     static void JsOffset(const JSCallbackInfo& info);
267     static void JsEnabled(const JSCallbackInfo& info);
268     static void JsAspectRatio(const JSCallbackInfo& info);
269     static void JsOverlay(const JSCallbackInfo& info);
270     static Alignment ParseAlignment(int32_t align);
271     static void JsAlignRules(const JSCallbackInfo& info);
272 
273     static void SetVisibility(const JSCallbackInfo& info);
274     static void Pop();
275 
276     static void JsSetDraggable(bool draggable);
277     static void JsSetDragPreviewOptions(const JSCallbackInfo& info);
278     static void JsOnDragStart(const JSCallbackInfo& info);
279     static bool ParseAndUpdateDragItemInfo(const JSRef<JSVal>& info, NG::DragDropBaseInfo& dragInfo);
280     static RefPtr<AceType> ParseDragNode(const JSRef<JSVal>& info);
281     static void JsOnDragEnter(const JSCallbackInfo& info);
282     static void JsOnDragEnd(const JSCallbackInfo& info);
283     static void JsOnDragMove(const JSCallbackInfo& info);
284     static void JsOnDragLeave(const JSCallbackInfo& info);
285     static void JsOnDrop(const JSCallbackInfo& info);
286     static void JsOnAreaChange(const JSCallbackInfo& info);
287 
288     static void JsLinearGradient(const JSCallbackInfo& info);
289     static void JsRadialGradient(const JSCallbackInfo& info);
290     static void JsSweepGradient(const JSCallbackInfo& info);
291     static void NewJsLinearGradient(const JSCallbackInfo& info, NG::Gradient& gradient);
292     static void NewJsRadialGradient(const JSCallbackInfo& info, NG::Gradient& gradient);
293     static void NewJsSweepGradient(const JSCallbackInfo& info, NG::Gradient& gradient);
294     static void JsMotionPath(const JSCallbackInfo& info);
295     static void JsShadow(const JSCallbackInfo& info);
296     static void JsBlendMode(const JSCallbackInfo& info);
297     static void JsGrayScale(const JSCallbackInfo& info);
298     static void JsBrightness(const JSCallbackInfo& info);
299     static void JsContrast(const JSCallbackInfo& info);
300     static void JsSaturate(const JSCallbackInfo& info);
301     static void JsSepia(const JSCallbackInfo& info);
302     static void JsInvert(const JSCallbackInfo& info);
303     static void JsSystemBarEffect(const JSCallbackInfo& info);
304     static void JsHueRotate(const JSCallbackInfo& info);
305 
306     static void JsClip(const JSCallbackInfo& info);
307     static void JsMask(const JSCallbackInfo& info);
308 
309     static void JsKey(const std::string& key);
310     static void JsId(const JSCallbackInfo& info);
311 
312     static void JsFocusable(const JSCallbackInfo& info);
313     static void JsOnFocusMove(const JSCallbackInfo& args);
314     static void JsOnKeyEvent(const JSCallbackInfo& args);
315     static void JsOnFocus(const JSCallbackInfo& args);
316     static void JsOnBlur(const JSCallbackInfo& args);
317     static void JsTabIndex(const JSCallbackInfo& info);
318     static void JsFocusOnTouch(const JSCallbackInfo& info);
319     static void JsDefaultFocus(const JSCallbackInfo& info);
320     static void JsGroupDefaultFocus(const JSCallbackInfo& info);
321     static void JsDebugLine(const JSCallbackInfo& info);
322     static void JsOpacityPassThrough(const JSCallbackInfo& info);
323     static void JsTransitionPassThrough(const JSCallbackInfo& info);
324     static void JsKeyboardShortcut(const JSCallbackInfo& info);
325 
326     static void JsObscured(const JSCallbackInfo& info);
327 
328     static void JsAccessibilityGroup(bool accessible);
329     static void JsAccessibilityText(const std::string& text);
330     static void JsAccessibilityDescription(const std::string& description);
331     static void JsAccessibilityImportance(const std::string& importance);
332     static void JsAccessibilityLevel(const std::string& level);
333     static void JsAllowDrop(const JSCallbackInfo& info);
334     static void JsDragPreview(const JSCallbackInfo& info);
335     static void JsAccessibilityVirtualNode(const JSCallbackInfo& info);
336 
337     static void ParseAccessibilityDescriptionJson(const std::string& description,
338         std::pair<bool, std::string>& autoEventPair, std::pair<bool, std::string>& descriptionPair);
339 
340     static void JSCreateAnimatableProperty(const JSCallbackInfo& info);
341     static void JSUpdateAnimatableProperty(const JSCallbackInfo& info);
342     static void JSRenderGroup(const JSCallbackInfo& info);
343     static void JSRenderFit(const JSCallbackInfo& info);
344 
345     static void JsExpandSafeArea(const JSCallbackInfo& info);
346 
347     static void ParseImageAnalyzerTextOptions(const JSRef<JSVal>& optionVal, ImageAnalyzerConfig& analyzerConfig);
348     static void ParseImageAnalyzerSubjectOptions(const JSRef<JSVal>& optionVal, ImageAnalyzerConfig& analyzerConfig);
349 
350     static void ParseMenuOptions(
351         const JSCallbackInfo& info, const JSRef<JSArray>& jsArray, std::vector<NG::MenuOptionsParam>& items);
352 
353 #ifndef WEARABLE_PRODUCT
354     static void JsBindPopup(const JSCallbackInfo& info);
355 #endif
356 
357     /**
358      * Binds the native methods to the the js object
359      */
360     static void JSBind(BindingTarget globalObj);
361 
GetPipelineContext()362     static RefPtr<PipelineBase> GetPipelineContext()
363     {
364         auto container = Container::Current();
365         CHECK_NULL_RETURN(container, nullptr);
366         return container->GetPipelineContext();
367     }
368 
369     template<typename T>
GetTheme()370     static RefPtr<T> GetTheme()
371     {
372         auto pipelineContext = GetPipelineContext();
373         CHECK_NULL_RETURN(pipelineContext, nullptr);
374         auto themeManager = pipelineContext->GetThemeManager();
375         CHECK_NULL_RETURN(themeManager, nullptr);
376         return themeManager->GetTheme<T>();
377     }
378 
379     /**
380      * box properties setter
381      */
382     static const Border& GetBorder();
383     static void SetMarginTop(const JSCallbackInfo& info);
384     static void SetMarginBottom(const JSCallbackInfo& info);
385     static void SetMarginLeft(const JSCallbackInfo& info);
386     static void SetMarginRight(const JSCallbackInfo& info);
387     static void SetPaddingTop(const JSCallbackInfo& info);
388     static void SetPaddingBottom(const JSCallbackInfo& info);
389     static void SetPaddingLeft(const JSCallbackInfo& info);
390     static void SetPaddingRight(const JSCallbackInfo& info);
391     static void SetBorder(const Border& border);
392     static void SetBorderStyle(int32_t style);
393     static void SetBorderColor(const Color& color, const AnimationOption& option);
394     static void SetBorderWidth(const CalcDimension& value, const AnimationOption& option);
395     static void SetColorBlend(Color color);
396     static void SetLinearGradientBlur(NG::LinearGradientBlurPara blurPara);
397     static void SetDynamicLightUp(float rate, float lightUpDegree);
398     static void SetWindowBlur(float progress, WindowBlurStyle blurStyle);
399     static RefPtr<ThemeConstants> GetThemeConstants(const JSRef<JSObject>& jsObj = JSRef<JSObject>());
400     static bool JsWidth(const JSRef<JSVal>& jsValue);
401     static bool JsHeight(const JSRef<JSVal>& jsValue);
402     static void GetBorderRadius(const char* key, JSRef<JSObject>& object, CalcDimension& radius);
403     static void ParseAllBorderRadiuses(JSRef<JSObject>& object, CalcDimension& topLeft, CalcDimension& topRight,
404         CalcDimension& bottomLeft, CalcDimension& bottomRight);
405     static void JsPointLight(const JSCallbackInfo& info);
406 
407     template<typename T>
ParseJsInteger(const JSRef<JSVal> & jsValue,T & result)408     static bool ParseJsInteger(const JSRef<JSVal>& jsValue, T& result)
409     {
410         if (!jsValue->IsNumber() && !jsValue->IsObject()) {
411             LOGE("arg is not number or Object.");
412             return false;
413         }
414 
415         if (jsValue->IsNumber()) {
416             result = jsValue->ToNumber<T>();
417             return true;
418         }
419 
420         JSRef<JSObject> jsObj = JSRef<JSObject>::Cast(jsValue);
421         int32_t resType = jsObj->GetPropertyValue<int32_t>("type", -1);
422         if (resType == -1) {
423             return false;
424         }
425 
426         JSRef<JSVal> resId = jsObj->GetProperty("id");
427         if (!resId->IsNumber()) {
428             LOGW("resId is not number");
429             return false;
430         }
431 
432         auto resourceObject = GetResourceObjectByBundleAndModule(jsObj);
433         auto resourceWrapper = CreateResourceWrapper(jsObj, resourceObject);
434         auto resIdNum = resId->ToNumber<int32_t>();
435         if (resIdNum == -1) {
436             if (!IsGetResourceByName(jsObj)) {
437                 return false;
438             }
439             JSRef<JSVal> args = jsObj->GetProperty("params");
440             JSRef<JSArray> params = JSRef<JSArray>::Cast(args);
441             auto param = params->GetValueAt(0);
442             if (resType == static_cast<int32_t>(ResourceType::INTEGER)) {
443                 result = static_cast<T>(resourceWrapper->GetIntByName(param->ToString()));
444                 return true;
445             }
446             return false;
447         }
448         if (resType == static_cast<int32_t>(ResourceType::INTEGER)) {
449             result = static_cast<T>(resourceWrapper->GetInt(resId->ToNumber<uint32_t>()));
450             return true;
451         }
452         return false;
453     }
454 
GetFunctionKeyName(FunctionKey functionkey)455     static std::string GetFunctionKeyName(FunctionKey functionkey)
456     {
457         switch (functionkey) {
458             case FunctionKey::ESC:
459                 return "ESC";
460                 break;
461             case FunctionKey::F1:
462                 return "F1";
463                 break;
464             case FunctionKey::F2:
465                 return "F2";
466                 break;
467             case FunctionKey::F3:
468                 return "F3";
469                 break;
470             case FunctionKey::F4:
471                 return "F4";
472                 break;
473             case FunctionKey::F5:
474                 return "F5";
475                 break;
476             case FunctionKey::F6:
477                 return "F6";
478                 break;
479             case FunctionKey::F7:
480                 return "F7";
481                 break;
482             case FunctionKey::F8:
483                 return "F8";
484                 break;
485             case FunctionKey::F9:
486                 return "F9";
487                 break;
488             case FunctionKey::F10:
489                 return "F10";
490                 break;
491             case FunctionKey::F11:
492                 return "F11";
493                 break;
494             case FunctionKey::F12:
495                 return "F12";
496                 break;
497             default:
498                 return "";
499                 break;
500         }
501     }
502 
503     static bool CheckColor(const JSRef<JSVal>& jsValue, Color& result, const char* componentName, const char* propName);
504     static bool CheckLength(
505         const JSRef<JSVal>& jsValue, CalcDimension& result, const char* componentName, const char* propName);
506     static bool ParseJsSymbolId(
507         const JSRef<JSVal>& jsValue, uint32_t& symbolId, RefPtr<ResourceObject>& symbolResourceObject);
508     static bool ParseJsSymbolColor(const JSRef<JSVal>& jsValue, std::vector<Color>& result);
509 };
510 } // namespace OHOS::Ace::Framework
511 #endif // JS_VIEW_ABSTRACT_H
512