Ad Inserter – WordPress Ads Management with AdSense Header Integration - Version 2.3.17

Version Description

  • Added shortcode for ad blocking detection action
  • Few minor bug fixes, cosmetic changes and code improvements
Download this release

Release Info

Developer spacetime
Plugin Icon 128x128 Ad Inserter – WordPress Ads Management with AdSense Header Integration
Version 2.3.17
Comparing to
See all releases

Code changes from version 2.3.16 to 2.3.17

ad-inserter.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  /*
4
  Plugin Name: Ad Inserter
5
- Version: 2.3.16
6
  Description: Ad management plugin with advanced advertising options to automatically insert ad codes on your website
7
  Author: Igor Funa
8
  Author URI: http://igorfuna.com/
@@ -13,6 +13,10 @@ Plugin URI: http://adinserter.pro/documentation
13
 
14
  Change Log
15
 
 
 
 
 
16
  Ad Inserter 2.3.16 - 2018-07-25
17
  - Added option to insert block only when WP loop is currently active
18
  - Added support for Better AMP plugin
@@ -1050,9 +1054,9 @@ function set_page_type () {
1050
  elseif (is_feed()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_FEED;
1051
  elseif (is_category()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_CATEGORY;
1052
  elseif (is_archive() || (is_home () && !is_front_page ())) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_ARCHIVE;
 
1053
  elseif (is_search()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_SEARCH;
1054
  elseif (is_404()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_404;
1055
- elseif (is_admin()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_ADMIN;
1056
 
1057
  if (
1058
  // AMP, Accelerated Mobile Pages
@@ -2084,12 +2088,14 @@ function ai_replace_js_data ($js) {
2084
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=3', '$("#ai-adb-status").text ("DETECTED - ACTION");', $js);
2085
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=4', 'jQuery("#ai-adb-status").text ("NOT DETECTED");', $js);
2086
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=5', '$("#ai-adb-status").text ("COOKIES DELETED");', $js);
 
2087
  } else {
2088
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=1', '', $js);
2089
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=2', '', $js);
2090
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=3', '', $js);
2091
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=4', '{}', $js);
2092
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=5', '', $js);
 
2093
  }
2094
  }
2095
  }
@@ -4593,11 +4599,15 @@ function ai_generate_extract (&$settings) {
4593
 
4594
  $extract [AI_EXTRACT_USED_BLOCKS] = serialize ($active_blocks);
4595
 
4596
- $obj->wp_options = $settings [AI_HEADER_OPTION_NAME];
4597
- if ($obj->get_enable_manual () && $obj->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true;
 
 
4598
 
4599
- $obj->wp_options = $settings [AI_FOOTER_OPTION_NAME];
4600
- if ($obj->get_enable_manual () && $obj->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true;
 
 
4601
 
4602
  $extract [AI_EXTRACT_FEATURES] = array (
4603
  AI_SERVER_SIDE_DETECTION => $ai_wp_data [AI_SERVER_SIDE_DETECTION],
@@ -6181,6 +6191,9 @@ function ai_process_shortcode (&$block, $atts) {
6181
  case 'redirection':
6182
  $ai_wp_data [AI_ADB_SHORTCODE_ACTION] = AI_ADB_ACTION_REDIRECTION;
6183
  break;
 
 
 
6184
  }
6185
  return "";
6186
  }
2
 
3
  /*
4
  Plugin Name: Ad Inserter
5
+ Version: 2.3.17
6
  Description: Ad management plugin with advanced advertising options to automatically insert ad codes on your website
7
  Author: Igor Funa
8
  Author URI: http://igorfuna.com/
13
 
14
  Change Log
15
 
16
+ Ad Inserter 2.3.17 - 2018-08-03
17
+ - Added shortcode for ad blocking detection action
18
+ - Few minor bug fixes, cosmetic changes and code improvements
19
+
20
  Ad Inserter 2.3.16 - 2018-07-25
21
  - Added option to insert block only when WP loop is currently active
22
  - Added support for Better AMP plugin
1054
  elseif (is_feed()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_FEED;
1055
  elseif (is_category()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_CATEGORY;
1056
  elseif (is_archive() || (is_home () && !is_front_page ())) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_ARCHIVE;
1057
+ elseif (is_admin()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_ADMIN; // Admin pages may also be search pages
1058
  elseif (is_search()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_SEARCH;
1059
  elseif (is_404()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_404;
 
1060
 
1061
  if (
1062
  // AMP, Accelerated Mobile Pages
2088
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=3', '$("#ai-adb-status").text ("DETECTED - ACTION");', $js);
2089
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=4', 'jQuery("#ai-adb-status").text ("NOT DETECTED");', $js);
2090
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=5', '$("#ai-adb-status").text ("COOKIES DELETED");', $js);
2091
+ $js = str_replace ('var AI_ADB_STATUS_MESSAGE=6', '$("#ai-adb-status").text ("DETECTED - NO ACTION");', $js);
2092
  } else {
2093
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=1', '', $js);
2094
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=2', '', $js);
2095
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=3', '', $js);
2096
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=4', '{}', $js);
2097
  $js = str_replace ('var AI_ADB_STATUS_MESSAGE=5', '', $js);
2098
+ $js = str_replace ('var AI_ADB_STATUS_MESSAGE=6', '', $js);
2099
  }
2100
  }
2101
  }
4599
 
4600
  $extract [AI_EXTRACT_USED_BLOCKS] = serialize ($active_blocks);
4601
 
4602
+ if (isset ($settings [AI_HEADER_OPTION_NAME])) {
4603
+ $obj->wp_options = $settings [AI_HEADER_OPTION_NAME];
4604
+ if ($obj->get_enable_manual () && $obj->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true;
4605
+ }
4606
 
4607
+ if (isset ($settings [AI_FOOTER_OPTION_NAME])) {
4608
+ $obj->wp_options = $settings [AI_FOOTER_OPTION_NAME];
4609
+ if ($obj->get_enable_manual () && $obj->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true;
4610
+ }
4611
 
4612
  $extract [AI_EXTRACT_FEATURES] = array (
4613
  AI_SERVER_SIDE_DETECTION => $ai_wp_data [AI_SERVER_SIDE_DETECTION],
6191
  case 'redirection':
6192
  $ai_wp_data [AI_ADB_SHORTCODE_ACTION] = AI_ADB_ACTION_REDIRECTION;
6193
  break;
6194
+ case 'no-action':
6195
+ $ai_wp_data [AI_ADB_SHORTCODE_ACTION] = AI_ADB_ACTION_NONE;
6196
+ break;
6197
  }
6198
  return "";
6199
  }
constants.php CHANGED
@@ -26,7 +26,7 @@ if (!defined( 'AD_INSERTER_NAME'))
26
  define ('AD_INSERTER_NAME', 'Ad Inserter');
27
 
28
  if (!defined( 'AD_INSERTER_VERSION'))
29
- define ('AD_INSERTER_VERSION', '2.3.16');
30
 
31
  if (!defined ('AD_INSERTER_PLUGIN_BASENAME'))
32
  define ('AD_INSERTER_PLUGIN_BASENAME', plugin_basename (__FILE__));
26
  define ('AD_INSERTER_NAME', 'Ad Inserter');
27
 
28
  if (!defined( 'AD_INSERTER_VERSION'))
29
+ define ('AD_INSERTER_VERSION', '2.3.17');
30
 
31
  if (!defined ('AD_INSERTER_PLUGIN_BASENAME'))
32
  define ('AD_INSERTER_PLUGIN_BASENAME', plugin_basename (__FILE__));
css/ad-inserter.css CHANGED
@@ -1,5 +1,5 @@
1
  #ai-data {
2
- font-family: "2.3.16"; /* Used for version number of the file */
3
  }
4
 
5
  #blocked-warning {
1
  #ai-data {
2
+ font-family: "2.3.17"; /* Used for version number of the file */
3
  }
4
 
5
  #blocked-warning {
