enhance(AD): 表示される広告の選定条件を変更、縦に長いタイプを設定できるように (MisskeyIO#293)
This commit is contained in:
		@@ -178,6 +178,7 @@ export const meta = {
 | 
				
			|||||||
						place: {
 | 
											place: {
 | 
				
			||||||
							type: 'string',
 | 
												type: 'string',
 | 
				
			||||||
							optional: false, nullable: false,
 | 
												optional: false, nullable: false,
 | 
				
			||||||
 | 
												enum: ['square', 'horizontal', 'horizontal-big', 'vertical'],
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						ratio: {
 | 
											ratio: {
 | 
				
			||||||
							type: 'number',
 | 
												type: 'number',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -95,7 +95,7 @@ export default defineComponent({
 | 
				
			|||||||
				if (props.ad && item._shouldInsertAd_) {
 | 
									if (props.ad && item._shouldInsertAd_) {
 | 
				
			||||||
					return [h(MkAd, {
 | 
										return [h(MkAd, {
 | 
				
			||||||
						key: item.id + ':ad',
 | 
											key: item.id + ':ad',
 | 
				
			||||||
						prefer: ['horizontal', 'horizontal-big'],
 | 
											prefer: [],
 | 
				
			||||||
					}), el];
 | 
										}), el];
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					return el;
 | 
										return el;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,24 +63,28 @@ const choseAd = (): Ad | null => {
 | 
				
			|||||||
		ratio: 0,
 | 
							ratio: 0,
 | 
				
			||||||
	} : ad);
 | 
						} : ad);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let ads = allAds.filter(ad => props.prefer.includes(ad.place));
 | 
						const valuableAds = allAds.filter(ad => ad.ratio !== 0);
 | 
				
			||||||
 | 
						const lowPriorityAds = allAds.filter(ad => ad.ratio === 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ads.length === 0) {
 | 
						let ads: Ad[];
 | 
				
			||||||
		ads = allAds.filter(ad => ad.place === 'square');
 | 
						const preferredAds = valuableAds.filter(ad => props.prefer.includes(ad.place));
 | 
				
			||||||
 | 
						if (preferredAds.length !== 0) {
 | 
				
			||||||
 | 
							ads = preferredAds;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							ads = lowPriorityAds.filter(ad => props.prefer.includes(ad.place));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const lowPriorityAds = ads.filter(ad => ad.ratio === 0);
 | 
					 | 
				
			||||||
	ads = ads.filter(ad => ad.ratio !== 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (ads.length === 0) {
 | 
						if (ads.length === 0) {
 | 
				
			||||||
		if (lowPriorityAds.length !== 0) {
 | 
							const nonPreferredAds = valuableAds.filter(ad => !props.prefer.includes(ad.place));
 | 
				
			||||||
			return lowPriorityAds[Math.floor(Math.random() * lowPriorityAds.length)];
 | 
							if (nonPreferredAds.length !== 0) {
 | 
				
			||||||
 | 
								ads = nonPreferredAds;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			return null;
 | 
								ads = lowPriorityAds.filter(ad => !props.prefer.includes(ad.place));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const totalFactor = ads.reduce((a, b) => a + b.ratio, 0);
 | 
						const totalFactor = ads.reduce((a, b) => a + b.ratio, 0);
 | 
				
			||||||
 | 
						if (totalFactor === 0) return ads[Math.floor(Math.random() * ads.length)];
 | 
				
			||||||
	const r = Math.random() * totalFactor;
 | 
						const r = Math.random() * totalFactor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let stackedFactor = 0;
 | 
						let stackedFactor = 0;
 | 
				
			||||||
@@ -148,7 +152,8 @@ function reduceFrequency(): void {
 | 
				
			|||||||
	&.form_vertical {
 | 
						&.form_vertical {
 | 
				
			||||||
		> .link,
 | 
							> .link,
 | 
				
			||||||
		> .link > .img {
 | 
							> .link > .img {
 | 
				
			||||||
			max-width: min(100px, 100%);
 | 
								max-width: min(300px, 100%);
 | 
				
			||||||
 | 
								max-height: 450px;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			|||||||
					<option value="square">square</option>
 | 
										<option value="square">square</option>
 | 
				
			||||||
					<option value="horizontal">horizontal</option>
 | 
										<option value="horizontal">horizontal</option>
 | 
				
			||||||
					<option value="horizontal-big">horizontal-big</option>
 | 
										<option value="horizontal-big">horizontal-big</option>
 | 
				
			||||||
 | 
										<option value="vertical">vertical</option>
 | 
				
			||||||
				</MkRadios>
 | 
									</MkRadios>
 | 
				
			||||||
				<!--
 | 
									<!--
 | 
				
			||||||
			<div style="margin: 32px 0;">
 | 
								<div style="margin: 32px 0;">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			|||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<MkA v-if="$i && $i.id === flash.userId" :to="`/play/${flash.id}/edit`" style="color: var(--accent);">{{ i18n.ts._play.editThisPage }}</MkA>
 | 
									<MkA v-if="$i && $i.id === flash.userId" :to="`/play/${flash.id}/edit`" style="color: var(--accent);">{{ i18n.ts._play.editThisPage }}</MkA>
 | 
				
			||||||
				<MkAd :prefer="['horizontal', 'horizontal-big']"/>
 | 
									<MkAd :prefer="['square', 'horizontal', 'horizontal-big']"/>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<MkError v-else-if="error" @retry="fetchPage()"/>
 | 
								<MkError v-else-if="error" @retry="fetchPage()"/>
 | 
				
			||||||
			<MkLoading v-else/>
 | 
								<MkLoading v-else/>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			|||||||
							<MkFollowButton v-if="!$i || $i.id != post.user.id" v-model:user="post.user" :inline="true" :transparent="false" :full="true" large class="koudoku"/>
 | 
												<MkFollowButton v-if="!$i || $i.id != post.user.id" v-model:user="post.user" :inline="true" :transparent="false" :full="true" large class="koudoku"/>
 | 
				
			||||||
						</div>
 | 
											</div>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
					<MkAd :prefer="['horizontal', 'horizontal-big']"/>
 | 
										<MkAd :prefer="['square', 'horizontal', 'horizontal-big']"/>
 | 
				
			||||||
					<MkContainer :max-height="300" :foldable="true" class="other">
 | 
										<MkContainer :max-height="300" :foldable="true" class="other">
 | 
				
			||||||
						<template #icon><i class="ti ti-clock"></i></template>
 | 
											<template #icon><i class="ti ti-clock"></i></template>
 | 
				
			||||||
						<template #header>{{ i18n.ts.recentPosts }}</template>
 | 
											<template #header>{{ i18n.ts.recentPosts }}</template>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			|||||||
					<div><i class="ti ti-clock"></i> {{ i18n.ts.createdAt }}: <MkTime :time="page.createdAt" mode="detail"/></div>
 | 
										<div><i class="ti ti-clock"></i> {{ i18n.ts.createdAt }}: <MkTime :time="page.createdAt" mode="detail"/></div>
 | 
				
			||||||
					<div v-if="page.createdAt != page.updatedAt"><i class="ti ti-clock"></i> {{ i18n.ts.updatedAt }}: <MkTime :time="page.updatedAt" mode="detail"/></div>
 | 
										<div v-if="page.createdAt != page.updatedAt"><i class="ti ti-clock"></i> {{ i18n.ts.updatedAt }}: <MkTime :time="page.updatedAt" mode="detail"/></div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<MkAd :prefer="['horizontal', 'horizontal-big']"/>
 | 
									<MkAd :prefer="['square', 'horizontal', 'horizontal-big']"/>
 | 
				
			||||||
				<MkContainer :max-height="300" :foldable="true" class="other">
 | 
									<MkContainer :max-height="300" :foldable="true" class="other">
 | 
				
			||||||
					<template #icon><i class="ti ti-clock"></i></template>
 | 
										<template #icon><i class="ti ti-clock"></i></template>
 | 
				
			||||||
					<template #header>{{ i18n.ts.recentPosts }}</template>
 | 
										<template #header>{{ i18n.ts.recentPosts }}</template>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19119,7 +19119,7 @@ export type operations = {
 | 
				
			|||||||
            notFoundImageUrl: string | null;
 | 
					            notFoundImageUrl: string | null;
 | 
				
			||||||
            iconUrl: string | null;
 | 
					            iconUrl: string | null;
 | 
				
			||||||
            maxNoteTextLength: number;
 | 
					            maxNoteTextLength: number;
 | 
				
			||||||
            ads: {
 | 
					            ads: ({
 | 
				
			||||||
                /**
 | 
					                /**
 | 
				
			||||||
                 * Format: id
 | 
					                 * Format: id
 | 
				
			||||||
                 * @example xxxxxxxxxx
 | 
					                 * @example xxxxxxxxxx
 | 
				
			||||||
@@ -19127,12 +19127,13 @@ export type operations = {
 | 
				
			|||||||
                id: string;
 | 
					                id: string;
 | 
				
			||||||
                /** Format: url */
 | 
					                /** Format: url */
 | 
				
			||||||
                url: string;
 | 
					                url: string;
 | 
				
			||||||
                place: string;
 | 
					                /** @enum {string} */
 | 
				
			||||||
 | 
					                place: 'square' | 'horizontal' | 'horizontal-big' | 'vertical';
 | 
				
			||||||
                ratio: number;
 | 
					                ratio: number;
 | 
				
			||||||
                /** Format: url */
 | 
					                /** Format: url */
 | 
				
			||||||
                imageUrl: string;
 | 
					                imageUrl: string;
 | 
				
			||||||
                dayOfWeek: number;
 | 
					                dayOfWeek: number;
 | 
				
			||||||
              }[];
 | 
					              })[];
 | 
				
			||||||
            /** @default 0 */
 | 
					            /** @default 0 */
 | 
				
			||||||
            notesPerOneAd: number;
 | 
					            notesPerOneAd: number;
 | 
				
			||||||
            /** @example false */
 | 
					            /** @example false */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user