Added dedicated Arch Angel scraper.
This commit is contained in:
@@ -63,6 +63,10 @@ function entityCampaign() {
|
||||
return randomCampaign;
|
||||
}
|
||||
|
||||
if (this.allowGeneric) {
|
||||
return this.genericCampaign();
|
||||
}
|
||||
|
||||
this.$emit('campaign', null);
|
||||
|
||||
return null;
|
||||
@@ -84,6 +88,10 @@ function tagCampaign() {
|
||||
return randomCampaign;
|
||||
}
|
||||
|
||||
if (this.allowGeneric) {
|
||||
return this.genericCampaign();
|
||||
}
|
||||
|
||||
this.$emit('campaign', null);
|
||||
|
||||
return null;
|
||||
@@ -134,6 +142,10 @@ export default {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
allowGeneric: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
maxRatio: {
|
||||
type: Number,
|
||||
default: null,
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
<div class="releases">
|
||||
<Releases
|
||||
:releases="entity.releases"
|
||||
:entity="entity"
|
||||
:done="done"
|
||||
/>
|
||||
|
||||
@@ -157,14 +158,17 @@ async function fetchEntity(scroll = true) {
|
||||
const campaign = entity.campaigns.find((campaignX) => !campaignX.banner)
|
||||
|| entity.parent?.campaigns.find((campaignX) => !campaignX.banner);
|
||||
|
||||
const { searchParams, pathname, origin } = new URL(entity.url);
|
||||
if (entity.url) {
|
||||
const { searchParams, pathname, origin } = new URL(entity.url);
|
||||
|
||||
const affiliateParams = new URLSearchParams({
|
||||
...(entity.url && Object.fromEntries(searchParams)), // preserve any query in entity URL, e.g. ?siteId=5
|
||||
...(campaign?.affiliate?.parameters && Object.fromEntries(new URLSearchParams(campaign.affiliate.parameters))), // append affiliate parameters
|
||||
}).toString();
|
||||
const affiliateParams = new URLSearchParams({
|
||||
...(entity.url && Object.fromEntries(searchParams)), // preserve any query in entity URL, e.g. ?siteId=5
|
||||
...(campaign?.affiliate?.parameters && Object.fromEntries(new URLSearchParams(campaign.affiliate.parameters))), // append affiliate parameters
|
||||
}).toString();
|
||||
|
||||
this.entityUrl = campaign?.url || campaign?.affiliate?.url || `${origin}${pathname}${campaign?.affiliate?.parameters ? `?${affiliateParams}` : ''}`;
|
||||
}
|
||||
|
||||
this.entityUrl = campaign?.url || campaign?.affiliate?.url || `${origin}${pathname}${campaign?.affiliate?.parameters ? `?${affiliateParams}` : ''}`;
|
||||
this.done = true;
|
||||
|
||||
if (scroll && this.$refs.filter?.$el) {
|
||||
|
||||
@@ -76,7 +76,7 @@ export default {
|
||||
releases: [],
|
||||
networks: [],
|
||||
pageTitle: null,
|
||||
limit: 30,
|
||||
limit: 29, // reserve one campaign spot
|
||||
totalCount: 0,
|
||||
from: null,
|
||||
done: false,
|
||||
|
||||
@@ -12,18 +12,34 @@
|
||||
:key="sfw"
|
||||
class="nolist tiles"
|
||||
>
|
||||
<li
|
||||
v-for="(release, index) in releases"
|
||||
:key="`release-${release.id}`"
|
||||
>
|
||||
<SceneTile
|
||||
:release="release"
|
||||
:referer="referer"
|
||||
:index="index"
|
||||
:stash="stash"
|
||||
@stash="isStashed => $emit('stash', isStashed)"
|
||||
/>
|
||||
</li>
|
||||
<template v-for="(item, index) in items">
|
||||
<li
|
||||
v-if="item === 'campaign'"
|
||||
:key="`campaign-${index}`"
|
||||
class="campaign"
|
||||
>
|
||||
<Campaign
|
||||
v-if="item === 'campaign'"
|
||||
:entity="entity"
|
||||
:min-ratio="0.75"
|
||||
:max-ratio="1.25"
|
||||
:allow-generic="true"
|
||||
/>
|
||||
</li>
|
||||
|
||||
<li
|
||||
v-else
|
||||
:key="`release-${item.id}`"
|
||||
>
|
||||
<SceneTile
|
||||
:release="item"
|
||||
:referer="referer"
|
||||
:index="index"
|
||||
:stash="stash"
|
||||
@stash="isStashed => $emit('stash', isStashed)"
|
||||
/>
|
||||
</li>
|
||||
</template>
|
||||
</ul>
|
||||
|
||||
<span
|
||||
@@ -38,51 +54,53 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script setup>
|
||||
import { defineProps, defineEmits, computed } from 'vue';
|
||||
import { useStore } from 'vuex';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
import Campaign from '../campaigns/campaign.vue';
|
||||
import Ellipsis from '../loading/ellipsis.vue';
|
||||
import SceneTile from './scene-tile.vue';
|
||||
|
||||
function range() {
|
||||
return this.$route.params.range;
|
||||
}
|
||||
const router = useRouter();
|
||||
const store = useStore();
|
||||
|
||||
function sfw() {
|
||||
return this.$store.state.ui.sfw;
|
||||
}
|
||||
defineEmits(['stash']);
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Ellipsis,
|
||||
SceneTile,
|
||||
const props = defineProps({
|
||||
releases: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
props: {
|
||||
releases: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
context: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
done: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
referer: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
stash: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
entity: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
emits: ['stash'],
|
||||
computed: {
|
||||
range,
|
||||
sfw,
|
||||
context: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
};
|
||||
done: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
referer: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
stash: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const campaignIndex = computed(() => Math.floor(Math.random() * props.releases.length - 5) + 5);
|
||||
|
||||
const items = computed(() => props.releases.flatMap((release, index) => (props.releases.length > 10 && index === campaignIndex.value ? ['campaign', release] : release)));
|
||||
|
||||
const range = computed(() => router.route?.params.range);
|
||||
const sfw = computed(() => store.state.ui.sfw);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -126,6 +144,12 @@ export default {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.campaign {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@media(max-width: $breakpoint-mega) {
|
||||
.tiles {
|
||||
grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr));
|
||||
|
||||
Reference in New Issue
Block a user