diff --git a/web/assets/css/development.css b/web/assets/css/development.css
index 95b20e0f..c88bba24 100644
--- a/web/assets/css/development.css
+++ b/web/assets/css/development.css
@@ -1,7 +1,3 @@
-.dev .adsbygoogle {
- @apply bg-pink-400;
-}
-
-.dev .adsbyplaywire {
+.dev .vm-placement {
@apply bg-pink-400;
}
diff --git a/web/assets/css/tailwind.css b/web/assets/css/tailwind.css
index 4b92a8aa..ef2594c0 100644
--- a/web/assets/css/tailwind.css
+++ b/web/assets/css/tailwind.css
@@ -34,11 +34,6 @@
.card-prop-label {
@apply text-left;
}
-
- /** ad root-class */
- .ad-section {
- @apply mt-4 text-center;
- }
}
/* purgecss start ignore */
diff --git a/web/components.d.ts b/web/components.d.ts
index 95e16679..8dc7cd23 100644
--- a/web/components.d.ts
+++ b/web/components.d.ts
@@ -138,6 +138,8 @@ declare module 'vue' {
TopBrawlersCard: typeof import('./components/top-brawlers-card.vue')['default']
TopPlayersCard: typeof import('./components/top-players-card.vue')['default']
TrophySliderSelect: typeof import('./components/trophy-slider-select.vue')['default']
+ VenatusPlacement: typeof import('./components/venatus-placement.vue')['default']
+ VenatusRichMedia: typeof import('./components/venatus-rich-media.vue')['default']
VGini: typeof import('./components/klicker/v-gini.vue')['default']
VLastUpdate: typeof import('./components/klicker/v-last-update.vue')['default']
VMediaImg: typeof import('./components/klicker/v-media-img.vue')['default']
diff --git a/web/components/ad-cell.vue b/web/components/ad-cell.vue
index cf3bd1a2..ccbb1a1b 100644
--- a/web/components/ad-cell.vue
+++ b/web/components/ad-cell.vue
@@ -6,13 +6,7 @@
hide-empty
lazy
>
-
+
@@ -20,8 +14,6 @@
diff --git a/web/components/ad.vue b/web/components/ad.vue
index 16fa7cc2..69c8113e 100644
--- a/web/components/ad.vue
+++ b/web/components/ad.vue
@@ -1,96 +1,104 @@
-
+
-
-
+
+
+ :style="{ maxWidth: `${sideRailMaxWidth}px` }"
+ ad-id="65f94d27767223575b4de5af"
+ class="desktop-side-rail"
+ >
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+ ad-id=""
+ id="vm-av"
+ data-format="isvideo"
+ class="aspect-video"
+ >
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/web/components/playwire-ramp.vue b/web/components/playwire-ramp.vue
deleted file mode 100644
index 9b2708db..00000000
--- a/web/components/playwire-ramp.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/components/venatus-placement.vue b/web/components/venatus-placement.vue
new file mode 100644
index 00000000..43284980
--- /dev/null
+++ b/web/components/venatus-placement.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
diff --git a/web/components/venatus-rich-media.vue b/web/components/venatus-rich-media.vue
new file mode 100644
index 00000000..8f1381d4
--- /dev/null
+++ b/web/components/venatus-rich-media.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
diff --git a/web/composables/playwire-ramp.ts b/web/composables/playwire-ramp.ts
deleted file mode 100644
index 50b1c59e..00000000
--- a/web/composables/playwire-ramp.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { useRoute } from "vue-router";
-import { watch } from "vue"
-import { useMeta } from "./compat";
-
-export type TaggedType = 'leaderboard_atf' | 'leaderboard_btf' | 'med_rect_atf' | 'med_rect_btf' | 'sky_atf' | 'sky_btf'
-export type TaglessType = 'trendi_video' | 'corner_ad_video' | 'site_skin' | 'flex_leaderboard' | 'right_rail' | 'bottom_rail' | 'left_rail' | 'in_content' | 'sidebar' | 'sticky_sidebar'
-
-interface TaggedUnit {
- type: TaggedType
- selectorId: string
-}
-
-interface TaglessUnit {
- type: TaglessType
-}
-
-type Unit = TaggedUnit | TaglessUnit
-
-declare global {
- interface Window {
- ramp: {
- passiveMode: boolean;
- addUnits: (units: Unit[]) => Promise;
- settings: Record;
- displayUnits: () => void;
- getUnits: () => Unit[];
- destroyUnits: (units: 'all'|string|string[]) => Promise;
- setPath: (path?: string) => Promise;
- triggerRefresh: () => void;
- showCmpModal: () => void;
- onReady: (callback: () => void) => void;
- onPlayerReady: (callback: () => void) => void;
- que: (() => void)[];
- };
- }
-}
-
-export function usePlaywireRamp(publisherId: string, siteId: string) {
- const outOfPageUnits = ([
- 'trendi_video',
- 'corner_ad_video',
- 'site_skin',
- 'flex_leaderboard',
- 'right_rail',
- 'bottom_rail',
- 'left_rail',
- // 'in_content',
- 'sidebar',
- 'sticky_sidebar',
- ] satisfies TaglessType[]).map(unit => ({ type: unit }) satisfies TaglessUnit)
-
- const route = useRoute()
-
- watch(() => route.path, () => {
- // do not refresh ads when just the params or the hash changes
- if (import.meta.env.SSR) {
- return
- }
-
- window.ramp.que.push(async () => {
- let slotsToRemove: string[] = []
- Object.entries(window.ramp.settings.slots).forEach(([slotName, slot]: [string, any]) => {
- if (outOfPageUnits.some(unit => unit.type == slot.type) || slot.videoType === 'Bolt Player') {
- slotsToRemove.push(slotName)
- }
- })
-
- await window.ramp.destroyUnits(slotsToRemove)
- await window.ramp.setPath(route.path)
- await window.ramp.addUnits(outOfPageUnits)
- await window.ramp.displayUnits()
- })
- }, { immediate: true })
-
- useMeta(() => ({
- script: [ {
- key: 'playwire-ramp-init',
- type: 'text/javascript',
- innerHTML: `
- window.ramp = window.ramp || {};
- window.ramp.que = window.ramp.que || [];
- window.ramp.passiveMode = true;
- `.replace(/\s+/g, ' '),
- tagPriority: 31,
- }, {
- key: 'playwire-ramp',
- src: `//cdn.intergient.com/${publisherId}/${siteId}/ramp.js`,
- async: true,
- tagPriority: 31,
- } ],
- }))
-}
diff --git a/web/composables/quantcast.ts b/web/composables/quantcast.ts
index 7893cab4..ee3183ef 100644
--- a/web/composables/quantcast.ts
+++ b/web/composables/quantcast.ts
@@ -8,7 +8,7 @@ export function useQuantcast(quantcastChoiceId: string) {
key: 'quantcast-choice-init',
type: 'text/javascript',
async: true,
- tagPriority: 29, // load before playwire-ramp
+ tagPriority: 29, // load before ad scripts
innerHTML: `
(function() {
var uspTries = 0;
diff --git a/web/composables/venatus.ts b/web/composables/venatus.ts
new file mode 100644
index 00000000..8b93f816
--- /dev/null
+++ b/web/composables/venatus.ts
@@ -0,0 +1,21 @@
+import { useMeta } from "./compat";
+
+declare global {
+ interface Window {
+ __vm_add: HTMLElement[];
+ __vm_remove: HTMLElement[];
+ __vm_remove_category: string[];
+ }
+}
+
+export function useVenatus(siteId: string) {
+ useMeta(() => ({
+ script: [ {
+ key: 'venatus',
+ src: `https://hb.vntsm.com/v3/live/ad-manager.min.js`,
+ 'data-site-id': siteId,
+ 'data-mode': 'scan',
+ tagPriority: 31,
+ } ],
+ }))
+}
diff --git a/web/config.ts b/web/config.ts
index a030b900..c5541503 100644
--- a/web/config.ts
+++ b/web/config.ts
@@ -6,9 +6,7 @@ export interface Config {
ga4Id: string
adsensePubid: string
sentryDsn: string
- playwireRampPublisherId: string
- playwireRampSiteId: string
- playwireRampGa4Id: string
+ venatusSiteId: string
quantcastChoiceId: string
traduora?: {
url: string
@@ -24,9 +22,7 @@ export const config: Config = {
renderUrl: process.env.RENDER_URL ?? '',
ga4Id: process.env.GA4_ID ?? '',
adsensePubid: process.env.ADSENSE_PUBID ?? '',
- playwireRampPublisherId: process.env.PLAYWIRE_RAMP_PUBLISHER_ID ?? '',
- playwireRampSiteId: process.env.PLAYWIRE_RAMP_SITE_ID ?? '',
- playwireRampGa4Id: process.env.PLAYWIRE_RAMP_GA4_ID ?? '',
+ venatusSiteId: process.env.VENATUS_SITE_ID ?? '',
quantcastChoiceId: process.env.QUANTCAST_CHOICE_ID ?? '',
sentryDsn: process.env.SENTRY_DSN ?? '',
traduora: undefined,
diff --git a/web/layouts/default.vue b/web/layouts/default.vue
index 73c046d3..45ea79e1 100644
--- a/web/layouts/default.vue
+++ b/web/layouts/default.vue
@@ -38,19 +38,18 @@
+