From df48b0c6fc9097b6e536e6e50e46e134ed23c542 Mon Sep 17 00:00:00 2001 From: Jai A Date: Wed, 28 Aug 2024 15:30:39 -0700 Subject: [PATCH] Finish ads --- Cargo.lock | 2 - Cargo.toml | 3 + .../src/components/ui/PromotionWrapper.vue | 23 +++++--- apps/app-frontend/src/pages/project/Index.vue | 2 + apps/app/capabilities/ads.json | 2 +- apps/app/gen/schemas/capabilities.json | 2 +- apps/app/src/api/ads-init.js | 17 ++++++ apps/app/src/api/ads.rs | 6 +- apps/frontend/src/public/promo-frame.html | 57 ++++++++++++------- 9 files changed, 80 insertions(+), 34 deletions(-) create mode 100644 apps/app/src/api/ads-init.js diff --git a/Cargo.lock b/Cargo.lock index 2f7d55d27..6c49ba3ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6882,8 +6882,6 @@ dependencies = [ [[package]] name = "wry" version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b8049c8f239cdbfaaea4bacb9646f6b208938ceec0acd5b3e99cd05f70903f" dependencies = [ "base64 0.22.1", "block", diff --git a/Cargo.toml b/Cargo.toml index 94f58399c..4a068a629 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,3 +16,6 @@ strip = true # Remove debug symbols [profile.dev.package.sqlx-macros] opt-level = 3 + +[patch.crates-io] +wry = { path = "../wry" } diff --git a/apps/app-frontend/src/components/ui/PromotionWrapper.vue b/apps/app-frontend/src/components/ui/PromotionWrapper.vue index 1af2eb66c..18fbb4f44 100644 --- a/apps/app-frontend/src/components/ui/PromotionWrapper.vue +++ b/apps/app-frontend/src/components/ui/PromotionWrapper.vue @@ -54,12 +54,21 @@ function updateAdPosition() { if (adsWrapper.value) { const rect = adsWrapper.value.getBoundingClientRect() - init_ads_window( - rect.left + window.scrollX, - rect.top + window.scrollY, - rect.right - rect.left, - rect.bottom - rect.top, - ) + let y = rect.top + window.scrollY + let height = rect.bottom - rect.top + + // Prevent ad from overlaying the app bar + if (y <= 52) { + y = 52 + height = rect.bottom - 52 + + if (height < 0) { + height = 0 + y = -1000 + } + } + + init_ads_window(rect.left + window.scrollX, y, rect.right - rect.left, height) } } @@ -83,7 +92,7 @@ onUnmounted(() => {

90% of ad revenue goes to creators

diff --git a/apps/app-frontend/src/pages/project/Index.vue b/apps/app-frontend/src/pages/project/Index.vue index a5062d4a4..3e97d9739 100644 --- a/apps/app-frontend/src/pages/project/Index.vue +++ b/apps/app-frontend/src/pages/project/Index.vue @@ -310,11 +310,13 @@ async function fetchProjectData() { await fetchProjectData() +const promo = ref(null) watch( () => route.params.id, async () => { if (route.params.id && route.path.startsWith('/project')) { await fetchProjectData() + promo.value.scroll() } }, ) diff --git a/apps/app/capabilities/ads.json b/apps/app/capabilities/ads.json index 892b37fa6..c33cca529 100644 --- a/apps/app/capabilities/ads.json +++ b/apps/app/capabilities/ads.json @@ -3,7 +3,7 @@ "description": "", "local": false, "remote": { - "urls": ["https://*.modrinth.com/*"] + "urls": ["https://modrinth.com/wrapper/app-ads", "http://localhost:3000/*"] }, "webviews": [ "ads-window" diff --git a/apps/app/gen/schemas/capabilities.json b/apps/app/gen/schemas/capabilities.json index 8ace0e922..5d86f6636 100644 --- a/apps/app/gen/schemas/capabilities.json +++ b/apps/app/gen/schemas/capabilities.json @@ -1 +1 @@ -{"ads":{"identifier":"ads","description":"","remote":{"urls":["https://*.modrinth.com/*"]},"local":false,"webviews":["ads-window"],"permissions":["shell:allow-open"]},"core":{"identifier":"core","description":"","local":true,"windows":["main"],"permissions":["core:default","core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","core:window:allow-create","core:window:allow-maximize","core:window:allow-toggle-maximize","core:window:allow-unmaximize","core:window:allow-minimize","core:window:allow-unminimize","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-decorations","core:window:allow-start-dragging","core:webview:allow-set-webview-zoom"]},"plugins":{"identifier":"plugins","description":"","local":true,"windows":["main"],"permissions":["dialog:allow-open","dialog:allow-confirm","shell:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname","deep-link:default","window-state:default","window-state:allow-restore-state","window-state:allow-save-window-state","auth:default","import:default","jre:default","logs:default","metadata:default","mr-auth:default","profile-create:default","pack:default","process:default","profile:default","cache:default","settings:default","tags:default","utils:default","ads:default"]}} \ No newline at end of file +{"ads":{"identifier":"ads","description":"","remote":{"urls":["https://modrinth.com/wrapper/app-ads","http://localhost:3000/*"]},"local":false,"webviews":["ads-window"],"permissions":["shell:allow-open"]},"core":{"identifier":"core","description":"","local":true,"windows":["main"],"permissions":["core:default","core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","core:window:allow-create","core:window:allow-maximize","core:window:allow-toggle-maximize","core:window:allow-unmaximize","core:window:allow-minimize","core:window:allow-unminimize","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-decorations","core:window:allow-start-dragging","core:webview:allow-set-webview-zoom"]},"plugins":{"identifier":"plugins","description":"","local":true,"windows":["main"],"permissions":["dialog:allow-open","dialog:allow-confirm","shell:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname","deep-link:default","window-state:default","window-state:allow-restore-state","window-state:allow-save-window-state","auth:default","import:default","jre:default","logs:default","metadata:default","mr-auth:default","profile-create:default","pack:default","process:default","profile:default","cache:default","settings:default","tags:default","utils:default","ads:default"]}} \ No newline at end of file diff --git a/apps/app/src/api/ads-init.js b/apps/app/src/api/ads-init.js new file mode 100644 index 000000000..b1ebb879e --- /dev/null +++ b/apps/app/src/api/ads-init.js @@ -0,0 +1,17 @@ +document.addEventListener('click', function (e) { + let target = e.target + while (target != null) { + if (target.matches('a')) { + e.preventDefault() + if (target.href) { + window.top.postMessage({ modrinthOpenUrl: target.href }, 'https://modrinth.com') + } + break + } + target = target.parentElement + } +}) + +window.open = (url, target, features) => { + window.top.postMessage({ modrinthOpenUrl: url }, 'https://modrinth.com') +} diff --git a/apps/app/src/api/ads.rs b/apps/app/src/api/ads.rs index 2cef35b62..00ee34a99 100644 --- a/apps/app/src/api/ads.rs +++ b/apps/app/src/api/ads.rs @@ -10,6 +10,8 @@ pub fn init() -> TauriPlugin { .build() } +const LINK_SCRIPT: &str = include_str!("ads-init.js"); + #[tauri::command] pub async fn init_ads_window( app: tauri::AppHandle, @@ -27,10 +29,10 @@ pub async fn init_ads_window( window.add_child( tauri::webview::WebviewBuilder::new( "ads-window", - WebviewUrl::External("https://aditude-test.modrinth.com/promo-frame.html".parse().unwrap()), + WebviewUrl::External("https://modrinth.com/wrapper/app-ads".parse().unwrap()), ) + .initialization_script(LINK_SCRIPT) .user_agent("ModrinthApp Ads Webview") - .accept_first_mouse(true) .zoom_hotkeys_enabled(false) .transparent(true), LogicalPosition::new(x, y), diff --git a/apps/frontend/src/public/promo-frame.html b/apps/frontend/src/public/promo-frame.html index 1cb19bd1b..2fdde2b42 100644 --- a/apps/frontend/src/public/promo-frame.html +++ b/apps/frontend/src/public/promo-frame.html @@ -11,16 +11,39 @@ margin: 0; padding: 0; overflow: hidden; + cursor: pointer; + } + + .ads-container { + width: 100vw; + height: 100vh; + overflow: hidden; + position: relative; + } + + #plus-link { + width: 100vw; + height: 100vh; + position: absolute; + top: 0; + left: 0; + z-index: 0; } #modrinth-rail-1 { border-radius: 1rem; - overflow: hidden; + position: absolute; + left: 0; + bottom: 0; + z-index: 2; } -
+
+ +
+