Attention: If you skipped one or more releases, please also check the release-notes of the skipped ones.
Newsletter
- Newsletter: release-2020-07
- Subscribe here: https://confirmsubscription.com/h/j/61B064416E79453D
Webinar
- Recording: https://vimeo.com/446835734/56cd78cdcd
- Google Doc: https://docs.google.com/document/d/1SvVlEBPMKiY-dK56LAL219-GWTvjCh-GXwJnarnI3L0/edit?usp=sharing
Repositories
This release consists of the following new versions of the livingdocs-server
and the livingdocs-editor
:
Package | Version |
---|---|
@livingdocs/server | release-2020-07 |
@livingdocs/editor | release-2020-07 |
Livingdocs Server
How to require the server in your package.json:
"dependencies": {
"@livingdocs/server": "release-2020-07",
}
- Link to the release branch: https://github.com/livingdocsIO/livingdocs-server/tree/release-2020-07
Livingdocs Server Patches
- v103.3.31: fix: add new npm read token
- v103.3.30: fix(elasticsearch): log cpu-wait as warning
- v103.3.29: chore: remove example config
- v103.3.28: fix(imatrics): fix an inconsitency in slugging
- v103.3.27: fix(imatrics): fix tag slugging
- v103.3.26: fix(build): revert v103.3.23
- v103.3.25: fix(print): Catch publication not found case
- v103.3.24: fix(print): Add
/editions
endpoint - v103.3.23: chore: Upgrade bullmq dependency, so we’re using the same ioredis version
- v103.3.22: fix: external services work correctly despite required metadata
- v103.3.21: fix(imatrics): store slug on user added concepts
- v103.3.20: fix(imatrics): Register feature API
This allows e.g. migrations to access the iMatrics API.
- v103.3.19: chore: correctly apply defaults and adapt tests
- v103.3.18: fix(media-library): Fix a migration where we’ve accidentally dropped the title of media library entries
In this migration, we’re setting the title on the media library entry again if it isn’t present.
- v103.3.17: fix: Adapt Docker compose to new Postgres version
- v103.3.16: fix(print-api): Improve logging
Make Print-API debug logs JSON format and more informative (adds host
, `action..).
- v103.3.15: fix(dependencies): add dependency to transliteration for imatrics slug
- v103.3.14: chore(public-api): fix test helpers
- v103.3.13: fix: empty commit to create release
- v103.3.12: fix: correctly handle promise
- v103.3.11: fix(tasks): fix create project task for the embedded design case
- v103.3.10: code(mediaLibrary): normalise naming
- v103.3.9: fix(includes): allow vue-component type for doc-includes
- v103.3.8: correct copy behavior for articles with langauges and translations
Livingdocs Editor
How to require the editor in your package.json:
"dependencies": {
"@livingdocs/editor": "release-2020-07",
}
- Link to the release branch: https://github.com/livingdocsIO/livingdocs-editor/tree/release-2020-07
Livingdocs Editor Patches
- v57.5.64: fix(embeds): Avoid transforming free-html content
- v57.5.63: fix(embeds): do not add padding bottom unless it’s a responsive container
- v57.5.62: fix(iframes): pasting iframes with the addResponsiveContainer: false config works reliably again
- v57.5.61: fix(trackjs): add empty string instead of undefined
the token is not written when the userId is set to undefined
v57.5.60: chore: do not allowUnrecognizedEmbeds by default in our setup unless env = local
v57.5.59: chore: adapt tests
v57.5.58: chore: add unit tests for the sorting config
v57.5.57: fix: use publish type configs
v57.5.56: fix(dashboards): show contentType label instead of handle
v57.5.55: chore: fix image url drop handler test
v57.5.54: fix(media-library-dnd): correctly handle drops from media library in all browsers
v57.5.53: fix(comyan): fix media library entry upload format for comyan
v57.5.52: fix(print-proxy): Add
editions
endpointv57.5.51: fix: do not trigger imatrics updates if imatrics is not initialized
v57.5.50: fix(lists): always show scheduled date in case it’s configured
v57.5.49: fix(lists): show correct date for future publication
v57.5.48: fix(image-upload): prevent exception when the canvas is not set
v57.5.47: fix(dropzone-message): make it ephemeral to hide close button
v57.5.46: fix(browser-spellcheck): pastedHtmlRules are now used in editableConfig only
v57.5.45: fix: correctly display error messages in the image upload service
v57.5.44: fix(image-proxy): create URL for original url
v57.5.43: fix(metadata): correctly set image uploading state after image uploaded
v57.5.42: fix(context menu): Opener wrapper removed
Removed opener wrapper from context menu component
v57.5.41: fix(buttons): fix image upload button icon
v57.5.40: fix: show loading button while image is uploading in metadata image form
v57.5.39: fix(imatrics): store any concept properties returned from the server
v57.5.38: fix: update framework to version 15.1.2
v57.5.37: fix: redirect to home with projectHandle
v57.5.36: fix: drop indicator for hugo and asset drop
v57.5.35: fix(conflict-ui): add width to checkbox-icon in conflict-ui
v57.5.34: fix(public-api): fix image import docs
v57.5.33: fix(comments): update metadata comment count only locally
v57.5.32: fix(liImageProxy): fix url getter
v57.5.31: fix: add the square icon to the icons
v57.5.30: fix(google-vision): fix language select
v57.5.29: chore: add small in code comment
v57.5.28: fix: persist search when navigating from an document back to a dashboard
v57.5.27: fix: improve css
v57.5.26: chore: retrigger commit lint
v57.5.25: fix(Monaco-editor): dispose model before instance
v57.5.24: chore: add test for rendering the list assignment
v57.5.23: fix: use uiConfig for the displayfilters instead of config
v57.5.22: fix(schema-form): do not debounce onChange call but debounce at receiving end if needed
v57.5.21: fix: improve ldNotify warning wording
v57.5.20: fix(doc-includes): allow for vue components to define include params
v57.5.19: menu’s can be sorted correctly again
Highlights
Overhauled Media Library π
The Media Library got a lot of updates. Some of the highlights are:
- The media library dashboard can be configured the same way as document dashboards (filter/search)
- Image asset custom metadata use the same configuration as document contentTypes
- Visually support copyright restrictions
- Extraction of metadata on image drop
- Alt text
A full changelog and screenshots can be found here.
Project Based Main Navigation + Dashboards
Until now only one editor main navigation and dashboard config was possible (because the config was living on the editor). Since the configs have been moved to the project config on the server, it’s now possible to configure the main navigation and dashboards per project.
References:
Show all Errors at once on Publish Screen π
There are 2 improvements on the editor publish screen:
- When publishing, show all errors at once (not only one error) - Editor PR
- Show an error message when a field has an error (development) - Editor PR
Custom Text Editing Config π
It’s possible to define your own custom text editing elements (see documentation reference for more info). Another improvement is that we moved the config of the default and custom elements to the server. One can now define text editing elements for every project (project config) and even for every content-type individually.
References:
Display Filter π
Display filters are the heart for dashboards. Therefore we introduce some improvements:
- We have a new time based filter called
liDateTimeRange
- more info - When adding a filter to a dashboard, it’s now possible to pass (and interprete) a config - more info
- When a filter option defines
isDefault
, the filter will be applied on the first request - more info
Restore Project Config π
When having a dynamic project config one can now show a diff of and older version of the project config in the history screen of the project setup. Additionally it’s possible to restore an old project config.
References:
Define Dashboard Entry Point π
One can now define a custom entry point on login or when switching projects. For more info see here.
Custom User Menu π
Now it’s possible to define custom entries within the Livingdocs user menu.
References:
Revamped Editor Notifications π
We improved the design and placement of editor notifications. Warnings and errors still stay on top middle of the editor, success and info messages go to the bottom left.
Also the API of ldNotify
changed a little bit.
Check the pull request to see some screenshots and the changed API.
Import Log Viewer π
When importing documents or images, one can now see the “import jobs” via project setup. For more info look into the PR description
Manage Component Groups for Embedded Designs π
Projects with an embedded design support now the management of component groups (grouping of components in editor sidebar). Via project setup one has the ability to move components across groups, move groups, edit label of groups, add new groups and delete (empty) groups. For more info look into the PR description
Custom Document Preview π
It’s now possible to integrate a custom document preview via the server side previewApi
. Example of custom previews are
- custom mobile preview
- a preview of a finished article living on the frontend
- anything that fits the specific customer need.
References:
Breaking Changes π₯
Migrate the database π₯
It’s a simple migration with no expected data losses. The expected time for the image migration is 10'000 images / second.
# run grunt migrate to update to the newest database schema
# migration - 136-add-tag-suggestions.js
# create tag_suggestions table
# migration - 137-migrate-assets.js
# create media_library_entries table + migrate old data to new table
# migration - 138-text-index-on-project-and-users.js
# add indexes on import_jobs, cache, config_properties table
# migrate media_type to media_type_id
livingdocs-server migrate up
Elasticsearch Client Upgrade
- π₯
liServer.api('li-search').esClient
is now an instance of@elastic/elasticsearch').Client
, so please migrate to that api. - π₯ removed
liServer.api('li-search').IndexManager
. Use the elasticsearc client instead. - π₯ removed
liServer.api('li-search').indexManager
. Use the elasticsearc client instead. - π₯ removed
liServer.api('li-search').typeManager
. Use the elasticsearc client instead. - π₯ removed
grunt search-index
and the filetask/util/search-index-configuration
. Uselivingdocs-server es-search-index
instead. - π₯
liServer.api('li-search').searchManager({}, {onlyId: true})
doesn’t return an array of internal identifiers anymore. Instead thedocumentId
is returned. - π₯ static server config
search.elasticsearchClient
configuration supports now the official@elastic/elasticsearch
client configuration
References: Server PR
Use libvips as Default for Image Processing
- π₯ set
libvips
as default for image processing (because it’s much faster and more secure).
If you want to fall back to imagemagick
, you can add a config on the static server config images.processingStrategy: 'imagemagick'
.
References: Server PR
Media Library
π₯ The MediaLibrary is now active by default Both on the editor and server side. The editor UI can be disabled but the server side feature is always active storing data in Postgres and indexing into Elasticsearch.
Disable the MediaLibrary UI:
// project config
editorSettings: {
mediaLibrary: {
showUi: false
}
}
Configure an Elasticsearch index name for the mediaLibraryIndex
(otherwise a default name will be used):
// static server config
search: {
// ...
articleDocumentIndex: 'li-local-documents',
articlePublicationIndex: 'li-local-publications',
mediaLibraryIndex: 'li-local-media-library' // -> add this config
}
π₯ Server Media Library API
- The server API
li-asset-management
got renamed toli-media-library
. Please update your code in case you’re accessing it usingserver.features.api('li-asset-management')
somewhere.
Vue Components
π₯ Vue components that injected navigateTo
need to inject router
and call router.navigateTo({name: routeName, params: { a: 1, b: 2}})
instead of navigateTo(routeName, { a: 1, b: 2}})
. See livingdocs-editor #3584 for more info
Editor Entry Point
π₯ app.ui.welcome
in the static editor config does not support Angular routes anymore. Change them to a path, e.g. from app.home
to /home
(read more here)
Editor ldNotify API Change
- π₯ removed
ldNotify.error
in favor ofldNotify.alert
- π₯ removed
ldNotify.sections
(the position will be derived from the log level) - π₯ removed
ldNotify.appWarning
, useldNotify.banner
instead - π₯ removed
ldNotify.appAlert
, useldNotify.alert
instead - π₯ removed
ldNotify.appStatus
, useldNotify.info({ephemeral: false})
instead. ’ephemeral: false’ set a sticky behavior. - π₯ removed
ldNotify.notification.appearanceMode
. To keep the sticky behavior of a notification use ’ephemeral: false'
See editor PR for more info
Drop Node 10 Support
- π₯ removed support for
Node 10
. Move toNode 12
orNode 14
(read more here)
Renamed Icons
- π₯ renamed icon from
settings
tocog
- π₯ renamed icon from
github-circle
togithub
Read here for a more detailled description.
Removed Global GoogleVision Config
π₯ You can’t globally configure google vision anymore and have to move the config to the integrations project config. A migration guide can be found here
Deprecations
Main Navigation (static editor config)
app.sidePanelItems
in the static editor config should containroute: {name: "routeName"}
instead ofsref: "routeName"
. sref is still valid but deprecated.app.sidePanelItems
in the static editor config is deprecated. Configura the main navigation via project configeditorSettings.mainNavigation: [{'liItem': 'articles'}]
- PR
Editor Entry Point (static editor config)
app.ui.welcome
in the static editor config is deprecated. Configure your editor entry point viastartPage
in the project config - howto
Dashboard Config (static editor config)
dashboards
in the static editor config is deprecated. Configure a dashboard via project configeditorSettings.dashboards: [{}]
- PR
documentAPI (server API)
server.features.api('li-documents).document.find()
The methods parameters have changed and there is a new response structure. The old queries and properties will still work, but will log deprecation messages on every call.- The
q
attribute in the query parameter changed tosearch
- In the return value the property
documents
got renamed toresults
// change const {total, documents} = await documentApi.find({project_id: 1, q: 'Some text'}) // to this const {total, results} = await documentApi.find({project_id: 1, search: 'Some text'})
- The
server.features.api('li-documents).document.getReferences()
the response format changed// and change const {total, documents} = await documentApi.getReferences({projectId, reference: 'image:1234'}) // to this const {total, results} = await documentApi.getReferences({projectId, reference: 'image:1234'})
Reference: Server PR #3004
Media Library (static server config)
assetManagement.enabled
in the static server config is deprecated. It has no effect anymore and will be removed in the next release.
APIs π
- Public API: Added Curl examples livingdocs-editor #3549 π
- Public API: Introduce Async support livingdocs-server #3000 π
- Publication API: Support async/await for
publicationApi.renderSelectedRenditions
livingdocs-server #3011 π
Internal Changes
Rename ld_icon
Renames ld_icon
to li-icon
. If you use any icons you have to use them like this now:
<li-icon name="icon-name" theme=""></li-icon>
. Where theme
can hold the previous modifier classes: class="li-icon--warning"
becomes theme="warning"
.
Internal PR’s
Vue
- Vue styleguide Editor #3500
- Support Vue mixin props in the Angular-Vue wrapper Editor #3511
- Vueify project settings screen + add new component li-multi-select Editor #3515
- Vueify liDashboardTitle Editor #3607
- Vueify liCreateDocumentButton Editor #3609
- Vueify document copy Editor #3614 πͺ²
- vue-form-generator: support date picker Editor #3671
Cypress
- Add Cypress logs for Drone CI runs Editor #3594
- Fix cypress login tests Server #3010
Images
- Image upload workflow Editor #3430
- AssetProxy and mediaLibraryProxy Editor #3680
Editing API
- Document search parameters + response Server #3004
Other Changes
Improvements
UI
- Publish Screen: Show scheduled publishing dates when
document.customPublicationDateField
in static editor config livingdocs-editor #3662 π - Translation: Allow to change language if no translation is set yet livingdocs-editor #3700 π
- Proofreading: Improve visiblity of urgent proofreading tasks and deadlines livingdocs-editor #3618 π
- Metadata form:
liMetaReferenceForm
can now control what filters should be displayed.liMetaReferenceForm.ui.config.displayFilters
livingdocs-editor #3780 πMetadata form:Has been reverted in #3780liMetaReferenceForm
provides the same filter as its referenced document type livingdocs-editor #3711 π
- Dashboard: Correctly support sorting on the document title livingdocs-server #3078 π
- Webhooks: Validate form and show editor side error messages livingdocs-editor #3507 π
- Redis dashboard: Dashboards retrieve the list of queues automatically from Redis livingdocs-server #2979 π
- Project setup: Form generator add
li-boolean
type form livingdocs-editor #3526 π - Authentication:
- Add user to login object to support email templates with more info livingdocs-server #3025 π
- Add origin from headers to login object livingdocs-server #3056 π
- Live Coverage
- Fix insert proposal livingdocs-editor #3491 πͺ²
- Adapt live coverage UI livingdocs-editor #3572 π
Technical
- Copy config: Make channelHandle optional livingdocs-server #2930 π
- Device detection: Improve sensitivity of device detection livingdocs-server #2949 π
- Schema validation
- Server schemas: Strictly verify JSON schemas livingdocs-server #3003 π
- Project config: Use
strictObj
validation for properties livingdocs-server #3041 π
- Document copy: Do not crash when the framework throws errors livingdocs-server #3023 π
- Metadata: Safely update metadata with a document version check livingdocs-server #3067 π
Bugfixes
Publish screen: Fix showing correct state of document relations (copy of, embedded in) livingdocs-editor #3614 πͺ²
Language: show/hide li-language metadata form based on a behavior livingdocs-editor #3527 πͺ²
Text counter: Allow to exclude whole components from text-counter livingdocs-editor #3329 πͺ²
Create document modal: Fix create document modal and ios navi livingdocs-editor #3567 πͺ²
Images: Fix add uploadImage function to iFrameview livingdocs-editor #3582 πͺ²
Styles: Fix style alias to work in downstreams livingdocs-editor #3621 πͺ²
Comments: Fix multiline comment support livingdocs-editor #3633 πͺ²
Conflict management: Fix recover on conflicts with metadata changes on server livingdocs-editor #3642 πͺ²
Content Types: Support content types that didn’t declare a metadata array livingdocs-server #2997 πͺ²
Project seeding: Fix transaction issues and add error log for reliability and traceability livingdocs-server #3044 πͺ²
- Indexing: Normalize configurations for a proper indexing livingdocs-server #3066 πͺ²
Realtime Collab
- Refactor: Refactor component locks and add them also for proposals livingdocs-editor #3517 πͺ²
- Only blur component if focused on component lock livingdocs-editor #3586 πͺ²
- Show insert in format panel and register empty click for it livingdocs-editor #3637 πͺ²
- Add comment and cancel btn to comment card livingdocs-editor #3664 πͺ²
- Fix component locks and history overlays livingdocs-editor #3509 πͺ²
- Fix close on include modal and remove lock on idle livingdocs-editor #3530 πͺ²
- Fix conflict handling with self livingdocs-editor #3605 πͺ²
- Fix reopen a comment and check if objects already exists livingdocs-editor #3714 πͺ²
Icon Legend
- Breaking changes: π₯
- Feature: π
- Bugfix: πͺ²
- Chore: π§