active_storage_drag_and_drop 0.3.2 → 0.3.3
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/.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
|