diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2023-10-08 17:56:44 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-08 17:56:44 +0900 |
| commit | 4bbfc98883c5d26a8958f37928909579b888143d (patch) | |
| tree | 4b3bc796c96b8b2c5c541f2c37eae2433046e195 /packages/frontend/src | |
| parent | perf(backend): improve hybrid-timeline performance (diff) | |
| download | misskey-4bbfc98883c5d26a8958f37928909579b888143d.tar.gz misskey-4bbfc98883c5d26a8958f37928909579b888143d.tar.bz2 misskey-4bbfc98883c5d26a8958f37928909579b888143d.zip | |
Feat: タイムライン更新中に広告を挿入 (#11989)
* Feat: タイムライン更新中に広告を挿入
* 翻訳を変更
* Run api extractor
* fix api extractor
* Update locales/ja-JP.yml
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
* confirm -> mkinfo
* MkInputにmin, maxを指定できるように
* 負の値が指定されたら何もしない
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/frontend/src')
| -rw-r--r-- | packages/frontend/src/components/MkInput.vue | 4 | ||||
| -rw-r--r-- | packages/frontend/src/components/MkTimeline.vue | 9 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/settings.vue | 28 |
3 files changed, 37 insertions, 4 deletions
diff --git a/packages/frontend/src/components/MkInput.vue b/packages/frontend/src/components/MkInput.vue index 315ce958c5..9490d80428 100644 --- a/packages/frontend/src/components/MkInput.vue +++ b/packages/frontend/src/components/MkInput.vue @@ -23,6 +23,8 @@ SPDX-License-Identifier: AGPL-3.0-only :spellcheck="spellcheck" :step="step" :list="id" + :min="min" + :max="max" @focus="focused = true" @blur="focused = false" @keydown="onKeydown($event)" @@ -59,6 +61,8 @@ const props = defineProps<{ spellcheck?: boolean; step?: any; datalist?: string[]; + min?: string; + max?: string; inline?: boolean; debounce?: boolean; manualSave?: boolean; diff --git a/packages/frontend/src/components/MkTimeline.vue b/packages/frontend/src/components/MkTimeline.vue index c4a34667ef..4e71c048b2 100644 --- a/packages/frontend/src/components/MkTimeline.vue +++ b/packages/frontend/src/components/MkTimeline.vue @@ -13,6 +13,7 @@ import MkNotes from '@/components/MkNotes.vue'; import { useStream } from '@/stream.js'; import * as sound from '@/scripts/sound.js'; import { $i } from '@/account.js'; +import { instance } from '@/instance.js'; import { defaultStore } from '@/store.js'; const props = withDefaults(defineProps<{ @@ -38,7 +39,15 @@ provide('inChannel', computed(() => props.src === 'channel')); const tlComponent: InstanceType<typeof MkNotes> = $ref(); +let tlNotesCount = 0; + const prepend = note => { + tlNotesCount++; + + if (instance.notesPerOneAd > 0 && tlNotesCount % instance.notesPerOneAd === 0) { + note._shouldInsertAd_ = true; + } + tlComponent.pagingComponent?.prepend(note); emit('note'); diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue index 2e3f1611dc..2db0dd5c3a 100644 --- a/packages/frontend/src/pages/admin/settings.vue +++ b/packages/frontend/src/pages/admin/settings.vue @@ -107,6 +107,22 @@ SPDX-License-Identifier: AGPL-3.0-only </MkInput> </div> </FormSection> + + <FormSection> + <template #label>{{ i18n.ts._ad.adsSettings }}</template> + + <div class="_gaps_m"> + <div class="_gaps_s"> + <MkInput v-model="notesPerOneAd" min="0" type="number"> + <template #label>{{ i18n.ts._ad.notesPerOneAd }}</template> + <template #caption>{{ i18n.ts._ad.setZeroToDisable }}</template> + </MkInput> + <MkInfo v-if="notesPerOneAd > 0 && notesPerOneAd < 20" :warn="true"> + {{ i18n.ts._ad.adsTooClose }} + </MkInfo> + </div> + </div> + </FormSection> </div> </FormSuspense> </MkSpacer> @@ -127,6 +143,7 @@ import XHeader from './_header_.vue'; import MkSwitch from '@/components/MkSwitch.vue'; import MkInput from '@/components/MkInput.vue'; import MkTextarea from '@/components/MkTextarea.vue'; +import MkInfo from '@/components/MkInfo.vue'; import FormSection from '@/components/form/section.vue'; import FormSplit from '@/components/form/split.vue'; import FormSuspense from '@/components/form/suspense.vue'; @@ -152,6 +169,7 @@ let perLocalUserUserTimelineCacheMax: number = $ref(0); let perRemoteUserUserTimelineCacheMax: number = $ref(0); let perUserHomeTimelineCacheMax: number = $ref(0); let perUserListTimelineCacheMax: number = $ref(0); +let notesPerOneAd: number = $ref(0); async function init(): Promise<void> { const meta = await os.api('admin/meta'); @@ -171,10 +189,11 @@ async function init(): Promise<void> { perRemoteUserUserTimelineCacheMax = meta.perRemoteUserUserTimelineCacheMax; perUserHomeTimelineCacheMax = meta.perUserHomeTimelineCacheMax; perUserListTimelineCacheMax = meta.perUserListTimelineCacheMax; + notesPerOneAd = meta.notesPerOneAd; } -function save(): void { - os.apiWithDialog('admin/update-meta', { +async function save(): void { + await os.apiWithDialog('admin/update-meta', { name, shortName: shortName === '' ? null : shortName, description, @@ -191,9 +210,10 @@ function save(): void { perRemoteUserUserTimelineCacheMax, perUserHomeTimelineCacheMax, perUserListTimelineCacheMax, - }).then(() => { - fetchInstance(); + notesPerOneAd, }); + + fetchInstance(); } const headerTabs = $computed(() => []); |