Merge branch 'emoji-fixes' into 'develop'

Emoji fixes

See merge request pleroma/pleroma-fe!1956
This commit is contained in:
HJ 2024-12-28 14:33:02 +00:00
commit 9c10370e19
6 changed files with 83 additions and 40 deletions

View file

@ -0,0 +1 @@
fixed occasional overflows in emoji picker and made header scrollable

View file

@ -135,21 +135,38 @@ const EmojiPicker = {
Popover
},
methods: {
groupScroll (e) {
e.currentTarget.scrollLeft += e.deltaY + e.deltaX
},
updateEmojiSize () {
const css = window.getComputedStyle(this.$refs.popover.$el)
const fontSize = css.getPropertyValue('font-size')
const emojiSize = css.getPropertyValue('--emojiSize')
const fontSizeUnit = fontSize.replace(/[0-9,.]+/, '')
const fontSizeValue = Number(fontSize.replace(/[^0-9,.]+/, ''))
const emojiSizeUnit = emojiSize.replace(/[0-9,.]+/, '')
const emojiSizeValue = Number(emojiSize.replace(/[^0-9,.]+/, ''))
const fontSize = css.getPropertyValue('font-size').replace(/[^0-9,.]+/, '')
let fontSizeMultiplier
if (fontSizeUnit.endsWith('em')) {
fontSizeMultiplier = fontSizeValue
} else {
fontSizeMultiplier = fontSizeValue / 14
}
console.log('Multiplier', fontSizeMultiplier)
console.log('Result', fontSizeMultiplier * 14)
let emojiSizeReal
if (emojiSizeUnit.endsWith('em')) {
emojiSizeReal = emojiSizeValue * fontSize
emojiSizeReal = emojiSizeValue * fontSizeMultiplier * 14
} else {
emojiSizeReal = emojiSizeValue
}
console.log(emojiSizeReal)
const fullEmojiSize = emojiSizeReal + (2 * 0.2 * fontSize)
const fullEmojiSize = emojiSizeReal + (2 * 0.2 * fontSizeMultiplier * 14)
this.emojiSize = fullEmojiSize
},
showPicker () {
@ -304,6 +321,7 @@ const EmojiPicker = {
return this.emojiSize
},
itemPerRow () {
console.log('CALC', this.emojiSize, this.width)
return this.width ? Math.floor(this.width / this.emojiSize) : 6
},
activeGroupView () {

View file

@ -49,6 +49,7 @@
.heading {
display: flex;
flex-direction: column;
padding: 0.7em 0.5em 0;
}
@ -129,7 +130,7 @@
.emoji {
&-search {
padding: 0.3em;
padding-bottom: 0.5em;
flex: 0 0 auto;
input {
@ -166,24 +167,6 @@
}
}
&-group {
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: left;
&-title {
font-size: 0.85em;
width: 100%;
margin: 0;
padding-left: 0.3em;
&.disabled {
display: none;
}
}
}
&-item {
width: var(--emoji-size);
height: var(--emoji-size);
@ -206,9 +189,38 @@
}
.emoji-picker-emoji.-unicode {
font-size: 1.6em;
font-size: calc(var(--emoji-size) * 0.8);
overflow: hidden;
}
}
&-group {
display: grid;
grid-template-columns: repeat(var(--__amount), 1fr);
align-items: center;
justify-items: center;
justify-content: center;
grid-template-rows: repeat(1, auto);
&.first-row {
grid-template-rows: repeat(2, auto);
.emoji-item {
grid-row: 2;
}
}
&-title {
font-size: 0.85em;
grid-column: span var(--__amount);
width: 100%;
margin: 0;
padding-left: 0.3em;
&.disabled {
display: none;
}
}
}
}
}

View file

@ -8,7 +8,19 @@
@close="onPopoverClosed"
>
<template #content>
<div class="heading">
<div
class="heading"
>
<div class="emoji-search">
<input
ref="search"
v-model="keyword"
type="text"
class="input form-control"
:placeholder="$t('emoji.search_emoji')"
@input="$event.target.composing = false"
>
</div>
<!--
Body scroll lock needs to be on every scrollable element on safari iOS.
Here we tell it to enable scrolling for this element.
@ -18,6 +30,7 @@
ref="header"
v-body-scroll-lock="isInModal"
class="emoji-tabs"
@wheel.prevent="groupScroll"
>
<span
v-for="group in filteredEmojiGroups"
@ -72,16 +85,6 @@
class="emoji-content"
:class="{hidden: showingStickers}"
>
<div class="emoji-search">
<input
ref="search"
v-model="keyword"
type="text"
class="input form-control"
:placeholder="$t('emoji.search_emoji')"
@input="$event.target.composing = false"
>
</div>
<!-- Enables scrolling for this element on safari iOS. See comments for header. -->
<DynamicScroller
ref="emoji-groups"
@ -106,6 +109,8 @@
>
<div
class="emoji-group"
:class="{ ['first-row']: group.isFirstRow }"
:style="{ '--__amount': itemPerRow }"
>
<h6
v-if="group.isFirstRow"

View file

@ -1,5 +1,6 @@
import UserAvatar from '../user_avatar/user_avatar.vue'
import UserListPopover from '../user_list_popover/user_list_popover.vue'
import StillImage from 'src/components/still-image/still-image.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faPlus,
@ -19,7 +20,8 @@ const EmojiReactions = {
name: 'EmojiReactions',
components: {
UserAvatar,
UserListPopover
UserListPopover,
StillImage
},
props: ['status'],
data: () => ({

View file

@ -18,12 +18,11 @@
<span
class="reaction-emoji"
>
<img
<StillImage
v-if="reaction.url"
:src="reaction.url"
class="reaction-emoji-content"
width="1em"
>
/>
<span
v-else
class="reaction-emoji reaction-emoji-content"
@ -127,17 +126,23 @@
display: flex;
justify-content: center;
align-items: center;
--_still_image-label-scale: 0.3;
}
.reaction-emoji-content {
max-width: 100%;
max-height: 100%;
width: auto;
height: auto;
width: var(--emoji-size);
height: var(--emoji-size);
line-height: inherit;
overflow: hidden;
font-size: calc(var(--emoji-size) * 0.8);
margin: 0;
img {
object-fit: contain;
}
}
&:focus {