active_storage_drag_and_drop 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +4 -4
- data/README.md +9 -0
- data/app/assets/javascripts/active_storage_drag_and_drop.js +3 -3
- data/app/assets/stylesheets/direct_uploads.css +7 -6
- data/app/javascript/active_storage_drag_and_drop/direct_upload_controller.js +0 -3
- data/app/javascript/active_storage_drag_and_drop/index.js +37 -33
- data/app/javascript/active_storage_drag_and_drop/ujs.js +0 -8
- data/lib/active_storage_drag_and_drop/rails/form_builder.rb +43 -8
- data/lib/active_storage_drag_and_drop/version.rb +1 -1
- data/yarn.lock +117 -87
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9176141cbd109e3763a7f3806afc9276d2cceeed8c0cb7d14de281a33cdbe4d6
|
4
|
+
data.tar.gz: 16cc8d5fa4fe30c4f256ebbf8ff50c6933e8f2aae486f53e4e2ecafa678baead
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8898eaa76f675d83bc15af8d2576203e1c1f4ef836ddf4863de0e2859937d0dcb6d65792c0b0bfc6a788308fc6f46b3dcf831cd26b5953456ab2b8332458b10
|
7
|
+
data.tar.gz: 88ce4e6941c66ff2536b012d8bf93026b46325f6340e7c65b82b7d8408f2060ecd3fda431ec968b6f1de7a454899ae6f09494dfd266826aa974a2aa203145bcc
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
active_storage_drag_and_drop (0.3.
|
4
|
+
active_storage_drag_and_drop (0.3.3)
|
5
5
|
rails (~> 5.2)
|
6
6
|
|
7
7
|
GEM
|
@@ -60,17 +60,17 @@ GEM
|
|
60
60
|
loofah (2.2.2)
|
61
61
|
crass (~> 1.0.2)
|
62
62
|
nokogiri (>= 1.5.9)
|
63
|
-
mail (2.7.
|
63
|
+
mail (2.7.1)
|
64
64
|
mini_mime (>= 0.1.1)
|
65
65
|
marcel (0.3.2)
|
66
66
|
mimemagic (~> 0.3.2)
|
67
67
|
method_source (0.9.0)
|
68
68
|
mimemagic (0.3.2)
|
69
|
-
mini_mime (1.0.
|
69
|
+
mini_mime (1.0.1)
|
70
70
|
mini_portile2 (2.3.0)
|
71
71
|
minitest (5.11.3)
|
72
72
|
nio4r (2.3.1)
|
73
|
-
nokogiri (1.8.
|
73
|
+
nokogiri (1.8.5)
|
74
74
|
mini_portile2 (~> 2.3.0)
|
75
75
|
rack (2.0.5)
|
76
76
|
rack-test (1.1.0)
|
data/README.md
CHANGED
@@ -46,6 +46,15 @@ Call the method `drag_and_drop_file_field` on your model's form:
|
|
46
46
|
= form.submit
|
47
47
|
```
|
48
48
|
The first parameter is a symbol representing the method of the ActiveStorage attachment and an optional second parameter sets the the text on the drag and drop zone.
|
49
|
+
```ruby
|
50
|
+
form.drag_and_drop_file_field :images, 'Drag and drop images here!'
|
51
|
+
```
|
52
|
+
The content of the dropzone can also be passed as a block of ERB or HAML:
|
53
|
+
```haml
|
54
|
+
= form.drag_and_drop_file_field :images do
|
55
|
+
%i.far.fa-images
|
56
|
+
Drag images here!
|
57
|
+
```
|
49
58
|
Options for the nested file field can be passed as key value pairs:
|
50
59
|
```ruby
|
51
60
|
form.drag_and_drop_file_field :images, accept: 'image/png, image/jpeg, image/gif, image/tiff'
|
@@ -104,7 +104,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
104
104
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
105
105
|
|
106
106
|
"use strict";
|
107
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragAndDropUploadController\", function() { return DragAndDropUploadController; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./app/javascript/active_storage_drag_and_drop/helpers.js\");\n/* harmony import */ var activestorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! activestorage */ \"./node_modules/activestorage/app/assets/javascripts/activestorage.js\");\n/* harmony import */ var activestorage__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(activestorage__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst eventFamily = 'dnd-upload';\n\nclass DragAndDropUploadController {\n constructor(input, file) {\n this.input = input;\n this.form = input.closest('form');\n this.url = this.input.dataset.directUploadUrl;\n this.iconContainer = document.getElementById(this.input.dataset.iconContainerId);\n this.file = file;\n this.upload = new activestorage__WEBPACK_IMPORTED_MODULE_1__[\"DirectUpload\"](this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n start(callback) {\n this.upload.create((error, blob) => {\n if (error) {\n // Handle the error\n
|
107
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragAndDropUploadController\", function() { return DragAndDropUploadController; });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"./app/javascript/active_storage_drag_and_drop/helpers.js\");\n/* harmony import */ var activestorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! activestorage */ \"./node_modules/activestorage/app/assets/javascripts/activestorage.js\");\n/* harmony import */ var activestorage__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(activestorage__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst eventFamily = 'dnd-upload';\n\nclass DragAndDropUploadController {\n constructor(input, file) {\n this.input = input;\n this.form = input.closest('form');\n this.url = this.input.dataset.directUploadUrl;\n this.iconContainer = document.getElementById(this.input.dataset.iconContainerId);\n this.file = file;\n this.upload = new activestorage__WEBPACK_IMPORTED_MODULE_1__[\"DirectUpload\"](this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n start(callback) {\n this.upload.create((error, blob) => {\n if (error) {\n // Handle the error\n this.dispatchError(error);\n callback(error);\n } else {\n // // Add an appropriately-named hidden input to the form with a\n // // value of blob.signed_id so that the blob ids will be\n // // transmitted in the normal upload flow\n const hiddenField = document.createElement('input');\n hiddenField.setAttribute(\"type\", \"hidden\");\n hiddenField.setAttribute(\"value\", blob.signed_id);\n hiddenField.name = this.input.name;\n hiddenField.setAttribute('data-direct-upload-id', this.upload.id);\n this.form.appendChild(hiddenField);\n this.dispatch(\"end\");\n callback(error);\n }\n });\n }\n\n dispatch(name, detail = {}) {\n detail.file = this.file;\n detail.id = this.upload.id;\n detail.iconContainer = this.iconContainer;\n return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__[\"dispatchEvent\"])(this.input, `${eventFamily}:${name}`, { detail });\n }\n\n dispatchError(error) {\n const event = this.dispatch(\"error\", { error });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n\n directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", { xhr });\n }\n // directUploadWillStoreFileWithXHR\n directUploadWillStoreFileWithXHR(xhr) {\n this.dispatch(\"before-storage-request\", { xhr });\n xhr.upload.addEventListener(\"progress\", event => this.uploadRequestDidProgress(event));\n }\n\n uploadRequestDidProgress(event) {\n const progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", { progress });\n }\n }\n\n}\n\n//# sourceURL=webpack://ActiveStorage/./app/javascript/active_storage_drag_and_drop/direct_upload_controller.js?");
|
108
108
|
|
109
109
|
/***/ }),
|
110
110
|
|
@@ -128,7 +128,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) *
|
|
128
128
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
129
129
|
|
130
130
|
"use strict";
|
131
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ujs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ujs */ \"./app/javascript/active_storage_drag_and_drop/ujs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"start\", function() { return _ujs__WEBPACK_IMPORTED_MODULE_0__[\"start\"]; });\n\n\n\n\n\nfunction autostart() {\n Object(_ujs__WEBPACK_IMPORTED_MODULE_0__[\"start\"])();\n}\n\nsetTimeout(autostart, 1);\n\n//----------------------------------------------------------------------------------------------------\n// UI Events - this code is completely outside the draganddrop lib - it's just reacting to events\n//----------------------------------------------------------------------------------------------------\nvar fileUploadUIPainter = function (iconContainer, id, filename, complete) {\n // the only rule here is that all root level elements must have the data: { direct_upload_id: [id] } attribute ala: 'data-direct-upload-id=\"${id}\"'\n var cname = complete ? 'complete' : 'pending';\n var progress = complete ? 100 : 0;\n iconContainer.insertAdjacentHTML(\"beforeend\", `\n <div id=\"direct-upload-${id}\" class=\"direct-upload direct-upload--${cname}\" data-direct-upload-id=\"${id}\">\n <div id=\"direct-upload-progress-${id}\" class=\"direct-upload__progress\" style=\"width: ${progress}%\"></div>\n <span class=\"direct-upload__filename\">${filename}</span>\n </div>\n <a href='remove' class='direct-upload__remove' data-dnd-delete='true' data-direct-upload-id=\"${id}\">x</a>\n `);\n};\n\
|
131
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ujs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ujs */ \"./app/javascript/active_storage_drag_and_drop/ujs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"start\", function() { return _ujs__WEBPACK_IMPORTED_MODULE_0__[\"start\"]; });\n\n\n\n\n\nfunction autostart() {\n Object(_ujs__WEBPACK_IMPORTED_MODULE_0__[\"start\"])();\n}\n\nsetTimeout(autostart, 1);\n\n//----------------------------------------------------------------------------------------------------\n// UI Events - this code is completely outside the draganddrop lib - it's just reacting to events\n//----------------------------------------------------------------------------------------------------\nvar fileUploadUIPainter = function (iconContainer, id, filename, complete) {\n // the only rule here is that all root level elements must have the data: { direct_upload_id: [id] } attribute ala: 'data-direct-upload-id=\"${id}\"'\n var cname = complete ? 'complete' : 'pending';\n var progress = complete ? 100 : 0;\n iconContainer.insertAdjacentHTML(\"beforeend\", `\n <div id=\"direct-upload-${id}\" class=\"direct-upload direct-upload--${cname}\" data-direct-upload-id=\"${id}\">\n <div id=\"direct-upload-progress-${id}\" class=\"direct-upload__progress\" style=\"width: ${progress}%\"></div>\n <span class=\"direct-upload__filename\">${filename}</span>\n </div>\n <a href='remove' class='direct-upload__remove' data-dnd-delete='true' data-direct-upload-id=\"${id}\">x</a>\n `);\n};\n\n// addEventListener(\"dnd-uploads:start\", event => {\n// })\n// addEventListener(\"dnd-uploads:end\", event => {\n// })\n\naddEventListener(\"dnd-upload:initialize\", event => {\n if (!event.defaultPrevented) {\n const { target, detail } = event;\n const { id, file, iconContainer } = detail;\n fileUploadUIPainter(iconContainer, id, file.name, false);\n }\n});\n\naddEventListener(\"dnd-upload:placeholder\", event => {\n if (!event.defaultPrevented) {\n const { target, detail } = event;\n const { id, fileName, iconContainer } = detail;\n fileUploadUIPainter(iconContainer, id, fileName, true);\n }\n});\n\naddEventListener(\"dnd-upload:start\", event => {\n if (!event.defaultPrevented) {\n const { id } = event.detail;\n const element = document.getElementById(`direct-upload-${id}`);\n element.classList.remove(\"direct-upload--pending\");\n }\n});\n\naddEventListener(\"dnd-upload:progress\", event => {\n if (!event.defaultPrevented) {\n const { id, progress } = event.detail;\n const progressElement = document.getElementById(`direct-upload-progress-${id}`);\n progressElement.style.width = `${progress}%`;\n }\n});\n\naddEventListener(\"dnd-upload:error\", event => {\n if (!event.defaultPrevented) {\n event.preventDefault();\n const { id, error } = event.detail;\n const element = document.getElementById(`direct-upload-${id}`);\n element.classList.add(\"direct-upload--error\");\n element.setAttribute(\"title\", error);\n }\n});\n\naddEventListener(\"dnd-upload:end\", event => {\n if (!event.defaultPrevented) {\n const { id } = event.detail;\n const element = document.getElementById(`direct-upload-${id}`);\n element.classList.remove(\"direct-upload--pending\");\n element.classList.add(\"direct-upload--complete\");\n }\n});\n\n//# sourceURL=webpack://ActiveStorage/./app/javascript/active_storage_drag_and_drop/index.js?");
|
132
132
|
|
133
133
|
/***/ }),
|
134
134
|
|
@@ -140,7 +140,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ujs
|
|
140
140
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
141
141
|
|
142
142
|
"use strict";
|
143
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"start\", function() { return start; });\n/* harmony import */ var _upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./upload_queue_processor */ \"./app/javascript/active_storage_drag_and_drop/upload_queue_processor.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./app/javascript/active_storage_drag_and_drop/helpers.js\");\n\n\n\nlet started = false;\nlet formSubmitted = false;\n\nfunction didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n}\n\nfunction handleFormSubmissionEvent(event) {\n if (formSubmitted) {\n return;\n }\n formSubmitted = true;\n const form = event.target;\n const next_upload = new _upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__[\"UploadQueueProcessor\"](form);\n // if the upload processor has no dnd file inputs, then we let the event happen naturally\n // if it DOES have dnd file inputs, then we have to process our queue first and then submit the form\n if (next_upload.current_uploaders.length > 0) {\n event.preventDefault();\n // inputs.forEach(disable)\n next_upload.start(error => {\n if (error) {\n // inputs.forEach(enable)\n } else {\n form.submit();\n // The original ActiveStorage DirectUpload system did this action using\n // input.click(), but doing that either makes the form submission event\n // happen multiple times, or the browser seems to block the input.click()\n // event completely, because it's not a trusted 'as a result of a mouse\n // click' event.\n // HOWEVER\n // form.submit() doesn't trigger to any UJS submission events. This\n // results in remote forms being submitted locally whenever there's a\n // dnd file to upload. Instead we use Rails.fire(element, 'submit')\n // Rails.fire(form, 'submit')\n }\n });\n }\n}\n\nfunction addAttachedFileIcons() {\n
|
143
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"start\", function() { return start; });\n/* harmony import */ var _upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./upload_queue_processor */ \"./app/javascript/active_storage_drag_and_drop/upload_queue_processor.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"./app/javascript/active_storage_drag_and_drop/helpers.js\");\n\n\n\nlet started = false;\nlet formSubmitted = false;\n\nfunction didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n}\n\nfunction handleFormSubmissionEvent(event) {\n if (formSubmitted) {\n return;\n }\n formSubmitted = true;\n const form = event.target;\n const next_upload = new _upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__[\"UploadQueueProcessor\"](form);\n // if the upload processor has no dnd file inputs, then we let the event happen naturally\n // if it DOES have dnd file inputs, then we have to process our queue first and then submit the form\n if (next_upload.current_uploaders.length > 0) {\n event.preventDefault();\n // inputs.forEach(disable)\n next_upload.start(error => {\n if (error) {\n // inputs.forEach(enable)\n } else {\n form.submit();\n // The original ActiveStorage DirectUpload system did this action using\n // input.click(), but doing that either makes the form submission event\n // happen multiple times, or the browser seems to block the input.click()\n // event completely, because it's not a trusted 'as a result of a mouse\n // click' event.\n // HOWEVER\n // form.submit() doesn't trigger to any UJS submission events. This\n // results in remote forms being submitted locally whenever there's a\n // dnd file to upload. Instead we use Rails.fire(element, 'submit')\n // Rails.fire(form, 'submit')\n }\n });\n }\n}\n\nfunction addAttachedFileIcons() {\n document.querySelectorAll(\"input[type='hidden'][data-direct-upload-id][data-uploaded-file-name]\").forEach(uploadedFile => {\n const dataset = uploadedFile.dataset;\n let iconContainer = document.getElementById(dataset.iconContainerId);\n let detail = {\n id: dataset.directUploadId,\n fileName: dataset.uploadedFileName,\n iconContainer: iconContainer\n };\n _helpers__WEBPACK_IMPORTED_MODULE_1__[\"dispatchEvent\"](uploadedFile, `dnd-upload:placeholder`, { detail });\n });\n}\n\nfunction start() {\n if (started) {\n return;\n }\n started = true;\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n\n // input[type=file][data-dnd=true]\n document.addEventListener(\"change\", event => {\n if (event.target.type == 'file' && event.target.dataset.dnd == 'true') {\n const input = event.target;\n Array.from(input.files).forEach(file => Object(_upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__[\"createUploader\"])(input, file));\n input.value = null;\n }\n });\n document.addEventListener(\"dragover\", event => {\n if (_helpers__WEBPACK_IMPORTED_MODULE_1__[\"hasClassnameInHeirarchy\"](event.target, 'asdndzone')) {\n event.preventDefault();\n }\n });\n document.addEventListener(\"drop\", event => {\n let asdndz = _helpers__WEBPACK_IMPORTED_MODULE_1__[\"getClassnameFromHeirarchy\"](event.target, 'asdndzone');\n if (asdndz) {\n event.preventDefault();\n // get the input associated with this dndz\n const input = document.getElementById(asdndz.dataset.dndInputId);\n Array.from(event.dataTransfer.files).forEach(file => Object(_upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__[\"createUploader\"])(input, file));\n }\n });\n document.addEventListener(\"click\", event => {\n if (event.target.dataset.dndDelete == 'true' && event.target.hasAttribute('data-direct-upload-id')) {\n event.preventDefault();\n document.querySelectorAll('[data-direct-upload-id=\"' + event.target.dataset.directUploadId + '\"]').forEach(element => {\n element.remove();\n });\n for (var i = 0; i < _upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__[\"uploaders\"].length; i++) {\n if (_upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__[\"uploaders\"][i].upload.id == event.target.dataset.directUploadId) {\n _upload_queue_processor__WEBPACK_IMPORTED_MODULE_0__[\"uploaders\"].splice(i, 1);\n break;\n }\n }\n }\n });\n addEventListener(\"turbolinks:load\", addAttachedFileIcons);\n addEventListener(\"load\", addAttachedFileIcons);\n}\n\n//# sourceURL=webpack://ActiveStorage/./app/javascript/active_storage_drag_and_drop/ujs.js?");
|
144
144
|
|
145
145
|
/***/ }),
|
146
146
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* direct_uploads.css */
|
2
|
-
|
2
|
+
|
3
3
|
.direct-upload {
|
4
4
|
display: inline-block;
|
5
5
|
position: relative;
|
@@ -10,11 +10,11 @@
|
|
10
10
|
font-size: 11px;
|
11
11
|
line-height: 13px;
|
12
12
|
}
|
13
|
-
|
13
|
+
|
14
14
|
.direct-upload--pending {
|
15
15
|
opacity: 0.6;
|
16
16
|
}
|
17
|
-
|
17
|
+
|
18
18
|
.direct-upload__progress {
|
19
19
|
position: absolute;
|
20
20
|
top: 0;
|
@@ -25,18 +25,19 @@
|
|
25
25
|
transition: width 120ms ease-out, opacity 60ms 60ms ease-in;
|
26
26
|
transform: translate3d(0, 0, 0);
|
27
27
|
}
|
28
|
-
|
28
|
+
|
29
29
|
.direct-upload--complete .direct-upload__progress {
|
30
30
|
opacity: 0.4;
|
31
31
|
}
|
32
|
-
|
32
|
+
|
33
33
|
.direct-upload--error {
|
34
34
|
border-color: red;
|
35
35
|
}
|
36
|
+
|
36
37
|
.direct-upload__remove {
|
37
38
|
font-size: 0.5em;
|
38
39
|
}
|
39
|
-
|
40
|
+
|
40
41
|
input[type=file][data-direct-upload-url][disabled] {
|
41
42
|
display: none;
|
42
43
|
}
|
@@ -17,12 +17,9 @@ export class DragAndDropUploadController {
|
|
17
17
|
this.upload.create((error, blob) => {
|
18
18
|
if (error) {
|
19
19
|
// Handle the error
|
20
|
-
console.log("Upload Error:");
|
21
|
-
console.log(error);
|
22
20
|
this.dispatchError(error)
|
23
21
|
callback(error)
|
24
22
|
} else {
|
25
|
-
console.log("Upload SUCCESS!!");
|
26
23
|
// // Add an appropriately-named hidden input to the form with a
|
27
24
|
// // value of blob.signed_id so that the blob ids will be
|
28
25
|
// // transmitted in the normal upload flow
|
@@ -24,54 +24,58 @@ var fileUploadUIPainter = function(iconContainer, id, filename, complete) {
|
|
24
24
|
`)
|
25
25
|
}
|
26
26
|
|
27
|
-
addEventListener("dnd-uploads:start", event => {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
console.log("dnd-uploads:end")
|
32
|
-
})
|
27
|
+
// addEventListener("dnd-uploads:start", event => {
|
28
|
+
// })
|
29
|
+
// addEventListener("dnd-uploads:end", event => {
|
30
|
+
// })
|
33
31
|
|
34
32
|
addEventListener("dnd-upload:initialize", event => {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
if (!event.defaultPrevented) {
|
34
|
+
const { target, detail } = event
|
35
|
+
const { id, file, iconContainer } = detail
|
36
|
+
fileUploadUIPainter(iconContainer, id, file.name, false)
|
37
|
+
}
|
39
38
|
})
|
40
39
|
|
41
40
|
addEventListener("dnd-upload:placeholder", event => {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
if (!event.defaultPrevented) {
|
42
|
+
const { target, detail } = event
|
43
|
+
const { id, fileName, iconContainer } = detail
|
44
|
+
fileUploadUIPainter(iconContainer, id, fileName, true)
|
45
|
+
}
|
46
46
|
})
|
47
47
|
|
48
48
|
addEventListener("dnd-upload:start", event => {
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
if (!event.defaultPrevented) {
|
50
|
+
const { id } = event.detail
|
51
|
+
const element = document.getElementById(`direct-upload-${id}`)
|
52
|
+
element.classList.remove("direct-upload--pending")
|
53
|
+
}
|
53
54
|
})
|
54
55
|
|
55
56
|
addEventListener("dnd-upload:progress", event => {
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
if (!event.defaultPrevented) {
|
58
|
+
const { id, progress } = event.detail
|
59
|
+
const progressElement = document.getElementById(`direct-upload-progress-${id}`)
|
60
|
+
progressElement.style.width = `${progress}%`
|
61
|
+
}
|
60
62
|
})
|
61
63
|
|
62
64
|
addEventListener("dnd-upload:error", event => {
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
if (!event.defaultPrevented) {
|
66
|
+
event.preventDefault()
|
67
|
+
const { id, error } = event.detail
|
68
|
+
const element = document.getElementById(`direct-upload-${id}`)
|
69
|
+
element.classList.add("direct-upload--error")
|
70
|
+
element.setAttribute("title", error)
|
71
|
+
}
|
69
72
|
})
|
70
73
|
|
71
74
|
addEventListener("dnd-upload:end", event => {
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
75
|
+
if (!event.defaultPrevented) {
|
76
|
+
const { id } = event.detail
|
77
|
+
const element = document.getElementById(`direct-upload-${id}`)
|
78
|
+
element.classList.remove("direct-upload--pending")
|
79
|
+
element.classList.add("direct-upload--complete")
|
80
|
+
}
|
77
81
|
})
|
@@ -45,9 +45,7 @@ function handleFormSubmissionEvent(event) {
|
|
45
45
|
}
|
46
46
|
|
47
47
|
function addAttachedFileIcons() {
|
48
|
-
console.log('checking for already attached files')
|
49
48
|
document.querySelectorAll("input[type='hidden'][data-direct-upload-id][data-uploaded-file-name]").forEach( uploadedFile => {
|
50
|
-
console.log('addAttachedFileIcon!')
|
51
49
|
const dataset = uploadedFile.dataset
|
52
50
|
let iconContainer = document.getElementById(dataset.iconContainerId);
|
53
51
|
let detail = {
|
@@ -67,26 +65,21 @@ export function start() {
|
|
67
65
|
|
68
66
|
// input[type=file][data-dnd=true]
|
69
67
|
document.addEventListener("change", event => {
|
70
|
-
console.log('document:change')
|
71
68
|
if(event.target.type == 'file' && event.target.dataset.dnd == 'true') {
|
72
69
|
const input = event.target;
|
73
|
-
console.log("input[type=file][data-dnd=true]:change")
|
74
70
|
Array.from(input.files).forEach(file => createUploader(input, file))
|
75
71
|
input.value = null
|
76
72
|
}
|
77
73
|
})
|
78
74
|
document.addEventListener("dragover", event => {
|
79
|
-
console.log('document:dragover');
|
80
75
|
if(helpers.hasClassnameInHeirarchy(event.target, 'asdndzone')) {
|
81
76
|
event.preventDefault();
|
82
77
|
}
|
83
78
|
})
|
84
79
|
document.addEventListener("drop", event => {
|
85
|
-
console.log('document:drop');
|
86
80
|
let asdndz = helpers.getClassnameFromHeirarchy(event.target, 'asdndzone')
|
87
81
|
if(asdndz) {
|
88
82
|
event.preventDefault()
|
89
|
-
console.log(".asdndzone:drop")
|
90
83
|
// get the input associated with this dndz
|
91
84
|
const input = document.getElementById(asdndz.dataset.dndInputId)
|
92
85
|
Array.from(event.dataTransfer.files).forEach(file => createUploader(input, file))
|
@@ -95,7 +88,6 @@ export function start() {
|
|
95
88
|
document.addEventListener("click", event => {
|
96
89
|
if( event.target.dataset.dndDelete == 'true' && event.target.hasAttribute('data-direct-upload-id') ) {
|
97
90
|
event.preventDefault();
|
98
|
-
console.log("[data-dnd-delete=true][data-direct-upload-id]:click")
|
99
91
|
document.querySelectorAll('[data-direct-upload-id="'+event.target.dataset.directUploadId+'"]').forEach(element => {
|
100
92
|
element.remove()
|
101
93
|
})
|
@@ -2,22 +2,57 @@ module ActiveStorageDragAndDrop
|
|
2
2
|
module Rails
|
3
3
|
module FormBuilder
|
4
4
|
include ActionView::Helpers::TagHelper
|
5
|
+
include Haml::Helpers if defined? Haml
|
5
6
|
|
6
|
-
def drag_and_drop_file_field(method,
|
7
|
-
|
8
|
-
|
7
|
+
def drag_and_drop_file_field(method, content_or_options = nil, options = {}, &block)
|
8
|
+
if block_given?
|
9
|
+
options = content_or_options if content_or_options.is_a? Hash
|
10
|
+
drag_and_drop_file_field_string(method, capture(&block), options)
|
11
|
+
else
|
12
|
+
drag_and_drop_file_field_string(method, content_or_options, options)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def capture_haml(*args, &block)
|
19
|
+
with_haml_buffer(load_buffer(block)) do
|
20
|
+
position = haml_buffer.buffer.length
|
21
|
+
|
22
|
+
haml_buffer.capture_position = position
|
23
|
+
value = yield(*args)
|
24
|
+
captured = haml_buffer.buffer.slice!(position..-1)
|
25
|
+
capture_value(captured, value)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def capture_value(captured, value)
|
30
|
+
if (captured == '') && (value != haml_buffer.buffer)
|
31
|
+
captured = (value.is_a?(String) ? value : nil)
|
32
|
+
end
|
33
|
+
captured.html_safe
|
34
|
+
end
|
35
|
+
|
36
|
+
def load_buffer(block)
|
37
|
+
buffer = eval <<-RUBY, block.binding, __FILE__, __LINE__ + 1
|
38
|
+
(defined? _hamlout) ? _hamlout : nil
|
39
|
+
RUBY
|
40
|
+
buffer || haml_buffer
|
41
|
+
end
|
42
|
+
|
43
|
+
def drag_and_drop_file_field_string(method, content = nil, options = {})
|
44
|
+
content ||= tag.strong('Drag and drop') + ' files here or ' +
|
45
|
+
tag.strong('click to browse')
|
9
46
|
@template.render partial: 'active_storage_drag_and_drop',
|
10
47
|
locals: {
|
11
|
-
tag_value:
|
48
|
+
tag_value: content,
|
12
49
|
form: self,
|
13
50
|
attachments: @object.send(method),
|
14
51
|
method: method,
|
15
|
-
options: file_field_options(
|
52
|
+
options: file_field_options(method, options)
|
16
53
|
}
|
17
54
|
end
|
18
55
|
|
19
|
-
private
|
20
|
-
|
21
56
|
def default_file_field_options(method)
|
22
57
|
{
|
23
58
|
multiple: true,
|
@@ -31,7 +66,7 @@ module ActiveStorageDragAndDrop
|
|
31
66
|
}
|
32
67
|
end
|
33
68
|
|
34
|
-
def file_field_options(
|
69
|
+
def file_field_options(method, custom_options)
|
35
70
|
default_file_field_options(method).merge(custom_options) do |_key, default, custom|
|
36
71
|
default.is_a?(Hash) && custom.is_a?(Hash) ? default.merge(custom) : custom
|
37
72
|
end
|
data/yarn.lock
CHANGED
@@ -139,12 +139,13 @@
|
|
139
139
|
long "^3.2.0"
|
140
140
|
|
141
141
|
"@webpack-contrib/config-loader@^1.0.0":
|
142
|
-
version "1.1
|
143
|
-
resolved "https://registry.yarnpkg.com/@webpack-contrib/config-loader/-/config-loader-1.1.
|
142
|
+
version "1.2.1"
|
143
|
+
resolved "https://registry.yarnpkg.com/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz#5b3dd474e207437939d294d200c68b7b00008e04"
|
144
144
|
dependencies:
|
145
145
|
"@webpack-contrib/schema-utils" "^1.0.0-beta.0"
|
146
146
|
chalk "^2.1.0"
|
147
147
|
cosmiconfig "^5.0.2"
|
148
|
+
is-plain-obj "^1.1.0"
|
148
149
|
loud-rejection "^1.6.0"
|
149
150
|
merge-options "^1.0.1"
|
150
151
|
minimist "^1.2.0"
|
@@ -187,13 +188,13 @@ ajv-keywords@^3.1.0:
|
|
187
188
|
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
|
188
189
|
|
189
190
|
ajv@^6.1.0:
|
190
|
-
version "6.5.
|
191
|
-
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.
|
191
|
+
version "6.5.5"
|
192
|
+
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1"
|
192
193
|
dependencies:
|
193
194
|
fast-deep-equal "^2.0.1"
|
194
195
|
fast-json-stable-stringify "^2.0.0"
|
195
196
|
json-schema-traverse "^0.4.1"
|
196
|
-
uri-js "^4.2.
|
197
|
+
uri-js "^4.2.2"
|
197
198
|
|
198
199
|
ansi-align@^2.0.0:
|
199
200
|
version "2.0.0"
|
@@ -948,6 +949,22 @@ cache-base@^1.0.1:
|
|
948
949
|
union-value "^1.0.0"
|
949
950
|
unset-value "^1.0.0"
|
950
951
|
|
952
|
+
caller-callsite@^2.0.0:
|
953
|
+
version "2.0.0"
|
954
|
+
resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
|
955
|
+
dependencies:
|
956
|
+
callsites "^2.0.0"
|
957
|
+
|
958
|
+
caller-path@^2.0.0:
|
959
|
+
version "2.0.0"
|
960
|
+
resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
|
961
|
+
dependencies:
|
962
|
+
caller-callsite "^2.0.0"
|
963
|
+
|
964
|
+
callsites@^2.0.0:
|
965
|
+
version "2.0.0"
|
966
|
+
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
|
967
|
+
|
951
968
|
camelcase-keys@^4.0.0:
|
952
969
|
version "4.2.0"
|
953
970
|
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
|
@@ -969,8 +986,8 @@ caniuse-lite@^1.0.30000844:
|
|
969
986
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000858.tgz#f6f203a9128bac507136de1cf6cfd966d2df027c"
|
970
987
|
|
971
988
|
capture-stack-trace@^1.0.0:
|
972
|
-
version "1.0.
|
973
|
-
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.
|
989
|
+
version "1.0.1"
|
990
|
+
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
|
974
991
|
|
975
992
|
chalk@^1.1.3:
|
976
993
|
version "1.1.3"
|
@@ -1019,9 +1036,9 @@ chrome-trace-event@^1.0.0:
|
|
1019
1036
|
dependencies:
|
1020
1037
|
tslib "^1.9.0"
|
1021
1038
|
|
1022
|
-
ci-info@^1.
|
1023
|
-
version "1.
|
1024
|
-
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.
|
1039
|
+
ci-info@^1.5.0:
|
1040
|
+
version "1.6.0"
|
1041
|
+
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
|
1025
1042
|
|
1026
1043
|
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
|
1027
1044
|
version "1.0.4"
|
@@ -1069,14 +1086,14 @@ collection-visit@^1.0.0:
|
|
1069
1086
|
object-visit "^1.0.0"
|
1070
1087
|
|
1071
1088
|
color-convert@^1.9.0:
|
1072
|
-
version "1.9.
|
1073
|
-
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.
|
1089
|
+
version "1.9.3"
|
1090
|
+
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
1074
1091
|
dependencies:
|
1075
|
-
color-name "1.1.
|
1092
|
+
color-name "1.1.3"
|
1076
1093
|
|
1077
|
-
color-name@1.1.
|
1078
|
-
version "1.1.
|
1079
|
-
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.
|
1094
|
+
color-name@1.1.3:
|
1095
|
+
version "1.1.3"
|
1096
|
+
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
1080
1097
|
|
1081
1098
|
commander@~2.13.0:
|
1082
1099
|
version "2.13.0"
|
@@ -1156,9 +1173,10 @@ core-util-is@~1.0.0:
|
|
1156
1173
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
1157
1174
|
|
1158
1175
|
cosmiconfig@^5.0.2:
|
1159
|
-
version "5.0.
|
1160
|
-
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.
|
1176
|
+
version "5.0.7"
|
1177
|
+
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04"
|
1161
1178
|
dependencies:
|
1179
|
+
import-fresh "^2.0.0"
|
1162
1180
|
is-directory "^0.3.1"
|
1163
1181
|
js-yaml "^3.9.0"
|
1164
1182
|
parse-json "^4.0.0"
|
@@ -1237,7 +1255,7 @@ cyclist@~0.2.2:
|
|
1237
1255
|
|
1238
1256
|
d@1:
|
1239
1257
|
version "1.0.0"
|
1240
|
-
resolved "
|
1258
|
+
resolved "http://registry.npmjs.org/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
|
1241
1259
|
dependencies:
|
1242
1260
|
es5-ext "^0.10.9"
|
1243
1261
|
|
@@ -1252,10 +1270,10 @@ debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
|
|
1252
1270
|
ms "2.0.0"
|
1253
1271
|
|
1254
1272
|
debug@^3.1.0:
|
1255
|
-
version "3.
|
1256
|
-
resolved "https://registry.yarnpkg.com/debug/-/debug-3.
|
1273
|
+
version "3.2.6"
|
1274
|
+
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
1257
1275
|
dependencies:
|
1258
|
-
ms "2.
|
1276
|
+
ms "^2.1.1"
|
1259
1277
|
|
1260
1278
|
decamelize-keys@^1.0.0:
|
1261
1279
|
version "1.1.0"
|
@@ -1289,11 +1307,10 @@ defaults@^1.0.3:
|
|
1289
1307
|
clone "^1.0.2"
|
1290
1308
|
|
1291
1309
|
define-properties@^1.1.2:
|
1292
|
-
version "1.1.
|
1293
|
-
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.
|
1310
|
+
version "1.1.3"
|
1311
|
+
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
1294
1312
|
dependencies:
|
1295
|
-
|
1296
|
-
object-keys "^1.0.8"
|
1313
|
+
object-keys "^1.0.12"
|
1297
1314
|
|
1298
1315
|
define-property@^0.2.5:
|
1299
1316
|
version "0.2.5"
|
@@ -1393,8 +1410,8 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
|
1393
1410
|
once "^1.4.0"
|
1394
1411
|
|
1395
1412
|
enhanced-resolve@^4.0.0:
|
1396
|
-
version "4.
|
1397
|
-
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.
|
1413
|
+
version "4.1.0"
|
1414
|
+
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
|
1398
1415
|
dependencies:
|
1399
1416
|
graceful-fs "^4.1.2"
|
1400
1417
|
memory-fs "^0.4.0"
|
@@ -1423,16 +1440,16 @@ es-abstract@^1.6.1:
|
|
1423
1440
|
is-regex "^1.0.4"
|
1424
1441
|
|
1425
1442
|
es-to-primitive@^1.1.1:
|
1426
|
-
version "1.
|
1427
|
-
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.
|
1443
|
+
version "1.2.0"
|
1444
|
+
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
|
1428
1445
|
dependencies:
|
1429
|
-
is-callable "^1.1.
|
1446
|
+
is-callable "^1.1.4"
|
1430
1447
|
is-date-object "^1.0.1"
|
1431
|
-
is-symbol "^1.0.
|
1448
|
+
is-symbol "^1.0.2"
|
1432
1449
|
|
1433
1450
|
es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
|
1434
|
-
version "0.10.
|
1435
|
-
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.
|
1451
|
+
version "0.10.46"
|
1452
|
+
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572"
|
1436
1453
|
dependencies:
|
1437
1454
|
es6-iterator "~2.0.3"
|
1438
1455
|
es6-symbol "~3.1.1"
|
@@ -1465,8 +1482,8 @@ eslint-scope@^3.7.1:
|
|
1465
1482
|
estraverse "^4.1.1"
|
1466
1483
|
|
1467
1484
|
esprima@^4.0.0:
|
1468
|
-
version "4.0.
|
1469
|
-
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.
|
1485
|
+
version "4.0.1"
|
1486
|
+
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
1470
1487
|
|
1471
1488
|
esrecurse@^4.1.0:
|
1472
1489
|
version "4.2.1"
|
@@ -1585,10 +1602,6 @@ for-in@^1.0.2:
|
|
1585
1602
|
version "1.0.2"
|
1586
1603
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
1587
1604
|
|
1588
|
-
foreach@^2.0.5:
|
1589
|
-
version "2.0.5"
|
1590
|
-
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
|
1591
|
-
|
1592
1605
|
fragment-cache@^0.2.1:
|
1593
1606
|
version "0.2.1"
|
1594
1607
|
resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
|
@@ -1647,7 +1660,7 @@ gauge@~2.7.3:
|
|
1647
1660
|
|
1648
1661
|
get-stream@^3.0.0:
|
1649
1662
|
version "3.0.0"
|
1650
|
-
resolved "
|
1663
|
+
resolved "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
1651
1664
|
|
1652
1665
|
get-value@^2.0.3, get-value@^2.0.6:
|
1653
1666
|
version "2.0.6"
|
@@ -1683,7 +1696,7 @@ globals@^9.18.0:
|
|
1683
1696
|
|
1684
1697
|
got@^6.7.1:
|
1685
1698
|
version "6.7.1"
|
1686
|
-
resolved "
|
1699
|
+
resolved "http://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
|
1687
1700
|
dependencies:
|
1688
1701
|
create-error-class "^3.0.0"
|
1689
1702
|
duplexer3 "^0.1.4"
|
@@ -1698,8 +1711,8 @@ got@^6.7.1:
|
|
1698
1711
|
url-parse-lax "^1.0.0"
|
1699
1712
|
|
1700
1713
|
graceful-fs@^4.1.11, graceful-fs@^4.1.2:
|
1701
|
-
version "4.1.
|
1702
|
-
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.
|
1714
|
+
version "4.1.15"
|
1715
|
+
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
1703
1716
|
|
1704
1717
|
has-ansi@^2.0.0:
|
1705
1718
|
version "2.0.0"
|
@@ -1782,8 +1795,8 @@ home-or-tmp@^2.0.0:
|
|
1782
1795
|
os-tmpdir "^1.0.1"
|
1783
1796
|
|
1784
1797
|
hosted-git-info@^2.1.4:
|
1785
|
-
version "2.
|
1786
|
-
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.
|
1798
|
+
version "2.7.1"
|
1799
|
+
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
|
1787
1800
|
|
1788
1801
|
https-browserify@^1.0.0:
|
1789
1802
|
version "1.0.0"
|
@@ -1809,6 +1822,13 @@ ignore-walk@^3.0.1:
|
|
1809
1822
|
dependencies:
|
1810
1823
|
minimatch "^3.0.4"
|
1811
1824
|
|
1825
|
+
import-fresh@^2.0.0:
|
1826
|
+
version "2.0.0"
|
1827
|
+
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
|
1828
|
+
dependencies:
|
1829
|
+
caller-path "^2.0.0"
|
1830
|
+
resolve-from "^3.0.0"
|
1831
|
+
|
1812
1832
|
import-lazy@^2.1.0:
|
1813
1833
|
version "2.1.0"
|
1814
1834
|
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
|
@@ -1889,19 +1909,19 @@ is-buffer@^1.1.5:
|
|
1889
1909
|
|
1890
1910
|
is-builtin-module@^1.0.0:
|
1891
1911
|
version "1.0.0"
|
1892
|
-
resolved "
|
1912
|
+
resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
|
1893
1913
|
dependencies:
|
1894
1914
|
builtin-modules "^1.0.0"
|
1895
1915
|
|
1896
|
-
is-callable@^1.1.
|
1897
|
-
version "1.1.
|
1898
|
-
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.
|
1916
|
+
is-callable@^1.1.3, is-callable@^1.1.4:
|
1917
|
+
version "1.1.4"
|
1918
|
+
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
|
1899
1919
|
|
1900
1920
|
is-ci@^1.0.10:
|
1901
|
-
version "1.1
|
1902
|
-
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.
|
1921
|
+
version "1.2.1"
|
1922
|
+
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
|
1903
1923
|
dependencies:
|
1904
|
-
ci-info "^1.
|
1924
|
+
ci-info "^1.5.0"
|
1905
1925
|
|
1906
1926
|
is-data-descriptor@^0.1.4:
|
1907
1927
|
version "0.1.4"
|
@@ -2004,7 +2024,7 @@ is-number@^4.0.0:
|
|
2004
2024
|
|
2005
2025
|
is-obj@^1.0.0:
|
2006
2026
|
version "1.0.1"
|
2007
|
-
resolved "
|
2027
|
+
resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
2008
2028
|
|
2009
2029
|
is-odd@^2.0.0:
|
2010
2030
|
version "2.0.0"
|
@@ -2046,9 +2066,11 @@ is-stream@^1.0.0, is-stream@^1.1.0:
|
|
2046
2066
|
version "1.1.0"
|
2047
2067
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
2048
2068
|
|
2049
|
-
is-symbol@^1.0.
|
2050
|
-
version "1.0.
|
2051
|
-
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.
|
2069
|
+
is-symbol@^1.0.2:
|
2070
|
+
version "1.0.2"
|
2071
|
+
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
|
2072
|
+
dependencies:
|
2073
|
+
has-symbols "^1.0.0"
|
2052
2074
|
|
2053
2075
|
is-windows@^1.0.2:
|
2054
2076
|
version "1.0.2"
|
@@ -2336,7 +2358,7 @@ minimist@0.0.8:
|
|
2336
2358
|
|
2337
2359
|
minimist@^1.2.0:
|
2338
2360
|
version "1.2.0"
|
2339
|
-
resolved "
|
2361
|
+
resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
2340
2362
|
|
2341
2363
|
minipass@^2.2.1, minipass@^2.3.3:
|
2342
2364
|
version "2.3.3"
|
@@ -2394,6 +2416,10 @@ ms@2.0.0:
|
|
2394
2416
|
version "2.0.0"
|
2395
2417
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
2396
2418
|
|
2419
|
+
ms@^2.1.1:
|
2420
|
+
version "2.1.1"
|
2421
|
+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
2422
|
+
|
2397
2423
|
nan@^2.9.2:
|
2398
2424
|
version "2.10.0"
|
2399
2425
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
|
@@ -2429,7 +2455,7 @@ neo-async@^2.5.0:
|
|
2429
2455
|
|
2430
2456
|
next-tick@1:
|
2431
2457
|
version "1.0.0"
|
2432
|
-
resolved "
|
2458
|
+
resolved "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
|
2433
2459
|
|
2434
2460
|
node-libs-browser@^2.0.0:
|
2435
2461
|
version "2.1.0"
|
@@ -2538,7 +2564,7 @@ object-copy@^0.1.0:
|
|
2538
2564
|
define-property "^0.2.5"
|
2539
2565
|
kind-of "^3.0.3"
|
2540
2566
|
|
2541
|
-
object-keys@^1.0.11, object-keys@^1.0.
|
2567
|
+
object-keys@^1.0.11, object-keys@^1.0.12:
|
2542
2568
|
version "1.0.12"
|
2543
2569
|
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
|
2544
2570
|
|
@@ -2585,8 +2611,8 @@ onetime@^2.0.0:
|
|
2585
2611
|
mimic-fn "^1.0.0"
|
2586
2612
|
|
2587
2613
|
opn@^5.3.0:
|
2588
|
-
version "5.
|
2589
|
-
resolved "https://registry.yarnpkg.com/opn/-/opn-5.
|
2614
|
+
version "5.4.0"
|
2615
|
+
resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
|
2590
2616
|
dependencies:
|
2591
2617
|
is-wsl "^1.1.0"
|
2592
2618
|
|
@@ -2707,8 +2733,8 @@ path-key@^2.0.0:
|
|
2707
2733
|
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
2708
2734
|
|
2709
2735
|
path-parse@^1.0.5:
|
2710
|
-
version "1.0.
|
2711
|
-
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.
|
2736
|
+
version "1.0.6"
|
2737
|
+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
2712
2738
|
|
2713
2739
|
path-type@^3.0.0:
|
2714
2740
|
version "3.0.0"
|
@@ -3045,7 +3071,11 @@ semver-diff@^2.0.0:
|
|
3045
3071
|
dependencies:
|
3046
3072
|
semver "^5.0.3"
|
3047
3073
|
|
3048
|
-
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0
|
3074
|
+
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0:
|
3075
|
+
version "5.6.0"
|
3076
|
+
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
3077
|
+
|
3078
|
+
semver@^5.3.0:
|
3049
3079
|
version "5.5.0"
|
3050
3080
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
3051
3081
|
|
@@ -3172,15 +3202,15 @@ spark-md5@^3.0.0:
|
|
3172
3202
|
resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.0.tgz#3722227c54e2faf24b1dc6d933cc144e6f71bfef"
|
3173
3203
|
|
3174
3204
|
spdx-correct@^3.0.0:
|
3175
|
-
version "3.0.
|
3176
|
-
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.
|
3205
|
+
version "3.0.2"
|
3206
|
+
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e"
|
3177
3207
|
dependencies:
|
3178
3208
|
spdx-expression-parse "^3.0.0"
|
3179
3209
|
spdx-license-ids "^3.0.0"
|
3180
3210
|
|
3181
3211
|
spdx-exceptions@^2.1.0:
|
3182
|
-
version "2.
|
3183
|
-
resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.
|
3212
|
+
version "2.2.0"
|
3213
|
+
resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
|
3184
3214
|
|
3185
3215
|
spdx-expression-parse@^3.0.0:
|
3186
3216
|
version "3.0.0"
|
@@ -3190,8 +3220,8 @@ spdx-expression-parse@^3.0.0:
|
|
3190
3220
|
spdx-license-ids "^3.0.0"
|
3191
3221
|
|
3192
3222
|
spdx-license-ids@^3.0.0:
|
3193
|
-
version "3.0.
|
3194
|
-
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.
|
3223
|
+
version "3.0.2"
|
3224
|
+
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2"
|
3195
3225
|
|
3196
3226
|
split-string@^3.0.1, split-string@^3.0.2:
|
3197
3227
|
version "3.1.0"
|
@@ -3283,7 +3313,7 @@ strip-bom@^3.0.0:
|
|
3283
3313
|
|
3284
3314
|
strip-eof@^1.0.0:
|
3285
3315
|
version "1.0.0"
|
3286
|
-
resolved "
|
3316
|
+
resolved "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
3287
3317
|
|
3288
3318
|
strip-indent@^2.0.0:
|
3289
3319
|
version "2.0.0"
|
@@ -3298,14 +3328,14 @@ supports-color@^2.0.0:
|
|
3298
3328
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
3299
3329
|
|
3300
3330
|
supports-color@^5.3.0:
|
3301
|
-
version "5.
|
3302
|
-
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.
|
3331
|
+
version "5.5.0"
|
3332
|
+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
3303
3333
|
dependencies:
|
3304
3334
|
has-flag "^3.0.0"
|
3305
3335
|
|
3306
3336
|
tapable@^1.0.0:
|
3307
|
-
version "1.
|
3308
|
-
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.
|
3337
|
+
version "1.1.0"
|
3338
|
+
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c"
|
3309
3339
|
|
3310
3340
|
tar@^4:
|
3311
3341
|
version "4.4.4"
|
@@ -3477,7 +3507,7 @@ update-notifier@^2.3.0:
|
|
3477
3507
|
semver-diff "^2.0.0"
|
3478
3508
|
xdg-basedir "^3.0.0"
|
3479
3509
|
|
3480
|
-
uri-js@^4.2.
|
3510
|
+
uri-js@^4.2.2:
|
3481
3511
|
version "4.2.2"
|
3482
3512
|
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
3483
3513
|
dependencies:
|
@@ -3523,16 +3553,16 @@ util@^0.10.3:
|
|
3523
3553
|
inherits "2.0.3"
|
3524
3554
|
|
3525
3555
|
uuid@^3.1.0:
|
3526
|
-
version "3.2
|
3527
|
-
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.
|
3556
|
+
version "3.3.2"
|
3557
|
+
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
|
3528
3558
|
|
3529
3559
|
v8-compile-cache@^2.0.0:
|
3530
|
-
version "2.0.
|
3531
|
-
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.
|
3560
|
+
version "2.0.2"
|
3561
|
+
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c"
|
3532
3562
|
|
3533
3563
|
validate-npm-package-license@^3.0.1:
|
3534
|
-
version "3.0.
|
3535
|
-
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.
|
3564
|
+
version "3.0.4"
|
3565
|
+
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
3536
3566
|
dependencies:
|
3537
3567
|
spdx-correct "^3.0.0"
|
3538
3568
|
spdx-expression-parse "^3.0.0"
|
@@ -3648,8 +3678,8 @@ wide-align@^1.1.0:
|
|
3648
3678
|
string-width "^1.0.2 || 2"
|
3649
3679
|
|
3650
3680
|
widest-line@^2.0.0:
|
3651
|
-
version "2.0.
|
3652
|
-
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.
|
3681
|
+
version "2.0.1"
|
3682
|
+
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
|
3653
3683
|
dependencies:
|
3654
3684
|
string-width "^2.1.1"
|
3655
3685
|
|
@@ -3700,7 +3730,7 @@ yallist@^3.0.0, yallist@^3.0.2:
|
|
3700
3730
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
|
3701
3731
|
|
3702
3732
|
yargs-parser@^10.0.0:
|
3703
|
-
version "10.
|
3704
|
-
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.
|
3733
|
+
version "10.1.0"
|
3734
|
+
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
|
3705
3735
|
dependencies:
|
3706
3736
|
camelcase "^4.1.0"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_storage_drag_and_drop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave O'Keeffe
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-11-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|