summaryrefslogtreecommitdiff
path: root/src/client/pages
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-07-20 12:11:07 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-07-20 12:11:07 +0900
commitacb92442058fa2458967425efb7324ab0646a335 (patch)
treeafc2ac62a7bbddce5756fc49f1caba9f7cba5407 /src/client/pages
parentMerge branch 'develop' (diff)
parent12.84.0 (diff)
downloadmisskey-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.vue2
-rw-r--r--src/client/pages/instance/abuses.vue2
-rw-r--r--src/client/pages/messaging/index.vue2
-rw-r--r--src/client/pages/messaging/messaging-room.vue2
-rw-r--r--src/client/pages/my-antennas/index.antenna.vue2
-rw-r--r--src/client/pages/room/room.vue2
-rw-r--r--src/client/pages/settings/custom-css.vue72
-rw-r--r--src/client/pages/settings/general.vue8
-rw-r--r--src/client/pages/settings/index.vue5
-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.vue2
-rw-r--r--src/client/pages/user/index.vue2
-rw-r--r--src/client/pages/welcome.timeline.vue72
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;
+ }
+ }
}
}
}