Changeset View
Changeset View
Standalone View
Standalone View
templates/scriptabletags/scriptablefilter.cpp
Show All 15 Lines | 1 | /* | |||
---|---|---|---|---|---|
16 | You should have received a copy of the GNU Lesser General Public | 16 | You should have received a copy of the GNU Lesser General Public | ||
17 | License along with this library. If not, see <http://www.gnu.org/licenses/>. | 17 | License along with this library. If not, see <http://www.gnu.org/licenses/>. | ||
18 | 18 | | |||
19 | */ | 19 | */ | ||
20 | 20 | | |||
21 | #include "scriptablefilter.h" | 21 | #include "scriptablefilter.h" | ||
22 | #include "scriptablesafestring.h" | 22 | #include "scriptablesafestring.h" | ||
23 | 23 | | |||
24 | #include "exception.h" | ||||
24 | #include "util.h" | 25 | #include "util.h" | ||
25 | 26 | | |||
26 | #include <QtScript/QScriptEngine> | 27 | #include <QtQml/QJSEngine> | ||
27 | 28 | | |||
28 | ScriptableFilter::ScriptableFilter(const QScriptValue &filterObject, | 29 | ScriptableFilter::ScriptableFilter(const QJSValue &filterObject, | ||
29 | QScriptEngine *engine) | 30 | QJSEngine *engine) | ||
30 | : m_filterObject(filterObject), m_scriptEngine(engine) | 31 | : m_filterObject(filterObject), m_scriptEngine(engine) | ||
31 | { | 32 | { | ||
32 | } | 33 | } | ||
33 | 34 | | |||
34 | ScriptableFilter::~ScriptableFilter() {} | 35 | ScriptableFilter::~ScriptableFilter() {} | ||
35 | 36 | | |||
36 | bool ScriptableFilter::isSafe() const | 37 | bool ScriptableFilter::isSafe() const | ||
37 | { | 38 | { | ||
38 | auto safety = m_filterObject.property(QStringLiteral("isSafe")); | 39 | auto safety = m_filterObject.property(QStringLiteral("isSafe")); | ||
39 | if (safety.isBool()) { | 40 | if (safety.isBool()) { | ||
40 | return safety.toBool(); | 41 | return safety.toBool(); | ||
41 | } | 42 | } | ||
42 | return false; | 43 | return false; | ||
43 | } | 44 | } | ||
44 | 45 | | |||
45 | QVariant ScriptableFilter::doFilter(const QVariant &input, | 46 | QVariant ScriptableFilter::doFilter(const QVariant &input, | ||
46 | const QVariant &argument, | 47 | const QVariant &argument, | ||
47 | bool autoescape) const | 48 | bool autoescape) const | ||
48 | { | 49 | { | ||
49 | Q_UNUSED(autoescape) | 50 | Q_UNUSED(autoescape) | ||
50 | QScriptValueList args; | 51 | QJSValueList args; | ||
51 | if (input.userType() == qMetaTypeId<QVariantList>()) { | 52 | if (input.userType() == qMetaTypeId<QVariantList>()) { | ||
52 | auto inputList = input.value<QVariantList>(); | 53 | auto inputList = input.value<QVariantList>(); | ||
53 | auto array = m_scriptEngine->newArray(inputList.size()); | 54 | auto array = m_scriptEngine->newArray(inputList.size()); | ||
54 | for (auto i = 0; i < inputList.size(); ++i) { | 55 | for (auto i = 0; i < inputList.size(); ++i) { | ||
55 | if (inputList.at(i).canConvert<QObject *>()) { | 56 | if (inputList.at(i).canConvert<QObject *>()) { | ||
56 | array.setProperty( | 57 | array.setProperty( | ||
57 | i, m_scriptEngine->newQObject(inputList.at(i).value<QObject *>())); | 58 | i, m_scriptEngine->newQObject(inputList.at(i).value<QObject *>())); | ||
58 | } else { | 59 | } else { | ||
59 | array.setProperty(i, m_scriptEngine->newVariant(inputList.at(i))); | 60 | array.setProperty(i, m_scriptEngine->toScriptValue(inputList.at(i))); | ||
60 | } | 61 | } | ||
61 | } | 62 | } | ||
62 | args << array; | 63 | args << array; | ||
63 | } else { | 64 | } else { | ||
64 | if (isSafeString(input)) { | 65 | if (isSafeString(input)) { | ||
65 | auto ssObj = new ScriptableSafeString(m_scriptEngine); | 66 | auto ssObj = new ScriptableSafeString(m_scriptEngine); | ||
66 | ssObj->setContent(getSafeString(input)); | 67 | ssObj->setContent(getSafeString(input)); | ||
67 | args << m_scriptEngine->newQObject(ssObj); | 68 | args << m_scriptEngine->newQObject(ssObj); | ||
68 | } else if (input.canConvert<QObject *>()) { | 69 | } else if (input.canConvert<QObject *>()) { | ||
69 | args << m_scriptEngine->newQObject(input.value<QObject *>()); | 70 | args << m_scriptEngine->newQObject(input.value<QObject *>()); | ||
70 | } else { | 71 | } else { | ||
71 | args << m_scriptEngine->newVariant(input); | 72 | args << m_scriptEngine->toScriptValue(input); | ||
72 | } | 73 | } | ||
73 | } | 74 | } | ||
74 | 75 | | |||
75 | if (argument.userType() == qMetaTypeId<SafeString>()) { | 76 | if (argument.userType() == qMetaTypeId<SafeString>()) { | ||
76 | auto ssObj = new ScriptableSafeString(m_scriptEngine); | 77 | auto ssObj = new ScriptableSafeString(m_scriptEngine); | ||
77 | ssObj->setContent(getSafeString(argument)); | 78 | ssObj->setContent(getSafeString(argument)); | ||
78 | args << m_scriptEngine->newQObject(ssObj); | 79 | args << m_scriptEngine->newQObject(ssObj); | ||
79 | } else { | 80 | } else { | ||
80 | args << m_scriptEngine->newVariant(argument); | 81 | args << m_scriptEngine->toScriptValue(argument); | ||
81 | } | 82 | } | ||
82 | auto filterObject = m_filterObject; | 83 | auto filterObject = m_filterObject; | ||
83 | auto returnValue = filterObject.call(QScriptValue(), args); | 84 | auto returnValue = filterObject.call(args); | ||
85 | if (returnValue.isError()) | ||||
86 | throw Grantlee::Exception(UnknownFilterError, returnValue.toString()); | ||||
84 | 87 | | |||
85 | if (returnValue.isString()) { | 88 | if (returnValue.isString()) { | ||
86 | return getSafeString(returnValue.toString()); | 89 | return getSafeString(returnValue.toString()); | ||
87 | } else if (returnValue.isQObject()) { | 90 | } else if (returnValue.isQObject()) { | ||
88 | auto returnedObject = qscriptvalue_cast<QObject *>(returnValue); | 91 | auto returnedObject = qjsvalue_cast<QObject *>(returnValue); | ||
89 | auto returnedStringObject | 92 | auto returnedStringObject | ||
90 | = qobject_cast<ScriptableSafeString *>(returnedObject); | 93 | = qobject_cast<ScriptableSafeString *>(returnedObject); | ||
91 | if (!returnedStringObject) | 94 | if (!returnedStringObject) | ||
92 | return QVariant(); | 95 | return QVariant(); | ||
93 | auto returnedString = returnedStringObject->wrappedString(); | 96 | auto returnedString = returnedStringObject->wrappedString(); | ||
94 | return returnedString; | 97 | return returnedString; | ||
95 | } else if (returnValue.isVariant()) { | 98 | } else if (returnValue.isVariant()) { | ||
96 | return qscriptvalue_cast<QVariant>(returnValue); | 99 | return qjsvalue_cast<QVariant>(returnValue); | ||
97 | } else if (returnValue.isArray()) { | 100 | } else if (returnValue.isArray()) { | ||
98 | return qscriptvalue_cast<QVariantList>(returnValue); | 101 | return qjsvalue_cast<QVariantList>(returnValue); | ||
99 | } | 102 | } | ||
100 | return QVariant(); | 103 | return QVariant(); | ||
101 | } | 104 | } |