| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- import extend from 'extend';
 
- import Emitter from '../core/emitter';
 
- import BaseTheme, { BaseTooltip } from './base';
 
- import { Range } from '../core/selection';
 
- import icons from '../ui/icons';
 
- const TOOLBAR_CONFIG = [
 
-   ['bold', 'italic', 'link'],
 
-   [{ header: 1 }, { header: 2 }, 'blockquote']
 
- ];
 
- class BubbleTheme extends BaseTheme {
 
-   constructor(quill, options) {
 
-     if (options.modules.toolbar != null && options.modules.toolbar.container == null) {
 
-       options.modules.toolbar.container = TOOLBAR_CONFIG;
 
-     }
 
-     super(quill, options);
 
-     this.quill.container.classList.add('ql-bubble');
 
-   }
 
-   extendToolbar(toolbar) {
 
-     this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);
 
-     this.tooltip.root.appendChild(toolbar.container);
 
-     this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), icons);
 
-     this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), icons);
 
-   }
 
- }
 
- BubbleTheme.DEFAULTS = extend(true, {}, BaseTheme.DEFAULTS, {
 
-   modules: {
 
-     toolbar: {
 
-       handlers: {
 
-         link: function(value) {
 
-           if (!value) {
 
-             this.quill.format('link', false);
 
-           } else {
 
-             this.quill.theme.tooltip.edit();
 
-           }
 
-         }
 
-       }
 
-     }
 
-   }
 
- });
 
- class BubbleTooltip extends BaseTooltip {
 
-   constructor(quill, bounds) {
 
-     super(quill, bounds);
 
-     this.quill.on(Emitter.events.EDITOR_CHANGE, (type, range, oldRange, source) => {
 
-       if (type !== Emitter.events.SELECTION_CHANGE) return;
 
-       if (range != null && range.length > 0 && source === Emitter.sources.USER) {
 
-         this.show();
 
-         // Lock our width so we will expand beyond our offsetParent boundaries
 
-         this.root.style.left = '0px';
 
-         this.root.style.width = '';
 
-         this.root.style.width = this.root.offsetWidth + 'px';
 
-         let lines = this.quill.getLines(range.index, range.length);
 
-         if (lines.length === 1) {
 
-           this.position(this.quill.getBounds(range));
 
-         } else {
 
-           let lastLine = lines[lines.length - 1];
 
-           let index = this.quill.getIndex(lastLine);
 
-           let length = Math.min(lastLine.length() - 1, range.index + range.length - index);
 
-           let bounds = this.quill.getBounds(new Range(index, length));
 
-           this.position(bounds);
 
-         }
 
-       } else if (document.activeElement !== this.textbox && this.quill.hasFocus()) {
 
-         this.hide();
 
-       }
 
-     });
 
-   }
 
-   listen() {
 
-     super.listen();
 
-     this.root.querySelector('.ql-close').addEventListener('click', () => {
 
-       this.root.classList.remove('ql-editing');
 
-     });
 
-     this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {
 
-       // Let selection be restored by toolbar handlers before repositioning
 
-       setTimeout(() => {
 
-         if (this.root.classList.contains('ql-hidden')) return;
 
-         let range = this.quill.getSelection();
 
-         if (range != null) {
 
-           this.position(this.quill.getBounds(range));
 
-         }
 
-       }, 1);
 
-     });
 
-   }
 
-   cancel() {
 
-     this.show();
 
-   }
 
-   position(reference) {
 
-     let shift = super.position(reference);
 
-     let arrow = this.root.querySelector('.ql-tooltip-arrow');
 
-     arrow.style.marginLeft = '';
 
-     if (shift === 0) return shift;
 
-     arrow.style.marginLeft = (-1*shift - arrow.offsetWidth/2) + 'px';
 
-   }
 
- }
 
- BubbleTooltip.TEMPLATE = [
 
-   '<span class="ql-tooltip-arrow"></span>',
 
-   '<div class="ql-tooltip-editor">',
 
-     '<input type="text" data-formula="e=mc^2" data-link="https://quilljs.com" data-video="Embed URL">',
 
-     '<a class="ql-close"></a>',
 
-   '</div>'
 
- ].join('');
 
- export { BubbleTooltip, BubbleTheme as default };
 
 
  |