summaryrefslogtreecommitdiff
path: root/packages/frontend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-01-16 11:21:04 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-01-16 11:21:04 +0900
commitfe0bb21b37833e33f44b8e6ef697ac3259518b0c (patch)
treec803e7feb2490bdf3a430e9bbd9a92f4fe58be78 /packages/frontend/src
parentenhance(client): add timeline flash preset (diff)
downloadmisskey-fe0bb21b37833e33f44b8e6ef697ac3259518b0c.tar.gz
misskey-fe0bb21b37833e33f44b8e6ef697ac3259518b0c.tar.bz2
misskey-fe0bb21b37833e33f44b8e6ef697ac3259518b0c.zip
enhance(client): make possible to hide ads
Resolve #9590 Resolve #8996
Diffstat (limited to 'packages/frontend/src')
-rw-r--r--packages/frontend/src/components/global/MkAd.vue12
-rw-r--r--packages/frontend/src/pages/admin/roles.editor.vue21
-rw-r--r--packages/frontend/src/pages/admin/roles.vue9
-rw-r--r--packages/frontend/src/store.ts6
4 files changed, 46 insertions, 2 deletions
diff --git a/packages/frontend/src/components/global/MkAd.vue b/packages/frontend/src/components/global/MkAd.vue
index a1ac682a45..a518484a5d 100644
--- a/packages/frontend/src/components/global/MkAd.vue
+++ b/packages/frontend/src/components/global/MkAd.vue
@@ -1,5 +1,5 @@
<template>
-<div v-if="chosen" :class="$style.root">
+<div v-if="chosen && !shouldHide" :class="$style.root">
<div v-if="!showMenu" :class="[$style.main, $style['form_' + chosen.place]]">
<a :href="chosen.url" target="_blank" :class="$style.link">
<img :src="chosen.imageUrl" :class="$style.img">
@@ -11,6 +11,7 @@
<div>Ads by {{ host }}</div>
<!--<MkButton class="button" primary>{{ $ts._ad.like }}</MkButton>-->
<MkButton v-if="chosen.ratio !== 0" :class="$style.menuButton" @click="reduceFrequency">{{ $ts._ad.reduceFrequencyOfThisAd }}</MkButton>
+ <MkButton v-if="$i && $i.policies.canHideAds" :class="$style.menuButton" @click="hide">{{ $ts._ad.hide }}</MkButton>
<button class="_textButton" @click="toggleMenu">{{ $ts._ad.back }}</button>
</div>
</div>
@@ -25,6 +26,7 @@ import { host } from '@/config';
import MkButton from '@/components/MkButton.vue';
import { defaultStore } from '@/store';
import * as os from '@/os';
+import { $i } from '@/account';
type Ad = (typeof instance)['ads'][number];
@@ -81,6 +83,7 @@ const choseAd = (): Ad | null => {
};
const chosen = ref(choseAd());
+let shouldHide = $ref(chosen.value && $i && $i.policies.canHideAds && defaultStore.state.hiddenAds.includes(chosen.value.id));
function reduceFrequency(): void {
if (chosen.value == null) return;
@@ -90,6 +93,13 @@ function reduceFrequency(): void {
chosen.value = choseAd();
showMenu.value = false;
}
+
+function hide() {
+ if (chosen.value == null) return;
+ defaultStore.push('hiddenAds', chosen.value.id);
+ os.success();
+ shouldHide = true;
+}
</script>
<style lang="scss" module>
diff --git a/packages/frontend/src/pages/admin/roles.editor.vue b/packages/frontend/src/pages/admin/roles.editor.vue
index e5f4675c19..ae5ef39bae 100644
--- a/packages/frontend/src/pages/admin/roles.editor.vue
+++ b/packages/frontend/src/pages/admin/roles.editor.vue
@@ -335,6 +335,26 @@
</MkRange>
</div>
</MkFolder>
+
+ <MkFolder v-if="matchQuery([i18n.ts._role._options.canHideAds, 'canHideAds'])">
+ <template #label>{{ i18n.ts._role._options.canHideAds }}</template>
+ <template #suffix>
+ <span v-if="policies.canHideAds.useDefault" :class="$style.useDefaultLabel">{{ i18n.ts._role.useBaseValue }}</span>
+ <span v-else>{{ policies.canHideAds.value ? i18n.ts.yes : i18n.ts.no }}</span>
+ <span :class="$style.priorityIndicator"><i :class="getPriorityIcon(policies.canHideAds)"></i></span>
+ </template>
+ <div class="_gaps">
+ <MkSwitch v-model="policies.canHideAds.useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts._role.useBaseValue }}</template>
+ </MkSwitch>
+ <MkSwitch v-model="policies.canHideAds.value" :disabled="policies.canHideAds.useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ <MkRange v-model="policies.canHideAds.priority" :min="0" :max="2" :step="1" easing :text-converter="(v) => v === 0 ? i18n.ts._role._priority.low : v === 1 ? i18n.ts._role._priority.middle : v === 2 ? i18n.ts._role._priority.high : ''">
+ <template #label>{{ i18n.ts._role.priority }}</template>
+ </MkRange>
+ </div>
+ </MkFolder>
</div>
</FormSlot>
@@ -376,6 +396,7 @@ const ROLE_POLICIES = [
'canPublicNote',
'canInvite',
'canManageCustomEmojis',
+ 'canHideAds',
'driveCapacityMb',
'pinLimit',
'antennaLimit',
diff --git a/packages/frontend/src/pages/admin/roles.vue b/packages/frontend/src/pages/admin/roles.vue
index f074069df0..6e0c038982 100644
--- a/packages/frontend/src/pages/admin/roles.vue
+++ b/packages/frontend/src/pages/admin/roles.vue
@@ -121,6 +121,14 @@
</MkInput>
</MkFolder>
+ <MkFolder>
+ <template #label>{{ i18n.ts._role._options.canHideAds }}</template>
+ <template #suffix>{{ policies.canHideAds ? i18n.ts.yes : i18n.ts.no }}</template>
+ <MkSwitch v-model="policies.canHideAds">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ </MkFolder>
+
<MkButton primary rounded @click="updateBaseRole">{{ i18n.ts.save }}</MkButton>
</div>
</MkFolder>
@@ -156,6 +164,7 @@ const ROLE_POLICIES = [
'canPublicNote',
'canInvite',
'canManageCustomEmojis',
+ 'canHideAds',
'driveCapacityMb',
'pinLimit',
'antennaLimit',
diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts
index b2bf8db646..b29d9355ba 100644
--- a/packages/frontend/src/store.ts
+++ b/packages/frontend/src/store.ts
@@ -86,6 +86,10 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'account',
default: [] as string[],
},
+ hiddenAds: {
+ where: 'account',
+ default: [] as string[],
+ },
menu: {
where: 'deviceAccount',
@@ -293,10 +297,10 @@ interface Watcher {
/**
* 常にメモリにロードしておく必要がないような設定情報を保管するストレージ(非リアクティブ)
*/
+import { miLocalStorage } from './local-storage';
import lightTheme from '@/themes/l-light.json5';
import darkTheme from '@/themes/d-green-lime.json5';
import { Note, UserDetailed } from 'misskey-js/built/entities';
-import { miLocalStorage } from './local-storage';
export class ColdDeviceStorage {
public static default = {