All Versions
309
Latest Version
Avg Release Cycle
12 days
Latest Release
655 days ago
Changelog History
Page 4
Changelog History
Page 4
-
v3.13.0 Changes
February 04, 2022โ Adds
- โ Additional requirements and related UI may be imposed on native ApostropheCMS logins using the new
requirements
feature, which can be extended in modules thatimprove
the@apostrophecms/login
module. These requirements are not imposed for single sign-on logins via@apostrophecms/passport-bridge
. See the documentation for more information. - โ Adds latest Slovak translation strings to SK.json in
i18n/
folder. Thanks to Michael Huna for the contribution. - ๐ Verifies
afterPasswordVerified
requirements one by one when emitting done event, allows to manage errors ans success before to go to the next requirement. Stores and validate each requirement in the token. Checks the newaskForConfirmation
requirement option to go to the next step when emitting done event or waiting for the confirm event (in order to manage success messages). Removes support forafterSubmit
for now.
๐ Fixes
- โ
Decodes the testReq
param
property inserveNotFound
. This fixes a problem where page titles using diacritics triggered false 404 errors. - 0๏ธโฃ Registers the default namespace in the Vue instance of i18n, fixing a lack of support for un-namespaced l10n keys in the UI.
- โ Additional requirements and related UI may be imposed on native ApostropheCMS logins using the new
-
v3.12.0 Changes
January 21, 2022โ Adds
- โ Adds latest Slovak translation strings to SK.json in
i18n/
folder - ๐ It is now best practice to deliver namespaced i18n strings as JSON files in module-level subdirectories of
i18n/
named to match the namespace, e.g.i18n/ourTeam
if the namespace isourTeam
. This allows base class modules to deliver phrases to any namespace without conflicting with those introduced at project level. Thei18n
option is now deprecated in favor of the newi18n
module format section, which is only needed ifbrowser: true
must be specified for a namespace. - ๐ง Brought back the
nestedModuleSubdirs
feature from A2, which allows modules to be nested in subdirectories ifnestedModuleSubdirs: true
is set inapp.js
. As in A2, module configuration (including activation) can also be grouped in amodules.js
file in such subdirectories.
๐ Fixes
- ๐ Fixes minor inline documentation comments.
- ๐ป UI strings that are not registered localization keys will now display properly when they contain a colon (
:
). These were previously interpreted as i18next namespace/key pairs and the "namespace" portion was left out. - ๐ Fixes a bug where changing the page type immediately after clicking "New Page" would produce a console error. In general, areas and checkboxes now correctly handle their value being changed to
null
by the parent schema after initial startup of theAposInputArea
orAposInputCheckboxes
component. - ๐ It is now best practice to deliver namespaced i18n strings as JSON files in module-level subdirectories of
i18n/
named to match the namespace, e.g.i18n/ourTeam
if the namespace isourTeam
. This allows base class modules to deliver phrases to any namespace without conflicting with those introduced at project level. Thei18n
option is now deprecated in favor of the newi18n
module format section, which is only needed ifbrowser: true
must be specified for a namespace. - โ Removes the
@apostrophecms/util
module template helperindexBy
, which was using a lodash method not included in lodash v4. - Removes an unimplemented
csrfExceptions
module section cascade. Use thecsrfExceptions
option of any module to set an array of URLs excluded from CSRF protection. More information is forthcoming in the documentation. - ๐ Fix
[Object Object]
in the console when warningA permission.can() call was made with a type that has no manager
is printed.
๐ Changes
- ๐ Temporarily removes
npm audit
from our automated tests because of a sub-dependency of vue-loader that doesn't actually cause a security vulnerability for apostrophe.
- โ Adds latest Slovak translation strings to SK.json in
-
v3.11.0 Changes
January 06, 2022โ Adds
- Apostrophe now extends Passport's
req.login
to emit anafterSessionLogin
event from the@apostrophecms:login
module, withreq
as an argument. Note that this does not occur at all for login API calls that return a bearer token rather than establishing an Express session.
๐ Fixes
- Apostrophe's extension of
req.login
now accounts for thereq.logIn
alias and the skippableoptions
parameter, which is relied upon in somepassport
strategies. - ๐ง Apostrophe now warns if a nonexistent widget type is configured for an area field, with special attention to when
-widget
has been erroneously included in the name. For backwards compatibility this is a startup warning rather than a fatal error, as sites generally did operate successfully otherwise with this type of bug present.
๐ Changes
- ๐ Unpins
vue-click-outside-element
the packaging of which has been fixed upstream. - โ Adds deprecation note to
__testDefaults
option. It is not in use, but removing would be a minor BC break we don't need to make. - ๐ Allows test modules to use a custom port as an option on the
@apostrophecms/express
module. - โ Removes the code base pull request template to instead inherit the organization-level template.
- โ Adds
npm audit
back to the test scripts.
- Apostrophe now extends Passport's
-
v3.10.0 Changes
December 22, 2021๐ Fixes
slug
type fields can now have an empty string ornull
as theirdef
value without the string'none'
populating automatically.- ๐ง The
underline
feature works properly in tiptap toolbar configuration. - Required checkbox fields now properly prevent editor submission when empty.
- ๐ Pins
vue-click-outside-element
to a version that does not attempt to useeval
in its distribution build, which is incompatible with a strict Content Security Policy.
โ Adds
- โ Adds a
last
option to fields. Settinglast: true
on a field puts that field at the end of the field's widget order. If more than one field has that option active the true last item will depend on general field registration order. If the field is ordered with thefields.order
array or field group ordering, those specified orders will take precedence.
๐ Changes
- โ Adds deprecation notes to the widget class methods
getWidgetWrapperClasses
andgetWidgetClasses
from A2. - โ Adds a deprecation note to the
reorganize
query builder for the next major version. - ๐ Uses the runtime build of Vue. This has major performance and bundle size benefits, however it does require changes to Apostrophe admin UI apps that use a
template
property (components should require no changes, just apps require an update). These apps must now use arender
function instead. Since custom admin UI apps are not yet a documented feature we do not regard this as a bc break. - ๐ Compatible with the
@apostrophecms/security-headers
module, which supports a strictContent-Security-Policy
. - โ Adds a deprecation note to the
addLateCriteria
query builder. - โก๏ธ Updates the
toCount
doc type query method to use Math.ceil rather than Math.floor plus an additional step.
-
v3.9.0 Changes
December 08, 2021โ Adds
- ๐ Developers can now override any Vue component of the ApostropheCMS admin UI by providing a component of the same name in the
ui/apos/components
folder of their own module. This is not always the best approach, see the documentation for details. - ๐ท When running a job, we now trigger the notification before to run the job, this way the progress notification ID is available from the job and the notification can be dismissed if needed.
- โ Adds
maxUi
,maxLabel
,minUi
, andminLabel
localization strings for array input and other UI.
๐ Fixes
- ๐ Fully removes references to the A2
self.partial
module method. It appeared only once outside of comments, but was not actually used by the UI. Theself.render
method should be used for simple template rendering. - ๐ Fixes string interpolation for the confirmation modal when publishing a page that has an unpublished parent page.
- No more "cannot set headers after they are sent to the client" and "req.res.redirect not defined" messages when handling URLs with extra trailing slashes.
- ๐ The
apos.util.runPlayers
method is not called until all of the widgets in a particular tree of areas and sub-areas have been added to the DOM. This means a parent area widget player will see the expected markup for any sub-widgets when the "Edit" button is clicked. - ๐ Properly activates the
apostropheI18nDebugPlugin
i18next debugging plugin when using theAPOS_SHOW_I18N
environment variable. The full set of l10n emoji indicators previously available for the UI is now available for template and server-side strings. - Actually registers piece types for site search unless the
searchable
option isfalse
. - ๐ Fixes the methods required for the search
index
task.
๐ Changes
- โ Adds localization keys for the password field component's min and max error messages.
- ๐ Developers can now override any Vue component of the ApostropheCMS admin UI by providing a component of the same name in the
-
v3.8.1 Changes
November 23, 2021๐ Fixes
- The search field of the pieces manager modal works properly. Thanks to Miro Yovchev for pointing out the issue and providing a solution.
- ๐ Fixes a bug in
AposRichTextWidgetEditor.vue
when a rich text widget was specifically configured with an empty array as thestyles
option. In that case a new empty rich text widget will initiate with an empty paragraph tag. - The
fieldsPresent
method that is used with thepresentFieldsOnly
option in doc-type was broken, looking for properties in strings and wasn't returning anything.
-
v3.8.0 Changes
November 15, 2021โ Adds
- Checkboxes for pieces are back, a main checkbox allows to select all page items. When all pieces on a page are checked, a banner where the user can select all pieces appears. A launder for mongo projections has been added.
- ๐
Registered
batchOperations
on a piece-type will now become buttons in the manager batch operations "more menu" (styled as a kebab icon). Batch operations should include a label,messages
object, andmodalOptions
for the confirmation modal. batchOperations
can be grouped into a single button with a menu using thegroup
cascade subproperty.batchOperations
can be conditional with anif
conditional object. This allows developers to pass a single value or an array of values.- ๐ง Piece types can have
utilityOperations
configured as a top-level cascade property. These operations are made available in the piece manager as new buttons. - Notifications may now include an
event
property, which the AposNotification component will emit on mount. Theevent
property should be set to an object withname
(the event name) and optionallydata
(data included with the event emission). - โ Adds support for using the attachments query builder in REST API calls via the query string.
- โ Adds contextual menu for pieces, any module extending the piece-type one can add actions in this contextual menu.
- When clicking on a batch operation, it opens a confirmation modal using modal options from the batch operation, it also works for operations in grouped ones. operations name property has been renamed in action to work with AposContextMenu component.
- ๐ Beginning with this release, a module-specific static asset in your project such as
modules/mymodulename/public/images/bg.png
can always be referenced in your.scss
and.css
files as/modules/mymodulename/images/bg.png
, even if assets are actually being deployed to S3, CDNs, etc. Note thatpublic
andui/public
module subdirectories have separate functions. See the documentation for more information. - โ Adds AposFile.vue component to abstract file dropzone UI, uses it in AposInputAttachment, and uses it in the confirmation modal for pieces import.
- โก๏ธ Optionally add
dimensionAttrs
option to image widget, which sets width & height attributes to optimize for Cumulative Layout Shift. Thank you to Qiao Lin for the contribution.
๐ Fixes
- ๐ป The
apos.util.attachmentUrl
method now works correctly. To facilitate that,apos.uploadsUrl
is now populated browser-side at all times as the frontend logic originally expected. For backwards compatibilityapos.attachment.uploadsUrl
is still populated when logged in. - Widget players are now prevented from being played twice by the implementing vue component.
๐ Changes
- โ Removes Apostrophe 2 documentation and UI configuration from the
@apostrophecms/job
module. These options were not yet in use for A3. - ๐ Renames methods and removes unsupported routes in the
@apostrophecms/job
module that were not yet in use. This was not done lightly, but specifically because of the minimal likelihood that they were in use in project code given the lack of UI support.- The deprecated
cancel
route was removed and will likely be replaced at a later date. run
was renamedrunBatch
as its purpose is specifically to run processes on a "batch selected" array of pieces or pages.runNonBatch
was renamed torun
as it is the more generic job-running method. It is likely thatrunBatch
will eventually be refactored to use this method.- The
good
andbad
methods are renamedsuccess
andfailure
, respectively. The expected methods used in therun
method were similarly renamed. They still increment job document properties calledgood
andbad
.
- The deprecated
- Comments out the unused
batchSimpleRoute
methods in the page and piece-type modules to avoid usage before they are fully implemented. - โก๏ธ Optionally add
dimensionAttrs
option to image widget, which sets width & height attributes to optimize for Cumulative Layout Shift. - ๐ Temporarily removes
npm audit
from our automated tests because of a sub-dependency of uploadfs that doesn't actually cause a security vulnerability for apostrophe.
-
v3.7.0 Changes
October 26, 2021โ Adds
- Schema select field choices can now be populated by a server side function, like an API call. Set the
choices
property to a method name of the calling module. That function should take a single argument ofreq
, and return an array of objects withlabel
andvalue
properties. The function can be async and will be awaited. - Apostrophe now has built-in support for the Node.js cluster module. If the
APOS_CLUSTER_PROCESSES
environment variable is set to a number, that number of child processes are forked, sharing the same listening port. If the variable is set to0
, one process is forked for each CPU core, with a minimum of2
to provide availability during restarts. If the variable is set to a negative number, that number is added to the number of CPU cores, e.g.-1
is a good way to reserve one core for MongoDB if it is running on the same server. This is for production use only (NODE_ENV=production
). If a child process fails it is restarted automatically.
๐ Fixes
- ๐ป Prevents double-escaping interpolated localization strings in the UI.
- ๐ Rich text editor style labels are now run through a localization method to get the translated strings from their l10n keys.
- ๐ Fixes README Node version requirement (Node 12+).
- ๐ The text alignment buttons now work immediately in a new rich text widget. Previously they worked only after manually setting a style or refreshing the page. Thanks to Michelin for their support of this fix.
- ๐ป Users can now activate the built-in date and time editing popups of modern browsers when using the
date
andtime
schema field types. - Developers can now
require
their projectapp.js
file in the Node.js REPL for debugging and inspection. Thanks to Matthew Francis Brunetti. - 0๏ธโฃ If a static text phrase is unavailable in both the current locale and the default locale, Apostrophe will always fall back to the
en
locale as a last resort, which ensures the admin UI works if it has not been translated. - Developers can now
require
their projectapp.js
in the Node.js REPL for debugging and inspection - Ensure array field items have valid _id prop before storing. Thanks to Thanks to Matthew Francis Brunetti.
๐ Changes
- ๐ In 3.x,
relationship
fields have an optionalbuilders
property, which replacesfilters
from 2.x, and within that an optionalproject
property, which replacesprojection
from 2.x (to match MongoDB'scursor.project
). Prior to this release leaving the old syntax in place could lead to severe performance problems due to a lack of projections. Starting with this release the 2.x syntax results in an error at startup to help the developer correct their code. - The
className
option from the widget options in a rich text area field is now also applied to the rich text editor itself, for a consistently WYSIWYG appearance when editing and when viewing. Thanks to Max Mulatz for this contribution. - โ Adds deprecation notes to doc module
afterLoad
events, which are deprecated. - โ Removes unused
afterLogin
method in the login module.
- Schema select field choices can now be populated by a server side function, like an API call. Set the
-
v3.6.0 Changes
October 13, 2021โ Adds
- ๐ป The
context-editing
apostrophe admin UI bus event can now take a boolean parameter, explicitly indicating whether the user is actively typing or performing a similar active manipulation of controls right now. If a boolean parameter is not passed, the existing 1100-millisecond debounced timeout is used. - โ Adds 'no-search' modifier to relationship fields as a UI simplification option.
- Fields can now have their own
modifiers
array. This is combined with the schema modifiers, allowing for finer grained control of field rendering. - โ Adds a Slovak localization file. Activate the
sk
locale to use this. Many thanks to Michael Huna for the contribution. - โ Adds a Spanish localization file. Activate the
es
locale to use this. Many thanks to Eugenio Gonzalez for the contribution. - โ Adds a Brazilian Portuguese localization file. Activate the
pt-BR
locale to use this. Many thanks to Pietro Rutzen for the contribution.
๐ Fixes
- ๐ Fixed missing translation for "New Piece" option on the "more" menu of the piece manager, seen when using it as a chooser.
- ๐ง Piece types with relationships to multiple other piece types may now be configured in any order, relative to the other piece types. This sometimes appeared to be a bug in reverse relationships.
- Code at the project level now overrides code found in modules that use
improve
for the same module name. For example, options set by the@apostrophecms/seo-global
improvement that ships with@apostrophecms/seo
can now be overridden at project level by/modules/@apostrophecms/global/index.js
in the way one would expect. - Array input component edit button label is now propertly localized.
- ๐ A memory leak on each request has been fixed, and performance improved, by avoiding the use of new Nunjucks environments for each request. Thanks to Miro Yovchev for pointing out the leak.
- Fragments now have access to
__t()
,getOptions
and other features passed to regular templates. - ๐ Fixes field group cascade merging, using the original group label if none is given in the new field group configuration.
- If a field is conditional (using an
if
option), is required, but the condition has not been met, it no longer throws a validation error. - ๐ป Passing
busy: true
toapos.http.post
and related methods no longer produces an error if invoked when logged out, however note that there will likely never be a UI for this when logged out, so indicate busy state in your own way. - ๐ Bugs in document modification detection have been fixed. These bugs caused edge cases where modifications were not detected and the "Update" button did not appear, and could cause false positives as well.
๐ Changes
- โ
No longer logs a warning about no users if
testModule
is true on the app.
- ๐ป The
-
v3.5.0 Changes
September 23, 2021- ๐ Pinned dependency on
vue-material-design-icons
to fixapos-build.js
build error in production. - The file size of uploaded media is visible again when selected in the editor, and media information such as upload date, dimensions and file size is now properly localized.
- ๐ Fixes moog error messages to reflect the recommended pattern of customization functions only taking
self
as an argument. - ๐
Rich Text widgets now instantiate with a valid element from the
styles
option rather than always starting with an unclassed<p>
tag. - ๐ Since version 3.2.0, apostrophe modules to be loaded via npm must appear as explicit npm dependencies of the project. This is a necessary security and stability improvement, but it was slightly too strict. Starting with this release, if the project has no
package.json
in its root directory, thepackage.json
in the closest ancestor directory is consulted. - ๐ Fixes a bug where having no project modules directory would throw an error. This is primarily a concern for module unit tests where there are no additional modules involved.
- ๐ฑ
css-loader
now ignoresurl()
in css files insideassets
so that paths are left intact, i.e.url(/images/file.svg)
will now find a static file at/public/images/file.svg
(static assets in/public
are served byexpress.static
). Thanks to Matic Tersek. - โช Restored support for clicking on a "foreign" area, i.e. an area displayed on the page whose content comes from a piece, in order to edit it in an appropriate way.
- ๐ง Apostrophe module aliases and the data attached to them are now visible immediately to
ui/src/index.js
JavaScript code, i.e. you can writeapos.alias
wherealias
matches thealias
option configured for that module. Previously one had to writeapos.modules['module-name']
or wait until next tick. However, note that most modules do not push any data to the browser when a user is not logged in. You can do so in a custom module by callingself.enableBrowserData('public')
frominit
and implementing or extending thegetBrowserData(req)
method (note that page, piece and widget types already have one, so it is important to extend in those cases). - โ
options.testModule
works properly when implementing unit tests for an npm module that is namespaced.
๐ Changes
- 0๏ธโฃ Cascade grouping (e.g., grouping fields) will now concatenate a group's field name array with the field name array of an existing group of the same name. Put simply, if a new piece module adds their custom fields to a
basics
group, that field will be added to the defaultbasics
group fields. Previously the new group would have replaced the old, leaving inherited fields in the "Ungrouped" section. - AposButton's
block
modifier now less login-specific
โ Adds
- ๐
Rich Text widget's styles support a
def
property for specifying the default style the editor should instantiate with. - A more helpful error message if a field of type
area
is missing itsoptions
property.
- ๐ Pinned dependency on