1
mirror of https://github.com/flipperdevices/flipperzero-firmware.git synced 2025-12-12 04:41:26 +04:00

JS: gui: view.hasProperty()

This commit is contained in:
Willy-JL
2024-10-17 18:05:35 +01:00
parent d05c20bd9b
commit 1967ec06d4
2 changed files with 26 additions and 0 deletions

View File

@@ -260,6 +260,26 @@ static void js_gui_view_set(struct mjs* mjs) {
mjs_return(mjs, MJS_UNDEFINED); mjs_return(mjs, MJS_UNDEFINED);
} }
/**
* @brief `View.hasProperty`
*/
static void js_gui_view_has_property(struct mjs* mjs) {
const char* name;
JS_FETCH_ARGS_OR_RETURN(mjs, JS_EXACTLY, JS_ARG_STR(&name));
JsGuiViewData* data = JS_GET_CONTEXT(mjs);
const JsViewDescriptor* descriptor = data->descriptor;
for(size_t i = 0; i < descriptor->prop_cnt; i++) {
JsViewPropDescriptor prop = descriptor->props[i];
if(strcmp(prop.name, name) != 0) continue;
mjs_return(mjs, mjs_mk_boolean(mjs, true));
return;
}
mjs_return(mjs, mjs_mk_boolean(mjs, false));
}
/** /**
* @brief `View` destructor * @brief `View` destructor
*/ */
@@ -284,6 +304,7 @@ static mjs_val_t js_gui_make_view(struct mjs* mjs, const JsViewDescriptor* descr
// generic view API // generic view API
mjs_val_t view_obj = mjs_mk_object(mjs); mjs_val_t view_obj = mjs_mk_object(mjs);
mjs_set(mjs, view_obj, "set", ~0, MJS_MK_FN(js_gui_view_set)); mjs_set(mjs, view_obj, "set", ~0, MJS_MK_FN(js_gui_view_set));
mjs_set(mjs, view_obj, "hasProperty", ~0, MJS_MK_FN(js_gui_view_has_property));
// object data // object data
JsGuiViewData* data = malloc(sizeof(JsGuiViewData)); JsGuiViewData* data = malloc(sizeof(JsGuiViewData));

View File

@@ -4,6 +4,11 @@ type Properties = { [K: string]: any };
export declare class View<Props extends Properties> { export declare class View<Props extends Properties> {
set<P extends keyof Props>(property: P, value: Props[P]): void; set<P extends keyof Props>(property: P, value: Props[P]): void;
/**
* Check if property is available
* @param name Name of the property
*/
hasProperty(name: string): boolean;
} }
export declare class ViewFactory<Props extends Properties, V extends View<Props>> { export declare class ViewFactory<Props extends Properties, V extends View<Props>> {