UNPKG

@ckeditor/ckeditor5-revision-history

Version:

Document revision history feature for CKEditor 5.

586 lines (485 loc) 22 kB
/** * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ .ck { --ck-revision-history-loading-overlay-transition-duration: .2s; --ck-revision-history-loading-overlay-transition-delay: 0s; --ck-revision-history-loading-overlay-spinner-rotation-duration: 1s; --ck-revision-history-loading-overlay-spinner-size: 60px; --ck-revision-history-loading-overlay-visible-background: #fff; } .ck.ck-editor__editable:before, .ck.ck-editor__editable:after { visibility: hidden; transition: opacity var(--ck-revision-history-loading-overlay-transition-duration) ease; opacity: 0; content: ""; transition-delay: 0s; position: absolute; } @media (prefers-reduced-motion: reduce) { .ck.ck-editor__editable:before, .ck.ck-editor__editable:after { transition: none; } } .ck.ck-editor__editable:before { background: var(--ck-revision-history-loading-overlay-visible-background); width: 100%; height: 100%; z-index: var(--ck-z-default); top: 0; left: 0; } .ck.ck-editor__editable:after { box-sizing: border-box; width: var(--ck-revision-history-loading-overlay-spinner-size); height: var(--ck-revision-history-loading-overlay-spinner-size); border-top: 3px solid var(--ck-color-base-text); z-index: var(--ck-z-default); border-right: 3px solid #0000; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%); } .ck.ck-editor__editable.ck-editor__editable__loading-overlay, .ck.ck-editor__editable.ck-editor__editable__overlay { min-height: calc(var(--ck-revision-history-loading-overlay-spinner-size) + 2 * var(--ck-spacing-large)); position: relative; } :is(.ck.ck-editor__editable.ck-editor__editable__loading-overlay, .ck.ck-editor__editable.ck-editor__editable__overlay):before, :is(.ck.ck-editor__editable.ck-editor__editable__loading-overlay, .ck.ck-editor__editable.ck-editor__editable__overlay):after { visibility: visible; z-index: 2; opacity: .8; transition-delay: var(--ck-revision-history-loading-overlay-transition-delay); } .ck.ck-editor__editable.ck-editor__editable__loading-overlay:after { animation: ck-revision-history-spinner-animation var(--ck-revision-history-loading-overlay-spinner-rotation-duration) linear infinite; } .ck.ck-editor__editable.ck-editor__editable__overlay:after { visibility: hidden; } @keyframes ck-revision-history-spinner-animation { from { transform: translate(-50%, -50%) rotate(0); } to { transform: translate(-50%, -50%) rotate(360deg); } } .ck.ck-revision-history-save-revision-form { flex-flow: row; align-items: flex-start; width: 400px; display: flex; } .ck.ck-revision-history-save-revision-form .ck-labeled-field-view { width: 100%; } .ck.ck-revision-history-save-revision-form .ck-label { display: none; } .ck.ck-revision-history-save-revision-form .ck-input { width: 100%; } .ck.ck-revision-history-sidebar__revision-name { left: calc(-1 * var(--ck-spacing-small)); margin-right: 30px; font-size: 1.2em; font-weight: bold; display: block; position: relative; } .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-label { display: none; } .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input { padding: var(--ck-spacing-tiny) var(--ck-spacing-small); min-height: auto; color: inherit; font-family: inherit; font-weight: bold; font-size: var(--ck-font-size-normal); border-radius: var(--ck-border-radius); width: 100%; min-width: auto; transition: var(--ck-revision-history-revision-transitions); text-overflow: ellipsis; background: none; } @media (prefers-reduced-motion: reduce) { .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input { transition: none; } } .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input, .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input:focus, .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input[readonly] { background: none; } .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input:not(.ck-input_focused) { border-color: #0000; } .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input::placeholder { color: inherit; } .ck.ck-revision-history-sidebar__revision-name > .ck-labeled-field-view__input-wrapper > .ck-input[readonly] { pointer-events: none; } .ck.ck-revision-history-sidebar__revision-author { transition: var(--ck-revision-history-revision-transitions); display: block; position: relative; } @media (prefers-reduced-motion: reduce) { .ck.ck-revision-history-sidebar__revision-author { transition: none; } } .ck.ck-revision-history-sidebar__revision-author .ck-revision-history-sidebar__revision-author__name { text-overflow: ellipsis; white-space: nowrap; width: 100%; font-weight: bold; display: block; overflow: hidden; } .ck.ck-revision-history-sidebar__revision-author .ck-icon { left: calc(-1 * var(--ck-revision-history-revision-author-icon-offset)); width: 11px; height: 10px; position: absolute; top: 3px; } .ck.ck-revision-history-sidebar__revision-author:not(:first-of-type) .ck-icon { display: none; } .ck.ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision__actions { top: var(--ck-spacing-small); right: var(--ck-spacing-small); display: none; position: absolute; } .ck.ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision__actions .ck-dropdown__button { min-width: unset; min-height: unset; } .ck.ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision__actions .ck-dropdown__button .ck-button__icon { transform: scale(.7); } .ck.ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision__actions .ck-dropdown__arrow { display: none; } .ck.ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision__actions .ck-list__item__danger { color: var(--ck-color-button-cancel); } .ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected .ck-revision-history-sidebar__revision__actions .ck-dropdown__button { color: var(--ck-color-base-background); } .ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected .ck-revision-history-sidebar__revision__actions .ck-dropdown__button:hover, .ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected .ck-revision-history-sidebar__revision__actions .ck-dropdown__button.ck-on { background: var(--ck-color-base-active-focus); } :is(.ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected .ck-revision-history-sidebar__revision__actions .ck-dropdown__button:hover, .ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected .ck-revision-history-sidebar__revision__actions .ck-dropdown__button.ck-on):hover { filter: brightness(95%); } .ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_highlighted .ck-revision-history-sidebar__revision__actions .ck-dropdown__button:hover, .ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_highlighted .ck-revision-history-sidebar__revision__actions .ck-dropdown__button.ck-on { background: var(--ck-revision-history-revision-highlighted-background-color-hover); } :is(.ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_highlighted .ck-revision-history-sidebar__revision__actions .ck-dropdown__button:hover, .ck.ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_highlighted .ck-revision-history-sidebar__revision__actions .ck-dropdown__button.ck-on):hover { filter: brightness(95%); } .ck.ck-revision-history-sidebar__revision:hover:not(.ck-disabled) .ck-revision-history-sidebar__revision__actions, .ck.ck-revision-history-sidebar__revision:not(.ck-disabled) .ck-revision-history-sidebar__revision__actions.ck-on { display: block; } .ck { --ck-revision-history-revision-background-color: var(--ck-color-base-background); --ck-revision-history-revision-border-color: #47576b; --ck-revision-history-revision-box-shadow: 0 1px 1px 1px #e6e6e6; --ck-revision-history-revision-author-icon-offset: 20px; --ck-revision-history-revision-transitions: background .1s ease-in, border .1s ease-in; --ck-revision-history-revision-selected-text-color: var(--ck-color-base-background); --ck-revision-history-revision-selected-input-text-color-empty: var(--ck-color-base-background); --ck-revision-history-revision-selected-background-color: var(--ck-color-base-active); --ck-revision-history-revision-highlighted-background-color: #e0f1ff; --ck-revision-history-revision-highlighted-background-color-hover: #cce7ff; --ck-revision-history-revision-delete-confirmation-background: #fcc; --ck-revision-history-revision-delete-confirmation-active-button-background: #ffb3b3; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision { background: var(--ck-revision-history-revision-background-color); padding: var(--ck-spacing-large) calc(2 * var(--ck-spacing-standard)); border-radius: var(--ck-border-radius); border-left: 3px solid var(--ck-revision-history-revision-border-color); box-shadow: var(--ck-revision-history-revision-box-shadow); width: 100%; transition: transform .3s; display: block; position: relative; } @media (prefers-reduced-motion: reduce) { .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision { transition: none; } } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision:last-child { margin-bottom: 0; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision__date { font-size: var(--ck-font-size-small); opacity: .8; text-overflow: ellipsis; white-space: nowrap; width: 100%; font-weight: bold; display: block; overflow: hidden; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision__controls-wrapper { margin: var(--ck-spacing-standard) 0 0; flex-direction: row; align-items: flex-start; display: flex; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision .ck-revision-history-sidebar__revision-authors { margin: 0 0 0 var(--ck-revision-history-revision-author-icon-offset); flex: 0 auto; min-width: 0; padding: 0; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected, .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_highlighted { transform: translateX(calc(-1 * var(--ck-revision-history-sidebar-timeline-padding))); border-left-color: #0000; border-top-left-radius: 0; border-bottom-left-radius: 0; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected { background: var(--ck-revision-history-revision-selected-background-color); color: var(--ck-revision-history-revision-selected-text-color); } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected .ck-revision-history-sidebar__revision-name .ck-input { color: var(--ck-revision-history-revision-selected-text-color); } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_selected .ck-revision-history-sidebar__revision-name .ck-input.ck-input-text_empty::placeholder { opacity: .7; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision.ck-revision-history-sidebar__revision_highlighted { background: var(--ck-revision-history-revision-highlighted-background-color); } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__revision.ck-revision-history-sidebar__actions_dropdown_open { z-index: var(--ck-z-default); } .ck.ck-revision-history-sidebar__revision-wrapper.ck-revision-history-sidebar__revision-wrapper_confirmation_visible .ck-revision-history-sidebar__revision { box-shadow: none; position: relative; transform: translate3d(-100%, 0, 0); } .ck.ck-revision-history-sidebar__revision-wrapper.ck-revision-history-sidebar__revision-wrapper_confirmation_visible .ck-revision-history-sidebar__revision, .ck.ck-revision-history-sidebar__revision-wrapper.ck-revision-history-sidebar__revision-wrapper_confirmation_visible .ck-revision-history-sidebar__revision * { --ck-revision-history-revision-background-color: transparent; --ck-revision-history-revision-selected-background-color: transparent; --ck-revision-history-revision-highlighted-background-color: transparent; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view { border-radius: var(--ck-border-radius); width: 100%; height: 100%; box-shadow: var(--ck-revision-history-revision-box-shadow); background: var(--ck-revision-history-revision-delete-confirmation-background); user-select: none; flex-direction: row; justify-content: space-around; align-items: center; display: flex; position: absolute; top: 0; left: 100%; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner { text-align: center; margin-top: var(--ck-spacing-small); } .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner p { color: var(--ck-color-text); margin: 0; font-weight: bold; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner .ck-confirm-view-actions { flex-direction: row; justify-content: space-evenly; display: flex; } .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner .ck-confirm-view-actions .ck.ck-button:hover, .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner .ck-confirm-view-actions .ck.ck-button:focus, .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner .ck-confirm-view-actions .ck.ck-button:active { background: var(--ck-revision-history-revision-delete-confirmation-active-button-background); } .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner .ck-confirm-view-actions .ck.ck-button.ck-confirm-view-submit { color: var(--ck-color-button-save); } .ck.ck-revision-history-sidebar__revision-wrapper .ck-confirm-view .ck-confirm-view-inner .ck-confirm-view-actions .ck.ck-button.ck-confirm-view-cancel { color: var(--ck-color-button-cancel); } .ck.ck-revision-history-sidebar__revision-wrapper .ck-revision-history-sidebar__subrevisions { margin-left: var(--ck-spacing-large); } .ck { --ck-revision-history-sidebar-revision-vertical-spacing: calc(2 * var(--ck-spacing-standard)); } .ck.ck-revision-history-sidebar__time-period { width: 100%; } .ck.ck-revision-history-sidebar__time-period .ck-revision-history-sidebar__time-period__label { background: var(--ck-revision-history-sidebar-period-background); padding: var(--ck-spacing-tiny) var(--ck-spacing-standard); border-radius: var(--ck-border-radius); color: var(--ck-color-base-background); text-transform: uppercase; font-size: 9px; font-weight: bold; } .ck.ck-revision-history-sidebar__time-period .ck-revision-history-sidebar__time-period__label:first-child { margin-top: var(--ck-spacing-standard); } .ck.ck-revision-history-sidebar__time-period .ck-revision-history-sidebar__time-period__revisions { flex-direction: column; display: flex; } .ck.ck-revision-history-sidebar__time-period .ck-revision-history-sidebar__time-period__revisions .ck-revision-history-sidebar__revision-wrapper { margin-top: var(--ck-revision-history-sidebar-revision-vertical-spacing); } .ck.ck-revision-history-sidebar__time-period:not(.ck-hidden) + .ck-revision-history-sidebar__time-period { margin-top: var(--ck-revision-history-sidebar-revision-vertical-spacing); } .ck.ck-revision-history-sidebar__header { --header-height: max(calc(var(--ck-ui-component-min-height) + 2 * var(--ck-spacing-small) + 1px), calc(var(--ck-icon-size) + 2 * var(--ck-spacing-small) + 2 * var(--ck-spacing-small) + 1px)); height: var(--header-height); min-height: var(--header-height); line-height: var(--header-height); border-bottom: 1px solid var(--ck-color-toolbar-border); color: inherit; padding: 0 var(--ck-revision-history-sidebar-timeline-padding); flex-direction: row; align-items: center; font-family: inherit; font-weight: bold; display: flex; overflow: hidden; } .ck.ck-revision-history-sidebar__header .ck-revision-history-sidebar__header__label { color: inherit; font-family: inherit; font-size: 1.2em; font-weight: bold; } .ck.ck-revision-history-sidebar__header .ck-icon { margin-right: var(--ck-spacing-large); } .ck { --ck-revision-history-sidebar-period-background: #ff5724; --ck-revision-history-sidebar-timeline-padding: var(--ck-spacing-large); } .ck.ck-revision-history-sidebar { flex-direction: column; display: flex; } .ck.ck-revision-history-sidebar .ck-revision-history-sidebar__timeline { padding: var(--ck-revision-history-sidebar-timeline-padding); font-size: var(--ck-font-size-base); flex-direction: column; align-items: start; height: 100%; display: flex; overflow: hidden auto; } .ck.ck-revision-history-sidebar .ck-revision-history-sidebar__timeline.ck-disabled { filter: grayscale(1) opacity(var(--ck-disabled-opacity)); } .ck.ck-revision-history-ui.ck-revision-history-ui__changes-navigation { align-items: center; margin-left: auto; display: flex; } .ck.ck-revision-history-ui.ck-revision-history-ui__changes-navigation .ck-revision-history-ui__changes-navigation__wrapper { margin-right: var(--ck-spacing-standard); display: flex; } .ck.ck-revision-history-ui.ck-revision-history-ui__changes-navigation .ck-revision-history-ui__changes-navigation__label { white-space: pre; font-weight: bold; } .ck.ck-revision-history-ui.ck-revision-history-ui__changes-navigation .ck-revision-history-ui__changes-navigation__navigation { margin-left: var(--ck-spacing-small); } .ck .ck-revision-change { padding: var(--ck-spacing-small) var(--ck-spacing-large); border-top-left-radius: var(--ck-border-radius); outline: 0; } .ck .ck-revision-change > * { vertical-align: bottom; font-size: var(--ck-font-size-standard); } .ck .ck-revision-change.ck-revision-change__add { border-left-color: var(--ck-color-suggestion-box-insertion-border); } .ck .ck-revision-change.ck-revision-change__remove { border-left-color: var(--ck-color-suggestion-box-deletion-border); } .ck .ck-revision-change .ck-revision-change__label { font-weight: bold; font-size: inherit; vertical-align: inherit; } .ck.ck-button.ck-revision-history-ui__back-to-editing { background: var(--ck-color-base-active); color: var(--ck-color-base-background); } .ck.ck-button.ck-revision-history-ui__back-to-editing:hover:not(.ck-disabled) { background: var(--ck-color-base-active-focus); } .ck-content .ck-suggestion-preview-marker, .ck-content .ck-suggestion-preview-marker-split { opacity: .75; } .ck-content .ck-suggestion-preview-marker-split:after { content: "¶"; } .ck-content .ck-suggestion-preview-marker-merge { opacity: .75; text-decoration: line-through; } .ck-content .ck-suggestion-preview-marker-merge:after { content: "¶"; } .ck-content .ck-suggestion-preview-marker-deletion { text-decoration: line-through; } .ck-content .ck-suggestion-marker-deletion-new:not(.ck-widget), .ck-content .ck-suggestion-marker-merge-new { --ck-color-suggestion-marker-deletion-border: none; --ck-color-suggestion-marker-deletion-border-active: none; --ck-color-suggestion-marker-deletion-background: none; --ck-color-suggestion-marker-deletion-background-active: none; --ck-color-suggestion-marker-deletion-stroke: #7a1f36cc; --ck-color-suggestion-widget-deletion-background: #e5668608; --ck-color-suggestion-widget-deletion-background-active: #c4214a0d; } .ck-content .ck-suggestion-marker-merge-new:after { color: inherit; } .ck-content .ck-suggestion-marker-insertion-new, .ck-content .ck-suggestion-marker-split-new { opacity: .75; } .ck-content .ck-suggestion-marker-deletion-new.ck-suggestion-marker--active:not(.table), .ck-content .ck-suggestion-marker-merge-new.ck-suggestion-marker--active { --ck-color-suggestion-marker-deletion-background-active: #da255214; --ck-color-suggestion-marker-deletion-stroke: #7a1f36; opacity: 1; } .ck-content .ck-suggestion-marker-insertion-new.ck-suggestion-marker--active, .ck-content .ck-suggestion-marker-split-new.ck-suggestion-marker--active { opacity: 1; } .ck.ck-editor__editable_inline.ck-revision-history-root-add { border: 3px solid var(--ck-color-suggestion-marker-insertion-border); } .ck.ck-editor__editable_inline.ck-revision-history-root-add.ck-revision-history-root--active { border-color: var(--ck-color-suggestion-marker-insertion-border-active); } .ck.ck-editor__editable_inline.ck-revision-history-root-remove { border: 3px solid var(--ck-color-suggestion-marker-deletion-border); } .ck.ck-editor__editable_inline.ck-revision-history-root-remove.ck-revision-history-root--active { border-color: var(--ck-color-suggestion-marker-deletion-border-active); }