refactor google-dfp-ad component to reduce repetition
This commit is contained in:
parent
ccad3ca226
commit
9a695cc67d
|
@ -54,206 +54,92 @@ function custom_targeting(key_array, value_array, location) {
|
|||
}
|
||||
}
|
||||
|
||||
const DESKTOP_SETTINGS = {
|
||||
"topic-list-top": {
|
||||
code: "dfp_topic_list_top_code",
|
||||
sizes: "dfp_topic_list_top_ad_sizes",
|
||||
targeting_keys: "dfp_target_topic_list_top_key_code",
|
||||
targeting_values: "dfp_target_topic_list_top_value_code"
|
||||
},
|
||||
"topic-above-post-stream": {
|
||||
code: "dfp_topic_above_post_stream_code",
|
||||
sizes: "dfp_topic_above_post_stream_ad_sizes",
|
||||
targeting_keys: "dfp_target_topic_above_post_stream_key_code",
|
||||
targeting_values: "dfp_target_topic_above_post_stream_value_code"
|
||||
},
|
||||
"topic-above-suggested": {
|
||||
code: "dfp_topic_above_suggested_code",
|
||||
sizes: "dfp_topic_above_suggested_ad_sizes",
|
||||
targeting_keys: "dfp_target_topic_above_suggested_key_code",
|
||||
targeting_values: "dfp_target_topic_above_suggested_value_code"
|
||||
},
|
||||
"post-bottom": {
|
||||
code: "dfp_post_bottom_code",
|
||||
sizes: "dfp_topic_above_suggested_ad_sizes",
|
||||
targeting_keys: "dfp_target_post_bottom_key_code",
|
||||
targeting_values: "dfp_target_post_bottom_value_code"
|
||||
}
|
||||
};
|
||||
|
||||
const MOBILE_SETTINGS = {
|
||||
"topic-list-top": {
|
||||
code: "dfp_mobile_topic_list_top_code",
|
||||
sizes: "dfp_mobile_topic_list_top_ad_sizes",
|
||||
targeting_keys: "dfp_target_topic_list_top_key_code",
|
||||
targeting_values: "dfp_target_topic_list_top_value_code"
|
||||
},
|
||||
"topic-above-post-stream": {
|
||||
code: "dfp_mobile_topic_above_post_stream_code",
|
||||
sizes: "dfp_mobile_topic_above_post_stream_ad_sizes",
|
||||
targeting_keys: "dfp_target_topic_above_post_stream_key_code",
|
||||
targeting_values: "dfp_target_topic_above_post_stream_value_code"
|
||||
},
|
||||
"topic-above-suggested": {
|
||||
code: "dfp_mobile_topic_above_suggested_code",
|
||||
sizes: "dfp_mobile_topic_above_suggested_ad_sizes",
|
||||
targeting_keys: "dfp_target_topic_above_suggested_key_code",
|
||||
targeting_values: "dfp_target_topic_above_suggested_value_code"
|
||||
},
|
||||
"post-bottom": {
|
||||
code: "dfp_mobile_post_bottom_code",
|
||||
sizes: "dfp_mobile_post_bottom_ad_sizes",
|
||||
targeting_keys: "dfp_target_post_bottom_key_code",
|
||||
targeting_values: "dfp_target_post_bottom_value_code"
|
||||
}
|
||||
};
|
||||
|
||||
function defineSlot(divId, placement, settings, isMobile) {
|
||||
if (!settings.dfp_publisher_id) {
|
||||
return;
|
||||
}
|
||||
|
||||
var ad, width, height;
|
||||
let ad, width, height, config;
|
||||
|
||||
if (ads[divId]) {
|
||||
return ads[divId];
|
||||
}
|
||||
|
||||
if (
|
||||
placement === "topic-list-top" &&
|
||||
settings.dfp_topic_list_top_code &&
|
||||
settings.dfp_topic_list_top_ad_sizes
|
||||
) {
|
||||
if (isMobile) {
|
||||
width = parseInt(
|
||||
splitWidthInt(settings.dfp_mobile_topic_list_top_ad_sizes)
|
||||
);
|
||||
height = parseInt(
|
||||
splitHeightInt(settings.dfp_mobile_topic_list_top_ad_sizes)
|
||||
);
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" +
|
||||
settings.dfp_publisher_id +
|
||||
"/" +
|
||||
settings.dfp_mobile_topic_list_top_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(Discourse.SiteSettings.dfp_target_topic_list_top_key_code),
|
||||
keyParse(settings.dfp_target_topic_list_top_value_code),
|
||||
ad
|
||||
);
|
||||
} else {
|
||||
width = parseInt(splitWidthInt(settings.dfp_topic_list_top_ad_sizes));
|
||||
height = parseInt(splitHeightInt(settings.dfp_topic_list_top_ad_sizes));
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" +
|
||||
settings.dfp_publisher_id +
|
||||
"/" +
|
||||
settings.dfp_topic_list_top_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings.dfp_target_topic_list_top_key_code),
|
||||
keyParse(settings.dfp_target_topic_list_top_value_code),
|
||||
ad
|
||||
);
|
||||
}
|
||||
} else if (
|
||||
placement === "topic-above-post-stream" &&
|
||||
settings.dfp_topic_above_post_stream_code &&
|
||||
settings.dfp_topic_above_post_stream_ad_sizes
|
||||
) {
|
||||
if (isMobile) {
|
||||
width = parseInt(
|
||||
splitWidthInt(settings.dfp_mobile_topic_above_post_stream_ad_sizes)
|
||||
);
|
||||
height = parseInt(
|
||||
splitHeightInt(settings.dfp_mobile_topic_above_post_stream_ad_sizes)
|
||||
);
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" +
|
||||
settings.dfp_publisher_id +
|
||||
"/" +
|
||||
settings.dfp_mobile_topic_above_post_stream_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings.dfp_target_topic_above_post_stream_key_code),
|
||||
keyParse(settings.dfp_target_topic_above_post_stream_value_code),
|
||||
ad
|
||||
);
|
||||
} else {
|
||||
width = parseInt(
|
||||
splitWidthInt(settings.dfp_topic_above_post_stream_ad_sizes)
|
||||
);
|
||||
height = parseInt(
|
||||
splitHeightInt(settings.dfp_topic_above_post_stream_ad_sizes)
|
||||
);
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" +
|
||||
settings.dfp_publisher_id +
|
||||
"/" +
|
||||
settings.dfp_topic_above_post_stream_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings.dfp_target_topic_above_post_stream_key_code),
|
||||
keyParse(settings.dfp_target_topic_above_post_stream_value_code),
|
||||
ad
|
||||
);
|
||||
}
|
||||
} else if (
|
||||
placement === "topic-above-suggested" &&
|
||||
settings.dfp_topic_above_suggested_code &&
|
||||
settings.dfp_topic_above_suggested_ad_sizes
|
||||
) {
|
||||
if (isMobile) {
|
||||
width = parseInt(
|
||||
splitWidthInt(settings.dfp_mobile_topic_above_suggested_ad_sizes)
|
||||
);
|
||||
height = parseInt(
|
||||
splitHeightInt(settings.dfp_mobile_topic_above_suggested_ad_sizes)
|
||||
);
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" +
|
||||
settings.dfp_publisher_id +
|
||||
"/" +
|
||||
settings.dfp_mobile_topic_above_suggested_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings.dfp_target_topic_above_suggested_key_code),
|
||||
keyParse(settings.dfp_target_topic_above_suggested_value_code),
|
||||
ad
|
||||
);
|
||||
} else {
|
||||
width = parseInt(
|
||||
splitWidthInt(settings.dfp_topic_above_suggested_ad_sizes)
|
||||
);
|
||||
height = parseInt(
|
||||
splitHeightInt(settings.dfp_topic_above_suggested_ad_sizes)
|
||||
);
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" +
|
||||
settings.dfp_publisher_id +
|
||||
"/" +
|
||||
settings.dfp_topic_above_suggested_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings.dfp_target_topic_above_suggested_key_code),
|
||||
keyParse(settings.dfp_target_topic_above_suggested_value_code),
|
||||
ad
|
||||
);
|
||||
}
|
||||
} else if (
|
||||
placement === "post-bottom" &&
|
||||
settings.dfp_post_bottom_code &&
|
||||
settings.dfp_post_bottom_ad_sizes
|
||||
) {
|
||||
if (isMobile) {
|
||||
width = parseInt(splitWidthInt(settings.dfp_mobile_post_bottom_ad_sizes));
|
||||
height = parseInt(
|
||||
splitHeightInt(settings.dfp_mobile_post_bottom_ad_sizes)
|
||||
);
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" +
|
||||
settings.dfp_publisher_id +
|
||||
"/" +
|
||||
settings.dfp_mobile_post_bottom_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings.dfp_target_post_bottom_key_code),
|
||||
keyParse(settings.dfp_target_post_bottom_value_code),
|
||||
ad
|
||||
);
|
||||
} else {
|
||||
width = parseInt(splitWidthInt(settings.dfp_post_bottom_ad_sizes));
|
||||
height = parseInt(splitHeightInt(settings.dfp_post_bottom_ad_sizes));
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" + settings.dfp_publisher_id + "/" + settings.dfp_post_bottom_code,
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings.dfp_target_post_bottom_key_code),
|
||||
keyParse(settings.dfp_target_post_bottom_value_code),
|
||||
ad
|
||||
);
|
||||
}
|
||||
if (isMobile) {
|
||||
config = MOBILE_SETTINGS[placement];
|
||||
} else {
|
||||
config = DESKTOP_SETTINGS[placement];
|
||||
}
|
||||
|
||||
width = parseInt(splitWidthInt(settings[config.sizes]));
|
||||
height = parseInt(splitHeightInt(settings[config.sizes]));
|
||||
ad = window.googletag
|
||||
.defineSlot(
|
||||
"/" + settings.dfp_publisher_id + "/" + settings[config.code],
|
||||
[width, height],
|
||||
divId
|
||||
)
|
||||
.addService(window.googletag.pubads());
|
||||
custom_targeting(
|
||||
keyParse(settings[config.targeting_keys]),
|
||||
keyParse(settings[config.targeting_values]),
|
||||
ad
|
||||
);
|
||||
|
||||
if (ad) {
|
||||
ads[divId] = { ad: ad, width: width, height: height };
|
||||
return ads[divId];
|
||||
|
@ -372,28 +258,27 @@ export default Ember.Component.extend({
|
|||
}
|
||||
|
||||
var self = this;
|
||||
loadGoogle(this.siteSettings)
|
||||
.then(function() {
|
||||
self.set("loadedGoogletag", true);
|
||||
window.googletag.cmd.push(function() {
|
||||
let slot = defineSlot(
|
||||
self.get("divId"),
|
||||
self.get("placement"),
|
||||
self.siteSettings,
|
||||
self.site.mobileView
|
||||
loadGoogle(this.siteSettings).then(function() {
|
||||
self.set("loadedGoogletag", true);
|
||||
window.googletag.cmd.push(function() {
|
||||
let slot = defineSlot(
|
||||
self.get("divId"),
|
||||
self.get("placement"),
|
||||
self.siteSettings,
|
||||
self.site.mobileView
|
||||
);
|
||||
if (slot && slot.ad) {
|
||||
slot.ad.setTargeting(
|
||||
"discourse-category",
|
||||
self.get("category") ? self.get("category") : "0"
|
||||
);
|
||||
if (slot && slot.ad) {
|
||||
slot.ad.setTargeting(
|
||||
"discourse-category",
|
||||
self.get("category") ? self.get("category") : "0"
|
||||
);
|
||||
self.set("width", slot.width);
|
||||
self.set("height", slot.height);
|
||||
window.googletag.display(self.get("divId"));
|
||||
window.googletag.pubads().refresh([slot.ad]);
|
||||
}
|
||||
});
|
||||
self.set("width", slot.width);
|
||||
self.set("height", slot.height);
|
||||
window.googletag.display(self.get("divId"));
|
||||
window.googletag.pubads().refresh([slot.ad]);
|
||||
}
|
||||
});
|
||||
});
|
||||
}.on("didInsertElement"),
|
||||
|
||||
cleanup: function() {
|
||||
|
|
Loading…
Reference in New Issue