Files
LuaScript/src/main/java/org/openautonomousconnection/luascript/tables/ObserversTable.java

103 lines
3.6 KiB
Java
Raw Normal View History

2026-02-28 17:39:42 +01:00
package org.openautonomousconnection.luascript.tables;
import org.luaj.vm2.LuaFunction;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;
import org.luaj.vm2.lib.*;
import org.openautonomousconnection.luascript.events.JavaToLua;
import org.openautonomousconnection.luascript.hosts.HostServices;
import org.openautonomousconnection.luascript.hosts.ObserverHost;
import org.openautonomousconnection.luascript.utils.ScriptTable;
import java.util.Map;
/**
* Lua table: observers
*
* <p>Functions:</p>
* <ul>
* <li>observers.on(fn(type, targetId, dataTable))</li>
* <li>observers.mutationObserve(id, subtree, attributes, childList, characterData)</li>
* <li>observers.mutationUnobserve(id)</li>
* <li>observers.resizeObserve(id)</li>
* <li>observers.resizeUnobserve(id)</li>
* <li>observers.intersectionObserve(id, threshold)</li>
* <li>observers.intersectionUnobserve(id)</li>
* </ul>
*/
public final class ObserversTable extends ScriptTable {
public ObserversTable() {
super("observers");
}
@Override
protected void define(HostServices services) {
ObserverHost host = services.observers().orElseThrow(() -> new IllegalStateException("ObserverHost not provided"));
table().set("on", new OneArgFunction() {
@Override
public LuaValue call(LuaValue fn) {
LuaFunction cb = fn.checkfunction();
host.setCallback((type, targetId, data) -> {
LuaValue luaData = JavaToLua.coerce(data);
cb.call(LuaValue.valueOf(type), LuaValue.valueOf(targetId), luaData);
});
return LuaValue.NIL;
}
});
table().set("mutationObserve", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
String id = args.arg(1).checkjstring();
boolean subtree = args.arg(2).optboolean(false);
boolean attributes = args.arg(3).optboolean(true);
boolean childList = args.arg(4).optboolean(true);
boolean characterData = args.arg(5).optboolean(false);
host.observeMutations(id, subtree, attributes, childList, characterData);
return LuaValue.NIL;
}
});
table().set("mutationUnobserve", new OneArgFunction() {
@Override
public LuaValue call(LuaValue id) {
host.unobserveMutations(id.checkjstring());
return LuaValue.NIL;
}
});
table().set("resizeObserve", new OneArgFunction() {
@Override
public LuaValue call(LuaValue id) {
host.observeResize(id.checkjstring());
return LuaValue.NIL;
}
});
table().set("resizeUnobserve", new OneArgFunction() {
@Override
public LuaValue call(LuaValue id) {
host.unobserveResize(id.checkjstring());
return LuaValue.NIL;
}
});
table().set("intersectionObserve", new TwoArgFunction() {
@Override
public LuaValue call(LuaValue id, LuaValue threshold) {
host.observeIntersection(id.checkjstring(), threshold.checkdouble());
return LuaValue.NIL;
}
});
table().set("intersectionUnobserve", new OneArgFunction() {
@Override
public LuaValue call(LuaValue id) {
host.unobserveIntersection(id.checkjstring());
return LuaValue.NIL;
}
});
}
}