UNPKG

alpaca

Version:

Alpaca provides the easiest and fastest way to generate interactive forms for the web and mobile devices. It runs simply as HTML5 or more elaborately using Bootstrap, jQuery Mobile or jQuery UI. Alpaca uses Handlebars to process JSON schema and provide

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; });