Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// So here we add an extra SPAN for Edge to workaround this bug
const NEWLINE_HTML = Browser.isEdge ? '<div><span><br></span></div>' : '<div><br></div>';
const CHILD_PARENT_TAG_MAP: { [childTag: string]: string } = {
TD: 'TABLE',
TH: 'TABLE',
LI: 'OL,UL',
};
const CHILD_SELECTOR = Object.keys(CHILD_PARENT_TAG_MAP).join(',');
/**
* InsertLineBeforeStructuredNode edit feature, provides the ability to insert an empty line before
* a structured element (bullet/numbering list, blockquote, table) if the element is at beginning of
* document
*/
export const InsertLineBeforeStructuredNodeFeature: ContentEditFeature = {
keys: [Keys.ENTER],
shouldHandleEvent: cacheGetStructuredElement,
handleEvent: (event, editor) => {
let element = cacheGetStructuredElement(event, editor);
let div = fromHtml(NEWLINE_HTML, editor.getDocument())[0] as HTMLElement;
editor.addUndoSnapshot(() => {
element.parentNode.insertBefore(div, element);
// Select the new line when we are in table. This is the same behavior with Word
if (getTagOfNode(element) == 'TABLE') {
editor.select(new Position(div, PositionType.Begin).normalize());
}
});
event.rawEvent.preventDefault();
},
};
function cacheGetStructuredElement(event: PluginKeyboardEvent, editor: Editor) {
*/
export const UnquoteWhenBackOnEmpty1stLine: ContentEditFeature = {
keys: [Keys.BACKSPACE],
shouldHandleEvent: (event, editor) => {
let childOfQuote = cacheGetQuoteChild(event, editor);
return childOfQuote && isNodeEmpty(childOfQuote) && !childOfQuote.previousSibling;
},
handleEvent: splitQuote,
};
/**
* UnquoteWhenEnterOnEmptyLine edit feature, provides the ability to Unquote current line when
* user press ENTER on an empty line of a BLOCKQUOTE
*/
export const UnquoteWhenEnterOnEmptyLine: ContentEditFeature = {
keys: [Keys.ENTER],
shouldHandleEvent: (event, editor) => {
let childOfQuote = cacheGetQuoteChild(event, editor);
let shift = event.rawEvent.shiftKey;
return !shift && childOfQuote && isNodeEmpty(childOfQuote);
},
handleEvent: (event, editor) => editor.performAutoComplete(() => splitQuote(event, editor)),
};
function cacheGetQuoteChild(event: PluginKeyboardEvent, editor: Editor): Node {
return cacheGetEventData(event, 'QUOTE_CHILD', () => {
let quote = editor.getElementAtCursor(STRUCTURED_TAGS);
if (quote && getTagOfNode(quote) == QUOTE_TAG) {
let pos = editor.getFocusedPosition();
let block = pos && editor.getBlockElementAtNode(pos.normalize().node);
if (block) {
let node =
*/
export const OutdentWhenBackOn1stEmptyLine: ContentEditFeature = {
keys: [Keys.BACKSPACE],
shouldHandleEvent: (event, editor) => {
let li = cacheGetElementAtCursor(editor, event, 'LI');
return li && isNodeEmpty(li) && !li.previousSibling;
},
handleEvent: toggleListAndPreventDefault,
};
/**
* OutdentWhenEnterOnEmptyLine edit feature, provides the ability to outdent current item if user press
* ENTER at the beginning of an empty line of a list
*/
export const OutdentWhenEnterOnEmptyLine: ContentEditFeature = {
keys: [Keys.ENTER],
shouldHandleEvent: (event, editor) => {
let li = cacheGetElementAtCursor(editor, event, 'LI');
return !event.rawEvent.shiftKey && li && isNodeEmpty(li);
},
handleEvent: (event, editor) => {
editor.performAutoComplete(() => toggleListAndPreventDefault(event, editor));
},
};
/**
* AutoBullet edit feature, provides the ablility to automatically convert current line into a list.
* When user input "1. ", convert into a numbering list
* When user input "- " or "* ", convert into a bullet list
*/
export const AutoBullet: ContentEditFeature = {
keys: [Keys.SPACE],