summernote-webpack
Version:
Super simple WYSIWYG editor
73 lines (61 loc) • 1.91 kB
JavaScript
define([
'summernote/base/core/func',
'summernote/base/core/list',
'summernote/base/core/dom'
], function (func, list, dom) {
var LinkPopover = function (context) {
var self = this;
var ui = $.summernote.ui;
var options = context.options;
this.events = {
'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () {
self.update();
},
'summernote.dialog.shown': function () {
self.hide();
}
};
this.shouldInitialize = function () {
return !list.isEmpty(options.popover.link);
};
this.initialize = function () {
this.$popover = ui.popover({
className: 'note-link-popover',
callback: function ($node) {
var $content = $node.find('.popover-content');
$content.prepend('<span><a target="_blank"></a> </span>');
}
}).render().appendTo('body');
var $content = this.$popover.find('.popover-content');
context.invoke('buttons.build', $content, options.popover.link);
};
this.destroy = function () {
this.$popover.remove();
};
this.update = function () {
// Prevent focusing on editable when invoke('code') is executed
if (!context.invoke('editor.hasFocus')) {
this.hide();
return;
}
var rng = context.invoke('editor.createRange');
if (rng.isCollapsed() && rng.isOnAnchor()) {
var anchor = dom.ancestor(rng.sc, dom.isAnchor);
var href = $(anchor).attr('href');
this.$popover.find('a').attr('href', href).html(href);
var pos = dom.posFromPlaceholder(anchor);
this.$popover.css({
display: 'block',
left: pos.left,
top: pos.top
});
} else {
this.hide();
}
};
this.hide = function () {
this.$popover.hide();
};
};
return LinkPopover;
});