<commit_before><div :id="`grid-pagination-${id}`">
	<p class="text-muted small" v-if="gamesCount">
		<translate
			translate
			:translate-n="gamesCount"
			:translate-params="{
				count: number( gamesCount ),
				page: number( currentPage ),
			}"
			translate-plural="Page %{ page } of %{ count } games."
			>
			1 game.
		</translate>
	</p>

	<div :class="{ 'scrollable-grid-xs full-bleed-xs': scrollable }">
		<div class="game-grid-items">
			<div class="game-grid-ad" v-if="Screen.isDesktop && showAds">
				<div class="game-grid-ad-inner">
					<app-ad size="rectangle" />
					<span class="ad-label visible-lg">
						<translate>Advertisement</translate>
					</span>
				</div>
			</div>

			<!--
				Keep the end div and the opening div together below. If you
				don't it will not wrap correctly in the DOM since it adds the
				space.
			-->
			<template v-for="(game, i) of processedGames">
				<div class="game-grid-ad"
					v-if="shouldShowAd(i)"
					:key="game.id"
					>
					<div class="game-grid-ad-inner">
						<app-ad size="rectangle" />
						<span class="ad-label visible-lg">
							<translate>Advertisement</translate>
						</span>
					</div>
				</div><div class="game-grid-item"
					:key="game.id"
					>
					<app-game-thumbnail
						:game="game"
						v-app-track-event="eventLabel ? 'game-grid:click:' + eventLabel : undefined"
						>
						<slot name="thumbnail-controls" :game="game" />
					</app-game-thumbnail>
				</div>
			</template>
		</div>
	</div>

	<app-pagination
		class="text-center"
		v-if="perPage && gamesCount"
		:items-per-page="perPage"
		:total-items="gamesCount"
		:current-page="currentPage"
		@pagechange="Scroll.to( 'grid-pagination-' + id, { animate: false } )"
		/>
</div>
<commit_msg>fix game grids complaining about duplicate keys Fixes: https://github.com/gamejolt/issue-tracker/issues/879<commit_after><div :id="`grid-pagination-${id}`">
	<p class="text-muted small" v-if="gamesCount">
		<translate
			translate
			:translate-n="gamesCount"
			:translate-params="{
				count: number( gamesCount ),
				page: number( currentPage ),
			}"
			translate-plural="Page %{ page } of %{ count } games."
			>
			1 game.
		</translate>
	</p>

	<div :class="{ 'scrollable-grid-xs full-bleed-xs': scrollable }">
		<div class="game-grid-items">
			<div class="game-grid-ad" v-if="Screen.isDesktop && showAds">
				<div class="game-grid-ad-inner">
					<app-ad size="rectangle" />
					<span class="ad-label visible-lg">
						<translate>Advertisement</translate>
					</span>
				</div>
			</div>

			<!--
				Keep the end div and the opening div together below. If you
				don't it will not wrap correctly in the DOM since it adds the
				space.
			-->
			<template v-for="(game, i) of processedGames">
				<div class="game-grid-ad"
					v-if="shouldShowAd(i)"
					:key="game.id + '-ad'"
					>
					<div class="game-grid-ad-inner">
						<app-ad size="rectangle" />
						<span class="ad-label visible-lg">
							<translate>Advertisement</translate>
						</span>
					</div>
				</div><div class="game-grid-item"
					:key="game.id"
					>
					<app-game-thumbnail
						:game="game"
						v-app-track-event="eventLabel ? 'game-grid:click:' + eventLabel : undefined"
						>
						<slot name="thumbnail-controls" :game="game" />
					</app-game-thumbnail>
				</div>
			</template>
		</div>
	</div>

	<app-pagination
		class="text-center"
		v-if="perPage && gamesCount"
		:items-per-page="perPage"
		:total-items="gamesCount"
		:current-page="currentPage"
		@pagechange="Scroll.to( 'grid-pagination-' + id, { animate: false } )"
		/>
</div>

{'fraction_non_alphanumeric': 0.18267629094947252, 'fraction_numerical': 0.00138811771238201, 'mean_word_length': 2.8576017130620985, 'pattern_counts': {'":': 0, '<': 77, '<?xml version=': 0, '>': 77, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3938589', 'n_tokens_mistral': 1616, 'n_tokens_neox': 1250, 'n_words': 253}