Many new things
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user