Compare commits
8 commits
478779121d
...
e92ecc612f
Author | SHA1 | Date | |
---|---|---|---|
|
e92ecc612f | ||
|
ca8e3cea8d | ||
|
f944a08f25 | ||
|
d25c2f04c9 | ||
|
9ddf70ce46 | ||
|
3786402963 | ||
|
ee8008ef93 | ||
|
1229bd2f48 |
11 changed files with 57 additions and 39 deletions
|
@ -339,8 +339,6 @@ nav {
|
|||
grid-template-areas: "content";
|
||||
padding: 0;
|
||||
|
||||
--_actionsColumnCount: 3;
|
||||
|
||||
.column {
|
||||
padding-top: 0;
|
||||
margin: var(--navbar-height) 0 0 0;
|
||||
|
|
|
@ -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) {
|
||||
this.updateStyles()
|
||||
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
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
name="content"
|
||||
class="popover-inner"
|
||||
:close="hidePopover"
|
||||
:resize="resizePopover"
|
||||
/>
|
||||
</div>
|
||||
</transition>
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
display: block;
|
||||
align-self: stretch;
|
||||
width: 1px;
|
||||
background-color: var(--icon);
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 1px;
|
||||
height: 1.5em;
|
||||
background-color: var(--icon);
|
||||
&.-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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
v-if="button.dropdown?.()"
|
||||
>
|
||||
<template #trigger>
|
||||
{{ props }}
|
||||
<ActionButton
|
||||
:button="button"
|
||||
:status="status"
|
||||
|
|
|
@ -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)
|
||||
},
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -292,10 +292,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
#sidebar {
|
||||
--_actionsColumnCount: 4;
|
||||
}
|
||||
|
||||
.sidebar .edit-profile-button {
|
||||
display: none;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue