Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 1x 1x 1x 8x 8x 4x 2x 2x 2x 2x 2x 2x 1x 2x 2x 2x 2x 2x 2x 1x 1x | import { iterateSelections, moveChildNodes } from 'roosterjs-content-model-dom';
import { toggleCaret } from '../setDOMSelection/toggleCaret';
import type { SwitchShadowEdit } from 'roosterjs-content-model-types';
/**
* @internal
* Switch the Shadow Edit mode of editor On/Off
* @param editorCore The EditorCore object
* @param isOn True to switch On, False to switch Off
*/
export const switchShadowEdit: SwitchShadowEdit = (editorCore, isOn): void => {
const core = editorCore;
if (isOn != !!core.lifecycle.shadowEditFragment) {
if (isOn) {
const model = !core.cache.cachedModel ? core.api.createContentModel(core) : null;
const fragment = core.logicalRoot.ownerDocument.createDocumentFragment();
const clonedRoot = core.logicalRoot.cloneNode(true /*deep*/);
moveChildNodes(fragment, clonedRoot);
core.api.triggerEvent(
core,
{
eventType: 'enteredShadowEdit',
},
false /*broadcast*/
);
// This need to be done after EnteredShadowEdit event is triggered since EnteredShadowEdit event will cause a SelectionChanged event
// if current selection is table selection or image selection
if (!core.cache.cachedModel && model) {
core.cache.cachedModel = model;
}
toggleCaret(core, true /* hide */);
core.lifecycle.shadowEditFragment = fragment;
} else {
core.lifecycle.shadowEditFragment = null;
toggleCaret(core, false /* hide */);
core.api.triggerEvent(
core,
{
eventType: 'leavingShadowEdit',
},
false /*broadcast*/
);
if (core.cache.cachedModel) {
// Force clear cached element from selected block
iterateSelections(core.cache.cachedModel, () => {});
core.api.setContentModel(core, core.cache.cachedModel, {
ignoreSelection: true, // Do not set focus and selection when quit shadow edit, focus may remain in UI control (picker, ...)
});
}
}
}
};
|