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

118 lines (99 loc) 3.46 kB
define([ 'summernote/base/core/dom' ], function (dom) { var Handle = function (context) { var self = this; var $document = $(document); var $editingArea = context.layoutInfo.editingArea; var options = context.options; this.events = { 'summernote.mousedown': function (we, e) { if (self.update(e.target)) { e.preventDefault(); } }, 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function () { self.update(); } }; this.initialize = function () { this.$handle = $([ '<div class="note-handle">', '<div class="note-control-selection">', '<div class="note-control-selection-bg"></div>', '<div class="note-control-holder note-control-nw"></div>', '<div class="note-control-holder note-control-ne"></div>', '<div class="note-control-holder note-control-sw"></div>', '<div class="', (options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'), ' note-control-se"></div>', (options.disableResizeImage ? '' : '<div class="note-control-selection-info"></div>'), '</div>', '</div>' ].join('')).prependTo($editingArea); this.$handle.on('mousedown', function (event) { if (dom.isControlSizing(event.target)) { event.preventDefault(); event.stopPropagation(); var $target = self.$handle.find('.note-control-selection').data('target'), posStart = $target.offset(), scrollTop = $document.scrollTop(); $document.on('mousemove', function (event) { context.invoke('editor.resizeTo', { x: event.clientX - posStart.left, y: event.clientY - (posStart.top - scrollTop) }, $target, !event.shiftKey); self.update($target[0]); }).one('mouseup', function (e) { e.preventDefault(); $document.off('mousemove'); context.invoke('editor.afterCommand'); }); if (!$target.data('ratio')) { // original ratio. $target.data('ratio', $target.height() / $target.width()); } } }); }; this.destroy = function () { this.$handle.remove(); }; this.update = function (target) { var isImage = dom.isImg(target); var $selection = this.$handle.find('.note-control-selection'); context.invoke('imagePopover.update', target); if (isImage) { var $image = $(target); var pos = $image.position(); // include margin var imageSize = { w: $image.outerWidth(true), h: $image.outerHeight(true) }; $selection.css({ display: 'block', left: pos.left, top: pos.top, width: imageSize.w, height: imageSize.h }).data('target', $image); // save current image element. var sizingText = imageSize.w + 'x' + imageSize.h; $selection.find('.note-control-selection-info').text(sizingText); context.invoke('editor.saveTarget', target); } else { this.hide(); } return isImage; }; /** * hide * * @param {jQuery} $handle */ this.hide = function () { context.invoke('editor.clearTarget'); this.$handle.children().hide(); }; }; return Handle; });