UNPKG

summernote-webpack

Version:
76 lines (64 loc) 2.05 kB
define([ 'summernote/base/core/agent', 'summernote/base/core/func', 'summernote/base/core/list', 'summernote/base/core/dom' ], function (agent, func, list, dom) { var AirPopover = function (context) { var self = this; var ui = $.summernote.ui; var options = context.options; var AIR_MODE_POPOVER_X_OFFSET = 20; this.events = { 'summernote.keyup summernote.mouseup summernote.scroll': function () { self.update(); }, 'summernote.change summernote.dialog.shown': function () { self.hide(); }, 'summernote.focusout': function (we, e) { // [workaround] Firefox doesn't support relatedTarget on focusout // - Ignore hide action on focus out in FF. if (agent.isFF) { return; } if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(self.$popover[0]))) { self.hide(); } } }; this.shouldInitialize = function () { return options.airMode && !list.isEmpty(options.popover.air); }; this.initialize = function () { this.$popover = ui.popover({ className: 'note-air-popover' }).render().appendTo('body'); var $content = this.$popover.find('.popover-content'); context.invoke('buttons.build', $content, options.popover.air); }; this.destroy = function () { this.$popover.remove(); }; this.update = function () { var styleInfo = context.invoke('editor.currentStyle'); if (styleInfo.range && !styleInfo.range.isCollapsed()) { var rect = list.last(styleInfo.range.getClientRects()); if (rect) { var bnd = func.rect2bnd(rect); this.$popover.css({ display: 'block', left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, top: bnd.top + bnd.height }); } } else { this.hide(); } }; this.hide = function () { this.$popover.hide(); }; }; return AirPopover; });