@umbraco-cms/backoffice 14.0.0-40e04294 → 14.0.0-43239cee
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cms/apps/app/app.element.js +0 -3
- package/dist-cms/assets/lang/da-dk.js +3 -0
- package/dist-cms/assets/lang/da-dk.ts +3 -0
- package/dist-cms/assets/lang/en-us.js +21 -18
- package/dist-cms/assets/lang/en-us.ts +21 -18
- package/dist-cms/custom-elements.json +288 -19
- package/dist-cms/external/tinymce/index.js +36 -36
- package/dist-cms/mocks/browser-handlers.js +1 -1
- package/dist-cms/mocks/data/entity.data.d.ts +1 -1
- package/dist-cms/mocks/data/entity.data.js +1 -9
- package/dist-cms/mocks/data/media.data.d.ts +2 -1
- package/dist-cms/mocks/data/media.data.js +11 -0
- package/dist-cms/mocks/data/user-group.data.d.ts +17 -0
- package/dist-cms/mocks/data/user-group.data.js +61 -0
- package/dist-cms/mocks/data/user.data.d.ts +15 -0
- package/dist-cms/mocks/data/{users.data.js → user.data.js} +27 -41
- package/dist-cms/mocks/handlers/dictionary.handlers.js +2 -2
- package/dist-cms/mocks/handlers/media.handlers.js +8 -0
- package/dist-cms/mocks/handlers/partial-views.handlers.js +3 -3
- package/dist-cms/mocks/handlers/user-group/collection.handlers.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/collection.handlers.js +10 -0
- package/dist-cms/mocks/handlers/user-group/detail.handlers.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/detail.handlers.js +37 -0
- package/dist-cms/mocks/handlers/user-group/index.js +4 -0
- package/dist-cms/mocks/handlers/user-group/item.handlers.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/item.handlers.js +13 -0
- package/dist-cms/mocks/handlers/user-group/slug.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/slug.js +1 -0
- package/dist-cms/mocks/handlers/user.handlers.js +15 -1
- package/dist-cms/packages/core/components/input-list-base/input-list-base.js +1 -1
- package/dist-cms/packages/core/components/input-section/input-section.element.d.ts +2 -2
- package/dist-cms/packages/core/components/input-section/input-section.element.js +5 -5
- package/dist-cms/packages/core/extension-registry/conditions/types.d.ts +3 -2
- package/dist-cms/packages/core/extension-registry/models/index.d.ts +5 -1
- package/dist-cms/packages/core/extension-registry/models/index.js +2 -0
- package/dist-cms/packages/core/extension-registry/models/user-granular-permission.model.d.ts +8 -0
- package/dist-cms/packages/core/extension-registry/models/user-granular-permission.model.js +1 -0
- package/dist-cms/packages/core/extension-registry/models/user-permission.model.d.ts +11 -0
- package/dist-cms/packages/core/extension-registry/models/user-permission.model.js +1 -0
- package/dist-cms/packages/core/localization/index.d.ts +3 -0
- package/dist-cms/packages/core/localization/index.js +3 -0
- package/dist-cms/packages/core/localization/localize-date.element.d.ts +28 -0
- package/dist-cms/packages/core/localization/localize-date.element.js +42 -0
- package/dist-cms/packages/core/localization/localize-number.element.d.ts +28 -0
- package/dist-cms/packages/core/localization/localize-number.element.js +42 -0
- package/dist-cms/packages/core/localization/localize-relative-time.element.d.ts +34 -0
- package/dist-cms/packages/core/localization/localize-relative-time.element.js +54 -0
- package/dist-cms/packages/core/localization/localize.element.js +1 -1
- package/dist-cms/packages/core/modal/common/entity-user-permission-settings/entity-user-permission-settings-modal.element.d.ts +19 -0
- package/dist-cms/packages/core/modal/common/entity-user-permission-settings/entity-user-permission-settings-modal.element.js +97 -0
- package/dist-cms/packages/core/modal/common/manifests.js +6 -0
- package/dist-cms/packages/core/modal/common/tree-picker/tree-picker-modal.element.js +5 -3
- package/dist-cms/packages/core/modal/token/entity-user-permission-settings-modal.token.d.ts +7 -0
- package/dist-cms/packages/core/modal/token/entity-user-permission-settings-modal.token.js +4 -0
- package/dist-cms/packages/core/modal/token/index.d.ts +1 -0
- package/dist-cms/packages/core/modal/token/index.js +1 -0
- package/dist-cms/packages/core/picker-input/picker-input.context.js +1 -3
- package/dist-cms/packages/core/tree/tree.context.js +3 -2
- package/dist-cms/packages/documents/documents/components/index.d.ts +1 -0
- package/dist-cms/packages/documents/documents/components/index.js +1 -0
- package/dist-cms/packages/documents/documents/components/input-document/input-document.context.d.ts +6 -0
- package/dist-cms/packages/documents/documents/components/input-document/input-document.context.js +7 -0
- package/dist-cms/packages/documents/documents/components/input-document/input-document.element.d.ts +7 -12
- package/dist-cms/packages/documents/documents/components/input-document/input-document.element.js +51 -64
- package/dist-cms/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.d.ts +23 -0
- package/dist-cms/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.js +102 -0
- package/dist-cms/packages/documents/documents/entity-actions/create/manifests.js +9 -0
- package/dist-cms/packages/documents/documents/entity-actions/manifests.js +1 -1
- package/dist-cms/packages/documents/documents/entity-actions/permissions.action.d.ts +2 -1
- package/dist-cms/packages/documents/documents/entity-actions/permissions.action.js +22 -2
- package/dist-cms/packages/documents/documents/index.d.ts +2 -0
- package/dist-cms/packages/documents/documents/index.js +2 -0
- package/dist-cms/packages/documents/documents/manifests.d.ts +4 -0
- package/dist-cms/packages/documents/documents/manifests.js +2 -0
- package/dist-cms/packages/documents/documents/recycle-bin/entity-action/manifests.d.ts +4 -0
- package/dist-cms/packages/documents/documents/recycle-bin/entity-action/manifests.js +6 -0
- package/dist-cms/packages/documents/documents/recycle-bin/manifests.d.ts +4 -0
- package/dist-cms/packages/documents/documents/repository/document.repository.js +4 -4
- package/dist-cms/packages/documents/documents/repository/manifests.d.ts +3 -2
- package/dist-cms/packages/documents/documents/repository/manifests.js +9 -1
- package/dist-cms/packages/documents/documents/user-permissions/index.d.ts +1 -0
- package/dist-cms/packages/documents/documents/user-permissions/index.js +1 -0
- package/dist-cms/packages/documents/documents/user-permissions/manifests.d.ts +19 -0
- package/dist-cms/packages/documents/documents/user-permissions/manifests.js +196 -0
- package/dist-cms/packages/documents/documents/workspace/views/info/document-info-workspace-view.element.js +29 -28
- package/dist-cms/packages/documents/manifests.d.ts +4 -0
- package/dist-cms/packages/log-viewer/workspace/views/overview/components/log-viewer-saved-searches-overview.element.js +1 -1
- package/dist-cms/packages/media/manifests.d.ts +2 -1
- package/dist-cms/packages/media/manifests.js +1 -0
- package/dist-cms/packages/media/media/components/index.d.ts +1 -0
- package/dist-cms/packages/media/media/components/index.js +1 -0
- package/dist-cms/packages/media/media/components/input-media/input-media.context.d.ts +6 -0
- package/dist-cms/packages/media/media/components/input-media/input-media.context.js +7 -0
- package/dist-cms/packages/media/media/components/input-media/input-media.element.d.ts +7 -15
- package/dist-cms/packages/media/media/components/input-media/input-media.element.js +50 -72
- package/dist-cms/packages/media/media/index.d.ts +2 -0
- package/dist-cms/packages/media/media/index.js +1 -1
- package/dist-cms/packages/media/media/manifests.d.ts +1 -1
- package/dist-cms/packages/media/media/manifests.js +2 -0
- package/dist-cms/packages/media/media/repository/manifests.d.ts +3 -2
- package/dist-cms/packages/media/media/repository/manifests.js +9 -1
- package/dist-cms/packages/media/media/repository/media-item.store.d.ts +20 -0
- package/dist-cms/packages/media/media/repository/media-item.store.js +23 -0
- package/dist-cms/packages/media/media/repository/media.repository.d.ts +6 -0
- package/dist-cms/packages/media/media/repository/media.repository.js +22 -0
- package/dist-cms/packages/media/media/repository/sources/media-item.server.data.d.ts +24 -0
- package/dist-cms/packages/media/media/repository/sources/media-item.server.data.js +31 -0
- package/dist-cms/packages/media/media/user-permissions/index.d.ts +1 -0
- package/dist-cms/packages/media/media/user-permissions/index.js +1 -0
- package/dist-cms/packages/media/media/user-permissions/manifests.d.ts +4 -0
- package/dist-cms/packages/media/media/user-permissions/manifests.js +27 -0
- package/dist-cms/packages/users/current-user/conditions/index.d.ts +1 -0
- package/dist-cms/packages/users/current-user/conditions/index.js +1 -0
- package/dist-cms/packages/users/current-user/conditions/user-permission.condition.d.ts +18 -0
- package/dist-cms/packages/users/current-user/conditions/user-permission.condition.js +23 -0
- package/dist-cms/packages/users/current-user/index.d.ts +1 -0
- package/dist-cms/packages/users/current-user/index.js +1 -0
- package/dist-cms/packages/users/current-user/manifests.js +7 -1
- package/dist-cms/packages/users/current-user/modals/current-user/current-user-modal.element.js +7 -7
- package/dist-cms/packages/users/index.d.ts +4 -2
- package/dist-cms/packages/users/index.js +4 -2
- package/dist-cms/packages/users/manifests.d.ts +2 -0
- package/dist-cms/packages/users/manifests.js +3 -0
- package/dist-cms/packages/users/user-groups/collection/user-group-collection-header.element.js +2 -2
- package/dist-cms/packages/users/user-groups/collection/user-group-collection-view.element.js +6 -6
- package/dist-cms/packages/users/user-groups/components/index.d.ts +1 -0
- package/dist-cms/packages/users/user-groups/components/index.js +1 -0
- package/dist-cms/packages/users/user-groups/entity-actions/manifests.d.ts +2 -0
- package/dist-cms/packages/users/user-groups/entity-actions/manifests.js +19 -0
- package/dist-cms/packages/users/user-groups/index.d.ts +2 -0
- package/dist-cms/packages/users/user-groups/index.js +2 -0
- package/dist-cms/packages/users/user-groups/manifests.d.ts +1 -1
- package/dist-cms/packages/users/user-groups/manifests.js +2 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.d.ts +16 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.js +69 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-granular-permission-list.element.d.ts +14 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-granular-permission-list.element.js +31 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace-editor.element.d.ts +2 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace-editor.element.js +57 -56
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.context.d.ts +12 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.context.js +20 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.element.js +1 -1
- package/dist-cms/packages/users/users/collection/user-collection-header.element.js +18 -11
- package/dist-cms/packages/users/users/collection/views/grid/user-collection-grid-view.element.js +6 -6
- package/dist-cms/packages/users/users/collection/views/table/column-layouts/status/user-table-status-column-layout.element.js +3 -3
- package/dist-cms/packages/users/users/components/index.d.ts +3 -0
- package/dist-cms/packages/users/users/components/index.js +3 -0
- package/dist-cms/packages/users/users/components/user-input/user-input.element.js +2 -2
- package/dist-cms/packages/users/users/components/user-permission-setting/user-permission-setting.element.d.ts +15 -0
- package/dist-cms/packages/users/users/components/user-permission-setting/user-permission-setting.element.js +66 -0
- package/dist-cms/packages/users/users/index.d.ts +2 -0
- package/dist-cms/packages/users/users/index.js +2 -0
- package/dist-cms/packages/users/users/modals/user-picker/user-picker-modal.element.d.ts +3 -1
- package/dist-cms/packages/users/users/modals/user-picker/user-picker-modal.element.js +20 -25
- package/dist-cms/packages/users/users/repository/index.d.ts +1 -0
- package/dist-cms/packages/users/users/repository/index.js +1 -0
- package/dist-cms/packages/users/users/repository/user.repository.js +1 -1
- package/dist-cms/packages/users/users/workspace/user-workspace-editor.element.js +73 -56
- package/dist-cms/packages/users/utils.d.ts +5 -2
- package/dist-cms/packages/users/utils.js +14 -14
- package/dist-cms/shared/auth/auth-flow.d.ts +0 -4
- package/dist-cms/shared/auth/auth-flow.js +6 -25
- package/dist-cms/shared/repository/repository-items.manager.js +5 -0
- package/dist-cms/shared/umb-events/index.d.ts +1 -0
- package/dist-cms/shared/umb-events/index.js +1 -0
- package/dist-cms/shared/umb-events/selected.event.d.ts +3 -0
- package/dist-cms/shared/umb-events/selected.event.js +6 -0
- package/dist-cms/tinymce/CHANGELOG.md +48 -0
- package/dist-cms/tinymce/composer.json +1 -1
- package/dist-cms/tinymce/models/dom/model.js +1 -1
- package/dist-cms/tinymce/models/dom/model.min.js +1 -1
- package/dist-cms/tinymce/package.json +1 -1
- package/dist-cms/tinymce/plugins/accordion/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/accordion/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/advlist/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/advlist/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/anchor/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/anchor/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/autolink/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/autolink/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/autoresize/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/autoresize/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/autosave/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/autosave/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/charmap/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/charmap/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/code/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/code/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/codesample/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/codesample/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/directionality/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/directionality/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/emoticons/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/emoticons/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/fullscreen/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/fullscreen/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/help/plugin.js +5 -5
- package/dist-cms/tinymce/plugins/help/plugin.min.js +2 -2
- package/dist-cms/tinymce/plugins/image/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/image/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/importcss/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/importcss/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/insertdatetime/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/insertdatetime/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/link/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/link/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/lists/plugin.js +63 -8
- package/dist-cms/tinymce/plugins/lists/plugin.min.js +2 -2
- package/dist-cms/tinymce/plugins/media/plugin.js +3 -23
- package/dist-cms/tinymce/plugins/media/plugin.min.js +2 -2
- package/dist-cms/tinymce/plugins/nonbreaking/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/nonbreaking/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/pagebreak/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/pagebreak/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/preview/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/preview/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/quickbars/plugin.js +13 -4
- package/dist-cms/tinymce/plugins/quickbars/plugin.min.js +2 -2
- package/dist-cms/tinymce/plugins/save/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/save/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/searchreplace/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/searchreplace/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/table/plugin.js +2 -2
- package/dist-cms/tinymce/plugins/table/plugin.min.js +2 -2
- package/dist-cms/tinymce/plugins/template/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/template/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/visualblocks/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/visualblocks/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/visualchars/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/visualchars/plugin.min.js +1 -1
- package/dist-cms/tinymce/plugins/wordcount/plugin.js +1 -1
- package/dist-cms/tinymce/plugins/wordcount/plugin.min.js +1 -1
- package/dist-cms/tinymce/skins/ui/oxide/content.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide/content.inline.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide/content.inline.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide/content.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide/skin.css +51 -11
- package/dist-cms/tinymce/skins/ui/oxide/skin.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide-dark/content.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide-dark/content.inline.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide-dark/content.inline.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide-dark/content.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/oxide-dark/skin.css +54 -14
- package/dist-cms/tinymce/skins/ui/oxide-dark/skin.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5/content.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5/content.inline.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5/content.inline.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5/content.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5/skin.css +51 -11
- package/dist-cms/tinymce/skins/ui/tinymce-5/skin.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5-dark/content.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5-dark/content.inline.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5-dark/content.min.css +1 -1
- package/dist-cms/tinymce/skins/ui/tinymce-5-dark/skin.css +51 -11
- package/dist-cms/tinymce/skins/ui/tinymce-5-dark/skin.min.css +1 -1
- package/dist-cms/tinymce/themes/silver/theme.js +158 -55
- package/dist-cms/tinymce/themes/silver/theme.min.js +2 -2
- package/dist-cms/tinymce/tinymce.d.ts +4 -6
- package/dist-cms/tinymce/tinymce.js +911 -691
- package/dist-cms/tinymce/tinymce.min.js +2 -2
- package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
- package/dist-cms/umbraco-package-schema.json +154 -0
- package/dist-cms/vscode-html-custom-data.json +167 -18
- package/package.json +2 -2
- package/dist-cms/mocks/data/user-groups.data.d.ts +0 -9
- package/dist-cms/mocks/data/user-groups.data.js +0 -21
- package/dist-cms/mocks/data/users.data.d.ts +0 -16
- package/dist-cms/mocks/handlers/user-group.handlers.js +0 -17
- /package/dist-cms/mocks/handlers/{user-group.handlers.d.ts → user-group/index.d.ts} +0 -0
|
@@ -4,7 +4,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import {
|
|
7
|
+
import { getDisplayStateFromUserStatus } from '../../utils.js';
|
|
8
|
+
import { UmbUserRepository } from '../index.js';
|
|
8
9
|
import { UUIInputEvent } from '../../../../external/uui/index.js';
|
|
9
10
|
import { css, html, nothing, customElement, state, ifDefined, repeat, } from '../../../../external/lit/index.js';
|
|
10
11
|
import { firstValueFrom } from '../../../../external/rxjs/index.js';
|
|
@@ -12,9 +13,7 @@ import { UMB_CHANGE_PASSWORD_MODAL } from '../../../core/modal/index.js';
|
|
|
12
13
|
import { UmbLitElement } from '../../../../shared/lit-element/index.js';
|
|
13
14
|
import { UMB_WORKSPACE_CONTEXT } from '../../../core/workspace/index.js';
|
|
14
15
|
import { UserStateModel } from '../../../../external/backend-api/index.js';
|
|
15
|
-
import { createExtensionClass } from '../../../../libs/extension-api/index.js';
|
|
16
16
|
import { umbExtensionsRegistry } from '../../../core/extension-registry/index.js';
|
|
17
|
-
import { UmbObserverController } from '../../../../libs/observable-api/index.js';
|
|
18
17
|
import { UMB_AUTH } from '../../../../shared/auth/index.js';
|
|
19
18
|
import { UmbTextStyles } from '../../../../shared/style/index.js';
|
|
20
19
|
export let UmbUserWorkspaceEditorElement = class UmbUserWorkspaceEditorElement extends UmbLitElement {
|
|
@@ -25,6 +24,7 @@ export let UmbUserWorkspaceEditorElement = class UmbUserWorkspaceEditorElement e
|
|
|
25
24
|
constructor() {
|
|
26
25
|
super();
|
|
27
26
|
this.languages = [];
|
|
27
|
+
this.#userRepository = new UmbUserRepository(this);
|
|
28
28
|
this.consumeContext(UMB_AUTH, (instance) => {
|
|
29
29
|
this.#auth = instance;
|
|
30
30
|
this.#observeCurrentUser();
|
|
@@ -33,18 +33,6 @@ export let UmbUserWorkspaceEditorElement = class UmbUserWorkspaceEditorElement e
|
|
|
33
33
|
this.#workspaceContext = workspaceContext;
|
|
34
34
|
this.#observeUser();
|
|
35
35
|
});
|
|
36
|
-
// TODO: this code is reused in multiple places, so it should be extracted to a function
|
|
37
|
-
new UmbObserverController(this, umbExtensionsRegistry.getByTypeAndAlias('repository', 'Umb.Repository.User'), async (repositoryManifest) => {
|
|
38
|
-
if (!repositoryManifest)
|
|
39
|
-
return;
|
|
40
|
-
try {
|
|
41
|
-
const result = await createExtensionClass(repositoryManifest, [this]);
|
|
42
|
-
this.#userRepository = result;
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
throw new Error('Could not create repository with alias: Umb.Repository.User');
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
36
|
}
|
|
49
37
|
#observeUser() {
|
|
50
38
|
if (!this.#workspaceContext)
|
|
@@ -152,52 +140,63 @@ export let UmbUserWorkspaceEditorElement = class UmbUserWorkspaceEditorElement e
|
|
|
152
140
|
return nothing;
|
|
153
141
|
return html ` <uui-box>
|
|
154
142
|
<div slot="headline"><umb-localize key="user_profile">Profile</umb-localize></div>
|
|
155
|
-
<umb-workspace-property-layout label="
|
|
156
|
-
<uui-input
|
|
143
|
+
<umb-workspace-property-layout label="${this.localize.term('general_email')}">
|
|
144
|
+
<uui-input
|
|
145
|
+
slot="editor"
|
|
146
|
+
name="email"
|
|
147
|
+
label="${this.localize.term('general_email')}"
|
|
148
|
+
readonly
|
|
149
|
+
value=${ifDefined(this._user.email)}></uui-input>
|
|
157
150
|
</umb-workspace-property-layout>
|
|
158
|
-
<umb-workspace-property-layout
|
|
151
|
+
<umb-workspace-property-layout
|
|
152
|
+
label="${this.localize.term('user_language')}"
|
|
153
|
+
description=${this.localize.term('user_languageHelp')}>
|
|
159
154
|
<uui-select
|
|
160
155
|
slot="editor"
|
|
161
156
|
name="language"
|
|
162
|
-
label="
|
|
157
|
+
label="${this.localize.term('user_language')}"
|
|
163
158
|
.options=${this.languages}
|
|
164
159
|
@change="${this.#onLanguageChange}">
|
|
165
160
|
</uui-select>
|
|
166
161
|
</umb-workspace-property-layout>
|
|
167
162
|
</uui-box>
|
|
168
163
|
<uui-box>
|
|
169
|
-
<div slot="headline">Assign
|
|
164
|
+
<div slot="headline"><umb-localize key="user_assignAccess">Assign Access</umb-localize></div>
|
|
170
165
|
<div id="assign-access">
|
|
171
|
-
<umb-workspace-property-layout
|
|
166
|
+
<umb-workspace-property-layout
|
|
167
|
+
label="${this.localize.term('general_groups')}"
|
|
168
|
+
description="${this.localize.term('user_groupsHelp')}">
|
|
172
169
|
<umb-user-group-input
|
|
173
170
|
slot="editor"
|
|
174
171
|
.selectedIds=${this._user.userGroupIds ?? []}
|
|
175
172
|
@change=${(e) => this.#onUserGroupsChange(e.target.selectedIds)}></umb-user-group-input>
|
|
176
173
|
</umb-workspace-property-layout>
|
|
177
174
|
<umb-workspace-property-layout
|
|
178
|
-
label
|
|
179
|
-
description
|
|
175
|
+
label=${this.localize.term('user_startnodes')}
|
|
176
|
+
description=${this.localize.term('user_startnodeshelp')}>
|
|
180
177
|
<umb-property-editor-ui-document-picker
|
|
181
178
|
.value=${this._user.contentStartNodeIds ?? []}
|
|
182
179
|
@property-value-change=${(e) => this.#workspaceContext?.updateProperty('contentStartNodeIds', e.target.value)}
|
|
183
180
|
slot="editor"></umb-property-editor-ui-document-picker>
|
|
184
181
|
</umb-workspace-property-layout>
|
|
185
182
|
<umb-workspace-property-layout
|
|
186
|
-
label
|
|
187
|
-
description
|
|
183
|
+
label=${this.localize.term('user_mediastartnodes')}
|
|
184
|
+
description=${this.localize.term('user_mediastartnodeshelp')}>
|
|
188
185
|
<b slot="editor">NEED MEDIA PICKER</b>
|
|
189
186
|
</umb-workspace-property-layout>
|
|
190
187
|
</div>
|
|
191
188
|
</uui-box>
|
|
192
|
-
<uui-box headline
|
|
189
|
+
<uui-box headline=${this.localize.term('user_access')}>
|
|
193
190
|
<div slot="header" class="faded-text">
|
|
194
|
-
|
|
191
|
+
<umb-localize key="user_accessHelp"
|
|
192
|
+
>Based on the assigned groups and start nodes, the user has access to the following nodes</umb-localize
|
|
193
|
+
>
|
|
195
194
|
</div>
|
|
196
195
|
|
|
197
|
-
<b>Content</b>
|
|
196
|
+
<b><umb-localize key="sections_content">Content</umb-localize></b>
|
|
198
197
|
${this.#renderContentStartNodes()}
|
|
199
198
|
<hr />
|
|
200
|
-
<b>Media</b>
|
|
199
|
+
<b><umb-localize key="sections_media">Media</umb-localize></b>
|
|
201
200
|
<uui-ref-node name="Media Root">
|
|
202
201
|
<uui-icon slot="icon" name="folder"></uui-icon>
|
|
203
202
|
</uui-ref-node>
|
|
@@ -206,41 +205,42 @@ export let UmbUserWorkspaceEditorElement = class UmbUserWorkspaceEditorElement e
|
|
|
206
205
|
#renderRightColumn() {
|
|
207
206
|
if (!this._user || !this.#workspaceContext)
|
|
208
207
|
return nothing;
|
|
209
|
-
const
|
|
208
|
+
const displayState = getDisplayStateFromUserStatus(this._user.state);
|
|
210
209
|
return html ` <uui-box>
|
|
211
210
|
<div id="user-info">
|
|
212
211
|
<uui-avatar .name=${this._user?.name || ''}></uui-avatar>
|
|
213
|
-
<uui-button label
|
|
212
|
+
<uui-button label=${this.localize.term('user_changePhoto')}></uui-button>
|
|
214
213
|
<hr />
|
|
215
214
|
${this.#renderActionButtons()}
|
|
216
215
|
|
|
217
216
|
<div>
|
|
218
|
-
<b>Status
|
|
219
|
-
<uui-tag look="${ifDefined(
|
|
220
|
-
${this.
|
|
217
|
+
<b><umb-localize key="general_status">Status</umb-localize>:</b>
|
|
218
|
+
<uui-tag look="${ifDefined(displayState?.look)}" color="${ifDefined(displayState?.color)}">
|
|
219
|
+
${this.localize.term('user_' + displayState.key)}
|
|
221
220
|
</uui-tag>
|
|
222
221
|
</div>
|
|
223
222
|
|
|
224
223
|
${this._user?.state === UserStateModel.INVITED
|
|
225
224
|
? html `
|
|
226
|
-
<uui-textarea placeholder
|
|
227
|
-
<uui-button look="primary" label
|
|
225
|
+
<uui-textarea placeholder=${this.localize.term('placeholders_enterMessage')}></uui-textarea>
|
|
226
|
+
<uui-button look="primary" label=${this.localize.term('actions_resendInvite')}></uui-button>
|
|
228
227
|
`
|
|
229
228
|
: nothing}
|
|
230
|
-
${this.#renderInfoItem('
|
|
231
|
-
|
|
232
|
-
${this.#renderInfoItem('
|
|
233
|
-
${this.#renderInfoItem('
|
|
234
|
-
${this.#renderInfoItem('
|
|
235
|
-
${this.#renderInfoItem('
|
|
236
|
-
${this.#renderInfoItem('
|
|
229
|
+
${this.#renderInfoItem('user_lastLogin', this.localize.date(this._user.lastLoginDate) ||
|
|
230
|
+
`${this._user.name + ' ' + this.localize.term('user_noLogin')} `)}
|
|
231
|
+
${this.#renderInfoItem('user_failedPasswordAttempts', this._user.failedLoginAttempts)}
|
|
232
|
+
${this.#renderInfoItem('user_lastLockoutDate', this._user.lastLockoutDate || `${this._user.name + ' ' + this.localize.term('user_noLockouts')}`)}
|
|
233
|
+
${this.#renderInfoItem('user_lastPasswordChangeDate', this._user.lastLoginDate || `${this._user.name + ' ' + this.localize.term('user_noPasswordChange')}`)}
|
|
234
|
+
${this.#renderInfoItem('user_createDate', this.localize.date(this._user.createDate))}
|
|
235
|
+
${this.#renderInfoItem('user_updateDate', this.localize.date(this._user.updateDate))}
|
|
236
|
+
${this.#renderInfoItem('general_id', this._user.id)}
|
|
237
237
|
</div>
|
|
238
238
|
</uui-box>`;
|
|
239
239
|
}
|
|
240
|
-
#renderInfoItem(
|
|
240
|
+
#renderInfoItem(labelkey, value) {
|
|
241
241
|
return html `
|
|
242
242
|
<div>
|
|
243
|
-
<b
|
|
243
|
+
<b><umb-localize key=${labelkey}></umb-localize></b>
|
|
244
244
|
<span>${value}</span>
|
|
245
245
|
</div>
|
|
246
246
|
`;
|
|
@@ -251,23 +251,40 @@ export let UmbUserWorkspaceEditorElement = class UmbUserWorkspaceEditorElement e
|
|
|
251
251
|
//TODO: Find out if the current user is an admin. If not, show no buttons.
|
|
252
252
|
// if (this._currentUserStore?.isAdmin === false) return nothing;
|
|
253
253
|
const buttons = [];
|
|
254
|
-
if (this._user.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
254
|
+
if (this._user.id !== this._currentUser?.id) {
|
|
255
|
+
if (this._user.state === UserStateModel.DISABLED) {
|
|
256
|
+
buttons.push(html `
|
|
257
|
+
<uui-button
|
|
258
|
+
@click=${this.#onUserStatusChange}
|
|
259
|
+
look="secondary"
|
|
260
|
+
color="positive"
|
|
261
|
+
label=${this.localize.term('actions_enable')}></uui-button>
|
|
262
|
+
`);
|
|
263
|
+
}
|
|
264
|
+
if (this._user.state === UserStateModel.ACTIVE || this._user.state === UserStateModel.INACTIVE) {
|
|
265
|
+
buttons.push(html `
|
|
266
|
+
<uui-button
|
|
267
|
+
@click=${this.#onUserStatusChange}
|
|
268
|
+
look="secondary"
|
|
269
|
+
color="warning"
|
|
270
|
+
label=${this.localize.term('actions_disable')}></uui-button>
|
|
271
|
+
`);
|
|
272
|
+
}
|
|
263
273
|
}
|
|
264
274
|
if (this._currentUser?.id !== this._user?.id) {
|
|
265
275
|
const button = html `
|
|
266
|
-
<uui-button
|
|
276
|
+
<uui-button
|
|
277
|
+
@click=${this.#onUserDelete}
|
|
278
|
+
look="secondary"
|
|
279
|
+
color="danger"
|
|
280
|
+
label=${this.localize.term('user_deleteUser')}></uui-button>
|
|
267
281
|
`;
|
|
268
282
|
buttons.push(button);
|
|
269
283
|
}
|
|
270
|
-
buttons.push(html `<uui-button
|
|
284
|
+
buttons.push(html `<uui-button
|
|
285
|
+
@click=${this.#onPasswordChange}
|
|
286
|
+
look="secondary"
|
|
287
|
+
label=${this.localize.term('general_changePassword')}></uui-button>`);
|
|
271
288
|
return buttons;
|
|
272
289
|
}
|
|
273
290
|
#renderContentStartNodes() {
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { InterfaceColor, InterfaceLook } from '../../external/uui/index.js';
|
|
2
2
|
import { UserStateModel } from '../../external/backend-api/index.js';
|
|
3
|
-
|
|
3
|
+
interface DisplayStatus {
|
|
4
4
|
look: InterfaceLook;
|
|
5
5
|
color: InterfaceColor;
|
|
6
|
-
|
|
6
|
+
key: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const getDisplayStateFromUserStatus: (status?: UserStateModel) => DisplayStatus;
|
|
9
|
+
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
1
|
+
const userStates = [
|
|
2
|
+
{ "key": "All", color: "positive", look: "secondary" },
|
|
3
|
+
{ "key": "Active", "color": "positive", look: "primary" },
|
|
4
|
+
{ "key": "Disabled", "color": "danger", look: "primary" },
|
|
5
|
+
{ "key": "LockedOut", "color": "danger", look: "secondary" },
|
|
6
|
+
{ "key": "Invited", "color": "warning", look: "primary" },
|
|
7
|
+
{ "key": "Inactive", "color": "warning", look: "primary" }
|
|
8
|
+
];
|
|
9
|
+
export const getDisplayStateFromUserStatus = (status) => userStates
|
|
10
|
+
.filter(state => state.key === status)
|
|
11
|
+
.map(state => ({
|
|
12
|
+
...state,
|
|
13
|
+
key: 'state' + state.key
|
|
14
|
+
}))[0];
|
|
@@ -59,10 +59,6 @@ export declare class UmbAuthFlow {
|
|
|
59
59
|
* saved the state in local storage before redirecting the user to the login page.
|
|
60
60
|
*/
|
|
61
61
|
completeAuthorizationIfPossible(): Promise<void>;
|
|
62
|
-
/**
|
|
63
|
-
* This method will query the server for the service configuration usually found at /.well-known/openid-configuration.
|
|
64
|
-
*/
|
|
65
|
-
fetchServiceConfiguration(): Promise<void>;
|
|
66
62
|
/**
|
|
67
63
|
* This method will make an authorization request to the server.
|
|
68
64
|
*
|
|
@@ -69,7 +69,6 @@ export class UmbAuthFlow {
|
|
|
69
69
|
#storageBackend;
|
|
70
70
|
// state
|
|
71
71
|
#configuration;
|
|
72
|
-
#openIdConnectUrl;
|
|
73
72
|
#redirectUri;
|
|
74
73
|
#clientId;
|
|
75
74
|
#scope;
|
|
@@ -77,10 +76,15 @@ export class UmbAuthFlow {
|
|
|
77
76
|
#refreshToken;
|
|
78
77
|
#accessTokenResponse;
|
|
79
78
|
constructor(openIdConnectUrl, redirectUri, clientId = 'umbraco-back-office', scope = 'offline_access') {
|
|
80
|
-
this.#openIdConnectUrl = openIdConnectUrl;
|
|
81
79
|
this.#redirectUri = redirectUri;
|
|
82
80
|
this.#clientId = clientId;
|
|
83
81
|
this.#scope = scope;
|
|
82
|
+
this.#configuration = new AuthorizationServiceConfiguration({
|
|
83
|
+
authorization_endpoint: `${openIdConnectUrl}/umbraco/management/api/v1/security/back-office/authorize`,
|
|
84
|
+
token_endpoint: `${openIdConnectUrl}/umbraco/management/api/v1/security/back-office/token`,
|
|
85
|
+
revocation_endpoint: `${openIdConnectUrl}/umbraco/management/api/v1/security/back-office/revoke`,
|
|
86
|
+
end_session_endpoint: `${openIdConnectUrl}/umbraco/management/api/v1/security/back-office/signout`,
|
|
87
|
+
});
|
|
84
88
|
this.#notifier = new AuthorizationNotifier();
|
|
85
89
|
this.#tokenHandler = new BaseTokenRequestHandler(requestor);
|
|
86
90
|
this.#storageBackend = new LocalStorageBackend();
|
|
@@ -118,10 +122,6 @@ export class UmbAuthFlow {
|
|
|
118
122
|
* - If there is no new authorization to be made, do nothing
|
|
119
123
|
*/
|
|
120
124
|
async setInitialState() {
|
|
121
|
-
// Ensure there is a connection to the server
|
|
122
|
-
if (!this.#configuration) {
|
|
123
|
-
await this.fetchServiceConfiguration();
|
|
124
|
-
}
|
|
125
125
|
const tokenResponseJson = await this.#storageBackend.getItem(TOKEN_RESPONSE_NAME);
|
|
126
126
|
if (tokenResponseJson) {
|
|
127
127
|
const response = new TokenResponse(JSON.parse(tokenResponseJson));
|
|
@@ -142,23 +142,12 @@ export class UmbAuthFlow {
|
|
|
142
142
|
completeAuthorizationIfPossible() {
|
|
143
143
|
return this.#authorizationHandler.completeAuthorizationRequestIfPossible();
|
|
144
144
|
}
|
|
145
|
-
/**
|
|
146
|
-
* This method will query the server for the service configuration usually found at /.well-known/openid-configuration.
|
|
147
|
-
*/
|
|
148
|
-
async fetchServiceConfiguration() {
|
|
149
|
-
const response = await AuthorizationServiceConfiguration.fetchFromIssuer(this.#openIdConnectUrl, requestor);
|
|
150
|
-
this.#configuration = response;
|
|
151
|
-
}
|
|
152
145
|
/**
|
|
153
146
|
* This method will make an authorization request to the server.
|
|
154
147
|
*
|
|
155
148
|
* @param username The username to use for the authorization request. It will be provided to the OpenID server as a hint.
|
|
156
149
|
*/
|
|
157
150
|
makeAuthorizationRequest(username) {
|
|
158
|
-
if (!this.#configuration) {
|
|
159
|
-
console.log('Unknown service configuration');
|
|
160
|
-
throw new Error('Unknown service configuration');
|
|
161
|
-
}
|
|
162
151
|
const extras = { prompt: 'consent', access_type: 'offline' };
|
|
163
152
|
if (username) {
|
|
164
153
|
extras['login_hint'] = username;
|
|
@@ -199,10 +188,6 @@ export class UmbAuthFlow {
|
|
|
199
188
|
* @returns The access token for the user.
|
|
200
189
|
*/
|
|
201
190
|
async performWithFreshTokens() {
|
|
202
|
-
if (!this.#configuration) {
|
|
203
|
-
console.log('Unknown service configuration');
|
|
204
|
-
return Promise.reject('Unknown service configuration');
|
|
205
|
-
}
|
|
206
191
|
if (!this.#refreshToken) {
|
|
207
192
|
console.log('Missing refreshToken.');
|
|
208
193
|
return Promise.resolve('Missing refreshToken.');
|
|
@@ -235,10 +220,6 @@ export class UmbAuthFlow {
|
|
|
235
220
|
* This method will make a token request to the server using the authorization code.
|
|
236
221
|
*/
|
|
237
222
|
async #makeRefreshTokenRequest(code, codeVerifier) {
|
|
238
|
-
if (!this.#configuration) {
|
|
239
|
-
console.log('Unknown service configuration');
|
|
240
|
-
return Promise.reject();
|
|
241
|
-
}
|
|
242
223
|
const extras = {};
|
|
243
224
|
if (codeVerifier) {
|
|
244
225
|
extras.code_verifier = codeVerifier;
|
|
@@ -29,6 +29,11 @@ export class UmbRepositoryItemsManager {
|
|
|
29
29
|
setUniques(uniques) {
|
|
30
30
|
this.#uniques.next(uniques);
|
|
31
31
|
//TODO: Check if it's safe to call requestItems here.
|
|
32
|
+
// We don't have to request items if there is no uniques.
|
|
33
|
+
if (uniques.length === 0) {
|
|
34
|
+
this.#items.next([]);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
32
37
|
this.#requestItems();
|
|
33
38
|
}
|
|
34
39
|
getItems() {
|
|
@@ -6,6 +6,54 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 6.7.0 - 2023-08-30
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- New `help_accessibility` option displays the keyboard shortcut to open the in-application help in the status bar. #TINY-9379
|
|
13
|
+
- Added a new `InsertNewBlockBefore` command which inserts an empty block before the block containing the current selection. #TINY-10022
|
|
14
|
+
- Added a new `InsertNewBlockAfter` command which inserts an empty block after the block containing the current selection. #TINY-10022
|
|
15
|
+
|
|
16
|
+
### Improved
|
|
17
|
+
- Adding a newline after a table would, in some specific cases, not work. #TINY-9863
|
|
18
|
+
- Menus now have a slight margin at the top and bottom to more clearly separate them from the frame edge. #TINY-9978
|
|
19
|
+
- Updated **More** toolbar button tooltip text from *More...* to *Reveal or hide additional toolbar items*. #TINY-9629
|
|
20
|
+
- Where multiple case sensitive variants of a translation key are provided, they will now all be preserved in the translation object instead of just the lowercase variant. #TINY-10115
|
|
21
|
+
- Improved screen reader announcements of the column and row selection in the grid presented by the **Table** menu and toolbar item. #TINY-10140
|
|
22
|
+
- Improved the keyboard focus visibility for links inside dialogs. #TINY-10124
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- Change `UndoLevelType` from `enum` to union type so that it is easier to use. #TINY-9764
|
|
26
|
+
- The pattern replacement removed spaces if they were contained within a tag that only contained a space and the text to replace. #TINY-9744
|
|
27
|
+
- If loading content CSS takes more than 500ms, the editor will be set to an *in progress* state until the CSS is ready. #TINY-10008
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
- Applying an ordered or unordered list to a selected checklist incorrectly turned the list into paragraphs. #TINY-9975
|
|
31
|
+
- Returning an empty string in a custom context menu update function resulted in a small white line appearing on right-click and the browser-native context menu would not present. #TINY-9842
|
|
32
|
+
- For sufficiently long URLs and sufficiently wide windows, URL autocompletion hid middle portions of the URL from view. #TINY-10017
|
|
33
|
+
- Numeric input in toolbar items did not disable when a switching from edit to read-only mode. #TINY-10129
|
|
34
|
+
- The Quick Toolbars plugin showed text alignment buttons on pagebreaks. #TINY-10054
|
|
35
|
+
- Creating lists in empty blocks sometimes, and incorrectly, converted adjacent block elements into list items. #TINY-10136
|
|
36
|
+
- Creating a list from multiple `<div>` elements only created a partial list. #TINY-9872
|
|
37
|
+
- Tab navigation incorrectly stopped around `iframe` dialog components. #TINY-9815
|
|
38
|
+
- It was possible to delete the sole empty block immediately before a `<details>` element if it was nested within another `<details>` element. #TINY-9965
|
|
39
|
+
- Deleting `<li>` elements that only contained `<br>` tags sometimes caused a crash. #TINY-6888
|
|
40
|
+
- It was possible to remove the `<summary>` element from a `<details>` element by dragging and dropping. #TINY-9960
|
|
41
|
+
- It was possible to break `<summary>` elements if content containing block elements was dragged-and-dropped inside them. #TINY-9960
|
|
42
|
+
- Contents were not removed from the drag start source if dragging and dropping internally into a transparent block element. #TINY-9960
|
|
43
|
+
- Using the Media plugin unexpectedly changed `<script>` tags in the editor body to `<image>` tags. #TINY-10007
|
|
44
|
+
- In some circumstances, pressing the **Enter** key scrolled the entire page. #TINY-9828
|
|
45
|
+
- The border styles of a table were incorrectly split into a longhand form after table dialog updates. #TINY-9843
|
|
46
|
+
- Links in **Help → Help → Plugins** and **Help → Help → Version** were not navigable by keyboard. #TINY-10071
|
|
47
|
+
- Fixed the inability to insert content next to the `<details>` element when it is the first or last content element. Pressing the **Up** or **Down** arrow key now inserts a block element before or after the `<details>` element. #TINY-9827
|
|
48
|
+
- An empty element with a `contenteditable="true"` attribute within a noneditable root was deleted when the Backspace key was pressed. #TINY-10011
|
|
49
|
+
- The `color_cols` option was not respected when set to the value 5 with a custom `color_map` specified. #TINY-10126
|
|
50
|
+
- In Safari on macOS, deleting backwards within a `<summary>` element removed the entire `<details>` element if it had no other content. #TINY-10123
|
|
51
|
+
|
|
52
|
+
## 6.6.2 - 2023-08-09
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
- An "Uncaught TypeError: Cannot read properties of null" error would sometimes be thrown when updating the content of a `streamContent: true` iframe dialog component. #TINY-10128
|
|
56
|
+
|
|
9
57
|
## 6.6.1 - 2023-08-02
|
|
10
58
|
|
|
11
59
|
### Added
|