From 4ab0f0fab86e02dc0dfcb7b34d2d3e5f81cd6bf5 Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Mon, 22 Feb 2016 12:11:29 -0500 Subject: [PATCH] Upgrade to new Plugin API --- .../components/google-adsense.js.es6 | 20 +++++++--- .../discourse/components/google-dfp-ad.js.es6 | 39 +++++++++---------- .../post-bottom/discourse-adplugin.hbs | 2 +- ...del.js.es6 => initialize-ad-plugin.js.es6} | 12 +++++- 4 files changed, 46 insertions(+), 27 deletions(-) rename assets/javascripts/initializers/{extend-post-model.js.es6 => initialize-ad-plugin.js.es6} (67%) diff --git a/assets/javascripts/discourse/components/google-adsense.js.es6 b/assets/javascripts/discourse/components/google-adsense.js.es6 index cfc737b..31d8fa0 100644 --- a/assets/javascripts/discourse/components/google-adsense.js.es6 +++ b/assets/javascripts/discourse/components/google-adsense.js.es6 @@ -1,3 +1,4 @@ +import { withPluginApi } from 'discourse/lib/plugin-api'; import PageTracker from 'discourse/lib/page-tracker'; var ad_width = ''; @@ -22,8 +23,8 @@ function splitHeightInt(value) { } // On each page change, the child is removed and elements part of Adsense's googleads are removed/undefined. -PageTracker.current().on('change', function() { - var ads = document.getElementById("adsense_loader"); +function changePage() { + const ads = document.getElementById("adsense_loader"); if (ads) { ads.parentNode.removeChild(ads); for (var key in window) { @@ -36,10 +37,19 @@ PageTracker.current().on('change', function() { } // Reinitialize script so that the ad can reload - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.id="adsense_loader"; + const ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.id="adsense_loader"; ga.src = '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); -}); + const s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); +} + +function oldPluginCode() { + PageTracker.current().on('change', changePage); +} + +function watchPageChanges(api) { + api.onPageChange(changePage); +} +withPluginApi('0.1', watchPageChanges, { noApi: oldPluginCode }); var data = { "topic-list-top" : {}, diff --git a/assets/javascripts/discourse/components/google-dfp-ad.js.es6 b/assets/javascripts/discourse/components/google-dfp-ad.js.es6 index f10b3fb..111b406 100755 --- a/assets/javascripts/discourse/components/google-dfp-ad.js.es6 +++ b/assets/javascripts/discourse/components/google-dfp-ad.js.es6 @@ -1,5 +1,4 @@ import loadScript from 'discourse/lib/load-script'; -//import PageTracker from 'discourse/lib/page-tracker'; var const_width = ''; var const_height = ''; @@ -71,11 +70,11 @@ function defineSlot(placement, settings) { const_width = parseInt(splitWidthInt(settings.dfp_topic_list_top_ad_sizes)); const_height = parseInt(splitHeightInt(settings.dfp_topic_list_top_ad_sizes)); if (Discourse.Mobile.mobileView) { - var topic_list_top_mobile = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_topic_list_top_code, [320,50], 'div-gpt-ad-topic-list-top').addService(googletag.pubads()); + var topic_list_top_mobile = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_topic_list_top_code, [320,50], 'div-gpt-ad-topic-list-top').addService(window.googletag.pubads()); ads['topic-list-top'] = topic_list_top_mobile; custom_targeting((keyParse(Discourse.SiteSettings.dfp_target_topic_list_top_key_code)), (keyParse(settings.dfp_target_topic_list_top_value_code)), topic_list_top_mobile); } else { - var topic_list_top = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_list_top_code, [parseInt(splitWidthInt(settings.dfp_topic_list_top_ad_sizes)), parseInt(splitHeightInt(settings.dfp_topic_list_top_ad_sizes))], 'div-gpt-ad-topic-list-top').addService(googletag.pubads()); + var topic_list_top = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_list_top_code, [parseInt(splitWidthInt(settings.dfp_topic_list_top_ad_sizes)), parseInt(splitHeightInt(settings.dfp_topic_list_top_ad_sizes))], 'div-gpt-ad-topic-list-top').addService(window.googletag.pubads()); ads['topic-list-top'] = topic_list_top; custom_targeting((keyParse(settings.dfp_target_topic_list_top_key_code)), (keyParse(settings.dfp_target_topic_list_top_value_code)), topic_list_top); } @@ -87,12 +86,12 @@ function defineSlot(placement, settings) { const_width = parseInt(splitWidthInt(settings.dfp_topic_above_post_stream_ad_sizes)); const_height = parseInt(splitHeightInt(settings.dfp_topic_above_post_stream_ad_sizes)); if (Discourse.Mobile.mobileView) { - var topic_above_post_stream_mobile = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_topic_above_post_stream_code, [320,50], 'div-gpt-ad-topic-above-post-stream').addService(googletag.pubads()); + var topic_above_post_stream_mobile = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_topic_above_post_stream_code, [320,50], 'div-gpt-ad-topic-above-post-stream').addService(window.googletag.pubads()); ads['topic-above-post-stream'] = topic_above_post_stream_mobile; custom_targeting((keyParse(settings.dfp_target_topic_above_post_stream_key_code)), (keyParse(settings.dfp_target_topic_above_post_stream_value_code)), topic_above_post_stream_mobile); } else { - var topic_above_post_stream = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_above_post_stream_code, [parseInt(splitWidthInt(settings.dfp_topic_above_post_stream_ad_sizes)), parseInt(splitHeightInt(settings.dfp_topic_above_post_stream_ad_sizes))], 'div-gpt-ad-topic-above-post-stream').addService(googletag.pubads()); + var topic_above_post_stream = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_above_post_stream_code, [parseInt(splitWidthInt(settings.dfp_topic_above_post_stream_ad_sizes)), parseInt(splitHeightInt(settings.dfp_topic_above_post_stream_ad_sizes))], 'div-gpt-ad-topic-above-post-stream').addService(window.googletag.pubads()); ads['topic-above-post-stream'] = topic_above_post_stream; custom_targeting((keyParse(settings.dfp_target_topic_above_post_stream_key_code)), (keyParse(settings.dfp_target_topic_above_post_stream_value_code)), topic_above_post_stream); } @@ -104,12 +103,12 @@ function defineSlot(placement, settings) { const_width = parseInt(splitWidthInt(settings.dfp_topic_above_suggested_ad_sizes)); const_height = parseInt(splitHeightInt(settings.dfp_topic_above_suggested_ad_sizes)); if (Discourse.Mobile.mobileView) { - var topic_above_suggested_mobile = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_topic_above_suggested_code, [320,50], 'div-gpt-ad-topic-above-suggested').addService(googletag.pubads()); + var topic_above_suggested_mobile = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_topic_above_suggested_code, [320,50], 'div-gpt-ad-topic-above-suggested').addService(window.googletag.pubads()); ads['topic-above-suggested'] = topic_above_suggested_mobile; custom_targeting((keyParse(settings.dfp_target_topic_above_suggested_key_code)), (keyParse(settings.dfp_target_topic_above_suggested_value_code)), topic_above_suggested_mobile); } else { - var topic_above_suggested = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_above_suggested_code, [parseInt(splitWidthInt(settings.dfp_topic_above_suggested_ad_sizes)), parseInt(splitHeightInt(settings.dfp_topic_above_suggested_ad_sizes))], 'div-gpt-ad-topic-above-suggested').addService(googletag.pubads()); + var topic_above_suggested = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_topic_above_suggested_code, [parseInt(splitWidthInt(settings.dfp_topic_above_suggested_ad_sizes)), parseInt(splitHeightInt(settings.dfp_topic_above_suggested_ad_sizes))], 'div-gpt-ad-topic-above-suggested').addService(window.googletag.pubads()); ads['topic-above-suggested'] = topic_above_suggested; custom_targeting((keyParse(settings.dfp_target_topic_above_suggested_key_code)), (keyParse(settings.dfp_target_topic_above_suggested_value_code)), topic_above_suggested); } @@ -121,12 +120,12 @@ function defineSlot(placement, settings) { const_width = parseInt(splitWidthInt(settings.dfp_post_bottom_ad_sizes)); const_height = parseInt(splitHeightInt(settings.dfp_post_bottom_ad_sizes)); if (Discourse.Mobile.mobileView) { - var post_bottom_mobile = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_post_bottom_code, [320,50], 'div-gpt-ad-post-bottom').addService(googletag.pubads()); + var post_bottom_mobile = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_mobile_post_bottom_code, [320,50], 'div-gpt-ad-post-bottom').addService(window.googletag.pubads()); ads['post-bottom'] = post_bottom_mobile; custom_targeting((keyParse(settings.dfp_target_post_bottom_key_code)), (keyParse(settings.dfp_target_post_bottom_value_code)), post_bottom_mobile); } else { - var post_bottom = googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_post_bottom_code, [parseInt(splitWidthInt(settings.dfp_post_bottom_ad_sizes)), parseInt(splitHeightInt(settings.dfp_post_bottom_ad_sizes))], 'div-gpt-ad-post-bottom').addService(googletag.pubads()); + var post_bottom = window.googletag.defineSlot('/' + settings.dfp_publisher_id + '/' + settings.dfp_post_bottom_code, [parseInt(splitWidthInt(settings.dfp_post_bottom_ad_sizes)), parseInt(splitHeightInt(settings.dfp_post_bottom_ad_sizes))], 'div-gpt-ad-post-bottom').addService(window.googletag.pubads()); ads['post-bottom'] = post_bottom; custom_targeting((keyParse(settings.dfp_target_post_bottom_key_code)), (keyParse(settings.dfp_target_post_bottom_value_code)), post_bottom); } @@ -135,7 +134,7 @@ function defineSlot(placement, settings) { } } -function loadGoogle(settings) { +function loadGoogle() { if (_loaded) { return Ember.RSVP.resolve(); } @@ -145,17 +144,17 @@ function loadGoogle(settings) { } // The boilerplate code - var dfpSrc = (('https:' == document.location.protocol) ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js'; + 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() { - googletag.pubads().enableSingleRequest(); - googletag.pubads().disableInitialLoad(); // we always use refresh() to fetch the ads - googletag.enableServices(); + window.googletag.cmd.push(function() { + window.googletag.pubads().enableSingleRequest(); + window.googletag.pubads().disableInitialLoad(); // we always use refresh() to fetch the ads + window.googletag.enableServices(); }); }); @@ -202,9 +201,9 @@ export default Ember.Component.extend({ var self = this; if (this.get('loadedGoogletag') && this.get('refreshOnChange')) { - googletag.cmd.push(function() { + window.googletag.cmd.push(function() { ad.setTargeting('discourse-category', self.get('category') ? self.get('category') : '0'); - googletag.pubads().refresh([ad]); + window.googletag.pubads().refresh([ad]); }); } }.observes('refreshOnChange'), @@ -213,12 +212,12 @@ export default Ember.Component.extend({ var self = this; loadGoogle(this.siteSettings).then(function() { self.set('loadedGoogletag', true); - googletag.cmd.push(function() { + window.googletag.cmd.push(function() { var ad = defineSlot(self.get('placement'), self.siteSettings); if (ad) { ad.setTargeting('discourse-category', self.get('category') ? self.get('category') : '0'); - googletag.display(self.get('divId')); - googletag.pubads().refresh([ad]); + window.googletag.display(self.get('divId')); + window.googletag.pubads().refresh([ad]); } }); }); diff --git a/assets/javascripts/discourse/templates/connectors/post-bottom/discourse-adplugin.hbs b/assets/javascripts/discourse/templates/connectors/post-bottom/discourse-adplugin.hbs index 4d17491..9da8203 100644 --- a/assets/javascripts/discourse/templates/connectors/post-bottom/discourse-adplugin.hbs +++ b/assets/javascripts/discourse/templates/connectors/post-bottom/discourse-adplugin.hbs @@ -6,4 +6,4 @@ {{/if}} {{#if postSpecificCountAmazon}} {{amazon-product-links placement="post-bottom"}} -{{/if}} \ No newline at end of file +{{/if}} diff --git a/assets/javascripts/initializers/extend-post-model.js.es6 b/assets/javascripts/initializers/initialize-ad-plugin.js.es6 similarity index 67% rename from assets/javascripts/initializers/extend-post-model.js.es6 rename to assets/javascripts/initializers/initialize-ad-plugin.js.es6 index 595a22c..e9ab83c 100644 --- a/assets/javascripts/initializers/extend-post-model.js.es6 +++ b/assets/javascripts/initializers/initialize-ad-plugin.js.es6 @@ -1,7 +1,8 @@ import PostModel from 'discourse/models/post'; +import { withPluginApi } from 'discourse/lib/plugin-api'; export default { - name: 'extend-post-model', + name: 'initialize-ad-plugin', initialize(container) { const siteSettings = container.lookup('site-settings:main'); @@ -18,5 +19,14 @@ export default { return this.get('post_number') === parseInt(siteSettings.amazon_nth_post_code); }.property('post_number'), }); + + withPluginApi('0.1', api => { + api.decorateWidget('post:after', dec => { + return dec.connect({ + templateName: 'connectors/post-bottom/discourse-adplugin', + context: 'model' + }); + }); + }); } };