diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2020-02-06 14:23:01 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2020-02-06 14:23:01 +0900 |
| commit | 1b88a7bc03ac45c3c0eea9408a700ffd2f72d5d0 (patch) | |
| tree | 3d6e7204e80fef4c728bf6a0e44aee2a6813969d /src | |
| parent | 12.0.0 (diff) | |
| download | sharkey-1b88a7bc03ac45c3c0eea9408a700ffd2f72d5d0.tar.gz sharkey-1b88a7bc03ac45c3c0eea9408a700ffd2f72d5d0.tar.bz2 sharkey-1b88a7bc03ac45c3c0eea9408a700ffd2f72d5d0.zip | |
Fix #5842 and refactoring
Diffstat (limited to 'src')
21 files changed, 58 insertions, 31 deletions
diff --git a/src/client/components/date-separated-list.vue b/src/client/components/date-separated-list.vue index 00c3cd6643..461459f3ba 100644 --- a/src/client/components/date-separated-list.vue +++ b/src/client/components/date-separated-list.vue @@ -1,8 +1,8 @@ <template> -<sequential-entrance class="sqadhkmv" ref="list" :direction="direction"> +<sequential-entrance class="sqadhkmv" ref="list" :direction="direction" :reversed="reversed"> <template v-for="(item, i) in items"> <slot :item="item" :i="i"></slot> - <div class="separator" :key="item.id + '_date'" :data-index="i" v-if="i != items.length - 1 && new Date(item.createdAt).getDate() != new Date(items[i + 1].createdAt).getDate()"> + <div class="separator" :key="item.id + '_date'" v-if="i != items.length - 1 && new Date(item.createdAt).getDate() != new Date(items[i + 1].createdAt).getDate()"> <p class="date"> <span><fa class="icon" :icon="faAngleUp"/>{{ getDateText(item.createdAt) }}</span> <span>{{ getDateText(items[i + 1].createdAt) }}<fa class="icon" :icon="faAngleDown"/></span> @@ -28,6 +28,11 @@ export default Vue.extend({ direction: { type: String, required: false + }, + reversed: { + type: Boolean, + required: false, + default: false } }, diff --git a/src/client/components/menu.vue b/src/client/components/menu.vue index c1c5ceaee7..1f9eb95ed5 100644 --- a/src/client/components/menu.vue +++ b/src/client/components/menu.vue @@ -2,26 +2,26 @@ <x-popup :source="source" :no-center="noCenter" :fixed="fixed" :width="width" ref="popup" @closed="() => { $emit('closed'); destroyDom(); }"> <sequential-entrance class="rrevdjwt" :class="{ left: align === 'left' }" :delay="15" :direction="direction"> <template v-for="(item, i) in items.filter(item => item !== undefined)"> - <div v-if="item === null" class="divider" :key="i" :data-index="i"></div> - <span v-else-if="item.type === 'label'" class="label item" :key="i" :data-index="i"> + <div v-if="item === null" class="divider" :key="i"></div> + <span v-else-if="item.type === 'label'" class="label item" :key="i"> <span>{{ item.text }}</span> </span> - <router-link v-else-if="item.type === 'link'" :to="item.to" @click.native="close()" :tabindex="i" class="_button item" :key="i" :data-index="i"> + <router-link v-else-if="item.type === 'link'" :to="item.to" @click.native="close()" :tabindex="i" class="_button item" :key="i"> <fa v-if="item.icon" :icon="item.icon" fixed-width/> <mk-avatar v-if="item.avatar" :user="item.avatar" class="avatar"/> <span>{{ item.text }}</span> <i v-if="item.indicate"><fa :icon="faCircle"/></i> </router-link> - <a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" @click="close()" :tabindex="i" class="_button item" :key="i" :data-index="i"> + <a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" @click="close()" :tabindex="i" class="_button item" :key="i"> <fa v-if="item.icon" :icon="item.icon" fixed-width/> <span>{{ item.text }}</span> <i v-if="item.indicate"><fa :icon="faCircle"/></i> </a> - <button v-else-if="item.type === 'user'" @click="clicked(item.action)" :tabindex="i" class="_button item" :key="i" :data-index="i"> + <button v-else-if="item.type === 'user'" @click="clicked(item.action)" :tabindex="i" class="_button item" :key="i"> <mk-avatar :user="item.user" class="avatar"/><mk-user-name :user="item.user"/> <i v-if="item.indicate"><fa :icon="faCircle"/></i> </button> - <button v-else @click="clicked(item.action)" :tabindex="i" class="_button item" :key="i" :data-index="i"> + <button v-else @click="clicked(item.action)" :tabindex="i" class="_button item" :key="i"> <fa v-if="item.icon" :icon="item.icon" fixed-width/> <mk-avatar v-if="item.avatar" :user="item.avatar" class="avatar"/> <span>{{ item.text }}</span> diff --git a/src/client/components/notes.vue b/src/client/components/notes.vue index 7cf2aa2b02..0fa02681fa 100644 --- a/src/client/components/notes.vue +++ b/src/client/components/notes.vue @@ -5,7 +5,7 @@ <mk-error v-if="error" @retry="init()"/> <x-list ref="notes" class="notes" :items="notes" v-slot="{ item: note, i }"> - <x-note :note="note" :detail="detail" :key="note.id" :data-index="i"/> + <x-note :note="note" :detail="detail" :key="note.id"/> </x-list> <footer v-if="more"> diff --git a/src/client/components/notifications.vue b/src/client/components/notifications.vue index e067c1acce..ff2fc4af8a 100644 --- a/src/client/components/notifications.vue +++ b/src/client/components/notifications.vue @@ -2,7 +2,7 @@ <div class="mk-notifications"> <div class="contents"> <x-list class="notifications" :items="items" v-slot="{ item: notification, i }"> - <x-notification :notification="notification" :with-time="true" :full="true" class="notification" :key="notification.id" :data-index="i"/> + <x-notification :notification="notification" :with-time="true" :full="true" class="notification" :key="notification.id"/> </x-list> <button class="more _button" v-if="more" @click="fetchMore" :disabled="moreFetching"> diff --git a/src/client/components/reaction-picker.vue b/src/client/components/reaction-picker.vue index 00b964f07c..ccf6eaa51e 100644 --- a/src/client/components/reaction-picker.vue +++ b/src/client/components/reaction-picker.vue @@ -13,7 +13,7 @@ mode="out-in" appear > - <button class="_button" v-for="(reaction, i) in rs" :key="reaction" @click="react(reaction)" :data-index="i" :tabindex="i + 1" :title="/^[a-z]+$/.test(reaction) ? $t('@.reactions.' + reaction) : reaction"><x-reaction-icon :reaction="reaction"/></button> + <button class="_button" v-for="(reaction, i) in rs" :key="reaction" @click="react(reaction)" :tabindex="i + 1" :title="/^[a-z]+$/.test(reaction) ? $t('@.reactions.' + reaction) : reaction"><x-reaction-icon :reaction="reaction"/></button> </transition-group> <input class="text" v-model="text" :placeholder="$t('enterEmoji')" @keyup.enter="reactText" @input="tryReactText" v-autocomplete="{ model: 'text' }"> </div> diff --git a/src/client/components/sequential-entrance.vue b/src/client/components/sequential-entrance.vue index 70e486719e..33f7a43f7d 100644 --- a/src/client/components/sequential-entrance.vue +++ b/src/client/components/sequential-entrance.vue @@ -27,20 +27,42 @@ export default Vue.extend({ type: String, required: false, default: 'down' + }, + reversed: { + type: Boolean, + required: false, + default: false } }, + data() { + return { + currentChildren: [] as Node[], + index: 0 + }; + }, methods: { + updateChildren() { + this.currentChildren = this.$slots.default!.filter(n => n.elm != null).map(n => n.elm!); + }, beforeEnter(el) { el.style.opacity = 0; el.style.transform = this.direction === 'down' ? 'translateY(-64px)' : 'translateY(64px)'; }, enter(el, done) { + let index = this.index; + // TODO + //if (this.reversed) index = ...; + //console.log(index); el.style.transition = [getComputedStyle(el).transition, 'transform 0.7s cubic-bezier(0.23, 1, 0.32, 1)', 'opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1)'].filter(x => x != '').join(','); setTimeout(() => { el.style.opacity = 1; el.style.transform = 'translateY(0px)'; - setTimeout(done, 700); - }, this.delay * el.dataset.index) + setTimeout(() => { + done(); + this.index--; + }, 700); + }, this.delay * index) + this.index++; }, leave(el, done) { setTimeout(() => { diff --git a/src/client/components/users-dialog.vue b/src/client/components/users-dialog.vue index 19310bc4e1..a70b3c2d13 100644 --- a/src/client/components/users-dialog.vue +++ b/src/client/components/users-dialog.vue @@ -7,7 +7,7 @@ </div> <sequential-entrance class="users"> - <router-link v-for="(item, i) in items" class="user" :key="item.id" :data-index="i" :to="extract ? extract(item) : item | userPage"> + <router-link v-for="(item, i) in items" class="user" :key="item.id" :to="extract ? extract(item) : item | userPage"> <mk-avatar :user="extract ? extract(item) : item" class="avatar" :disable-link="true"/> <div class="body"> <mk-user-name :user="extract ? extract(item) : item" class="name"/> diff --git a/src/client/pages/announcements.vue b/src/client/pages/announcements.vue index f3abea9583..48b1e067d3 100644 --- a/src/client/pages/announcements.vue +++ b/src/client/pages/announcements.vue @@ -4,7 +4,7 @@ <portal to="title">{{ $t('announcements') }}</portal> <mk-pagination :pagination="pagination" #default="{items}" class="ruryvtyk" ref="list"> - <section class="_card announcement" v-for="(announcement, i) in items" :key="announcement.id" :data-index="i"> + <section class="_card announcement" v-for="(announcement, i) in items" :key="announcement.id"> <div class="_title"><span v-if="$store.getters.isSignedIn && !announcement.isRead">🆕 </span>{{ announcement.title }}</div> <div class="_content"> <mfm :text="announcement.text"/> diff --git a/src/client/pages/follow-requests.vue b/src/client/pages/follow-requests.vue index c302088b97..1038e89d6e 100644 --- a/src/client/pages/follow-requests.vue +++ b/src/client/pages/follow-requests.vue @@ -1,6 +1,6 @@ <template> <mk-pagination :pagination="pagination" #default="{items}" class="mk-follow-requests" ref="list"> - <div class="user _panel" v-for="(req, i) in items" :key="req.id" :data-index="i"> + <div class="user _panel" v-for="(req, i) in items" :key="req.id"> <mk-avatar class="avatar" :user="req.follower"/> <div class="body"> <div class="name"> diff --git a/src/client/pages/instance/emojis.vue b/src/client/pages/instance/emojis.vue index b1005b0639..a53508db84 100644 --- a/src/client/pages/instance/emojis.vue +++ b/src/client/pages/instance/emojis.vue @@ -9,7 +9,7 @@ <mk-pagination :pagination="pagination" class="emojis" ref="emojis"> <template #empty><span>{{ $t('noCustomEmojis') }}</span></template> <template #default="{items}"> - <div class="emoji" v-for="(emoji, i) in items" :key="emoji.id" :data-index="i" @click="selected = emoji" :class="{ selected: selected && (selected.id === emoji.id) }"> + <div class="emoji" v-for="(emoji, i) in items" :key="emoji.id" @click="selected = emoji" :class="{ selected: selected && (selected.id === emoji.id) }"> <img :src="emoji.url" class="img" :alt="emoji.name"/> <div class="body"> <span class="name">{{ emoji.name }}</span> @@ -30,7 +30,7 @@ <mk-pagination :pagination="remotePagination" class="emojis" ref="remoteEmojis"> <template #empty><span>{{ $t('noCustomEmojis') }}</span></template> <template #default="{items}"> - <div class="emoji" v-for="(emoji, i) in items" :key="emoji.id" :data-index="i" @click="selectedRemote = emoji" :class="{ selected: selectedRemote && (selectedRemote.id === emoji.id) }"> + <div class="emoji" v-for="(emoji, i) in items" :key="emoji.id" @click="selectedRemote = emoji" :class="{ selected: selectedRemote && (selectedRemote.id === emoji.id) }"> <img :src="emoji.url" class="img" :alt="emoji.name"/> <div class="body"> <span class="name">{{ emoji.name }}</span> diff --git a/src/client/pages/instance/federation.vue b/src/client/pages/instance/federation.vue index ab8eeb86b2..fa7c377720 100644 --- a/src/client/pages/instance/federation.vue +++ b/src/client/pages/instance/federation.vue @@ -18,7 +18,7 @@ </div> <div class="_content"> <mk-pagination :pagination="pagination" #default="{items}" class="instances" ref="instances" :key="host + state"> - <div class="instance" v-for="(instance, i) in items" :key="instance.id" :data-index="i" @click="info(instance)"> + <div class="instance" v-for="(instance, i) in items" :key="instance.id" @click="info(instance)"> <div class="host"><fa :icon="faCircle" class="indicator" :class="getStatus(instance)"/><b>{{ instance.host }}</b></div> <div class="status"> <span class="sub" v-if="instance.followersCount > 0"><fa :icon="faCaretDown" class="icon"/>Sub</span> diff --git a/src/client/pages/instance/queue.queue.vue b/src/client/pages/instance/queue.queue.vue index 6cd2f2a332..710f4ec099 100644 --- a/src/client/pages/instance/queue.queue.vue +++ b/src/client/pages/instance/queue.queue.vue @@ -12,7 +12,7 @@ </div> <div class="_content" style="max-height: 180px; overflow: auto;"> <sequential-entrance :delay="15" v-if="jobs.length > 0"> - <div v-for="(job, i) in jobs" :key="job[0]" :data-index="i"> + <div v-for="(job, i) in jobs" :key="job[0]"> <span>{{ job[0] }}</span> <span style="margin-left: 8px; opacity: 0.7;">({{ job[1] | number }} jobs)</span> </div> diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue index bafb0c006a..6f53bb8434 100644 --- a/src/client/pages/instance/users.vue +++ b/src/client/pages/instance/users.vue @@ -20,7 +20,7 @@ <div class="_title"><fa :icon="faUsers"/> {{ $t('users') }}</div> <div class="_content _list"> <mk-pagination :pagination="pagination" #default="{items}" class="users" ref="users" :auto-margin="false"> - <button class="user _button _listItem" v-for="(user, i) in items" :key="user.id" :data-index="i" @click="show(user)"> + <button class="user _button _listItem" v-for="(user, i) in items" :key="user.id" @click="show(user)"> <mk-avatar :user="user" class="avatar"/> <div class="body"> <mk-user-name :user="user" class="name"/> diff --git a/src/client/pages/messaging-room.vue b/src/client/pages/messaging-room.vue index cba84b6de7..cb6cae697a 100644 --- a/src/client/pages/messaging-room.vue +++ b/src/client/pages/messaging-room.vue @@ -18,8 +18,8 @@ <button class="more _button" :class="{ fetching: fetchingMoreMessages }" v-if="existMoreMessages" @click="fetchMoreMessages" :disabled="fetchingMoreMessages"> <template v-if="fetchingMoreMessages"><fa icon="spinner" pulse fixed-width/></template>{{ fetchingMoreMessages ? $t('@.loading') : $t('@.load-more') }} </button> - <x-list class="messages" :items="messages" v-slot="{ item: message, i }" direction="up"> - <x-message :message="message" :is-group="group != null" :key="message.id" :data-index="messages.length - i"/> + <x-list class="messages" :items="messages" v-slot="{ item: message, i }" direction="up" reversed> + <x-message :message="message" :is-group="group != null" :key="message.id"/> </x-list> </div> <footer> diff --git a/src/client/pages/my-antennas/index.vue b/src/client/pages/my-antennas/index.vue index 3a9a11b541..7e7b8b7ea9 100644 --- a/src/client/pages/my-antennas/index.vue +++ b/src/client/pages/my-antennas/index.vue @@ -8,7 +8,7 @@ <x-antenna v-if="draft" :antenna="draft" @created="onAntennaCreated" style="margin-bottom: var(--margin);"/> <mk-pagination :pagination="pagination" #default="{items}" class="antennas" ref="list"> - <x-antenna v-for="(antenna, i) in items" :key="antenna.id" :data-index="i" :antenna="antenna" @created="onAntennaDeleted"/> + <x-antenna v-for="(antenna, i) in items" :key="antenna.id" :antenna="antenna" @created="onAntennaDeleted"/> </mk-pagination> </div> </template> diff --git a/src/client/pages/my-lists/index.vue b/src/client/pages/my-lists/index.vue index 6c4b46e85c..968864cdb1 100644 --- a/src/client/pages/my-lists/index.vue +++ b/src/client/pages/my-lists/index.vue @@ -6,7 +6,7 @@ <mk-button @click="create" primary class="add"><fa :icon="faPlus"/> {{ $t('createList') }}</mk-button> <mk-pagination :pagination="pagination" #default="{items}" class="lists" ref="list"> - <div class="list _panel" v-for="(list, i) in items" :key="list.id" :data-index="i"> + <div class="list _panel" v-for="(list, i) in items" :key="list.id"> <router-link :to="`/lists/${ list.id }`">{{ list.name }}</router-link> </div> </mk-pagination> diff --git a/src/client/pages/my-lists/list.vue b/src/client/pages/my-lists/list.vue index 43a3e2b666..ded79b89c7 100644 --- a/src/client/pages/my-lists/list.vue +++ b/src/client/pages/my-lists/list.vue @@ -5,7 +5,7 @@ <div class="_title">{{ list.name }}</div> <div class="_content"> <div class="users"> - <div class="user" v-for="(user, i) in users" :key="user.id" :data-index="i"> + <div class="user" v-for="(user, i) in users" :key="user.id"> <mk-avatar :user="user" class="avatar"/> <div class="body"> <mk-user-name :user="user" class="name"/> diff --git a/src/client/pages/settings/drive.vue b/src/client/pages/settings/drive.vue index 8ff054b9bb..55372687fc 100644 --- a/src/client/pages/settings/drive.vue +++ b/src/client/pages/settings/drive.vue @@ -3,7 +3,7 @@ <div class="_title"><fa :icon="faCloud"/> {{ $t('drive') }}</div> <div class="_content"> <mk-pagination :pagination="drivePagination" #default="{items}" class="drive" ref="drive"> - <div class="file" v-for="(file, i) in items" :key="file.id" :data-index="i" @click="selected = file" :class="{ selected: selected && (selected.id === file.id) }"> + <div class="file" v-for="(file, i) in items" :key="file.id" @click="selected = file" :class="{ selected: selected && (selected.id === file.id) }"> <x-file-thumbnail class="thumbnail" :file="file" fit="cover"/> <div class="body"> <p class="name"> diff --git a/src/client/pages/settings/mute-block.vue b/src/client/pages/settings/mute-block.vue index 86541472fa..03cf4aacc8 100644 --- a/src/client/pages/settings/mute-block.vue +++ b/src/client/pages/settings/mute-block.vue @@ -6,7 +6,7 @@ <mk-pagination :pagination="mutingPagination" class="muting"> <template #empty><span>{{ $t('noUsers') }}</span></template> <template #default="{items}"> - <div class="user" v-for="(mute, i) in items" :key="mute.id" :data-index="i"> + <div class="user" v-for="(mute, i) in items" :key="mute.id"> <router-link class="name" :to="mute.mutee | userPage"> <mk-acct :user="mute.mutee"/> </router-link> @@ -19,7 +19,7 @@ <mk-pagination :pagination="blockingPagination" class="blocking"> <template #empty><span>{{ $t('noUsers') }}</span></template> <template #default="{items}"> - <div class="user" v-for="(block, i) in items" :key="block.id" :data-index="i"> + <div class="user" v-for="(block, i) in items" :key="block.id"> <router-link class="name" :to="block.blockee | userPage"> <mk-acct :user="block.blockee"/> </router-link> diff --git a/src/client/pages/user/follow-list.vue b/src/client/pages/user/follow-list.vue index 4eb48d6053..3da0b8359d 100644 --- a/src/client/pages/user/follow-list.vue +++ b/src/client/pages/user/follow-list.vue @@ -1,6 +1,6 @@ <template> <mk-pagination :pagination="pagination" #default="{items}" class="mk-following-or-followers" ref="list"> - <div class="user _panel" v-for="(user, i) in items.map(x => type === 'following' ? x.followee : x.follower)" :key="user.id" :data-index="i"> + <div class="user _panel" v-for="(user, i) in items.map(x => type === 'following' ? x.followee : x.follower)" :key="user.id"> <mk-avatar class="avatar" :user="user"/> <div class="body"> <div class="name"> diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue index 65a480270f..38bab7334f 100644 --- a/src/client/pages/user/index.vue +++ b/src/client/pages/user/index.vue @@ -83,7 +83,7 @@ <router-view :user="user"></router-view> <template v-if="$route.name == 'user'"> <sequential-entrance class="pins"> - <x-note v-for="(note, i) in user.pinnedNotes" class="note" :note="note" :key="note.id" :data-index="i" :detail="true" :pinned="true"/> + <x-note v-for="(note, i) in user.pinnedNotes" class="note" :note="note" :key="note.id" :detail="true" :pinned="true"/> </sequential-entrance> <mk-container :body-togglable="true" class="content"> <template #header><fa :icon="faImage"/>{{ $t('images') }}</template> |