diff --git a/src/main/java/org/openautonomousconnection/htmlparser/HtmlApp.java b/src/main/java/org/openautonomousconnection/htmlparser/HtmlApp.java index 3d64618..f66a745 100644 --- a/src/main/java/org/openautonomousconnection/htmlparser/HtmlApp.java +++ b/src/main/java/org/openautonomousconnection/htmlparser/HtmlApp.java @@ -72,14 +72,14 @@ public class HtmlApp { #card { background: #0b1220; padding: 12px; margin: 8px; } .title { color: #e5e7eb; font-size: 18px; } - +
Mini HTML Demo
pyscript ran: no
click me
- + - """; // Erstelle das GUI und lade das Beispiel diff --git a/src/main/java/org/openautonomousconnection/htmlparser/script/DomAdapter.java b/src/main/java/org/openautonomousconnection/htmlparser/script/DomAdapter.java new file mode 100644 index 0000000..1f58265 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/htmlparser/script/DomAdapter.java @@ -0,0 +1,38 @@ +package org.openautonomousconnection.htmlparser.script; + +import org.openautonomousconnection.htmlparser.dom.*; +import org.openautonomousconnection.htmlparser.events.Event; + +public final class DomAdapter { + private final Document document; + + public DomAdapter(Document document) { + this.document = document; + } + + public Document document() { return document; } + + // expose: document.querySelector(...) + public Element querySelector(String sel) { return document.querySelector(sel); } + public Element getElementById(String id) { return document.getElementById(id); } + + public Element createElement(String tag) { return document.createElement(tag); } + public TextNode createTextNode(String text) { return document.createTextNode(text); } + + public void appendChild(Element parent, Object child) { + if (parent == null || child == null) return; + if (child instanceof Element e) parent.appendChild(e); + else if (child instanceof TextNode t) parent.appendChild(t); + } + + public void setText(Element el, String text) { if (el != null) el.setText(text); } + public void setAttr(Element el, String k, String v) { if (el != null) el.setAttribute(k, v); } + public String getAttr(Element el, String k) { return el == null ? null : el.getAttribute(k); } + + public void styleSet(Element el, String k, String v) { if (el != null) el.style().set(k, v); } + + public void click(Element el) { + if (el == null) return; + el.dispatchEvent(new Event("click", true)); + } +} diff --git a/src/main/java/org/openautonomousconnection/htmlparser/script/ScriptEngine.java b/src/main/java/org/openautonomousconnection/htmlparser/script/ScriptEngine.java new file mode 100644 index 0000000..5d61eb3 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/htmlparser/script/ScriptEngine.java @@ -0,0 +1,29 @@ +package org.openautonomousconnection.htmlparser.script; + +import org.openautonomousconnection.htmlparser.dom.*; + +import java.util.Objects; + +public final class ScriptEngine implements AutoCloseable { + + private final PythonInterpreter py; + private final PyDomAdapter dom; + + public ScriptEngine(Document document) { + this.py = new PythonInterpreter(); + this.dom = new PyDomAdapter(Objects.requireNonNull(document)); + // expose "document" + "dom" + py.set("dom", dom); + py.set("document", document); + } + + public void exec(String code) { + if (code == null) return; + py.exec(code); + } + + @Override + public void close() { + try { py.close(); } catch (Exception ignored) {} + } +}