Compare commits

...

8 commits

Author SHA1 Message Date
Henry Jameson
e92ecc612f Merge branch 'customizable-post-actions' into shigusegubu-themes3 2025-01-18 21:45:25 +02:00
Henry Jameson
ca8e3cea8d stop editing pins on popover close 2025-01-18 21:44:56 +02:00
Henry Jameson
f944a08f25 alignment 2025-01-18 21:44:46 +02:00
Henry Jameson
d25c2f04c9 resize popover when toggling editing pinned items 2025-01-18 21:21:09 +02:00
Henry Jameson
9ddf70ce46 fix errors 2025-01-18 20:49:39 +02:00
Henry Jameson
3786402963 better overflow, denser layout 2025-01-18 19:44:12 +02:00
Henry Jameson
ee8008ef93 fix external link not working 2025-01-18 19:31:20 +02:00
Henry Jameson
1229bd2f48 use auto-fill instead of fixed column count 2025-01-18 19:17:11 +02:00
11 changed files with 57 additions and 39 deletions

View file

@ -339,8 +339,6 @@ nav {
grid-template-areas: "content";
padding: 0;
--_actionsColumnCount: 3;
.column {
padding-top: 0;
margin: var(--navbar-height) 0 0 0;

View file

@ -275,6 +275,11 @@ const Popover = {
this.scrollable.removeEventListener('scroll', this.onScroll)
this.scrollable.removeEventListener('resize', this.onResize)
},
resizePopover () {
setTimeout(() => {
this.updateStyles()
}, 1)
},
onMouseenter (e) {
if (this.trigger === 'hover') {
this.lockReEntry = false
@ -323,7 +328,12 @@ const Popover = {
this.updateStyles()
},
onResize (e) {
const content = this.$refs.content
if (!content) return
if (this.oldSize.width !== content.offsetWidth || this.oldSize.height !== content.offsetHeight) {
this.updateStyles()
this.oldSize = { width: content.offsetWidth, height: content.offsetHeight }
}
},
onChildPopoverState (childRef, state) {
if (state) {
@ -337,12 +347,7 @@ const Popover = {
// Monitor changes to content size, update styles only when content sizes have changed,
// that should be the only time we need to move the popover box if we don't care about scroll
// or resize
const content = this.$refs.content
if (!content) return
if (this.oldSize.width !== content.offsetWidth || this.oldSize.height !== content.offsetHeight) {
this.updateStyles()
this.oldSize = { width: content.offsetWidth, height: content.offsetHeight }
}
this.onResize()
},
mounted () {
this.teleport = true

View file

@ -33,6 +33,7 @@
name="content"
class="popover-inner"
:close="hidePopover"
:resize="resizePopover"
/>
</div>
</transition>

View file

@ -112,11 +112,12 @@ export default {
this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })
}
},
doActionWrap (button) {
doActionWrap (button, close) {
if (button.name === 'emoji') {
this.$refs.picker.showPicker()
} else {
this.getComponent(button) === 'button' && this.doAction(button)
close()
}
}
}

View file

@ -3,15 +3,15 @@
.quick-action {
display: grid;
grid-template-columns: max-content;
grid-template-columns: minmax(max-content, 1fr);
grid-gap: 0.25em;
align-items: center;
height: 1.5em;
&.-pin {
margin: calc(-2px - 0.25em);
padding: 0.25em;
border: 2px dashed var(--icon);
border-radius: var(--roundness);
grid-template-columns: 1fr auto;
.action-counter {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.action-button-inner,
@ -21,21 +21,30 @@
}
.separator {
width: 0.5em;
&::before {
content: "";
display: block;
align-self: stretch;
width: 1px;
height: 1.5em;
background-color: var(--icon);
margin-right: 0.5em;
}
&.-pin {
margin: calc(-2px - 0.25em);
padding: 0.25em;
border: 2px dashed var(--icon);
border-radius: var(--roundness);
grid-template-columns: minmax(max-content, 1fr) auto;
.extra-button,
.separator {
display: none;
}
}
.action-button-inner {
display: grid;
grid-gap: 1em;
grid-template-columns: max-content max-content;
grid-template-columns: max-content 1fr;
grid-auto-flow: column;
grid-auto-columns: max-content;
align-items: center;
@ -45,6 +54,7 @@
.action-button {
display: grid;
grid-auto-flow: column;
align-items: center;
padding: 0;
.action-button-inner {

View file

@ -8,11 +8,12 @@
class="action-button-inner"
:class="buttonInnerClass"
role="menuitem"
type="button"
target="_blank"
:tabindex="0"
:disabled="buttonClass.disabled"
:href="getComponent(button) == 'a' ? button.link?.(funcArg) || getRemoteInteractionLink : undefined"
@click.prevent="doActionWrap(button)"
@click="button.name === 'emoji' ? () => {} : close()"
@click="doActionWrap(button, close)"
>
<FALayers>
<FAIcon

View file

@ -6,7 +6,6 @@
v-if="button.dropdown?.()"
>
<template #trigger>
{{ props }}
<ActionButton
:button="button"
:status="status"

View file

@ -105,6 +105,9 @@ const StatusActionButtons = {
.catch(err => this.$emit('onError', err.error.error))
.finally(() => setTimeout(() => { this.animationState[button.name] = false }))
},
onExtraClose () {
this.showPin = false
},
isPinned (button) {
return this.pinnedItems.has(button.name)
},

View file

@ -3,11 +3,17 @@
.StatusActionButtons {
.quick-action-buttons {
display: grid;
grid-template-columns: repeat(var(--_actionsColumnCount, 6), 1fr);
grid-template-columns: repeat(auto-fill, 5em);
grid-auto-flow: row dense;
grid-auto-rows: 1fr;
grid-gap: 1.25em 1em;
margin-top: var(--status-margin);
align-items: baseline;
}
.pin-action-button {
margin: -0.5em;
padding: 0.5em;
}
}
// popover

View file

@ -16,7 +16,7 @@
:get-class="getClass"
:get-component="getComponent"
:animation-state="animationState"
:close="close"
:close="() => {}"
:do-action="doAction"
/>
<button
@ -41,10 +41,8 @@
:tabindex="0"
placement="top"
:offset="{ y: 5 }"
:bound-to="{ x: 'container' }"
remove-padding
@show="onShow"
@close="onClose"
@close="onExtraClose"
>
<template #trigger>
<FAIcon
@ -52,7 +50,7 @@
icon="ellipsis-h"
/>
</template>
<template #content="{close}">
<template #content="{close, resize}">
<div
:id="`popup-menu-${randomSeed}`"
class="dropdown-menu extra-action-buttons"
@ -63,7 +61,7 @@
class="main-button"
role="menuitem"
:tabindex="0"
@click.stop="showPin = !showPin"
@click.stop="() => { resize(); showPin = !showPin }"
>
<FAIcon
class="fa-scale-110"

View file

@ -292,10 +292,6 @@
}
}
#sidebar {
--_actionsColumnCount: 4;
}
.sidebar .edit-profile-button {
display: none;
}