Attention: If you skipped one or more releases, please also check the release-notes of the skipped ones.

Newsletter

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.

Screenshot 2021-03-08 at 21 26 16

References: Editor PR

Media Library - Media Sources 🎉

image

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:

Media Library - Videos 🎉

image

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 master images in the Media Library and on demand overwrite those master crops on the placed image inside an article. Also, the API now provides several crops per image as defined in the named crops settings.

References:

Notifications

Screenshot 2021-03-03 at 17 19 37

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:

Tracing 🎉

We’ve added tracing support in the server based on opentelemetry.

References:

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.

image

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 🔥

🔥 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:

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 from document.published to document.publish
  • 🔥 Document unpublish webhook, changed value of event from document.unpublished to document.unpublish

References: Server PR

Breaking Changes - Server + Editor 🔥

  • 🔥 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 and GET /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 scheme
# 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 by media_library_entries earlier last year
  • access_tokens - The access_tokens table got removed in release-2020-12 as we now only track session ids
  • category_events - This table wasn’t in use at all
  • import_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 a esClient.customBulk method you can use.
  • 🔥 indexingApi.document.addDocumentUpdate moved to indexingApi.addDocumentUpdate
  • 🔥 indexingApi.document.reindex got replaced by indexingApi.addBackgroundIndexingJobsByBatches
  • 🔥 indexingApi.document.addJob got removed. Please use indexingApi.addBackgroundIndexingJobsByBatches instead
  • 🔥 indexingApi.media.addMediaUpdate moved to indexingApi.addMediaUpdate
  • 🔥 indexingApi.media.reindex got replaced by indexingApi.addBackgroundIndexingJobsByBatches
  • 🔥 The cli tasks es-media-reindex and es-search-reindex got replaced by elasticsearch-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-docs/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, use mediaLibraryApi.addImage (promise) instead
  • 🔥 changed mediaLibraryApi.addImages({..., tempBase64}) to mediaLibraryApi.addImages({..., stream}) (pass an image stream for an exif extraction)
  • 🔥 imagesApi.processJob does not support callbacks anymore
  • 🔥 changed designsApi.write.uploadAsset({..., file}) to designsApi.write.uploadAsset({..., readStream}). Instead of passing a buffer you have to pass a readStream

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 and google-vision fields are not indexed automatically anymore. The config config: {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 for documentPropertyName 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 to FROM livingdocs/server-base:14 or :15
  • FROM livingdocs/editor-base:12 to FROM livingdocs/editor-base:14 or :15
  • FROM livingdocs/node:12 to FROM livingdocs/node:14 or :15

In your .nvmrc (if present) change

  • The string from 12 to 14 or 15

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 to includesApi.

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

Design

Editor

Media Library

Other

Bugfixes

Service

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: 🔧