shigusegubu-vue3
Henry Jameson 1 year ago
parent 0cbfcb99a9
commit fddb531ed2
  1. 20
      src/App.vue
  2. 4
      src/boot/after_store.js
  3. 9
      src/boot/routes.js
  4. 2
      src/components/about/about.vue
  5. 4
      src/components/account_actions/account_actions.vue
  6. 2
      src/components/avatar_list/avatar_list.vue
  7. 11
      src/components/basic_user_card/basic_user_card.vue
  8. 2
      src/components/chat/chat.js
  9. 2
      src/components/chat_list/chat_list.vue
  10. 10
      src/components/chat_message/chat_message.vue
  11. 4
      src/components/chat_title/chat_title.vue
  12. 4
      src/components/checkbox/checkbox.vue
  13. 2
      src/components/color_input/color_input.vue
  14. 2
      src/components/conversation/conversation.js
  15. 2
      src/components/conversation/conversation.vue
  16. 24
      src/components/desktop_nav/desktop_nav.js
  17. 4
      src/components/domain_mute_card/domain_mute_card.vue
  18. 2
      src/components/emoji_input/emoji_input.js
  19. 2
      src/components/emoji_picker/emoji_picker.js
  20. 2
      src/components/emoji_reactions/emoji_reactions.vue
  21. 2
      src/components/extra_buttons/extra_buttons.js
  22. 6
      src/components/extra_buttons/extra_buttons.vue
  23. 2
      src/components/favorite_button/favorite_button.vue
  24. 2
      src/components/features_panel/features_panel.vue
  25. 2
      src/components/flash/flash.js
  26. 2
      src/components/font_control/font_control.vue
  27. 4
      src/components/hashtag_link/hashtag_link.vue
  28. 2
      src/components/image_cropper/image_cropper.js
  29. 2
      src/components/instance_specific_panel/instance_specific_panel.vue
  30. 2
      src/components/interactions/interactions.js
  31. 1
      src/components/interface_language_switcher/interface_language_switcher.vue
  32. 2
      src/components/login_form/login_form.js
  33. 2
      src/components/login_form/login_form.vue
  34. 5
      src/components/media_upload/media_upload.js
  35. 2
      src/components/media_upload/media_upload.vue
  36. 17
      src/components/mention_link/mention_link.vue
  37. 14
      src/components/mentions_line/mentions_line.vue
  38. 2
      src/components/mfa_form/recovery_form.vue
  39. 5
      src/components/mobile_nav/mobile_nav.vue
  40. 8
      src/components/modal/modal.vue
  41. 8
      src/components/moderation_tools/moderation_tools.vue
  42. 6
      src/components/mrf_transparency_panel/mrf_transparency_panel.js
  43. 2
      src/components/nav_panel/nav_panel.vue
  44. 2
      src/components/notification/notification.js
  45. 4
      src/components/notification/notification.vue
  46. 4
      src/components/notifications/notification_filters.vue
  47. 5
      src/components/notifications/notifications.vue
  48. 34
      src/components/popover/popover.js
  49. 16
      src/components/post_status_form/post_status_form.js
  50. 2
      src/components/react_button/react_button.js
  51. 8
      src/components/react_button/react_button.vue
  52. 2
      src/components/remote_follow/remote_follow.js
  53. 2
      src/components/retweet_button/retweet_button.vue
  54. 2
      src/components/search_bar/search_bar.js
  55. 4
      src/components/selectable_list/selectable_list.vue
  56. 4
      src/components/settings_modal/helpers/modified_indicator.vue
  57. 4
      src/components/settings_modal/helpers/server_side_indicator.vue
  58. 4
      src/components/settings_modal/settings_modal.vue
  59. 10
      src/components/settings_modal/tabs/general_tab.vue
  60. 34
      src/components/settings_modal/tabs/mutes_and_blocks_tab.vue
  61. 10
      src/components/settings_modal/tabs/profile_tab.js
  62. 2
      src/components/settings_modal/tabs/profile_tab.vue
  63. 6
      src/components/settings_modal/tabs/security_tab/mfa.js
  64. 2
      src/components/settings_modal/tabs/security_tab/mfa_totp.js
  65. 2
      src/components/settings_modal/tabs/security_tab/security_tab.js
  66. 5
      src/components/settings_modal/tabs/theme_tab/preview.vue
  67. 8
      src/components/settings_modal/tabs/theme_tab/theme_tab.js
  68. 8
      src/components/shadow_control/shadow_control.js
  69. 2
      src/components/shadow_control/shadow_control.vue
  70. 2
      src/components/shout_panel/shout_panel.js
  71. 2
      src/components/side_drawer/side_drawer.js
  72. 2
      src/components/side_drawer/side_drawer.vue
  73. 4
      src/components/staff_panel/staff_panel.js
  74. 2
      src/components/staff_panel/staff_panel.vue
  75. 6
      src/components/status/status.js
  76. 11
      src/components/status/status.vue
  77. 2
      src/components/status_body/status_body.vue
  78. 2
      src/components/status_content/status_content.vue
  79. 8
      src/components/status_popover/status_popover.vue
  80. 4
      src/components/sticker_picker/sticker_picker.js
  81. 2
      src/components/terms_of_service_panel/terms_of_service_panel.vue
  82. 5
      src/components/timeline/timeline.vue
  83. 4
      src/components/timeline/timeline_quick_settings.vue
  84. 6
      src/components/timeline_menu/timeline_menu.js
  85. 6
      src/components/timeline_menu/timeline_menu.vue
  86. 2
      src/components/timeline_menu/timeline_menu_content.vue
  87. 2
      src/components/user_card/user_card.js
  88. 2
      src/components/user_card/user_card.vue
  89. 6
      src/components/user_list_popover/user_list_popover.vue
  90. 42
      src/components/user_popover/user_popover.vue
  91. 15
      src/components/user_profile/user_profile.vue
  92. 2
      src/components/user_reporting_modal/user_reporting_modal.vue
  93. 2
      src/components/who_to_follow/who_to_follow.js
  94. 10
      src/components/who_to_follow_panel/who_to_follow_panel.js
  95. 2
      src/components/who_to_follow_panel/who_to_follow_panel.vue
  96. 2
      src/i18n/messages.js
  97. 4
      src/lib/notification-i18n-loader.js
  98. 12
      src/lib/persisted_state.js
  99. 4
      src/modules/api.js
  100. 2
      src/modules/config.js
  101. Some files were not shown because too many files have changed in this diff Show More

