diff --git a/.gitlab/merge_request_templates/Release.md b/.gitlab/merge_request_templates/Release.md new file mode 100644 index 000000000..d02e14a73 --- /dev/null +++ b/.gitlab/merge_request_templates/Release.md @@ -0,0 +1,8 @@ +### Release checklist +* [ ] Bump version in `package.json` +* [ ] Compile a changelog with the `tools/collect-changelog` script +* [ ] Create an MR with an announcement to pleroma.social +#### post-merge +* [ ] Tag the release on the merge commit +* [ ] Make the tag into a Gitlab Releaseā„¢ +* [ ] Merge `master` into `develop` (in case the fixes are already in develop, use `git merge -s ours --no-commit` and manually merge the changelogs) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2f0e7d17..ded5c6e4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,42 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## 2.9.2 +### Changed +- BREAKING: due to some internal technical changes logging into AdminFE through PleromaFE is no longer possible +- User card/profile got an overhaul +- Profile editing overhaul +- Visually combined subject and content fields in post form +- Moved post form's emoji button into input field +- Minor visual changes and fixes +- Clicking on fav/rt/emoji notifications' contents expands/collapses it +- Reduced time taken processing theme by half +- Splash screen only appears if loading takes more than 2 seconds + +### Added +- Mutes received an update, adding support for regex, muting based on username and expiration time. +- Mutes are now synchronized across sessions +- Support for expiring mutes and blocks (if available) +- Clicking on emoji shows bigger version of it alongside with its shortcode + - Admins also are able to copy it into a local pack +- Added support for Akkoma and IceShrimp.NET backends +- Compatibility with stricter CSP (Akkoma backend) +- Added a way to upload new packs from a URL or ZIP file via the Admin Dashboard +- Unify show/hide content buttons +- Add support for detachable scrollTop button +- Option to left-align user bio +- Cache assets and emojis with service worker +- Indicate currently active V3 theme as a body element class +- Add arithmetic blend ISS function + +### Fixed +- Display counter for status action buttons when they are in the menu +- Fix bookmark button alignment in the extra actions menu +- Instance favicons are no longer stretched +- A lot more scalable UI fixes + - Emoji picker now should work fine when emoji size is increased + ## 2.8.0 ### Changed - BREAKING: static/img/nsfw.2958239.png is now static/img/nsfw.DepQPhG0.png, which may affect people who specify exactly this path as the cover image diff --git a/changelog.d/action-button-extra-counter.add b/changelog.d/action-button-extra-counter.add deleted file mode 100644 index 7d5c77447..000000000 --- a/changelog.d/action-button-extra-counter.add +++ /dev/null @@ -1 +0,0 @@ -Display counter for status action buttons when they are on the menu diff --git a/changelog.d/akkoma-sharkey-net-support.add b/changelog.d/akkoma-sharkey-net-support.add deleted file mode 100644 index 4b4bff7fe..000000000 --- a/changelog.d/akkoma-sharkey-net-support.add +++ /dev/null @@ -1 +0,0 @@ -Added support for Akkoma and IceShrimp.NET backend diff --git a/changelog.d/arithmetic-blend.add b/changelog.d/arithmetic-blend.add deleted file mode 100644 index c579dca28..000000000 --- a/changelog.d/arithmetic-blend.add +++ /dev/null @@ -1,2 +0,0 @@ -Add arithmetic blend ISS function - diff --git a/changelog.d/better-scroll-button.add b/changelog.d/better-scroll-button.add deleted file mode 100644 index b206869d1..000000000 --- a/changelog.d/better-scroll-button.add +++ /dev/null @@ -1 +0,0 @@ -Add support for detachable scrollTop button diff --git a/changelog.d/bookmark-button-align.fix b/changelog.d/bookmark-button-align.fix deleted file mode 100644 index 64bc2c807..000000000 --- a/changelog.d/bookmark-button-align.fix +++ /dev/null @@ -1 +0,0 @@ -Fix bookmark button alignment in the extra actions menu diff --git a/changelog.d/csp.add b/changelog.d/csp.add deleted file mode 100644 index 260337b97..000000000 --- a/changelog.d/csp.add +++ /dev/null @@ -1 +0,0 @@ -Compatibility with stricter CSP (Akkoma backend) diff --git a/changelog.d/filter-fixes.skip b/changelog.d/filter-fixes.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/akkoftermapth.skip b/changelog.d/finalfix-fr.skip similarity index 100% rename from changelog.d/akkoftermapth.skip rename to changelog.d/finalfix-fr.skip diff --git a/changelog.d/akkoma.skip b/changelog.d/finalfix.skip similarity index 100% rename from changelog.d/akkoma.skip rename to changelog.d/finalfix.skip diff --git a/changelog.d/fix-wrap.skip b/changelog.d/fix-wrap.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/linter.skip b/changelog.d/linter.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/migrate-auth-flow-pinia.skip b/changelog.d/migrate-auth-flow-pinia.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/migrate-oauth-tokens-module-to-pinia-store.skip b/changelog.d/migrate-oauth-tokens-module-to-pinia-store.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/mutes-sync.add b/changelog.d/mutes-sync.add deleted file mode 100644 index e8e0e462a..000000000 --- a/changelog.d/mutes-sync.add +++ /dev/null @@ -1 +0,0 @@ -Synchronized mutes, advanced mute control (regexp, expiry, naming) diff --git a/changelog.d/profile-error.fix b/changelog.d/profile-error.fix deleted file mode 100644 index f123db5ae..000000000 --- a/changelog.d/profile-error.fix +++ /dev/null @@ -1 +0,0 @@ -Fix error styling for user profiles diff --git a/changelog.d/small-fixes.skip b/changelog.d/small-fixes.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/sw-cache-assets.add b/changelog.d/sw-cache-assets.add deleted file mode 100644 index 5f7414eee..000000000 --- a/changelog.d/sw-cache-assets.add +++ /dev/null @@ -1 +0,0 @@ -Cache assets and emojis with service worker diff --git a/changelog.d/theme3-body-class.add b/changelog.d/theme3-body-class.add deleted file mode 100644 index f3d36fd70..000000000 --- a/changelog.d/theme3-body-class.add +++ /dev/null @@ -1 +0,0 @@ -Indicate currently active V3 theme as a body element class diff --git a/changelog.d/timed.add b/changelog.d/timed.add deleted file mode 100644 index 66cb50c9f..000000000 --- a/changelog.d/timed.add +++ /dev/null @@ -1 +0,0 @@ -Support for expiring mutes and blocks (if available) diff --git a/changelog.d/unify-show-hide-buttons.add b/changelog.d/unify-show-hide-buttons.add deleted file mode 100644 index 663bc38a5..000000000 --- a/changelog.d/unify-show-hide-buttons.add +++ /dev/null @@ -1 +0,0 @@ -Unify show/hide content buttons diff --git a/changelog.d/user_profile_redesign.change b/changelog.d/user_profile_redesign.change deleted file mode 100644 index 27fc5f890..000000000 --- a/changelog.d/user_profile_redesign.change +++ /dev/null @@ -1 +0,0 @@ -User card/profile got an overhaul diff --git a/changelog.d/zoomlag.skip b/changelog.d/zoomlag.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/index.html b/index.html index fb92252c5..26eeee19b 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ -
+
diff --git a/src/components/dialog_modal/dialog_modal.vue b/src/components/dialog_modal/dialog_modal.vue index 939655f65..2b9c7a5d8 100644 --- a/src/components/dialog_modal/dialog_modal.vue +++ b/src/components/dialog_modal/dialog_modal.vue @@ -45,10 +45,10 @@ inset: 0; justify-content: center; place-items: center center; + overflow: auto; } .dialog-modal.panel { - max-height: 80vh; max-width: 90vw; z-index: 2001; cursor: default; diff --git a/src/components/emoji_input/emoji_input.js b/src/components/emoji_input/emoji_input.js index f3b6dfe9b..f6ba6e245 100644 --- a/src/components/emoji_input/emoji_input.js +++ b/src/components/emoji_input/emoji_input.js @@ -205,12 +205,6 @@ const EmojiInput = { return emoji.displayText } }, - onInputScroll () { - this.$refs.hiddenOverlay.scrollTo({ - top: this.input.scrollTop, - left: this.input.scrollLeft - }) - }, suggestionListId () { return `suggestions-${this.randomSeed}` }, @@ -239,7 +233,6 @@ const EmojiInput = { this.overlayStyle.fontSize = style.fontSize this.overlayStyle.wordWrap = style.wordWrap this.overlayStyle.whiteSpace = style.whiteSpace - this.resize() input.addEventListener('blur', this.onBlur) input.addEventListener('focus', this.onFocus) input.addEventListener('paste', this.onPaste) @@ -302,6 +295,13 @@ const EmojiInput = { } }, methods: { + onInputScroll (e) { + this.$refs.hiddenOverlay.scrollTo({ + top: this.input.scrollTop, + left: this.input.scrollLeft + }) + this.setCaret(e) + }, triggerShowPicker () { this.$nextTick(() => { this.$refs.picker.showPicker() @@ -561,8 +561,6 @@ const EmojiInput = { this.$refs.suggestorPopover.updateStyles() }) }, - resize () { - }, autoCompleteItemLabel (suggestion) { if (suggestion.user) { return suggestion.displayText + ' ' + suggestion.detailText diff --git a/src/components/emoji_input/emoji_input.vue b/src/components/emoji_input/emoji_input.vue index f9788d874..a1cba33bc 100644 --- a/src/components/emoji_input/emoji_input.vue +++ b/src/components/emoji_input/emoji_input.vue @@ -123,7 +123,7 @@ margin: 0.2em 0.25em; font-size: 1.3em; cursor: pointer; - line-height: 24px; + line-height: 1.2em; &:hover i { color: var(--text); @@ -133,7 +133,7 @@ .emoji-picker-panel { position: absolute; z-index: 20; - margin-top: 2px; + margin-top: 0.2em; &.hide { display: none; @@ -152,7 +152,7 @@ } &.with-picker input { - padding-right: 30px; + padding-right: 2em; } .hidden-overlay { @@ -215,8 +215,8 @@ } .detailText { - font-size: 9px; - line-height: 9px; + font-size: 0.6em; + line-height: 0.6em; } } } diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js index 17a317a4d..8e572d1d2 100644 --- a/src/components/emoji_picker/emoji_picker.js +++ b/src/components/emoji_picker/emoji_picker.js @@ -140,13 +140,13 @@ const EmojiPicker = { }, updateEmojiSize () { const css = window.getComputedStyle(this.$refs.popover.$el) - const fontSize = css.getPropertyValue('font-size') || '14px' + const fontSize = css.getPropertyValue('font-size') || '1rem' const emojiSize = css.getPropertyValue('--emojiSize') || '2.2rem' - const fontSizeUnit = fontSize.replace(/[0-9,.]+/, '') + const fontSizeUnit = fontSize.replace(/[0-9,.]+/, '').trim() const fontSizeValue = Number(fontSize.replace(/[^0-9,.]+/, '')) - const emojiSizeUnit = emojiSize.replace(/[0-9,.]+/, '') + const emojiSizeUnit = emojiSize.replace(/[0-9,.]+/, '').trim() const emojiSizeValue = Number(emojiSize.replace(/[^0-9,.]+/, '')) let fontSizeMultiplier diff --git a/src/components/gallery/gallery.vue b/src/components/gallery/gallery.vue index 7209e9144..eb1054df6 100644 --- a/src/components/gallery/gallery.vue +++ b/src/components/gallery/gallery.vue @@ -129,7 +129,7 @@ .gallery-item { margin: 0; - height: 200px; + height: 15em; } } } diff --git a/src/components/image_cropper/image_cropper.js b/src/components/image_cropper/image_cropper.js index 3cb4f6fd1..afca328e8 100644 --- a/src/components/image_cropper/image_cropper.js +++ b/src/components/image_cropper/image_cropper.js @@ -10,46 +10,26 @@ library.add( const ImageCropper = { props: { - trigger: { - type: [String, window.Element], - required: true - }, - submitHandler: { - type: Function, - required: true - }, + // Mime-types to accept, i.e. which filetypes to accept (.gif, .png, etc.) mimes: { type: String, default: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon' }, - saveButtonLabel: { - type: String - }, - saveWithoutCroppingButtonlabel: { - type: String - }, - cancelButtonLabel: { - type: String + // Fixed aspect-ratio for selection box + aspectRatio: { + type: Number } }, data () { return { dataUrl: undefined, - filename: undefined, - submitting: false - } - }, - computed: { - saveText () { - return this.saveButtonLabel || this.$t('image_cropper.save') - }, - saveWithoutCroppingText () { - return this.saveWithoutCroppingButtonlabel || this.$t('image_cropper.save_without_cropping') - }, - cancelText () { - return this.cancelButtonLabel || this.$t('image_cropper.cancel') + filename: undefined } }, + emits: [ + 'submit', // cropping complete or uncropped image returned + 'close', // cropper is closed + ], methods: { destroy () { this.$refs.input.value = '' @@ -57,28 +37,20 @@ const ImageCropper = { this.$emit('close') }, submit (cropping = true) { - this.submitting = true - let cropperPromise if (cropping) { cropperPromise = this.$refs.cropperSelection.$toCanvas() } else { cropperPromise = Promise.resolve() } + cropperPromise.then(canvas => { - this.submitHandler(canvas, this.file) - .then(() => this.destroy()) - .finally(() => { - this.submitting = false - }) + this.$emit('submit', { canvas, file: this.file }) }) }, pickImage () { this.$refs.input.click() }, - getTriggerDOM () { - return typeof this.trigger === 'object' ? this.trigger : document.querySelector(this.trigger) - }, readFile () { const fileInput = this.$refs.input if (fileInput.files != null && fileInput.files[0] != null) { @@ -117,23 +89,11 @@ const ImageCropper = { } }, mounted () { - // listen for click event on trigger - const trigger = this.getTriggerDOM() - if (!trigger) { - this.$emit('error', 'No image make trigger found.', 'user') - } else { - trigger.addEventListener('click', this.pickImage) - } // listen for input file changes const fileInput = this.$refs.input fileInput.addEventListener('change', this.readFile) }, beforeUnmount: function () { - // remove the event listeners - const trigger = this.getTriggerDOM() - if (trigger) { - trigger.removeEventListener('click', this.pickImage) - } const fileInput = this.$refs.input fileInput.removeEventListener('change', this.readFile) } diff --git a/src/components/image_cropper/image_cropper.vue b/src/components/image_cropper/image_cropper.vue index 0122d1216..ee487b09c 100644 --- a/src/components/image_cropper/image_cropper.vue +++ b/src/components/image_cropper/image_cropper.vue @@ -1,13 +1,14 @@