2015-07-24 00:01:47 -04:00
|
|
|
import loadScript from 'discourse/lib/load-script';
|
2015-08-25 01:53:22 -04:00
|
|
|
//import PageTracker from 'discourse/lib/page-tracker';
|
2015-07-24 00:01:47 -04:00
|
|
|
|
2015-08-10 00:19:51 -04:00
|
|
|
var const_width = '';
|
|
|
|
var const_height = '';
|
2015-07-24 00:01:47 -04:00
|
|
|
|
|
|
|
var _loaded = false,
|
|
|
|
_promise = null;
|
|
|
|
|
2015-08-10 00:04:21 -04:00
|
|
|
function splitWidthInt(value) {
|
|
|
|
var str = value.substring(0, 3);
|
|
|
|
return str.trim();
|
|
|
|
}
|
|
|
|
|
|
|
|
function splitHeightInt(value) {
|
|
|
|
var str = value.substring(4, 7);
|
|
|
|
return str.trim();
|
|
|
|
}
|
2015-08-25 22:04:03 -04:00
|
|
|
|
2015-08-26 01:35:30 -04:00
|
|
|
// This creates an array for the values of the custom targeting key
|
|
|
|
function valueParse(value) {
|
|
|
|
var final = value.replace(/ /g,'');
|
|
|
|
final = final.replace(/['"]+/g, '');
|
|
|
|
final = final.split(',');
|
|
|
|
return final;
|
|
|
|
}
|
|
|
|
|
2015-08-25 01:53:22 -04:00
|
|
|
//PageTracker.current().on('change', function(url) {
|
2015-07-24 00:01:47 -04:00
|
|
|
function loadGoogle(settings) {
|
|
|
|
if (_loaded) {
|
|
|
|
return Ember.RSVP.resolve();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_promise) {
|
|
|
|
return _promise;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The boilerplate code
|
|
|
|
var dfpSrc = (('https:' == document.location.protocol) ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';
|
|
|
|
_promise = loadScript(dfpSrc, { scriptTag: true }).then(function() {
|
|
|
|
_loaded = true;
|
|
|
|
if (window.googletag === undefined) {
|
|
|
|
console.log('googletag is undefined!');
|
|
|
|
}
|
|
|
|
|
|
|
|
googletag.cmd.push(function() {
|
2015-08-10 00:04:21 -04:00
|
|
|
if (settings.dfp_topic_list_top_code && !settings.dfp_show_topic_list_top && settings.topic_list_top_ad_sizes) {
|
2015-08-10 00:19:51 -04:00
|
|
|
const_width = parseInt(splitWidthInt(settings.topic_list_top_ad_sizes));
|
|
|
|
const_height = parseInt(splitHeightInt(settings.topic_list_top_ad_sizes));
|
2015-08-19 20:58:31 -04:00
|
|
|
if (Discourse.Mobile.mobileView) {
|
|
|
|
googletag.defineSlot(settings.dfp_topic_list_top_code, [320,50], 'div-gpt-ad-topic-list-top').addService(googletag.pubads());
|
|
|
|
}
|
|
|
|
else {
|
2015-08-25 22:04:03 -04:00
|
|
|
googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_list_top_code, [parseInt(splitWidthInt(settings.topic_list_top_ad_sizes)), parseInt(splitHeightInt(settings.topic_list_top_ad_sizes))], 'div-gpt-ad-topic-list-top')
|
2015-08-26 01:35:30 -04:00
|
|
|
.setTargeting(settings.dfp_target_topic_list_top_key_code, valueParse(settings.dfp_target_topic_list_top_value_code))
|
|
|
|
// This hardcoded code works: .setTargeting('category', ["clothes", "handbags", "makeup"])
|
2015-08-25 22:04:03 -04:00
|
|
|
.addService(googletag.pubads());
|
2015-08-23 22:36:40 -04:00
|
|
|
}
|
2015-07-24 00:01:47 -04:00
|
|
|
}
|
2015-08-10 00:04:21 -04:00
|
|
|
if (settings.dfp_topic_above_post_stream_code && !settings.dfp_show_topic_above_post_stream && settings.topic_above_post_stream_ad_sizes) {
|
2015-08-10 00:19:51 -04:00
|
|
|
const_width = parseInt(splitWidthInt(settings.topic_above_post_stream_ad_sizes));
|
|
|
|
const_height = parseInt(splitHeightInt(settings.topic_above_post_stream_ad_sizes));
|
2015-08-19 20:58:31 -04:00
|
|
|
if (Discourse.Mobile.mobileView) {
|
|
|
|
googletag.defineSlot(settings.dfp_topic_above_post_stream_code, [320,50], 'div-gpt-ad-topic-above-post-stream').addService(googletag.pubads());
|
|
|
|
}
|
|
|
|
else {
|
2015-08-27 22:21:40 -04:00
|
|
|
googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_above_post_stream_code, [parseInt(splitWidthInt(settings.topic_above_post_stream_ad_sizes)), parseInt(splitHeightInt(settings.topic_above_post_stream_ad_sizes))], 'div-gpt-ad-topic-above-post-stream')
|
|
|
|
.setTargeting(settings.dfp_target_topic_above_post_stream_key_code, valueParse(settings.dfp_target_topic_above_post_stream_value_code))
|
|
|
|
// This hardcoded code works: .setTargeting('category', ["clothes", "handbags", "makeup"])
|
|
|
|
.addService(googletag.pubads());
|
2015-08-23 22:36:40 -04:00
|
|
|
}
|
2015-07-24 00:01:47 -04:00
|
|
|
}
|
2015-08-10 00:04:21 -04:00
|
|
|
if (settings.dfp_topic_above_suggested_code && !settings.dfp_show_topic_above_suggested && settings.topic_above_suggested_ad_sizes) {
|
2015-08-10 00:19:51 -04:00
|
|
|
const_width = parseInt(splitWidthInt(settings.topic_above_suggested_ad_sizes));
|
|
|
|
const_height = parseInt(splitHeightInt(settings.topic_above_suggested_ad_sizes));
|
2015-08-19 20:58:31 -04:00
|
|
|
if (Discourse.Mobile.mobileView) {
|
|
|
|
googletag.defineSlot(settings.dfp_topic_above_suggested_code, [320,50], 'div-gpt-ad-topic-above-suggested').addService(googletag.pubads());
|
|
|
|
}
|
|
|
|
else {
|
2015-08-27 22:21:40 -04:00
|
|
|
googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_above_suggested_code, [parseInt(splitWidthInt(settings.topic_above_suggested_ad_sizes)), parseInt(splitHeightInt(settings.topic_above_suggested_ad_sizes))], 'div-gpt-ad-topic-above-suggested')
|
2015-08-28 01:25:11 -04:00
|
|
|
|
|
|
|
googletag.setTargeting(settings.dfp_target_topic_above_suggested_key_code, valueParse(settings.dfp_target_topic_above_suggested_value_code))
|
2015-08-27 22:21:40 -04:00
|
|
|
// This hardcoded code works: .setTargeting('category', ["clothes", "handbags", "makeup"])
|
2015-08-28 01:25:11 -04:00
|
|
|
googletag.addService(googletag.pubads());
|
|
|
|
|
|
|
|
|
|
|
|
var Foo = function() {}
|
|
|
|
Foo.prototype.bar = function() {
|
|
|
|
// Stuff
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
var f = new Foo();
|
|
|
|
f.bar().bar().bar();
|
|
|
|
f.bar();
|
|
|
|
f.bar();
|
|
|
|
f.bar();
|
|
|
|
|
2015-08-23 22:36:40 -04:00
|
|
|
}
|
2015-07-24 00:01:47 -04:00
|
|
|
}
|
2015-08-10 00:04:21 -04:00
|
|
|
if (settings.dfp_post_bottom_code && !settings.dfp_show_post_bottom && settings.post_bottom_ad_sizes) {
|
2015-08-10 00:19:51 -04:00
|
|
|
const_width = parseInt(splitWidthInt(settings.post_bottom_ad_sizes));
|
|
|
|
const_height = parseInt(splitHeightInt(settings.post_bottom_ad_sizes));
|
2015-08-19 20:58:31 -04:00
|
|
|
if (Discourse.Mobile.mobileView) {
|
|
|
|
googletag.defineSlot(settings.dfp_post_bottom_code, [320,50], 'div-gpt-ad-post-bottom').addService(googletag.pubads());
|
|
|
|
}
|
|
|
|
else {
|
2015-08-27 22:21:40 -04:00
|
|
|
googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_post_bottom_code, [parseInt(splitWidthInt(settings.post_bottom_ad_sizes)), parseInt(splitHeightInt(settings.post_bottom_ad_sizes))], 'div-gpt-ad-post-bottom')
|
|
|
|
.setTargeting(settings.dfp_target_post_bottom_key_code, valueParse(settings.dfp_target_post_bottom_value_code))
|
|
|
|
// This hardcoded code works: .setTargeting('category', ["clothes", "handbags", "makeup"])
|
|
|
|
.addService(googletag.pubads());
|
2015-08-23 22:36:40 -04:00
|
|
|
}
|
2015-07-29 21:05:33 -04:00
|
|
|
}
|
2015-08-18 20:45:03 -04:00
|
|
|
|
2015-08-19 18:23:55 -04:00
|
|
|
// Page Level custom targeting goes here - needs an input section and also ad tags on the relevant pages
|
2015-07-24 00:01:47 -04:00
|
|
|
googletag.pubads().enableSingleRequest();
|
|
|
|
googletag.enableServices();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
return _promise;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Ember component - the class is the adblock and css
|
|
|
|
export default Ember.Component.extend({
|
|
|
|
const_width: const_width,
|
|
|
|
const_height: const_height,
|
|
|
|
|
|
|
|
classNames: ['google-dfp-ad'],
|
|
|
|
loadedGoogletag: false,
|
|
|
|
|
|
|
|
// Part of the divID of the div part of the GPT
|
|
|
|
divId: function() {
|
|
|
|
return "div-gpt-ad-" + this.get('placement');
|
|
|
|
}.property('placement'),
|
|
|
|
|
2015-08-18 21:44:14 -04:00
|
|
|
adWrapperStyle: function() {
|
|
|
|
return `width: ${this.get('const_width')}px; height: ${this.get('const_height')}px;`.htmlSafe();
|
|
|
|
}.property('const_width', 'const_height'),
|
|
|
|
|
2015-08-19 19:34:52 -04:00
|
|
|
adWrapperStyleMobile: function() {
|
|
|
|
return `width: 320px; height: 50px;`.htmlSafe();
|
|
|
|
},
|
|
|
|
|
2015-07-24 00:01:47 -04:00
|
|
|
_initGoogleDFP: function() {
|
|
|
|
var self = this;
|
|
|
|
loadGoogle(this.siteSettings).then(function() {
|
|
|
|
self.set('loadedGoogletag', true);
|
|
|
|
});
|
|
|
|
}.on('didInsertElement')
|
|
|
|
});
|