diff --git a/locales/en.yml b/locales/en.yml index f9c326250acd8250dd9dbcaa32d225cdd5ec21b9..891fae3082c37e842659a4213512c4d7676ddea1 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -403,6 +403,10 @@ desktop/views/pages/user/user.friends.vue: loading: "Loading" no-users: "No users" +desktop/views/pages/user/user.header.vue: + is-remote: "This user is not a user of Misskey, so the information is not accurate." + view-remote: "See accurate information" + desktop/views/pages/user/user.home.vue: last-used-at: "Last used at" @@ -585,6 +589,8 @@ mobile/views/pages/user.vue: overview: "Overview" timeline: "Timeline" media: "Media" + is-remote: "This user is not a user of Misskey, so the information is not accurate." + view-remote: "See accurate information" mobile/views/pages/user/home.vue: recent-notes: "Recent notes" diff --git a/locales/ja.yml b/locales/ja.yml index 40d2a6d2190201ee9468a2f726f84632eec290c7..1f70f4203d25708df0634dbed1153c8c51909113 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -403,6 +403,10 @@ desktop/views/pages/user/user.friends.vue: loading: "èªã¿è¾¼ã¿ä¸" no-users: "よã話ã™ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã„ã¾ã›ã‚“" +desktop/views/pages/user/user.header.vue: + is-remote: "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯Misskeyã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã¯ãªã„ãŸã‚æƒ…å ±ãŒæ£ç¢ºã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + view-remote: "æ£ç¢ºãªæƒ…å ±ã‚’è¦‹ã‚‹" + desktop/views/pages/user/user.home.vue: last-used-at: "最終アクセス" @@ -585,6 +589,8 @@ mobile/views/pages/user.vue: overview: "概è¦" timeline: "タイムライン" media: "メディア" + is-remote: "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯Misskeyã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã¯ãªã„ãŸã‚æƒ…å ±ãŒæ£ç¢ºã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + view-remote: "æ£ç¢ºãªæƒ…å ±ã‚’è¦‹ã‚‹" mobile/views/pages/user/home.vue: recent-notes: "最近ã®æŠ•ç¨¿" diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue index e026820b3971ad27dddf19d985a0112846db8b1c..3ec0b92fe4db84cc2664df3ca53a2b7113dc5fc6 100644 --- a/src/client/app/desktop/views/pages/user/user.header.vue +++ b/src/client/app/desktop/views/pages/user/user.header.vue @@ -1,5 +1,6 @@ <template> <div class="header" :data-is-dark-background="user.bannerUrl != null"> + <div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote% <a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div> <div class="banner-container" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''"> <div class="banner" ref="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''" @click="onBannerClick"></div> </div> @@ -26,14 +27,18 @@ import Vue from 'vue'; export default Vue.extend({ props: ['user'], mounted() { - window.addEventListener('load', this.onScroll); - window.addEventListener('scroll', this.onScroll); - window.addEventListener('resize', this.onScroll); + if (this.user.bannerUrl) { + window.addEventListener('load', this.onScroll); + window.addEventListener('scroll', this.onScroll); + window.addEventListener('resize', this.onScroll); + } }, beforeDestroy() { - window.removeEventListener('load', this.onScroll); - window.removeEventListener('scroll', this.onScroll); - window.removeEventListener('resize', this.onScroll); + if (this.user.bannerUrl) { + window.removeEventListener('load', this.onScroll); + window.removeEventListener('scroll', this.onScroll); + window.removeEventListener('resize', this.onScroll); + } }, methods: { onScroll() { @@ -68,9 +73,21 @@ export default Vue.extend({ $footer-height = 58px overflow hidden - background #f7f7f7 + background #bfccd0 box-shadow 0 1px 1px rgba(0, 0, 0, 0.075) + > .is-remote + padding 16px + color #573c08 + background #fff0db + + > p + margin 0 auto + max-width 1024px + + > a + font-weight bold + &[data-is-dark-background] > .banner-container > .banner @@ -130,7 +147,7 @@ export default Vue.extend({ left 0 width 100% padding 0 0 8px 195px - color #656565 + color #5e6367 font-family '游ゴシック', 'YuGothic', 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', 'Meiryo', 'メイリオ', sans-serif > .name diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue index ea384308e9440f728d034ddeac0b31ecf02694f5..ee7aabb1fdce5bbc5a6e0a415cbe6ae639d8a5c4 100644 --- a/src/client/app/mobile/views/pages/user.vue +++ b/src/client/app/mobile/views/pages/user.vue @@ -2,6 +2,7 @@ <mk-ui> <span slot="header" v-if="!fetching">%fa:user% {{ user | userName }}</span> <main v-if="!fetching"> + <div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote% <a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div> <header> <div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=1024)` : ''"></div> <div class="body"> @@ -109,6 +110,18 @@ export default Vue.extend({ @import '~const.styl' main + > .is-remote + padding 16px + color #573c08 + background #fff0db + + > p + margin 0 auto + max-width 1024px + + > a + font-weight bold + > header > .banner diff --git a/src/models/user.ts b/src/models/user.ts index 1d23c21dbdc1c6cf64b1034f6a02dcdb7c41b2c4..5b1a2d357b288b027c67d466963139d29a04f399 100644 --- a/src/models/user.ts +++ b/src/models/user.ts @@ -88,6 +88,7 @@ export interface ILocalUser extends IUserBase { export interface IRemoteUser extends IUserBase { inbox: string; uri: string; + url?: string; publicKey: { id: string; publicKeyPem: string; diff --git a/src/remote/activitypub/objects/person.ts b/src/remote/activitypub/objects/person.ts index 6c060f879ce006477e7ab7fe2ada2952058379e8..b0539fd73b4e0cb73d706778b6bd27eeab4af410 100644 --- a/src/remote/activitypub/objects/person.ts +++ b/src/remote/activitypub/objects/person.ts @@ -96,7 +96,8 @@ export async function createPerson(value: any, resolver?: Resolver): Promise<IUs publicKeyPem: person.publicKey.publicKeyPem }, inbox: person.inbox, - uri: person.id + uri: person.id, + url: person.url }) as IRemoteUser; //#region アイコンã¨ãƒ˜ãƒƒãƒ€ãƒ¼ç”»åƒã‚’フェッãƒ