From 03b1b64c5cc655bbf343c76d89e045eebaf3abcc Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Fri, 25 Jul 2025 22:06:12 -0300 Subject: [PATCH] :boom: fix(scripts/utils): `getChildren()` method not working, add `pickObjectKeys()` methods the old code that didn't work was really bad, and `pickObjectKeys()` is the inverse of `omitObjectKeys()`, that returns an object with the keys listed inside the array parameter --- ags/scripts/utils.ts | 48 +++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/ags/scripts/utils.ts b/ags/scripts/utils.ts index e44ca37..62c1da1 100644 --- a/ags/scripts/utils.ts +++ b/ags/scripts/utils.ts @@ -35,7 +35,10 @@ export function getPlayerIconFromBusName(busName: string): string { } export function escapeUnintendedMarkup(input: string): string { - return input.replace(/(?]*)[<>&"]/g, (s) => { + return input.replace(/<[^>]*>|[<>&"]/g, (s) => { + if(s.startsWith('<') && s.endsWith('>')) + return s; + switch(s) { case "<": return "<"; case ">": return ">"; @@ -43,32 +46,25 @@ export function escapeUnintendedMarkup(input: string): string { case "\"": return """; } - return `\\${s}`; + return s; }); } export function getChildren(widget: Gtk.Widget): Array { - const firstChild = widget.get_first_child(); - if(!firstChild) - return []; + const firstChild = widget.get_first_child(), + children: Array = []; + if(!firstChild) return []; - const children: Array = [ firstChild ]; - - let child: Gtk.Widget = firstChild.get_next_sibling()!; - if(!child) - return children; - - do { - child = (child ?? children[0]).get_next_sibling()!; - if(!child) return children; - - children.unshift(child); - } while(child != null); + let currentChild = firstChild.get_next_sibling(); + while(currentChild != null) { + children.push(currentChild); + currentChild = currentChild.get_next_sibling(); + } return children; } -export function omitObjectKeys(obj: ObjT, keys: keyof ObjT|Array): ObjT { +export function omitObjectKeys(obj: ObjT, keys: keyof ObjT|Array): object { const finalObject = { ...obj }; for(const objKey of Object.keys(finalObject as object)) { @@ -77,6 +73,7 @@ export function omitObjectKeys(obj: ObjT, keys: keyof ObjT|Array< delete finalObject[keys as keyof typeof finalObject]; break; } + continue; } @@ -88,6 +85,21 @@ export function omitObjectKeys(obj: ObjT, keys: keyof ObjT|Array< } } + return finalObject as object; +} + +export function pickObjectKeys(obj: ObjT, keys: Array): object { + const finalObject = {} as Record; + + for(const key of keys) { + for(const objKey of Object.keys(obj as object)) { + if(key === objKey) { + finalObject[key as keyof ObjT] = obj[objKey as keyof ObjT]; + break; + } + } + } + return finalObject; }