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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a079fe553c09b15a8944c7019a74835357838464fecc48c3d2321c8427c9113
4
- data.tar.gz: 89fdd70988c3bef9cbd506aff7aff780d4399c58efd930f9c7aa7edbe00d15c5
3
+ metadata.gz: 9176141cbd109e3763a7f3806afc9276d2cceeed8c0cb7d14de281a33cdbe4d6
4
+ data.tar.gz: 16cc8d5fa4fe30c4f256ebbf8ff50c6933e8f2aae486f53e4e2ecafa678baead
5
5
  SHA512:
6
- metadata.gz: 39147a94d61ea43f6f19779b89ca6a740a24d28d11facbc2f377615091be1bc871ae88a840ec70c80be5f3173db47bcf2d8c9fe96f04adbecf1262961a7b3ed6
7
- data.tar.gz: 218dfed1043e5d88e1b261d05f5b3a01cc25d241b74f108a30cb00cec45ce8b8db67a43144992fe28b031864a6ac47af0bb3176a5a254a6296cbbf986a61a517
6
+ metadata.gz: e8898eaa76f675d83bc15af8d2576203e1c1f4ef836ddf4863de0e2859937d0dcb6d65792c0b0bfc6a788308fc6f46b3dcf831cd26b5953456ab2b8332458b10
7
+ data.tar.gz: 88ce4e6941c66ff2536b012d8bf93026b46325f6340e7c65b82b7d8408f2060ecd3fda431ec968b6f1de7a454899ae6f09494dfd266826aa974a2aa203145bcc
data/.rubocop.yml CHANGED
@@ -6,6 +6,9 @@ AllCops:
6
6
  Rails:
7
7
  Enabled: true
8
8
 
9
+ Rails/OutputSafety:
10
+ Enabled: false
11
+
9
12
  Style/Documentation:
10
13
  Enabled: false
