FEATURE: support multiple ad sizes in AdSense and Ad Manager
Each ad placement in the AdSense and Ad Manager settings takes a list of ad sizes instead of only one size. If given multiple sizes, the sizes will alternate in order for each ad that's rendered.
This commit is contained in:
parent
6f786b2f4d
commit
333f6cef81
|
|
@ -7,6 +7,7 @@ import loadScript from "discourse/lib/load-script";
|
||||||
|
|
||||||
let _loaded = false,
|
let _loaded = false,
|
||||||
_promise = null,
|
_promise = null,
|
||||||
|
renderCounts = {},
|
||||||
publisher_id = Discourse.SiteSettings.adsense_publisher_code;
|
publisher_id = Discourse.SiteSettings.adsense_publisher_code;
|
||||||
|
|
||||||
const mobileView = Discourse.Site.currentProp("mobileView");
|
const mobileView = Discourse.Site.currentProp("mobileView");
|
||||||
|
|
@ -44,107 +45,43 @@ function loadAdsense() {
|
||||||
return _promise;
|
return _promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = {
|
const DESKTOP_SETTINGS = {
|
||||||
"topic-list-top": {},
|
"topic-list-top": {
|
||||||
"topic-above-post-stream": {},
|
code: "adsense_topic_list_top_code",
|
||||||
"topic-above-suggested": {},
|
sizes: "adsense_topic_list_top_ad_sizes"
|
||||||
"post-bottom": {}
|
},
|
||||||
|
"topic-above-post-stream": {
|
||||||
|
code: "adsense_topic_above_post_stream_code",
|
||||||
|
sizes: "adsense_topic_above_post_stream_ad_sizes"
|
||||||
|
},
|
||||||
|
"topic-above-suggested": {
|
||||||
|
code: "adsense_topic_above_suggested_code",
|
||||||
|
sizes: "adsense_topic_above_suggested_ad_sizes"
|
||||||
|
},
|
||||||
|
"post-bottom": {
|
||||||
|
code: "adsense_post_bottom_code",
|
||||||
|
sizes: "adsense_post_bottom_ad_sizes"
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Discourse.SiteSettings.adsense_publisher_code) {
|
const MOBILE_SETTINGS = {
|
||||||
if (!mobileView && Discourse.SiteSettings.adsense_topic_list_top_code) {
|
"topic-list-top": {
|
||||||
data["topic-list-top"]["ad_code"] =
|
code: "adsense_mobile_topic_list_top_code",
|
||||||
Discourse.SiteSettings.adsense_topic_list_top_code;
|
sizes: "adsense_mobile_topic_list_top_ad_size"
|
||||||
data["topic-list-top"]["ad_width"] = parseAdWidth(
|
},
|
||||||
Discourse.SiteSettings.adsense_topic_list_top_ad_sizes
|
"topic-above-post-stream": {
|
||||||
);
|
code: "adsense_mobile_topic_above_post_stream_code",
|
||||||
data["topic-list-top"]["ad_height"] = parseAdHeight(
|
sizes: "adsense_mobile_topic_above_post_stream_ad_size"
|
||||||
Discourse.SiteSettings.adsense_topic_list_top_ad_sizes
|
},
|
||||||
);
|
"topic-above-suggested": {
|
||||||
}
|
code: "adsense_mobile_topic_above_suggested_code",
|
||||||
if (mobileView && Discourse.SiteSettings.adsense_mobile_topic_list_top_code) {
|
sizes: "adsense_mobile_topic_above_suggested_ad_size"
|
||||||
data["topic-list-top"]["ad_code"] =
|
},
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_list_top_code;
|
"post-bottom": {
|
||||||
data["topic-list-top"]["ad_width"] = parseAdWidth(
|
code: "adsense_mobile_post_bottom_code",
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_list_top_ad_size
|
sizes: "adsense_mobile_post_bottom_ad_size"
|
||||||
);
|
|
||||||
data["topic-list-top"]["ad_height"] = parseAdHeight(
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_list_top_ad_size
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
!mobileView &&
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_post_stream_code
|
|
||||||
) {
|
|
||||||
data["topic-above-post-stream"]["ad_code"] =
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_post_stream_code;
|
|
||||||
data["topic-above-post-stream"]["ad_width"] = parseAdWidth(
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_post_stream_ad_sizes
|
|
||||||
);
|
|
||||||
data["topic-above-post-stream"]["ad_height"] = parseAdHeight(
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_post_stream_ad_sizes
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
mobileView &&
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_post_stream_code
|
|
||||||
) {
|
|
||||||
data["topic-above-post-stream"]["ad_code"] =
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_post_stream_code;
|
|
||||||
data["topic-above-post-stream"]["ad_width"] = parseAdWidth(
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_post_stream_ad_size
|
|
||||||
);
|
|
||||||
data["topic-above-post-stream"]["ad_height"] = parseAdHeight(
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_post_stream_ad_size
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
!mobileView &&
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_suggested_code
|
|
||||||
) {
|
|
||||||
data["topic-above-suggested"]["ad_code"] =
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_suggested_code;
|
|
||||||
data["topic-above-suggested"]["ad_width"] = parseAdWidth(
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_suggested_ad_sizes
|
|
||||||
);
|
|
||||||
data["topic-above-suggested"]["ad_height"] = parseAdHeight(
|
|
||||||
Discourse.SiteSettings.adsense_topic_above_suggested_ad_sizes
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
mobileView &&
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_suggested_code
|
|
||||||
) {
|
|
||||||
data["topic-above-suggested"]["ad_code"] =
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_suggested_code;
|
|
||||||
data["topic-above-suggested"]["ad_width"] = parseAdWidth(
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_suggested_ad_size
|
|
||||||
);
|
|
||||||
data["topic-above-suggested"]["ad_height"] = parseAdHeight(
|
|
||||||
Discourse.SiteSettings.adsense_mobile_topic_above_suggested_ad_size
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!mobileView && Discourse.SiteSettings.adsense_post_bottom_code) {
|
|
||||||
data["post-bottom"]["ad_code"] =
|
|
||||||
Discourse.SiteSettings.adsense_post_bottom_code;
|
|
||||||
data["post-bottom"]["ad_width"] = parseAdWidth(
|
|
||||||
Discourse.SiteSettings.adsense_post_bottom_ad_sizes
|
|
||||||
);
|
|
||||||
data["post-bottom"]["ad_height"] = parseAdHeight(
|
|
||||||
Discourse.SiteSettings.adsense_post_bottom_ad_sizes
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (mobileView && Discourse.SiteSettings.adsense_mobile_post_bottom_code) {
|
|
||||||
data["post-bottom"]["ad_code"] =
|
|
||||||
Discourse.SiteSettings.adsense_mobile_post_bottom_code;
|
|
||||||
data["post-bottom"]["ad_width"] = parseAdWidth(
|
|
||||||
Discourse.SiteSettings.adsense_mobile_post_bottom_ad_size
|
|
||||||
);
|
|
||||||
data["post-bottom"]["ad_height"] = parseAdHeight(
|
|
||||||
Discourse.SiteSettings.adsense_mobile_post_bottom_ad_size
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export default AdComponent.extend({
|
export default AdComponent.extend({
|
||||||
classNameBindings: [
|
classNameBindings: [
|
||||||
|
|
@ -161,9 +98,31 @@ export default AdComponent.extend({
|
||||||
adRequested: false,
|
adRequested: false,
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this.set("ad_width", data[this.placement]["ad_width"]);
|
let config, size;
|
||||||
this.set("ad_height", data[this.placement]["ad_height"]);
|
const placement = this.get("placement");
|
||||||
this.set("ad_code", data[this.placement]["ad_code"]);
|
|
||||||
|
if (this.site.mobileView) {
|
||||||
|
config = MOBILE_SETTINGS[placement];
|
||||||
|
} else {
|
||||||
|
config = DESKTOP_SETTINGS[placement];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!renderCounts[placement]) {
|
||||||
|
renderCounts[placement] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sizes = (this.siteSettings[config.sizes] || "").split("|");
|
||||||
|
|
||||||
|
if (sizes.length == 1) {
|
||||||
|
size = sizes[0];
|
||||||
|
} else {
|
||||||
|
size = sizes[renderCounts[placement] % sizes.length];
|
||||||
|
renderCounts[placement] += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.set("ad_width", parseAdWidth(size));
|
||||||
|
this.set("ad_height", parseAdHeight(size));
|
||||||
|
this.set("ad_code", this.siteSettings[config.code]);
|
||||||
this._super();
|
this._super();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@ import loadScript from "discourse/lib/load-script";
|
||||||
let _loaded = false,
|
let _loaded = false,
|
||||||
_promise = null,
|
_promise = null,
|
||||||
ads = {},
|
ads = {},
|
||||||
nextSlotNum = 1;
|
nextSlotNum = 1,
|
||||||
|
renderCounts = {};
|
||||||
|
|
||||||
function getNextSlotNum() {
|
function getNextSlotNum() {
|
||||||
return nextSlotNum++;
|
return nextSlotNum++;
|
||||||
|
|
@ -104,7 +105,7 @@ const MOBILE_SETTINGS = {
|
||||||
};
|
};
|
||||||
|
|
||||||
function getWidthAndHeight(placement, settings, isMobile) {
|
function getWidthAndHeight(placement, settings, isMobile) {
|
||||||
let config;
|
let config, size;
|
||||||
|
|
||||||
if (isMobile) {
|
if (isMobile) {
|
||||||
config = MOBILE_SETTINGS[placement];
|
config = MOBILE_SETTINGS[placement];
|
||||||
|
|
@ -112,9 +113,22 @@ function getWidthAndHeight(placement, settings, isMobile) {
|
||||||
config = DESKTOP_SETTINGS[placement];
|
config = DESKTOP_SETTINGS[placement];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!renderCounts[placement]) {
|
||||||
|
renderCounts[placement] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sizes = (settings[config.sizes] || "").split("|");
|
||||||
|
|
||||||
|
if (sizes.length == 1) {
|
||||||
|
size = sizes[0];
|
||||||
|
} else {
|
||||||
|
size = sizes[renderCounts[placement] % sizes.length];
|
||||||
|
renderCounts[placement] += 1;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
width: parseInt(splitWidthInt(settings[config.sizes])),
|
width: parseInt(splitWidthInt(size)),
|
||||||
height: parseInt(splitHeightInt(settings[config.sizes]))
|
height: parseInt(splitHeightInt(size))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ adsense_plugin:
|
||||||
adsense_topic_list_top_ad_sizes:
|
adsense_topic_list_top_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: &adsense_choices
|
choices: &adsense_choices
|
||||||
- responsive
|
- responsive
|
||||||
- 728*90 - leaderboard
|
- 728*90 - leaderboard
|
||||||
|
|
@ -73,7 +73,7 @@ adsense_plugin:
|
||||||
adsense_mobile_topic_list_top_ad_size:
|
adsense_mobile_topic_list_top_ad_size:
|
||||||
client: true
|
client: true
|
||||||
default: "responsive"
|
default: "responsive"
|
||||||
type: enum
|
type: list
|
||||||
choices: *adsense_choices
|
choices: *adsense_choices
|
||||||
adsense_topic_above_post_stream_code:
|
adsense_topic_above_post_stream_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -83,7 +83,7 @@ adsense_plugin:
|
||||||
adsense_topic_above_post_stream_ad_sizes:
|
adsense_topic_above_post_stream_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *adsense_choices
|
choices: *adsense_choices
|
||||||
adsense_mobile_topic_above_post_stream_code:
|
adsense_mobile_topic_above_post_stream_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -93,7 +93,7 @@ adsense_plugin:
|
||||||
adsense_mobile_topic_above_post_stream_ad_size:
|
adsense_mobile_topic_above_post_stream_ad_size:
|
||||||
client: true
|
client: true
|
||||||
default: "responsive"
|
default: "responsive"
|
||||||
type: enum
|
type: list
|
||||||
choices: *adsense_choices
|
choices: *adsense_choices
|
||||||
adsense_topic_above_suggested_code:
|
adsense_topic_above_suggested_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -103,7 +103,7 @@ adsense_plugin:
|
||||||
adsense_topic_above_suggested_ad_sizes:
|
adsense_topic_above_suggested_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *adsense_choices
|
choices: *adsense_choices
|
||||||
adsense_mobile_topic_above_suggested_code:
|
adsense_mobile_topic_above_suggested_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -113,7 +113,7 @@ adsense_plugin:
|
||||||
adsense_mobile_topic_above_suggested_ad_size:
|
adsense_mobile_topic_above_suggested_ad_size:
|
||||||
client: true
|
client: true
|
||||||
default: "responsive"
|
default: "responsive"
|
||||||
type: enum
|
type: list
|
||||||
choices: *adsense_choices
|
choices: *adsense_choices
|
||||||
adsense_post_bottom_code:
|
adsense_post_bottom_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -123,7 +123,7 @@ adsense_plugin:
|
||||||
adsense_post_bottom_ad_sizes:
|
adsense_post_bottom_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *adsense_choices
|
choices: *adsense_choices
|
||||||
adsense_mobile_post_bottom_code:
|
adsense_mobile_post_bottom_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -133,7 +133,7 @@ adsense_plugin:
|
||||||
adsense_mobile_post_bottom_ad_size:
|
adsense_mobile_post_bottom_ad_size:
|
||||||
client: true
|
client: true
|
||||||
default: "responsive"
|
default: "responsive"
|
||||||
type: enum
|
type: list
|
||||||
choices: *adsense_choices
|
choices: *adsense_choices
|
||||||
adsense_nth_post_code:
|
adsense_nth_post_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -158,7 +158,7 @@ dfp_plugin:
|
||||||
dfp_topic_list_top_ad_sizes:
|
dfp_topic_list_top_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: &dfp_choices
|
choices: &dfp_choices
|
||||||
- 728*90 - leaderboard
|
- 728*90 - leaderboard
|
||||||
- 336*280 - large rectangle
|
- 336*280 - large rectangle
|
||||||
|
|
@ -200,7 +200,7 @@ dfp_plugin:
|
||||||
dfp_mobile_topic_list_top_ad_sizes:
|
dfp_mobile_topic_list_top_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "320*50 - mobile leaderboard"
|
default: "320*50 - mobile leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *dfp_choices
|
choices: *dfp_choices
|
||||||
dfp_target_topic_list_top_key_code:
|
dfp_target_topic_list_top_key_code:
|
||||||
default: ""
|
default: ""
|
||||||
|
|
@ -217,7 +217,7 @@ dfp_plugin:
|
||||||
dfp_topic_above_post_stream_ad_sizes:
|
dfp_topic_above_post_stream_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *dfp_choices
|
choices: *dfp_choices
|
||||||
dfp_mobile_topic_above_post_stream_code:
|
dfp_mobile_topic_above_post_stream_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -226,7 +226,7 @@ dfp_plugin:
|
||||||
dfp_mobile_topic_above_post_stream_ad_sizes:
|
dfp_mobile_topic_above_post_stream_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "320*50 - mobile leaderboard"
|
default: "320*50 - mobile leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *dfp_choices
|
choices: *dfp_choices
|
||||||
dfp_target_topic_above_post_stream_key_code:
|
dfp_target_topic_above_post_stream_key_code:
|
||||||
default: ""
|
default: ""
|
||||||
|
|
@ -243,7 +243,7 @@ dfp_plugin:
|
||||||
dfp_topic_above_suggested_ad_sizes:
|
dfp_topic_above_suggested_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *dfp_choices
|
choices: *dfp_choices
|
||||||
dfp_mobile_topic_above_suggested_code:
|
dfp_mobile_topic_above_suggested_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -252,7 +252,7 @@ dfp_plugin:
|
||||||
dfp_mobile_topic_above_suggested_ad_sizes:
|
dfp_mobile_topic_above_suggested_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "320*50 - mobile leaderboard"
|
default: "320*50 - mobile leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *dfp_choices
|
choices: *dfp_choices
|
||||||
dfp_target_topic_above_suggested_key_code:
|
dfp_target_topic_above_suggested_key_code:
|
||||||
default: ""
|
default: ""
|
||||||
|
|
@ -274,7 +274,7 @@ dfp_plugin:
|
||||||
dfp_post_bottom_ad_sizes:
|
dfp_post_bottom_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "728*90 - leaderboard"
|
default: "728*90 - leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *dfp_choices
|
choices: *dfp_choices
|
||||||
dfp_mobile_post_bottom_code:
|
dfp_mobile_post_bottom_code:
|
||||||
client: true
|
client: true
|
||||||
|
|
@ -283,7 +283,7 @@ dfp_plugin:
|
||||||
dfp_mobile_post_bottom_ad_sizes:
|
dfp_mobile_post_bottom_ad_sizes:
|
||||||
client: true
|
client: true
|
||||||
default: "320*50 - mobile leaderboard"
|
default: "320*50 - mobile leaderboard"
|
||||||
type: enum
|
type: list
|
||||||
choices: *dfp_choices
|
choices: *dfp_choices
|
||||||
dfp_target_post_bottom_key_code:
|
dfp_target_post_bottom_key_code:
|
||||||
default: ""
|
default: ""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue