- “Promise events” have arrived. This is a major feature. Promise events will completely
replacecallAll
in Apostrophe 3.x. For 2.x, all existing invocations ofcallAll
in the
core Apostrophe module now also emit a promise event. For instance, when thedocBeforeInsert
callAll method is invoked, Apostrophe also emits thebeforeInsert
promise event on the
apostrophe-docs` module.
Other modules may listen for this event by writing code like this:
self.on('apostrophe-docs:beforeInsert', 'chooseASpecialist', function(req, doc, options) {
// Modify `doc` here. You may return a promise, and it will resolve before
// any more handlers run. Then the doc is inserted
});
The above code adds a new chooseASpecialist
method to your module. This way, the method can be overridden by assigning a new function to self.chooseASpecialist
in a module that
extends it, or its behavior can be extended in the usual way following the super
pattern.
But, since it does not have the same name as
the event (attempting to register a method of the same name will throw an error), it is unlikely
that parent class modules and subclass modules will have unintentional conflicts.
See the original github issue for a more complete description of the feature and the reasoning behind it.
Your existing callAll methods will still work. But, we recommend you start migrating to be
ready to move to 3.x in the future… and because returning promises is just a heck of
a lot nicer. You will have fewer problems.
- Optional SVG support for
apostrophe-images
. To enable it, set thesvgImages
option to
true
when configuring theapostrophe-images
module. SVG files can be uploaded just like
other image types. Manual cropping is not available. However, since most SVG files play very well
with backgrounds, the SVG file is displayed in its entirety without distortion at the largest size
that fits within the aspect ratio of the widget in question, if any (background-size: contain
is used). if you have overriddenwidget.html
forapostrophe-images-widgets
, you will want
to refer to the latest version ofwidgetBase.html
for the technique we used here to ensure
SVG files do not break the slideshow’s overall height. - New
apos.templates.prepend
andapos.templates.append
methods. Call
apos.templates.prepend('head', function(req) { ... })
to register a function to be called just after
the head tag is opened each time a page is rendered. The output of your function is inserted into
the markup. The standard named locations arehead
,body
,contextMenu
andmain
. This is
convenient when writing modules that add new features to Apostrophe. For project level work also see the
named Nunjucks blocks already provided inouterLayoutBase.html
. -
apos.singleton
now accepts anareaOptions
option, which can receive any option that can be
passed toapos.area
. Thanks to Manoj Krishnan. - Apostrophe’s “projector” jQuery plugin now respects the
outerHeight
of the tallest slideshow item,
not just the inner height. -
apos.area
now accepts anaddLabel
option for each widget type in the area. Thanks to
Fredrik Ekelund. - UI improvements to versioning. Thanks to Lars Houmark.
- Button to revert to the current version has been replaced with a label indicating it is current,
since reverting to the current version has no effect. - “Page settings” can now be accessed for any page in the trash via “reorganize.” When
working withapostrophe-workflow
, this is
often required to commit the fact that a page is in the trash. - The
uploadfs
module now has aprefix
option. If present, the prefix is prepended to all uploadfs paths before they reach the storage layer, and is also prepended to URLs. In practice, this means that a single S3 bucket can be used to host multiple sites without all of the uploaded media jumbling together in/attachments
. Theapostrophe-multisite
module now leverages this.