@progress/kendo-angular-editor
Version:
Kendo UI Editor for Angular
281 lines (280 loc) • 9.46 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { blockquote, cleanFormatting, isIndented } from '@progress/kendo-editor-common';
import { alignRightRules, alignCenterRules, alignLeftRules, alignJustifyRules, isAligned, bold, italic, underline, strikethrough, subscript, superscript, link, activeNode, hasNode, getActiveMarks, hasMark, expandSelection, indentRules, outdentRules, canIndentAsListItem, canOutdentAsListItem, canBeIndented, undo, redo, addRowBefore, addRowAfter, addColumnBefore, addColumnAfter, deleteRow, deleteColumn, deleteTable, mergeCells, splitCell } from '@progress/kendo-editor-common';
/**
* @hidden
*/
export const getToolbarState = (state, options) => ({
alignCenter: {
selected: isAligned(state, alignCenterRules),
disabled: false
},
alignJustify: {
selected: isAligned(state, alignJustifyRules),
disabled: false
},
alignLeft: {
selected: isAligned(state, alignLeftRules),
disabled: false
},
alignRight: {
selected: isAligned(state, alignRightRules),
disabled: false
},
bold: {
selected: hasMark(state, bold),
disabled: false
},
cleanFormatting: {
selected: false,
disabled: !cleanFormatting()(state)
},
format: {
selected: activeNode(state),
disabled: false
},
blockquote: {
selected: false,
disabled: !blockquote(state)
},
indent: {
selected: false,
disabled: !(canIndentAsListItem(state, state.schema.nodes['list_item']) || canBeIndented(state, indentRules))
},
insertOrderedList: {
selected: hasNode(state, state.schema.nodes['ordered_list']),
disabled: false
},
insertUnorderedList: {
selected: hasNode(state, state.schema.nodes['bullet_list']),
disabled: false
},
italic: {
selected: hasMark(state, italic),
disabled: false
},
unlink: {
selected: false,
disabled: !hasMark(state, link)
},
outdent: {
selected: false,
get disabled() {
return !(hasNode(state, state.schema.nodes['blockquote']) ||
canOutdentAsListItem(state, outdentRules) ||
isIndented(state, outdentRules.nodes));
}
},
redo: {
selected: false,
disabled: !redo(state)
},
selectAll: {
selected: false,
disabled: false
},
strikethrough: {
selected: hasMark(state, strikethrough),
disabled: false
},
style: {
selected: getActiveMarks(state, state.schema.marks['style']),
disabled: false
},
subscript: {
selected: hasMark(state, subscript),
disabled: false
},
superscript: {
selected: hasMark(state, superscript),
disabled: false
},
underline: {
selected: hasMark(state, underline),
disabled: false
},
undo: {
selected: false,
disabled: !undo(state)
},
//dialogs
createLink: {
selected: false,
get disabled() {
const empty = state.selection.empty;
const applyToWord = options && options.applyToWord;
if (applyToWord && empty) {
const extendedState = expandSelection(state, () => { }, options).state;
return extendedState.selection.empty;
}
return empty;
}
},
insertFile: {
selected: false,
disabled: state.selection.empty
},
insertImage: {
selected: false,
disabled: false
},
viewSource: {
selected: false,
disabled: false
},
// print
print: {
selected: false,
disabled: false
},
// table
insertTable: {
selected: false,
disabled: false
},
addColumnBefore: {
selected: false,
disabled: !addColumnBefore(state)
},
addColumnAfter: {
selected: false,
disabled: !addColumnAfter(state)
},
addRowBefore: {
selected: false,
disabled: !addRowBefore(state)
},
addRowAfter: {
selected: false,
disabled: !addRowAfter(state)
},
deleteRow: {
selected: false,
disabled: !deleteRow(state)
},
deleteColumn: {
selected: false,
disabled: !deleteColumn(state)
},
mergeCells: {
selected: false,
disabled: !mergeCells(state)
},
splitCell: {
selected: false,
disabled: !splitCell(state)
},
deleteTable: {
selected: false,
disabled: !deleteTable(state)
}
});
/**
* @hidden
*/
export const initialToolBarState = {
//alignment
alignCenter: { selected: false, disabled: false },
alignJustify: { selected: false, disabled: false },
alignLeft: { selected: false, disabled: false },
alignRight: { selected: false, disabled: false },
//marks
bold: { selected: false, disabled: false },
italic: { selected: false, disabled: false },
underline: { selected: false, disabled: false },
strikethrough: { selected: false, disabled: false },
subscript: { selected: false, disabled: false },
superscript: { selected: false, disabled: false },
//tools
format: { selected: { text: 'Format', tag: null }, disabled: false },
style: { selected: { marks: [], hasNodesWithoutMarks: false }, disabled: false },
cleanFormatting: { selected: false, disabled: true },
blockquote: { selected: false, disabled: false },
//indent
indent: { selected: false, disabled: false },
outdent: { selected: false, disabled: false },
//lists
insertOrderedList: { selected: false, disabled: false },
insertUnorderedList: { selected: false, disabled: false },
//links
unlink: { selected: false, disabled: true },
//history
redo: { selected: false, disabled: true },
undo: { selected: false, disabled: true },
// print
print: { selected: false, disabled: false },
//dialogs
createLink: { selected: false, disabled: true },
insertFile: { selected: false, disabled: true },
insertImage: { selected: false, disabled: false },
viewSource: { selected: false, disabled: false },
//table
insertTable: { selected: false, disabled: false },
addColumnBefore: { selected: false, disabled: true },
addColumnAfter: { selected: false, disabled: true },
addRowBefore: { selected: false, disabled: true },
addRowAfter: { selected: false, disabled: true },
deleteRow: { selected: false, disabled: true },
deleteColumn: { selected: false, disabled: true },
mergeCells: { selected: false, disabled: true },
splitCell: { selected: false, disabled: true },
deleteTable: { selected: false, disabled: true },
// select all
selectAll: { selected: false, disabled: false }
};
/**
* @hidden
*/
export const disabledToolBarState = {
//alignment
alignCenter: { selected: false, disabled: true },
alignJustify: { selected: false, disabled: true },
alignLeft: { selected: false, disabled: true },
alignRight: { selected: false, disabled: true },
//marks
bold: { selected: false, disabled: true },
italic: { selected: false, disabled: true },
underline: { selected: false, disabled: true },
strikethrough: { selected: false, disabled: true },
subscript: { selected: false, disabled: true },
superscript: { selected: false, disabled: true },
//tools
format: { selected: { text: 'Format', tag: null }, disabled: true },
style: { selected: { marks: [], hasNodesWithoutMarks: false }, disabled: true },
cleanFormatting: { selected: false, disabled: true },
blockquote: { selected: false, disabled: true },
//indent
indent: { selected: false, disabled: true },
outdent: { selected: false, disabled: true },
//lists
insertOrderedList: { selected: false, disabled: true },
insertUnorderedList: { selected: false, disabled: true },
//links
unlink: { selected: false, disabled: true },
//history
redo: { selected: false, disabled: true },
undo: { selected: false, disabled: true },
// print
print: { selected: false, disabled: true },
//dialogs
createLink: { selected: false, disabled: true },
insertFile: { selected: false, disabled: true },
insertImage: { selected: false, disabled: true },
viewSource: { selected: false, disabled: true },
//table
insertTable: { selected: false, disabled: true },
addColumnBefore: { selected: false, disabled: true },
addColumnAfter: { selected: false, disabled: true },
addRowBefore: { selected: false, disabled: true },
addRowAfter: { selected: false, disabled: true },
deleteRow: { selected: false, disabled: true },
deleteColumn: { selected: false, disabled: true },
mergeCells: { selected: false, disabled: true },
splitCell: { selected: false, disabled: true },
deleteTable: { selected: false, disabled: true },
// select all
selectAll: { selected: false, disabled: true }
};