@ -15,8 +15,12 @@
class="app-layout container"
:class="classes"
>
<div class="underlay"/>
<div id="sidebar" class="column -scrollable" :class="{ '-show-scrollbar': showScrollbars }">
<div class="underlay" />
<div
id="sidebar"
class="column -scrollable"
:class="{ '-show-scrollbar': showScrollbars }"
>
<user-panel />
<template v-if="layoutType !== 'mobile'">
<nav-panel />
@ -26,7 +30,11 @@
<div id="notifs-sidebar" />
</template>
</div>
<div id="main-scroller" class="column main" :class="{ '-full-height': isChats }">
<div
id="main-scroller"
class="column main"
:class="{ '-full-height': isChats }"
>
<div
v-if="!currentUser"
class="login-hint panel panel-default"
@ -40,7 +48,11 @@
</div>
<router-view />
</div>
<div id="notifs-column" class="column -scrollable" :class="{ '-show-scrollbar': showScrollbars }"/>
<div
id="notifs-column"
class="column -scrollable"
:class="{ '-show-scrollbar': showScrollbars }"
/>
</div>
<MediaModal />
<shout-panel

@ -156,7 +156,7 @@ const setSettings = async ({ apiConfig, staticConfig, store }) => {
copyInstanceOption('hideSitename')
copyInstanceOption('sidebarRight')
return store.dispatch('setTheme', config['theme'])
return store.dispatch('setTheme', config.theme)
}
const getTOS = async ({ store }) => {
@ -197,7 +197,7 @@ const getStickers = async ({ store }) => {
const stickers = (await Promise.all(
Object.entries(values).map(async ([name, path]) => {
const resPack = await window.fetch(path + 'pack.json')
var meta = {}
let meta = {}
if (resPack.ok) {
meta = await resPack.json()
}

@ -31,7 +31,8 @@ export default (store) => {
}
let routes = [
{ name: 'root',
{
name: 'root',
path: '/',
redirect: _to => {
return (store.state.users.currentUser
@ -45,12 +46,14 @@ export default (store) => {
{ name: 'tag-timeline', path: '/tag/:tag', component: TagTimeline },
{ name: 'bookmarks', path: '/bookmarks', component: BookmarkTimeline },
{ name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },
{ name: 'remote-user-profile-acct',
{
name: 'remote-user-profile-acct',
path: '/remote-users/:_(@)?:username([^/@]+)@:hostname([^/@]+)',
component: RemoteUserResolver,
beforeEnter: validateAuthenticatedRoute
},
{ name: 'remote-user-profile',
{
name: 'remote-user-profile',
path: '/remote-users/:hostname/:username',
component: RemoteUserResolver,
beforeEnter: validateAuthenticatedRoute

@ -8,7 +8,7 @@
</div>
</template>
<script src="./about.js" ></script>
<script src="./about.js"></script>
<style lang="scss">
</style>

@ -6,7 +6,7 @@
:bound-to="{ x: 'container' }"
remove-padding
>
<template v-slot:content>
<template #content>
<div class="dropdown-menu">
<template v-if="relationship.following">
<button
@ -57,7 +57,7 @@
</button>
</div>
</template>
<template v-slot:trigger>
<template #trigger>
<button class="button-unstyled ellipsis-button">
<FAIcon
class="icon"

@ -14,7 +14,7 @@
</div>
</template>
<script src="./avatar_list.js" ></script>
<script src="./avatar_list.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -1,10 +1,13 @@
<template>
<div class="basic-user-card">
<router-link @click.prevent :to="userProfileLink(user)">
<router-link
:to="userProfileLink(user)"
@click.prevent
>
<UserPopover
:userId="user.id"
:overlayCenters="true"
overlayCentersSelector=".avatar"
:user-id="user.id"
:overlay-centers="true"
overlay-centers-selector=".avatar"
>
<UserAvatar
class="user-avatar avatar"

@ -107,7 +107,7 @@ const Chat = {
}
})
},
'$route': function () {
$route: function () {
this.startFetching()
},
mastoUserSocketStatus (newValue) {

@ -23,7 +23,7 @@
class="timeline"
>
<List :items="sortedChatList">
<template v-slot:item="{item}">
<template #item="{item}">
<ChatListItem
:key="item.id"
:compact="false"

@ -16,7 +16,7 @@
>
<UserPopover
v-if="chatViewItem.isHead"
:userId="author.id"
:user-id="author.id"
>
<UserAvatar
:compact="true"
@ -50,7 +50,7 @@
@show="menuOpened = true"
@close="menuOpened = false"
>
<template v-slot:content>
<template #content>
<div class="dropdown-menu">
<button
class="button-default dropdown-item dropdown-item-icon"
@ -60,7 +60,7 @@
</button>
</div>
</template>
<template v-slot:trigger>
<template #trigger>
<button
class="button-default menu-icon"
:title="$t('chats.more')"
@ -75,7 +75,7 @@
:status="messageForStatusContent"
:full-content="true"
>
<template v-slot:footer>
<template #footer>
<span
class="created-at"
>
@ -96,7 +96,7 @@
</div>
</template>
<script src="./chat_message.js" ></script>
<script src="./chat_message.js"></script>
<style lang="scss">
@import './chat_message.scss';

@ -4,9 +4,9 @@
:title="title"
>
<UserPopover
class="avatar-container"
v-if="withAvatar && user"
:userId="user.id"
class="avatar-container"
:user-id="user.id"
>
<UserAvatar
class="titlebar-avatar"

@ -22,12 +22,12 @@
<script>
export default {
emits: ['update:modelValue'],
props: [
'modelValue',
'indeterminate',
'disabled'
]
],
emits: ['update:modelValue']
}
</script>

@ -46,7 +46,6 @@
</div>
</div>
</template>
<style lang="scss" src="./color_input.scss"></style>
<script>
import Checkbox from '../checkbox/checkbox.vue'
import { hex2rgb } from '../../services/color_convert/color_convert.js'
@ -108,6 +107,7 @@ export default {
}
}
</script>
<style lang="scss" src="./color_input.scss"></style>
<style lang="scss">
.color-control {

@ -271,7 +271,7 @@ const conversation = {
result[irid] = result[irid] || []
result[irid].push({
name: `#${i}`,
id: id
id
})
}
i++

@ -31,8 +31,8 @@
keypath="status.show_all_conversation_with_icon"
tag="button"
class="button-unstyled -link"
@click.prevent="diveToTopLevel"
scope="global"
@click.prevent="diveToTopLevel"
>
<template #icon>
<FAIcon

@ -46,23 +46,27 @@ export default {
enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },
logoStyle () {
return {
'visibility': this.enableMask ? 'hidden' : 'visible'
visibility: this.enableMask ? 'hidden' : 'visible'
}
},
logoMaskStyle () {
return this.enableMask ? {
'mask-image': `url(${this.$store.state.instance.logo})`
} : {
'background-color': this.enableMask ? '' : 'transparent'
}
return this.enableMask
? {
'mask-image': `url(${this.$store.state.instance.logo})`
}
: {
'background-color': this.enableMask ? '' : 'transparent'
}
},
logoBgStyle () {
return Object.assign({
'margin': `${this.$store.state.instance.logoMargin} 0`,
margin: `${this.$store.state.instance.logoMargin} 0`,
opacity: this.searchBarHidden ? 1 : 0
}, this.enableMask ? {} : {
'background-color': this.enableMask ? '' : 'transparent'
})
}, this.enableMask
? {}
: {
'background-color': this.enableMask ? '' : 'transparent'
})
},
logo () { return this.$store.state.instance.logo },
sitename () { return this.$store.state.instance.name },

@ -9,7 +9,7 @@
class="btn button-default"
>
{{ $t('domain_mute_card.unmute') }}
<template v-slot:progress>
<template #progress>
{{ $t('domain_mute_card.unmute_progress') }}
</template>
</ProgressButton>
@ -19,7 +19,7 @@
class="btn button-default"
>
{{ $t('domain_mute_card.mute') }}
<template v-slot:progress>
<template #progress>
{{ $t('domain_mute_card.mute_progress') }}
</template>
</ProgressButton>

@ -321,7 +321,7 @@ const EmojiInput = {
}
},
scrollIntoView () {
const rootRef = this.$refs['picker'].$el
const rootRef = this.$refs.picker.$el
/* Scroller is either `window` (replies in TL), sidebar (main post form,
* replies in notifs) or mobile post form. Note that getting and setting
* scroll is different for `Window` and `Element`s

@ -25,7 +25,7 @@ const filterByKeyword = (list, keyword = '') => {
if (keyword === '') return list
const keywordLowercase = keyword.toLowerCase()
let orderedEmojiList = []
const orderedEmojiList = []
for (const emoji of list) {
const indexOfKeyword = emoji.displayText.toLowerCase().indexOf(keywordLowercase)
if (indexOfKeyword > -1) {

@ -26,7 +26,7 @@
</div>
</template>
<script src="./emoji_reactions.js" ></script>
<script src="./emoji_reactions.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -25,7 +25,7 @@ library.add(
)
const ExtraButtons = {
props: [ 'status' ],
props: ['status'],
components: { Popover },
methods: {
deleteStatus () {

@ -7,7 +7,7 @@
:bound-to="{ x: 'container' }"
remove-padding
>
<template v-slot:content="{close}">
<template #content="{close}">
<div class="dropdown-menu">
<button
v-if="canMute && !status.thread_muted"
@ -120,7 +120,7 @@
</button>
</div>
</template>
<template v-slot:trigger>
<template #trigger>
<span class="button-unstyled popover-trigger">
<FAIcon
class="fa-scale-110 fa-old-padding"
@ -131,7 +131,7 @@
</Popover>
</template>
<script src="./extra_buttons.js" ></script>
<script src="./extra_buttons.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -29,7 +29,7 @@
</div>
</template>
<script src="./favorite_button.js" ></script>
<script src="./favorite_button.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -32,7 +32,7 @@
</div>
</template>
<script src="./features_panel.js" ></script>
<script src="./features_panel.js"></script>
<style lang="scss">
.features-panel li {

@ -11,7 +11,7 @@ library.add(
)
const Flash = {
props: [ 'src' ],
props: ['src'],
data () {
return {
player: false, // can be true, "hidden", false. hidden = element exists

@ -47,7 +47,7 @@
</div>
</template>
<script src="./font_control.js" ></script>
<script src="./font_control.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -14,6 +14,6 @@
</span>
</template>
<script src="./hashtag_link.js"/>
<script src="./hashtag_link.js" />
<style lang="scss" src="./hashtag_link.scss"/>
<style lang="scss" src="./hashtag_link.scss" />

@ -95,7 +95,7 @@ const ImageCropper = {
const fileInput = this.$refs.input
if (fileInput.files != null && fileInput.files[0] != null) {
this.file = fileInput.files[0]
let reader = new window.FileReader()
const reader = new window.FileReader()
reader.onload = (e) => {
this.dataUrl = e.target.result
this.$emit('open')

@ -10,4 +10,4 @@
</div>
</template>
<script src="./instance_specific_panel.js" ></script>
<script src="./instance_specific_panel.js"></script>

@ -12,7 +12,7 @@ const Interactions = {
data () {
return {
allowFollowingMove: this.$store.state.users.currentUser.allow_following_move,
filterMode: tabModeDict['mentions']
filterMode: tabModeDict.mentions
}
},
methods: {

@ -25,6 +25,7 @@ import Select from '../select/select.vue'
export default {
components: {
// eslint-disable-next-line vue/no-reserved-component-names
Select
},
props: {

@ -83,7 +83,7 @@ const LoginForm = {
},
clearError () { this.error = false },
focusOnPasswordInput () {
let passwordInput = this.$refs.passwordInput
const passwordInput = this.$refs.passwordInput
passwordInput.focus()
passwordInput.setSelectionRange(0, passwordInput.value.length)
}

@ -90,7 +90,7 @@
</div>
</template>
<script src="./login_form.js" ></script>
<script src="./login_form.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -42,7 +42,8 @@ const mediaUpload = {
.then((fileData) => {
self.$emit('uploaded', fileData)
self.decreaseUploadCount()
}, (error) => { // eslint-disable-line handle-callback-err
}, (error) => {
console.error('Error uploading file', error)
self.$emit('upload-failed', 'default')
self.decreaseUploadCount()
})
@ -73,7 +74,7 @@ const mediaUpload = {
'disabled'
],
watch: {
'dropFiles': function (fileInfos) {
dropFiles: function (fileInfos) {
if (!this.uploading) {
this.multiUpload(fileInfos)
}

@ -26,7 +26,7 @@
</label>
</template>
<script src="./media_upload.js" ></script>
<script src="./media_upload.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -12,7 +12,7 @@
/><!-- eslint-enable vue/no-v-html -->
<UserPopover
v-else
:userId="user.id"
:user-id="user.id"
:disabled="!shouldShowTooltip"
>
<span
@ -54,16 +54,19 @@
:class="{ '-you': shouldBoldenYou }"
> {{ ' ' + $t('status.you') }}</span>
<!-- eslint-enable vue/no-v-html -->
</a><span class="full" ref="full">
<!-- eslint-disable vue/no-v-html -->
@<span v-html="userName" /><span v-html="'@' + serverName" />
<!-- eslint-enable vue/no-v-html -->
</a><span
ref="full"
class="full"
>
<!-- eslint-disable vue/no-v-html -->
@<span v-html="userName" /><span v-html="'@' + serverName" />
<!-- eslint-enable vue/no-v-html -->
</span>
</span>
</UserPopover>
</span>
</template>
<script src="./mention_link.js"/>
<script src="./mention_link.js" />
<style lang="scss" src="./mention_link.scss"/>
<style lang="scss" src="./mention_link.scss" />

@ -14,12 +14,12 @@
v-if="expanded"
class="fullExtraMentions"
>{{ ' ' }}<MentionLink
v-for="mention in extraMentions"
:key="mention.index"
class="mention-link"
:content="mention.content"
:url="mention.url"
/>
v-for="mention in extraMentions"
:key="mention.index"
class="mention-link"
:content="mention.content"
:url="mention.url"
/>
</span><button
v-if="!expanded"
class="button-unstyled showMoreLess"
@ -36,5 +36,5 @@
</span>
</span>
</template>
<script src="./mentions_line.js" ></script>
<script src="./mentions_line.js"></script>
<style lang="scss" src="./mentions_line.scss" />

@ -69,4 +69,4 @@
</div>
</div>
</template>
<script src="./recovery_form.js" ></script>
<script src="./recovery_form.js"></script>

@ -67,11 +67,10 @@
</a>
</div>
<div
class="mobile-notifications"
id="mobile-notifications"
class="mobile-notifications"
@scroll="onScroll"
>
</div>
/>
</div>
<SideDrawer
ref="sideDrawer"

@ -12,6 +12,9 @@
<script>
export default {
provide: {
popoversZLayer: 'modals'
},
props: {
isOpen: {
type: Boolean,
@ -22,14 +25,11 @@ export default {
default: false
}
},
provide: {
popoversZLayer: 'modals'
},
computed: {
classes () {
return {
'modal-background': !this.noBackground,
'open': this.isOpen
open: this.isOpen
}
}
}

@ -8,7 +8,7 @@
@show="setToggled(true)"
@close="setToggled(false)"
>
<template v-slot:content>
<template #content>
<div class="dropdown-menu">
<span v-if="user.is_local">
<button
@ -122,7 +122,7 @@
</span>
</div>
</template>
<template v-slot:trigger>
<template #trigger>
<button
class="btn button-default btn-block moderation-tools-button"
:class="{ toggled }"
@ -137,11 +137,11 @@
v-if="showDeleteUserDialog"
:on-cancel="deleteUserDialog.bind(this, false)"
>
<template v-slot:header>
<template #header>
{{ $t('user_card.admin_menu.delete_user') }}
</template>
<p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>
<template v-slot:footer>
<template #footer>
<button
class="btn button-default"
@click="deleteUserDialog(false)"

@ -9,10 +9,10 @@ import { get } from 'lodash'
*/
const toInstanceReasonObject = (instances, info, key) => {
return instances.map(instance => {
if (info[key] && info[key][instance] && info[key][instance]['reason']) {
return { instance: instance, reason: info[key][instance]['reason'] }
if (info[key] && info[key][instance] && info[key][instance].reason) {
return { instance, reason: info[key][instance].reason }
}
return { instance: instance, reason: '' }
return { instance, reason: '' }
})
}

@ -90,7 +90,7 @@
</div>
</template>
<script src="./nav_panel.js" ></script>
<script src="./nav_panel.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -40,7 +40,7 @@ const Notification = {
unmuted: false
}
},
props: [ 'notification' ],
props: ['notification'],
components: {
StatusContent,
UserAvatar,

@ -37,8 +37,8 @@
@click.prevent
>
<UserPopover
:userId="notification.from_profile.id"
:overlayCenters="true"
:user-id="notification.from_profile.id"
:overlay-centers="true"
>
<UserAvatar
class="post-avatar"

@ -5,7 +5,7 @@
placement="bottom"
:bound-to="{ x: 'container' }"
>
<template v-slot:content>
<template #content>
<div class="dropdown-menu">
<button
class="button-default dropdown-item"
@ -72,7 +72,7 @@
</button>
</div>
</template>
<template v-slot:trigger>
<template #trigger>
<button class="filter-trigger-button button-unstyled">
<FAIcon icon="filter" />
</button>

@ -1,5 +1,8 @@
<template>
<teleport :disabled="minimalMode || disableTeleport" :to="teleportTarget">
<teleport
:disabled="minimalMode || disableTeleport"
:to="teleportTarget"
>
<div
:class="{ minimal: minimalMode }"
class="Notifications"

@ -104,21 +104,25 @@ const Popover = {
// What are the screen bounds for the popover? Viewport vs container
// when using viewport, using default margin values to dodge the navbar
const xBounds = this.boundTo && this.boundTo.x === 'container' ? {
min: parentScreenBox.left + (margin.left || 0),
max: parentScreenBox.right - (margin.right || 0)
} : {
min: 0 + (margin.left || 10),
max: window.innerWidth - (margin.right || 10)
}
const yBounds = this.boundTo && this.boundTo.y === 'container' ? {
min: parentScreenBox.top + (margin.top || 0),
max: parentScreenBox.bottom - (margin.bottom || 0)
} : {
min: 0 + (margin.top || 50),
max: window.innerHeight - (margin.bottom || 5)
}
const xBounds = this.boundTo && this.boundTo.x === 'container'
? {
min: parentScreenBox.left + (margin.left || 0),
max: parentScreenBox.right - (margin.right || 0)
}
: {
min: 0 + (margin.left || 10),
max: window.innerWidth - (margin.right || 10)
}
const yBounds = this.boundTo && this.boundTo.y === 'container'
? {
min: parentScreenBox.top + (margin.top || 0),
max: parentScreenBox.bottom - (margin.bottom || 0)
}
: {
min: 0 + (margin.top || 50),
max: window.innerHeight - (margin.bottom || 5)
}
let horizOffset = 0
let vertOffset = 0

@ -41,7 +41,7 @@ const buildMentionsString = ({ user, attentions = [] }, currentUser) => {
allAttentions = uniqBy(allAttentions, 'id')
allAttentions = reject(allAttentions, { id: currentUser.id })
let mentions = map(allAttentions, (attention) => {
const mentions = map(allAttentions, (attention) => {
return `@${attention.screen_name}`
})
@ -242,7 +242,7 @@ const PostStatusForm = {
})
},
watch: {
'newStatus': {
newStatus: {
deep: true,
handler () {
this.statusChanged()
@ -273,7 +273,7 @@ const PostStatusForm = {
this.$refs.textarea.focus()
})
}
let el = this.$el.querySelector('textarea')
const el = this.$el.querySelector('textarea')
el.style.height = 'auto'
el.style.height = undefined
this.error = null
@ -392,7 +392,7 @@ const PostStatusForm = {
this.$emit('resize', { delayed: true })
},
removeMediaFile (fileInfo) {
let index = this.newStatus.files.indexOf(fileInfo)
const index = this.newStatus.files.indexOf(fileInfo)
this.newStatus.files.splice(index, 1)
this.$emit('resize')
},
@ -462,7 +462,7 @@ const PostStatusForm = {
},
onEmojiInputInput (e) {
this.$nextTick(() => {
this.resize(this.$refs['textarea'])
this.resize(this.$refs.textarea)
})
},
resize (e) {
@ -477,8 +477,8 @@ const PostStatusForm = {
return
}
const formRef = this.$refs['form']
const bottomRef = this.$refs['bottom']
const formRef = this.$refs.form
const bottomRef = this.$refs.bottom
/* Scroller is either `window` (replies in TL), sidebar (main post form,
* replies in notifs) or mobile post form. Note that getting and setting
* scroll is different for `Window` and `Element`s
@ -564,7 +564,7 @@ const PostStatusForm = {
this.$refs['emoji-input'].resize()
},
showEmojiPicker () {
this.$refs['textarea'].focus()
this.$refs.textarea.focus()
this.$refs['emoji-input'].triggerShowPicker()
},
clearError () {

@ -45,7 +45,7 @@ const ReactButton = {
emojis () {
if (this.filterWord !== '') {
const filterWordLowercase = trim(this.filterWord.toLowerCase())
let orderedEmojiList = []
const orderedEmojiList = []
for (const emoji of this.$store.state.instance.emoji) {
if (emoji.replacement === this.filterWord) return [emoji]

@ -9,13 +9,13 @@
popover-class="ReactButton popover-default"
@show="focusInput"
>
<template v-slot:content="{close}">
<template #content="{close}">
<div class="reaction-picker-filter">
<input
v-model="filterWord"
@input="$event.target.composing = false"
size="1"
:placeholder="$t('emoji.search_emoji')"
@input="$event.target.composing = false"
>
</div>
<div class="reaction-picker">
@ -41,7 +41,7 @@
<div class="reaction-bottom-fader" />
</div>
</template>
<template v-slot:trigger>
<template #trigger>
<span
class="button-unstyled popover-trigger"
:title="$t('tool_tip.add_reaction')"
@ -55,7 +55,7 @@
</Popover>
</template>
<script src="./react_button.js" ></script>
<script src="./react_button.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -1,5 +1,5 @@
export default {
props: [ 'user' ],
props: ['user'],
computed: {
subscribeUrl () {
// eslint-disable-next-line no-undef

@ -36,7 +36,7 @@
</div>
</template>
<script src="./retweet_button.js" ></script>
<script src="./retweet_button.js"></script>
<style lang="scss">
@import '../../_variables.scss';

@ -16,7 +16,7 @@ const SearchBar = {
error: false
}),
watch: {
'$route': function (route) {
$route: function (route) {
if (route.name === 'search') {
this.searchTerm = route.query.query
}

@ -24,7 +24,7 @@
:items="items"
:get-key="getKey"
>
<template v-slot:item="{item}">
<template #item="{item}">
<div
class="selectable-list-item-inner"
:class="{ 'selectable-list-item-selected-inner': isSelected(item) }"
@ -41,7 +41,7 @@
/>
</div>
</template>
<template v-slot:empty>
<template #empty>
<slot name="empty" />
</template>
</List>

@ -6,14 +6,14 @@
<Popover
trigger="hover"
>
<template v-slot:trigger>
<template #trigger>
&nbsp;
<FAIcon
icon="wrench"
:aria-label="$t('settings.setting_changed')"
/>
</template>
<template v-slot:content>
<template #content>
<div class="modified-tooltip">
{{ $t('settings.setting_changed') }}
</div>

@ -6,14 +6,14 @@
<Popover
trigger="hover"
>
<template v-slot:trigger>
<template #trigger>