From 313ddcebcb9524a0496050dc2b0bea4bedab78e0 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 30 Dec 2022 04:57:23 +0000 Subject: [PATCH] Add blurhash support --- package.json | 1 + src/components/attachment/attachment.js | 7 +- src/components/attachment/attachment.vue | 8 +++ src/components/blurhash/Blurhash.vue | 66 ++++++++++++++++++ .../settings_modal/tabs/general_tab.vue | 9 +++ src/i18n/en.json | 1 + src/modules/config.js | 3 +- .../entity_normalizer.service.js | 3 +- static/blurhash-overlay.png | Bin 0 -> 27640 bytes yarn.lock | 5 ++ 10 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 src/components/blurhash/Blurhash.vue create mode 100755 static/blurhash-overlay.png diff --git a/package.json b/package.json index e712cffd..297a9379 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@kazvmoe-infra/pinch-zoom-element": "1.2.0", "@vuelidate/core": "^2.0.0", "@vuelidate/validators": "^2.0.0", + "blurhash": "^2.0.4", "body-scroll-lock": "2.7.1", "chromatism": "3.0.0", "click-outside-vue3": "4.0.1", diff --git a/src/components/attachment/attachment.js b/src/components/attachment/attachment.js index 4dcacc7e..3155abf0 100644 --- a/src/components/attachment/attachment.js +++ b/src/components/attachment/attachment.js @@ -18,6 +18,7 @@ import { faPencilAlt, faAlignRight } from '@fortawesome/free-solid-svg-icons' +import Blurhash from '../blurhash/Blurhash.vue' library.add( faFile, @@ -63,7 +64,8 @@ const Attachment = { components: { Flash, StillImage, - VideoAttachment + VideoAttachment, + Blurhash }, computed: { classNames () { @@ -84,6 +86,9 @@ const Attachment = { useContainFit () { return this.$store.getters.mergedConfig.useContainFit }, + useBlurhash () { + return this.$store.getters.mergedConfig.useBlurhash + }, placeholderName () { if (this.attachment.description === '' || !this.attachment.description) { return this.type.toUpperCase() diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index 947b1bfc..f9c4f1c8 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -64,7 +64,15 @@ :title="attachment.description" @click.prevent.stop="toggleHidden" > + + + + + + + diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index 2fa20742..5d135711 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -407,6 +407,15 @@ {{ $t('settings.preload_images') }} +
  • + + {{ $t('settings.use_blurhash') }} + +
  • { if (masto) { // Not exactly same... output.mimetype = data.pleroma ? data.pleroma.mime_type : data.type - output.meta = data.meta // not present in BE yet + output.meta = data.meta output.id = data.id } else { output.mimetype = data.mimetype // output.meta = ??? missing } + output.blurhash = data.blurhash output.url = data.url output.large_thumb_url = data.preview_url output.description = data.description diff --git a/static/blurhash-overlay.png b/static/blurhash-overlay.png new file mode 100755 index 0000000000000000000000000000000000000000..209a9438ffad2f53209b202de7da5c25153782f2 GIT binary patch literal 27640 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 Z$+kaX?lR29sGW6{;g^js6<>6W_%CA}ZrK0; literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index bbceba0b..10533a18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2494,6 +2494,11 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +blurhash@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-2.0.4.tgz#60642a823b50acaaf3732ddb6c7dfd721bdfef2a" + integrity sha512-r/As72u2FbucLoK5NTegM/GucxJc3d8GvHc4ngo13IO/nt2HU4gONxNLq1XPN6EM/V8Y9URIa7PcSz2RZu553A== + body-parser@1.19.2: version "1.19.2" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz"