init
This commit is contained in:
67
packages/ags/config/lib/experiments.js
Normal file
67
packages/ags/config/lib/experiments.js
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
// these are functionalities that I might include in ags
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { Variable } from "resource:///com/github/Aylur/ags/variable.js"
|
||||
import { App } from "resource:///com/github/Aylur/ags/app.js"
|
||||
import GObject from "gi://GObject?version=2.0"
|
||||
|
||||
// eslint-disable-next-line max-len
|
||||
// export function watch(init, objs, callback)
|
||||
// export function watch(init, obj, callback)
|
||||
export function pwatch(
|
||||
init,
|
||||
objs,
|
||||
sigOrFn,
|
||||
callback,
|
||||
) {
|
||||
const v = new Variable(init)
|
||||
const f = typeof sigOrFn === "function" ? sigOrFn : callback ?? (() => v.value)
|
||||
const set = () => v.value = f()
|
||||
|
||||
if (Array.isArray(objs)) {
|
||||
// multiple objects
|
||||
for (const obj of objs) {
|
||||
if (Array.isArray(obj)) {
|
||||
// obj signal pair
|
||||
const [o, s = "changed"] = obj
|
||||
o.connect(s, set)
|
||||
} else {
|
||||
// obj on changed
|
||||
obj.connect("changed", set)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// watch single object
|
||||
const signal = typeof sigOrFn === "string" ? sigOrFn : "changed"
|
||||
objs.connect(signal, set)
|
||||
}
|
||||
|
||||
return v.bind()
|
||||
}
|
||||
export function watch(init, objs, sigOrFn, callback) {
|
||||
print(objs)
|
||||
const v = new Variable(init);
|
||||
const f = typeof sigOrFn === "function" ? sigOrFn : (callback || (() => v.value));
|
||||
const set = () => { v.value = f(); };
|
||||
|
||||
if (Array.isArray(objs)) {
|
||||
// multiple objects
|
||||
for (const obj of objs) {
|
||||
if (Array.isArray(obj)) {
|
||||
// obj signal pair
|
||||
const [o, s = "changed"] = obj;
|
||||
o.connect(s, set);
|
||||
} else {
|
||||
// obj on changed
|
||||
obj.connect("changed", set);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// watch single object
|
||||
const signal = typeof sigOrFn === "string" ? sigOrFn : "changed";
|
||||
objs.connect(signal, set);
|
||||
}
|
||||
|
||||
return v.bind();
|
||||
}
|
||||
Reference in New Issue
Block a user