/** * Copyright (c) Tiny Technologies, Inc. All rights reserved. * Licensed under the LGPL or a commercial license. * For LGPL see License.txt in the project root for license information. * For commercial licenses see https://www.tiny.cloud/ */ import { Behaviour, Button, Toggling, Unselecting, SketchSpec } from '@ephox/alloy'; import { Merger, Option } from '@ephox/katamari'; import Receivers from '../channels/Receivers'; import Styles from '../style/Styles'; import * as UiDomFactory from '../util/UiDomFactory'; const forToolbarCommand = function (editor, command) { return forToolbar(command, function () { editor.execCommand(command); }, { }, editor); }; const getToggleBehaviours = function (command) { return Behaviour.derive([ Toggling.config({ toggleClass: Styles.resolve('toolbar-button-selected'), toggleOnExecute: false, aria: { mode: 'pressed' } }), Receivers.format(command, function (button, status) { const toggle = status ? Toggling.on : Toggling.off; toggle(button); }) ]); }; const forToolbarStateCommand = function (editor, command) { const extraBehaviours = getToggleBehaviours(command); return forToolbar(command, function () { editor.execCommand(command); }, extraBehaviours, editor); }; // The action is not just executing the same command const forToolbarStateAction = function (editor, clazz, command, action) { const extraBehaviours = getToggleBehaviours(command); return forToolbar(clazz, action, extraBehaviours, editor); }; const getToolbarIconButton = (clazz, editor) => { const icons = editor.ui.registry.getAll().icons; const optOxideIcon = Option.from(icons[clazz]); return optOxideIcon.fold( () => UiDomFactory.dom(''), (icon) => UiDomFactory.dom('' + icon + '') ); }; const forToolbar = function (clazz, action, extraBehaviours, editor): SketchSpec { return Button.sketch({ dom: getToolbarIconButton(clazz, editor), action, buttonBehaviours: Merger.deepMerge( Behaviour.derive([ Unselecting.config({ }) ]), extraBehaviours ) }); }; export default { forToolbar, forToolbarCommand, forToolbarStateAction, forToolbarStateCommand, getToolbarIconButton };