11
14
 
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.2)
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.0)
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.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.4)
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 console.log(\"Upload Error:\");\n console.log(error);\n this.dispatchError(error);\n callback(error);\n } else {\n console.log(\"Upload SUCCESS!!\");\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?");
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\naddEventListener(\"dnd-uploads:start\", event => {\n console.log(\"dnd-uploads:start\");\n});\naddEventListener(\"dnd-uploads:end\", event => {\n console.log(\"dnd-uploads:end\");\n});\n\naddEventListener(\"dnd-upload:initialize\", event => {\n console.log(\"dnd-upload:initialize\");\n const { target, detail } = event;\n const { id, file, iconContainer } = detail;\n fileUploadUIPainter(iconContainer, id, file.name, false);\n});\n\naddEventListener(\"dnd-upload:placeholder\", event => {\n console.log(\"dnd-upload:placeholder\");\n const { target, detail } = event;\n const { id, fileName, iconContainer } = detail;\n fileUploadUIPainter(iconContainer, id, fileName, true);\n});\n\naddEventListener(\"dnd-upload:start\", event => {\n console.log(\"dnd-upload:start\");\n const { id } = event.detail;\n const element = document.getElementById(`direct-upload-${id}`);\n element.classList.remove(\"direct-upload--pending\");\n});\n\naddEventListener(\"dnd-upload:progress\", event => {\n console.log(\"dnd-upload:progress\");\n const { id, progress } = event.detail;\n const progressElement = document.getElementById(`direct-upload-progress-${id}`);\n progressElement.style.width = `${progress}%`;\n});\n\naddEventListener(\"dnd-upload:error\", event => {\n console.log(\"dnd-upload:error\");\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\naddEventListener(\"dnd-upload:end\", event => {\n console.log(\"dnd-upload:end\");\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//# sourceURL=webpack://ActiveStorage/./app/javascript/active_storage_drag_and_drop/index.js?");
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 console.log('checking for already attached files');\n document.querySelectorAll(\"input[type='hidden'][data-direct-upload-id][data-uploaded-file-name]\").forEach(uploadedFile => {\n console.log('addAttachedFileIcon!');\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 console.log('document:change');\n if (event.target.type == 'file' && event.target.dataset.dnd == 'true') {\n const input = event.target;\n console.log(\"input[type=file][data-dnd=true]:change\");\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 console.log('document:dragover');\n if (_helpers__WEBPACK_IMPORTED_MODULE_1__[\"hasClassnameInHeirarchy\"](event.target, 'asdndzone')) {\n event.preventDefault();\n }\n });\n document.addEventListener(\"drop\", event => {\n console.log('document:drop');\n let asdndz = _helpers__WEBPACK_IMPORTED_MODULE_1__[\"getClassnameFromHeirarchy\"](event.target, 'asdndzone');\n if (asdndz) {\n event.preventDefault();\n console.log(\".asdndzone:drop\");\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 console.log(\"[data-dnd-delete=true][data-direct-upload-id]:click\");\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?");
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
- console.log("dnd-uploads:start")
29
- })
30
- addEventListener("dnd-uploads:end", event => {
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
- console.log("dnd-upload:initialize")
36
- const { target, detail } = event
37
- const { id, file, iconContainer } = detail
38
- fileUploadUIPainter(iconContainer, id, file.name, false)
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
- console.log("dnd-upload:placeholder")
43
- const { target, detail } = event
44
- const { id, fileName, iconContainer } = detail
45
- fileUploadUIPainter(iconContainer, id, fileName, true)
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
- console.log("dnd-upload:start")
50
- const { id } = event.detail
51
- const element = document.getElementById(`direct-upload-${id}`)
52
- element.classList.remove("direct-upload--pending")
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
- console.log("dnd-upload:progress")
57
- const { id, progress } = event.detail
58
- const progressElement = document.getElementById(`direct-upload-progress-${id}`)
59
- progressElement.style.width = `${progress}%`
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
- console.log("dnd-upload:error")
64
- event.preventDefault()
65
- const { id, error } = event.detail
66
- const element = document.getElementById(`direct-upload-${id}`)
67
- element.classList.add("direct-upload--error")
68
- element.setAttribute("title", error)
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
- console.log("dnd-upload:end")
73
- const { id } = event.detail
74
- const element = document.getElementById(`direct-upload-${id}`)
75
- element.classList.remove("direct-upload--pending")
76
- element.classList.add("direct-upload--complete")
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, tag_value = nil, **options)
7
- tag_value ||= tag.strong('Drag and drop') + ' files here or ' +
8
- tag.strong('click to browse')
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: 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(options, method)
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(custom_options, method)
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
@@ -1,3 +1,3 @@
1
1
  module ActiveStorageDragAndDrop
2
- VERSION = '0.3.2'
2
+ VERSION = '0.3.3'
3
3
  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.3"
143
- resolved "https://registry.yarnpkg.com/@webpack-contrib/config-loader/-/config-loader-1.1.3.tgz#6cce904cabfd880203db600207fdbf64f4744fd7"
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.1"
191
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.1.tgz#88ebc1263c7133937d108b80c5572e64e1d9322d"
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.1"
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.0"
973
- resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
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.0.0:
1023
- version "1.1.3"
1024
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2"
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.2"
1073
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147"
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.1"
1092
+ color-name "1.1.3"
1076
1093
 
1077
- color-name@1.1.1:
1078
- version "1.1.1"
1079
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
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.5"
1160
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0"
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 "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
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.1.0"
1256
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
1273
+ version "3.2.6"
1274
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
1257
1275
  dependencies:
1258
- ms "2.0.0"
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.2"
1293
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
1310
+ version "1.1.3"
1311
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
1294
1312
  dependencies:
1295
- foreach "^2.0.5"
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.0.0"
1397
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a"
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.1.1"
1427
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
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.1"
1446
+ is-callable "^1.1.4"
1430
1447
  is-date-object "^1.0.1"
1431
- is-symbol "^1.0.1"
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.45"
1435
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653"
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.0"
1469
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
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 "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
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 "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
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.11"
1702
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
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.6.0"
1786
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
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 "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
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.1, is-callable@^1.1.3:
1897
- version "1.1.3"
1898
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
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.0"
1902
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5"
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.0.0"
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 "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
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.1:
2050
- version "1.0.1"
2051
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
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 "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
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 "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
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.8:
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.3.0"
2589
- resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c"
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.5"
2711
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
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, semver@^5.3.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.0"
3176
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
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.1.0"
3183
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
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.0"
3194
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
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 "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
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.4.0"
3302
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
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.0.0"
3308
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2"
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.1:
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.1"
3527
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
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.0"
3531
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz#526492e35fc616864284700b7043e01baee09f0a"
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.3"
3535
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
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.0"
3652
- resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273"
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.0.0"
3704
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.0.0.tgz#c737c93de2567657750cb1f2c00be639fd19c994"
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.2
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-10-25 00:00:00.000000000 Z
12
+ date: 2018-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler