Compare commits
	
		
			13 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e615a3fdf3 | ||
| 
						 | 
					f670345d45 | ||
| 
						 | 
					3220d69a69 | ||
| 
						 | 
					c87a43bdba | ||
| 
						 | 
					fa6a7186e0 | ||
| 
						 | 
					34a5adf951 | ||
| 
						 | 
					4b3ece439e | ||
| 
						 | 
					10dc97c43f | ||
| 
						 | 
					2c59da36c2 | ||
| 
						 | 
					f457fb6067 | ||
| 
						 | 
					6843019481 | ||
| 
						 | 
					17cc5a9b95 | ||
| 
						 | 
					ecf44a4fc7 | 
@@ -1161,8 +1161,8 @@ mobile/views/pages/settings/settings.profile.vue:
 | 
				
			|||||||
  banner: "Banner"
 | 
					  banner: "Banner"
 | 
				
			||||||
  is-cat: "This account is a Cat"
 | 
					  is-cat: "This account is a Cat"
 | 
				
			||||||
  is-locked: "フォローを承認制にする"
 | 
					  is-locked: "フォローを承認制にする"
 | 
				
			||||||
  advanced: "その他"
 | 
					  advanced: "Advanced"
 | 
				
			||||||
  privacy: "プライバシー"
 | 
					  privacy: "Privacy"
 | 
				
			||||||
  save: "Update profile"
 | 
					  save: "Update profile"
 | 
				
			||||||
  saved: "Profile updated"
 | 
					  saved: "Profile updated"
 | 
				
			||||||
  uploading: "Uploading"
 | 
					  uploading: "Uploading"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -116,6 +116,10 @@ common:
 | 
				
			|||||||
  use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
 | 
					  use-contrast-reversi-stones: "リバーシのアイコンにコントラストを付ける"
 | 
				
			||||||
  verified-user: "公式アカウント"
 | 
					  verified-user: "公式アカウント"
 | 
				
			||||||
  disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
 | 
					  disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
 | 
				
			||||||
 | 
					  always-show-nsfw: "常に閲覧注意のメディアを表示する"
 | 
				
			||||||
 | 
					  always-mark-nsfw: "常にメディアを閲覧注意として投稿"
 | 
				
			||||||
 | 
					  show-full-acct: "ユーザー名のホストを省略しない"
 | 
				
			||||||
 | 
					  this-setting-is-this-device-only: "このデバイスのみ"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
 | 
					  do-not-use-in-production: 'これは開発ビルドです。本番環境で使用しないでください。'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	"name": "misskey",
 | 
						"name": "misskey",
 | 
				
			||||||
	"author": "syuilo <i@syuilo.com>",
 | 
						"author": "syuilo <i@syuilo.com>",
 | 
				
			||||||
	"version": "8.36.0",
 | 
						"version": "8.39.0",
 | 
				
			||||||
	"clientVersion": "1.0.9637",
 | 
						"clientVersion": "1.0.9650",
 | 
				
			||||||
	"codename": "nighthike",
 | 
						"codename": "nighthike",
 | 
				
			||||||
	"main": "./built/index.js",
 | 
						"main": "./built/index.js",
 | 
				
			||||||
	"private": true,
 | 
						"private": true,
 | 
				
			||||||
@@ -222,7 +222,7 @@
 | 
				
			|||||||
		"vuex-persistedstate": "2.5.4",
 | 
							"vuex-persistedstate": "2.5.4",
 | 
				
			||||||
		"web-push": "3.3.2",
 | 
							"web-push": "3.3.2",
 | 
				
			||||||
		"webfinger.js": "2.6.6",
 | 
							"webfinger.js": "2.6.6",
 | 
				
			||||||
		"webpack": "4.18.0",
 | 
							"webpack": "4.19.0",
 | 
				
			||||||
		"webpack-cli": "3.1.0",
 | 
							"webpack-cli": "3.1.0",
 | 
				
			||||||
		"websocket": "1.0.26",
 | 
							"websocket": "1.0.26",
 | 
				
			||||||
		"ws": "6.0.0",
 | 
							"ws": "6.0.0",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
<span class="mk-acct">
 | 
					<span class="mk-acct">
 | 
				
			||||||
	<span class="name">@{{ user.username }}</span>
 | 
						<span class="name">@{{ user.username }}</span>
 | 
				
			||||||
	<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail">@{{ user.host || host }}</span>
 | 
						<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail || $store.state.settings.showFullAcct">@{{ user.host || host }}</span>
 | 
				
			||||||
