import FormatBlot from './abstract/format'; import * as Registry from '../registry'; class BlockBlot extends FormatBlot { static blotName = 'block'; static scope = Registry.Scope.BLOCK_BLOT; static tagName = 'P'; static formats(domNode: HTMLElement): any { let tagName = (Registry.query(BlockBlot.blotName)).tagName; if (domNode.tagName === tagName) return undefined; return super.formats(domNode); } format(name: string, value: any) { if (Registry.query(name, Registry.Scope.BLOCK) == null) { return; } else if (name === this.statics.blotName && !value) { this.replaceWith(BlockBlot.blotName); } else { super.format(name, value); } } formatAt(index: number, length: number, name: string, value: any): void { if (Registry.query(name, Registry.Scope.BLOCK) != null) { this.format(name, value); } else { super.formatAt(index, length, name, value); } } insertAt(index: number, value: string, def?: any): void { if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) { // Insert text or inline super.insertAt(index, value, def); } else { let after = this.split(index); let blot = Registry.create(value, def); after.parent.insertBefore(blot, after); } } update(mutations: MutationRecord[], context: { [key: string]: any }): void { if (navigator.userAgent.match(/Trident/)) { this.build(); } else { super.update(mutations, context); } } } export default BlockBlot;