103 lines
3.6 KiB
Java
103 lines
3.6 KiB
Java
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;
|
|
}
|
|
});
|
|
}
|
|
} |