active_storage_drag_and_drop 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml 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