switch between amarula and a-ads

This commit is contained in:
2020-05-24 14:23:03 +02:00
parent a6c7999448
commit f881e8fc8f
5 changed files with 58 additions and 46 deletions

View File

@@ -1,7 +1,9 @@
package init
import (
"math/rand"
"os"
"time"
"fornaxian.com/pixeldrain-web/webcontroller"
"github.com/Fornaxian/config"
@@ -34,6 +36,9 @@ maintenance_mode = false
func Init(r *httprouter.Router, prefix string, setLogLevel bool) {
log.Info("Starting web UI server (PID %v)", os.Getpid())
// Seed the RNG
rand.Seed(time.Now().UnixNano())
var webconf = &PixelWebConfig{}
var _, err = config.New(
DefaultConfig,

View File

@@ -50,8 +50,8 @@ function Viewer(type, viewToken, data) {
this.setFile(fileFromSkyNet(data))
}
this.renderSponsorsSimple()
window.addEventListener("resize", e => { this.renderSponsorsSimple() })
this.renderSponsors()
window.addEventListener("resize", e => { this.renderSponsors() })
// Register keyboard shortcuts
document.addEventListener("keydown", e => { this.keyboardEvent(e) })
@@ -132,12 +132,12 @@ Viewer.prototype.setFile = function(file) {
}
}
Viewer.prototype.renderSponsorsSimple = function() {
Viewer.prototype.renderSponsors = function() {
let scaleWidth = 1
let scaleHeight = 1
let minWindowHeight = 1000
let bannerWidth = 720
let bannerHeight = 120
let minWindowHeight = 800
let bannerWidth = document.querySelector(".sponsors_banner").offsetWidth
let bannerHeight = document.querySelector(".sponsors_banner").offsetHeight
if (window.innerWidth < bannerWidth) {
scaleWidth = window.innerWidth/bannerWidth
@@ -146,45 +146,21 @@ Viewer.prototype.renderSponsorsSimple = function() {
scaleHeight = window.innerHeight/minWindowHeight
}
// The smaller scale is the scale we'll use
let scale = scaleWidth < scaleHeight ? scaleWidth : scaleHeight
document.querySelector(".sponsors").style.height = (scale*bannerHeight)+"px"
// Because of the scale transformation the automatic margins don't work
// anymore. So we have to manually calculate the margin. Here we take the
// width of the viewport - the width of the ad to calculate the amount of
// pixels around the ad. We multiply the ad size by the scale we calcualted
// to account for the smaller size.
let offset = (window.innerWidth - (bannerWidth*scale)) / 2
document.querySelector(".sponsors").style.height = (bannerHeight*scale)+"px"
document.querySelector(".sponsors_banner").style.marginLeft = offset+"px"
document.querySelector(".sponsors_banner").style.transform = "scale("+scale+")"
}
// Viewer.prototype.renderSponsors = function() {
// let scale = 1
// let scaleWidth = 1
// let scaleHeight = 1
// let minWidth = 728
// let minHeight = 800
// if (window.innerWidth < minWidth) {
// scaleWidth = window.innerWidth/minWidth
// }
// if (window.innerHeight < minHeight) {
// scaleHeight = window.innerHeight/minHeight
// }
// scale = scaleWidth < scaleHeight ? scaleWidth : scaleHeight
// // Because of the scale transformation the automatic margins don't work
// // anymore. So we have to maunally calculate the margin. Where we take the
// // width of the viewport - the width of the ad to calculate the amount of
// // pixels around the ad. We multiply the ad size by the scale we calcualted
// // to account for the smaller size.
// let offset = (window.innerWidth - (minWidth*scale)) / 2
// if (offset < 0) {
// offset = 0
// }
// document.querySelector(".sponsors > iframe").style.marginLeft = offset+"px"
// if (scale == 1) {
// document.querySelector(".sponsors > iframe").style.transform = "none"
// document.querySelector(".sponsors").style.height = "90px"
// } else {
// document.querySelector(".sponsors > iframe").style.transform = "scale("+scale+")"
// document.querySelector(".sponsors").style.height = (scale*90)+"px"
// }
// }
Viewer.prototype.keyboardEvent = function(evt) {
if (evt.ctrlKey || evt.altKey || evt.metaKey) {
return // prevent custom shortcuts from interfering with system shortcuts

View File

@@ -116,7 +116,7 @@
font-size: 0;
line-height: 0;
}
.file_viewer > .sponsors > iframe {
.file_viewer > .sponsors > * {
display: block;
margin: auto;
transform-origin: 0 0;

View File

@@ -100,9 +100,19 @@
</div>
<div id="sponsors" class="sponsors">
<a href="/click/DtZ3hHT9?target=https%3A%2F%2Fwww.amarula-electronics.com/?v=79cba1185463">
<img src="/res/img/misc/banner_as.png" style="display: block; margin: auto; height: 100%;" />
{{if eq .Other.AdType 0}}
<!-- scrolling="no" is not allowed by the W3C, but overflow: hidden doesn't work in chrome, so I have no choice -->
<iframe class="sponsors_banner"
data-aa="73974"
src="//ad.a-ads.com/73974?size=728x90&background_color={{.Style.Layer1Color.RGB}}&text_color={{.Style.TextColor.RGB}}&title_color={{.Style.HighlightColor.RGB}}&title_hover_color={{.Style.HighlightColor.RGB}}&link_color={{.Style.HighlightColor.RGB}}&link_hover_color={{.Style.HighlightColor.RGB}}"
style="width:728px; height:90px; border:none; padding:0; overflow:hidden;"
scrolling="no">
</iframe>
{{else if eq .Other.AdType 1}}
<a class="sponsors_banner" style="display: inline-block; width: 576px; height: 96px;" href="/click/DtZ3hHT9?target=https%3A%2F%2Fwww.amarula-electronics.com/?v=79cba1185463">
<img src="/res/img/misc/banner_as.png" style="width: 100%; height: 100%" />
</a>
{{end}}
</div>
</div>

View File

@@ -3,6 +3,7 @@ package webcontroller
import (
"fmt"
"io/ioutil"
"math/rand"
"mime"
"net/http"
"strconv"
@@ -28,10 +29,25 @@ func browserCompat(ua string) bool {
return strings.Contains(ua, "MSIE") || strings.Contains(ua, "Trident/7.0")
}
func adType() (i int) {
// Intn returns a number up to n, but never n itself. So it get a random 0
// or 1 we need to give it n=2. We can use this function to make other
// splits like 1/3 1/4, etc
i = rand.Intn(2)
switch {
case i == 1: // 50% of the traffic
return 1 // Amarula
default:
return 0 // A-Ads
}
}
type viewerData struct {
Type string // file or list
CaptchaKey string
ViewToken string
AdType int
APIResponse interface{}
}
@@ -69,6 +85,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
Type: "list",
CaptchaKey: wc.captchaKey(),
ViewToken: wc.viewTokenOrBust(),
AdType: adType(),
APIResponse: pixelapi.List{
Success: true,
Title: "Multiple files",
@@ -82,6 +99,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
Type: "file",
CaptchaKey: wc.captchaKey(),
ViewToken: wc.viewTokenOrBust(),
AdType: adType(),
APIResponse: finfo[0].FileInfo,
}
}
@@ -105,6 +123,7 @@ func (wc *WebController) serveFileViewerDemo(w http.ResponseWriter, r *http.Requ
templateData.Other = viewerData{
Type: "file",
CaptchaKey: wc.captchaSiteKey,
AdType: 0, // Always show a-ads on the demo page
APIResponse: map[string]interface{}{
"id": "demo",
"name": "Demo file",
@@ -147,6 +166,7 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request,
Type: "list",
CaptchaKey: wc.captchaSiteKey,
ViewToken: wc.viewTokenOrBust(),
AdType: adType(),
APIResponse: list,
}
@@ -236,6 +256,7 @@ func (wc *WebController) serveSkynetViewer(w http.ResponseWriter, r *http.Reques
templateData.Title = fmt.Sprintf("name ~ Skynet")
templateData.Other = viewerData{
Type: "skylink",
AdType: adType(),
APIResponse: pixelapi.FileInfo{
Success: true,
ID: p.ByName("id"),