diff --git a/Gemfile.lock b/Gemfile.lock index 888c9387d49b8e03d0073e7b089904d4cb0715c1..cd985fdaf5630a184069f03ad40116d8c2385b3e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: https://github.com/noesya/summernote-rails.git - revision: 48b08102ad6cd9f425c116cfc7e14ea7a9c4d238 + revision: d5a27a426351ef4c73ae7bd5ee3335fdd38b51a0 branch: activestorage specs: summernote-rails (0.8.20.1) diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js index 914b70533a704d565e1a77912e2d287af9619411..16a6c71d5528f085161790a40e7a60e9b471bfa7 100644 --- a/app/assets/javascripts/admin.js +++ b/app/assets/javascripts/admin.js @@ -10,7 +10,6 @@ //= require appstack/app //= require gdpr/cookie_consent //= require trix -//= require summernote/summernote-bs5.min //= require sortablejs/Sortable //= require popper //= require summernote/summernote-lite diff --git a/app/assets/javascripts/admin/plugins/summernote.js b/app/assets/javascripts/admin/plugins/summernote.js index 4a6ea6b529562a79f7fea56b96c76da15af1118d..b68e746b8616a1fba15198214c059647ba80d3dd 100644 --- a/app/assets/javascripts/admin/plugins/summernote.js +++ b/app/assets/javascripts/admin/plugins/summernote.js @@ -1,31 +1,5 @@ /* eslint no-alert: 'off' */ -/*global $, SummernoteAttachment, SummernoteAttachmentUpload */ -// window.osuny.summernote.sendFile = function (file, toSummernote) { -// 'use strict'; -// var data = new FormData(); -// data.append('file', file); -// $.ajax({ -// data: data, -// type: 'POST', -// headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, -// url: '/admin/summernote_blobs', -// cache: false, -// contentType: false, -// processData: false, -// success: function (successData) { -// if (typeof successData.errors !== 'undefined' && successData.errors !== null) { -// return $.each(successData.errors, function (errorKey, messages) { -// return $.each(messages, function (messageKey, message) { -// return window.alert(message); -// }); -// }); -// } -// return toSummernote.summernote('pasteHTML', successData.node); -// } -// }); -// }; -// - +/*global $, SummernoteAttachmentUpload */ $(function () { 'use strict'; @@ -34,6 +8,21 @@ $(function () { dropImage: 'Drop file' }); + $.summernote.dom.isAttachment = function (node) { + return node && (/^ACTION-TEXT-ATTACHMENT/).test(node.nodeName.toUpperCase()); + }; + + $.summernote.dom.isInline = function (node) { + return !this.isBodyContainer(node) && + !this.isList(node) && + !this.makePredByNodeName('HR')(node) && + !this.isPara(node) && + !this.makePredByNodeName('TABLE')(node) && + !this.makePredByNodeName('BLOCKQUOTE')(node) && + !this.makePredByNodeName('DATA')(node) && + !this.isAttachment(node); + }; + $('[data-provider="summernote"]').each(function () { $(this).summernote({ popover: { @@ -61,13 +50,6 @@ $(function () { onImageUpload: function (files) { var attachmentUpload = new SummernoteAttachmentUpload(this, files[0]); attachmentUpload.start(); - }, - onInit: function (event) { - var attachmentElements = event.editable[0].querySelectorAll('[data-trix-attachment]'), - i; - for (i = 0; i < attachmentElements.length; i += 1) { - new SummernoteAttachment(attachmentElements[i]); - } } } }); diff --git a/app/assets/javascripts/admin/plugins/summernote_attachment.js b/app/assets/javascripts/admin/plugins/summernote_attachment.js deleted file mode 100644 index 08f229334c666530740a76cebe06a6abc7adb6fc..0000000000000000000000000000000000000000 --- a/app/assets/javascripts/admin/plugins/summernote_attachment.js +++ /dev/null @@ -1,21 +0,0 @@ -/*global $ */ -var SummernoteAttachment = function (element) { - 'use strict'; - this.element = element; - this.trixAttributes = JSON.parse(element.getAttribute('data-trix-attachment')); - this.setContent(); -}; - -SummernoteAttachment.prototype.setContent = function () { - 'use strict'; - var imageElement; - if (this.trixAttributes.previewable) { - imageElement = document.createElement('img'); - imageElement.src = this.trixAttributes.url; - imageElement.width = this.trixAttributes.width; - imageElement.height = this.trixAttributes.height; - this.element.appendChild(imageElement); - } else { - this.element.textContent = this.trixAttributes.filename; - } -}; diff --git a/app/assets/javascripts/admin/plugins/summernote_attachment_upload.js b/app/assets/javascripts/admin/plugins/summernote_attachment_upload.js index e4860ab36bc313a33f91c22c51d4b52756bab200..d86f231916e2a9f06086e2368ab6ca57a823974e 100644 --- a/app/assets/javascripts/admin/plugins/summernote_attachment_upload.js +++ b/app/assets/javascripts/admin/plugins/summernote_attachment_upload.js @@ -1,4 +1,4 @@ -/*global $, ActiveStorage, SummernoteAttachment */ +/*global $, ActiveStorage */ var SummernoteAttachmentUpload = function (element, file) { 'use strict'; this.element = element; @@ -22,12 +22,12 @@ SummernoteAttachmentUpload.prototype.directUploadDidComplete = function (error, this.blobAttributes = attributes; this.trixAttributes = { - contentType: attributes.content_type, - filename: attributes.filename, - filesize: attributes.byte_size, - previewable: this.isPreviewable(), - sgid: attributes.attachable_sgid, - url: this.createBlobUrl(attributes.signed_id, attributes.filename) + 'content-type': attributes.content_type, + 'filename': attributes.filename, + 'filesize': attributes.byte_size, + 'previewable': this.isPreviewable(), + 'sgid': attributes.attachable_sgid, + 'url': this.createBlobUrl(attributes.signed_id, attributes.filename) }; if (this.trixAttributes.previewable) { @@ -54,15 +54,26 @@ SummernoteAttachmentUpload.prototype.preloadAndInsertAttachment = function () { SummernoteAttachmentUpload.prototype.insertAttachment = function () { 'use strict'; - var attachmentElement = document.createElement('figure'), - attachment; + var attachmentElement = document.createElement('action-text-attachment'), + imageElement, + keys = Object.keys(this.trixAttributes), + i; - attachmentElement.className = this.getClassName(); - attachmentElement.setAttribute('data-trix-attachment', JSON.stringify(this.trixAttributes)); + for (i = 0; i < keys.length; i += 1) { + attachmentElement.setAttribute(keys[i], this.trixAttributes[keys[i]]); + } - attachment = new SummernoteAttachment(attachmentElement); + if (this.trixAttributes.previewable) { + imageElement = document.createElement('img'); + imageElement.src = this.trixAttributes.url; + imageElement.width = this.trixAttributes.width; + imageElement.height = this.trixAttributes.height; + attachmentElement.appendChild(imageElement); + } else { + attachmentElement.textContent = this.trixAttributes.filename; + } - $(this.element).summernote('insertNode', attachment.element); + $(this.element).summernote('insertNode', attachmentElement); }; SummernoteAttachmentUpload.prototype.createBlobUrl = function (signedId, filename) {