</span>
 | 
					</span>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="image.isSensitive && hide" @click="hide = false">
 | 
					<div class="ldwbgwstjsdgcjruamauqdrffetqudry" v-if="image.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
 | 
				
			||||||
	<div>
 | 
						<div>
 | 
				
			||||||
		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
 | 
							<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
 | 
				
			||||||
		<span>%i18n:@click-to-show%</span>
 | 
							<span>%i18n:@click-to-show%</span>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,7 @@
 | 
				
			|||||||
	</div>
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<!-- トランジションを有効にするとなぜかメモリリークする -->
 | 
						<!-- トランジションを有効にするとなぜかメモリリークする -->
 | 
				
			||||||
	<!--<transition-group name="mk-notes" class="transition">-->
 | 
						<transition-group name="mk-notes" class="notes transition" tag="div">
 | 
				
			||||||
	<div class="notes">
 | 
					 | 
				
			||||||
		<template v-for="(note, i) in _notes">
 | 
							<template v-for="(note, i) in _notes">
 | 
				
			||||||
			<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 | 
								<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 | 
				
			||||||
			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
 | 
								<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
 | 
				
			||||||
@@ -19,8 +18,7 @@
 | 
				
			|||||||
				<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 | 
									<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 | 
				
			||||||
			</p>
 | 
								</p>
 | 
				
			||||||
		</template>
 | 
							</template>
 | 
				
			||||||
	</div>
 | 
						</transition-group>
 | 
				
			||||||
	<!--</transition-group>-->
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<footer v-if="more">
 | 
						<footer v-if="more">
 | 
				
			||||||
		<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">
 | 
							<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,7 @@
 | 
				
			|||||||
<div class="mk-notifications">
 | 
					<div class="mk-notifications">
 | 
				
			||||||
	<div class="notifications" v-if="notifications.length != 0">
 | 
						<div class="notifications" v-if="notifications.length != 0">
 | 
				
			||||||
		<!-- トランジションを有効にするとなぜかメモリリークする -->
 | 
							<!-- トランジションを有効にするとなぜかメモリリークする -->
 | 
				
			||||||
		<!-- <transition-group name="mk-notifications" class="transition"> -->
 | 
							<transition-group name="mk-notifications" class="transition" tag="div">
 | 
				
			||||||
		<div>
 | 
					 | 
				
			||||||
			<template v-for="(notification, i) in _notifications">
 | 
								<template v-for="(notification, i) in _notifications">
 | 
				
			||||||
				<div class="notification" :class="notification.type" :key="notification.id">
 | 
									<div class="notification" :class="notification.type" :key="notification.id">
 | 
				
			||||||
					<mk-time :time="notification.createdAt"/>
 | 
										<mk-time :time="notification.createdAt"/>
 | 
				
			||||||
