cutelyst
4.5.1
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
|
A view that renders templates using Cutelee engine. More...
#include <Cutelyst/Plugins/View/Cutelee/cuteleeview.h>
Signals | |
void | changed () |
Public Member Functions | |
CuteleeView (QObject *parent=nullptr, const QString &name=QString()) | |
void | addTranslationCatalog (const QString &path, const QString &catalog) |
void | addTranslationCatalogs (const QMultiHash< QString, QString > &catalogs) |
void | addTranslator (const QLocale &locale, QTranslator *translator) |
void | addTranslator (const QString &locale, QTranslator *translator) |
Cutelee::Engine * | engine () const |
QStringList | includePaths () const |
bool | isCaching () const |
QVector< QLocale > | loadTranslationsFromDir (const QString &filename, const QString &directory, const QString &prefix=QStringLiteral("."), const QString &suffix=QStringLiteral(".qm")) |
void | preloadTemplates () |
QByteArray | render (Context *c) const override final |
void | setCache (bool enable) |
void | setIncludePaths (const QStringList &paths) |
void | setTemplateExtension (const QString &extension) |
void | setWrapper (const QString &name) |
QString | templateExtension () const |
QString | wrapper () const |
Public Member Functions inherited from Cutelyst::View | |
View (QObject *parent, const QString &name) | |
virtual | ~View () override=default |
Modifiers | modifiers () const override |
void | setMinimalSizeToDeflate (qint32 minSize=-1) |
Public Member Functions inherited from Cutelyst::Component | |
Component (QObject *parent=nullptr) | |
virtual | ~Component () override |
bool | execute (Context *c) |
virtual bool | init (Application *application, const QVariantHash &args) |
QString | name () const noexcept |
QString | reverse () const noexcept |
void | setName (const QString &name) |
void | setReverse (const QString &reverse) |
Public Member Functions inherited from QObject | |
QObject (QObject *parent) | |
QBindable< QString > | bindableObjectName () |
bool | blockSignals (bool block) |
const QObjectList & | children () const const |
QMetaObject::Connection | connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const |
void | deleteLater () |
void | destroyed (QObject *obj) |
bool | disconnect (const char *signal, const QObject *receiver, const char *method) const const |
bool | disconnect (const QObject *receiver, const char *method) const const |
void | dumpObjectInfo () const const |
void | dumpObjectTree () const const |
QList< QByteArray > | dynamicPropertyNames () const const |
virtual bool | event (QEvent *e) |
virtual bool | eventFilter (QObject *watched, QEvent *event) |
T | findChild (const QString &name, Qt::FindChildOptions options) const const |
QList< T > | findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const |
QList< T > | findChildren (const QString &name, Qt::FindChildOptions options) const const |
QList< T > | findChildren (Qt::FindChildOptions options) const const |
bool | inherits (const char *className) const const |
void | installEventFilter (QObject *filterObj) |
bool | isQuickItemType () const const |
bool | isWidgetType () const const |
bool | isWindowType () const const |
void | killTimer (int id) |
virtual const QMetaObject * | metaObject () const const |
void | moveToThread (QThread *targetThread) |
QString | objectName () const const |
void | objectNameChanged (const QString &objectName) |
QObject * | parent () const const |
QVariant | property (const char *name) const const |
Q_CLASSINFO (Name, Value) | |
Q_EMIT Q_EMIT | |
Q_ENUM (...) | |
Q_ENUM_NS (...) | |
Q_ENUMS (...) | |
Q_FLAG (...) | |
Q_FLAG_NS (...) | |
Q_FLAGS (...) | |
Q_GADGET Q_GADGET | |
Q_GADGET_EXPORT (EXPORT_MACRO) | |
Q_INTERFACES (...) | |
Q_INVOKABLE Q_INVOKABLE | |
Q_MOC_INCLUDE Q_MOC_INCLUDE | |
Q_NAMESPACE Q_NAMESPACE | |
Q_NAMESPACE_EXPORT (EXPORT_MACRO) | |
Q_OBJECT Q_OBJECT | |
Q_PROPERTY (...) | |
Q_REVISION Q_REVISION | |
Q_SET_OBJECT_NAME (Object) | |
Q_SIGNAL Q_SIGNAL | |
Q_SIGNALS Q_SIGNALS | |
Q_SLOT Q_SLOT | |
Q_SLOTS Q_SLOTS | |
T | qobject_cast (const QObject *object) |
T | qobject_cast (QObject *object) |
QT_NO_NARROWING_CONVERSIONS_IN_CONNECT QT_NO_NARROWING_CONVERSIONS_IN_CONNECT | |
void | removeEventFilter (QObject *obj) |
void | setObjectName (const QString &name) |
void | setObjectName (QAnyStringView name) |
void | setParent (QObject *parent) |
bool | setProperty (const char *name, const QVariant &value) |
bool | setProperty (const char *name, QVariant &&value) |
bool | signalsBlocked () const const |
int | startTimer (int interval, Qt::TimerType timerType) |
int | startTimer (std::chrono::milliseconds interval, Qt::TimerType timerType) |
QThread * | thread () const const |
Properties | |
bool | cache |
QStringList | includePaths |
QString | templateExtension |
QString | wrapper |
Properties inherited from QObject | |
objectName | |
Additional Inherited Members | |
Public Types inherited from Cutelyst::Component | |
enum | Modifier { None , OnlyExecute , BeforeExecute , AroundExecute , AfterExecute } |
Static Public Member Functions inherited from QObject | |
QMetaObject::Connection | connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type) |
QMetaObject::Connection | connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type) |
QMetaObject::Connection | connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type) |
QMetaObject::Connection | connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type) |
QMetaObject::Connection | connect (const QObject *sender, PointerToMemberFunction signal, Functor functor) |
bool | disconnect (const QMetaObject::Connection &connection) |
bool | disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method) |
bool | disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method) |
bool | disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method) |
QString | tr (const char *sourceText, const char *disambiguation, int n) |
Public Attributes inherited from QObject | |
typedef | QObjectList |
Protected Member Functions inherited from Cutelyst::View | |
View (ViewPrivate *d, QObject *parent, const QString &name) | |
Protected Member Functions inherited from Cutelyst::Component | |
Component (ComponentPrivate *d, QObject *parent=nullptr) | |
virtual bool | afterExecute (Context *c) |
void | applyRoles (const QStack< Component * > &roles) |
virtual bool | aroundExecute (Context *c, QStack< Component * > stack) |
virtual bool | beforeExecute (Context *c) |
virtual bool | dispatcherReady (const Dispatcher *dispatch, Controller *controller) |
Protected Member Functions inherited from QObject | |
virtual void | childEvent (QChildEvent *event) |
virtual void | connectNotify (const QMetaMethod &signal) |
virtual void | customEvent (QEvent *event) |
virtual void | disconnectNotify (const QMetaMethod &signal) |
bool | isSignalConnected (const QMetaMethod &signal) const const |
int | receivers (const char *signal) const const |
QObject * | sender () const const |
int | senderSignalIndex () const const |
virtual void | timerEvent (QTimerEvent *event) |
The CuteleeView is a view handler that renders templates using the Cutelee engine. It loads template files from the included paths and populates them with stash values.
The view should be initialized in you reimplementation of Application::init(), it can than be easily called from a RenderView action. You can specify a name for your view that can be either set dynamically via Context::setCustomView() or via the :View("name")
argument of the RenderView action. A view with an empty name will be the default view.
The view will try to find the template file name to render in the stash using the "template"
key. If that key is not available, it will try to find a template named after the private name of the current action.
Beside the tags included in Cutelee, Cutelyst provides some own tags:
This tag uses Context::uriFor() to create an URL for a specific path populated with arguments and optional query parameters. Path is the only required argument for the tag, the QUERY keyword must preceed query parameters.
{% c_uri_for "/path" "arg1" "arg2" QUERY "foo=bar" c.req.queryParams %}
This tag creates a hidden HTML form input field containing a CSRF protection token generated by CSRFProtection::getTokenFormField(). It has no parameters and should be used inside form tags.
{% c_csrf_token %}
This tag writes the current CSRF token as returned by CSRFProtection::getToken(). This can be useful if you only need the token value instead of a complete form field to use it for example in a meta tag for access with JavaScript.
{% c_csrf_token_value %}
Initialize the view in your reimplementation of Application::init():
Load the view with a RenderView action on for example the End() method of your root controller:
Inside the implementation of the index method from above we now set the name of the template file to use:
Definition at line 138 of file cuteleeview.h.
|
explicit |
Constructs a CuteleeView object with the given parent and name.
The name can be used to specify different views that can be called either dynamically by Context::setCustomView() or with the :View("name")
argument of the RenderView action.
Definition at line 33 of file cuteleeview.cpp.
References QDir::currentPath(), QObject::parent(), and setIncludePaths().
Dynamically adds translation catalog at path to the translator.
Translation catalogs can be used to dynamically integrate translations into the CuteleeView, for example for plugins and themes. The catalog could be the name of an extension for example that is loaded from a locale specifc directory under path.
The catalog will be loaded in the following way: /path/locale/catalog, for example /usr/share/mycutelystapp/l10n/de_DE/fancytheme
.qm. The current locale is defined by Context::locale() when rendering the theme. The path /usr/share/myapp/l10n
would then contain locale specific subdirectories like de_DE, pt_BR, etc. that contain the translation files named by catalog.
Definition at line 262 of file cuteleeview.cpp.
References QString::isEmpty().
void CuteleeView::addTranslationCatalogs | ( | const QMultiHash< QString, QString > & | catalogs | ) |
Adds a dictionary of translation catalogs and paths to the translator.
The key of the QHash is the name of the catalog, the value is the path. See addTranslationCatalog() for more information about translation catalogs.
Definition at line 270 of file cuteleeview.cpp.
void CuteleeView::addTranslator | ( | const QLocale & | locale, |
QTranslator * | translator | ||
) |
Adds a translator for the specified locale to the list of translators.
It is mostly easier to use loadTranslationsFromDir() to load all available translations in a bunch.
Definition at line 250 of file cuteleeview.cpp.
Referenced by addTranslator(), and loadTranslationsFromDir().
void CuteleeView::addTranslator | ( | const QString & | locale, |
QTranslator * | translator | ||
) |
Adds a translator for the specified locale to the list of translators.
The locale string should be parseable by QLocale.
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 257 of file cuteleeview.cpp.
References addTranslator().
Cutelee::Engine * CuteleeView::engine | ( | ) | const |
Returns the Cutelee::Engine pointer that is used by this engine.
Definition at line 127 of file cuteleeview.cpp.
QStringList CuteleeView::includePaths | ( | ) | const |
Returns the list of include paths.
Definition at line 65 of file cuteleeview.cpp.
bool CuteleeView::isCaching | ( | ) | const |
Returns true
if caching is enabled.
Definition at line 161 of file cuteleeview.cpp.
Referenced by preloadTemplates().
QVector< QLocale > CuteleeView::loadTranslationsFromDir | ( | const QString & | filename, |
const QString & | directory, | ||
const QString & | prefix = QStringLiteral(".") , |
||
const QString & | suffix = QStringLiteral(".qm") |
||
) |
Loads translations for a specific filename
from a single directory and returns a list of added locales.
This can be used to load translations for a template if the translation file names follow a common schema. Let us assume you organised your translation files as follows:
/usr/share/myapp/translations/mytemplate_de
.qm /usr/share/myapp/translations/mytemplate_pt_BR
.qm
...You can then use loadTranslationsFromDir() on your registered CuteleeView object as follows:
prefix
is the part between the file name and the locale part. In the example above it is "_"
, if it is not set the default "."
will be used. The suffix
is the file name suffix that defaults to ".qm"
.
Definition at line 277 of file cuteleeview.cpp.
References addTranslator(), QList::append(), QLocale::C, QDir::entryInfoList(), QDir::exists(), QDir::Files, QString::indexOf(), QString::isEmpty(), QLocale::language(), QString::length(), QString::mid(), QList::reserve(), and QList::squeeze().
void CuteleeView::preloadTemplates | ( | ) |
When called, setCache() is set to true
and templates are loaded.
Definition at line 133 of file cuteleeview.cpp.
References QDir::Files, isCaching(), QDir::NoDotAndDotDot, QString::remove(), setCache(), QString::startsWith(), and QDirIterator::Subdirectories.
|
finaloverridevirtual |
All subclasses must reimplement this when doing it's rendering. If an error (c->error()) is not set c->response()->body() is defined with the returned value, this is useful if the view is not meant to be used as a body.
Implements Cutelyst::View.
Definition at line 167 of file cuteleeview.cpp.
References Cutelyst::Context::action, Cutelyst::Context::appendError(), QVariant::fromValue(), QString::isEmpty(), Cutelyst::Context::locale(), Cutelyst::Context::qtTrId(), QString::remove(), Cutelyst::Context::res(), Cutelyst::Component::reverse(), Cutelyst::Response::setBody(), Cutelyst::Context::setStash(), QString::startsWith(), Cutelyst::Context::stash(), and QString::toUtf8().
void CuteleeView::setCache | ( | bool | enable | ) |
Sets if template caching should be done, this increases performance at the cost of higher memory usage.
Definition at line 105 of file cuteleeview.cpp.
References QObject::Q_EMIT().
Referenced by preloadTemplates().
void CuteleeView::setIncludePaths | ( | const QStringList & | paths | ) |
Sets the list of include paths which will be looked for when resolving templates files.
Definition at line 71 of file cuteleeview.cpp.
References QObject::Q_EMIT().
Referenced by CuteleeView().
void CuteleeView::setTemplateExtension | ( | const QString & | extension | ) |
Sets the template extension, defaults to ".html".
Definition at line 85 of file cuteleeview.cpp.
References QObject::Q_EMIT().
void CuteleeView::setWrapper | ( | const QString & | name | ) |
Sets the template wrapper name, the template will be rendered into content variable in which the wrapper template should render.
Definition at line 98 of file cuteleeview.cpp.
References Cutelyst::Component::name(), and QObject::Q_EMIT().
QString CuteleeView::templateExtension | ( | ) | const |
Returns the template extension, defaults to ".html".
Definition at line 79 of file cuteleeview.cpp.
QString CuteleeView::wrapper | ( | ) | const |