Compare commits

..

No commits in common. "90bc03d3942790ad399319a008ffbee16fafd14d" and "6baf0ec3392d8e1a740afcc5d99d203de16d9e9e" have entirely different histories.

25 changed files with 503 additions and 811 deletions

View file

@ -1,7 +1,7 @@
# This file is a template, and might need editing before it works on your project.
# Official framework image. Look for the different tagged releases at:
# https://hub.docker.com/r/library/node/tags/
image: node:18
image: node:16
stages:
- check-changelog

View file

@ -18,10 +18,10 @@
"dependencies": {
"@babel/runtime": "7.26.0",
"@chenfengyuan/vue-qrcode": "2.0.0",
"@fortawesome/fontawesome-svg-core": "6.7.2",
"@fortawesome/free-regular-svg-icons": "6.7.2",
"@fortawesome/free-solid-svg-icons": "6.7.2",
"@fortawesome/vue-fontawesome": "3.0.8",
"@fortawesome/fontawesome-svg-core": "6.4.0",
"@fortawesome/free-regular-svg-icons": "6.4.0",
"@fortawesome/free-solid-svg-icons": "6.4.0",
"@fortawesome/vue-fontawesome": "3.0.3",
"@kazvmoe-infra/pinch-zoom-element": "1.2.0",
"@kazvmoe-infra/unicode-emoji-json": "0.4.0",
"@ruffle-rs/ruffle": "0.1.0-nightly.2025.1.13",
@ -74,9 +74,9 @@
"css-minimizer-webpack-plugin": "4.2.2",
"custom-event-polyfill": "1.0.7",
"eslint": "8.57.1",
"eslint-config-standard": "17.1.0",
"eslint-config-standard": "17.0.0",
"eslint-formatter-friendly": "7.0.0",
"eslint-plugin-import": "2.31.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-n": "15.6.1",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.9.0",
@ -96,7 +96,7 @@
"karma-sinon-chai": "2.0.2",
"karma-sourcemap-loader": "0.3.8",
"karma-spec-reporter": "0.0.36",
"karma-webpack": "5.0.1",
"karma-webpack": "5.0.0",
"lodash": "4.17.21",
"mini-css-extract-plugin": "2.7.6",
"mocha": "10.2.0",

View file

@ -18,10 +18,7 @@
<span v-text="user.screen_name_ui" />
</template>
</i18n-t>
<div
v-if="type !== 'domain'"
class="mute-expiry"
>
<div class="mute-expiry" v-if="type !== 'domain'">
<p>
<label>
{{ $t('user_card.mute_duration_prompt') }}
@ -42,7 +39,7 @@
v-for="unit in muteExpiryUnits"
:key="unit"
:value="unit"
>
>
{{ $t(`time.unit.${unit}_short`, ['']) }}
</option>
</Select>

View file

@ -34,10 +34,7 @@
</i>
</p>
<p v-if="draft.status">{{ draft.status }}</p>
<p
v-else
class="faint"
>{{ $t('drafts.empty') }}</p>
<p v-else class="faint">{{ $t('drafts.empty') }}</p>
</span>
<gallery
v-if="draft.files?.length !== 0"

View file

@ -10,8 +10,8 @@
{{ ' ' }}
<Checkbox
v-if="typeof fallback !== 'undefined'"
:id="name + '-o'"
class="font-checkbox"
:id="name + '-o'"
:model-value="present"
@change="$emit('update:modelValue', typeof modelValue === 'undefined' ? fallback : undefined)"
>

View file

@ -80,7 +80,7 @@ const mediaUpload = {
canvas.toBlob((blob) => {
resolve(new File([blob], newFileName, {
type,
type: type,
lastModified: Date.now()
}))
}, type, 0.85)

View file

@ -64,11 +64,11 @@
<button
class="main-button"
@click="toggleTag(tags.FORCE_NSFW)"
>
>
<span
class="input menu-checkbox"
:class="{ 'menu-checkbox-checked': hasTag(tags.FORCE_NSFW) }"
/>
/>
{{ $t('user_card.admin_menu.force_nsfw') }}
</button>
</div>

View file

@ -29,9 +29,9 @@
<button
v-if="apply"
class="btn button-default palette-apply-button"
@click="applyPalette"
:disabled="disabled"
:class="{ disabled }"
@click="applyPalette"
>
{{ $t('settings.style.themes3.palette.apply') }}
</button>

View file

@ -335,8 +335,8 @@
role="menu"
>
<button
v-if="!hideDraft || !disableDraft"
class="menu-item dropdown-item"
v-if="!hideDraft || !disableDraft"
role="menu"
:disabled="!safeToSaveDraft && saveable"
:class="{ disabled: !safeToSaveDraft }"

View file

@ -132,22 +132,16 @@
role="menuitem"
@click="openTab('filtering')"
>
<FAIcon
fixed-width
icon="font"
/>{{ $t('settings.word_filter_and_more') }}
<FAIcon fixed-width icon="font" />{{ $t('settings.word_filter_and_more') }}
</button>
</div>
</div>
</template>
<template #trigger>
<div :class="mobileLayout ? 'main-button' : ''">
<FAIcon
icon="filter"
:fixed-width="nested"
/>
<FAIcon icon="filter" :fixed-width="nested"/>
<template v-if="nested">
{{ $t('timeline.filter_settings') }}
{{$t('timeline.filter_settings')}}
</template>
<FAIcon
v-if="nested"

View file

@ -182,9 +182,9 @@
<template #content="{close}">
<div class="dropdown-menu">
<div
class="menu-item dropdown-item"
v-for="ref in frontend.installedRefs || frontend.refs"
:key="ref"
class="menu-item dropdown-item"
>
<button
class="main-button"

View file

@ -12,9 +12,9 @@
<button
class="button-default theme-preview"
data-theme-key="stock"
@click="resetTheming"
:class="{ toggled: isStyleActive('stock'), disabled: switchInProgress }"
:disabled="switchInProgress"
@click="resetTheming"
>
<!-- eslint-disable vue/no-v-text-v-html-on-component -->
<!-- eslint-disable vue/no-v-html -->
@ -58,8 +58,8 @@
:data-theme-key="style.key"
class="button-default theme-preview"
:class="{ toggled: isThemeActive(style.key), disabled: switchInProgress }"
:disabled="switchInProgress"
@click="style.version === 'v2' ? setTheme(style.key) : setStyle(style.key)"
:disabled="switchInProgress"
>
<!-- eslint-disable vue/no-v-text-v-html-on-component -->
<!-- eslint-disable vue/no-v-html -->
@ -81,9 +81,9 @@
<div class="import-file-container">
<button
class="btn button-default"
@click="importFile"
:class="{ disabled: switchInProgress }"
:disabled="switchInProgress"
@click="importFile"
>
<FAIcon icon="folder-open" />
{{ $t('settings.style.themes3.editor.load_style') }}
@ -157,8 +157,8 @@
class="userPalette"
:compact="true"
:apply="true"
:disabled="switchInProgress"
@applyPalette="data => setPaletteCustom(data)"
:disabled="switchInProgress"
/>
</template>
<template v-else-if="customThemeVersion === 'v2'">

View file

@ -558,6 +558,12 @@
<div class="deleted-text">
{{ $t('status.status_deleted') }}
</div>
<reply-button
v-if="replying"
:replying="replying"
:status="status"
@toggle="toggleReplying"
/>
</div>
</div>
<div

View file

@ -102,9 +102,6 @@ export default {
disabled: this.button.interactive ? !this.button.interactive(this.funcArg) : false
}
]
},
remoteInteractionLink () {
return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })
}
},
methods: {

View file

@ -12,15 +12,15 @@
target="_blank"
:tabindex="0"
:disabled="buttonClass.disabled"
:href="getComponent(button) == 'a' ? button.link?.(funcArg) || remoteInteractionLink : undefined"
:href="getComponent(button) == 'a' ? button.link?.(funcArg) || getRemoteInteractionLink : undefined"
@click="doActionWrap(button, close)"
>
<FALayers>
<FAIcon
class="fa-scale-110"
:icon="button.icon(funcArg)"
:spin="!extra && getComponent(button) == 'button' && button.animated?.() && animationState"
:style="{ '--fa-animation-duration': '750ms' }"
:spin="!extra && button.animated?.() && animationState"
style="--fa-animation-duration: 750ms;"
fixed-width
/>
<template v-if="!buttonClass.disabled && button.toggleable?.(funcArg) && button.active">
@ -67,13 +67,13 @@
<span
v-if="!extra && button.name === 'bookmark'"
class="separator"
/>
>
</span>
<Popover
v-if="button.name === 'bookmark'"
trigger="hover"
:placement="extra ? 'right' : 'top'"
:offset="{ y: 5 }"
:trigger-attrs="{ class: 'extra-button' }"
v-if="button.name === 'bookmark'"
>
<template #trigger>
<FAIcon
@ -84,16 +84,13 @@
/>
</template>
<template #content>
<StatusBookmarkFolderMenu
v-if="button.name === 'bookmark'"
:status="status"
/>
<StatusBookmarkFolderMenu v-if="button.name === 'bookmark'" :status="status" />
</template>
</Popover>
<EmojiPicker
v-if="button.name === 'emoji'"
ref="picker"
v-if="button.name === 'emoji'"
:enable-sticker-picker="false"
:hide-custom-emoji="hideCustomEmoji"
class="emoji-picker-panel"
@ -102,6 +99,6 @@
</div>
</template>
<script src="./action_button.js" />
<script src="./action_button.js"/>
<style lang="scss" src="./action_button.scss" />
<style lang="scss" src="./action_button.scss"/>

View file

@ -1,10 +1,9 @@
<template>
<div>
<Popover
v-if="button.dropdown?.()"
trigger="hover"
:offset="{ y: 5 }"
:placement="$attrs.extra ? 'right' : 'top'"
v-if="button.dropdown?.()"
>
<template #trigger>
<ActionButton
@ -16,8 +15,8 @@
<template #content>
<div
v-if="button.name === 'mute'"
:id="`popup-menu-${randomSeed}`"
class="dropdown-menu"
:id="`popup-menu-${randomSeed}`"
role="menu"
>
<div class="menu-item dropdown-item extra-action -icon">
@ -25,10 +24,7 @@
class="main-button"
@click="toggleUserMute"
>
<FAIcon
icon="user"
fixed-width
/>
<FAIcon icon="user" fixed-width />
<template v-if="userIsMuted">
{{ $t('status.unmute_user') }}
</template>
@ -42,10 +38,7 @@
class="main-button"
@click="toggleUserMute"
>
<FAIcon
icon="folder-tree"
fixed-width
/>
<FAIcon icon="folder-tree" fixed-width />
<template v-if="threadIsMuted">
{{ $t('status.unmute_conversation') }}
</template>
@ -59,10 +52,7 @@
class="main-button"
@click="toggleDomainMute"
>
<FAIcon
icon="globe"
fixed-width
/>
<FAIcon icon="globe" fixed-width />
<template v-if="domainIsMuted">
{{ $t('status.unmute_domain') }}
</template>
@ -82,22 +72,22 @@
/>
<teleport to="#modal">
<mute-confirm
ref="confirmConversation"
type="conversation"
:status="status"
:status="this.status"
ref="confirmConversation"
/>
<mute-confirm
ref="confirmDomain"
type="domain"
:user="user"
:user="this.user"
ref="confirmDomain"
/>
<mute-confirm
ref="confirmUser"
type="user"
:user="user"
:user="this.user"
ref="confirmUser"
/>
</teleport>
</div>
</template>
<script src="./action_button_container.js" />
<script src="./action_button_container.js"/>

View file

@ -129,6 +129,9 @@ const StatusActionButtons = {
'-dropdown': button.dropdown?.(),
'-active': button.active?.(this.funcArg)
}
},
getRemoteInteractionLink () {
return this.$store.getters.remoteInteractionLink({ statusId: this.status.id })
}
}
}

