import { InlineTool, SanitizerConfig } from '../../../types'; import { IconItalic } from '@codexteam/icons'; /** * Italic Tool * * Inline Toolbar Tool * * Style selected text with italic */ export default class ItalicInlineTool implements InlineTool { /** * Specifies Tool as Inline Toolbar Tool * * @returns {boolean} */ public static isInline = true; /** * Title for hover-tooltip */ public static title = 'Italic'; /** * Sanitizer Rule * Leave tags * * @returns {object} */ public static get sanitize(): SanitizerConfig { return { i: {}, } as SanitizerConfig; } /** * Native Document's command that uses for Italic */ private readonly commandName: string = 'italic'; /** * Styles */ private readonly CSS = { button: 'ce-inline-tool', buttonActive: 'ce-inline-tool--active', buttonModifier: 'ce-inline-tool--italic', }; /** * Elements */ private nodes: {button: HTMLButtonElement} = { button: null, }; /** * Create button for Inline Toolbar */ public render(): HTMLElement { this.nodes.button = document.createElement('button') as HTMLButtonElement; this.nodes.button.type = 'button'; this.nodes.button.classList.add(this.CSS.button, this.CSS.buttonModifier); this.nodes.button.innerHTML = IconItalic; return this.nodes.button; } /** * Wrap range with tag */ public surround(): void { document.execCommand(this.commandName); } /** * Check selection and set activated state to button if there are tag */ public checkState(): boolean { const isActive = document.queryCommandState(this.commandName); this.nodes.button.classList.toggle(this.CSS.buttonActive, isActive); return isActive; } /** * Set a shortcut */ public get shortcut(): string { return 'CMD+I'; } }