2016-12-05 13:31:11 -05:00
|
|
|
import loadScript from 'discourse/lib/load-script';
|
|
|
|
|
|
|
|
var _loaded = false,
|
|
|
|
_promise = null,
|
|
|
|
currentUser = Discourse.User.current(),
|
2017-05-30 18:13:49 -04:00
|
|
|
publisher_id = Discourse.SiteSettings.adsense_publisher_code;
|
2015-08-25 00:30:23 -04:00
|
|
|
|
2016-02-19 15:06:13 -05:00
|
|
|
const mobileView = Discourse.Site.currentProp('mobileView');
|
2015-08-27 22:21:40 -04:00
|
|
|
|
2017-05-29 18:00:38 -04:00
|
|
|
function parseAdWidth(value) {
|
|
|
|
if (value === 'responsive') { return 'auto'; }
|
|
|
|
return `${parseInt( value.substring(0, 3).trim() )}px`;
|
2015-08-25 00:30:23 -04:00
|
|
|
}
|
|
|
|
|
2017-05-29 18:00:38 -04:00
|
|
|
function parseAdHeight(value) {
|
|
|
|
if (value === 'responsive') { return 'auto'; }
|
|
|
|
return `${parseInt( value.substring(4, 7).trim() )}px`;
|
2015-08-25 00:30:23 -04:00
|
|
|
}
|
|
|
|
|
2016-12-05 13:31:11 -05:00
|
|
|
function loadAdsense() {
|
|
|
|
if (_loaded) {
|
|
|
|
return Ember.RSVP.resolve();
|
2015-09-02 01:23:17 -04:00
|
|
|
}
|
2015-09-03 20:51:44 -04:00
|
|
|
|
2016-12-05 13:31:11 -05:00
|
|
|
if (_promise) {
|
|
|
|
return _promise;
|
|
|
|
}
|
2016-02-22 12:11:29 -05:00
|
|
|
|
2016-12-05 13:31:11 -05:00
|
|
|
var adsenseSrc = (('https:' === document.location.protocol) ? 'https:' : 'http:') + '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
|
|
|
|
_promise = loadScript(adsenseSrc, { scriptTag: true }).then(function() {
|
|
|
|
_loaded = true;
|
|
|
|
});
|
2016-02-22 12:11:29 -05:00
|
|
|
|
2016-12-05 13:31:11 -05:00
|
|
|
return _promise;
|
2016-02-22 12:11:29 -05:00
|
|
|
}
|
2015-08-25 00:30:23 -04:00
|
|
|
|
2015-08-27 22:21:40 -04:00
|
|
|
var data = {
|
|
|
|
"topic-list-top" : {},
|
|
|
|
"topic-above-post-stream" : {},
|
|
|
|
"topic-above-suggested" : {},
|
2016-02-19 15:06:13 -05:00
|
|
|
"post-bottom" : {}
|
|
|
|
};
|
2015-08-25 00:30:23 -04:00
|
|
|
|
|
|
|
if (Discourse.SiteSettings.adsense_publisher_code) {
|
2016-02-19 15:06:13 -05:00
|
|
|
if (!mobileView && Discourse.SiteSettings.adsense_topic_list_top_code) {
|
|
|
|
data["topic-list-top"]["ad_code"] = Discourse.SiteSettings.adsense_topic_list_top_code;
|
2017-05-29 18:00:38 -04:00
|
|
|
data["topic-list-top"]["ad_width"] = parseAdWidth(Discourse.SiteSettings.adsense_topic_list_top_ad_sizes);
|
|
|
|
data["topic-list-top"]["ad_height"] = parseAdHeight(Discourse.SiteSettings.adsense_topic_list_top_ad_sizes);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
|
|
|
if (mobileView && Discourse.SiteSettings.adsense_mobile_topic_list_top_code) {
|
2017-05-30 18:13:49 -04:00
|
|
|
data["topic-list-top"]["ad_code"] = Discourse.SiteSettings.adsense_mobile_topic_list_top_code;
|
|
|
|
data["topic-list-top"]["ad_width"] = parseAdWidth(Discourse.SiteSettings.adsense_mobile_topic_list_top_ad_size);
|
|
|
|
data["topic-list-top"]["ad_height"] = parseAdHeight(Discourse.SiteSettings.adsense_mobile_topic_list_top_ad_size);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
|
|
|
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;
|
2017-05-29 18:00:38 -04:00
|
|
|
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);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
|
|
|
if (mobileView && Discourse.SiteSettings.adsense_mobile_topic_above_post_stream_code) {
|
2017-05-30 18:13:49 -04:00
|
|
|
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);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
|
|
|
if (!mobileView && Discourse.SiteSettings.adsense_topic_above_suggested_code) {
|
|
|
|
data["topic-above-suggested"]["ad_code"] = Discourse.SiteSettings.adsense_topic_above_suggested_code;
|
2017-05-29 18:00:38 -04:00
|
|
|
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);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
|
|
|
if (mobileView && Discourse.SiteSettings.adsense_mobile_topic_above_suggested_code) {
|
2017-05-30 18:13:49 -04:00
|
|
|
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);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
|
|
|
if (!mobileView && Discourse.SiteSettings.adsense_post_bottom_code) {
|
|
|
|
data["post-bottom"]["ad_code"] = Discourse.SiteSettings.adsense_post_bottom_code;
|
2017-05-29 18:00:38 -04:00
|
|
|
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);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
|
|
|
if (mobileView && Discourse.SiteSettings.adsense_mobile_post_bottom_code) {
|
2017-05-30 18:13:49 -04:00
|
|
|
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);
|
2016-02-19 15:06:13 -05:00
|
|
|
}
|
2015-08-25 00:30:23 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
export default Ember.Component.extend({
|
2017-05-29 18:00:38 -04:00
|
|
|
classNameBindings: [':google-adsense', 'classForSlot', 'isResponsive:adsense-responsive'],
|
2015-08-25 00:30:23 -04:00
|
|
|
loadedGoogletag: false,
|
|
|
|
|
|
|
|
publisher_id: publisher_id,
|
2017-05-29 18:00:38 -04:00
|
|
|
ad_width: null,
|
|
|
|
ad_height: null,
|
2015-08-28 01:34:14 -04:00
|
|
|
|
2017-05-29 18:00:38 -04:00
|
|
|
adRequested: false,
|
|
|
|
|
2016-11-08 16:46:09 -05:00
|
|
|
init() {
|
2015-08-27 22:21:40 -04:00
|
|
|
this.set('ad_width', data[this.placement]["ad_width"] );
|
|
|
|
this.set('ad_height', data[this.placement]["ad_height"] );
|
|
|
|
this.set('ad_code', data[this.placement]["ad_code"] );
|
|
|
|
this._super();
|
|
|
|
},
|
2016-02-19 15:06:13 -05:00
|
|
|
|
2016-11-08 16:46:09 -05:00
|
|
|
_triggerAds() {
|
2017-05-29 18:00:38 -04:00
|
|
|
this.set('adRequested', true);
|
2016-12-05 13:31:11 -05:00
|
|
|
loadAdsense().then(function() {
|
|
|
|
const adsbygoogle = window.adsbygoogle || [];
|
2016-11-09 16:46:09 -05:00
|
|
|
|
2016-12-05 13:31:11 -05:00
|
|
|
try {
|
|
|
|
adsbygoogle.push({}); // ask AdSense to fill one ad unit
|
|
|
|
} catch (ex) {}
|
|
|
|
});
|
2016-11-08 16:46:09 -05:00
|
|
|
},
|
|
|
|
|
|
|
|
didInsertElement() {
|
|
|
|
this._super();
|
2016-11-09 16:46:09 -05:00
|
|
|
|
2016-11-21 15:55:03 -05:00
|
|
|
if (!this.get('showAd')) { return; }
|
|
|
|
|
2017-05-29 18:00:38 -04:00
|
|
|
if (this.get('listLoading')) { return; }
|
|
|
|
|
2016-11-08 16:46:09 -05:00
|
|
|
Ember.run.scheduleOnce('afterRender', this, this._triggerAds);
|
|
|
|
},
|
|
|
|
|
2017-05-29 18:00:38 -04:00
|
|
|
waitForLoad: function() {
|
|
|
|
if (this.get('adRequested')) { return; } // already requested that this ad unit be populated
|
|
|
|
if (!this.get('listLoading')) {
|
|
|
|
Ember.run.scheduleOnce('afterRender', this, this._triggerAds);
|
|
|
|
}
|
|
|
|
}.observes('listLoading'),
|
|
|
|
|
|
|
|
isResponsive: function() {
|
|
|
|
return this.get('ad_width') === 'auto';
|
|
|
|
}.property('ad_width'),
|
|
|
|
|
|
|
|
classForSlot: function() {
|
|
|
|
return `adsense-${this.get('placement')}`.htmlSafe();
|
|
|
|
}.property('placement'),
|
|
|
|
|
|
|
|
autoAdFormat: function() {
|
|
|
|
return this.get('isResponsive') ? 'auto'.htmlSafe() : false;
|
|
|
|
}.property('isResponsive'),
|
|
|
|
|
2015-08-25 00:30:23 -04:00
|
|
|
adWrapperStyle: function() {
|
2017-05-29 18:00:38 -04:00
|
|
|
return (this.get('isResponsive') ? '' : `width: ${this.get('ad_width')}; height: ${this.get('ad_height')};`).htmlSafe();
|
2015-08-25 00:30:23 -04:00
|
|
|
}.property('ad_width', 'ad_height'),
|
|
|
|
|
|
|
|
adInsStyle: function() {
|
2017-05-29 18:00:38 -04:00
|
|
|
return `display: ${this.get('isResponsive') ? 'block' : 'inline-block'}; ${this.get('adWrapperStyle')}`.htmlSafe();
|
|
|
|
}.property('adWrapperStyle', 'isResponsive'),
|
2015-08-25 00:30:23 -04:00
|
|
|
|
2015-09-15 22:11:50 -04:00
|
|
|
checkTrustLevels: function() {
|
|
|
|
return !((currentUser) && (currentUser.get('trust_level') > Discourse.SiteSettings.adsense_through_trust_level));
|
|
|
|
}.property('trust_level'),
|
2016-11-21 15:55:03 -05:00
|
|
|
|
|
|
|
showAd: function() {
|
|
|
|
return Discourse.SiteSettings.adsense_publisher_code && this.get('checkTrustLevels');
|
|
|
|
}.property('checkTrustLevels')
|
2015-12-24 04:50:22 -05:00
|
|
|
});
|