21 #include "scriptablenode.h"
23 #include <QtQml/QJSEngine>
27 #include "exception.h"
29 #include "scriptablecontext.h"
30 #include "scriptableparser.h"
32 ScriptableNode::ScriptableNode(QObject *parent)
33 :
Node(parent), m_scriptEngine(0)
37 void ScriptableNode::setScriptEngine(QJSEngine *engine)
39 m_scriptEngine = engine;
42 void ScriptableNode::init(
const QJSValue &concreteNode,
43 const QJSValue &renderMethod)
45 m_concreteNode = concreteNode;
46 m_renderMethod = renderMethod;
52 auto contextObject = m_scriptEngine->newQObject(&sc);
55 args << contextObject;
58 auto value =
const_cast<QJSValue &
>(m_renderMethod)
59 .callWithInstance(m_concreteNode, args);
61 if (!value.isError() && !value.isUndefined())
62 (*stream) << value.toString();
65 ScriptableNodeFactory::ScriptableNodeFactory(QObject *parent)
70 void ScriptableNodeFactory::setScriptEngine(QJSEngine *engine)
72 m_scriptEngine = engine;
75 void ScriptableNodeFactory::setEngine(
Engine *engine)
77 m_scriptEngine->setProperty(
"templateEngine", QVariant::fromValue(engine));
80 void ScriptableNodeFactory::setFactory(
const QJSValue &factoryMethod)
82 m_factoryMethod = factoryMethod;
88 auto parserObject = m_scriptEngine->newQObject(sp);
94 auto factory = m_factoryMethod;
96 auto scriptNode = factory.callWithInstance(factory, args);
97 if (scriptNode.isError())
100 auto node = qjsvalue_cast<Node *>(scriptNode);
105 QJSEngine *ScriptableNode::engine() {
return m_scriptEngine; }
107 void ScriptableNode::setNodeList(
const QString &name,
108 const QList<QObject *> &objectList)
110 auto objectListArray = m_scriptEngine->newArray(objectList.size());
112 for (
auto i = 0; i < objectList.size(); ++i) {
113 objectListArray.setProperty(i,
114 m_scriptEngine->newQObject(objectList.at(i)));
116 m_concreteNode.setProperty(name, objectListArray);
Base class for all NodeFactories.
The Context class holds the context to render a Template with.
Cutelee::Engine is the main entry point for creating Cutelee Templates.
An exception for use when implementing template tags.
Base class for all nodes.
The OutputStream class is used to render templates to a QTextStream.
The Parser class processes a string template into a tree of nodes.
Node * getNode(const QString &tagContent, Parser *p={}) const override
void render(OutputStream *stream, Context *c) const override