use crate::{s_file, Template}; use markup::{doctype, DynRender}; use rocket::{get, http::ContentType}; #[get("/")] pub fn r_index<'a>() -> Template> { Template(markup::new! { @doctype() html { head { title { "meta adservices" } meta[name="viewport", content="width=device-width, initial-scale=1.0"]; meta[name="description", content="advertise now with meta adservices"]; link[rel="stylesheet", href="/style.css"]; } body { h1 { "meta adservices" } p { "meta adservices is the leading provider of useless images within iframes. " "meta adservices is inspired by " a[href="https://john.citrons.xyz/"]{"johnvertisement"} } h2 { "sample ad" } iframe[src="/v1/embed?s=adservices.metamuffin.org", style="border:none;width:728px;height:90px;"] {} h2 { "use meta ads" } p { "Use meta ads by inserting the following iframe:" } code { pre { "" } } p { "You SHOULD replace " code {"example.org"} " with your domain." } h2 { "create meta ads" } p { "Send mail to " a[href="mailto:metamuffin@disroot.org"]{"metamuffin@disroot.org"} "." br; "The mail MUST contain a ad name, ad image, URL to direct those who click it and optionally ad author name. " br; "Some ads will be rejected for any or no reason at all. " "To create good ads, consider the following statements in the context of your ad: " ol { li { "It is funny, amusing or enigmatic in some way." } li { "It doesn't break any laws." } li { "The image is compressed losslessly." } li { "The image has a resolution of exactly 728x90." } li { "The image uses the sRGB color space." } li { "The image contains no nonfree assets." } li { "The image, URL or names should be free of malware" } } } h2 { "privacy" } p { "data used by meta adservices: " } ul { li { "Your IP address" } li { "The Advertisement site (where the ad was shown)" } } p { "data stored by meta adservices: " } ul { li { "Your IP address is used within a bloom filter in volatile memory." } li { "Your requests increments a persistent public counter per ad site (according to a weighting function)." } } } } }) } #[get("/style.css")] pub fn r_style() -> (ContentType, String) { (ContentType::CSS, s_file!("style.css")) } #[cfg(not(debug_assertions))] #[macro_export] macro_rules! s_file { ($path: literal) => { include_str!($path).to_string() }; } #[cfg(debug_assertions)] #[macro_export] macro_rules! s_file { ($path: literal) => { std::fs::read_to_string(concat!("src/", $path)).unwrap() }; }