effective_bootstrap 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/effective_editor/image-drop-and-paste.js +3 -0
- data/app/assets/javascripts/effective_editor/initialize.js.coffee +10 -0
- data/app/assets/javascripts/effective_editor/input.js +1 -0
- data/app/models/effective/form_inputs/editor.rb +10 -1
- data/lib/effective_bootstrap/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edbd3d46e3b489964e42de81d6e1e80ee8cd069e3eb023691b3f4bd72c269232
|
4
|
+
data.tar.gz: 49aff1866905080fbd03ec98b882928d0082d9f03b63c453e35993d24687d493
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a2d898a6a45553bfac7ce5743aa0d0f98de8d0833e680f3665f845c30d8d2b452bd92351b3eab7ee534a0040a2ec291103a47253821f2a58bbbb4fa98a1dd4b
|
7
|
+
data.tar.gz: c0a16990a52e9b46f0b636765c13711b10b4c3ae14e9af4d28cd7869ee163887553969262b868a2d0a0e9621bc7a6dd509b060f55277b42bfc0544c7c6a8ce5d
|
@@ -0,0 +1,3 @@
|
|
1
|
+
(function(){var exports={};
|
2
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function e(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||false;r.configurable=true;if("value"in r)r.writable=true;Object.defineProperty(e,r.key,r)}}return function(t,a,r){if(a)e(t.prototype,a);if(r)e(t,r);return t}}();function _classCallCheck(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}var ImageData=function(){function e(t,a){_classCallCheck(this,e);this.dataUrl=t;this.type=a}_createClass(e,[{key:"minify",value:function t(){var a=this;var r=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return new Promise(function(t,n){var i=r.maxWidth||800;var l=r.maxHeight||800;var o=r.quality||.8;if(!a.dataUrl){return n({message:"[error] QuillImageDropAndPaste: Fail to minify the image, dataUrl should not be empty."})}var s=new Image;s.onload=function(){var r=s.width;var n=s.height;if(r>n){if(r>i){s.height=n*i/r;s.width=i}}else{if(n>l){s.width=r*l/n;s.height=l}}var u=document.createElement("canvas");u.width=s.width;u.height=s.height;var f=u.getContext("2d");f.drawImage(s,0,0,s.width,s.height);var d=a.type||"image/png";var h=u.toDataURL(d,o);t(new e(h,d))};s.src=a.dataUrl})}},{key:"toFile",value:function e(t){if(!window.File){console.error("[error] QuillImageDropAndPaste: Your browser didnot support File API.");return null}return new File([this.toBlob()],t,{type:this.type})}},{key:"toBlob",value:function e(){var t=this.dataUrl.replace(/^[^,]+,/,"");var a=this.binaryStringToArrayBuffer(atob(t));return this.createBlob([a],{type:this.type})}},{key:"binaryStringToArrayBuffer",value:function e(t){var a=t.length;var r=new ArrayBuffer(a);var n=new Uint8Array(r);var i=-1;while(++i<a){n[i]=t.charCodeAt(i)}return r}},{key:"createBlob",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(typeof a==="string")a={type:a};try{return new Blob(t,a)}catch(e){if(e.name!=="TypeError")throw e;var r=typeof BlobBuilder!=="undefined"?BlobBuilder:typeof MSBlobBuilder!=="undefined"?MSBlobBuilder:typeof MozBlobBuilder!=="undefined"?MozBlobBuilder:WebKitBlobBuilder;var n=new r;for(var i=0;i<t.length;i++){n.append(t[i])}return n.getBlob(a.type)}}}]);return e}();var ImageDropAndPaste=function(){function e(t){var a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,e);this.quill=t;this.options=a;this.handleDrop=this.handleDrop.bind(this);this.handlePaste=this.handlePaste.bind(this);this.quill.root.addEventListener("drop",this.handleDrop,false);this.quill.root.addEventListener("paste",this.handlePaste,false)}_createClass(e,[{key:"handleDrop",value:function e(t){var a=this;t.preventDefault();if(t.dataTransfer&&t.dataTransfer.files&&t.dataTransfer.files.length){if(document.caretRangeFromPoint){var r=document.getSelection();var n=document.caretRangeFromPoint(t.clientX,t.clientY);if(r&&n){r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}}this.readFiles(t.dataTransfer.files,function(e,t){t=t||"image/png";if(typeof a.options.handler==="function"){a.options.handler.call(a,e,t,new ImageData(e,t))}else{a.insert.call(a,e,t)}},t)}}},{key:"handlePaste",value:function e(t){var a=this;if(t.clipboardData&&t.clipboardData.items&&t.clipboardData.items.length){this.readFiles(t.clipboardData.items,function(e,t){t=t||"image/png";if(typeof a.options.handler==="function"){a.options.handler.call(a,e,t,new ImageData(e,t))}else{a.insert(e,t)}},t)}}},{key:"readFiles",value:function e(t,a,r){[].forEach.call(t,function(e){var t=e.type;if(!t.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i))return;r.preventDefault();var n=new FileReader;n.onload=function(e){a(e.target.result,t)};var i=e.getAsFile?e.getAsFile():e;if(i instanceof Blob)n.readAsDataURL(i)})}},{key:"insert",value:function e(t,a){var r=(this.quill.getSelection()||{}).index||this.quill.getLength();this.quill.insertEmbed(r,"image",t,"user")}}]);return e}();ImageDropAndPaste.ImageData=ImageData;exports.default=ImageDropAndPaste;
|
3
|
+
window.QuillImageDropAndPaste = ImageDropAndPaste;window.Quill.register('modules/imageDropAndPaste',ImageDropAndPaste)})();
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# https://github.com/quilljs/quill
|
3
3
|
|
4
4
|
Quill.register('modules/imageResize', window.ImageResize.default)
|
5
|
+
Quill.register('modules/imageDrop', window.QuillImageDropAndPaste)
|
5
6
|
|
6
7
|
(this.EffectiveBootstrap || {}).effective_editor = ($element, options) ->
|
7
8
|
editor = '#' + $element.attr('id') + '_editor'
|
@@ -12,6 +13,15 @@ Quill.register('modules/imageResize', window.ImageResize.default)
|
|
12
13
|
content_mode = options['content_mode']
|
13
14
|
delete options['content_mode']
|
14
15
|
|
16
|
+
if options['modules']['imageDropAndPaste']
|
17
|
+
# Image Drop & Paste
|
18
|
+
# https://github.com/chenjuneking/quill-image-drop-and-paste
|
19
|
+
dropImage = (imageDataUrl, type, imageData) ->
|
20
|
+
file = imageData.toFile(type.replace('/', '.'))
|
21
|
+
uploadImage(quill, file)
|
22
|
+
|
23
|
+
options['modules']['imageDropAndPaste'] = { handler: dropImage }
|
24
|
+
|
15
25
|
quill = new Quill($element.siblings(editor).get(0), options)
|
16
26
|
content = $element.val() || ''
|
17
27
|
|
@@ -15,7 +15,12 @@ module Effective
|
|
15
15
|
|
16
16
|
def input_js_options
|
17
17
|
{
|
18
|
-
modules: {
|
18
|
+
modules: {
|
19
|
+
toolbar: toolbar,
|
20
|
+
imageResize: imageResize,
|
21
|
+
imageDropAndPaste: imageDropAndPaste,
|
22
|
+
syntax: (content_mode == :code)
|
23
|
+
},
|
19
24
|
theme: 'snow',
|
20
25
|
placeholder: "Add #{name.to_s.pluralize}...",
|
21
26
|
content_mode: content_mode,
|
@@ -36,6 +41,10 @@ module Effective
|
|
36
41
|
]
|
37
42
|
end
|
38
43
|
|
44
|
+
def imageDropAndPaste
|
45
|
+
active_storage && !(content_mode == :code)
|
46
|
+
end
|
47
|
+
|
39
48
|
def imageResize
|
40
49
|
{
|
41
50
|
displaySize: true,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_bootstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -389,6 +389,7 @@ files:
|
|
389
389
|
- app/assets/javascripts/effective_datetime/input.js
|
390
390
|
- app/assets/javascripts/effective_datetime/overrides.js.coffee
|
391
391
|
- app/assets/javascripts/effective_datetime/turbolinks.js.coffee
|
392
|
+
- app/assets/javascripts/effective_editor/image-drop-and-paste.js
|
392
393
|
- app/assets/javascripts/effective_editor/image-resize.js
|
393
394
|
- app/assets/javascripts/effective_editor/initialize.js.coffee
|
394
395
|
- app/assets/javascripts/effective_editor/input.js
|