Improved banner URL calculation.
This commit is contained in:
@@ -38,8 +38,6 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// console.log(props.campaign?.banner);
|
|
||||||
|
|
||||||
const bannerSrc = (() => {
|
const bannerSrc = (() => {
|
||||||
if (props.campaign.banner) {
|
if (props.campaign.banner) {
|
||||||
if (props.campaign.banner.entity.type === 'network' || !props.campaign.banner.entity.parent) {
|
if (props.campaign.banner.entity.type === 'network' || !props.campaign.banner.entity.parent) {
|
||||||
|
|||||||
@@ -89,31 +89,32 @@ function getEntityUrl(entity) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAffiliateEntityUrl(entity) {
|
export function getAffiliateEntityUrl(entity, affiliate) {
|
||||||
const entityUrl = getEntityUrl(entity);
|
const entityUrl = getEntityUrl(entity);
|
||||||
|
const entityAffiliate = affiliate || entity.affiliate;
|
||||||
|
|
||||||
if (!entityUrl) {
|
if (!entityUrl) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!entity.affiliate) {
|
if (!entityAffiliate) {
|
||||||
return entityUrl;
|
return entityUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity.affiliate.parameters?.query) { // used by e.g. Bang
|
if (entityAffiliate.parameters?.query) { // used by e.g. Bang
|
||||||
const newParams = new URLSearchParams({
|
const newParams = new URLSearchParams({
|
||||||
...Object.fromEntries(new URL(entityUrl).searchParams),
|
...Object.fromEntries(new URL(entityUrl).searchParams),
|
||||||
...Object.fromEntries(new URLSearchParams(entity.affiliate.parameters.query)),
|
...Object.fromEntries(new URLSearchParams(entityAffiliate.parameters.query)),
|
||||||
});
|
});
|
||||||
|
|
||||||
return `${entityUrl}?${newParams.toString()}`;
|
return `${entityUrl}?${newParams.toString()}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const affiliateUrl = entity.affiliate.parameters.replaceEntity?.hostname === new URL(entityUrl).hostname
|
const affiliateUrl = entityAffiliate.parameters?.replaceEntity?.hostname === new URL(entityUrl).hostname
|
||||||
? entity.affiliate.parameters.replaceEntity.url
|
? entityAffiliate.parameters.replaceEntity.url
|
||||||
: entity.affiliate.url;
|
: entityAffiliate.url;
|
||||||
|
|
||||||
if (entity.id === entity.affiliate.entityId || entityUrl === entity.parent?.url) {
|
if (entity.id === entityAffiliate.entityId || entityUrl === entity.parent?.url) {
|
||||||
return affiliateUrl;
|
return affiliateUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,18 +127,18 @@ export function getAffiliateEntityUrl(entity) {
|
|||||||
return entityUrl;
|
return entityUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity.affiliate.parameters.dynamicEntity) {
|
if (entityAffiliate.parameters.dynamicEntity) {
|
||||||
const entityPath = new URL(entityUrl).pathname;
|
const entityPath = new URL(entityUrl).pathname;
|
||||||
|
|
||||||
return format(entity.affiliate.parameters.dynamicEntity, {
|
return format(entityAffiliate.parameters.dynamicEntity, {
|
||||||
entityPath: entity.affiliate.parameters.prefixSlash
|
entityPath: entityAffiliate.parameters.prefixSlash
|
||||||
? entityPath
|
? entityPath
|
||||||
: entityPath.replace(/^\//, ''),
|
: entityPath.replace(/^\//, ''),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (affiliateUrl?.includes('/track')
|
if (affiliateUrl?.includes('/track')
|
||||||
&& entity.affiliate.parameters.channel !== false) {
|
&& entityAffiliate.parameters.channel !== false) {
|
||||||
const { pathname, search } = new URL(entityUrl);
|
const { pathname, search } = new URL(entityUrl);
|
||||||
|
|
||||||
return `${affiliateUrl}${pathname.replace(/^\/trial/, '')}${search}`; // replace needed for Jules Jordan, verify behavior on other sites
|
return `${affiliateUrl}${pathname.replace(/^\/trial/, '')}${search}`; // replace needed for Jules Jordan, verify behavior on other sites
|
||||||
|
|||||||
@@ -4,17 +4,33 @@ import { knexOwner as knex } from './knex.js';
|
|||||||
import { curateEntity } from './entities.js';
|
import { curateEntity } from './entities.js';
|
||||||
import redis from './redis.js';
|
import redis from './redis.js';
|
||||||
import initLogger from './logger.js';
|
import initLogger from './logger.js';
|
||||||
|
import { getAffiliateEntityUrl } from './affiliates.js';
|
||||||
|
|
||||||
const logger = initLogger();
|
const logger = initLogger();
|
||||||
|
|
||||||
|
function getCampaignUrl(campaign) {
|
||||||
|
if (!campaign) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (campaign.url) {
|
||||||
|
return campaign.url;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (campaign.entity) {
|
||||||
|
return getAffiliateEntityUrl(campaign.entity, campaign.affiliate);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function curateCampaign(campaign) {
|
function curateCampaign(campaign) {
|
||||||
if (!campaign) {
|
if (!campaign) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
const curatedCampaign = {
|
||||||
id: campaign.id,
|
id: campaign.id,
|
||||||
url: campaign.url,
|
|
||||||
entity: campaign.entity && curateEntity({ ...campaign.entity, parent: campaign.parent_entity }),
|
entity: campaign.entity && curateEntity({ ...campaign.entity, parent: campaign.parent_entity }),
|
||||||
banner: campaign.banner && {
|
banner: campaign.banner && {
|
||||||
id: campaign.banner.id,
|
id: campaign.banner.id,
|
||||||
@@ -31,6 +47,10 @@ function curateCampaign(campaign) {
|
|||||||
parameters: campaign.affiliate.parameters,
|
parameters: campaign.affiliate.parameters,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
curatedCampaign.url = getCampaignUrl(curatedCampaign);
|
||||||
|
|
||||||
|
return curatedCampaign;
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectRandomCampaign(primaryCampaigns, entityCampaigns, preferredCampaigns) {
|
function selectRandomCampaign(primaryCampaigns, entityCampaigns, preferredCampaigns) {
|
||||||
|
|||||||
2
static
2
static
Submodule static updated: 7887d3f52e...4b6b7e5e73
Reference in New Issue
Block a user