View file

@ -2,17 +2,17 @@
<div class="StatusActionButtons">
<span class="quick-action-buttons">
<span
v-for="button in quickButtons"
:key="button.name"
class="quick-action"
:class="{ '-pin': showPin, '-toggle': button.dropdown?.() }"
v-for="button in quickButtons"
:key="button.name"
>
<ActionButtonContainer
:class="{ '-pin': showPin }"
:button="button"
:status="status"
:extra="false"
:func-arg="funcArg"
:funcArg="funcArg"
:get-class="getClass"
:get-component="getComponent"
:close="() => {}"
@ -55,10 +55,7 @@
class="dropdown-menu extra-action-buttons"
role="menu"
>
<div
v-if="currentUser"
class="menu-item dropdown-item extra-action -icon"
>
<div class="menu-item dropdown-item extra-action -icon">
<button
class="main-button"
role="menuitem"
@ -83,7 +80,7 @@
:button="button"
:status="status"
:extra="true"
:func-arg="funcArg"
:funcArg="funcArg"
:get-class="getClass"
:get-component="getComponent"
:close="close"

View file

@ -76,8 +76,8 @@
</div>
</template>
<QuickFilterSettings
v-if="!mobileLayout"
class="rightside-button"
v-if="!mobileLayout"
/>
<QuickViewSettings
class="rightside-button"

View file

@ -312,9 +312,9 @@
</div>
<teleport to="#modal">
<mute-confirm
ref="confirmation"
type="user"
:user="user"
:user="this.user"
ref="confirmation"
/>
</teleport>
</div>

View file

@ -1,3 +1,4 @@
const VideoAttachment = {
props: ['attachment', 'controls'],
data () {

View file

@ -1,3 +1,4 @@
const DIRECTION_LEFT = [-1, 0]
const DIRECTION_RIGHT = [1, 0]
const DIRECTION_UP = [0, -1]

View file

@ -1,3 +1,4 @@
// promiseInterval - replacement for setInterval for promises, starts counting
// the interval only after a promise is done instead of immediately.
// - promiseCall is a function that returns a promise, it's called the first

View file

@ -1,3 +1,4 @@
export const windowWidth = () =>
window.innerWidth ||
document.documentElement.clientWidth ||

1160
yarn.lock

File diff suppressed because it is too large Load diff