Attention: If you skipped one or more releases, please also check the release-notes of the skipped ones.
Newsletter
- Subscribe here: https://confirmsubscription.com/h/j/61B064416E79453D
Webinar
Features
Developers
System Requirements
Suggested
Name | Version |
---|---|
Node | 14 |
NPM | 7 |
Postgres | 13 |
Elasticsearch | 7 |
Redis | 6 |
Livingdocs Server Docker Image | livingdocs/server-base:14.3 |
Livingdocs Editor Docker Image | livingdocs/editor-base:14.3 |
Minimal
Name | Version |
---|---|
Node | 12 |
NPM | 7 |
Postgres | 9.6 |
Elasticsearch | 6.x |
Redis | 5 |
Livingdocs Server Docker Image | livingdocs/server-base:12.5 |
Livingdocs Editor Docker Image | livingdocs/editor-base:12.2 |
Highlights
Media Library - Upload Center
When the user uploads images or videos, a new Upload Center is visible in the bottom right corner of the editor screen allowing the users to continue their work in the document while assets are uploaded in parallel in the background. If an error with any of the uploads happens it is shown and logged in the upload center.
References: Editor PR
Media Library - Media Sources π
Allow to connect/integrate external asset services (e.g. Unsplash, Shutterstock, Pixabay, …) as a Media Source in the Livingdocs Media Library. Working with a Media Source in Livingdocs feels the same as working with other assets of the Media Library. The examples from the Livingdocs core all include free open source platforms, but of course one could also use media sources to integrate external DAM systems that might already be present in a publishers system landscape and by that consolidate the asset workflow for the journalists into Livingdocs.
References:
Media Library - Index/Filter π
The media library dashboard has now the same search and filter capabilites as the documents dashboard. Define which media library metadata are indexed and define dashboard filter for all metadata.
References:
- Server PR
- Documentation plugin
- Documentation mediaTypes
- Documentation baseFilters
- Documentation custom Display Filter
Media Library - Videos π
With this release we extend the videos integration in the Media Library with new features:
- Define a poster image for videos
- Add configuration for video storage
- Several performance improvements
Shortcomings
Even when you are able to use videos in production, there are some shortcomings we want to share with you:
- There is no video service available (comparable with image services for images), the consequences are
- The video tag uses the public url of the storage
- Your video storage has to be public (or you don’t see videos in the editor)
- You have to render the document JSON with the video content on your own, otherwise the storage URL must be public in your delivery
Please get in touch if you want to integrate a transcoding pipeline or a video service.
References:
Named Crops π
The Named Crops feature supports multiple crops per image in a document. This allows to preset crops on the source images in the Media Library and on demand overwrite those crops on the image inside an article. Also, the API now provides several crops per image as defined in the named crops settings.
References:
Notifications
Notifications allow a user to subscribe to specific events of a document (e.g. a publish) and notifies this user via mail/slack when this event happens. Currently we support notification of task changes to the task requester and notification of document status changes to the document author.
References:
Simplify Setup of Article Teasers
A simpler way to setup Article Teasers is introduced. It is based on Includes and the possiblity to define the UI with a paramsSchema
instead of writing code.
References:
Multi Cluster Indexing π
There are a bunch of new features for indexing
- Support multiple Elasticsearch clusters during indexing
- Add config to enable/disable consumers (e.g. to disable consumers for a delivery instance)
- Custom indexes can target a specific Elasticsearch cluster
- Improved error handling
References:
- Multi Cluster Indexing Preparation - I
- Multi Cluster Indexing Preparation - II
- Multi Cluster Indexing
- Support Disabling Elasticsearch Clusters
- Improve CLI Help for Indexing
- Documentation
Tracing π
We’ve added tracing support in the server based on opentelemetry.
References:
Support Deep Links in Multi Project Environments π
We changed editor urls to contain the project handle so links work reliably in multi-project setups. This is the new pattern - https://0.0.0.0:9000/p/<your-project-handle>/articles/<article-id>
References:
Admin UI - Extend Indexing UI to Support all Configured Indexes π
A server admin can now reindex every existing index.
References:
Support OpenID Connect for SSO
We support now OpenID Connect for a SSO connection. This allows customers to setup 2-factor authentication and external group management.
References:
Breaking Changes π₯
This time we have a rather high amount of breaking changes, therefore we grouped the breaking changes into different sections:
- Post Deployment
- Breaking Changes - Public API
- Breaking Changes - Server + Editor
- Breaking Changes - Server
- Breaking Changes - Editor
Post Deployment π₯
π₯ Attention, in this release we clean up some data structures to have better options for the future. This section contains tasks you have to do after the deployment was successful and the new version is running properly.
Revision Migration (post deployment) π₯
We changed the doc-link
and doc-html
directives to be objects instead of strings (see here to compare the π₯ old/new format).
After the deployment (when everything is running fine again) you should run the task π₯ npx livingdocs-server revision-migration -t doc-link-and-doc-html -y
. This migrates all old revisions to use the new data format.
The default revision migration is quite slow and can be run in production without any impact. The revision migration should be run through all stages of deployment (dev, stage, prod). If you want to choose a more agressive approach outside of business hours, you can change the scheduler settings in the server config.
// server config for a more agressive but more performant approach (should not be done during business hours)
documentMigration: {
scheduler: {
batchSize: 100, // default: 100
concurrency: 10, // default: 1
}
}
}
π₯ Please make sure that all code that consumes Livingdocs (web frontend, native apps, etc.) support π₯ both formats and are still working as expected.
References:
- Revision Migration Framework
- doc-link and doc-html Migration
- Set sane defaults for the Revision Migration
Migrate References (post deployment) π₯
As described in the APIs section, we extend some endpoints (public API + server API) with reference information of a document. Old document references need to be converted into the new format with a manual db migration.
After the release, execute the manual db migration node ./node_modules/@livingdocs/server/db/manual-migrations/006-generate-references --concurrency=5
. If you have issues with memory, you can reduce the concurrency and it’s also possible to run the script multiple times.
These are the key changes/issues
- It’s a database heavy operation and should be executed outside business time (when having a lot of documents)
- The migration removes references from document revisions and stores them per document instead
- The migration generates references on all publications
References: Server PR
CLI Script to Fix Group Memberships (post deployment) π₯
We’re having some customers running an old state of the groups tables which got partially corrupted by some old user merge logic that we’ve fixed about a year ago. The new release-2021-03-fix-group-memberships
command fixes those tables completely.
- π₯ Run
npx livingdocs-server release-2021-03-fix-group-memberships
to fix corrupt membership data
References:
Breaking Changes - Public API π₯
Webhook Payload Change (publish/unpublish) π₯
- π₯ Document publish webhook, changed value of
event
fromdocument.published
todocument.publish
- π₯ Document unpublish webhook, changed value of
event
fromdocument.unpublished
todocument.unpublish
References: Server PR
Breaking Changes - Server + Editor π₯
Changed doc-link and doc-html directive to objects π₯
- π₯ Update Framework to v18 - New documents will store link and html directives as objects. Old documents will still store them as strings until you run the manual migration.
- π₯ Public API:
GET /latestPublication
andGET /latestPublications
return the JSON as stored in the database. Thus after the update you will receive the old and new format until you run the manual migration.
After the update newly created doc-link and doc-html directives are stored as
// Example Old
content = [{
id: 'doc-ez23k2',
identifier: 'design.link',
content: {
link: 'https://livingdocs.io'
}
}, {
id: 'doc-iej286',
identifier: 'design.html',
content: {
html: '<div></div>'
}
}]
// Example New
content = [{
id: 'doc-ez23k2',
identifier: 'design.link',
content: {
link: {
href: 'https://livingdocs.io'
}
}
}, {
id: 'doc-iej286',
identifier: 'design.html',
content: {
html: {
html: '<div></div>',
target: '_blank'
}
}
}]
- π₯
getContent()
of html and link directives changes return type
The html and link directives are now data directives, i.e. store object literals. This means that the getContent()
method will return an object literal and not a string value anymore. The change looks as follows.
// old
const html = htmlDirective.getContent()
const href = linkDirective.getContent()
// new
const {html} = htmlDirective.getContent()
const {href, target} = linkDirective.getContent()
π₯ This change requires you to change all cases of getContent
on link and html directives in your code. In particular look out for custom document conversions and include code.
If you used direct JSON access in a livingdoc directive (not recommended), you will also need to change the access.
// old
const html = htmlDirective.content.value
const href = linkDirective.content.value
// new
const {html} = htmlDirective.content
const {href, target} = linkDirective.content
References:
Use One Time Rendering by Default π₯
The CheerioHtml output renderer for the render-pipeline now uses the frameworks one time rendering by default which is 10 to 20 times faster but has a few minor differences in render output.
Things which are not rendered anymore by default:
- empty image classes
- empty optional elements (with display: none style)
- comments for hidden optional elements
- placeholders in unresolved include elements
You can still use the old renderer with CheerioHtml({useLegacyRendering: true})
in your contentType
configuration.
If you use custom outputFormatters which use the frameworks rendering you should switch them to livingdoc.render()
. This gives you a big performance boost (10x - 20x faster) and ensures consistency with the new default of the CheerioHtml output renderer.
// current - slow
html = rendition.livingdoc.toHtml()
// better alternative - fast
html = rendition.livingdoc.render()
References: Server PR
Breaking Changes - Server π₯
Require npm7 π₯
π₯ To support ~lib requires in downstreams we expect npm > 7
References: Server PR
Migrate the database π₯
It’s a simple/fast migration with no expected data losses.
# run grunt migrate to update to the newest database schema
# migration - 148-add-documents-project-id-not-null.js
# add index on media_library_entries.media_type_id
# migration - 149-declare-expect_equal_version-as-immutable.js
# update function expect_equal_version
# migration - 150-drop-legacy-tables.js
# drop old tables assets / access_tokens / category_events / import_hugo_feeds
# migration - 151-add-references-columns.js
# add column documents.references document_publications.references
# migration - 152-add-index-on-document-publications-created-at.js
# add index on document_publications.created_at
# migration - 153-add-media-library-refs.js
# add column media_library_entries.references
# migration - 154-add-index-on-authorization-code-events-aggregate-id.js
# add index on authorization_code_events.aggregate_id
# migration - 155-add-content-type-id-on-document-publication-events.js
# add column document_publication_events.content_type_id
# migration - 155-add-document-user-relations.js
# add table document_user_relations
livingdocs-server migrate up
Remove Legacy Postgres Tables π₯
These Postgres tables have been removed:
assets
- got replaced bymedia_library_entries
earlier last yearaccess_tokens
- The access_tokens table got removed in release-2020-12 as we now only track session idscategory_events
- This table wasn’t in use at allimport_hugo_feeds
- This table also got created about 4 years ago and isn’t in use
π₯ Please make sure that you don’t directly access those tables in your code.
References: Server PR
Remove Grunt Tasks π₯
Removed all Grunt tasks. If you still need a task, you can just copy the code to your downstream. But almost all functionality has been replaced with livingdocs-server
CLI and the editor administration UI.
Please give us some feedback when you miss some functionality of a Grunt task, so we can provide that in the future in another form.
- π₯ remove
grunt channel-create
- π₯ remove
grunt channel
- π₯ remove
grunt data-migration-create-and-prepare
- π₯ remove
grunt data-migration-accept
- π₯ remove
grunt data-migration-list
- π₯ remove
grunt data-migration-get
- π₯ remove
grunt data-migration-cancel
- π₯ remove
grunt data-migration-resume-all
- π₯ remove
grunt data-migration-get-report
- π₯ remove
grunt data-migration-list-errors
- π₯ remove
grunt data-migration
- π₯ remove
grunt list-create
- π₯ remove
grunt list-edit
- π₯ remove
grunt list
- π₯ remove
grunt project-create
- π₯ remove
grunt project
- π₯ remove
grunt user-authenticate
- π₯ remove
grunt user-password
- π₯ remove
grunt user-password-lock
- π₯ remove
grunt user-email
- π₯ remove
grunt user-edit
- π₯ remove
grunt user-create
- π₯ remove
grunt user-create-admin
- π₯ remove
grunt user-delete
- π₯ remove
grunt user
- π₯ remove
grunt webhook-subscribe
References: Server PR
Changed API for indexingApi π₯
- π₯ Removed
indexingApi.bulk
. The index clients are directly exposed in the index init features and on there we have aesClient.customBulk
method you can use. - π₯
indexingApi.document.addDocumentUpdate
moved toindexingApi.addDocumentUpdate
- π₯
indexingApi.document.reindex
got replaced byindexingApi.addBackgroundIndexingJobsByBatches
- π₯
indexingApi.document.addJob
got removed. Please useindexingApi.addBackgroundIndexingJobsByBatches
instead - π₯
indexingApi.media.addMediaUpdate
moved toindexingApi.addMediaUpdate
- π₯
indexingApi.media.reindex
got replaced byindexingApi.addBackgroundIndexingJobsByBatches
- π₯ The CLI tasks
es-media-reindex
andes-search-reindex
got replaced byelasticsearch-index
livingdocs-server elasticsearch-index --handle li-media livingdocs-server elasticsearch-index --handle li-documents livingdocs-server elasticsearch-index --handle li-publications
- π₯ Upgrade to
pino@6.11.0
// Previously, Pino supported multiple arguments and concatenated them into a string // With the upgrade, the api changed slightly and to form the same message, `%s` and `%j` must be used // Example 1 // Before log.info({foo: 'bar'}, 'a message', { an: 'object'}) // After log.info({foo: 'bar'}, 'a message %j', { an: 'object' }) // Output "foo":"bar","msg":"a message {\"an\":\"object\"}" // Example 2 // Before log.info({foo: 'bar'}, 'a', 'silly', 'message') // After log.info({foo: 'bar'}, 'a %s %s', 'silly', 'message') // Output "foo":"bar","msg":"a silly message"
References: Server PR
Changed format of ‘document.update’ event π₯
The document.update
event will only receive user: {id: userId}
. Previously the user object could have more params on it (like admin or project_id) depending on what user object was passed into documentApi.updateV2(). Note that currently it is also possible that user: {id: undefined}
is passed as the user.id is not required in documentApi.updateV2().
References: Server PR
Removed ’li-netlify-publish-hooks’ feature π₯
π₯ Removes the li-netlify-publish-hooks
feature (which seems not to be used by anyone) as the more generic webhooks feature already offers the same behavior. The webhook documentation can help to migrate the feature.
References: Server PR
Add property ‘isAutomatic’ to Metadata plugin ’li-image’ π₯
A metadata field of type li-image
has a new property isAutomatic
, e.g. teaserImage.crops[{..., isAutomatic: true}].
π₯ Add the field isAutomatic
to the Elasticsearch metadata mapping:
// 1) search in the project config for all metadata fields with type 'li-image' (e.g. teaserImage)
// 2) Open the Elasticsearch mapping file defined in the server config 'search.metadataMapping' (see https://docs.livingdocs.io/reference/server-config/config#search)
// 3) Update the mapping definition with 'isAutomatic' for all metadata fields of type 'li-image'
// metadata-mapping.js
{
...,
"teaserImage": {
"properties": {
"crops": {
"properties": {
...
"isAutomatic": { // <------------ add isAutomatic property to the mapping
"type": "boolean"
}
}
}
}
}
}
π₯ removed the editor config app.ui.article.publish.cropStyles
. It has no effect anymore
References: Editor PR
Upload Media Assets via Streams instead of a Buffer π₯
- π₯ removed
mediaLibraryApi.addImageCb
, usemediaLibraryApi.addImage
(promise) instead - π₯ changed
mediaLibraryApi.addImages({..., tempBase64})
tomediaLibraryApi.addImages({..., stream})
(pass an image stream for an exif extraction) - π₯
imagesApi.processJob
does not support callbacks anymore - π₯ changed
designsApi.write.uploadAsset({..., file})
todesignsApi.write.uploadAsset({..., readStream})
. Instead of passing abuffer
you have to pass areadStream
References: Server PR
Include Api Refactoring π₯
- π₯
includeApi.registerService()
We’re sunsetting of the old service config format which used ui and server properties instead of the new format with uiComponents and rendering. This format has been deprecated with a logged warning for a few years now. If the server starts successfully you don’t use the old format. - π₯ Removed
includeApi.resolveChannelOutputs()
(but this function should only have been used internally)
References: Server PR
Group Api - Optimistic Locking π₯
π₯ groupApi.updateGroup({..., version})
- version changed the optimistic locking behavior. Previously when doing an update against a group, the version must have been +1 of the state on the server. When doing requests from now on, the version in the request must match the version on the server.
References: Server PR
Woodwing Asset Api π₯
π₯ removed url from woodwingAssetsApi.uploadImageToWoodwingAssets({..., url})
and added stream (readStream) woodwingAssetsApi.uploadImageToWoodwingAssets({..., stream})
References: Server PR
Media Library Filter π₯
- π₯ Media Library Index:
caption
,source
andgoogle-vision
fields are not indexed automatically anymore. The configconfig: {index:true}
must be set in the metadata configuration.
// When you still want to search/filter by caption or source or google-vision, you have to extend your mediaType config in the project config
{
metadata: [
{
handle: 'source', // or 'caption' or 'google-vision'
// ...
config: {
index: true, // <------- add this property to be able to search/filter
}
},
// ...
]
}
References: Server PR
Breaking Changes - Editor π₯
Fix close tags in Angular templates π₯
π₯ If you have downstream Angular templates, change all XHTML like closing tags <some-tag/>
to valid HTML5 <some-tag></some-tag>
.
References: Editor PR
Media Library Dashboard Configuration Change π₯
π₯ Removed project config editorSettings.mediaLibrary.editorSelection.displayFilters
If you want to keep the filters, you need to move the config to the mediaType
project config.
// mediaType config example
{
handle: 'image',
type: 'mediaImage',
metadata: [],
editor: {
dashboard: {
// use the config of editorSettings.mediaLibrary.editorSelection.displayFilters
// if you want to keep the old behavior
displayFilters: []
},
managementDashboard: {
// configure different filters for the management dashboard (opened via Main Navigation)
// if you want.
displayFilters: []
}
}
}
References: Editor PR
Prefix all app Routes with a Project Handle π₯
Rename UI Router Application States ‘app’ -> ‘project’
π₯ We renamed all ui router application states. All states for the editor routing are affected. Examples, where it could be used in customer projects are:
ui-sref
$state.go('')
state.$href
- or within the project config the
mainNavigation
may also be affected if it uses editor states instead of urls.
In most cases this is the easy migration guide for almost all states prefixed with ‘app.*’
Before: $state.go('app.welcome')
After: $state.go('project.welcome')
Note: Exception are server admin routes route like ‘app.admin.users’ is still ‘app.admin.users’ and user routes like ‘app.user’
Rename Project Routes/States
π₯ Changed url schema from /projects/id/*
to /p/projectHandle/config/*
// Example
https://0.0.0.0:9000/projects/111/settings // from
https://0.0.0.0:9000/p/e2e-magazine/config/settings // to
π₯ Changed state from app.settings*
to project.config*
// Example
return this.$state.go('project.settings.contentType.content') // from
return this.$state.go('project.config.contentType.content') // to
π₯ Changed url schema from /access/id/*
to /p/projectHandle/admin/*
// Example
https://0.0.0.0:9000/access/111/members // from
https://0.0.0.0:9000/p/e2e-magazine/admin/members // to
π₯ Changed state from app.access*
to project.admin*
// Example
return this.$state.go('project.access.current.groups') // from
return this.$state.go('project.admin.current.groups') // to
References: Editor PR
Drop Coffee Script Support π₯
- π₯ Remove coffee-script support in the webpack setup in the editor. We’ve dropped coffee-script a few years ago, but still kept the webpack loader as not all projects were migrated. From now on we’ve completely removed support for it. Please upgrade your code base if you still use coffee-script.
If you still want to use coffeescript, you can require it manually, e.g. node -r coffee-cscript/register node index.js
.
References: Editor PR
Remove Deprecated Editor Env Config ‘dashboards’ π₯
- π₯ remove deprecated editor config
dashboards
.
// editor config - old
module.exports = {dashboards: [{handle: 'kanban-proofreading'}]}
// project config - new
projectConfig.editorSettings.dashboards: [{handle: 'kanban-proofreading'}]`
References: Editor PR
liDateTimeRange Filter config π₯
- π₯
metadataPropertyName
in the liDateTimeRange Filter config can only be used for metadata. To filter fordocumentPropertyName
created_at or updated_at (default) you should use in the config{filterName: 'liDateTimeRange', config: {documentPropertyName: 'updated_at'}}
References: Editor PR
Deprecations
Node 12 Support
π£ Node 12 is deprecated. Please upgrade your Docker images and local environments to node 14.
This follows our upgrade cycle that we drop the old lts version one year after the introduction of the current LTS version.
In your Docker images change
FROM livingdocs/server-base:12
toFROM livingdocs/server-base:14
or:15
FROM livingdocs/editor-base:12
toFROM livingdocs/editor-base:14
or:15
FROM livingdocs/node:12
toFROM livingdocs/node:14
or:15
In your .nvmrc
(if present) change
- The string from
12
to14
or15
References: Server PR
swisscomTV.customLanguageHandle
The server config swisscomTV.customLanguageHandle
is not used any longer for the reference extraction. All metadata of type li-language
will be extracted to the references if they have a groupId
.
Server Callbacks
All callback functions on the server are now in deprecated state. We will start removing callbacks and switch to a promise based only approach.
APIs π
Publication Events
- π¬ Support
/api/v1/publicationEvents?reverse=true
query parameter to retrieve events in reverse order starting at the latest event
References:
References
We worked on document reference extraction. The list below contains public APIs and server APIs with an additional reference
property in the response. Look into the documentation to get different types of references. References can be used for static page rendering strategies where updates of references in a page, e.g. teasers, must be identified.
- π¬
POST /document-copy/:documentId/copy
- π¬
POST /document-copy/:documentId/transform
- π¬
POST /publications/:publicationId/republish
- π¬
documentApi.getLatestDocument()
- π¬
documentCopyApi.copyByDocumentId()
- π¬
documentCopyApi.copyWithoutConfig()
- π¬
documentCopyApi.transformByDocumentId()
- π¬
publicationApi.getLatestPublication()
- π¬
publicationApi.getLatestPublications()
- π¬
publicationApi.getPublicationsByDate()
- π¬
publicationApi.getPublicationsByDocumentIds()
- π¬
publicationApi.republish()
References:
Public API - Add context object to import endpoints π
A context
(max 8192 bytes) parameter can be passed to:
POST api/v1/import/documents
POST api/v1/import/images
POST api/v1/import/videos
If the webhook parameter is defined as well, context will be passed to the webhook once the job is finished.
References:
Public API - Add Media Library Webhooks + Extend document.update Webhook π
- π Add webhook for event
mediaLibraryEntry.create
- π Add webhook for event
mediaLibraryEntry.update
- π Add webhook for event
mediaLibraryEntry.archive
- π¬ Extend
document.update
webhook - subscribe to a specific metadata property update
References:
Public API Beta
For all public API endpoints documentation, go to ‘https://your-editor.com/public-api'.
- π Add new endpoint
GET /api/beta/documents/:documentId/incomingDocumentReferences
- π¬
GET /api/beta/documents/:documentId/latestPublication
- add next extracted references format - π¬
GET /api/beta/documents/:documentId/latestPublications
- add next extracted references format - π Add new endpoint
GET /api/beta/documents/:documentId/incomingMediaReferences
- π Add new endpoint
GET /api/beta/mediaLibrary/:mediaId/incomingDocumentReferences
- π Add new endpoint
GET /api/beta/mediaLibrary/:mediaId/incomingMediaReferences
References:
Server API - includesApi
- π Add
includesApi.getServiceConfig({serviceName})
method toincludesApi
.
Internal Changes
Colt
// Simple import of all colt factories
const {colt} = require('../support/factories')
// --> instead of require('../support/factories').get('user', 'project', 'channel', 'document', 'publication')
// New Test Helper to create a configurable Project.
colt().createConfigProject('project', {...})
Other Changes
Features
- Tasks: Assign a user to a task livingdocs-editor #4214 π
- Print: Move print to project config livingdocs-server #3372 π
Design
- Priority truck polish livingdocs-editor #4091 π
- Style Guide: Clean up the style guide livingdocs-editor #4149 π
- Improve dashboard footer livingdocs-editor #4209 π
Editor
- Dashboards
- Properly handle pagination for a resultList livingdocs-editor #4153 π
- List dashboard: Hide ‘go to article’ button in list UI when dragging livingdocs-editor #4094 π
- Add ‘video-’ and ‘imageLibrary’ dashboard livingdocs-editor #4046 π
- Search
- Add support for a
customFilters
object to pass through custom search parameters livingdocs-editor #4172 π
- Add support for a
- Image cropping: Use downscaled image size for very large images livingdocs-editor #4141 π
- Editing: Add Iframe height watcher (guard) livingdocs-editor #4108 π
Media Library
- Media Upload/Import
- Remove hardcoded mediaTypes livingdocs-editor #4155 π
- Simplify code livingdocs-server #3369 π
- Allow multiple mediaTypes of same type, allow mediaType parameter for upload/import APIs livingdocs-server #3406 π
- Hardening Media Library Import livingdocs-server #3430 π
- Reimplement
video.asset.size
support for the stream-based upload livingdocs-server #3439 π
- Resolve dashboards in Main Navigation and Document Editing Toolbar from mediaTypes config livingdocs-editor #4106 & livingdocs-editor #4180 π
Other
- CLI: Add ’newerThan’ argument for task ‘cleanup-documents’ livingdocs-server #3333 π
- Import: Support files with no file ending of mimeType image livingdocs-server #3380 π
- Error handling: Add extended description to error declaration class livingdocs-server #3214 π
- Add Support for Secure Imgix URLs livingdocs-server #3410 π
- Includes
- Add interaction blocker config option livingdocs-server #3397 π
- Add interaction blocker to project config to include services UI livingdocs-editor #4205 π
- Security: Revoke client if another user uses the same client id livingdocs-server #3441 π
- Filter: allow document_types to be an array livingdocs-server #3412 π
Bugfixes
- Media library
- Rename pusher topic to media and allow - in mediaId livingdocs-server #3382 πͺ²
- Video: Use video public URL and not image public URL livingdocs-editor #4048 πͺ²
- Access Management: Groups - hide iMatrics for projects that don’t use it livingdocs-editor #4062 πͺ²
- Metadata: Correctly handle image URL’s when picking from article livingdocs-editor #4132 πͺ²
- Editor Link Tool: fix link validation / update link info / no reload on enter livingdocs-editor #4142 πͺ²
- Comments: Fix comment highlight when paging through comment cards livingdocs-editor #4147 πͺ²
- Fix Image Cropper on Mobile livingdocs-editor #4175 πͺ²
- Guard projects from having a undefined handle in the url livingdocs-editor #4182 πͺ²
- Editor: Fix transform components feature livingdocs-editor #4219 πͺ²
- Comments: Show max thread count limit error livingdocs-editor #4188 πͺ²
Service
- Public Api: downgrade contentFormat when required livingdocs-server π
Patches
Livingdocs Server Patches
- v124.5.83: fix: add more information to the remoteError from airship
- v124.5.82: chore: check type of assets
- v124.5.81: fix: use the updated release-notes-patch repo
- v124.5.80: test: fix require
- v124.5.79: chore: update npm read token
- v124.5.78: fix: add proxy for image crop downloads
- v124.5.77: fix(server): Replace broken http-terminator with lil-http-terminator that doesn’t have any dependencies
- v124.5.76: fix(elasticsearch): Do not push the
_type
in Elasticsearch 7 bulk payloads - v124.5.75: fix: Trigger another release as npm publish failed again
- v124.5.74: fix(indexing): Fix context filter/normalization during bulk index
- v124.5.73: fix: Upgrade to @livingdocs/framework@18.6.7
- v124.5.72: fix: Skip bulk index jobs coming in with a wrong context
- v124.5.71: fix(tokens): Fix jwt and cookie expiration timestamps
- v124.5.70: fix(slack_api): use mail always case insensitive
- v124.5.69: fix(image-upload): Support pdf uploads as imagemagick converts them to images
- v124.5.68: fix: Trigger release as the last npm publish doesn’t show up on npm despite success
- v124.5.67: chore(hugo): add tests for drop image
- v124.5.66: fix(hugo): handle via media library
- v124.5.65: fix(design): add new cli command design-set-active
- v124.5.64: fix: unsubscribe url in notifications mail template
- v124.5.63: chore: fix test message
- v124.5.62: fix(references): Do not crash the reference extraction when no directive value is present
- v124.5.61: fix: read channelId from documentVersion
- v124.5.60: fix: allow to add only ids instead of range for processBatch
- v124.5.59: fix(import): Process jobs in series to not run into pool allocation timeouts
- v124.5.58: fix: add comment.resolve action to notifications
- v124.5.57: chore: adapt tests for release-2021-03
- v124.5.56: fix(emails): Fix schema.org annotations in email templates
- v124.5.55: chore(document-migrations): Lower the concurrency to 2 as we’re running multiple processes most times
- v124.5.54: chore: Update todo script on drone
- v124.5.53: test(image-upload-proxy): Write a test that the filename gets passed to the multipart request
- v124.5.52: fix(elasticsearch): Fix Elasticsearch bulk retries by matching failed entries in reverse order
- v124.5.51: fix(indexing): Retry bulk requests that respond with a 429 error when Elasticsearch is overloaded
- v124.5.50: chore(file-upload): Support node 12 with its broken Readable.from support for Buffers
- v124.5.49: fix(search): Invoke search requests against Elasticsearch with the correct publication index
- v124.5.48: fix(emails): Upgrade the SES configuration to the newest aws sdk v2 to get rid of deprecation messages
- v124.5.47: fix(indexing): Fix channelId comparison in live indexing
- v124.5.46: fix(group_projection): add archived to return object
- v124.5.45: fix(yargs): Upgrade to the most recent version of yargs
- v124.5.44: fix(indexing): Support a elasticIndex.maxCpuFunction config option to define a cpu threshold getter function
- v124.5.43: chore: Upgrade sharp to get the setup working with node 16
- v124.5.42: fix(notifications): use Authorization Header for slack api
- v124.5.41: fix: update integration test because of an outdated github API
- v124.5.40: fix(langauge-metadata): test for object
- v124.5.39: test(import): check response format of input in more detail
- v124.5.38: fix(indexing): Resume indexing after a process and queue got paused
- v124.5.37: fix(document-copy): Rewrite the document-copy config loader to promises to ensure that the promises always resolve
- v124.5.36: fix(queue): Automatically delete consumers where the consumer group in Redis got deleted manually
- v124.5.35: chore: simplify code
- v124.5.34: fix(public-api): allow to set ‘publicationDate’ flag on import
- v124.5.33: fix: correctly log in users that create their accounts with SSO
- v124.5.32: fix(publication): Keep first_publication_id on unpublish
- v124.5.31: fix(print): fix crash on certificate errors
- v124.5.30: fix(queue): Fix a typo and apply the same pending check to the xcleanup script
- v124.5.29: fix(queue): Do not delete the consumer if we can’t transfer the pending messages
- v124.5.28: chore(openid): Move getOrCreateProject to support file
- v124.5.27: chore(ww-assets): add tests for search
- v124.5.26: chore: correctly pass trx to authIdentityModel.deleteIdentity
Livingdocs Editor Patches
v63.8.73: test: skip failing test in nzz Downstream
v63.8.72: fix: move file downloader to it’s own helper and improve logic
v63.8.71: fix(menu): do not allow to move a menu item before first save
v63.8.70: chore(menu): move event extraction to the right place
v63.8.69: fix: update framework (fix css loader)
v63.8.68: fix(li-image): allow download of crops in fullres when customBuilt.allowDownloadOfLiImageCrops is true
v63.8.67: fix(drop-handler): Use queue for huGO and WoodWing uploads
v63.8.66: fix(collaboration): remove special treatment of li-image metadata property crops
v63.8.65: fix(li-image-crop): Fix aspect ratio update behavior
v63.8.64: fix: set width of named crops to 200
v63.8.63: fix: use width instead of size and set it to 100
v63.8.62: fix(image metadata plugin): show correct order not reversed
v63.8.61: chore: fix test to have correct order
v63.8.60: fix(cropper): Increase rounding tolerance
v63.8.59: fix(hugo): add over media library
v63.8.58: fix: rename Ignore to Off
v63.8.57: fix(properties panel): Handle initial undefined value in li-form-color
v63.8.56: fix: select print layout use arrow function
v63.8.55: fix(task-assign): only show users with name and not archived
v63.8.54: fix(print-preview): only set editMode from contentType when it is defined
v63.8.53: fix(li-image): show crop previews larger for li-image metadata if there are no more than 2 namedCrop options
v63.8.52: fix(image manager): Handle missing/archived images
v63.8.51: fix: fix icon link in styleguide
v63.8.50: fix(embed): Extract html from directive content
v63.8.49: chore(CI): run nzz tests with node 16
v63.8.48: fix: imatrics performance improvements & fix styling issues
v63.8.47: fix: init comments only when they are enabled
v63.8.46: fix(dropActions): consider image drop cases with insertsBlocked
v63.8.45: fix: update integration test because of an outdated github API
v63.8.44: fix(crop): prevent mousedown and mouseup events from zoom-control buttons to srcissors crop-view
v63.8.43: fix(framework): update framework to 18.6.4
v63.8.42: fix(clipboard): do not insert default content on clipboard drop
v63.8.41: fix: correctly redirect users
v63.8.40: fix(crops): simplify metadata crop calculations
v63.8.39: test(metadata updater): add tests for crop url recalculation on crop coordinates change on an li-image
v63.8.38: fix(test): pin vue-test-utils version to 1.1.3
v63.8.37: fix: to create a new tag
v63.8.36: fix(clipboard): render includes when dropping a component from the clipboard
v63.8.35: fix(multiselect): only allow to transform available components in a content-type
v63.8.34: fix(viewport-viewport-units-buggyfill): improve regex to match only vh units
v63.8.33: fix(link tool): allow to link to URLs matching the delivery path pattern but the extracted ID points to inexisting documents
v63.8.32: fix(link tool): make removing an existing link possible again
v63.8.31: fix(docked content): Visibility
v63.8.30: fix: add data-tour property for format-panel
Icon Legend
- Breaking changes: π₯
- Feature: π
- Bugfix: πͺ²
- Chore: π§