From 7ddfe3830a4c51472da1b79dc4912e7737c5be7e Mon Sep 17 00:00:00 2001 From: Nolan Lawson Date: Sat, 15 Dec 2018 02:06:12 -0800 Subject: [PATCH] feat: add drag and drop for media uploads (#809) * feat: add drag and drop for media uploads fixes #65 * tweak colors --- package-lock.json | 10 +++ package.json | 2 + scss/themes/_base.scss | 2 + scss/themes/_dark.scss | 2 + src/routes/_actions/media.js | 3 + .../_components/compose/ComposeBox.html | 35 +++++---- .../_components/compose/ComposeFileDrop.html | 71 +++++++++++++++++++ .../_components/compose/ComposeToolbar.html | 8 ++- src/routes/_static/media.js | 5 ++ src/routes/_utils/asyncModules.js | 4 ++ src/routes/_utils/loadPolyfills.js | 4 +- src/template.html | 4 +- 12 files changed, 130 insertions(+), 20 deletions(-) create mode 100644 src/routes/_components/compose/ComposeFileDrop.html diff --git a/package-lock.json b/package-lock.json index 8970962..fa8ceb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -236,6 +236,11 @@ "@xtuc/long": "4.2.1" } }, + "@webcomponents/custom-elements": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.2.1.tgz", + "integrity": "sha512-flmTp4rVbBkcUIF3eBO3LNoAaYvleTdhPZKzdzr6iztWLLrxCctcK+7MAQeC3/SPjc3JDdC3jYLMRF4R6C3f9g==" + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -4528,6 +4533,11 @@ "remedial": ">= 1.0.7" } }, + "file-drop-element": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/file-drop-element/-/file-drop-element-0.0.9.tgz", + "integrity": "sha512-LfcczsUadIDGh9uyVLF3fjHr1bT/E7NzyD/9m+/ANJTiys8k0IhLkb7ZWdFWNZPlvF8sdTuvnqZWYDPlmqj+rw==" + }, "file-entry-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", diff --git a/package.json b/package.json index e148257..1ca5855 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ }, "dependencies": { "@gamestdio/websocket": "^0.2.8", + "@webcomponents/custom-elements": "^1.2.1", "browserslist": "^4.3.5", "cheerio": "^1.0.0-rc.2", "child-process-promise": "^2.2.1", @@ -56,6 +57,7 @@ "events-light": "^1.0.5", "express": "^4.16.4", "file-api": "^0.10.4", + "file-drop-element": "0.0.9", "font-awesome-svg-png": "^1.2.2", "form-data": "^2.3.3", "glob": "^7.1.3", diff --git a/scss/themes/_base.scss b/scss/themes/_base.scss index 997c75a..e5e5102 100644 --- a/scss/themes/_base.scss +++ b/scss/themes/_base.scss @@ -93,4 +93,6 @@ --compose-autosuggest-outline: #{lighten($focus-outline, 5%)}; --compose-button-halo: #{rgba(255, 255, 255, 0.1)}; + + --file-drop-mask: #{rgba(255, 255, 255, 0.8)}; } diff --git a/scss/themes/_dark.scss b/scss/themes/_dark.scss index b4068d5..ad554cf 100644 --- a/scss/themes/_dark.scss +++ b/scss/themes/_dark.scss @@ -29,4 +29,6 @@ --compose-autosuggest-item-hover: #{lighten($main-bg-color, 10%)}; --compose-autosuggest-item-active: #{lighten($main-bg-color, 15%)}; --compose-autosuggest-outline: #{lighten($border-color, 20%)}; + + --file-drop-mask: #{rgba(30, 30, 30, 0.8)}; } diff --git a/src/routes/_actions/media.js b/src/routes/_actions/media.js index 3f31b48..d9d733f 100644 --- a/src/routes/_actions/media.js +++ b/src/routes/_actions/media.js @@ -9,6 +9,9 @@ export async function doMediaUpload (realm, file) { try { let response = await uploadMedia(currentInstance, accessToken, file) let composeMedia = store.getComposeData(realm, 'media') || [] + if (composeMedia.length === 4) { + throw new Error('Only 4 media max are allowed') + } composeMedia.push({ data: response, file: { name: file.name }, diff --git a/src/routes/_components/compose/ComposeBox.html b/src/routes/_components/compose/ComposeBox.html index 94d861a..9903103 100644 --- a/src/routes/_components/compose/ComposeBox.html +++ b/src/routes/_components/compose/ComposeBox.html @@ -1,20 +1,22 @@ {#if realm === 'home'}

Compose status

{/if} -
- - {#if contentWarningShown} -
- -
- {/if} - - - - - -
+ +
+ + {#if contentWarningShown} +
+ +
+ {/if} + + + + + +
+
{/if} + + diff --git a/src/routes/_components/compose/ComposeToolbar.html b/src/routes/_components/compose/ComposeToolbar.html index e86a18c..0703db2 100644 --- a/src/routes/_components/compose/ComposeToolbar.html +++ b/src/routes/_components/compose/ComposeToolbar.html @@ -29,7 +29,7 @@ on:change="onFileChange(event)" style="display: none;" type="file" - accept=".jpg,.jpeg,.png,.gif,.webm,.mp4,.m4v,image/jpeg,image/png,image/gif,video/webm,video/mp4"> + accept={mediaAccept} >