jodit
Version:
Jodit is awesome and usefully wysiwyg editor with filebrowser
185 lines (165 loc) • 4.57 kB
text/typescript
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Licensed under GNU General Public License version 2 or later or a commercial license or MIT;
* For GPL see LICENSE-GPL.txt in the project root for license information.
* For MIT see LICENSE-MIT.txt in the project root for license information.
* For commercial licenses see https://xdsoft.net/jodit/commercial/
* Copyright (c) 2013-2019 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
*/
import { Config } from '../Config';
import { Dom } from '../modules/Dom';
import { $$, css } from '../modules/helpers/';
import { ToolbarIcon } from '../modules/toolbar/icon';
import { IControlType } from '../types/toolbar';
import { IJodit } from '../types';
Config.prototype.controls.align = {
name: 'left',
tooltip: 'Align',
getLabel: (editor: IJodit, btn, button): boolean => {
const current: Node | false = editor.selection.current();
if (current) {
const currentBox: HTMLElement =
(Dom.closest(
current,
node => Dom.isBlock(node, editor.editorWindow),
editor.editor
) as HTMLElement) || editor.editor;
let currentValue: string = css(currentBox, 'text-align').toString();
if (
btn.defaultValue &&
btn.defaultValue.indexOf(currentValue) !== -1
) {
currentValue = 'left';
}
if (
button &&
btn.data &&
btn.data.currentValue !== currentValue &&
btn.list &&
(btn.list as string[]).indexOf(currentValue) !== -1
) {
button.textBox.innerHTML = !editor.options.textIcons
? ToolbarIcon.getIcon(currentValue, '')
: `<span>${currentValue}</span>`;
(button.textBox.firstChild as HTMLElement).classList.add(
'jodit_icon'
);
btn.data.currentValue = currentValue;
}
}
return false;
},
isActive: (editor: IJodit, btn): boolean => {
const current: Node | false = editor.selection.current();
if (current && btn.defaultValue) {
const currentBox: HTMLElement =
(Dom.closest(
current,
node => Dom.isBlock(node, editor.editorWindow),
editor.editor
) as HTMLElement) || editor.editor;
return (
btn.defaultValue.indexOf(
css(currentBox, 'text-align').toString()
) === -1
);
}
return false;
},
defaultValue: ['left', 'start', 'inherit'],
data: {
currentValue: 'left'
},
list: ['center', 'left', 'right', 'justify']
} as IControlType;
Config.prototype.controls.center = {
command: 'justifyCenter',
css: {
'text-align': 'center'
},
tooltip: 'Align Center'
};
Config.prototype.controls.justify = {
command: 'justifyFull',
css: {
'text-align': 'justify'
},
tooltip: 'Align Justify'
};
Config.prototype.controls.left = {
command: 'justifyLeft',
css: {
'text-align': 'left'
},
tooltip: 'Align Left'
};
Config.prototype.controls.right = {
command: 'justifyRight',
css: {
'text-align': 'right'
},
tooltip: 'Align Right'
};
/**
* Process commands: `justifyfull`, `justifyleft`, `justifyright`, `justifycenter`
*
* @param {Jodit} editor
*/
export function justify(editor: IJodit) {
const callback = (command: string): false | void => {
const justifyElm = (box: HTMLElement) => {
if (box instanceof (editor.editorWindow as any).HTMLElement) {
switch (command.toLowerCase()) {
case 'justifyfull':
box.style.textAlign = 'justify';
break;
case 'justifyright':
box.style.textAlign = 'right';
break;
case 'justifyleft':
box.style.textAlign = 'left';
break;
case 'justifycenter':
box.style.textAlign = 'center';
break;
}
}
};
editor.selection.focus();
editor.selection.eachSelection(
(current: Node): false | void => {
if (!current) {
if (editor.editor.querySelector('.jodit_selected_cell')) {
$$('.jodit_selected_cell', editor.editor).forEach(
justifyElm
);
return false;
}
}
if (!(current instanceof (editor.editorWindow as any).Node)) {
return;
}
let currentBox: HTMLElement | false | null = current
? (Dom.up(
current,
node => Dom.isBlock(node, editor.editorWindow),
editor.editor
) as HTMLElement)
: false;
if (!currentBox && current) {
currentBox = Dom.wrapInline(
current,
editor.options.enterBlock,
editor
);
}
justifyElm(currentBox as HTMLElement);
}
);
return false;
};
editor.registerCommand('justifyfull', callback);
editor.registerCommand('justifyright', callback);
editor.registerCommand('justifyleft', callback);
editor.registerCommand('justifycenter', callback);
}