: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
jQuery( '#unit-type option:not(:selected)' ).prop( 'disabled', true );
* Legacy method - removes readonly from relevant inputs (original name getSlotAndType_jq)
jQuery( '#unit-code,#ad-layout,#ad-layout-key,[name="advanced_ad[width]"],[name="advanced_ad[height]"]' ).prop( 'readonly', false );
jQuery( '#unit-type option:not(:selected)' ).prop( 'disabled', false );
const $div1 = jQuery( '#unit-code' ).closest( 'div' );
const $label1 = $div1.prev();
const $hr1 = $div1.next();
const $label2 = $hr1.next();
const $div2 = $label2.next();
const $layoutKey = jQuery( '#ad-layout-key' ).closest( 'div' );
const $layoutKeyLabel = $layoutKey.prev( '#advads-adsense-layout-key' );
return $div1.add( $label1 ).add( $hr1 ).add( $label2 ).add( $div2 ).add( $layoutKey ).add( $layoutKeyLabel );
// Handle a click from the "Switch to AdSense ad" button.
if ( AdvancedAdsAdmin.AdImporter.adsenseCode ) {
this.parseCodeBtnClicked = true;
const parseResult = this.parseAdContent( AdvancedAdsAdmin.AdImporter.adsenseCode );
AdvancedAdsAdmin.AdImporter.adsenseCode = null;
this.handleParseResult( parseResult );
// When you are not connected to adsense, or if the ad was edited manually open the manual setup view.
let switchToManualSetup = ! this.vars.connected;
if ( ! switchToManualSetup ) {
const parsedAd = this.parseAdContentFailsafe( this.codes[this.getSelectedId()] );
// We need to check if the type of the ad is different from the default. this marks a manually setup ad.
if ( parsedAd.type !== jQuery( '#unit-type' ).val() ) {
// This ad was manually setup. don't open the selector, but switch to manual select.
switchToManualSetup = true;
if ( switchToManualSetup ) {
AdvancedAdsAdmin.AdImporter.manualSetup();
} else if ( AdvancedAdsAdmin.AdImporter.highlightSelectedRowInExternalAdsList() || ! this.getSelectedId() ) {
AdvancedAdsAdmin.AdImporter.openExternalAdsList();
jQuery( document ).on( 'click', '.advads-adsense-close-code', function ( ev ) {
jQuery( document ).on( 'click', '.advads-adsense-submit-code', function ( ev ) {
self.parseCodeBtnClicked = true;
const rawContent = jQuery( '.advads-adsense-content' ).val();
const parseResult = self.parseAdContent( rawContent );
self.handleParseResult( parseResult );
if ( AdvancedAdsAdmin.AdImporter.highlightSelectedRowInExternalAdsList() ) {
AdvancedAdsAdmin.AdImporter.openExternalAdsList();
self.preventCloseAdSelector = true;
// save the manually added ad code to the AdSense settings
wp.ajax.post( 'advads-mapi-save-manual-code', {
raw_code: encodeURIComponent( rawContent ),
parsed_code: parseResult,
const $notice = jQuery( '<div>' ).addClass( 'notice notice-error' ).html( jQuery( '<p>' ).text( r.responseJSON.data.message ) );
jQuery( '#post' ).before( $notice );
jQuery( 'body html' ).animate(
scrollTop: $notice.offset().top
// No adsense ad with this slot id was found.
// Switches to manual ad setup view.
self.preventCloseAdSelector = false;
AdvancedAdsAdmin.AdImporter.manualSetup();
jQuery( document ).on( 'gadsenseUnitChanged', function () {
const $row = jQuery( 'tr[data-slotid$="' + jQuery( '#unit-code' ).val() + '"]' );
let type = window.adsenseAdvancedAdsJS.ad_types.display;
switch ( jQuery( '#unit-type' ).val() ) {
type = window.adsenseAdvancedAdsJS.ad_types.matched_content;
type = window.adsenseAdvancedAdsJS.ad_types.link;
type = window.adsenseAdvancedAdsJS.ad_types.in_article;
type = window.adsenseAdvancedAdsJS.ad_types.in_feed;
$row.children( '.unittype' ).text( type );
jQuery( document ).on( 'change', '#unit-type, #unit-code, #ad-layout-key', function () {
self.checkAdSlotId( this );
const inputCode = jQuery( '#unit-code' );
this.checkAdSlotId( inputCode[0] );
jQuery( document ).on( 'change', '#ad-resize-type', function () {
self.show_float_warnings( 'responsive' );
this.updateAdsenseType();
if ( typeof AdsenseMAPI.hasToken !== 'undefined' ) {
this.mapiMayBeSaveAdCode();
jQuery( document ).on( 'click', '#mapi-archived-ads', function () {
self.showArchivedAds( jQuery( this ).hasClass( 'dashicons-visibility' ) );
'advads-mapi-adlist-opened',
// Update ad unit list to v2 data the first time the ad list is opened.
if ( jQuery( '#mapi-force-v2-list-update' ).length ) {
jQuery( '#mapi-wrap i[data-mapiaction="updateList"]' ).trigger( 'click' );
showArchivedAds( show ) {
if ( typeof show === 'undefined' ) {
const icon = jQuery( '#mapi-archived-ads' );
const title = icon.attr( 'title' );
const altTitle = icon.attr( 'data-alt-title' );
jQuery( '#mapi-table-wrap tbody tr[data-archived="1"]' ).show();
icon.removeClass( 'dashicons-visibility' ).addClass( 'dashicons-hidden' ).attr( 'title', altTitle ).attr( 'data-alt-title', title );
jQuery( '#mapi-table-wrap tbody tr[data-archived="1"]' ).not( '.selected' ).hide();
icon.removeClass( 'dashicons-hidden' ).addClass( 'dashicons-visibility' ).attr( 'title', altTitle ).attr( 'data-alt-title', title );
if ( jQuery( elm ).attr( 'id' ) === 'unit-code' ) {
let val = jQuery( elm ).val();
if ( val.length > 0 && gadsenseData.pubId && val.indexOf( gadsenseData.pubId.substr( 4 ) ) !== -1 ) {
jQuery( '#advads-pubid-in-slot' ).css( 'display', 'block' );
jQuery( elm ).css( 'background-color', 'rgba(255, 235, 59, 0.33)' );
this.updateAdsenseType();
jQuery( '#unit-code' ).css( 'background-color', '#fff' );
jQuery( '#advads-pubid-in-slot' ).css( 'display', 'none' );
this.updateAdsenseType();
mapiSaveAdCode( code, slot ) {
if ( typeof AdsenseMAPI.hasToken !== 'undefined' && typeof this.codes['ca-' + AdsenseMAPI.pubId + ':' + slot] === 'undefined' ) {
this.codes['ca-' + AdsenseMAPI.pubId + ':' + slot] = code;
jQuery( '#mapi-loading-overlay' ).css( 'display', 'block' );
nonce: AdsenseMAPI.nonce,
action: 'advads-mapi-reconstructed-code'
success: function ( resp, status, XHR ) {
jQuery( '#mapi-loading-overlay' ).css( 'display', 'none' );
error: function ( req, status, err ) {
jQuery( '#mapi-loading-overlay' ).css( 'display', 'none' );
if ( typeof AdsenseMAPI.hasToken === 'undefined' ) {
const slotId = jQuery( '#unit-code' ).val();
const type = jQuery( '#unit-type' ).val();
const width = jQuery( '#advanced-ads-ad-parameters-size input[name="advanced_ad[width]"]' ).val().trim();
const height = jQuery( '#advanced-ads-ad-parameters-size input[name="advanced_ad[height]"]' ).val().trim();
const layout = jQuery( '#ad-layout' ).val();
const layoutKey = jQuery( '#ad-layout-key' ).val();
code = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' +
'<ins class="adsbygoogle" ' +
'style="display:block;" ' +
'data-ad-client="ca-' + AdsenseMAPI.pubId + '" ' +
'data-ad-slot="' + slotId + '" ' +
'data-ad-layout-key="' + layoutKey + '" ';
code += 'data-ad-format="fluid"></ins>' +
'(adsbygoogle = window.adsbygoogle || []).push({});' +
code = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' +
'<ins class="adsbygoogle" ' +
'style="display:block;text-align:center;" ' +
'data-ad-client="ca-' + AdsenseMAPI.pubId + '" ' +
'data-ad-slot="' + slotId + '" ' +
'data-ad-layout="in-article" ' +
'data-ad-format="fluid"></ins>' +
'(adsbygoogle = window.adsbygoogle || []).push({});' +
code = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' +
'<ins class="adsbygoogle" ' +
'style="display:block;" ' +
'data-ad-client="ca-' + AdsenseMAPI.pubId + '" ' +
'data-ad-slot="' + slotId + '" ' +
'data-ad-format="autorelaxed"></ins>' +
'(adsbygoogle = window.adsbygoogle || []).push({});' +
code = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' +
'<ins class="adsbygoogle" ' +
'style="display:block;" ' +
'data-ad-client="ca-' + AdsenseMAPI.pubId + '" ' +
'data-ad-slot="' + slotId + '" ' +
'data-ad-format="link"></ins>' +
'(adsbygoogle = window.adsbygoogle || []).push({});' +
code = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' +
'<ins class="adsbygoogle" ' +
'style="display:block;width:' + width + 'px;height:' + height + 'px" ' +
'data-ad-client="ca-' + AdsenseMAPI.pubId + '" ' +
'data-ad-slot="' + slotId + '" ' +
'data-ad-format="link"></ins>' +
'(adsbygoogle = window.adsbygoogle || []).push({});' +
code = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' +
'<ins class="adsbygoogle" ' +
'style="display:block;" ' +
'data-ad-client="ca-' + AdsenseMAPI.pubId + '" ' +
'data-ad-slot="' + slotId + '" ' +
'data-ad-format="auto"></ins>' +
'(adsbygoogle = window.adsbygoogle || []).push({});' +
code = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' +
'<ins class="adsbygoogle" ' +
'style="display:inline-block;width:' + width + 'px;height:' + height + 'px" ' +
'data-ad-client="ca-' + AdsenseMAPI.pubId + '" ' +
'data-ad-slot="' + slotId + '"></ins>' +
'(adsbygoogle = window.adsbygoogle || []).push({});' +
this.mapiSaveAdCode( code, slotId );
getMapiAction( action ) {
if ( action === 'toggleidle' ) {
return function ( ev, el ) {
self.hideIdle = ! self.hideIdle;
AdvancedAdsAdmin.AdImporter.refreshAds();
// Creates a Advanced_Ads_Adsense_Report_UI instance on the fly
window.Advanced_Ads_Adsense_Report_Helper = window.Advanced_Ads_Adsense_Report_Helper || {};
window.Advanced_Ads_Adsense_Report_Helper.init = function ( element ) {
if ( jQuery( element ).attr( 'data-arguments' ) ) {
const reportArgs = JSON.parse( jQuery( element ).attr( 'data-arguments' ) );
jQuery( element ).data( 'advadsAdsenseReport', new Advanced_Ads_Adsense_Report_UI( element, reportArgs ) );
console.error( 'Cannot parse report arguments' );
window.Advanced_Ads_Adsense_Report_Helper.getReportObject = function () {
const reportElem = jQuery( '.advanced-ads-adsense-dashboard' );
if ( reportElem.length ) {
let report = reportElem.data( 'advadsAdsenseReport' );
if ( typeof report.refresh === 'function' ) {
class Advanced_Ads_Adsense_Report_UI {
constructor( el, args ) {
this.filter = args.filter;
// Update arguments attributes before refreshing.
this.$el.attr( 'data-arguments', JSON.stringify( {type: 'domain', filter: self.filter} ) );
// Get markup for the current arguments.
this.$el.html( '<p style="text-align:center;"><span class="report-need-refresh spinner advads-ad-parameters-spinner advads-spinner"></span></p>' );
nonce: window.Advanced_Ads_Adsense_Report_Helper.nonce,
action: 'advads_adsense_report_refresh'
success: function ( response ) {
if ( response.success && response.data && response.data.html ) {
self.$el.html( response.data.html );
}, error: function ( request, status, error ) {
console.log( 'Refreshing rerpot error: ' + error );
// Initialization - events binding.
if ( this.$el.find( '.report-need-refresh' ).length ) {
// Hide dropdown on click on everything but the dropdown and its children.
jQuery( document ).on( 'click', '#wpwrap', function () {
const dd = jQuery( '#advads_overview_adsense_stats .advads-stats-dd-button .advads-stats-dd-items' );
if ( dd.is( ':visible' ) ) {
jQuery( document ).on( 'click', '#advads_overview_adsense_stats .advads-stats-dd-button', function ( ev ) {
// Stop bubbling. Prevents hiding the dropdown.
const dd = jQuery( this ).find( '.advads-stats-dd-items' );
if ( ! dd.is( ':visible' ) ) {
// Dropdown item clicked.
jQuery( document ).on( 'click', '.advads-stats-dd-button .advads-stats-dd-item', function () {
self.filter = jQuery( this ).attr( 'data-domain' );