21 #include "scriptablefilter.h"
22 #include "scriptablesafestring.h"
26 #include <QtQml/QJSEngine>
28 ScriptableFilter::ScriptableFilter(
const QJSValue &filterObject,
30 : m_filterObject(filterObject), m_scriptEngine(engine)
34 ScriptableFilter::~ScriptableFilter() {}
38 auto safety = m_filterObject.property(QStringLiteral(
"isSafe"));
39 if (safety.isBool()) {
40 return safety.toBool();
47 bool autoescape)
const
51 if (input.userType() == qMetaTypeId<QVariantList>()) {
52 auto inputList = input.value<QVariantList>();
53 auto array = m_scriptEngine->newArray(inputList.size());
54 for (
auto i = 0; i < inputList.size(); ++i) {
55 if (inputList.at(i).canConvert<QObject *>()) {
57 i, m_scriptEngine->newQObject(inputList.at(i).value<QObject *>()));
59 array.setProperty(i, m_scriptEngine->toScriptValue(inputList.at(i)));
67 args << m_scriptEngine->newQObject(ssObj);
68 }
else if (input.canConvert<QObject *>()) {
69 args << m_scriptEngine->newQObject(input.value<QObject *>());
71 args << m_scriptEngine->toScriptValue(input);
75 if (argument.userType() == qMetaTypeId<SafeString>()) {
78 args << m_scriptEngine->newQObject(ssObj);
80 args << m_scriptEngine->toScriptValue(argument);
82 auto filterObject = m_filterObject;
83 auto returnValue = filterObject.call(args);
85 if (returnValue.isString()) {
87 }
else if (returnValue.isQObject()) {
88 auto returnedObject = qjsvalue_cast<QObject *>(returnValue);
89 auto returnedStringObject
90 = qobject_cast<ScriptableSafeString *>(returnedObject);
91 if (!returnedStringObject)
93 auto returnedString = returnedStringObject->wrappedString();
94 return returnedString;
95 }
else if (returnValue.isVariant()) {
96 return qjsvalue_cast<QVariant>(returnValue);
97 }
else if (returnValue.isArray()) {
98 return qjsvalue_cast<QVariantList>(returnValue);
bool isSafe() const override
QVariant doFilter(const QVariant &input, const QVariant &argument, bool autoescape={}) const override
bool isSafeString(const QVariant &input)
Cutelee::SafeString getSafeString(const QVariant &input)
Utility functions used throughout Cutelee.