@@ -97,8 +96,7 @@
 | 
				
			|||||||
					<span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span>
 | 
										<span>%fa:angle-down%{{ _notifications[i + 1]._datetext }}</span>
 | 
				
			||||||
				</p>
 | 
									</p>
 | 
				
			||||||
			</template>
 | 
								</template>
 | 
				
			||||||
		</div>
 | 
							</transition-group>
 | 
				
			||||||
		<!-- </transition-group> -->
 | 
					 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications">
 | 
						<button class="more" :class="{ fetching: fetchingMoreNotifications }" v-if="moreNotifications" @click="fetchMoreNotifications" :disabled="fetchingMoreNotifications">
 | 
				
			||||||
		<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
 | 
							<template v-if="fetchingMoreNotifications">%fa:spinner .pulse .fw%</template>{{ fetchingMoreNotifications ? '%i18n:common.loading%' : '%i18n:@more%' }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@
 | 
				
			|||||||
		<h2>%i18n:@other%</h2>
 | 
							<h2>%i18n:@other%</h2>
 | 
				
			||||||
		<mk-switch v-model="$store.state.i.isBot" @change="onChangeIsBot" text="%i18n:@is-bot%"/>
 | 
							<mk-switch v-model="$store.state.i.isBot" @change="onChangeIsBot" text="%i18n:@is-bot%"/>
 | 
				
			||||||
		<mk-switch v-model="$store.state.i.isCat" @change="onChangeIsCat" text="%i18n:@is-cat%"/>
 | 
							<mk-switch v-model="$store.state.i.isCat" @change="onChangeIsCat" text="%i18n:@is-cat%"/>
 | 
				
			||||||
 | 
							<mk-switch v-model="alwaysMarkNsfw" text="%i18n:common.always-mark-nsfw%"/>
 | 
				
			||||||
	</section>
 | 
						</section>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
@@ -46,6 +47,12 @@ export default Vue.extend({
 | 
				
			|||||||
			birthday: null,
 | 
								birthday: null,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							alwaysMarkNsfw: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.i.settings.alwaysMarkNsfw; },
 | 
				
			||||||
 | 
								set(value) { (this as any).api('i/update', { alwaysMarkNsfw: value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
		this.name = this.$store.state.i.name || '';
 | 
							this.name = this.$store.state.i.name || '';
 | 
				
			||||||
		this.location = this.$store.state.i.profile.location;
 | 
							this.location = this.$store.state.i.profile.location;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		<section class="web" v-show="page == 'web'">
 | 
							<section class="web" v-show="page == 'web'">
 | 
				
			||||||
			<h1>%i18n:@behaviour%</h1>
 | 
								<h1>%i18n:@behaviour%</h1>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll" text="%i18n:@fetch-on-scroll%">
 | 
								<mk-switch v-model="fetchOnScroll" text="%i18n:@fetch-on-scroll%">
 | 
				
			||||||
				<span>%i18n:@fetch-on-scroll-desc%</span>
 | 
									<span>%i18n:@fetch-on-scroll-desc%</span>
 | 
				
			||||||
			</mk-switch>
 | 
								</mk-switch>
 | 
				
			||||||
			<mk-switch v-model="autoPopout" text="%i18n:@auto-popout%">
 | 
								<mk-switch v-model="autoPopout" text="%i18n:@auto-popout%">
 | 
				
			||||||
@@ -29,7 +29,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			<section>
 | 
								<section>
 | 
				
			||||||
				<header>%i18n:@note-visibility%</header>
 | 
									<header>%i18n:@note-visibility%</header>
 | 
				
			||||||
				<mk-switch v-model="$store.state.settings.rememberNoteVisibility" @change="onChangeRememberNoteVisibility" text="%i18n:@remember-note-visibility%"/>
 | 
									<mk-switch v-model="rememberNoteVisibility" text="%i18n:@remember-note-visibility%"/>
 | 
				
			||||||
				<section>
 | 
									<section>
 | 
				
			||||||
					<header>%i18n:@default-note-visibility%</header>
 | 
										<header>%i18n:@default-note-visibility%</header>
 | 
				
			||||||
					<ui-select v-model="defaultNoteVisibility">
 | 
										<ui-select v-model="defaultNoteVisibility">
 | 
				
			||||||
@@ -59,24 +59,26 @@
 | 
				
			|||||||
				<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
 | 
									<button class="ui" @click="updateWallpaper">%i18n:@choose-wallpaper%</button>
 | 
				
			||||||
				<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 | 
									<button class="ui" @click="deleteWallpaper">%i18n:@delete-wallpaper%</button>
 | 
				
			||||||
				<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
 | 
									<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
 | 
				
			||||||
				<mk-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/>
 | 
									<mk-switch v-model="circleIcons" text="%i18n:@circle-icons%"/>
 | 
				
			||||||
				<mk-switch v-model="$store.state.settings.contrastedAcct" @change="onChangeContrastedAcct" text="%i18n:@contrasted-acct%"/>
 | 
									<mk-switch v-model="contrastedAcct" text="%i18n:@contrasted-acct%"/>
 | 
				
			||||||
				<mk-switch v-model="$store.state.settings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/>
 | 
									<mk-switch v-model="showFullAcct" text="%i18n:common.show-full-acct%"/>
 | 
				
			||||||
				<mk-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi" text="%i18n:common.i-like-sushi%"/>
 | 
									<mk-switch v-model="gradientWindowHeader" text="%i18n:@gradient-window-header%"/>
 | 
				
			||||||
 | 
									<mk-switch v-model="iLikeSushi" text="%i18n:common.i-like-sushi%"/>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.showPostFormOnTopOfTl" @change="onChangeShowPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
 | 
								<mk-switch v-model="showPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.suggestRecentHashtags" @change="onChangeSuggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
 | 
								<mk-switch v-model="suggestRecentHashtags" text="%i18n:@suggest-recent-hashtags%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.showClockOnHeader" @change="onChangeShowClockOnHeader" text="%i18n:@show-clock-on-header%"/>
 | 
								<mk-switch v-model="showClockOnHeader" text="%i18n:@show-clock-on-header%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/>
 | 
								<mk-switch v-model="alwaysShowNsfw" text="%i18n:common.always-show-nsfw%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/>
 | 
								<mk-switch v-model="showReplyTarget" text="%i18n:@show-reply-target%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
 | 
								<mk-switch v-model="showMyRenotes" text="%i18n:@show-my-renotes%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes" text="%i18n:@show-local-renotes%"/>
 | 
								<mk-switch v-model="showRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%">
 | 
								<mk-switch v-model="showLocalRenotes" text="%i18n:@show-local-renotes%"/>
 | 
				
			||||||
 | 
								<mk-switch v-model="showMaps" text="%i18n:@show-maps%">
 | 
				
			||||||
				<span>%i18n:@show-maps-desc%</span>
 | 
									<span>%i18n:@show-maps-desc%</span>
 | 
				
			||||||
			</mk-switch>
 | 
								</mk-switch>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
 | 
								<mk-switch v-model="disableAnimatedMfm" text="%i18n:common.disable-animated-mfm%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
 | 
								<mk-switch v-model="games_reversi_showBoardLabels" text="%i18n:common.show-reversi-board-labels%"/>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones" text="%i18n:common.use-contrast-reversi-stones%"/>
 | 
								<mk-switch v-model="games_reversi_useContrastStones" text="%i18n:common.use-contrast-reversi-stones%"/>
 | 
				
			||||||
		</section>
 | 
							</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<section class="web" v-show="page == 'web'">
 | 
							<section class="web" v-show="page == 'web'">
 | 
				
			||||||
@@ -98,7 +100,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		<section class="web" v-show="page == 'web'">
 | 
							<section class="web" v-show="page == 'web'">
 | 
				
			||||||
			<h1>%i18n:@mobile%</h1>
 | 
								<h1>%i18n:@mobile%</h1>
 | 
				
			||||||
			<mk-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile" text="%i18n:@disable-via-mobile%"/>
 | 
								<mk-switch v-model="disableViaMobile" text="%i18n:@disable-via-mobile%"/>
 | 
				
			||||||
		</section>
 | 
							</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<section class="web" v-show="page == 'web'">
 | 
							<section class="web" v-show="page == 'web'">
 | 
				
			||||||
@@ -255,11 +257,6 @@ export default Vue.extend({
 | 
				
			|||||||
			set(value) { this.$store.commit('device/set', { key: 'apiViaStream', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'apiViaStream', value }); }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		defaultNoteVisibility: {
 | 
					 | 
				
			||||||
			get() { return this.$store.state.settings.defaultNoteVisibility; },
 | 
					 | 
				
			||||||
			set(value) { this.$store.commit('settings/set', { key: 'defaultNoteVisibility', value }); }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		autoPopout: {
 | 
							autoPopout: {
 | 
				
			||||||
			get() { return this.$store.state.device.autoPopout; },
 | 
								get() { return this.$store.state.device.autoPopout; },
 | 
				
			||||||
			set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
 | 
				
			||||||
@@ -298,7 +295,112 @@ export default Vue.extend({
 | 
				
			|||||||
		enableExperimentalFeatures: {
 | 
							enableExperimentalFeatures: {
 | 
				
			||||||
			get() { return this.$store.state.device.enableExperimentalFeatures; },
 | 
								get() { return this.$store.state.device.enableExperimentalFeatures; },
 | 
				
			||||||
			set(value) { this.$store.commit('device/set', { key: 'enableExperimentalFeatures', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'enableExperimentalFeatures', value }); }
 | 
				
			||||||
		}
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							alwaysShowNsfw: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.device.alwaysShowNsfw; },
 | 
				
			||||||
 | 
								set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							fetchOnScroll: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.fetchOnScroll; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							rememberNoteVisibility: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.rememberNoteVisibility; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'rememberNoteVisibility', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							defaultNoteVisibility: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.defaultNoteVisibility; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'defaultNoteVisibility', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showReplyTarget: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showReplyTarget; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showReplyTarget', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showMyRenotes: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showMyRenotes; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showMyRenotes', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showRenotedMyNotes: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showRenotedMyNotes; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showRenotedMyNotes', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showLocalRenotes: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showLocalRenotes; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showLocalRenotes', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showPostFormOnTopOfTl: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showPostFormOnTopOfTl; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showPostFormOnTopOfTl', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							suggestRecentHashtags: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.suggestRecentHashtags; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'suggestRecentHashtags', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showClockOnHeader: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showClockOnHeader; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showClockOnHeader', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showMaps: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showMaps; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showMaps', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							circleIcons: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.circleIcons; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							contrastedAcct: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.contrastedAcct; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showFullAcct: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showFullAcct; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showFullAcct', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							iLikeSushi: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.iLikeSushi; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							games_reversi_showBoardLabels: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.games.reversi.showBoardLabels; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							games_reversi_useContrastStones: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.games.reversi.useContrastStones; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useContrastStones', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							disableAnimatedMfm: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.disableAnimatedMfm; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							disableViaMobile: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.disableViaMobile; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							gradientWindowHeader: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.gradientWindowHeader; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'gradientWindowHeader', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
		(this as any).os.getMeta().then(meta => {
 | 
							(this as any).os.getMeta().then(meta => {
 | 
				
			||||||
@@ -327,125 +429,11 @@ export default Vue.extend({
 | 
				
			|||||||
				wallpaperId: null
 | 
									wallpaperId: null
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		onChangeFetchOnScroll(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'fetchOnScroll',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeRememberNoteVisibility(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'rememberNoteVisibility',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeAutoWatch(v) {
 | 
							onChangeAutoWatch(v) {
 | 
				
			||||||
			(this as any).api('i/update', {
 | 
								(this as any).api('i/update', {
 | 
				
			||||||
				autoWatch: v
 | 
									autoWatch: v
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		onChangeDark(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'dark',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeShowPostFormOnTopOfTl(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showPostFormOnTopOfTl',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeSuggestRecentHashtags(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'suggestRecentHashtags',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeShowClockOnHeader(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showClockOnHeader',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeShowReplyTarget(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showReplyTarget',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeShowMyRenotes(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showMyRenotes',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeShowRenotedMyNotes(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showRenotedMyNotes',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeShowLocalRenotes(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showLocalRenotes',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeShowMaps(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showMaps',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeCircleIcons(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'circleIcons',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeContrastedAcct(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'contrastedAcct',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeILikeSushi(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'iLikeSushi',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeReversiBoardLabels(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'games.reversi.showBoardLabels',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeUseContrastReversiStones(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'games.reversi.useContrastStones',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeDisableAnimatedMfm(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'disableAnimatedMfm',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeGradientWindowHeader(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'gradientWindowHeader',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		onChangeDisableViaMobile(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'disableViaMobile',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		checkForUpdate() {
 | 
							checkForUpdate() {
 | 
				
			||||||
			this.checkingForUpdate = true;
 | 
								this.checkingForUpdate = true;
 | 
				
			||||||
			checkForUpdate((this as any).os, true, true).then(newer => {
 | 
								checkForUpdate((this as any).os, true, true).then(newer => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div class="qjewsnkgzzxlxtzncydssfbgjibiehcy" v-if="image.isSensitive && hide" @click="hide = false">
 | 
					<div class="qjewsnkgzzxlxtzncydssfbgjibiehcy" v-if="image.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
 | 
				
			||||||
	<div>
 | 
						<div>
 | 
				
			||||||
		<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
 | 
							<b>%fa:exclamation-triangle% %i18n:@sensitive%</b>
 | 
				
			||||||
		<span>%i18n:@click-to-show%</span>
 | 
							<span>%i18n:@click-to-show%</span>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,8 +14,7 @@
 | 
				
			|||||||
	</div>
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<!-- トランジションを有効にするとなぜかメモリリークする -->
 | 
						<!-- トランジションを有効にするとなぜかメモリリークする -->
 | 
				
			||||||
	<!-- <transition-group name="mk-notes" class="transition"> -->
 | 
						<transition-group name="mk-notes" class="transition" tag="div">
 | 
				
			||||||
	<div class="transition">
 | 
					 | 
				
			||||||
		<template v-for="(note, i) in _notes">
 | 
							<template v-for="(note, i) in _notes">
 | 
				
			||||||
			<mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 | 
								<mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/>
 | 
				
			||||||
			<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
 | 
								<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
 | 
				
			||||||
@@ -23,8 +22,7 @@
 | 
				
			|||||||
				<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 | 
									<span>%fa:angle-down%{{ _notes[i + 1]._datetext }}</span>
 | 
				
			||||||
			</p>
 | 
								</p>
 | 
				
			||||||
		</template>
 | 
							</template>
 | 
				
			||||||
	</div>
 | 
						</transition-group>
 | 
				
			||||||
	<!-- </transition-group> -->
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<footer v-if="more">
 | 
						<footer v-if="more">
 | 
				
			||||||
		<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">
 | 
							<button @click="loadMore" :disabled="moreFetching" :style="{ cursor: moreFetching ? 'wait' : 'pointer' }">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ export default Vue.extend({
 | 
				
			|||||||
	$height = 78px
 | 
						$height = 78px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	position fixed
 | 
						position fixed
 | 
				
			||||||
	z-index 1024
 | 
						z-index 10000
 | 
				
			||||||
	left 0
 | 
						left 0
 | 
				
			||||||
	right 0
 | 
						right 0
 | 
				
			||||||
	width 100%
 | 
						width 100%
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,21 +12,23 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				<section>
 | 
									<section>
 | 
				
			||||||
					<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
 | 
										<ui-switch v-model="darkmode">%i18n:@dark-mode%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons">%i18n:@circle-icons%</ui-switch>
 | 
										<ui-switch v-model="circleIcons">%i18n:@circle-icons%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.contrastedAcct" @change="onChangeContrastedAcct">%i18n:@contrasted-acct%</ui-switch>
 | 
										<ui-switch v-model="contrastedAcct">%i18n:@contrasted-acct%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.iLikeSushi" @change="onChangeILikeSushi">%i18n:common.i-like-sushi%</ui-switch>
 | 
										<ui-switch v-model="showFullAcct">%i18n:common.show-full-acct%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.disableAnimatedMfm" @change="onChangeDisableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
 | 
										<ui-switch v-model="iLikeSushi">%i18n:common.i-like-sushi%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.games.reversi.showBoardLabels" @change="onChangeReversiBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
 | 
										<ui-switch v-model="disableAnimatedMfm">%i18n:common.disable-animated-mfm%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.games.reversi.useContrastStones" @change="onChangeUseContrastReversiStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
 | 
										<ui-switch v-model="alwaysShowNsfw">%i18n:common.always-show-nsfw% (%i18n:common.this-setting-is-this-device-only%)</ui-switch>
 | 
				
			||||||
 | 
										<ui-switch v-model="games_reversi_showBoardLabels">%i18n:common.show-reversi-board-labels%</ui-switch>
 | 
				
			||||||
 | 
										<ui-switch v-model="games_reversi_useContrastStones">%i18n:common.use-contrast-reversi-stones%</ui-switch>
 | 
				
			||||||
				</section>
 | 
									</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				<section>
 | 
									<section>
 | 
				
			||||||
					<header>%i18n:@timeline%</header>
 | 
										<header>%i18n:@timeline%</header>
 | 
				
			||||||
					<div>
 | 
										<div>
 | 
				
			||||||
						<ui-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget">%i18n:@show-reply-target%</ui-switch>
 | 
											<ui-switch v-model="showReplyTarget">%i18n:@show-reply-target%</ui-switch>
 | 
				
			||||||
						<ui-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes">%i18n:@show-my-renotes%</ui-switch>
 | 
											<ui-switch v-model="showMyRenotes">%i18n:@show-my-renotes%</ui-switch>
 | 
				
			||||||
						<ui-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
 | 
											<ui-switch v-model="showRenotedMyNotes">%i18n:@show-renoted-my-notes%</ui-switch>
 | 
				
			||||||
						<ui-switch v-model="$store.state.settings.showLocalRenotes" @change="onChangeShowLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
 | 
											<ui-switch v-model="showLocalRenotes">%i18n:@show-local-renotes%</ui-switch>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</section>
 | 
									</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,16 +49,16 @@
 | 
				
			|||||||
				<div slot="title">%fa:cog% %i18n:@behavior%</div>
 | 
									<div slot="title">%fa:cog% %i18n:@behavior%</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				<section>
 | 
									<section>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch>
 | 
										<ui-switch v-model="fetchOnScroll">%i18n:@fetch-on-scroll%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
 | 
										<ui-switch v-model="disableViaMobile">%i18n:@disable-via-mobile%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="loadRawImages">%i18n:@load-raw-images%</ui-switch>
 | 
										<ui-switch v-model="loadRawImages">%i18n:@load-raw-images%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.loadRemoteMedia" @change="onChangeLoadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
 | 
										<ui-switch v-model="loadRemoteMedia">%i18n:@load-remote-media%</ui-switch>
 | 
				
			||||||
					<ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch>
 | 
										<ui-switch v-model="lightmode">%i18n:@i-am-under-limited-internet%</ui-switch>
 | 
				
			||||||
				</section>
 | 
									</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				<section>
 | 
									<section>
 | 
				
			||||||
					<header>%i18n:@note-visibility%</header>
 | 
										<header>%i18n:@note-visibility%</header>
 | 
				
			||||||
					<ui-switch v-model="$store.state.settings.rememberNoteVisibility" @change="onChangeRememberNoteVisibility">%i18n:@remember-note-visibility%</ui-switch>
 | 
										<ui-switch v-model="rememberNoteVisibility">%i18n:@remember-note-visibility%</ui-switch>
 | 
				
			||||||
					<section>
 | 
										<section>
 | 
				
			||||||
						<header>%i18n:@default-note-visibility%</header>
 | 
											<header>%i18n:@default-note-visibility%</header>
 | 
				
			||||||
						<ui-select v-model="defaultNoteVisibility">
 | 
											<ui-select v-model="defaultNoteVisibility">
 | 
				
			||||||
@@ -166,6 +168,11 @@ export default Vue.extend({
 | 
				
			|||||||
			set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							alwaysShowNsfw: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.device.alwaysShowNsfw; },
 | 
				
			||||||
 | 
								set(value) { this.$store.commit('device/set', { key: 'alwaysShowNsfw', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		postStyle: {
 | 
							postStyle: {
 | 
				
			||||||
			get() { return this.$store.state.device.postStyle; },
 | 
								get() { return this.$store.state.device.postStyle; },
 | 
				
			||||||
			set(value) { this.$store.commit('device/set', { key: 'postStyle', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'postStyle', value }); }
 | 
				
			||||||
@@ -176,11 +183,6 @@ export default Vue.extend({
 | 
				
			|||||||
			set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		defaultNoteVisibility: {
 | 
					 | 
				
			||||||
			get() { return this.$store.state.settings.defaultNoteVisibility; },
 | 
					 | 
				
			||||||
			set(value) { this.$store.commit('settings/set', { key: 'defaultNoteVisibility', value }); }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		lightmode: {
 | 
							lightmode: {
 | 
				
			||||||
			get() { return this.$store.state.device.lightmode; },
 | 
								get() { return this.$store.state.device.lightmode; },
 | 
				
			||||||
			set(value) { this.$store.commit('device/set', { key: 'lightmode', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'lightmode', value }); }
 | 
				
			||||||
@@ -200,6 +202,86 @@ export default Vue.extend({
 | 
				
			|||||||
			get() { return this.$store.state.device.enableSounds; },
 | 
								get() { return this.$store.state.device.enableSounds; },
 | 
				
			||||||
			set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
 | 
								set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							fetchOnScroll: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.fetchOnScroll; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							rememberNoteVisibility: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.rememberNoteVisibility; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'rememberNoteVisibility', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							disableViaMobile: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.disableViaMobile; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							loadRemoteMedia: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.loadRemoteMedia; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'loadRemoteMedia', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							circleIcons: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.circleIcons; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							contrastedAcct: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.contrastedAcct; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showFullAcct: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showFullAcct; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showFullAcct', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							iLikeSushi: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.iLikeSushi; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							games_reversi_showBoardLabels: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.games.reversi.showBoardLabels; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							games_reversi_useContrastStones: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.games.reversi.useContrastStones; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useContrastStones', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							disableAnimatedMfm: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.disableAnimatedMfm; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'disableAnimatedMfm', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showReplyTarget: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showReplyTarget; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showReplyTarget', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showMyRenotes: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showMyRenotes; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showMyRenotes', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showRenotedMyNotes: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showRenotedMyNotes; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showRenotedMyNotes', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							showLocalRenotes: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.showLocalRenotes; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'showLocalRenotes', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							defaultNoteVisibility: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.settings.defaultNoteVisibility; },
 | 
				
			||||||
 | 
								set(value) { this.$store.dispatch('settings/set', { key: 'defaultNoteVisibility', value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
@@ -211,104 +293,6 @@ export default Vue.extend({
 | 
				
			|||||||
			(this as any).os.signout();
 | 
								(this as any).os.signout();
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		onChangeFetchOnScroll(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'fetchOnScroll',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeRememberNoteVisibility(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'rememberNoteVisibility',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeDisableViaMobile(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'disableViaMobile',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeLoadRemoteMedia(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'loadRemoteMedia',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeCircleIcons(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'circleIcons',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeContrastedAcct(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'contrastedAcct',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeILikeSushi(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'iLikeSushi',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeReversiBoardLabels(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'games.reversi.showBoardLabels',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeUseContrastReversiStones(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'games.reversi.useContrastStones',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeDisableAnimatedMfm(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'disableAnimatedMfm',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeShowReplyTarget(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showReplyTarget',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeShowMyRenotes(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showMyRenotes',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeShowRenotedMyNotes(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showRenotedMyNotes',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		onChangeShowLocalRenotes(v) {
 | 
					 | 
				
			||||||
			this.$store.dispatch('settings/set', {
 | 
					 | 
				
			||||||
				key: 'showLocalRenotes',
 | 
					 | 
				
			||||||
				value: v
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		checkForUpdate() {
 | 
							checkForUpdate() {
 | 
				
			||||||
			this.checkingForUpdate = true;
 | 
								this.checkingForUpdate = true;
 | 
				
			||||||
			checkForUpdate((this as any).os, true, true).then(newer => {
 | 
								checkForUpdate((this as any).os, true, true).then(newer => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,6 +49,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		<div>
 | 
							<div>
 | 
				
			||||||
			<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
 | 
								<ui-switch v-model="isCat" @change="save(false)">%i18n:@is-cat%</ui-switch>
 | 
				
			||||||
 | 
								<ui-switch v-model="alwaysMarkNsfw">%i18n:common.always-mark-nsfw%</ui-switch>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</section>
 | 
						</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,6 +86,13 @@ export default Vue.extend({
 | 
				
			|||||||
		};
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							alwaysMarkNsfw: {
 | 
				
			||||||
 | 
								get() { return this.$store.state.i.settings.alwaysMarkNsfw; },
 | 
				
			||||||
 | 
								set(value) { (this as any).api('i/update', { alwaysMarkNsfw: value }); }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
		this.name = this.$store.state.i.name || '';
 | 
							this.name = this.$store.state.i.name || '';
 | 
				
			||||||
		this.username = this.$store.state.i.username;
 | 
							this.username = this.$store.state.i.username;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@ const defaultSettings = {
 | 
				
			|||||||
	showClockOnHeader: true,
 | 
						showClockOnHeader: true,
 | 
				
			||||||
	circleIcons: true,
 | 
						circleIcons: true,
 | 
				
			||||||
	contrastedAcct: true,
 | 
						contrastedAcct: true,
 | 
				
			||||||
 | 
						showFullAcct: false,
 | 
				
			||||||
	gradientWindowHeader: false,
 | 
						gradientWindowHeader: false,
 | 
				
			||||||
	showReplyTarget: true,
 | 
						showReplyTarget: true,
 | 
				
			||||||
	showMyRenotes: true,
 | 
						showMyRenotes: true,
 | 
				
			||||||
@@ -47,6 +48,7 @@ const defaultDeviceSettings = {
 | 
				
			|||||||
	debug: false,
 | 
						debug: false,
 | 
				
			||||||
	lightmode: false,
 | 
						lightmode: false,
 | 
				
			||||||
	loadRawImages: false,
 | 
						loadRawImages: false,
 | 
				
			||||||
 | 
						alwaysShowNsfw: false,
 | 
				
			||||||
	postStyle: 'standard',
 | 
						postStyle: 'standard',
 | 
				
			||||||
	mobileNotificationPosition: 'bottom'
 | 
						mobileNotificationPosition: 'bottom'
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,7 +102,10 @@ export interface ILocalUser extends IUserBase {
 | 
				
			|||||||
	twoFactorEnabled: boolean;
 | 
						twoFactorEnabled: boolean;
 | 
				
			||||||
	twoFactorTempSecret?: string;
 | 
						twoFactorTempSecret?: string;
 | 
				
			||||||
	clientSettings: any;
 | 
						clientSettings: any;
 | 
				
			||||||
	settings: any;
 | 
						settings: {
 | 
				
			||||||
 | 
							autoWatch: boolean;
 | 
				
			||||||
 | 
							alwaysMarkNsfw?: boolean;
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
	hasUnreadNotification: boolean;
 | 
						hasUnreadNotification: boolean;
 | 
				
			||||||
	hasUnreadMessagingMessage: boolean;
 | 
						hasUnreadMessagingMessage: boolean;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,8 @@ export const meta = {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}),
 | 
							}),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		isSensitive: $.bool.optional.note({
 | 
							isSensitive: $.bool.optional.nullable.note({
 | 
				
			||||||
			default: false,
 | 
								default: null,
 | 
				
			||||||
			desc: {
 | 
								desc: {
 | 
				
			||||||
				'ja-JP': 'このメディアが「閲覧注意」(NSFW)かどうか',
 | 
									'ja-JP': 'このメディアが「閲覧注意」(NSFW)かどうか',
 | 
				
			||||||
				'en-US': 'Whether this media is NSFW'
 | 
									'en-US': 'Whether this media is NSFW'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -84,6 +84,12 @@ export const meta = {
 | 
				
			|||||||
				'ja-JP': '投稿の自動ウォッチをするか否か'
 | 
									'ja-JP': '投稿の自動ウォッチをするか否か'
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}),
 | 
							}),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							alwaysMarkNsfw: $.bool.optional.note({
 | 
				
			||||||
 | 
								desc: {
 | 
				
			||||||
 | 
									'ja-JP': 'アップロードするメディアをデフォルトで「閲覧注意」として設定するか'
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -106,6 +112,7 @@ export default async (params: any, user: ILocalUser, app: IApp) => new Promise(a
 | 
				
			|||||||
	if (typeof ps.isBot == 'boolean') updates.isBot = ps.isBot;
 | 
						if (typeof ps.isBot == 'boolean') updates.isBot = ps.isBot;
 | 
				
			||||||
	if (typeof ps.isCat == 'boolean') updates.isCat = ps.isCat;
 | 
						if (typeof ps.isCat == 'boolean') updates.isCat = ps.isCat;
 | 
				
			||||||
	if (typeof ps.autoWatch == 'boolean') updates['settings.autoWatch'] = ps.autoWatch;
 | 
						if (typeof ps.autoWatch == 'boolean') updates['settings.autoWatch'] = ps.autoWatch;
 | 
				
			||||||
 | 
						if (typeof ps.alwaysMarkNsfw == 'boolean') updates['settings.alwaysMarkNsfw'] = ps.alwaysMarkNsfw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps.avatarId) {
 | 
						if (ps.avatarId) {
 | 
				
			||||||
		const avatar = await DriveFile.findOne({
 | 
							const avatar = await DriveFile.findOne({
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,7 +153,7 @@ export default async function(
 | 
				
			|||||||
	isLink: boolean = false,
 | 
						isLink: boolean = false,
 | 
				
			||||||
	url: string = null,
 | 
						url: string = null,
 | 
				
			||||||
	uri: string = null,
 | 
						uri: string = null,
 | 
				
			||||||
	sensitive = false
 | 
						sensitive: boolean = null
 | 
				
			||||||
): Promise<IDriveFile> {
 | 
					): Promise<IDriveFile> {
 | 
				
			||||||
	// Calc md5 hash
 | 
						// Calc md5 hash
 | 
				
			||||||
	const calcHash = new Promise<string>((res, rej) => {
 | 
						const calcHash = new Promise<string>((res, rej) => {
 | 
				
			||||||
@@ -329,7 +329,13 @@ export default async function(
 | 
				
			|||||||
		properties: properties,
 | 
							properties: properties,
 | 
				
			||||||
		withoutChunks: isLink,
 | 
							withoutChunks: isLink,
 | 
				
			||||||
		isRemote: isLink,
 | 
							isRemote: isLink,
 | 
				
			||||||
		isSensitive: sensitive
 | 
							isSensitive: (sensitive !== null && sensitive !== undefined)
 | 
				
			||||||
 | 
								? sensitive
 | 
				
			||||||
 | 
								: isLocalUser(user)
 | 
				
			||||||
 | 
									? user.settings.alwaysMarkNsfw
 | 
				
			||||||
 | 
										? true
 | 
				
			||||||
 | 
										: false
 | 
				
			||||||
 | 
									: false
 | 
				
			||||||
	} as IMetadata;
 | 
						} as IMetadata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (url !== null) {
 | 
						if (url !== null) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user