includes/js/ai-adb.js CHANGED
@@ -161,12 +161,12 @@ function ai_adb_process_content () {
161
  (function ($) {
162
 
163
  if (ai_adb_debugging) console.log ('');
164
- if (ai_adb_debugging) console.log ("AI ad blocking CONTENT PROCESSING");
165
 
166
  $(".AI_ADB_CONTENT_CSS_BEGIN_CLASS").each (function () {
167
  var ai_adb_parent = $(this).parent ();
168
 
169
- if (ai_adb_debugging) console.log ("AI ad blocking parent", ai_adb_parent.prop ("tagName"), "id=\""+ ai_adb_parent.attr ("id")+"\"", "class=\""+ ai_adb_parent.attr ("class")+"\"");
170
 
171
  var ai_adb_css = $(this).data ("css");
172
  if (typeof ai_adb_css == "undefined") ai_adb_css = "display: none !important;";
@@ -174,7 +174,7 @@ function ai_adb_process_content () {
174
  var ai_adb_selectors = $(this).data ("selectors");
175
  if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
176
 
177
- if (ai_adb_debugging) console.log ('AI ad blocking CSS, css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
178
 
179
  var ai_adb_action = false;
180
  $(ai_adb_parent).find ('.AI_ADB_CONTENT_CSS_BEGIN_CLASS, ' + ai_adb_selectors).each (function () {
@@ -191,12 +191,12 @@ function ai_adb_process_content () {
191
  $(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS").each (function () {
192
  var ai_adb_parent = $(this).parent ();
193
 
194
- if (ai_adb_debugging) console.log ("AI ad blocking DELETE, parent", ai_adb_parent.prop ("tagName"), "id=\""+ ai_adb_parent.attr ("id")+"\"", "class=\""+ ai_adb_parent.attr ("class")+"\"");
195
 
196
  var ai_adb_selectors = $(this).data ("selectors");
197
  if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
198
 
199
- if (ai_adb_debugging) console.log ("AI ad blocking DELETE, selectors='" + ai_adb_selectors + "'");
200
 
201
  var ai_adb_action = false;
202
  $(ai_adb_parent).find ('.AI_ADB_CONTENT_DELETE_BEGIN_CLASS, ' + ai_adb_selectors).each (function () {
@@ -212,7 +212,7 @@ function ai_adb_process_content () {
212
  $(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS").each (function () {
213
  var ai_adb_parent = $(this).parent ();
214
 
215
- if (ai_adb_debugging) console.log ("AI ad blocking REPLACE, parent", ai_adb_parent.prop ("tagName"), "id=\""+ ai_adb_parent.attr ("id")+"\"", "class=\""+ ai_adb_parent.attr ("class")+"\"");
216
 
217
  var ai_adb_text = $(this).data ("text");
218
  if (typeof ai_adb_text == "undefined") ai_adb_text = "";
@@ -223,7 +223,7 @@ function ai_adb_process_content () {
223
  var ai_adb_selectors = $(this).data ("selectors");
224
  if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
225
 
226
- if (ai_adb_debugging) console.log ("AI ad blocking REPLACE, text=\'" + ai_adb_text + '\'', 'css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
227
 
228
  var ai_adb_action = false;
229
  $(ai_adb_parent).find ('.AI_ADB_CONTENT_REPLACE_BEGIN_CLASS, ' + ai_adb_selectors).each (function () {
@@ -246,7 +246,8 @@ function ai_adb_process_content () {
246
 
247
  var ai_adb_detected = function(n) {
248
 
249
- if (ai_adb_debugging) console.log ("AI ad blocking DETECTED", n);
 
250
 
251
  if (!ai_adb_active) {
252
  ai_adb_active = true;
@@ -254,7 +255,7 @@ var ai_adb_detected = function(n) {
254
  (function ($) {
255
 
256
  $(window).ready(function () {
257
- if (ai_adb_debugging) console.log ("AI ad blocking block actions");
258
 
259
  $(".ai-adb-hide").each (function () {
260
  $(this).css ({"display": "none", "visibility": "hidden"});
@@ -270,7 +271,7 @@ var ai_adb_detected = function(n) {
270
 
271
  if (ai_adb_debugging) {
272
  var debug_info = $(this).data ("ai-debug");
273
- console.log ("AI ad blocking HIDE", typeof debug_info != "undefined" ? debug_info : "");
274
  }
275
  });
276
 
@@ -297,7 +298,7 @@ var ai_adb_detected = function(n) {
297
 
298
  if (ai_adb_debugging) {
299
  var debug_info = $(this).data ("ai-debug");
300
- console.log ("AI ad blocking SHOW", typeof debug_info != "undefined" ? debug_info : "");
301
  }
302
  });
303
 
@@ -306,16 +307,16 @@ var ai_adb_detected = function(n) {
306
  setTimeout (ai_adb_process_content, 10);
307
  });
308
 
309
- if (ai_adb_debugging) console.log ("AI ad blocking action check");
310
  // $.removeCookie (ai_adb_pgv_cookie_name, {path: "/" });
311
 
312
  if (ai_adb_page_views != 0) {
313
  var ai_adb_page_view_counter = 1;
314
  var cookie = $.cookie (ai_adb_pgv_cookie_name);
315
  if (typeof cookie != "undefined") ai_adb_page_view_counter = parseInt (cookie) + 1;
316
- if (ai_adb_debugging) console.log ("AI ad blocking page views cookie:", cookie, "- page view:", ai_adb_page_view_counter);
317
  if (ai_adb_page_view_counter < ai_adb_page_views) {
318
- if (ai_adb_debugging) console.log ("AI ad blocking", ai_adb_page_views, "page views not reached, no action");
319
  var d1 = ai_adb_page_view_counter;
320
  var AI_ADB_STATUS_MESSAGE=1;
321
  $.cookie (ai_adb_pgv_cookie_name, ai_adb_page_view_counter, {expires: 365, path: "/"});
@@ -325,19 +326,24 @@ var ai_adb_detected = function(n) {
325
 
326
  if (ai_adb_message_cookie_lifetime != 0 && (ai_adb_action != 1 || !ai_adb_message_undismissible)) {
327
  var cookie = $.cookie (ai_adb_act_cookie_name);
328
- if (ai_adb_debugging) console.log ("AI ad blocking cookie:", cookie);
329
  if (typeof cookie != "undefined" && cookie == "AI_CONST_AI_ADB_COOKIE_VALUE") {
330
- if (ai_adb_debugging) console.log ("AI ad blocking valid cookie detected, no action");
331
  var AI_ADB_STATUS_MESSAGE=2;
332
  return;
333
  }
334
 
335
- else if (ai_adb_debugging) console.log ("AI ad blocking invalid cookie");
336
  $.cookie (ai_adb_act_cookie_name, "AI_CONST_AI_ADB_COOKIE_VALUE", {expires: ai_adb_message_cookie_lifetime, path: "/"});
337
  } else $.removeCookie (ai_adb_act_cookie_name, {path: "/" });
338
 
339
- if (ai_adb_debugging) console.log ("AI ad blocking action", ai_adb_action);
340
- var AI_ADB_STATUS_MESSAGE=3;
 
 
 
 
 
341
 
342
  switch (ai_adb_action) {
343
  case 1:
@@ -357,18 +363,18 @@ var ai_adb_detected = function(n) {
357
  }
358
  }
359
 
360
- if (ai_adb_debugging) console.log ("AI ad blocking MESSAGE click detection installed");
361
 
362
  } else {
363
  // $.removeCookie (ai_adb_act_cookie_name, {path: "/" });
364
  }
365
 
366
- if (ai_adb_debugging) console.log ("AI ad blocking MESSAGE");
367
  $("body").prepend (ai_adb_overlay).prepend (ai_adb_message_window);
368
  break;
369
  case 2:
370
  if (ai_adb_redirection_url != "") {
371
- if (ai_adb_debugging) console.log ("AI ad blocking REDIRECTION to", ai_adb_redirection_url);
372
 
373
  var redirect = true;
374
  if (ai_adb_redirection_url.toLowerCase().substring (0, 4) == "http") {
@@ -386,11 +392,11 @@ var ai_adb_detected = function(n) {
386
 
387
  window.location.replace (ai_adb_redirection_url)
388
  } else {
389
- if (ai_adb_debugging) console.log ("AI ad blocking no redirection, cookie:", cookie);
390
 
391
  }
392
  } else {
393
- if (ai_adb_debugging) console.log ("AI ad blocking already on page", window.location.href);
394
  jQuery.removeCookie (ai_adb_page_redirection_cookie_name, {path: "/"});
395
  }
396
  }
@@ -407,10 +413,11 @@ var ai_adb_detected = function(n) {
407
  var ai_adb_undetected = function(n) {
408
  ai_adb_counter ++;
409
 
410
- if (ai_adb_debugging) console.log ("AI ad blocking not detected", n, "- counter:", ai_adb_counter);
 
411
 
412
  if (!ai_adb_active && ai_adb_counter == 3) {
413
- if (ai_adb_debugging) console.log ("AI ad blocking NOT DETECTED");
414
 
415
  var AI_ADB_STATUS_MESSAGE=4; // Check replacement code {}
416
 
@@ -424,7 +431,7 @@ var ai_adb_undetected = function(n) {
424
  // if (redirected_page) {
425
  // var cookie = jQuery.cookie (ai_adb_page_redirection_cookie_name);
426
  // if (typeof cookie != "undefined" && cookie.toLowerCase().substring (0, 4) == "http") {
427
- // if (ai_adb_debugging) console.log ("AI ad blocking returning to", cookie);
428
  // jQuery.removeCookie (ai_adb_page_redirection_cookie_name, {path: "/"});
429
  // window.location.replace (cookie);
430
  // }
@@ -470,12 +477,12 @@ jQuery (document).ready (function ($) {
470
  var ai_adb_selector = ai_adb_selectors.split (",");
471
  $.each (ai_adb_selector, function (i) {
472
 
473
- if (ai_adb_debugging) console.log ("AI ad blocking selector", ai_adb_selector [i]);
474
 
475
  if ($(ai_adb_selector [i]).length != 0) {
476
  $(ai_adb_selector [i]).each (function (n) {
477
 
478
- if (ai_adb_debugging) console.log ("AI ad blocking element id=\"" + $(this).attr ("id") + "\" class=\"" + $(this).attr ("class") + "\" heights:", $(this).outerHeight (), $(this).innerHeight (), $(this).height ());
479
 
480
  ai_adb_el_counter ++;
481
  if ($(this).outerHeight () === 0) {
161
  (function ($) {
162
 
163
  if (ai_adb_debugging) console.log ('');
164
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING CONTENT PROCESSING");
165
 
166
  $(".AI_ADB_CONTENT_CSS_BEGIN_CLASS").each (function () {
167
  var ai_adb_parent = $(this).parent ();
168
 
169
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING parent", ai_adb_parent.prop ("tagName"), "id=\""+ ai_adb_parent.attr ("id")+"\"", "class=\""+ ai_adb_parent.attr ("class")+"\"");
170
 
171
  var ai_adb_css = $(this).data ("css");
172
  if (typeof ai_adb_css == "undefined") ai_adb_css = "display: none !important;";
174
  var ai_adb_selectors = $(this).data ("selectors");
175
  if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
176
 
177
+ if (ai_adb_debugging) console.log ('AI AD BLOCKING CSS, css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
178
 
179
  var ai_adb_action = false;
180
  $(ai_adb_parent).find ('.AI_ADB_CONTENT_CSS_BEGIN_CLASS, ' + ai_adb_selectors).each (function () {
191
  $(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS").each (function () {
192
  var ai_adb_parent = $(this).parent ();
193
 
194
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE, parent", ai_adb_parent.prop ("tagName"), "id=\""+ ai_adb_parent.attr ("id")+"\"", "class=\""+ ai_adb_parent.attr ("class")+"\"");
195
 
196
  var ai_adb_selectors = $(this).data ("selectors");
197
  if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
198
 
199
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE, selectors='" + ai_adb_selectors + "'");
200
 
201
  var ai_adb_action = false;
202
  $(ai_adb_parent).find ('.AI_ADB_CONTENT_DELETE_BEGIN_CLASS, ' + ai_adb_selectors).each (function () {
212
  $(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS").each (function () {
213
  var ai_adb_parent = $(this).parent ();
214
 
215
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE, parent", ai_adb_parent.prop ("tagName"), "id=\""+ ai_adb_parent.attr ("id")+"\"", "class=\""+ ai_adb_parent.attr ("class")+"\"");
216
 
217
  var ai_adb_text = $(this).data ("text");
218
  if (typeof ai_adb_text == "undefined") ai_adb_text = "";
223
  var ai_adb_selectors = $(this).data ("selectors");
224
  if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
225
 
226
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE, text=\'" + ai_adb_text + '\'', 'css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
227
 
228
  var ai_adb_action = false;
229
  $(ai_adb_parent).find ('.AI_ADB_CONTENT_REPLACE_BEGIN_CLASS, ' + ai_adb_selectors).each (function () {
246
 
247
  var ai_adb_detected = function(n) {
248
 
249
+ if (ai_adb_debugging && n == 0) console.log ('');
250
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING DETECTED", n);
251
 
252
  if (!ai_adb_active) {
253
  ai_adb_active = true;
255
  (function ($) {
256
 
257
  $(window).ready(function () {
258
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions");
259
 
260
  $(".ai-adb-hide").each (function () {
261
  $(this).css ({"display": "none", "visibility": "hidden"});
271
 
272
  if (ai_adb_debugging) {
273
  var debug_info = $(this).data ("ai-debug");
274
+ console.log ("AI AD BLOCKING HIDE", typeof debug_info != "undefined" ? debug_info : "");
275
  }
276
  });
277
 
298
 
299
  if (ai_adb_debugging) {
300
  var debug_info = $(this).data ("ai-debug");
301
+ console.log ("AI AD BLOCKING SHOW", typeof debug_info != "undefined" ? debug_info : "");
302
  }
303
  });
304
 
307
  setTimeout (ai_adb_process_content, 10);
308
  });
309
 
310
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING action check");
311
  // $.removeCookie (ai_adb_pgv_cookie_name, {path: "/" });
312
 
313
  if (ai_adb_page_views != 0) {
314
  var ai_adb_page_view_counter = 1;
315
  var cookie = $.cookie (ai_adb_pgv_cookie_name);
316
  if (typeof cookie != "undefined") ai_adb_page_view_counter = parseInt (cookie) + 1;
317
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING page views cookie:", cookie, "- page view:", ai_adb_page_view_counter);
318
  if (ai_adb_page_view_counter < ai_adb_page_views) {
319
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING", ai_adb_page_views, "page views not reached, no action");
320
  var d1 = ai_adb_page_view_counter;
321
  var AI_ADB_STATUS_MESSAGE=1;
322
  $.cookie (ai_adb_pgv_cookie_name, ai_adb_page_view_counter, {expires: 365, path: "/"});
326
 
327
  if (ai_adb_message_cookie_lifetime != 0 && (ai_adb_action != 1 || !ai_adb_message_undismissible)) {
328
  var cookie = $.cookie (ai_adb_act_cookie_name);
329
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING cookie:", cookie);
330
  if (typeof cookie != "undefined" && cookie == "AI_CONST_AI_ADB_COOKIE_VALUE") {
331
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING valid cookie detected, no action");
332
  var AI_ADB_STATUS_MESSAGE=2;
333
  return;
334
  }
335
 
336
+ else if (ai_adb_debugging) console.log ("AI AD BLOCKING invalid cookie");
337
  $.cookie (ai_adb_act_cookie_name, "AI_CONST_AI_ADB_COOKIE_VALUE", {expires: ai_adb_message_cookie_lifetime, path: "/"});
338
  } else $.removeCookie (ai_adb_act_cookie_name, {path: "/" });
339
 
340
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING action", ai_adb_action);
341
+
342
+ if (ai_adb_action == 0) {
343
+ var AI_ADB_STATUS_MESSAGE=6;
344
+ } else {
345
+ var AI_ADB_STATUS_MESSAGE=3;
346
+ }
347
 
348
  switch (ai_adb_action) {
349
  case 1:
363
  }
364
  }
365
 
366
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE click detection installed");
367
 
368
  } else {
369
  // $.removeCookie (ai_adb_act_cookie_name, {path: "/" });
370
  }
371
 
372
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE");
373
  $("body").prepend (ai_adb_overlay).prepend (ai_adb_message_window);
374
  break;
375
  case 2:
376
  if (ai_adb_redirection_url != "") {
377
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING REDIRECTION to", ai_adb_redirection_url);
378
 
379
  var redirect = true;
380
  if (ai_adb_redirection_url.toLowerCase().substring (0, 4) == "http") {
392
 
393
  window.location.replace (ai_adb_redirection_url)
394
  } else {
395
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING no redirection, cookie:", cookie);
396
 
397
  }
398
  } else {
399
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING already on page", window.location.href);
400
  jQuery.removeCookie (ai_adb_page_redirection_cookie_name, {path: "/"});
401
  }
402
  }
413
  var ai_adb_undetected = function(n) {
414
  ai_adb_counter ++;
415
 
416
+ if (ai_adb_debugging && n == 1) console.log ('');
417
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING not detected", n, "- counter:", ai_adb_counter);
418
 
419
  if (!ai_adb_active && ai_adb_counter == 3) {
420
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING NOT DETECTED");
421
 
422
  var AI_ADB_STATUS_MESSAGE=4; // Check replacement code {}
423
 
431
  // if (redirected_page) {
432
  // var cookie = jQuery.cookie (ai_adb_page_redirection_cookie_name);
433
  // if (typeof cookie != "undefined" && cookie.toLowerCase().substring (0, 4) == "http") {
434
+ // if (ai_adb_debugging) console.log ("AI AD BLOCKING returning to", cookie);
435
  // jQuery.removeCookie (ai_adb_page_redirection_cookie_name, {path: "/"});
436
  // window.location.replace (cookie);
437
  // }
477
  var ai_adb_selector = ai_adb_selectors.split (",");
478
  $.each (ai_adb_selector, function (i) {
479
 
480
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING selector", ai_adb_selector [i]);
481
 
482
  if ($(ai_adb_selector [i]).length != 0) {
483
  $(ai_adb_selector [i]).each (function (n) {
484
 
485
+ if (ai_adb_debugging) console.log ("AI AD BLOCKING element id=\"" + $(this).attr ("id") + "\" class=\"" + $(this).attr ("class") + "\" heights:", $(this).outerHeight (), $(this).innerHeight (), $(this).height ());
486
 
487
  ai_adb_el_counter ++;
488
  if ($(this).outerHeight () === 0) {
includes/js/ai-adb.min.js CHANGED
@@ -15,25 +15,26 @@ while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3
15
  input.length){enc1=keyString.indexOf(input.charAt(i++));enc2=keyString.indexOf(input.charAt(i++));enc3=keyString.indexOf(input.charAt(i++));enc4=keyString.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64)output=output+String.fromCharCode(chr2);if(enc4!=64)output=output+String.fromCharCode(chr3)}output=uTF8Decode(output);return output}})})(jQuery);var ai_adb=false;
16
  var ai_adb_debugging=typeof ai_debugging!=="undefined";var ai_adb_active=false;var ai_adb_counter=0;var ai_adb_overlay=AI_ADB_OVERLAY_WINDOW;var ai_adb_message_window=AI_ADB_MESSAGE_WINDOW;var ai_adb_message_undismissible=AI_FUNCB_GET_UNDISMISSIBLE_MESSAGE;var ai_adb_act_cookie_name="aiADB";var ai_adb_pgv_cookie_name="aiADB_PV";var ai_adb_page_redirection_cookie_name="aiADB_PR";var ai_adb_message_cookie_lifetime=AI_FUNCT_GET_NO_ACTION_PERIOD;var ai_adb_action=AI_FUNC_GET_ADB_ACTION;
17
  var ai_adb_page_views=AI_FUNCT_GET_DELAY_ACTION;var ai_adb_selectors="AI_ADB_SELECTORS";var ai_adb_redirection_url="AI_ADB_REDIRECTION_PAGE";
18
- function ai_adb_process_content(){(function($){if(ai_adb_debugging)console.log("");if(ai_adb_debugging)console.log("AI ad blocking CONTENT PROCESSING");$(".AI_ADB_CONTENT_CSS_BEGIN_CLASS").each(function(){var ai_adb_parent=$(this).parent();if(ai_adb_debugging)console.log("AI ad blocking parent",ai_adb_parent.prop("tagName"),'id="'+ai_adb_parent.attr("id")+'"','class="'+ai_adb_parent.attr("class")+'"');var ai_adb_css=$(this).data("css");if(typeof ai_adb_css=="undefined")ai_adb_css="display: none !important;";
19
- var ai_adb_selectors=$(this).data("selectors");if(typeof ai_adb_selectors=="undefined"||ai_adb_selectors=="")ai_adb_selectors="p";if(ai_adb_debugging)console.log("AI ad blocking CSS, css='"+ai_adb_css+"'","selectors='"+ai_adb_selectors+"'");var ai_adb_action=false;$(ai_adb_parent).find(".AI_ADB_CONTENT_CSS_BEGIN_CLASS, "+ai_adb_selectors).each(function(){if($(this).hasClass("AI_ADB_CONTENT_CSS_BEGIN_CLASS")){$(this).remove();ai_adb_action=true}else if($(this).hasClass("AI_ADB_CONTENT_CSS_END_CLASS")){$(this).remove();
20
- ai_adb_action=false}else if(ai_adb_action){var ai_adb_style=$(this).attr("style");if(typeof ai_adb_style=="undefined")ai_adb_style="";$(this).attr("style",ai_adb_style+";"+ai_adb_css)}})});$(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS").each(function(){var ai_adb_parent=$(this).parent();if(ai_adb_debugging)console.log("AI ad blocking DELETE, parent",ai_adb_parent.prop("tagName"),'id="'+ai_adb_parent.attr("id")+'"','class="'+ai_adb_parent.attr("class")+'"');var ai_adb_selectors=$(this).data("selectors");if(typeof ai_adb_selectors==
21
- "undefined"||ai_adb_selectors=="")ai_adb_selectors="p";if(ai_adb_debugging)console.log("AI ad blocking DELETE, selectors='"+ai_adb_selectors+"'");var ai_adb_action=false;$(ai_adb_parent).find(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS, "+ai_adb_selectors).each(function(){if($(this).hasClass("AI_ADB_CONTENT_DELETE_BEGIN_CLASS")){$(this).remove();ai_adb_action=true}else if($(this).hasClass("AI_ADB_CONTENT_DELETE_END_CLASS")){$(this).remove();ai_adb_action=false}else if(ai_adb_action)$(this).remove()})});$(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS").each(function(){var ai_adb_parent=
22
- $(this).parent();if(ai_adb_debugging)console.log("AI ad blocking REPLACE, parent",ai_adb_parent.prop("tagName"),'id="'+ai_adb_parent.attr("id")+'"','class="'+ai_adb_parent.attr("class")+'"');var ai_adb_text=$(this).data("text");if(typeof ai_adb_text=="undefined")ai_adb_text="";var ai_adb_css=$(this).data("css");if(typeof ai_adb_css=="undefined")ai_adb_css="";var ai_adb_selectors=$(this).data("selectors");if(typeof ai_adb_selectors=="undefined"||ai_adb_selectors=="")ai_adb_selectors="p";if(ai_adb_debugging)console.log("AI ad blocking REPLACE, text='"+
23
  ai_adb_text+"'","css='"+ai_adb_css+"'","selectors='"+ai_adb_selectors+"'");var ai_adb_action=false;$(ai_adb_parent).find(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS, "+ai_adb_selectors).each(function(){if($(this).hasClass("AI_ADB_CONTENT_REPLACE_BEGIN_CLASS")){$(this).remove();ai_adb_action=true}else if($(this).hasClass("AI_ADB_CONTENT_REPLACE_END_CLASS")){$(this).remove();ai_adb_action=false}else if(ai_adb_action){if(ai_adb_text.length!=0){var n=Math.round($(this).text().length/(ai_adb_text.length+1));
24
  $(this).text(Array(n+1).join(ai_adb_text+" "))}else $(this).text("");var ai_adb_style=$(this).attr("style");if(typeof ai_adb_style=="undefined")ai_adb_style="";$(this).attr("style",ai_adb_style+";"+ai_adb_css)}})})})(jQuery)}
25
- var ai_adb_detected=function(n){if(ai_adb_debugging)console.log("AI ad blocking DETECTED",n);if(!ai_adb_active){ai_adb_active=true;(function($){$(window).ready(function(){if(ai_adb_debugging)console.log("AI ad blocking block actions");$(".ai-adb-hide").each(function(){$(this).css({"display":"none","visibility":"hidden"});var wrapping_div=$(this).closest("div[data-ai]");if(typeof wrapping_div.data("ai")!="undefined"){var data=JSON.parse(atob(wrapping_div.data("ai")));if(typeof data!=="undefined"&&
26
- data.constructor===Array){data[1]="";wrapping_div.data("ai",btoa(JSON.stringify(data)))}}if(ai_adb_debugging){var debug_info=$(this).data("ai-debug");console.log("AI ad blocking HIDE",typeof debug_info!="undefined"?debug_info:"")}});$(".ai-adb-show").each(function(){$(this).css({"display":"block","visibility":"visible"});var tracking_data=$(this).data("ai-tracking");if(typeof tracking_data!="undefined"){var wrapping_div=$(this).closest("div[data-ai]");if(typeof wrapping_div.data("ai")!="undefined"){if($(this).hasClass("ai-no-tracking")){var data=
27
- JSON.parse(atob(wrapping_div.data("ai")));if(typeof data!=="undefined"&&data.constructor===Array){data[1]="";tracking_data=btoa(JSON.stringify(data))}}wrapping_div.data("ai",tracking_data)}}if(ai_adb_debugging){var debug_info=$(this).data("ai-debug");console.log("AI ad blocking SHOW",typeof debug_info!="undefined"?debug_info:"")}});setTimeout(ai_adb_process_content,10)});if(ai_adb_debugging)console.log("AI ad blocking action check");if(ai_adb_page_views!=0){var ai_adb_page_view_counter=1;var cookie=
28
- $.cookie(ai_adb_pgv_cookie_name);if(typeof cookie!="undefined")ai_adb_page_view_counter=parseInt(cookie)+1;if(ai_adb_debugging)console.log("AI ad blocking page views cookie:",cookie,"- page view:",ai_adb_page_view_counter);if(ai_adb_page_view_counter<ai_adb_page_views){if(ai_adb_debugging)console.log("AI ad blocking",ai_adb_page_views,"page views not reached, no action");var d1=ai_adb_page_view_counter;var AI_ADB_STATUS_MESSAGE=1;$.cookie(ai_adb_pgv_cookie_name,ai_adb_page_view_counter,{expires:365,
29
- path:"/"});return}}if(ai_adb_message_cookie_lifetime!=0&&(ai_adb_action!=1||!ai_adb_message_undismissible)){var cookie=$.cookie(ai_adb_act_cookie_name);if(ai_adb_debugging)console.log("AI ad blocking cookie:",cookie);if(typeof cookie!="undefined"&&cookie=="AI_CONST_AI_ADB_COOKIE_VALUE"){if(ai_adb_debugging)console.log("AI ad blocking valid cookie detected, no action");var AI_ADB_STATUS_MESSAGE=2;return}else if(ai_adb_debugging)console.log("AI ad blocking invalid cookie");$.cookie(ai_adb_act_cookie_name,
30
- "AI_CONST_AI_ADB_COOKIE_VALUE",{expires:ai_adb_message_cookie_lifetime,path:"/"})}else $.removeCookie(ai_adb_act_cookie_name,{path:"/"});if(ai_adb_debugging)console.log("AI ad blocking action",ai_adb_action);var AI_ADB_STATUS_MESSAGE=3;switch(ai_adb_action){case 1:if(!ai_adb_message_undismissible){ai_adb_overlay.click(function(){$(this).remove();ai_adb_message_window.remove()}).css("cursor","pointer");ai_adb_message_window.click(function(){$(this).remove();ai_adb_overlay.remove()}).css("cursor","pointer");
31
- window.onkeydown=function(event){if(event.keyCode===27){ai_adb_overlay.click();ai_adb_message_window.click()}};if(ai_adb_debugging)console.log("AI ad blocking MESSAGE click detection installed")}else;if(ai_adb_debugging)console.log("AI ad blocking MESSAGE");$("body").prepend(ai_adb_overlay).prepend(ai_adb_message_window);break;case 2:if(ai_adb_redirection_url!=""){if(ai_adb_debugging)console.log("AI ad blocking REDIRECTION to",ai_adb_redirection_url);var redirect=true;if(ai_adb_redirection_url.toLowerCase().substring(0,
32
- 4)=="http"){if(window.location.href==ai_adb_redirection_url)var redirect=false}else if(window.location.pathname==ai_adb_redirection_url)var redirect=false;if(redirect){var cookie=$.cookie(ai_adb_page_redirection_cookie_name);if(typeof cookie=="undefined"){var date=new Date;date.setTime(date.getTime()+10*1E3);$.cookie(ai_adb_page_redirection_cookie_name,window.location.href,{expires:date,path:"/"});window.location.replace(ai_adb_redirection_url)}else if(ai_adb_debugging)console.log("AI ad blocking no redirection, cookie:",
33
- cookie)}else{if(ai_adb_debugging)console.log("AI ad blocking already on page",window.location.href);jQuery.removeCookie(ai_adb_page_redirection_cookie_name,{path:"/"})}}break}})(jQuery);ai_adb=true}};var ai_adb_undetected=function(n){ai_adb_counter++;if(ai_adb_debugging)console.log("AI ad blocking not detected",n,"- counter:",ai_adb_counter);if(!ai_adb_active&&ai_adb_counter==3){if(ai_adb_debugging)console.log("AI ad blocking NOT DETECTED");var AI_ADB_STATUS_MESSAGE=4}};if(AI_DBG_AI_DEBUG_AD_BLOCKING)jQuery(document).ready(function(){ai_adb_detected(0)});
 
34
  if(!document.getElementById("AI_CONST_AI_ADB_1_NAME"))jQuery(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(1)});else jQuery(document).ready(function(){ai_adb_undetected(1)});if(typeof window.AI_CONST_AI_ADB_2_NAME=="undefined")jQuery(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(2)});else jQuery(document).ready(function(){ai_adb_undetected(2)});
35
  jQuery(document).ready(function($){$(window).ready(function(){$("#ai-adb-bar").click(function(){$.removeCookie(ai_adb_act_cookie_name,{path:"/"});$.removeCookie(ai_adb_pgv_cookie_name,{path:"/"});var AI_ADB_STATUS_MESSAGE=5});if($("#banner-advert-container img").length>0){if($("#banner-advert-container img").outerHeight()===0)$(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(3)});else $(document).ready(function(){ai_adb_undetected(3)});$("#banner-advert-container img").remove()}if((!ai_adb_active||
36
- ai_adb_debugging)&&ai_adb_selectors!=""){var ai_adb_el_counter=0;var ai_adb_el_zero=0;var ai_adb_selector=ai_adb_selectors.split(",");$.each(ai_adb_selector,function(i){if(ai_adb_debugging)console.log("AI ad blocking selector",ai_adb_selector[i]);if($(ai_adb_selector[i]).length!=0)$(ai_adb_selector[i]).each(function(n){if(ai_adb_debugging)console.log('AI ad blocking element id="'+$(this).attr("id")+'" class="'+$(this).attr("class")+'" heights:',$(this).outerHeight(),$(this).innerHeight(),$(this).height());
37
  ai_adb_el_counter++;if($(this).outerHeight()===0){$(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(4)});ai_adb_el_zero++;if(!ai_adb_debugging)return false}})});if(ai_adb_el_counter!=0&&ai_adb_el_zero==0)$(document).ready(function(){ai_adb_undetected(4)})}})});
38
  (function(factory){if(typeof define==="function"&&define.amd)define(["jquery"],factory);else if(typeof exports==="object")factory(require("jquery"));else factory(jQuery)})(function($){var pluses=/\+/g;function encode(s){return config.raw?s:encodeURIComponent(s)}function decode(s){return config.raw?s:decodeURIComponent(s)}function stringifyCookieValue(value){return encode(config.json?JSON.stringify(value):String(value))}function parseCookieValue(s){if(s.indexOf('"')===0)s=s.slice(1,-1).replace(/\\"/g,
39
  '"').replace(/\\\\/g,"\\");try{s=decodeURIComponent(s.replace(pluses," "));return config.json?JSON.parse(s):s}catch(e){}}function read(s,converter){var value=config.raw?s:parseCookieValue(s);return $.isFunction(converter)?converter(value):value}var config=$.cookie=function(key,value,options){if(value!==undefined&&!$.isFunction(value)){options=$.extend({},config.defaults,options);if(typeof options.expires==="number"){var days=options.expires,t=options.expires=new Date;t.setTime(+t+days*864E5)}return document.cookie=
15
  input.length){enc1=keyString.indexOf(input.charAt(i++));enc2=keyString.indexOf(input.charAt(i++));enc3=keyString.indexOf(input.charAt(i++));enc4=keyString.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64)output=output+String.fromCharCode(chr2);if(enc4!=64)output=output+String.fromCharCode(chr3)}output=uTF8Decode(output);return output}})})(jQuery);var ai_adb=false;
16
  var ai_adb_debugging=typeof ai_debugging!=="undefined";var ai_adb_active=false;var ai_adb_counter=0;var ai_adb_overlay=AI_ADB_OVERLAY_WINDOW;var ai_adb_message_window=AI_ADB_MESSAGE_WINDOW;var ai_adb_message_undismissible=AI_FUNCB_GET_UNDISMISSIBLE_MESSAGE;var ai_adb_act_cookie_name="aiADB";var ai_adb_pgv_cookie_name="aiADB_PV";var ai_adb_page_redirection_cookie_name="aiADB_PR";var ai_adb_message_cookie_lifetime=AI_FUNCT_GET_NO_ACTION_PERIOD;var ai_adb_action=AI_FUNC_GET_ADB_ACTION;
17
  var ai_adb_page_views=AI_FUNCT_GET_DELAY_ACTION;var ai_adb_selectors="AI_ADB_SELECTORS";var ai_adb_redirection_url="AI_ADB_REDIRECTION_PAGE";
18
+ function ai_adb_process_content(){(function($){if(ai_adb_debugging)console.log("");if(ai_adb_debugging)console.log("AI AD BLOCKING CONTENT PROCESSING");$(".AI_ADB_CONTENT_CSS_BEGIN_CLASS").each(function(){var ai_adb_parent=$(this).parent();if(ai_adb_debugging)console.log("AI AD BLOCKING parent",ai_adb_parent.prop("tagName"),'id="'+ai_adb_parent.attr("id")+'"','class="'+ai_adb_parent.attr("class")+'"');var ai_adb_css=$(this).data("css");if(typeof ai_adb_css=="undefined")ai_adb_css="display: none !important;";
19
+ var ai_adb_selectors=$(this).data("selectors");if(typeof ai_adb_selectors=="undefined"||ai_adb_selectors=="")ai_adb_selectors="p";if(ai_adb_debugging)console.log("AI AD BLOCKING CSS, css='"+ai_adb_css+"'","selectors='"+ai_adb_selectors+"'");var ai_adb_action=false;$(ai_adb_parent).find(".AI_ADB_CONTENT_CSS_BEGIN_CLASS, "+ai_adb_selectors).each(function(){if($(this).hasClass("AI_ADB_CONTENT_CSS_BEGIN_CLASS")){$(this).remove();ai_adb_action=true}else if($(this).hasClass("AI_ADB_CONTENT_CSS_END_CLASS")){$(this).remove();
20
+ ai_adb_action=false}else if(ai_adb_action){var ai_adb_style=$(this).attr("style");if(typeof ai_adb_style=="undefined")ai_adb_style="";$(this).attr("style",ai_adb_style+";"+ai_adb_css)}})});$(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS").each(function(){var ai_adb_parent=$(this).parent();if(ai_adb_debugging)console.log("AI AD BLOCKING DELETE, parent",ai_adb_parent.prop("tagName"),'id="'+ai_adb_parent.attr("id")+'"','class="'+ai_adb_parent.attr("class")+'"');var ai_adb_selectors=$(this).data("selectors");if(typeof ai_adb_selectors==
21
+ "undefined"||ai_adb_selectors=="")ai_adb_selectors="p";if(ai_adb_debugging)console.log("AI AD BLOCKING DELETE, selectors='"+ai_adb_selectors+"'");var ai_adb_action=false;$(ai_adb_parent).find(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS, "+ai_adb_selectors).each(function(){if($(this).hasClass("AI_ADB_CONTENT_DELETE_BEGIN_CLASS")){$(this).remove();ai_adb_action=true}else if($(this).hasClass("AI_ADB_CONTENT_DELETE_END_CLASS")){$(this).remove();ai_adb_action=false}else if(ai_adb_action)$(this).remove()})});$(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS").each(function(){var ai_adb_parent=
22
+ $(this).parent();if(ai_adb_debugging)console.log("AI AD BLOCKING REPLACE, parent",ai_adb_parent.prop("tagName"),'id="'+ai_adb_parent.attr("id")+'"','class="'+ai_adb_parent.attr("class")+'"');var ai_adb_text=$(this).data("text");if(typeof ai_adb_text=="undefined")ai_adb_text="";var ai_adb_css=$(this).data("css");if(typeof ai_adb_css=="undefined")ai_adb_css="";var ai_adb_selectors=$(this).data("selectors");if(typeof ai_adb_selectors=="undefined"||ai_adb_selectors=="")ai_adb_selectors="p";if(ai_adb_debugging)console.log("AI AD BLOCKING REPLACE, text='"+
23
  ai_adb_text+"'","css='"+ai_adb_css+"'","selectors='"+ai_adb_selectors+"'");var ai_adb_action=false;$(ai_adb_parent).find(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS, "+ai_adb_selectors).each(function(){if($(this).hasClass("AI_ADB_CONTENT_REPLACE_BEGIN_CLASS")){$(this).remove();ai_adb_action=true}else if($(this).hasClass("AI_ADB_CONTENT_REPLACE_END_CLASS")){$(this).remove();ai_adb_action=false}else if(ai_adb_action){if(ai_adb_text.length!=0){var n=Math.round($(this).text().length/(ai_adb_text.length+1));
24
  $(this).text(Array(n+1).join(ai_adb_text+" "))}else $(this).text("");var ai_adb_style=$(this).attr("style");if(typeof ai_adb_style=="undefined")ai_adb_style="";$(this).attr("style",ai_adb_style+";"+ai_adb_css)}})})})(jQuery)}
25
+ var ai_adb_detected=function(n){if(ai_adb_debugging&&n==0)console.log("");if(ai_adb_debugging)console.log("AI AD BLOCKING DETECTED",n);if(!ai_adb_active){ai_adb_active=true;(function($){$(window).ready(function(){if(ai_adb_debugging)console.log("AI AD BLOCKING block actions");$(".ai-adb-hide").each(function(){$(this).css({"display":"none","visibility":"hidden"});var wrapping_div=$(this).closest("div[data-ai]");if(typeof wrapping_div.data("ai")!="undefined"){var data=JSON.parse(atob(wrapping_div.data("ai")));
26
+ if(typeof data!=="undefined"&&data.constructor===Array){data[1]="";wrapping_div.data("ai",btoa(JSON.stringify(data)))}}if(ai_adb_debugging){var debug_info=$(this).data("ai-debug");console.log("AI AD BLOCKING HIDE",typeof debug_info!="undefined"?debug_info:"")}});$(".ai-adb-show").each(function(){$(this).css({"display":"block","visibility":"visible"});var tracking_data=$(this).data("ai-tracking");if(typeof tracking_data!="undefined"){var wrapping_div=$(this).closest("div[data-ai]");if(typeof wrapping_div.data("ai")!=
27
+ "undefined"){if($(this).hasClass("ai-no-tracking")){var data=JSON.parse(atob(wrapping_div.data("ai")));if(typeof data!=="undefined"&&data.constructor===Array){data[1]="";tracking_data=btoa(JSON.stringify(data))}}wrapping_div.data("ai",tracking_data)}}if(ai_adb_debugging){var debug_info=$(this).data("ai-debug");console.log("AI AD BLOCKING SHOW",typeof debug_info!="undefined"?debug_info:"")}});setTimeout(ai_adb_process_content,10)});if(ai_adb_debugging)console.log("AI AD BLOCKING action check");if(ai_adb_page_views!=
28
+ 0){var ai_adb_page_view_counter=1;var cookie=$.cookie(ai_adb_pgv_cookie_name);if(typeof cookie!="undefined")ai_adb_page_view_counter=parseInt(cookie)+1;if(ai_adb_debugging)console.log("AI AD BLOCKING page views cookie:",cookie,"- page view:",ai_adb_page_view_counter);if(ai_adb_page_view_counter<ai_adb_page_views){if(ai_adb_debugging)console.log("AI AD BLOCKING",ai_adb_page_views,"page views not reached, no action");var d1=ai_adb_page_view_counter;var AI_ADB_STATUS_MESSAGE=1;$.cookie(ai_adb_pgv_cookie_name,
29
+ ai_adb_page_view_counter,{expires:365,path:"/"});return}}if(ai_adb_message_cookie_lifetime!=0&&(ai_adb_action!=1||!ai_adb_message_undismissible)){var cookie=$.cookie(ai_adb_act_cookie_name);if(ai_adb_debugging)console.log("AI AD BLOCKING cookie:",cookie);if(typeof cookie!="undefined"&&cookie=="AI_CONST_AI_ADB_COOKIE_VALUE"){if(ai_adb_debugging)console.log("AI AD BLOCKING valid cookie detected, no action");var AI_ADB_STATUS_MESSAGE=2;return}else if(ai_adb_debugging)console.log("AI AD BLOCKING invalid cookie");
30
+ $.cookie(ai_adb_act_cookie_name,"AI_CONST_AI_ADB_COOKIE_VALUE",{expires:ai_adb_message_cookie_lifetime,path:"/"})}else $.removeCookie(ai_adb_act_cookie_name,{path:"/"});if(ai_adb_debugging)console.log("AI AD BLOCKING action",ai_adb_action);if(ai_adb_action==0)var AI_ADB_STATUS_MESSAGE=6;else var AI_ADB_STATUS_MESSAGE=3;switch(ai_adb_action){case 1:if(!ai_adb_message_undismissible){ai_adb_overlay.click(function(){$(this).remove();ai_adb_message_window.remove()}).css("cursor","pointer");ai_adb_message_window.click(function(){$(this).remove();
31
+ ai_adb_overlay.remove()}).css("cursor","pointer");window.onkeydown=function(event){if(event.keyCode===27){ai_adb_overlay.click();ai_adb_message_window.click()}};if(ai_adb_debugging)console.log("AI AD BLOCKING MESSAGE click detection installed")}else;if(ai_adb_debugging)console.log("AI AD BLOCKING MESSAGE");$("body").prepend(ai_adb_overlay).prepend(ai_adb_message_window);break;case 2:if(ai_adb_redirection_url!=""){if(ai_adb_debugging)console.log("AI AD BLOCKING REDIRECTION to",ai_adb_redirection_url);
32
+ var redirect=true;if(ai_adb_redirection_url.toLowerCase().substring(0,4)=="http"){if(window.location.href==ai_adb_redirection_url)var redirect=false}else if(window.location.pathname==ai_adb_redirection_url)var redirect=false;if(redirect){var cookie=$.cookie(ai_adb_page_redirection_cookie_name);if(typeof cookie=="undefined"){var date=new Date;date.setTime(date.getTime()+10*1E3);$.cookie(ai_adb_page_redirection_cookie_name,window.location.href,{expires:date,path:"/"});window.location.replace(ai_adb_redirection_url)}else if(ai_adb_debugging)console.log("AI AD BLOCKING no redirection, cookie:",
33
+ cookie)}else{if(ai_adb_debugging)console.log("AI AD BLOCKING already on page",window.location.href);jQuery.removeCookie(ai_adb_page_redirection_cookie_name,{path:"/"})}}break}})(jQuery);ai_adb=true}};
34
+ var ai_adb_undetected=function(n){ai_adb_counter++;if(ai_adb_debugging&&n==1)console.log("");if(ai_adb_debugging)console.log("AI AD BLOCKING not detected",n,"- counter:",ai_adb_counter);if(!ai_adb_active&&ai_adb_counter==3){if(ai_adb_debugging)console.log("AI AD BLOCKING NOT DETECTED");var AI_ADB_STATUS_MESSAGE=4}};if(AI_DBG_AI_DEBUG_AD_BLOCKING)jQuery(document).ready(function(){ai_adb_detected(0)});
35
  if(!document.getElementById("AI_CONST_AI_ADB_1_NAME"))jQuery(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(1)});else jQuery(document).ready(function(){ai_adb_undetected(1)});if(typeof window.AI_CONST_AI_ADB_2_NAME=="undefined")jQuery(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(2)});else jQuery(document).ready(function(){ai_adb_undetected(2)});
36
  jQuery(document).ready(function($){$(window).ready(function(){$("#ai-adb-bar").click(function(){$.removeCookie(ai_adb_act_cookie_name,{path:"/"});$.removeCookie(ai_adb_pgv_cookie_name,{path:"/"});var AI_ADB_STATUS_MESSAGE=5});if($("#banner-advert-container img").length>0){if($("#banner-advert-container img").outerHeight()===0)$(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(3)});else $(document).ready(function(){ai_adb_undetected(3)});$("#banner-advert-container img").remove()}if((!ai_adb_active||
37
+ ai_adb_debugging)&&ai_adb_selectors!=""){var ai_adb_el_counter=0;var ai_adb_el_zero=0;var ai_adb_selector=ai_adb_selectors.split(",");$.each(ai_adb_selector,function(i){if(ai_adb_debugging)console.log("AI AD BLOCKING selector",ai_adb_selector[i]);if($(ai_adb_selector[i]).length!=0)$(ai_adb_selector[i]).each(function(n){if(ai_adb_debugging)console.log('AI AD BLOCKING element id="'+$(this).attr("id")+'" class="'+$(this).attr("class")+'" heights:',$(this).outerHeight(),$(this).innerHeight(),$(this).height());
38
  ai_adb_el_counter++;if($(this).outerHeight()===0){$(document).ready(function(){if(!ai_adb_active||ai_adb_debugging)ai_adb_detected(4)});ai_adb_el_zero++;if(!ai_adb_debugging)return false}})});if(ai_adb_el_counter!=0&&ai_adb_el_zero==0)$(document).ready(function(){ai_adb_undetected(4)})}})});
39
  (function(factory){if(typeof define==="function"&&define.amd)define(["jquery"],factory);else if(typeof exports==="object")factory(require("jquery"));else factory(jQuery)})(function($){var pluses=/\+/g;function encode(s){return config.raw?s:encodeURIComponent(s)}function decode(s){return config.raw?s:decodeURIComponent(s)}function stringifyCookieValue(value){return encode(config.json?JSON.stringify(value):String(value))}function parseCookieValue(s){if(s.indexOf('"')===0)s=s.slice(1,-1).replace(/\\"/g,
40
  '"').replace(/\\\\/g,"\\");try{s=decodeURIComponent(s.replace(pluses," "));return config.json?JSON.parse(s):s}catch(e){}}function read(s,converter){var value=config.raw?s:parseCookieValue(s);return $.isFunction(converter)?converter(value):value}var config=$.cookie=function(key,value,options){if(value!==undefined&&!$.isFunction(value)){options=$.extend({},config.defaults,options);if(typeof options.expires==="number"){var days=options.expires,t=options.expires=new Date;t.setTime(+t+days*864E5)}return document.cookie=
includes/preview.php CHANGED
@@ -1619,13 +1619,14 @@ td.demo-wrapper-background {
1619
  .ui-spinner {
1620
  border: 0;
1621
  }
 
1622
  .ui-spinner-horizontal, .ui-spinner-horizontal .ui-spinner-input {
1623
  height: 14px;
1624
  }
1625
  .ui-spinner-horizontal .ui-spinner-input {
1626
  width: 23px;
1627
  outline: 0;
1628
- margin: -1px 12px 0 12px;
1629
  }
1630
 
1631
  .spinner.sticky .ui-spinner-horizontal .ui-spinner-input {
@@ -1711,7 +1712,7 @@ select {
1711
  </div>
1712
 
1713
  <?php if (!$read_only) : ?>
1714
- <div style="margin: 10px -8px 10px 0">
1715
  <table class="screen" cellspacing=0 cellspacing="0">
1716
  <tr>
1717
  <td><span>&#9667;</span></td>
1619
  .ui-spinner {
1620
  border: 0;
1621
  }
1622
+
1623
  .ui-spinner-horizontal, .ui-spinner-horizontal .ui-spinner-input {
1624
  height: 14px;
1625
  }
1626
  .ui-spinner-horizontal .ui-spinner-input {
1627
  width: 23px;
1628
  outline: 0;
1629
+ margin: 0 12px 0 12px;
1630
  }
1631
 
1632
  .spinner.sticky .ui-spinner-horizontal .ui-spinner-input {
1712
  </div>
1713
 
1714
  <?php if (!$read_only) : ?>
1715
+ <div style="margin: 10px -8px 10px -8px">
1716
  <table class="screen" cellspacing=0 cellspacing="0">
1717
  <tr>
1718
  <td><span>&#9667;</span></td>
js/ad-inserter.js CHANGED
@@ -1,4 +1,4 @@
1
- var javascript_version = "2.3.16";
2
  var ignore_key = true;
3
  var start = 1;
4
  var end = 16;
1
+ var javascript_version = "2.3.17";
2
  var ignore_key = true;
3
  var start = 1;
4
  var end = 16;
readme.txt CHANGED
@@ -6,7 +6,7 @@ Tags: ads, adsense, header footer code, ad management, sticky fixed widgets, adv
6
  Requires at least: 4.0
7
  Tested up to: 4.9
8
  Requires PHP: 5.6
9
- Stable tag: 2.3.15
10
  License: GPLv3
11
 
12
  Insert and manage ads: Amazon, Google AdSense ads, banner rotation, sticky widget ads, AMP, PHP, HTML, CSS, Javascript, tracking, footer, header code
@@ -47,8 +47,8 @@ Average Rating: 5 out of 5 stars - check <a href="https://wordpress.org/support/
47
 
48
  **Features**
49
 
50
- * [AdSense integration](https://adinserter.pro/adsense-ads) - get ads form your AdSense account
51
- * Syntax highlighting [editor](https://adinserter.pro/code-editing)
52
  * Code preview with visual CSS editor
53
  * Automatically inserts ads on posts and pages
54
  * Insert ads before or after post
@@ -89,7 +89,7 @@ Average Rating: 5 out of 5 stars - check <a href="https://wordpress.org/support/
89
  * Create rich media ads with standard WordPress TinyMCE editor
90
  * Ad blocking detection - popup message, page redirection
91
  * Desktop/mobile device detection (server-side and client-side - works with caching)
92
- * [Black/White-list](https://adinserter.pro/lists) categories, tags, taxonomies, post IDs, urls, url query parameters, cookies, referers
93
  * Easy copying and pasting ads or settings using internal clipboard
94
  * Simple troubleshooting with many debugging functions
95
  * Function to visualize inserted code blocks and ads
@@ -113,7 +113,7 @@ Ad Inserter is a perfect plugin to place code for Google AdSense ads at top posi
113
 
114
  > If you're new to AdSense, one of your first tasks is to connect your site to AdSense. This requires you to copy the code on your AdSense homepage and paste it into the HTML of your page, between the `<head>` and `</head>` tags.
115
 
116
- Check [How to insert ad code in your WordPress site](https://support.google.com/adsense/answer/7527509). Advanced users can enable [AdSense integration](https://adinserter.pro/adsense-ads#integration): import AdSense ads from the plugin settings page - no need to copy codes for AdSense ads from the AdSense admin pages. List ad units, preview AdSense ads and get ad codes where you need them.
117
 
118
  **Endorsed by Amazon**
119
 
@@ -121,9 +121,9 @@ Amazon suggests to use Ad Inserter to add Native Shopping Ads to Wordpress posts
121
 
122
  > Native Shopping Ads provide highly relevant and dynamic product recommendations in a stylishly designed and responsive ad unit that can be placed at the end of your content or within your content to create a more compelling visitor experience and shopping opportunity.
123
 
124
- Check <a href="https://affiliate-program.amazon.com/help/topic/t405" target="_blank">Wordpress Integration Guide for Native Shopping Ads</a>. Ad Inserter supports also advanced contextual ads: check settings for <a href="https://adinserter.pro/settings#amazon">contextual Native Shopping Ads</a> that show ads with items related to the post content (using post tags).
125
 
126
- And if you need more ads with page/category specific settings, ad statistics and metrics for impressions and clicks, A/B testing, lazy loading ads, sticky ads, slider ads, pop-up ads, geotargeting or geolocation to serve country-specific ads, functions to protect content from users using ad blockers, functions to serve different ads for users using ad blockers, multisite options to limit settings for ads, to block some IP addresses, to schedule ads, there is **Ad Inserter Pro** - all-in-one <a href="http://adinserter.pro/" target="_blank">WordPress ad management plugin</a> that has many advanced features:
127
 
128
  * 64 code (ad) blocks (64 different insertion configurations for ads)
129
  * Geolocation using Webnet77 or <a href="http://www.maxmind.com/" target="_blank">MaxMind</a> databases (works also with caching)
@@ -132,10 +132,10 @@ And if you need more ads with page/category specific settings, ad statistics and
132
  * External tracking via Google Analytics or Matomo (Piwik)
133
  * A/B testing - discover ads and settings that perform best
134
  * Lazy loading ads
135
- * [Sticky ads](https://adinserter.pro/alignments-and-styles#sticky-ads) with optional close button
136
  * Sticky sidebar ads (stick to the screen or to the content)
137
  * Floating slide-in banner ads
138
- * [Sticky (floating) ads](https://adinserter.pro/alignments-and-styles#sticky-ads) with animations (fade, slide, turn, flip, zoom)
139
  * Animation trigger for sticky ads (page scroll in % or px, HTML element becomes visible)
140
  * Scheduling with fallback option
141
  * Ad blocking detection - replace ads, protect content
@@ -145,14 +145,14 @@ And if you need more ads with page/category specific settings, ad statistics and
145
  * More custom viewports for client-side desktop/mobile device detection
146
  * More custom hooks for custom theme insertions
147
  * Export and import of settings
 
148
  * Support via email
149
 
150
  Run a WordPress related blog? Have experience with AdSense ads? Interested in reviewing Ad Inserter Pro? <a href="https://adinserter.pro/contact" target="_blank">Introduce yourself</a>.
151
 
152
  Ad Inserter Wordpress plugin is an advanced advertising manager for all kind of ads - it has many features and options to automate placing ads in order to optimally monetize your website on desktop, tablet and phone displays. It provides many simple ways to insert any kind of ads, Javascript, HTML, PHP or advert code anywhere on the page. For best placement of ads please read the user manual to get the most of the plugin.
153
 
154
- * Check <a href="http://adinserter.pro/documentation" target="_blank">Ad Inserter documentation pages</a> for detailed description of all the features and some <a href="http://adinserter.pro/settings" target="_blank">common settings</a> for quick start
155
- * Download [Ad Inserter user manual](http://adinserter.pro/Ad_Inserter_User_Manual.pdf)
156
 
157
  You can also use shortcodes from other plugins (for example, to insert ads from other ad plugins like AdRotate, Advanced Ads, Quick Adsense, AdSense Plugin WP QUADS, Insert Post Ads).
158
 
@@ -197,20 +197,20 @@ Maintaining several plugins (often from different vendors) is not easy. And each
197
 
198
  **Quick Start**
199
 
200
- Few very important things you need to know in order to <a href="http://adinserter.pro/documentation#quick-start">insert code and display some ads</a>:
201
 
202
  * Completely **disable AdBlocker!** You don't need it when working with ads! Ad blockers prevent displaying ads and also block all AdSense pages!
203
- * [Code block](https://adinserter.pro/code-editing) is any code (for example for Google AdSense ads) that has to be inserted (and displayed) at some position. Each code block can be configured to insert code (or ads) at almost any position supported by Wordpress
204
  * To rename block click on the name
205
- * If you are using AdSense ads check available tools and code generator for [AdSense ads](https://adinserter.pro/adsense-ads)
206
- * Paste ad code into the code window or use <a href="https://adinserter.pro/code-editing" target="_blank">code generator</a> to generate code for banners, AdSense ads or any other HTML advert
207
- * **Enable and use at least one insertion option** (<a href="https://adinserter.pro/documentation#automatic-insertion" target="_blank">Automatic insertion</a>, Widget, <a href="https://adinserter.pro/documentation#manual" target="_blank">Shortcode</a>, PHP function call)
208
- * **Enable insertion on at least one <a href="https://adinserter.pro/page-types">Wordpress page type</a>** (Posts, Static pages, Homepage, Category pages, Search Pages, Archive pages)
209
  * For Posts and Static pages **leave default BLANK selection value** after the checkbox unless you really know what are you doing (using individual exceptions)
210
- * If you don't see inserted code block or ads, turn on **debugging functions**: Label inserted blocks, Show available positions for automatic insertion (Ad Inserter menu item in the Wordpress toolbar on the top of every post/page)
211
- * If you are using <a href="https://adinserter.pro/adsense-ads" target="_blank">AdSense ads</a> you may get blank (empty) ad blocks - no ads are displayed. This might be because there is some error in the code (wrong IDs), your Google AdSense account is not fully approved yet, your website was not accepted or your Google AdSense account is banned. In such case you can try other ad networks for contextual ads. Check <a href="https://adinserter.pro/documentation#ads-not-displayed">Ads Not Displayed</a> for more information.
212
 
213
- Few typical settings are described on the <a href="https://adinserter.pro/settings" target="_blank">Common Settings</a> page. Please make sure you have also read <a href="https://wordpress.org/plugins/ad-inserter/installation/">Installation</a> page. For more detailed instructions please read <a href="http://adinserter.pro/documentation" target="_blank">Ad Inserter documentation page</a>.
214
 
215
  **Insert Any Code Anywhere on the Page - Automate Insertion of Ads**
216
 
@@ -221,7 +221,7 @@ Few typical settings are described on the <a href="https://adinserter.pro/settin
221
  * Insertion with widgets
222
  * Insertion by placing PHP function calls or custom hooks in your theme files
223
 
224
- Ad Inserter is **the only WordPress plugin that can insert any code or ads anywhere on the page**. If standard insertions before/after post, content or paragraph can't be used, you can use advanced insertion [before/after arbitrary HTML element](https://adinserter.pro/documentation#insertion-before-after-html-element).
225
 
226
  If you can create a CSS slector for the page element (#id, .class) then you can insert ads before or after that element. By default this approach uses client-side insertion using Javascript to insert code block after the page loads.
227
 
@@ -239,7 +239,7 @@ Support the advancement of this plugin:
239
 
240
  * Write a short <a href="https://wordpress.org/support/plugin/ad-inserter/reviews/">review</a>
241
  * <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LHGZEMRTR7WB4">Donate</a> if Ad Inserter helps you to make money with ads
242
- * Buy license for [Ad Inserter Pro](http://adinserter.pro/) - Top WordPress plugin for ads
243
 
244
  == Installation ==
245
 
@@ -287,10 +287,10 @@ Ad Inserter inserts only the code you configure (blocks 1 - 16, Header, Footer).
287
  When you deactivate Ad Inserter it can't insert anything as WordPress doesn't call it. If you still see ads please clear all the caches and check page source code before you make any conclusion.
288
  Of course, if you configure code block with some javacript ad code, then this code may generate ads. But please, don't blame the plugin for this.
289
  You can also use Ad Inserter to insert code for AdSense Auto ads on each page (usually in the header). However, **the exact placement of ads will be done by the ad code, not Ad Inserter!**
290
- [https://adinserter.pro/adsense-ads#auto-ads](https://adinserter.pro/adsense-ads#auto-ads)
291
 
292
  The easiest way to check Ad Inserter code blocks or ads is to use **Label blocks** debugging function:
293
- [https://adinserter.pro/documentation#debugging](https://adinserter.pro/documentation#debugging)
294
 
295
  When you deactivate Ad Inserter it can't insert anything - WordPress doesn't call it. If you still see some ads that were inserted by Ad Inserter, make sure you have cleared all the caches.
296
  If you still see those ads after you have disabled Ad Inserter and cleared all the caches, then the ads were not inserted by Ad Inserter.
@@ -298,17 +298,18 @@ If you still see those ads after you have disabled Ad Inserter and cleared all t
298
 
299
  **Online Documentation**
300
 
301
- * [Code Editing](https://adinserter.pro/code-editing)
302
- * [Common Settings](https://adinserter.pro/settings)
303
  * [Ad Inserter Documentation](https://adinserter.pro/documentation)
304
- * [Automatic Insertion](https://adinserter.pro/documentation#automatic-insertion)
305
- * [Block Alignment and Style](https://adinserter.pro/alignments-and-styles)
306
- * [AdSense Ads](https://adinserter.pro/adsense-ads)
307
- * [WordPress Page Types](https://adinserter.pro/page-types)
308
- * [Black and White Lists](https://adinserter.pro/lists)
309
- * [Post and Page Exceptions](https://adinserter.pro/exceptions)
310
- * [Debugging](https://adinserter.pro/documentation#debugging)
311
- * [Ads not displayed](https://adinserter.pro/documentation#ads-not-displayed)
 
 
 
312
 
313
 
314
  == Frequently Asked Questions ==
@@ -321,9 +322,9 @@ If you still see those ads after you have disabled Ad Inserter and cleared all t
321
  4. Set automatic insertion option (for example: Before Post)
322
  5. Enable at least one page type (for example: Posts, some insertion options don't work on all page types)
323
  6. Save settings
324
- 7. Check also <a href="http://adinserter.pro/settings" target="_blank">common Ad Inserter settings</a>
325
  8. Check inserted code on the posts
326
- 9. Ads are not showing? Check <a href="https://adinserter.pro/documentation#ads-not-displayed" target="_blank">troubleshooting guide</a> to find out what to check to fix the problem.
327
 
328
 
329
  = Does Ad Inserter insert any internal ads? =
@@ -332,20 +333,20 @@ No revenue sharing and no such thing as "internal ads" or "our ads" on your webs
332
  Ad Inserter is free, open source plugin and inserts only the code you configure (blocks 1 - 16, Header, Footer). The code you see is the code that will be inserted. Please check page source code before you make any conclusion.
333
  Of course, if you configure code block with some javacript ad code, then this code may generate ads. But please, don't blame the plugin for this.
334
  You can also use Ad Inserter to insert code for AdSense Auto ads on each page (usually in the header). However, **the exact placement of ads will be done by the ad code, not Ad Inserter!**
335
- [https://adinserter.pro/adsense-ads#auto-ads](https://adinserter.pro/adsense-ads#auto-ads)
336
 
337
  The easiest way to check Ad Inserter code blocks is to use **Label blocks** debugging function:
338
- [https://adinserter.pro/documentation#debugging](https://adinserter.pro/documentation#debugging)
339
 
340
 
341
  = I have installed code for AdSense ads and I see ads placed at random positions. =
342
 
343
- You are probably using code for [AdSense Auto ads](https://adinserter.pro/adsense-ads#auto-ads).
344
 
345
  AdSense Auto ads (known also as Page Level Ads) is a code that you insert on every page once and it will automatically display AdSense ads on positions chosen by the code.
346
  Auto ads use Google's machine learning to pick the best placements on your pages to show ads. You only need to add one piece of code to all your pages, and let Google take care of the rest.
347
 
348
- Auto ads may not be suitable for some WordPress themes or layouts. In such cases it is easier to place ads at wanted locations by using [normal AdSense code](https://adinserter.pro/adsense-ads#ad-unit) and specifying exact locations where the code should be inserted.
349
 
350
  = I have installed code for AdSense ads but the ad blocks are blank. =
351
 
@@ -360,7 +361,7 @@ Blank AdSense ad block means that the code is inserted properly only the ad code
360
  * Errors in ad code - check or regenerate ad code
361
  * You are using ad blocker
362
 
363
- See [AdSense ads not displayed](https://adinserter.pro/adsense-ads#ads-not-displayed) for details. In such case you can try other ad networks for contextual ads. Check <a href="https://adinserter.pro/documentation#ads-not-displayed">Ads Not Displayed</a> for more information.
364
 
365
  = What is GDPR? =
366
 
@@ -386,7 +387,7 @@ PLEASE NOTE: Installing GDPR plugin alone does not make your site GDPR compliant
386
 
387
  = How to show ads based on visitor's consent? =
388
 
389
- Ad Inserter supports inserting (showing) ads based on cookies or cookie values. You can define cookie conditions by black/white-listing *Url parameters* (where also [cookies are checked](https://adinserter.pro/lists#cookies)).
390
 
391
  PLEASE NOTE: If you are using caching (very likely) you also need to set **Dynamic blocks** to **Client-side insert** (tab &#9881; / tab General) in order to check cookies in visitor's browser and not when the page is generated.
392
 
@@ -445,7 +446,7 @@ You can also try with `[adinserter data='tag']', `[adinserter data='short-title'
445
 
446
  = Settings for ads ... =
447
 
448
- Check <a href="http://adinserter.pro/settings" target="_blank">common Ad Inserter settings</a>
449
 
450
 
451
  = What PHP versions are supported? =
@@ -518,7 +519,7 @@ There are two possible approaches.
518
  3a. Click on Lists, enter post IDs (click on the button left of the list) and white-list or black-list them.
519
  3b. Click on Lists, enter url (or comma separated urls) for Urls, e.g. `/permalink-url`, and white-list or black-list it.
520
 
521
- For details check <a href="https://adinserter.pro/exceptions" target="_blank">Individual Post/Page Exceptions</a>.
522
 
523
 
524
  = I'm using responsive theme. How can I show or hide some ads on mobile devices? =
@@ -607,7 +608,7 @@ The following AMP plugins have been tested with Ad Inserter:
607
  * <a href="https://wordpress.org/plugins/wp-amp-ninja/" target="_blank">WP AMP Ninja</a> (free)
608
  * WP AMP - Accelerated Mobile Pages for WordPress (paid - you need to uncheck *Remove third-party the_content hooks for better compatibility*)
609
 
610
- For details check <a href="https://adinserter.pro/settings#amp" target="_blank">settings for ads on AMP pages</a>.
611
 
612
 
613
  = How can place ads below Read More tag? =
@@ -655,11 +656,11 @@ AD CODE RIGHT
655
 
656
  == Screenshots ==
657
 
658
- 1. Settings for one code block (Before content). Up to 16 blocks can be configured (up to 64 in <a href="http://adinserter.pro/" target="_blank">Ad Inserter Pro</a>)
659
  2. Code preview with visual CSS editor
660
  3. Code preview with visual CSS editor - highlighted code
661
  4. Post / Page Ad Inserter Individual Exceptions
662
- 5. Some <a href="http://adinserter.pro/" target="_blank">Ad Inserter Pro</a> features: IP address and country lists, Scheduling between dates with fallback
663
  6. Ad Inserter plugin settings
664
  7. Visualization of HTML tags in post
665
  8. Visualization of positions for automatic insertion in post
@@ -676,6 +677,10 @@ AD CODE RIGHT
676
 
677
  == Changelog ==
678
 
 
 
 
 
679
  = 2.3.16 =
680
  - Added option to insert block only when WP loop is currently active
681
  - Added support for Better AMP plugin
@@ -780,6 +785,10 @@ For the changelog of earlier versions, please refer to the separate changelog.tx
780
 
781
  == Upgrade Notice ==
782
 
 
 
 
 
783
  = 2.3.16 =
784
  Added option to insert block only when WP loop is currently active;
785
  Added support for Better AMP plugin;
6
  Requires at least: 4.0
7
  Tested up to: 4.9
8
  Requires PHP: 5.6
9
+ Stable tag: 2.3.16
10
  License: GPLv3
11
 
12
  Insert and manage ads: Amazon, Google AdSense ads, banner rotation, sticky widget ads, AMP, PHP, HTML, CSS, Javascript, tracking, footer, header code
47
 
48
  **Features**
49
 
50
+ * [AdSense integration](https://adinserter.pro/documentation/adsense-ads) - get ads form your AdSense account
51
+ * Syntax highlighting [editor](https://adinserter.pro/documentation/code-editing)
52
  * Code preview with visual CSS editor
53
  * Automatically inserts ads on posts and pages
54
  * Insert ads before or after post
89
  * Create rich media ads with standard WordPress TinyMCE editor
90
  * Ad blocking detection - popup message, page redirection
91
  * Desktop/mobile device detection (server-side and client-side - works with caching)
92
+ * [Black/White-list](https://adinserter.pro/documentation/black-and-white-lists) categories, tags, taxonomies, post IDs, urls, url query parameters, cookies, referers
93
  * Easy copying and pasting ads or settings using internal clipboard
94
  * Simple troubleshooting with many debugging functions
95
  * Function to visualize inserted code blocks and ads
113
 
114
  > If you're new to AdSense, one of your first tasks is to connect your site to AdSense. This requires you to copy the code on your AdSense homepage and paste it into the HTML of your page, between the `<head>` and `</head>` tags.
115
 
116
+ Check [How to insert ad code in your WordPress site](https://support.google.com/adsense/answer/7527509). Advanced users can enable [AdSense integration](https://adinserter.pro/documentation/adsense-ads#integration): import AdSense ads from the plugin settings page - no need to copy codes for AdSense ads from the AdSense admin pages. List ad units, preview AdSense ads and get ad codes where you need them.
117
 
118
  **Endorsed by Amazon**
119
 
121
 
122
  > Native Shopping Ads provide highly relevant and dynamic product recommendations in a stylishly designed and responsive ad unit that can be placed at the end of your content or within your content to create a more compelling visitor experience and shopping opportunity.
123
 
124
+ Check <a href="https://affiliate-program.amazon.com/help/topic/t405" target="_blank">Wordpress Integration Guide for Native Shopping Ads</a>. Ad Inserter supports also advanced contextual ads: check settings for <a href="https://adinserter.pro/documentation/common-settings#amazon">contextual Native Shopping Ads</a> that show ads with items related to the post content (using post tags).
125
 
126
+ And if you need more ads with page/category specific settings, ad statistics and metrics for impressions and clicks, A/B testing, lazy loading ads, sticky ads, slider ads, pop-up ads, geotargeting or geolocation to serve country-specific ads, functions to protect content from users using ad blockers, functions to serve different ads for users using ad blockers, multisite options to limit settings for ads, to block some IP addresses, to schedule ads, there is **Ad Inserter Pro** - all-in-one WordPress ad management plugin with many [advanced features](https://adinserter.pro/documentation/features):
127
 
128
  * 64 code (ad) blocks (64 different insertion configurations for ads)
129
  * Geolocation using Webnet77 or <a href="http://www.maxmind.com/" target="_blank">MaxMind</a> databases (works also with caching)
132
  * External tracking via Google Analytics or Matomo (Piwik)
133
  * A/B testing - discover ads and settings that perform best
134
  * Lazy loading ads
135
+ * [Sticky ads](https://adinserter.pro/documentation/alignments-and-styles#sticky-ads) with optional close button
136
  * Sticky sidebar ads (stick to the screen or to the content)
137
  * Floating slide-in banner ads
138
+ * [Sticky (floating) ads](https://adinserter.pro/documentation/alignments-and-styles#sticky-ads) with animations (fade, slide, turn, flip, zoom)
139
  * Animation trigger for sticky ads (page scroll in % or px, HTML element becomes visible)
140
  * Scheduling with fallback option
141
  * Ad blocking detection - replace ads, protect content
145
  * More custom viewports for client-side desktop/mobile device detection
146
  * More custom hooks for custom theme insertions
147
  * Export and import of settings
148
+ * No ads on the settings page
149
  * Support via email
150
 
151
  Run a WordPress related blog? Have experience with AdSense ads? Interested in reviewing Ad Inserter Pro? <a href="https://adinserter.pro/contact" target="_blank">Introduce yourself</a>.
152
 
153
  Ad Inserter Wordpress plugin is an advanced advertising manager for all kind of ads - it has many features and options to automate placing ads in order to optimally monetize your website on desktop, tablet and phone displays. It provides many simple ways to insert any kind of ads, Javascript, HTML, PHP or advert code anywhere on the page. For best placement of ads please read the user manual to get the most of the plugin.
154
 
155
+ Check <a href="https://adinserter.pro/documentation" target="_blank">Ad Inserter documentation pages</a> for detailed description of all the features and some <a href="https://adinserter.pro/documentation/common-settings" target="_blank">common settings</a> for quick start
 
156
 
157
  You can also use shortcodes from other plugins (for example, to insert ads from other ad plugins like AdRotate, Advanced Ads, Quick Adsense, AdSense Plugin WP QUADS, Insert Post Ads).
158
 
197
 
198
  **Quick Start**
199
 
200
+ To become familiar with the plugin check [Quick Start](https://adinserter.pro/documentation/quick-start) to display ads on your website. Few important steps:
201
 
202
  * Completely **disable AdBlocker!** You don't need it when working with ads! Ad blockers prevent displaying ads and also block all AdSense pages!
203
+ * [Code block](https://adinserter.pro/documentation/code-editing) is any code (for example for Google AdSense ads) that has to be inserted (and displayed) at some position. Each code block can be configured to insert code (or ads) at almost any position supported by Wordpress
204
  * To rename block click on the name
205
+ * If you are using AdSense ads check available tools and code generator for [AdSense ads](https://adinserter.pro/documentation/adsense-ads)
206
+ * Paste ad code into the code window or use <a href="https://adinserter.pro/documentation/code-editing" target="_blank">code generator</a> to generate code for banners, AdSense ads or any other HTML advert
207
+ * **Enable and use at least one insertion option** (<a href="https://adinserter.pro/documentation/automatic-insertion" target="_blank">Automatic insertion</a>, Widget, <a href="https://adinserter.pro/documentation/manual-insertion" target="_blank">Shortcode</a>, PHP function call)
208
+ * **Enable insertion on at least one <a href="https://adinserter.pro/documentation/wordpress-page-types">Wordpress page type</a>** (Posts, Static pages, Homepage, Category pages, Search Pages, Archive pages)
209
  * For Posts and Static pages **leave default BLANK selection value** after the checkbox unless you really know what are you doing (using individual exceptions)
210
+ * If you don't see inserted blocks or ads, turn on **debugging functions**: Label inserted blocks, Show available positions for automatic insertion (Ad Inserter menu item in the Wordpress admin toolbar on the top of every post/page when you are logged in). Check [Troubleshooting](https://adinserter.pro/documentation/troubleshooting) documentation for details.
211
+ * If you are using <a href="https://adinserter.pro/documentation/adsense-ads" target="_blank">AdSense ads</a> you may get blank (empty) ad blocks - no ads are displayed. This might happen because there is some error in the code (wrong IDs), your Google AdSense account is not fully approved yet, your website was not accepted or your Google AdSense account is banned. In such case you can try other ad networks for contextual ads. Check <a href="https://adinserter.pro/documentation/adsense-ads#ads-not-displayed">Ads Not Displayed</a> for more information.
212
 
213
+ Few typical settings are described on the <a href="https://adinserter.pro/documentation/common-settings" target="_blank">Common Settings</a> page. Please make sure you have also read <a href="https://adinserter.pro/documentation/plugin-installation">plugin installation</a> documentation. For more detailed instructions please read <a href="https://adinserter.pro/documentation" target="_blank">Ad Inserter documentation pages</a>.
214
 
215
  **Insert Any Code Anywhere on the Page - Automate Insertion of Ads**
216
 
221
  * Insertion with widgets
222
  * Insertion by placing PHP function calls or custom hooks in your theme files
223
 
224
+ Ad Inserter is **the only WordPress plugin that can insert any code or ads anywhere on the page**. If standard insertions before/after post, content or paragraph can't be used, you can use advanced insertion [before/after arbitrary HTML element](https://adinserter.pro/documentation/automatic-insertion#before-after-html-element).
225
 
226
  If you can create a CSS slector for the page element (#id, .class) then you can insert ads before or after that element. By default this approach uses client-side insertion using Javascript to insert code block after the page loads.
227
 
239
 
240
  * Write a short <a href="https://wordpress.org/support/plugin/ad-inserter/reviews/">review</a>
241
  * <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LHGZEMRTR7WB4">Donate</a> if Ad Inserter helps you to make money with ads
242
+ * Buy license for [Ad Inserter Pro](https://adinserter.pro/) - Top WordPress plugin for ads
243
 
244
  == Installation ==
245
 
287
  When you deactivate Ad Inserter it can't insert anything as WordPress doesn't call it. If you still see ads please clear all the caches and check page source code before you make any conclusion.
288
  Of course, if you configure code block with some javacript ad code, then this code may generate ads. But please, don't blame the plugin for this.
289
  You can also use Ad Inserter to insert code for AdSense Auto ads on each page (usually in the header). However, **the exact placement of ads will be done by the ad code, not Ad Inserter!**
290
+ [https://adinserter.pro/documentation/adsense-ads#auto-ads](https://adinserter.pro/documentation/adsense-ads#auto-ads)
291
 
292
  The easiest way to check Ad Inserter code blocks or ads is to use **Label blocks** debugging function:
293
+ [https://adinserter.pro/documentation/debugging](https://adinserter.pro/documentation/debugging)
294
 
295
  When you deactivate Ad Inserter it can't insert anything - WordPress doesn't call it. If you still see some ads that were inserted by Ad Inserter, make sure you have cleared all the caches.
296
  If you still see those ads after you have disabled Ad Inserter and cleared all the caches, then the ads were not inserted by Ad Inserter.
298
 
299
  **Online Documentation**
300
 
 
 
301
  * [Ad Inserter Documentation](https://adinserter.pro/documentation)
302
+ * [Ads not displayed](https://adinserter.pro/documentation/troubleshooting#ads-not-displayed)
303
+ * [Troubleshooting](https://adinserter.pro/documentation/troubleshooting)
304
+ * [Code Editing](https://adinserter.pro/documentation/code-editing)
305
+ * [Common Settings](https://adinserter.pro/documentation/common-settings)
306
+ * [Automatic Insertion](https://adinserter.pro/documentation/automatic-insertion)
307
+ * [Block Alignment and Style](https://adinserter.pro/documentation/alignments-and-styles)
308
+ * [AdSense Ads](https://adinserter.pro/documentation/adsense-ads)
309
+ * [WordPress Page Types](https://adinserter.pro/documentation/wordpress-page-types)
310
+ * [Black and White Lists](https://adinserter.pro/documentation/black-and-white-lists)
311
+ * [Post and Page Exceptions](https://adinserter.pro/documentation/individual-post-and-page-exceptions)
312
+ * [Debugging](https://adinserter.pro/documentation/debugging)
313
 
314
 
315
  == Frequently Asked Questions ==
322
  4. Set automatic insertion option (for example: Before Post)
323
  5. Enable at least one page type (for example: Posts, some insertion options don't work on all page types)
324
  6. Save settings
325
+ 7. Check also <a href="https://adinserter.pro/documentation/common-settings" target="_blank">common Ad Inserter settings</a>
326
  8. Check inserted code on the posts
327
+ 9. Ads are not showing? Check <a href="https://adinserter.pro/documentation/troubleshooting#ads-not-displayed" target="_blank">troubleshooting guide</a> to find out what to check to fix the problem.
328
 
329
 
330
  = Does Ad Inserter insert any internal ads? =
333
  Ad Inserter is free, open source plugin and inserts only the code you configure (blocks 1 - 16, Header, Footer). The code you see is the code that will be inserted. Please check page source code before you make any conclusion.
334
  Of course, if you configure code block with some javacript ad code, then this code may generate ads. But please, don't blame the plugin for this.
335
  You can also use Ad Inserter to insert code for AdSense Auto ads on each page (usually in the header). However, **the exact placement of ads will be done by the ad code, not Ad Inserter!**
336
+ [https://adinserter.pro/documentation/adsense-ads#auto-ads](https://adinserter.pro/documentation/adsense-ads#auto-ads)
337
 
338
  The easiest way to check Ad Inserter code blocks is to use **Label blocks** debugging function:
339
+ [https://adinserter.pro/documentation/debugging](https://adinserter.pro/documentation/debugging)
340
 
341
 
342
  = I have installed code for AdSense ads and I see ads placed at random positions. =
343
 
344
+ You are probably using code for [AdSense Auto ads](https://adinserter.pro/documentation/adsense-ads#auto-ads).
345
 
346
  AdSense Auto ads (known also as Page Level Ads) is a code that you insert on every page once and it will automatically display AdSense ads on positions chosen by the code.
347
  Auto ads use Google's machine learning to pick the best placements on your pages to show ads. You only need to add one piece of code to all your pages, and let Google take care of the rest.
348
 
349
+ Auto ads may not be suitable for some WordPress themes or layouts. In such cases it is easier to place ads at wanted locations by using [normal AdSense code](https://adinserter.pro/documentation/adsense-ads#ad-unit) and specifying exact locations where the code should be inserted.
350
 
351
  = I have installed code for AdSense ads but the ad blocks are blank. =
352
 
361
  * Errors in ad code - check or regenerate ad code
362
  * You are using ad blocker
363
 
364
+ In such case you can try other ad networks for contextual ads. Check <a href="https://adinserter.pro/documentation/troubleshooting#ads-not-displayed">Ads Not Displayed</a> for more information.
365
 
366
  = What is GDPR? =
367
 
387
 
388
  = How to show ads based on visitor's consent? =
389
 
390
+ Ad Inserter supports inserting (showing) ads based on cookies or cookie values. You can define cookie conditions by black/white-listing *Url parameters* (where also [cookies are checked](https://adinserter.pro/documentation/black-and-white-lists#cookies)).
391
 
392
  PLEASE NOTE: If you are using caching (very likely) you also need to set **Dynamic blocks** to **Client-side insert** (tab &#9881; / tab General) in order to check cookies in visitor's browser and not when the page is generated.
393
 
446
 
447
  = Settings for ads ... =
448
 
449
+ Check <a href="https://adinserter.pro/documentation/common-settings" target="_blank">common Ad Inserter settings</a>
450
 
451
 
452
  = What PHP versions are supported? =
519
  3a. Click on Lists, enter post IDs (click on the button left of the list) and white-list or black-list them.
520
  3b. Click on Lists, enter url (or comma separated urls) for Urls, e.g. `/permalink-url`, and white-list or black-list it.
521
 
522
+ For details check <a href="https://adinserter.pro/documentation/individual-post-and-page-exceptions" target="_blank">Individual Post/Page Exceptions</a>.
523
 
524
 
525
  = I'm using responsive theme. How can I show or hide some ads on mobile devices? =
608
  * <a href="https://wordpress.org/plugins/wp-amp-ninja/" target="_blank">WP AMP Ninja</a> (free)
609
  * WP AMP - Accelerated Mobile Pages for WordPress (paid - you need to uncheck *Remove third-party the_content hooks for better compatibility*)
610
 
611
+ For details check <a href="https://adinserter.pro/documentation/amp-pages" target="_blank">settings for ads on AMP pages</a>.
612
 
613
 
614
  = How can place ads below Read More tag? =
656
 
657
  == Screenshots ==
658
 
659
+ 1. Settings for one code block (Before content). Up to 16 blocks can be configured (up to 64 in <a href="https://adinserter.pro/" target="_blank">Ad Inserter Pro</a>)
660
  2. Code preview with visual CSS editor
661
  3. Code preview with visual CSS editor - highlighted code
662
  4. Post / Page Ad Inserter Individual Exceptions
663
+ 5. Some <a href="https://adinserter.pro/" target="_blank">Ad Inserter Pro</a> features: IP address and country lists, Scheduling between dates with fallback
664
  6. Ad Inserter plugin settings
665
  7. Visualization of HTML tags in post
666
  8. Visualization of positions for automatic insertion in post
677
 
678
  == Changelog ==
679
 
680
+ = 2.3.17 =
681
+ - Added shortcode for ad blocking detection action
682
+ - Few minor bug fixes, cosmetic changes and code improvements
683
+
684
  = 2.3.16 =
685
  - Added option to insert block only when WP loop is currently active
686
  - Added support for Better AMP plugin
785
 
786
  == Upgrade Notice ==
787
 
788
+ = 2.3.17 =
789
+ Added shortcode for ad blocking detection action;
790
+ Few minor bug fixes, cosmetic changes and code improvements
791
+
792
  = 2.3.16 =
793
  Added option to insert block only when WP loop is currently active;
794
  Added support for Better AMP plugin;
settings.php CHANGED
@@ -2033,7 +2033,7 @@ function generate_settings_form (){
2033
  Ad label
2034
  </td>
2035
  <td>
2036
- <input type="text" name="ad-label" style="width: 100%;" value="<?php echo get_ad_label (); ?>" default="<?php echo DEFAULT_AD_TITLE; ?>" size="60" maxlength="500" />
2037
  </td>
2038
  </tr>
2039
  <tr>
@@ -3582,6 +3582,7 @@ function sidebar_pro () {
3582
  <li><a href="http://adinserter.pro/documentation#visualization" class="simple-link" target="_blank">Visualization</a> of available positions for automatic ad insertion</li>
3583
  <li><a href="http://adinserter.pro/documentation#visualization" class="simple-link" target="_blank">Visualization</a> of HTML tags for easier ad placement between paragraphs</li>
3584
  <li><a href="https://adinserter.pro/code-editing#clipboard" class="simple-link" target="_blank">Clipboard support</a> to easily copy code blocks or settings</li>
 
3585
  <li>Support via email</li>
3586
  </ul>
3587
 
2033
  Ad label
2034
  </td>
2035
  <td>
2036
+ <input type="text" name="ad-label" style="width: 100%;" value="<?php echo get_ad_label (); ?>" default="<?php echo DEFAULT_AD_TITLE; ?>" title="Label text or HTML code" size="60" maxlength="500" />
2037
  </td>
2038
  </tr>
2039
  <tr>
3582
  <li><a href="http://adinserter.pro/documentation#visualization" class="simple-link" target="_blank">Visualization</a> of available positions for automatic ad insertion</li>
3583
  <li><a href="http://adinserter.pro/documentation#visualization" class="simple-link" target="_blank">Visualization</a> of HTML tags for easier ad placement between paragraphs</li>
3584
  <li><a href="https://adinserter.pro/code-editing#clipboard" class="simple-link" target="_blank">Clipboard support</a> to easily copy code blocks or settings</li>
3585
+ <li>No ads on the settings page</li>
3586
  <li>Support via email</li>
3587
  </ul>
3588