diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-07-20 12:11:07 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-07-20 12:11:07 +0900 |
| commit | acb92442058fa2458967425efb7324ab0646a335 (patch) | |
| tree | afc2ac62a7bbddce5756fc49f1caba9f7cba5407 /src/client/pages | |
| parent | Merge branch 'develop' (diff) | |
| parent | 12.84.0 (diff) | |
| download | misskey-acb92442058fa2458967425efb7324ab0646a335.tar.gz misskey-acb92442058fa2458967425efb7324ab0646a335.tar.bz2 misskey-acb92442058fa2458967425efb7324ab0646a335.zip | |
Merge branch 'develop'
Diffstat (limited to 'src/client/pages')
| -rw-r--r-- | src/client/pages/follow.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/instance/abuses.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/messaging/index.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/messaging/messaging-room.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/my-antennas/index.antenna.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/room/room.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/settings/custom-css.vue | 72 | ||||
| -rw-r--r-- | src/client/pages/settings/general.vue | 8 | ||||
| -rw-r--r-- | src/client/pages/settings/index.vue | 5 | ||||
| -rw-r--r-- | src/client/pages/settings/menu.vue (renamed from src/client/pages/settings/sidebar.vue) | 39 | ||||
| -rw-r--r-- | src/client/pages/settings/theme.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/user/index.vue | 2 | ||||
| -rw-r--r-- | src/client/pages/welcome.timeline.vue | 72 |
13 files changed, 173 insertions, 39 deletions
diff --git a/src/client/pages/follow.vue b/src/client/pages/follow.vue index f5afdf0892..d5247aff1e 100644 --- a/src/client/pages/follow.vue +++ b/src/client/pages/follow.vue @@ -6,7 +6,7 @@ <script lang="ts"> import { defineComponent } from 'vue'; import * as os from '@client/os'; -import parseAcct from '@/misc/acct/parse'; +import { parseAcct } from '@/misc/acct'; export default defineComponent({ created() { diff --git a/src/client/pages/instance/abuses.vue b/src/client/pages/instance/abuses.vue index 73196027dc..900c9f8333 100644 --- a/src/client/pages/instance/abuses.vue +++ b/src/client/pages/instance/abuses.vue @@ -63,7 +63,7 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import parseAcct from '@/misc/acct/parse'; +import { parseAcct } from '@/misc/acct'; import MkButton from '@client/components/ui/button.vue'; import MkInput from '@client/components/ui/input.vue'; import MkSelect from '@client/components/ui/select.vue'; diff --git a/src/client/pages/messaging/index.vue b/src/client/pages/messaging/index.vue index 832cce5ab9..87ca1890fd 100644 --- a/src/client/pages/messaging/index.vue +++ b/src/client/pages/messaging/index.vue @@ -38,7 +38,7 @@ <script lang="ts"> import { defineAsyncComponent, defineComponent } from 'vue'; -import getAcct from '@/misc/acct/render'; +import { getAcct } from '@/misc/acct'; import MkButton from '@client/components/ui/button.vue'; import { acct } from '../../filters/user'; import * as os from '@client/os'; diff --git a/src/client/pages/messaging/messaging-room.vue b/src/client/pages/messaging/messaging-room.vue index f1d55ee288..6ec60566b6 100644 --- a/src/client/pages/messaging/messaging-room.vue +++ b/src/client/pages/messaging/messaging-room.vue @@ -40,7 +40,7 @@ import { computed, defineComponent } from 'vue'; import XList from '@client/components/date-separated-list.vue'; import XMessage from './messaging-room.message.vue'; import XForm from './messaging-room.form.vue'; -import parseAcct from '@/misc/acct/parse'; +import { parseAcct } from '@/misc/acct'; import { isBottom, onScrollBottom, scroll } from '@client/scripts/scroll'; import * as os from '@client/os'; import { popout } from '@client/scripts/popout'; diff --git a/src/client/pages/my-antennas/index.antenna.vue b/src/client/pages/my-antennas/index.antenna.vue index 8cad6fa553..fcb7559a98 100644 --- a/src/client/pages/my-antennas/index.antenna.vue +++ b/src/client/pages/my-antennas/index.antenna.vue @@ -52,7 +52,7 @@ import MkInput from '@client/components/ui/input.vue'; import MkTextarea from '@client/components/ui/textarea.vue'; import MkSelect from '@client/components/ui/select.vue'; import MkSwitch from '@client/components/ui/switch.vue'; -import getAcct from '@/misc/acct/render'; +import { getAcct } from '@/misc/acct'; import * as os from '@client/os'; export default defineComponent({ diff --git a/src/client/pages/room/room.vue b/src/client/pages/room/room.vue index ea34ef11b5..61650e067f 100644 --- a/src/client/pages/room/room.vue +++ b/src/client/pages/room/room.vue @@ -52,7 +52,7 @@ <script lang="ts"> import { computed, defineComponent } from 'vue'; import { Room } from '@client/scripts/room/room'; -import parseAcct from '@/misc/acct/parse'; +import { parseAcct } from '@/misc/acct'; import XPreview from './preview.vue'; const storeItems = require('@client/scripts/room/furnitures.json5'); import { query as urlQuery } from '../../../prelude/url'; diff --git a/src/client/pages/settings/custom-css.vue b/src/client/pages/settings/custom-css.vue new file mode 100644 index 0000000000..0781eeebd7 --- /dev/null +++ b/src/client/pages/settings/custom-css.vue @@ -0,0 +1,72 @@ +<template> +<FormBase> + <FormInfo warn>{{ $ts.customCssWarn }}</FormInfo> + + <FormTextarea v-model:value="localCustomCss" manual-save tall class="_monospace" style="tab-size: 2;"> + <span>{{ $ts.local }}</span> + </FormTextarea> +</FormBase> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import FormTextarea from '@client/components/form/textarea.vue'; +import FormSelect from '@client/components/form/select.vue'; +import FormRadios from '@client/components/form/radios.vue'; +import FormBase from '@client/components/form/base.vue'; +import FormGroup from '@client/components/form/group.vue'; +import FormLink from '@client/components/form/link.vue'; +import FormButton from '@client/components/form/button.vue'; +import FormInfo from '@client/components/form/info.vue'; +import * as os from '@client/os'; +import { ColdDeviceStorage } from '@client/store'; +import { unisonReload } from '@client/scripts/unison-reload'; +import * as symbols from '@client/symbols'; +import { defaultStore } from '@client/store'; + +export default defineComponent({ + components: { + FormTextarea, + FormSelect, + FormRadios, + FormBase, + FormGroup, + FormLink, + FormButton, + FormInfo, + }, + + emits: ['info'], + + data() { + return { + [symbols.PAGE_INFO]: { + title: this.$ts.customCss, + icon: 'fas fa-code' + }, + localCustomCss: localStorage.getItem('customCss') + } + }, + + mounted() { + this.$emit('info', this[symbols.PAGE_INFO]); + + this.$watch('localCustomCss', this.apply); + }, + + methods: { + async apply() { + localStorage.setItem('customCss', this.localCustomCss); + + const { canceled } = await os.dialog({ + type: 'info', + text: this.$ts.reloadToApplySetting, + showCancelButton: true + }); + if (canceled) return; + + unisonReload(); + } + } +}); +</script> diff --git a/src/client/pages/settings/general.vue b/src/client/pages/settings/general.vue index fdbae0b8a1..cc40d2be98 100644 --- a/src/client/pages/settings/general.vue +++ b/src/client/pages/settings/general.vue @@ -37,6 +37,7 @@ <FormSwitch v-model:value="showGapBetweenNotesInTimeline">{{ $ts.showGapBetweenNotesInTimeline }}</FormSwitch> <FormSwitch v-model:value="loadRawImages">{{ $ts.loadRawImages }}</FormSwitch> <FormSwitch v-model:value="disableShowingAnimatedImages">{{ $ts.disableShowingAnimatedImages }}</FormSwitch> + <FormSwitch v-model:value="squareAvatars">{{ $ts.squareAvatars }}</FormSwitch> <FormSwitch v-model:value="useSystemFont">{{ $ts.useSystemFont }}</FormSwitch> <FormSwitch v-model:value="useOsNativeEmojis">{{ $ts.useOsNativeEmojis }} <div><Mfm text="๐ฎ๐ฆ๐ญ๐ฉ๐ฐ๐ซ๐ฌ๐ฅ๐ช" :key="useOsNativeEmojis"/></div> @@ -78,6 +79,8 @@ </FormSelect> <FormLink to="/settings/deck">{{ $ts.deck }}</FormLink> + + <FormLink to="/settings/custom-css"><template #icon><i class="fas fa-code"></i></template>{{ $ts.customCss }}</FormLink> </FormBase> </template> @@ -143,6 +146,7 @@ export default defineComponent({ instanceTicker: defaultStore.makeGetterSetter('instanceTicker'), enableInfiniteScroll: defaultStore.makeGetterSetter('enableInfiniteScroll'), useReactionPickerForContextMenu: defaultStore.makeGetterSetter('useReactionPickerForContextMenu'), + squareAvatars: defaultStore.makeGetterSetter('squareAvatars'), }, watch: { @@ -174,6 +178,10 @@ export default defineComponent({ this.reloadAsk(); }, + squareAvatars() { + this.reloadAsk(); + }, + showGapBetweenNotesInTimeline() { this.reloadAsk(); }, diff --git a/src/client/pages/settings/index.vue b/src/client/pages/settings/index.vue index 3fd10fc44f..17b373fcd8 100644 --- a/src/client/pages/settings/index.vue +++ b/src/client/pages/settings/index.vue @@ -26,7 +26,7 @@ <template #label>{{ $ts.clientSettings }}</template> <FormLink :active="page === 'general'" replace to="/settings/general"><template #icon><i class="fas fa-cogs"></i></template>{{ $ts.general }}</FormLink> <FormLink :active="page === 'theme'" replace to="/settings/theme"><template #icon><i class="fas fa-palette"></i></template>{{ $ts.theme }}</FormLink> - <FormLink :active="page === 'sidebar'" replace to="/settings/sidebar"><template #icon><i class="fas fa-list-ul"></i></template>{{ $ts.sidebar }}</FormLink> + <FormLink :active="page === 'menu'" replace to="/settings/menu"><template #icon><i class="fas fa-list-ul"></i></template>{{ $ts.menu }}</FormLink> <FormLink :active="page === 'sounds'" replace to="/settings/sounds"><template #icon><i class="fas fa-music"></i></template>{{ $ts.sounds }}</FormLink> <FormLink :active="page === 'plugin'" replace to="/settings/plugin"><template #icon><i class="fas fa-plug"></i></template>{{ $ts.plugins }}</FormLink> </FormGroup> @@ -121,8 +121,9 @@ export default defineComponent({ case 'theme': return defineAsyncComponent(() => import('./theme.vue')); case 'theme/install': return defineAsyncComponent(() => import('./theme.install.vue')); case 'theme/manage': return defineAsyncComponent(() => import('./theme.manage.vue')); - case 'sidebar': return defineAsyncComponent(() => import('./sidebar.vue')); + case 'menu': return defineAsyncComponent(() => import('./menu.vue')); case 'sounds': return defineAsyncComponent(() => import('./sounds.vue')); + case 'custom-css': return defineAsyncComponent(() => import('./custom-css.vue')); case 'deck': return defineAsyncComponent(() => import('./deck.vue')); case 'plugin': return defineAsyncComponent(() => import('./plugin.vue')); case 'plugin/install': return defineAsyncComponent(() => import('./plugin.install.vue')); diff --git a/src/client/pages/settings/sidebar.vue b/src/client/pages/settings/menu.vue index f0172e945f..4b315145e1 100644 --- a/src/client/pages/settings/sidebar.vue +++ b/src/client/pages/settings/menu.vue @@ -1,18 +1,18 @@ <template> <FormBase> - <FormTextarea v-model:value="items" tall> - <span>{{ $ts.sidebar }}</span> + <FormTextarea v-model:value="items" tall manual-save> + <span>{{ $ts.menu }}</span> <template #desc><button class="_textButton" @click="addItem">{{ $ts.addItem }}</button></template> </FormTextarea> - <FormRadios v-model="sidebarDisplay"> + <FormRadios v-model="menuDisplay"> <template #desc>{{ $ts.display }}</template> - <option value="full">{{ $ts._sidebar.full }}</option> - <option value="icon">{{ $ts._sidebar.icon }}</option> - <!-- <MkRadio v-model="sidebarDisplay" value="hide" disabled>{{ $ts._sidebar.hide }}</MkRadio>--> <!-- TODO: ใตใคใใใผใๅฎๅ
จใซ้ ใใใใใซใใใจใๅฅ้ใใณใใผใฌใผใใฟใณใฎใใใชใใฎใUIใซ่กจ็คบใใๅฟ
่ฆใใใ้ขๅ --> + <option value="sideFull">{{ $ts._menuDisplay.sideFull }}</option> + <option value="sideIcon">{{ $ts._menuDisplay.sideIcon }}</option> + <option value="top">{{ $ts._menuDisplay.top }}</option> + <!-- <MkRadio v-model="menuDisplay" value="hide" disabled>{{ $ts._menuDisplay.hide }}</MkRadio>--> <!-- TODO: ใตใคใใใผใๅฎๅ
จใซ้ ใใใใใซใใใจใๅฅ้ใใณใใผใฌใผใใฟใณใฎใใใชใใฎใUIใซ่กจ็คบใใๅฟ
่ฆใใใ้ขๅ --> </FormRadios> - <FormButton @click="save()" primary><i class="fas fa-save"></i> {{ $ts.save }}</FormButton> <FormButton @click="reset()" danger><i class="fas fa-redo"></i> {{ $ts.default }}</FormButton> </FormBase> </template> @@ -26,9 +26,10 @@ import FormBase from '@client/components/form/base.vue'; import FormGroup from '@client/components/form/group.vue'; import FormButton from '@client/components/form/button.vue'; import * as os from '@client/os'; -import { sidebarDef } from '@client/sidebar'; +import { menuDef } from '@client/menu'; import { defaultStore } from '@client/store'; import * as symbols from '@client/symbols'; +import { unisonReload } from '@client/scripts/unison-reload'; export default defineComponent({ components: { @@ -43,11 +44,11 @@ export default defineComponent({ data() { return { [symbols.PAGE_INFO]: { - title: this.$ts.sidebar, + title: this.$ts.menu, icon: 'fas fa-list-ul' }, - menuDef: sidebarDef, - items: '', + menuDef: menuDef, + items: defaultStore.state.menu.join('\n'), } }, @@ -56,11 +57,17 @@ export default defineComponent({ return this.items.trim().split('\n').filter(x => x.trim() !== ''); }, - sidebarDisplay: defaultStore.makeGetterSetter('sidebarDisplay') + menuDisplay: defaultStore.makeGetterSetter('menuDisplay') }, - created() { - this.items = this.$store.state.menu.join('\n'); + watch: { + menuDisplay() { + this.reloadAsk(); + }, + + items() { + this.save(); + }, }, mounted() { @@ -84,7 +91,6 @@ export default defineComponent({ }); if (canceled) return; this.items = [...this.splited, item].join('\n'); - this.save(); }, save() { @@ -95,7 +101,6 @@ export default defineComponent({ reset() { this.$store.reset('menu'); this.items = this.$store.state.menu.join('\n'); - this.reloadAsk(); }, async reloadAsk() { @@ -106,7 +111,7 @@ export default defineComponent({ }); if (canceled) return; - location.reload(); + unisonReload(); } }, }); diff --git a/src/client/pages/settings/theme.vue b/src/client/pages/settings/theme.vue index 1eb0d68be5..94eddb1b6f 100644 --- a/src/client/pages/settings/theme.vue +++ b/src/client/pages/settings/theme.vue @@ -71,7 +71,7 @@ <FormButton primary v-else @click="wallpaper = null">{{ $ts.removeWallpaper }}</FormButton> <FormGroup> - <FormLink to="https://assets.msky.cafe/theme/list" external><template #icon><i class="fas fa-globe"></i></template>{{ $ts._theme.explore }}</FormLink> + <FormLink to="https://assets.misskey.io/theme/list" external><template #icon><i class="fas fa-globe"></i></template>{{ $ts._theme.explore }}</FormLink> <FormLink to="/settings/theme/install"><template #icon><i class="fas fa-download"></i></template>{{ $ts._theme.install }}</FormLink> </FormGroup> diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue index 717ca5d8fe..f5c5a0694c 100644 --- a/src/client/pages/user/index.vue +++ b/src/client/pages/user/index.vue @@ -234,7 +234,7 @@ import MkRemoteCaution from '@client/components/remote-caution.vue'; import MkTab from '@client/components/tab.vue'; import MkInfo from '@client/components/ui/info.vue'; import Progress from '@client/scripts/loading'; -import parseAcct from '@/misc/acct/parse'; +import { parseAcct } from '@/misc/acct'; import { getScrollPosition } from '@client/scripts/scroll'; import { getUserMenu } from '@client/scripts/get-user-menu'; import number from '../../filters/number'; diff --git a/src/client/pages/welcome.timeline.vue b/src/client/pages/welcome.timeline.vue index 12c8a4d4f4..bd07ac78db 100644 --- a/src/client/pages/welcome.timeline.vue +++ b/src/client/pages/welcome.timeline.vue @@ -1,10 +1,22 @@ <template> <div class="civpbkhh"> - <div v-for="note in notes" class="note"> - <div class="content _panel"> - {{ note.text }} + <div class="scrollbox" ref="scroll" v-bind:class="{ scroll: isScrolling }"> + <div v-for="note in notes" class="note"> + <div class="content _panel"> + <div class="body"> + <MkA class="reply" v-if="note.replyId" :to="`/notes/${note.replyId}`"><i class="fas fa-reply"></i></MkA> + <Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i" :custom-emojis="note.emojis"/> + <MkA class="rp" v-if="note.renoteId" :to="`/notes/${note.renoteId}`">RN: ...</MkA> + </div> + <div v-if="note.files.length > 0" class="richcontent"> + <XMediaList :media-list="note.files"/> + </div> + <div v-if="note.poll"> + <XPoll :note="note" :readOnly="true" /> + </div> + </div> + <XReactionsViewer :note="note" ref="reactionsViewer"/> </div> - <XReactionsViewer :note="note" ref="reactionsViewer"/> </div> </div> </template> @@ -12,16 +24,21 @@ <script lang="ts"> import { defineComponent } from 'vue'; import XReactionsViewer from '@client/components/reactions-viewer.vue'; +import XMediaList from '@client/components/media-list.vue'; +import XPoll from '@client/components/poll.vue'; import * as os from '@client/os'; export default defineComponent({ components: { - XReactionsViewer + XReactionsViewer, + XMediaList, + XPoll }, data() { return { notes: [], + isScrolling: false, } }, @@ -29,22 +46,53 @@ export default defineComponent({ os.api('notes/featured').then(notes => { this.notes = notes; }); + }, + + updated() { + if (this.$refs.scroll.clientHeight > window.innerHeight) { + this.isScrolling = true; + } } }); </script> <style lang="scss" scoped> +@keyframes scroll { + 0% { + transform: translate3d(0, 0, 0); + } + 5% { + transform: translate3d(0, 0, 0); + } + 75% { + transform: translate3d(0, calc(-100% + 90vh), 0); + } + 90% { + transform: translate3d(0, calc(-100% + 90vh), 0); + } +} + .civpbkhh { text-align: right; - > .note { - margin: 16px 0 16px auto; + > .scrollbox { + &.scroll { + animation: scroll 45s linear infinite; + } + + > .note { + margin: 16px 0 16px auto; + + > .content { + padding: 16px; + margin: 0 0 0 auto; + max-width: max-content; + border-radius: 16px; - > .content { - padding: 16px; - margin: 0 0 0 auto; - max-width: max-content; - border-radius: 16px; + > .richcontent { + min-width: 250px; + } + } } } } |