Add voucher portal and a-ads skyscraper
This commit is contained in:
45
res/include/script/file_viewer/Skyscraper.js
Normal file
45
res/include/script/file_viewer/Skyscraper.js
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
function Skyscraper() {
|
||||||
|
this.visible = false
|
||||||
|
|
||||||
|
this.divSkyscraper = document.getElementById("skyscraper")
|
||||||
|
this.divAdSpace = document.getElementById("skyscraper_ad_space")
|
||||||
|
this.divFilePreview = document.getElementById("filepreview")
|
||||||
|
this.btnClose = document.getElementById("btn_skyscraper_close")
|
||||||
|
this.btnClose.addEventListener("click", () => { this.close() })
|
||||||
|
}
|
||||||
|
|
||||||
|
Skyscraper.prototype.open = function () {
|
||||||
|
// If the ad popup was dismissed less than 24 hours ago we don't show it
|
||||||
|
let dismissal = +localStorage.getItem("viewer_skyscraper_ad_dismissed")
|
||||||
|
let now = new Date().getTime()
|
||||||
|
|
||||||
|
if (dismissal > 0 && now - dismissal < 60 * 60 * 24) {
|
||||||
|
console.log("Skyscraper dismissed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skyscraperType === "a-ads") {
|
||||||
|
this.divAdSpace.innerHTML = `<iframe
|
||||||
|
data-aa="1811738"
|
||||||
|
src="//ad.a-ads.com/1811738?size=160x600"
|
||||||
|
style="width:160px; height:600px; border:0px; padding:0; overflow:hidden; background-color: transparent;" >
|
||||||
|
</iframe>`
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.divSkyscraper.style.right = "0"
|
||||||
|
this.divFilePreview.style.right = this.divSkyscraper.offsetWidth + "px"
|
||||||
|
this.visible = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Skyscraper.prototype.close = function () {
|
||||||
|
this.divSkyscraper.style.right = -this.divSkyscraper.offsetWidth + "px"
|
||||||
|
this.divFilePreview.style.right = "0"
|
||||||
|
this.visible = false
|
||||||
|
|
||||||
|
localStorage.setItem("viewer_skyscraper_ad_dismissed", +new Date())
|
||||||
|
|
||||||
|
// Remove the ad from the DOM to save memory
|
||||||
|
setTimeout(() => { this.divSkyscraper.remove() }, 1000)
|
||||||
|
}
|
@@ -18,6 +18,7 @@ function Viewer(type, viewToken, data) {
|
|||||||
this.detailsWindow = new DetailsWindow(this)
|
this.detailsWindow = new DetailsWindow(this)
|
||||||
this.editWindow = new EditWindow()
|
this.editWindow = new EditWindow()
|
||||||
this.qrCodeWindow = new QRCodeWindow(this)
|
this.qrCodeWindow = new QRCodeWindow(this)
|
||||||
|
this.skyscraper = new Skyscraper()
|
||||||
|
|
||||||
this.divFilepreview = document.getElementById("filepreview")
|
this.divFilepreview = document.getElementById("filepreview")
|
||||||
|
|
||||||
@@ -26,6 +27,9 @@ function Viewer(type, viewToken, data) {
|
|||||||
if (this.divFilepreview.clientWidth > 600 && !this.toolbar.visible) {
|
if (this.divFilepreview.clientWidth > 600 && !this.toolbar.visible) {
|
||||||
this.toolbar.toggle()
|
this.toolbar.toggle()
|
||||||
}
|
}
|
||||||
|
if (this.divFilepreview.clientWidth > 1000) {
|
||||||
|
this.skyscraper.open()
|
||||||
|
}
|
||||||
|
|
||||||
if (embeddedViewer) {
|
if (embeddedViewer) {
|
||||||
// Remove padding from the headerbar
|
// Remove padding from the headerbar
|
||||||
|
@@ -113,7 +113,7 @@
|
|||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
transition: left 0.5s;
|
transition: left 0.5s, right 0.5s;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
box-shadow: inset 2px 2px 10px 2px var(--shadow_color);
|
box-shadow: inset 2px 2px 10px 2px var(--shadow_color);
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
@@ -143,7 +143,6 @@
|
|||||||
width: 8em;
|
width: 8em;
|
||||||
z-index: 49;
|
z-index: 49;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
float: left;
|
|
||||||
left: -9em;
|
left: -9em;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -160,7 +159,6 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
float: left;
|
|
||||||
box-shadow: inset 1px 1px 5px var(--shadow_color);
|
box-shadow: inset 1px 1px 5px var(--shadow_color);
|
||||||
background-color: var(--layer_1_color);
|
background-color: var(--layer_1_color);
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
@@ -169,6 +167,19 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition: left 0.5s;
|
transition: left 0.5s;
|
||||||
}
|
}
|
||||||
|
.file_viewer > .file_viewer_window > .skyscraper {
|
||||||
|
position: absolute;
|
||||||
|
width: 160px;
|
||||||
|
z-index: 49;
|
||||||
|
overflow: hidden;
|
||||||
|
right: -170px;
|
||||||
|
bottom: 0;
|
||||||
|
top: 0;
|
||||||
|
padding: 0;
|
||||||
|
text-align: center;
|
||||||
|
transition: right 0.5s;
|
||||||
|
background-color: var(--layer_2_color);
|
||||||
|
}
|
||||||
|
|
||||||
/* =====================
|
/* =====================
|
||||||
== FILE CONTAINERS ==
|
== FILE CONTAINERS ==
|
||||||
|
@@ -111,10 +111,34 @@
|
|||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
{{ else if eq .Other.AdBannerType 15 }}
|
{{ else if eq .Other.AdBannerType 15 }}
|
||||||
<!-- AuctionX Display platform tag START -->
|
<!-- AuctionX Display platform tag START -->
|
||||||
<div id="27517x728x90x4605x_ADSLOT1" clickTrack="%%CLICK_URL_ESC%%" style="display: block; margin: auto;"></div>
|
<div id="27517x728x90x4605x_ADSLOT1" clickTrack="%%CLICK_URL_ESC%%" style="display: block; margin: auto;"></div>
|
||||||
<script type="text/javascript" async src="https://served-by.pixfuture.com/www/delivery/headerbid.js" slotId="27517x728x90x4605x_ADSLOT1" refreshTime="5" refreshInterval="60"></script>
|
<script type="text/javascript" async src="https://served-by.pixfuture.com/www/delivery/headerbid.js" slotId="27517x728x90x4605x_ADSLOT1" refreshTime="5" refreshInterval="60"></script>
|
||||||
<!-- AuctionX Display platform tag END -->
|
<!-- AuctionX Display platform tag END -->
|
||||||
|
{{ else if eq .Other.AdBannerType 16 }}
|
||||||
|
<div style="text-align: center; line-height: 1.4em; font-size: 22px;">
|
||||||
|
<a href="https://pixeldrain.com/click/QVPk2osE?target=%2Fvouchercodes" class="button button_highlight" style="margin: 8px;">
|
||||||
|
<i class="icon">shopping_cart</i>
|
||||||
|
Click here for online shopping discounts!
|
||||||
|
<i class="icon">shopping_cart</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{ else if eq .Other.AdBannerType 17 }}
|
||||||
|
<div style="text-align: center; line-height: 1.4em; font-size: 22px;">
|
||||||
|
<a href="https://pixeldrain.com/click/SrYUqAXy?target=%2Fvouchercodes" class="button button_highlight" style="margin: 8px;">
|
||||||
|
<i class="icon">shopping_cart</i>
|
||||||
|
Check our online shopping discounts!
|
||||||
|
<i class="icon">shopping_cart</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{ else if eq .Other.AdBannerType 18 }}
|
||||||
|
<div style="text-align: center; line-height: 1.4em; font-size: 22px;">
|
||||||
|
<a href="https://pixeldrain.com/click/jx4tkNzE?target=%2Fvouchercodes" class="button button_highlight" style="margin: 8px;">
|
||||||
|
<i class="icon">shopping_cart</i>
|
||||||
|
Free coupon codes for online shopping!
|
||||||
|
<i class="icon">shopping_cart</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
@@ -104,18 +104,18 @@
|
|||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
{{ if and .Other.FileAdsEnabled .Other.UserAdsEnabled }}
|
{{ if and .Other.FileAdsEnabled .Other.UserAdsEnabled }}
|
||||||
<hr/>
|
<hr/>
|
||||||
Tired of ads?<br/>
|
Tired of ads?<br/>
|
||||||
Files expiring too soon?<br/>
|
Files expiring too soon?<br/>
|
||||||
<a class="button button_highlight" href="/click/7wy9gg2J?target=%2F%23pro">
|
<a class="button button_highlight" href="/click/7wy9gg2J?target=%2F%23pro">
|
||||||
<svg style="float: left; width: 2em; height: 2em; fill: currentColor; margin-right: 4px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
<svg style="float: left; width: 2em; height: 2em; fill: currentColor; margin-right: 4px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
||||||
<g fill-rule="evenodd">
|
<g fill-rule="evenodd">
|
||||||
<path d="M64.1102,0.1004 C44.259,0.1004 28.1086,16.2486 28.1086,36.0986 C28.1086,55.8884 44.259,71.989 64.1102,71.989 C83.9,71.989 100,55.8884 100,36.0986 C100,16.2486 83.9,0.1004 64.1102,0.1004"/>
|
<path d="M64.1102,0.1004 C44.259,0.1004 28.1086,16.2486 28.1086,36.0986 C28.1086,55.8884 44.259,71.989 64.1102,71.989 C83.9,71.989 100,55.8884 100,36.0986 C100,16.2486 83.9,0.1004 64.1102,0.1004"/>
|
||||||
<polygon points=".012 95.988 17.59 95.988 17.59 .1 .012 .1"/>
|
<polygon points=".012 95.988 17.59 95.988 17.59 .1 .012 .1"/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
Become a Patron!
|
Become a Patron!
|
||||||
</a>
|
</a>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- This frame will load the download URL when a download button is pressed -->
|
<!-- This frame will load the download URL when a download button is pressed -->
|
||||||
@@ -144,6 +144,13 @@
|
|||||||
<div id="filepreview" class="file_viewer_file_preview checkers">
|
<div id="filepreview" class="file_viewer_file_preview checkers">
|
||||||
<div class="center" style="width: 100px; height: 100px;">{{template "spinner.svg" .}}</div>
|
<div class="center" style="width: 100px; height: 100px;">{{template "spinner.svg" .}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="skyscraper" class="skyscraper">
|
||||||
|
<button id="btn_skyscraper_close" class="round">
|
||||||
|
<i class="icon">close</i> Close ad
|
||||||
|
</button>
|
||||||
|
<div id="skyscraper_ad_space"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="sponsors" class="sponsors">
|
<div id="sponsors" class="sponsors">
|
||||||
@@ -159,13 +166,6 @@
|
|||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ if and (and .Other.FileAdsEnabled .Other.UserAdsEnabled) (ne .Other.AdPopupType 0) }}
|
|
||||||
<div class="popup_warn">
|
|
||||||
You are viewing a large file ( > 250 MB ). Pop-up ads have been
|
|
||||||
enabled to cover bandwidth cost.
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template id="tpl_details_popup">
|
<template id="tpl_details_popup">
|
||||||
@@ -290,16 +290,6 @@
|
|||||||
<b>Malware</b>: Software programs designed to cause harm to
|
<b>Malware</b>: Software programs designed to cause harm to
|
||||||
computer systems.
|
computer systems.
|
||||||
</label>
|
</label>
|
||||||
<!--
|
|
||||||
<h3>E-mail address</h3>
|
|
||||||
<p>
|
|
||||||
If you want to be notified when this file gets blocked you
|
|
||||||
can enter your e-mail address here. This is optional, you
|
|
||||||
can leave it empty if you want.
|
|
||||||
</p>
|
|
||||||
<input class="abuse_email_field" type="text" placeholder="e-mail address" style="width: 100%"/>
|
|
||||||
<br/>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<h3>Send</h3>
|
<h3>Send</h3>
|
||||||
<div class="abuse_report_notification" style="display: none;"></div>
|
<div class="abuse_report_notification" style="display: none;"></div>
|
||||||
@@ -335,10 +325,13 @@
|
|||||||
let embeddedViewer = {{.Other.Embedded}};
|
let embeddedViewer = {{.Other.Embedded}};
|
||||||
let userAuthenticated = {{.Authenticated}};
|
let userAuthenticated = {{.Authenticated}};
|
||||||
let highlightColor = '#{{.Style.HighlightColor.RGB}}';
|
let highlightColor = '#{{.Style.HighlightColor.RGB}}';
|
||||||
|
let skyscraperType = "{{.Other.AdSkyscraperType}}"
|
||||||
|
|
||||||
{{template `util.js`}}
|
{{template `util.js`}}
|
||||||
{{template `drawGraph.js`}}
|
{{template `drawGraph.js`}}
|
||||||
{{template `Modal.js`}}
|
{{template `Modal.js`}}
|
||||||
{{template `Toolbar.js`}}
|
{{template `Toolbar.js`}}
|
||||||
|
{{template `Skyscraper.js`}}
|
||||||
{{template `EditWindow.js`}}
|
{{template `EditWindow.js`}}
|
||||||
{{template `EmbedWindow.js`}}
|
{{template `EmbedWindow.js`}}
|
||||||
{{template `QRCodeWindow.js`}}
|
{{template `QRCodeWindow.js`}}
|
||||||
@@ -366,9 +359,8 @@
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{{template "analytics"}}
|
|
||||||
|
|
||||||
{{ if and .Other.FileAdsEnabled .Other.UserAdsEnabled }}
|
{{ if and .Other.FileAdsEnabled .Other.UserAdsEnabled }}
|
||||||
|
{{ template "analytics" }}
|
||||||
{{ template "floating_ads" . }}
|
{{ template "floating_ads" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</body>
|
</body>
|
||||||
|
@@ -25,21 +25,24 @@ func browserCompat(ua string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type viewerData struct {
|
type viewerData struct {
|
||||||
Type string // file or list
|
Type string // file or list
|
||||||
CaptchaKey string
|
CaptchaKey string
|
||||||
ViewToken string
|
ViewToken string
|
||||||
AdBannerType int
|
AdBannerType int
|
||||||
AdFloaterType int
|
AdSkyscraperType string
|
||||||
AdPopupType int
|
AdFloaterType int
|
||||||
FileAdsEnabled bool
|
AdPopupType int
|
||||||
UserAdsEnabled bool
|
FileAdsEnabled bool
|
||||||
Embedded bool
|
UserAdsEnabled bool
|
||||||
APIResponse interface{}
|
Embedded bool
|
||||||
|
APIResponse interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vd *viewerData) adType(files []pixelapi.ListFile) {
|
func (vd *viewerData) adType(files []pixelapi.ListFile) {
|
||||||
if len(files) == 0 {
|
if len(files) == 0 {
|
||||||
return
|
return
|
||||||
|
} else if !vd.FileAdsEnabled || !vd.UserAdsEnabled {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var avgSize int64
|
var avgSize int64
|
||||||
@@ -71,17 +74,26 @@ func (vd *viewerData) adType(files []pixelapi.ListFile) {
|
|||||||
amarulaElectronics = 13
|
amarulaElectronics = 13
|
||||||
adsPlus = 14
|
adsPlus = 14
|
||||||
pixFuture = 15
|
pixFuture = 15
|
||||||
|
publisherrest1 = 16
|
||||||
|
publisherrest2 = 17
|
||||||
|
publisherrest3 = 18
|
||||||
|
|
||||||
|
// Skyscrapers
|
||||||
|
aAdsSkyscraper = "a-ads"
|
||||||
|
pixfutureSkyscraper = "pixfuture"
|
||||||
|
|
||||||
// Floaters
|
// Floaters
|
||||||
propellerFloat = 1
|
// propellerFloat = 1
|
||||||
adSterraFloat = 2
|
// adSterraFloat = 2
|
||||||
adMavenFloat = 3
|
// adMavenFloat = 3
|
||||||
|
|
||||||
// Popunders
|
// Popunders
|
||||||
// clickAduPopup = 1
|
// clickAduPopup = 1
|
||||||
// propellerPopup = 2
|
// propellerPopup = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
vd.AdSkyscraperType = aAdsSkyscraper
|
||||||
|
|
||||||
// Intn returns a number up to n, but never n itself. So to get a random 0
|
// Intn returns a number up to n, but never n itself. So to get a random 0
|
||||||
// or 1 we need to give it n=2. We can use this function to make other
|
// or 1 we need to give it n=2. We can use this function to make other
|
||||||
// splits like 1/3 1/4, etc
|
// splits like 1/3 1/4, etc
|
||||||
@@ -89,12 +101,16 @@ func (vd *viewerData) adType(files []pixelapi.ListFile) {
|
|||||||
if nudity {
|
if nudity {
|
||||||
// Brave and a-ads don't care about nudity. I'm not sure about ads.plus
|
// Brave and a-ads don't care about nudity. I'm not sure about ads.plus
|
||||||
switch i := rand.Intn(10); i {
|
switch i := rand.Intn(10); i {
|
||||||
case 0, 1, 2, 3:
|
case 0, 1:
|
||||||
vd.AdBannerType = brave
|
vd.AdBannerType = brave
|
||||||
case 4, 5, 6, 7:
|
case 2, 3, 4, 5, 6:
|
||||||
vd.AdBannerType = adsPlus
|
vd.AdBannerType = adsPlus
|
||||||
case 8, 9:
|
case 7:
|
||||||
vd.AdBannerType = aAds
|
vd.AdBannerType = publisherrest1
|
||||||
|
case 8:
|
||||||
|
vd.AdBannerType = publisherrest2
|
||||||
|
case 9:
|
||||||
|
vd.AdBannerType = publisherrest3
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("random number generator returned unrecognised number: %d", i))
|
panic(fmt.Errorf("random number generator returned unrecognised number: %d", i))
|
||||||
}
|
}
|
||||||
@@ -104,32 +120,33 @@ func (vd *viewerData) adType(files []pixelapi.ListFile) {
|
|||||||
switch i := rand.Intn(10); i {
|
switch i := rand.Intn(10); i {
|
||||||
case 0, 1:
|
case 0, 1:
|
||||||
vd.AdBannerType = brave
|
vd.AdBannerType = brave
|
||||||
case 2, 3, 4, 5:
|
case 2, 3:
|
||||||
vd.AdBannerType = adsPlus
|
vd.AdBannerType = adsPlus
|
||||||
case 6, 7, 8, 9:
|
case 4, 5, 6:
|
||||||
vd.AdBannerType = pixFuture
|
vd.AdBannerType = pixFuture
|
||||||
|
case 7:
|
||||||
|
vd.AdBannerType = publisherrest1
|
||||||
|
case 8:
|
||||||
|
vd.AdBannerType = publisherrest2
|
||||||
|
case 9:
|
||||||
|
vd.AdBannerType = publisherrest3
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("random number generator returned unrecognised number: %d", i))
|
panic(fmt.Errorf("random number generator returned unrecognised number: %d", i))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the file is larger than 30 MB we enable floating popups
|
|
||||||
if avgSize > 30e6 {
|
|
||||||
vd.AdFloaterType = propellerFloat
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServeFileViewer controller for GET /u/:id
|
// ServeFileViewer controller for GET /u/:id
|
||||||
func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
var err error
|
var err error
|
||||||
if p.ByName("id") == "demo" {
|
if p.ByName("id") == "demo" {
|
||||||
wc.serveFileViewerDemo(w, r, 1) // Required for a-ads.com quality check
|
wc.serveFileViewerDemo(w, r, 1, "a-ads") // Required for a-ads.com quality check
|
||||||
return
|
return
|
||||||
} else if p.ByName("id") == "adsplus" {
|
} else if p.ByName("id") == "adsplus" {
|
||||||
wc.serveFileViewerDemo(w, r, 14)
|
wc.serveFileViewerDemo(w, r, 14, "")
|
||||||
return
|
return
|
||||||
} else if p.ByName("id") == "pixfuture" {
|
} else if p.ByName("id") == "pixfuture" {
|
||||||
wc.serveFileViewerDemo(w, r, 15)
|
wc.serveFileViewerDemo(w, r, 15, "")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,14 +232,15 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
// ServeFileViewerDemo is a dummy API response that responds with info about a
|
// ServeFileViewerDemo is a dummy API response that responds with info about a
|
||||||
// non-existent demo file. This is required by the a-ads ad network to allow for
|
// non-existent demo file. This is required by the a-ads ad network to allow for
|
||||||
// automatic checking of the presence of the ad unit on this page.
|
// automatic checking of the presence of the ad unit on this page.
|
||||||
func (wc *WebController) serveFileViewerDemo(w http.ResponseWriter, r *http.Request, banner int) {
|
func (wc *WebController) serveFileViewerDemo(w http.ResponseWriter, r *http.Request, banner int, scraper string) {
|
||||||
templateData := wc.newTemplateData(w, r)
|
templateData := wc.newTemplateData(w, r)
|
||||||
templateData.Other = viewerData{
|
templateData.Other = viewerData{
|
||||||
Type: "file",
|
Type: "file",
|
||||||
CaptchaKey: wc.captchaSiteKey,
|
CaptchaKey: wc.captchaSiteKey,
|
||||||
AdBannerType: banner, // Always show a-ads on the demo page
|
AdBannerType: banner, // Always show a-ads on the demo page
|
||||||
FileAdsEnabled: true,
|
AdSkyscraperType: scraper,
|
||||||
UserAdsEnabled: true,
|
FileAdsEnabled: true,
|
||||||
|
UserAdsEnabled: true,
|
||||||
APIResponse: map[string]interface{}{
|
APIResponse: map[string]interface{}{
|
||||||
"id": "demo",
|
"id": "demo",
|
||||||
"name": "Demo file",
|
"name": "Demo file",
|
||||||
|
Reference in New Issue
Block a user