activeadmin_quill_editor 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +17 -10
- data/Rakefile +11 -0
- data/app/assets/javascripts/activeadmin/quill.imageUploader.js +362 -0
- data/app/assets/javascripts/activeadmin/quill.imageUploader.min.js +1 -1
- data/app/assets/javascripts/activeadmin/quill_editor/quill.core.js +3 -8594
- data/app/assets/javascripts/activeadmin/quill_editor/quill.js +3 -11562
- data/app/assets/javascripts/activeadmin/quill_editor_input.js +69 -37
- data/app/assets/stylesheets/activeadmin/quill.imageUploader.min.css +4 -4
- data/app/assets/stylesheets/activeadmin/quill_editor/quill.bubble.css +6 -948
- data/app/assets/stylesheets/activeadmin/quill_editor/quill.core.css +6 -393
- data/app/assets/stylesheets/activeadmin/quill_editor/quill.snow.css +6 -941
- data/lib/activeadmin/quill_editor/version.rb +2 -2
- metadata +4 -18
- data/app/assets/javascripts/activeadmin/quill_editor/quill.min.js +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6baa9f9ac9e591ad0cae16a78e3753eaa2253ab72435291b9a560689f5a3a458
|
4
|
+
data.tar.gz: 60a3705f0c822086360d4d97e0deedea7b386a3bacd9e87667e8d9b4dd41c0e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95ce27b5a567788dc29c11dd425e14aa7e6d2f9996d5929cca8c31e05d79606c62cf06e877a9f49af380d6a6f12496e4c55a864f8faecc7f3bb0620e185f5179
|
7
|
+
data.tar.gz: 7ba4a2ef13f016f42d3b1ba87c1d2c57ea7d0ff79db7e0b12dd01718ace5612bb204cf78c6011d141164ac207376c1f8f519c23c2ae42a7b538e490bba9dce7f
|
data/README.md
CHANGED
@@ -2,8 +2,12 @@
|
|
2
2
|
[](https://badge.fury.io/rb/activeadmin_quill_editor)
|
3
3
|
[](https://rubygems.org/gems/activeadmin_quill_editor)
|
4
4
|
[](https://github.com/blocknotes/activeadmin_quill_editor/actions/workflows/linters.yml)
|
5
|
+
|
5
6
|
[](https://github.com/blocknotes/activeadmin_quill_editor/actions/workflows/specs_rails61.yml)
|
6
7
|
[](https://github.com/blocknotes/activeadmin_quill_editor/actions/workflows/specs_rails70.yml)
|
8
|
+
[](https://github.com/blocknotes/activeadmin_quill_editor/actions/workflows/specs_rails71.yml)
|
9
|
+
[](https://github.com/blocknotes/activeadmin_quill_editor/actions/workflows/specs_rails72.yml)
|
10
|
+
[](https://github.com/blocknotes/activeadmin_quill_editor/actions/workflows/specs_rails80.yml)
|
7
11
|
|
8
12
|
An Active Admin plugin to use [Quill Rich Text Editor](https://github.com/quilljs/quill) in form fields.
|
9
13
|
|
@@ -13,7 +17,7 @@ Please :star: if you like it.
|
|
13
17
|
|
14
18
|
## Install
|
15
19
|
|
16
|
-
_NOTE_:
|
20
|
+
_NOTE_: the gem 2.x provide Quill 2.x, while Quill 1.x is provided with the gem version 1.x
|
17
21
|
|
18
22
|
After installing Active Admin, add to your Gemfile: `gem 'activeadmin_quill_editor'` (and execute *bundle*)
|
19
23
|
|
@@ -31,8 +35,6 @@ If you installed Active Admin without Webpacker support (default for now):
|
|
31
35
|
//= require activeadmin/quill_editor_input
|
32
36
|
```
|
33
37
|
|
34
|
-
> **UPDATE FROM VERSION <= 2.0**: please add to your _app/assets/stylesheets/active_admin.scss_ the line `@import 'activeadmin/quill_editor/quill.snow';`
|
35
|
-
|
36
38
|
If you installed Active Admin with Webpacker support:
|
37
39
|
|
38
40
|
- Execute in your project root:
|
@@ -101,9 +103,19 @@ Consider that this is just a basic example: images are uploaded as soon as they
|
|
101
103
|
the *upload_admin_post_path*) and it doesn't provide a way to remove images (just deleting them from
|
102
104
|
the editor will not destroy them, you'll need to implement a purge logic for that).
|
103
105
|
|
104
|
-
##
|
106
|
+
## Javascript API
|
107
|
+
|
108
|
+
Some methods are provided for advanced use cases:
|
109
|
+
|
110
|
+
- `window.getQuillEditors()`: returns all the available Quill editors instances;
|
111
|
+
- `window.getQuillEditorByIndex(n)`: returns the N-th Quill editor instance;
|
112
|
+
- `window.getQuillEditorByElementId(id)`: returns the Quill editor instance related to the specified element id (e.g. _article_description_).
|
105
113
|
|
106
|
-
|
114
|
+
## Development
|
115
|
+
|
116
|
+
Project created by [Mattia Roccoberton](http://blocknot.es), thanks also to the good guys that opened issues and pull requests from time to time.
|
117
|
+
|
118
|
+
For development information please check [this document](extra/development.md).
|
107
119
|
|
108
120
|
## Do you like it? Star it!
|
109
121
|
|
@@ -111,11 +123,6 @@ If you use this component just star it. A developer is more motivated to improve
|
|
111
123
|
|
112
124
|
Or consider offering me a coffee, it's a small thing but it is greatly appreciated: [about me](https://www.blocknot.es/about-me).
|
113
125
|
|
114
|
-
## Contributors
|
115
|
-
|
116
|
-
- [Mattia Roccoberton](http://blocknot.es): author
|
117
|
-
- The good guys that opened issues and pull requests from time to time
|
118
|
-
|
119
126
|
## License
|
120
127
|
|
121
128
|
The gem is available as open-source under the terms of the [MIT](LICENSE.txt).
|
data/Rakefile
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
begin
|
4
|
+
require 'bundler/setup'
|
5
|
+
rescue LoadError
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
8
|
+
|
9
|
+
APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
|
10
|
+
load 'rails/tasks/engine.rake'
|
11
|
+
|
12
|
+
load 'rails/tasks/statistics.rake'
|
13
|
+
|
3
14
|
require 'bundler/gem_tasks'
|
4
15
|
|
5
16
|
begin
|
@@ -0,0 +1,362 @@
|
|
1
|
+
/******/ (function(modules) { // webpackBootstrap
|
2
|
+
/******/ // The module cache
|
3
|
+
/******/ var installedModules = {};
|
4
|
+
/******/
|
5
|
+
/******/ // The require function
|
6
|
+
/******/ function __webpack_require__(moduleId) {
|
7
|
+
/******/
|
8
|
+
/******/ // Check if module is in cache
|
9
|
+
/******/ if(installedModules[moduleId]) {
|
10
|
+
/******/ return installedModules[moduleId].exports;
|
11
|
+
/******/ }
|
12
|
+
/******/ // Create a new module (and put it into the cache)
|
13
|
+
/******/ var module = installedModules[moduleId] = {
|
14
|
+
/******/ i: moduleId,
|
15
|
+
/******/ l: false,
|
16
|
+
/******/ exports: {}
|
17
|
+
/******/ };
|
18
|
+
/******/
|
19
|
+
/******/ // Execute the module function
|
20
|
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
21
|
+
/******/
|
22
|
+
/******/ // Flag the module as loaded
|
23
|
+
/******/ module.l = true;
|
24
|
+
/******/
|
25
|
+
/******/ // Return the exports of the module
|
26
|
+
/******/ return module.exports;
|
27
|
+
/******/ }
|
28
|
+
/******/
|
29
|
+
/******/
|
30
|
+
/******/ // expose the modules object (__webpack_modules__)
|
31
|
+
/******/ __webpack_require__.m = modules;
|
32
|
+
/******/
|
33
|
+
/******/ // expose the module cache
|
34
|
+
/******/ __webpack_require__.c = installedModules;
|
35
|
+
/******/
|
36
|
+
/******/ // define getter function for harmony exports
|
37
|
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
38
|
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
39
|
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
40
|
+
/******/ }
|
41
|
+
/******/ };
|
42
|
+
/******/
|
43
|
+
/******/ // define __esModule on exports
|
44
|
+
/******/ __webpack_require__.r = function(exports) {
|
45
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
46
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
47
|
+
/******/ }
|
48
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
49
|
+
/******/ };
|
50
|
+
/******/
|
51
|
+
/******/ // create a fake namespace object
|
52
|
+
/******/ // mode & 1: value is a module id, require it
|
53
|
+
/******/ // mode & 2: merge all properties of value into the ns
|
54
|
+
/******/ // mode & 4: return value when already ns object
|
55
|
+
/******/ // mode & 8|1: behave like require
|
56
|
+
/******/ __webpack_require__.t = function(value, mode) {
|
57
|
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
58
|
+
/******/ if(mode & 8) return value;
|
59
|
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
60
|
+
/******/ var ns = Object.create(null);
|
61
|
+
/******/ __webpack_require__.r(ns);
|
62
|
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
63
|
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
64
|
+
/******/ return ns;
|
65
|
+
/******/ };
|
66
|
+
/******/
|
67
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
68
|
+
/******/ __webpack_require__.n = function(module) {
|
69
|
+
/******/ var getter = module && module.__esModule ?
|
70
|
+
/******/ function getDefault() { return module['default']; } :
|
71
|
+
/******/ function getModuleExports() { return module; };
|
72
|
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
73
|
+
/******/ return getter;
|
74
|
+
/******/ };
|
75
|
+
/******/
|
76
|
+
/******/ // Object.prototype.hasOwnProperty.call
|
77
|
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
78
|
+
/******/
|
79
|
+
/******/ // __webpack_public_path__
|
80
|
+
/******/ __webpack_require__.p = "";
|
81
|
+
/******/
|
82
|
+
/******/
|
83
|
+
/******/ // Load entry module and return exports
|
84
|
+
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
85
|
+
/******/ })
|
86
|
+
/************************************************************************/
|
87
|
+
/******/ ([
|
88
|
+
/* 0 */
|
89
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
90
|
+
|
91
|
+
"use strict";
|
92
|
+
__webpack_require__.r(__webpack_exports__);
|
93
|
+
/* harmony import */ var _blots_image_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
|
94
|
+
/* harmony import */ var _quill_imageUploader_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
|
95
|
+
/* harmony import */ var _quill_imageUploader_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_quill_imageUploader_css__WEBPACK_IMPORTED_MODULE_1__);
|
96
|
+
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
97
|
+
|
98
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
var ImageUploader = function () {
|
104
|
+
function ImageUploader(quill, options) {
|
105
|
+
_classCallCheck(this, ImageUploader);
|
106
|
+
|
107
|
+
this.quill = quill;
|
108
|
+
this.options = options;
|
109
|
+
this.range = null;
|
110
|
+
|
111
|
+
if (typeof this.options.upload !== "function") {
|
112
|
+
console.warn("[Missing config] upload function that returns a promise is required");
|
113
|
+
}
|
114
|
+
|
115
|
+
if (this.options.loadingClass) {
|
116
|
+
_blots_image_js__WEBPACK_IMPORTED_MODULE_0__["default"].className = this.options.loadingClass;
|
117
|
+
}
|
118
|
+
|
119
|
+
var toolbar = this.quill.getModule("toolbar");
|
120
|
+
toolbar.addHandler("image", this.selectLocalImage.bind(this));
|
121
|
+
|
122
|
+
this.handleDrop = this.handleDrop.bind(this);
|
123
|
+
this.handlePaste = this.handlePaste.bind(this);
|
124
|
+
|
125
|
+
this.quill.root.addEventListener("drop", this.handleDrop, false);
|
126
|
+
this.quill.root.addEventListener("paste", this.handlePaste, false);
|
127
|
+
}
|
128
|
+
|
129
|
+
_createClass(ImageUploader, [{
|
130
|
+
key: "selectLocalImage",
|
131
|
+
value: function selectLocalImage() {
|
132
|
+
var _this = this;
|
133
|
+
|
134
|
+
this.range = this.quill.getSelection();
|
135
|
+
this.fileHolder = document.createElement("input");
|
136
|
+
this.fileHolder.setAttribute("type", "file");
|
137
|
+
this.fileHolder.setAttribute("accept", "image/*");
|
138
|
+
this.fileHolder.setAttribute("style", "visibility:hidden");
|
139
|
+
|
140
|
+
this.fileHolder.onchange = this.fileChanged.bind(this);
|
141
|
+
|
142
|
+
document.body.appendChild(this.fileHolder);
|
143
|
+
|
144
|
+
this.fileHolder.click();
|
145
|
+
|
146
|
+
window.requestAnimationFrame(function () {
|
147
|
+
document.body.removeChild(_this.fileHolder);
|
148
|
+
});
|
149
|
+
}
|
150
|
+
}, {
|
151
|
+
key: "handleDrop",
|
152
|
+
value: function handleDrop(evt) {
|
153
|
+
var _this2 = this;
|
154
|
+
|
155
|
+
evt.stopPropagation();
|
156
|
+
evt.preventDefault();
|
157
|
+
if (evt.dataTransfer && evt.dataTransfer.files && evt.dataTransfer.files.length) {
|
158
|
+
if (document.caretRangeFromPoint) {
|
159
|
+
var selection = document.getSelection();
|
160
|
+
var range = document.caretRangeFromPoint(evt.clientX, evt.clientY);
|
161
|
+
if (selection && range) {
|
162
|
+
selection.setBaseAndExtent(range.startContainer, range.startOffset, range.startContainer, range.startOffset);
|
163
|
+
}
|
164
|
+
} else {
|
165
|
+
var _selection = document.getSelection();
|
166
|
+
var _range = document.caretPositionFromPoint(evt.clientX, evt.clientY);
|
167
|
+
if (_selection && _range) {
|
168
|
+
_selection.setBaseAndExtent(_range.offsetNode, _range.offset, _range.offsetNode, _range.offset);
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
172
|
+
this.range = this.quill.getSelection();
|
173
|
+
var file = evt.dataTransfer.files[0];
|
174
|
+
|
175
|
+
setTimeout(function () {
|
176
|
+
_this2.range = _this2.quill.getSelection();
|
177
|
+
_this2.readAndUploadFile(file);
|
178
|
+
}, 0);
|
179
|
+
}
|
180
|
+
}
|
181
|
+
}, {
|
182
|
+
key: "handlePaste",
|
183
|
+
value: function handlePaste(evt) {
|
184
|
+
var _this3 = this;
|
185
|
+
|
186
|
+
var clipboard = evt.clipboardData || window.clipboardData;
|
187
|
+
|
188
|
+
// IE 11 is .files other browsers are .items
|
189
|
+
if (clipboard && (clipboard.items || clipboard.files)) {
|
190
|
+
var items = clipboard.items || clipboard.files;
|
191
|
+
var IMAGE_MIME_REGEX = /^image\/(jpe?g|gif|png|svg|webp)$/i;
|
192
|
+
|
193
|
+
for (var i = 0; i < items.length; i++) {
|
194
|
+
if (IMAGE_MIME_REGEX.test(items[i].type)) {
|
195
|
+
(function () {
|
196
|
+
var file = items[i].getAsFile ? items[i].getAsFile() : items[i];
|
197
|
+
|
198
|
+
if (file) {
|
199
|
+
_this3.range = _this3.quill.getSelection();
|
200
|
+
evt.preventDefault();
|
201
|
+
setTimeout(function () {
|
202
|
+
_this3.range = _this3.quill.getSelection();
|
203
|
+
_this3.readAndUploadFile(file);
|
204
|
+
}, 0);
|
205
|
+
}
|
206
|
+
})();
|
207
|
+
}
|
208
|
+
}
|
209
|
+
}
|
210
|
+
}
|
211
|
+
}, {
|
212
|
+
key: "readAndUploadFile",
|
213
|
+
value: function readAndUploadFile(file) {
|
214
|
+
var _this4 = this;
|
215
|
+
|
216
|
+
var isUploadReject = false;
|
217
|
+
|
218
|
+
var fileReader = new FileReader();
|
219
|
+
|
220
|
+
fileReader.addEventListener("load", function () {
|
221
|
+
if (!isUploadReject) {
|
222
|
+
var base64ImageSrc = fileReader.result;
|
223
|
+
_this4.insertBase64Image(base64ImageSrc);
|
224
|
+
}
|
225
|
+
}, false);
|
226
|
+
|
227
|
+
if (file) {
|
228
|
+
fileReader.readAsDataURL(file);
|
229
|
+
}
|
230
|
+
|
231
|
+
this.options.upload(file).then(function (imageUrl) {
|
232
|
+
_this4.insertToEditor(imageUrl);
|
233
|
+
}, function (error) {
|
234
|
+
isUploadReject = true;
|
235
|
+
_this4.removeBase64Image();
|
236
|
+
console.warn(error);
|
237
|
+
});
|
238
|
+
}
|
239
|
+
}, {
|
240
|
+
key: "fileChanged",
|
241
|
+
value: function fileChanged() {
|
242
|
+
var file = this.fileHolder.files[0];
|
243
|
+
this.readAndUploadFile(file);
|
244
|
+
}
|
245
|
+
}, {
|
246
|
+
key: "insertBase64Image",
|
247
|
+
value: function insertBase64Image(url) {
|
248
|
+
var range = this.range;
|
249
|
+
|
250
|
+
this.quill.insertEmbed(range.index, _blots_image_js__WEBPACK_IMPORTED_MODULE_0__["default"].blotName, "" + url, "user");
|
251
|
+
}
|
252
|
+
}, {
|
253
|
+
key: "insertToEditor",
|
254
|
+
value: function insertToEditor(url) {
|
255
|
+
var range = this.range;
|
256
|
+
// Delete the placeholder image
|
257
|
+
|
258
|
+
this.quill.deleteText(range.index, 3, "user");
|
259
|
+
// Insert the server saved image
|
260
|
+
this.quill.insertEmbed(range.index, "image", "" + url, "user");
|
261
|
+
|
262
|
+
range.index++;
|
263
|
+
this.quill.setSelection(range, "user");
|
264
|
+
}
|
265
|
+
}, {
|
266
|
+
key: "removeBase64Image",
|
267
|
+
value: function removeBase64Image() {
|
268
|
+
var range = this.range;
|
269
|
+
|
270
|
+
this.quill.deleteText(range.index, 3, "user");
|
271
|
+
}
|
272
|
+
}]);
|
273
|
+
|
274
|
+
return ImageUploader;
|
275
|
+
}();
|
276
|
+
|
277
|
+
window.ImageUploader = ImageUploader;
|
278
|
+
/* harmony default export */ __webpack_exports__["default"] = (ImageUploader);
|
279
|
+
|
280
|
+
/***/ }),
|
281
|
+
/* 1 */
|
282
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
283
|
+
|
284
|
+
"use strict";
|
285
|
+
__webpack_require__.r(__webpack_exports__);
|
286
|
+
/* harmony import */ var quill__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
|
287
|
+
/* harmony import */ var quill__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(quill__WEBPACK_IMPORTED_MODULE_0__);
|
288
|
+
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
289
|
+
|
290
|
+
var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
|
291
|
+
|
292
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
293
|
+
|
294
|
+
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
295
|
+
|
296
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
297
|
+
|
298
|
+
|
299
|
+
|
300
|
+
var InlineBlot = quill__WEBPACK_IMPORTED_MODULE_0___default.a.import('blots/block');
|
301
|
+
|
302
|
+
var LoadingImage = function (_InlineBlot) {
|
303
|
+
_inherits(LoadingImage, _InlineBlot);
|
304
|
+
|
305
|
+
function LoadingImage() {
|
306
|
+
_classCallCheck(this, LoadingImage);
|
307
|
+
|
308
|
+
return _possibleConstructorReturn(this, (LoadingImage.__proto__ || Object.getPrototypeOf(LoadingImage)).apply(this, arguments));
|
309
|
+
}
|
310
|
+
|
311
|
+
_createClass(LoadingImage, [{
|
312
|
+
key: 'deleteAt',
|
313
|
+
value: function deleteAt(index, length) {
|
314
|
+
_get(LoadingImage.prototype.__proto__ || Object.getPrototypeOf(LoadingImage.prototype), 'deleteAt', this).call(this, index, length);
|
315
|
+
this.cache = {};
|
316
|
+
}
|
317
|
+
}], [{
|
318
|
+
key: 'create',
|
319
|
+
value: function create(src) {
|
320
|
+
var node = _get(LoadingImage.__proto__ || Object.getPrototypeOf(LoadingImage), 'create', this).call(this, src);
|
321
|
+
if (src === true) return node;
|
322
|
+
|
323
|
+
var image = document.createElement('img');
|
324
|
+
image.setAttribute('src', src);
|
325
|
+
node.appendChild(image);
|
326
|
+
return node;
|
327
|
+
}
|
328
|
+
}, {
|
329
|
+
key: 'value',
|
330
|
+
value: function value(domNode) {
|
331
|
+
var _domNode$dataset = domNode.dataset,
|
332
|
+
src = _domNode$dataset.src,
|
333
|
+
custom = _domNode$dataset.custom;
|
334
|
+
|
335
|
+
return { src: src, custom: custom };
|
336
|
+
}
|
337
|
+
}]);
|
338
|
+
|
339
|
+
return LoadingImage;
|
340
|
+
}(InlineBlot);
|
341
|
+
|
342
|
+
LoadingImage.blotName = 'imageBlot';
|
343
|
+
LoadingImage.className = 'quill-image-uploading';
|
344
|
+
LoadingImage.tagName = 'span';
|
345
|
+
quill__WEBPACK_IMPORTED_MODULE_0___default.a.register({ 'formats/imageBlot': LoadingImage });
|
346
|
+
|
347
|
+
/* harmony default export */ __webpack_exports__["default"] = (LoadingImage);
|
348
|
+
|
349
|
+
/***/ }),
|
350
|
+
/* 2 */
|
351
|
+
/***/ (function(module, exports) {
|
352
|
+
|
353
|
+
module.exports = Quill;
|
354
|
+
|
355
|
+
/***/ }),
|
356
|
+
/* 3 */
|
357
|
+
/***/ (function(module, exports) {
|
358
|
+
|
359
|
+
// removed by extract-text-webpack-plugin
|
360
|
+
|
361
|
+
/***/ })
|
362
|
+
/******/ ]);
|
@@ -1 +1 @@
|
|
1
|
-
!function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=Quill},function(e,t,n){"use strict";n.r(t);var i=n(0),r=n.n(i),o=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a=function e(t,n,i){null===t&&(t=Function.prototype);var r=Object.getOwnPropertyDescriptor(t,n);if(void 0===r){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,i)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(i):void 0};function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var u=function(e){function t(){return l(this,t),s(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"deleteAt",value:function(e,n){a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"deleteAt",this).call(this,e,n),this.cache={}}}],[{key:"create",value:function(e){var n=a(t.__proto__||Object.getPrototypeOf(t),"create",this).call(this,e);if(!0===e)return n;var i=document.createElement("img");return i.setAttribute("src",e),n.appendChild(i),n}},{key:"value",value:function(e){var t=e.dataset;return{src:t.src,custom:t.custom}}}]),t}(r.a.import("blots/block"));u.blotName="imageBlot",u.className="image-uploading",u.tagName="span",r.a.register({"formats/imageBlot":u});var c=u,f=(n(3),function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}());var d=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.quill=t,this.options=n,this.range=null,"function"!=typeof this.options.upload&&console.warn("[Missing config] upload function that returns a promise is required"),this.quill.getModule("toolbar").addHandler("image",this.selectLocalImage.bind(this)),this.handleDrop=this.handleDrop.bind(this),this.handlePaste=this.handlePaste.bind(this),this.quill.root.addEventListener("drop",this.handleDrop,!1),this.quill.root.addEventListener("paste",this.handlePaste,!1)}return f(e,[{key:"selectLocalImage",value:function(){var e=this;this.range=this.quill.getSelection(),this.fileHolder=document.createElement("input"),this.fileHolder.setAttribute("type","file"),this.fileHolder.setAttribute("accept","image/*"),this.fileHolder.setAttribute("style","visibility:hidden"),this.fileHolder.onchange=this.fileChanged.bind(this),document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){document.body.removeChild(e.fileHolder)}))}},{key:"handleDrop",value:function(e){var t=this;if(e.stopPropagation(),e.preventDefault(),e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length){if(document.caretRangeFromPoint){var n=document.getSelection(),i=document.caretRangeFromPoint(e.clientX,e.clientY);n&&i&&n.setBaseAndExtent(i.startContainer,i.startOffset,i.startContainer,i.startOffset)}else{var r=document.getSelection(),o=document.caretPositionFromPoint(e.clientX,e.clientY);r&&o&&r.setBaseAndExtent(o.offsetNode,o.offset,o.offsetNode,o.offset)}this.range=this.quill.getSelection();var a=e.dataTransfer.files[0];setTimeout((function(){t.range=t.quill.getSelection(),t.readAndUploadFile(a)}),0)}}},{key:"handlePaste",value:function(e){var t=this,n=e.clipboardData||window.clipboardData;if(n&&(n.items||n.files))for(var i=n.items||n.files,r=/^image\/(jpe?g|gif|png|svg|webp)$/i,o=0;o<i.length;o++)r.test(i[o].type)&&function(){var n=i[o].getAsFile?i[o].getAsFile():i[o];n&&(t.range=t.quill.getSelection(),e.preventDefault(),setTimeout((function(){t.range=t.quill.getSelection(),t.readAndUploadFile(n)}),0))}()}},{key:"readAndUploadFile",value:function(e){var t=this,n=!1,i=new FileReader;i.addEventListener("load",(function(){if(!n){var e=i.result;t.insertBase64Image(e)}}),!1),e&&i.readAsDataURL(e),this.options.upload(e).then((function(e){t.insertToEditor(e)}),(function(e){n=!0,t.removeBase64Image(),console.warn(e)}))}},{key:"fileChanged",value:function(){var e=this.fileHolder.files[0];this.readAndUploadFile(e)}},{key:"insertBase64Image",value:function(e){var t=this.range;this.quill.insertEmbed(t.index,c.blotName,""+e,"user")}},{key:"insertToEditor",value:function(e){var t=this.range;this.quill.deleteText(t.index,3,"user"),this.quill.insertEmbed(t.index,"image",""+e,"user"),t.index++,this.quill.setSelection(t,"user")}},{key:"removeBase64Image",value:function(){var e=this.range;this.quill.deleteText(e.index,3,"user")}}]),e}();window.ImageUploader=d;t.default=d},,function(e,t){}]);
|
1
|
+
!function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=Quill},function(e,t,n){"use strict";n.r(t);var i=n(0),r=n.n(i),o=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a=function e(t,n,i){null===t&&(t=Function.prototype);var r=Object.getOwnPropertyDescriptor(t,n);if(void 0===r){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,i)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(i):void 0};function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var u=function(e){function t(){return l(this,t),s(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"deleteAt",value:function(e,n){a(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"deleteAt",this).call(this,e,n),this.cache={}}}],[{key:"create",value:function(e){var n=a(t.__proto__||Object.getPrototypeOf(t),"create",this).call(this,e);if(!0===e)return n;var i=document.createElement("img");return i.setAttribute("src",e),n.appendChild(i),n}},{key:"value",value:function(e){var t=e.dataset;return{src:t.src,custom:t.custom}}}]),t}(r.a.import("blots/block"));u.blotName="imageBlot",u.className="quill-image-uploading",u.tagName="span",r.a.register({"formats/imageBlot":u});var c=u,f=(n(3),function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}());var d=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.quill=t,this.options=n,this.range=null,"function"!=typeof this.options.upload&&console.warn("[Missing config] upload function that returns a promise is required"),this.options.loadingClass&&(c.className=this.options.loadingClass),this.quill.getModule("toolbar").addHandler("image",this.selectLocalImage.bind(this)),this.handleDrop=this.handleDrop.bind(this),this.handlePaste=this.handlePaste.bind(this),this.quill.root.addEventListener("drop",this.handleDrop,!1),this.quill.root.addEventListener("paste",this.handlePaste,!1)}return f(e,[{key:"selectLocalImage",value:function(){var e=this;this.range=this.quill.getSelection(),this.fileHolder=document.createElement("input"),this.fileHolder.setAttribute("type","file"),this.fileHolder.setAttribute("accept","image/*"),this.fileHolder.setAttribute("style","visibility:hidden"),this.fileHolder.onchange=this.fileChanged.bind(this),document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){document.body.removeChild(e.fileHolder)}))}},{key:"handleDrop",value:function(e){var t=this;if(e.stopPropagation(),e.preventDefault(),e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length){if(document.caretRangeFromPoint){var n=document.getSelection(),i=document.caretRangeFromPoint(e.clientX,e.clientY);n&&i&&n.setBaseAndExtent(i.startContainer,i.startOffset,i.startContainer,i.startOffset)}else{var r=document.getSelection(),o=document.caretPositionFromPoint(e.clientX,e.clientY);r&&o&&r.setBaseAndExtent(o.offsetNode,o.offset,o.offsetNode,o.offset)}this.range=this.quill.getSelection();var a=e.dataTransfer.files[0];setTimeout((function(){t.range=t.quill.getSelection(),t.readAndUploadFile(a)}),0)}}},{key:"handlePaste",value:function(e){var t=this,n=e.clipboardData||window.clipboardData;if(n&&(n.items||n.files))for(var i=n.items||n.files,r=/^image\/(jpe?g|gif|png|svg|webp)$/i,o=0;o<i.length;o++)r.test(i[o].type)&&function(){var n=i[o].getAsFile?i[o].getAsFile():i[o];n&&(t.range=t.quill.getSelection(),e.preventDefault(),setTimeout((function(){t.range=t.quill.getSelection(),t.readAndUploadFile(n)}),0))}()}},{key:"readAndUploadFile",value:function(e){var t=this,n=!1,i=new FileReader;i.addEventListener("load",(function(){if(!n){var e=i.result;t.insertBase64Image(e)}}),!1),e&&i.readAsDataURL(e),this.options.upload(e).then((function(e){t.insertToEditor(e)}),(function(e){n=!0,t.removeBase64Image(),console.warn(e)}))}},{key:"fileChanged",value:function(){var e=this.fileHolder.files[0];this.readAndUploadFile(e)}},{key:"insertBase64Image",value:function(e){var t=this.range;this.quill.insertEmbed(t.index,c.blotName,""+e,"user")}},{key:"insertToEditor",value:function(e){var t=this.range;this.quill.deleteText(t.index,3,"user"),this.quill.insertEmbed(t.index,"image",""+e,"user"),t.index++,this.quill.setSelection(t,"user")}},{key:"removeBase64Image",value:function(){var e=this.range;this.quill.deleteText(e.index,3,"user")}}]),e}();window.ImageUploader=d;t.default=d},,function(e,t){}]);
|