UNPKG

jodit

Version:

Jodit is awesome and usefully wysiwyg editor with filebrowser

153 lines (133 loc) 4.09 kB
/*! * 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 * as consts from '../constants'; import { css } from '../modules/helpers/'; import { ToolbarIcon } from '../modules/toolbar/icon'; import { IControlType } from '../types/toolbar'; import { IJodit, IViewWithToolbar } from '../types'; /** * Fullsize plugin * * @module Fullsize */ /** * @property{boolean} fullsize=false true Editor toWYSIWYG open toWYSIWYG full screen * @property{boolean} globalFullsize=true if true, after `fullsize` - all editors element * get jodit_fullsize_box class (z-index: 100000 !important;) * @example * ```javascript * var editor = new jodit({ * fullsize: true // fullsize editor * }); * ``` * @example * ```javascript * var editor = new Jodit(); * editor.events.fire('toggleFullSize'); * editor.events.fire('toggleFullSize', true); // fullsize * editor.events.fire('toggleFullSize', false); // usual mode * ``` */ declare module '../Config' { interface Config { fullsize: boolean; globalFullsize: boolean; } } Config.prototype.fullsize = false; Config.prototype.globalFullsize = true; Config.prototype.controls.fullsize = { exec: (editor: IJodit) => { editor.toggleFullSize(); }, isActive: (editor: IJodit) => editor.isFullSize(), getLabel: (editor: IJodit, btn, button) => { const mode: string = editor.isFullSize() ? 'shrink' : 'fullsize'; if (button) { button.textBox.innerHTML = !editor.options.textIcons ? ToolbarIcon.getIcon(mode) : `<span>${editor.i18n(mode)}</span>`; (button.textBox.firstChild as HTMLElement).classList.add( 'jodit_icon' ); } }, tooltip: 'Open editor in fullsize', mode: consts.MODE_SOURCE + consts.MODE_WYSIWYG } as IControlType; /** * Process `toggleFullSize` event, and behavior - set/unset fullsize mode * * @param {Jodit} editor */ export function fullsize(editor: IViewWithToolbar) { let shown: boolean = false, oldHeight: number = 0, oldWidth: number = 0, wasToggled = false; const resize = () => { if (editor.events) { if (shown) { oldHeight = css(editor.container, 'height') as number; oldWidth = css(editor.container, 'width') as number; css(editor.container, { height: editor.ownerWindow.innerHeight, width: editor.ownerWindow.innerWidth }); wasToggled = true; } else if (wasToggled) { css(editor.container, { height: oldHeight || 'auto', width: oldWidth || 'auto' }); } } }, toggle = (condition?: boolean) => { if (!editor.container) { return; } if (condition === undefined) { condition = !editor.container.classList.contains( 'jodit_fullsize' ); } editor.options.fullsize = !!condition; shown = condition; editor.container.classList.toggle('jodit_fullsize', condition); if (editor.toolbar) { css(editor.toolbar.container, 'width', 'auto'); } if (editor.options.globalFullsize) { let node = editor.container.parentNode as HTMLElement; while (node && node.nodeType !== Node.DOCUMENT_NODE) { node.classList.toggle('jodit_fullsize_box', condition); node = node.parentNode as HTMLElement; } resize(); } editor.events.fire('afterResize'); }; if (editor.options.globalFullsize) { editor.events.on(editor.ownerWindow, 'resize', resize); } editor.events .on('afterInit afterOpen', () => { editor.toggleFullSize(editor.options.fullsize); }) .on('toggleFullSize', toggle) .on('beforeDestruct beforeClose', () => { toggle(false); }) .on('beforeDestruct', () => { editor.events && editor.events.off(editor.ownerWindow, 'resize', resize); }); }