| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- define([
- 'summernote/core/key'
- ], function (key) {
- var ImageDialog = function (handler) {
- /**
- * toggle button status
- *
- * @private
- * @param {jQuery} $btn
- * @param {Boolean} isEnable
- */
- var toggleBtn = function ($btn, isEnable) {
- $btn.toggleClass('disabled', !isEnable);
- $btn.attr('disabled', !isEnable);
- };
- /**
- * bind enter key
- *
- * @private
- * @param {jQuery} $input
- * @param {jQuery} $btn
- */
- var bindEnterKey = function ($input, $btn) {
- $input.on('keypress', function (event) {
- if (event.keyCode === key.code.ENTER) {
- $btn.trigger('click');
- }
- });
- };
- this.show = function (layoutInfo) {
- var $dialog = layoutInfo.dialog(),
- $editable = layoutInfo.editable();
- handler.invoke('editor.saveRange', $editable);
- this.showImageDialog($editable, $dialog).then(function (data) {
- handler.invoke('editor.restoreRange', $editable);
- if (typeof data === 'string') {
- // image url
- handler.invoke('editor.insertImage', $editable, data);
- } else {
- // array of files
- handler.insertImages(layoutInfo, data);
- }
- }).fail(function () {
- handler.invoke('editor.restoreRange', $editable);
- });
- };
- /**
- * show image dialog
- *
- * @param {jQuery} $editable
- * @param {jQuery} $dialog
- * @return {Promise}
- */
- this.showImageDialog = function ($editable, $dialog) {
- return $.Deferred(function (deferred) {
- var $imageDialog = $dialog.find('.note-image-dialog');
- var $imageInput = $dialog.find('.note-image-input'),
- $imageUrl = $dialog.find('.note-image-url'),
- $imageBtn = $dialog.find('.note-image-btn');
- $imageDialog.one('shown.bs.modal', function () {
- // Cloning imageInput to clear element.
- $imageInput.replaceWith($imageInput.clone()
- .on('change', function () {
- deferred.resolve(this.files || this.value);
- $imageDialog.modal('hide');
- })
- .val('')
- );
- $imageBtn.click(function (event) {
- event.preventDefault();
- deferred.resolve($imageUrl.val());
- $imageDialog.modal('hide');
- });
- $imageUrl.on('keyup paste', function (event) {
- var url;
-
- if (event.type === 'paste') {
- url = event.originalEvent.clipboardData.getData('text');
- } else {
- url = $imageUrl.val();
- }
-
- toggleBtn($imageBtn, url);
- }).val('').trigger('focus');
- bindEnterKey($imageUrl, $imageBtn);
- }).one('hidden.bs.modal', function () {
- $imageInput.off('change');
- $imageUrl.off('keyup paste keypress');
- $imageBtn.off('click');
- if (deferred.state() === 'pending') {
- deferred.reject();
- }
- }).modal('show');
- });
- };
- };
- return ImageDialog;
- });
|