From 8074221489d75cced7403c70f0c207097180e4c7 Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Wed, 23 Jul 2025 20:49:04 -0300 Subject: [PATCH] :sparkles: feat: add `escapeUnintendedMarkup()`, `getChildren()` and `pathToURI()` utility functions gtk4 doesn't have a `get_children()` method anymore :sob: --- ags/scripts/utils.ts | 49 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/ags/scripts/utils.ts b/ags/scripts/utils.ts index 32c1875..7f18236 100644 --- a/ags/scripts/utils.ts +++ b/ags/scripts/utils.ts @@ -21,7 +21,41 @@ export function getHyprlandInstanceSig(): (string|null) { } export function getHyprlandVersion(): string { - return exec(`${GLib.getenv("HYPRLAND_CMD") || "Hyprland"} --version | head -n1`).split(" ")[1]; + return exec(`${GLib.getenv("HYPRLAND_CMD") ?? "Hyprland"} --version | head -n1`).split(" ")[1]; +} + +export function escapeUnintendedMarkup(input: string): string { + return input.replace(/(?]*)[<>&"]/g, (s) => { + switch(s) { + case "<": return "<"; + case ">": return ">"; + case "&": return "&"; + case "\"": return """; + } + + return `\\${s}`; + }); +} + +export function getChildren(widget: Gtk.Widget): Array { + const firstChild = widget.get_first_child(); + 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); + + return children; } export function omitObjectKeys(obj: ObjT, keys: keyof ObjT|Array): ObjT { @@ -57,6 +91,19 @@ export function variableToBoolean(variable: any|Array|Accessor|a : Boolean(variable); } +export function pathToURI(path: string): string { + switch(true) { + case (/^[/]/).test(path): + return `file://${path}`; + + case (/^[~]/).test(path): + case (/^file:\/\/[~]/i).test(path): + return `file://${GLib.get_home_dir()}/${path.replace(/^(file\:\/\/|[~]|file\:\/\[~])/i, "")}`; + } + + return path; +} + export function transform, RType = any>( v: Accessor|ValueType, fn: (v: ValueType) => RType ): RType|Accessor {