Version Description
- Added support for Ad Inserter menu position
- Added support for random paragraph ranges
- Added support for default waiting time for user interaction (Pro only)
- Improved front-end code
- Few minor bug fixes, cosmetic changes and code improvements
Download this release
Release Info
Developer | spacetime |
Plugin | Ad Inserter – WordPress Ads Management with AdSense Header Integration |
Version | 2.7.21 |
Comparing to | |
See all releases |
Code changes from version 2.7.20 to 2.7.21
- ad-inserter.php +231 -91
- changelog.txt +188 -0
- class.php +281 -8
- constants.php +10 -2
- css/ai-settings.css +1 -1
- includes/js/ai-adb-data.js +35 -0
- includes/js/ai-adb-data.min.js +4 -0
- includes/js/ai-adb-try.js +3 -4
- includes/js/ai-adb-try.min.js +1 -1
- includes/js/ai-adb.js +601 -217
- includes/js/ai-adb.min.js +27 -27
- includes/js/ai-adb.q.js +946 -0
- includes/js/ai-adb.q.min.js +25 -0
- includes/js/ai-ads-data.js +4 -0
- includes/js/ai-ads-data.min.js +1 -0
- includes/js/ai-ads.js +30 -26
- includes/js/ai-ads.min.js +28 -1
- includes/js/{ai-ads.jq.js → ai-ads.q.js} +20 -20
- includes/js/{ai-ads.jq.min.js → ai-ads.q.min.js} +4 -4
- includes/js/ai-auto-ads.js +4 -0
- includes/js/ai-auto-ads.min.js +1 -1
- includes/js/{ai-auto-ads.jq.js → ai-auto-ads.q.js} +0 -0
- includes/js/{ai-auto-ads.jq.min.js → ai-auto-ads.q.min.js} +0 -0
- includes/js/ai-cookie-data.js +2 -0
- includes/js/ai-cookie-data.min.js +1 -0
- includes/js/ai-cookie.js +12 -3
- includes/js/ai-cookie.min.js +14 -16
- includes/js/ai-filter-data.js +5 -0
- includes/js/ai-filter-data.min.js +1 -0
- includes/js/ai-filter.js +263 -61
- includes/js/ai-filter.min.js +33 -9
- includes/js/ai-filter.q.js +248 -0
- includes/js/ai-filter.q.min.js +9 -0
- includes/js/ai-insert.js +76 -50
- includes/js/ai-insert.min.js +24 -25
- includes/js/ai-insert.q.js +921 -0
- includes/js/ai-insert.q.min.js +25 -0
- includes/js/ai-lists.js +1 -1
- includes/js/ai-mobile-detect.js +52 -91
- includes/js/ai-mobile-detect.min.js +2 -52
- includes/js/ai-wait-functions.js +15 -0
- includes/js/ai-wait-functions.min.js +1 -0
- includes/preview.php +6 -3
- js/ad-inserter.js +3 -2
- js/ad-inserter.min.js +3 -3
- js/ai-functions.js +6267 -0
- js/ai-functions.min.js +180 -0
- languages/ad-inserter-es_ES.mo +0 -0
- languages/ad-inserter-es_ES.po +1040 -687
ad-inserter.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
/*
|
4 |
Plugin Name: Ad Inserter
|
5 |
-
Version: 2.7.
|
6 |
Description: Ad management with many advanced advertising features to insert ads at optimal positions
|
7 |
Author: Igor Funa
|
8 |
Author URI: http://igorfuna.com/
|
@@ -17,7 +17,14 @@ Requires PHP: 5.6
|
|
17 |
|
18 |
Change Log
|
19 |
|
20 |
-
Ad Inserter 2.7.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
- Fix for front-end translation
|
22 |
|
23 |
Ad Inserter 2.7.19 - 2022-09-16
|
@@ -1470,7 +1477,10 @@ function ai_wp_hook () {
|
|
1470 |
|
1471 |
ai_http_header ();
|
1472 |
|
1473 |
-
|
|
|
|
|
|
|
1474 |
|
1475 |
if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 && get_disable_caching ()) ai_disable_caching ();
|
1476 |
|
@@ -1935,8 +1945,22 @@ function ai_admin_menu_hook () {
|
|
1935 |
|
1936 |
if (is_multisite() && !is_main_site () && !multisite_settings_page_enabled ()) return;
|
1937 |
|
1938 |
-
|
1939 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1940 |
add_action ('admin_enqueue_scripts', 'ai_admin_enqueue_scripts');
|
1941 |
add_action ('admin_enqueue_scripts', 'ai_admin_enqueue_scripts_late', 99999);
|
1942 |
add_action ('admin_enqueue_scripts', 'ai_admin_remove_scripts', 99999);
|
@@ -2354,12 +2378,12 @@ function add_head_inline_styles () {
|
|
2354 |
function ai_get_js ($js_name, $replace_js_data = true) {
|
2355 |
global $ai_wp_data;
|
2356 |
|
2357 |
-
$jq_js_name = $js_name . '.
|
2358 |
if (!$ai_wp_data [AI_NO_JQUERY_CODE] && file_exists (AD_INSERTER_PLUGIN_DIR."includes/js/{$jq_js_name}.js")) {
|
2359 |
$js_name = $jq_js_name;
|
2360 |
}
|
2361 |
|
2362 |
-
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING]) {
|
2363 |
$script = @file_get_contents (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.js");
|
2364 |
} else $script = @file_get_contents (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.min.js");
|
2365 |
|
@@ -2487,9 +2511,8 @@ function ai_replace_js_data ($js) {
|
|
2487 |
$basic_adb_message_css = str_replace ('pointer', 'no-drop', $basic_adb_message_css);
|
2488 |
}
|
2489 |
|
2490 |
-
// $
|
2491 |
-
|
2492 |
-
$overlay_code = "jQuery ('<".$overlay_tag.">', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 1110002, 9914998)) . ai_randomize_properties (get_overlay_css ())) . "')}})";
|
2493 |
|
2494 |
for ($level = 1; $level <= 5; $level ++) {
|
2495 |
switch (rand (1, 10)) {
|
@@ -2508,27 +2531,36 @@ function ai_replace_js_data ($js) {
|
|
2508 |
continue 2;
|
2509 |
}
|
2510 |
|
2511 |
-
// $overlay_code .= ".append (jQuery ('<div>')).append (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("
|
2512 |
-
$overlay_code .= "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2513 |
|
2514 |
-
$overlay_code
|
|
|
2515 |
|
2516 |
-
// if (rand (1, 10) > 5) $overlay_code .= ".
|
2517 |
-
if (rand (1, 10) > 5) $overlay_code .= ".
|
2518 |
-
if (rand (1, 10) > 5) $overlay_code .= ".append (jQuery ('<div>'))";
|
2519 |
-
// if (rand (1, 10) > 5) $overlay_code .= ".prepend (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("'", "\r", "\n"), array ("\'", '', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))";
|
2520 |
-
if (rand (1, 10) > 5) $overlay_code .= ".prepend (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))";
|
2521 |
-
if (rand (1, 10) > 5) $overlay_code .= ".prepend (jQuery ('<div>'))";
|
2522 |
}
|
2523 |
|
|
|
|
|
2524 |
$js = str_replace ('AI_ADB_OVERLAY_WINDOW', $overlay_code, $js);
|
2525 |
|
2526 |
-
// $js = str_replace ('AI_ADB_MESSAGE_WINDOW', "jQuery ('<div>', {attr: {'id': 'ai-adb-message', 'style': b64d ('" . base64_encode (str_replace (array ("'", "\r", "\n"), array ("\'", '', ''), $basic_adb_message_css) . get_message_css ()) . "')}, 'html': b64d ('" .
|
2527 |
-
// $message_code = "jQuery ('<".$message_tag.">', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("'", "\r", "\n"), array ("\'", '', ''), ai_randomize_properties ($basic_adb_message_css, 96610999, 99919998)) . ai_randomize_properties (get_message_css ())) . "')}, 'html': b64d ('" .
|
2528 |
$message_code = "jQuery ('<".$message_tag.">', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 96610999, 99919998)) . ai_randomize_properties (get_message_css ())) . "')}, 'html': b64d ('" .
|
2529 |
-
// base64_encode (str_replace (array ("'", "\r", "\n"), array ("\'", '', ''), do_shortcode ($adb->ai_getCode ()))) . "')})"; // No need to escape '
|
2530 |
base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))) . "')})";
|
2531 |
|
|
|
|
|
|
|
2532 |
for ($level = 1; $level <= 5; $level ++) {
|
2533 |
switch (rand (1, 10)) {
|
2534 |
case 1:
|
@@ -2548,23 +2580,35 @@ function ai_replace_js_data ($js) {
|
|
2548 |
continue 2;
|
2549 |
}
|
2550 |
|
2551 |
-
// $message_code .= ".append (jQuery ('<p>')).append (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("
|
2552 |
-
$message_code .= "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2553 |
|
2554 |
-
$message_code
|
2555 |
-
|
2556 |
-
|
2557 |
-
if (rand (1, 10) > 7) $message_code .= ".
|
2558 |
-
|
2559 |
-
|
2560 |
-
if (rand (1, 10) > 7) $message_code .= ".prepend (jQuery ('<p>'))";
|
2561 |
-
if (rand (1, 10) >
|
|
|
|
|
|
|
2562 |
}
|
2563 |
|
|
|
|
|
2564 |
$js = str_replace ('AI_ADB_MESSAGE_WINDOW', $message_code, $js);
|
2565 |
|
2566 |
// $js = str_replace ('AI_ADB_MSG_HTML', base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))), $js);
|
2567 |
-
$js = str_replace ('AI_ADB_MSG_HTML', str_replace (array ("\r", "\n", '"'), array ('', '', '"'), do_shortcode ($adb->ai_getCode ())), $js);
|
2568 |
// $js = str_replace ('AI_ADB_MSG_STYLE', base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 100000, 9999999) . ai_randomize_properties (get_message_css ()))), $js);
|
2569 |
$js = str_replace ('AI_ADB_MSG_STYLE', str_replace (array ("\r", "\n", '"'), array ('', '', '"'), ai_randomize_properties ($basic_adb_message_css, 100000, 9999999) . ai_randomize_properties (get_message_css ())), $js);
|
2570 |
|
@@ -2683,14 +2727,16 @@ function ai_replace_js_data ($js) {
|
|
2683 |
}
|
2684 |
|
2685 |
// $js = str_replace ('AI_ADB_HTML', base64_encode ($js_code_1.$js_code_2.$js_code_3), $js);
|
2686 |
-
$js = str_replace ('var AI_ADB_HTML=1;', $js_code_1.$js_code_2.$js_code_3, $js);
|
|
|
2687 |
|
2688 |
$body_js_code = '';
|
2689 |
if (rand (1, 10) > 5) $body_js_code .= 'document.body.style.background = "rgba('.rand (11, 35).', '.rand (11, 35).', '.rand (11, 35).', '.(rand (60, 90)/100).')";';
|
2690 |
if (rand (1, 10) > 6) $body_js_code .= 'document.body.style.backgroundColor = "rgba('.rand (21, 45).', '.rand (21, 45).', '.rand (21, 45).', '.(rand (60, 90)/100).')";';
|
2691 |
-
if (rand (1, 10) > 6) $body_js_code .= 'document.body.style.margin = "'.rand (400, 4345).'px"';
|
2692 |
|
2693 |
-
$js = str_replace ('var AI_ADB_HTML=2;', $body_js_code, $js);
|
|
|
2694 |
|
2695 |
$js = str_replace ('AI_ADB_SELECTORS', get_adb_selectors (true), $js);
|
2696 |
|
@@ -2700,19 +2746,34 @@ function ai_replace_js_data ($js) {
|
|
2700 |
|
2701 |
if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0) {
|
2702 |
// translators: AD BLOCKING DETECTED, PAGE VIEWS: n - NO ACTION
|
2703 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED, PAGE VIEWS', 'ad-inserter') . '" + ": " + window.ai_d1 + " - " + "' . __('NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
2704 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED, COOKIE DETECTED - NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
2705 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED - ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
2706 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING NOT DETECTED', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-off"))', $js);
|
2707 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTION COOKIES DELETED', 'ad-inserter') . '"))', $js);
|
2708 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED - NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2709 |
} else {
|
2710 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '(0)', $js);
|
2711 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '(0)', $js);
|
2712 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '(0)', $js);
|
2713 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '(0)', $js);
|
2714 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '(0)', $js);
|
2715 |
-
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '(0)', $js);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2716 |
}
|
2717 |
}
|
2718 |
}
|
@@ -2803,7 +2864,13 @@ function ai_adb_external_scripts () {
|
|
2803 |
$code .= '<object id="ai-adb-ga" data="https://www.google-analytics.com/analytics.js" style="position:absolute; z-index: -100; top: -1000px; left: -1000px; visibility: hidden;"></object>' . "\n";
|
2804 |
}
|
2805 |
if (!defined ('AI_ADB_NO_MEDIA_NET')) {
|
2806 |
-
$code .= '<object id="ai-adb-mn" data="//contextual.media.net/dmedianet.js" style="position:absolute; z-index: -100;
|
|
|
|
|
|
|
|
|
|
|
|
|
2807 |
}
|
2808 |
|
2809 |
return $code;
|
@@ -2869,11 +2936,13 @@ function add_footer_inline_scripts () {
|
|
2869 |
// Use updated flags
|
2870 |
ai_set_footer_inline_scripts ();
|
2871 |
|
|
|
|
|
2872 |
if ($ai_wp_data [AI_FOOTER_INLINE_SCRIPTS]) {
|
2873 |
echo "<script>\n";
|
2874 |
|
2875 |
$client_side_dynamic_blocks = get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW || get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT;
|
2876 |
-
$wait_for_jquery = get_wait_for_jquery () && !$ai_wp_data [AI_WP_AMP_PAGE]
|
2877 |
|
2878 |
ob_start ();
|
2879 |
|
@@ -2894,11 +2963,11 @@ function add_footer_inline_scripts () {
|
|
2894 |
$ai_wp_data [AI_CLIENT_SIDE_INSERTION] ||
|
2895 |
isset ($ai_wp_data [AI_CLIENT_SIDE_ROTATION]) ||
|
2896 |
$ai_wp_data [AI_CLIENT_SIDE_DETECTION] ||
|
2897 |
-
($ai_wp_data [AI_CLOSE_BUTTONS] && !$ai_wp_data [AI_CODE_FOR_IFRAME]) ||
|
2898 |
$ai_wp_data [AI_PARALLAX] ||
|
2899 |
-
$ai_wp_data [AI_CHECK_BLOCK] ||
|
2900 |
$ai_wp_data [AI_LAZY_LOADING] ||
|
2901 |
-
($ai_wp_data [AI_TRACKING] && !isset ($ai_wp_data [AI_TRACKING_SHORTCODE_DISABLED])) ||
|
2902 |
$adb_code
|
2903 |
) {
|
2904 |
echo ai_get_js ('ai-base64');
|
@@ -2923,8 +2992,10 @@ function add_footer_inline_scripts () {
|
|
2923 |
}
|
2924 |
|
2925 |
if ($ai_wp_data [AI_STICKY_WIDGETS] && get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_JS) {
|
2926 |
-
|
2927 |
-
|
|
|
|
|
2928 |
}
|
2929 |
|
2930 |
if ($ai_wp_data [AI_STICKY_WIDGETS] && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
@@ -2938,15 +3009,23 @@ function add_footer_inline_scripts () {
|
|
2938 |
$client_side_dynamic_blocks ||
|
2939 |
$ai_wp_data [AI_CLIENT_SIDE_DETECTION] ||
|
2940 |
$ai_wp_data [AI_CLIENT_SIDE_INSERTION]) {
|
2941 |
-
echo ai_get_js ('ai-cookie');
|
|
|
|
|
|
|
2942 |
}
|
2943 |
|
2944 |
if ($ai_wp_data [AI_CLIENT_SIDE_FILTER_CHECKS]) {
|
2945 |
-
echo ai_get_js ('ai-filter');
|
|
|
|
|
|
|
2946 |
}
|
2947 |
|
2948 |
if (($ai_wp_data [AI_CLIENT_SIDE_INSERTION] || $ai_wp_data [AI_CHECK_BLOCK])) {
|
2949 |
-
|
|
|
|
|
2950 |
}
|
2951 |
|
2952 |
if (function_exists ('add_footer_inline_scripts_2') && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
@@ -2970,14 +3049,16 @@ function add_footer_inline_scripts () {
|
|
2970 |
}
|
2971 |
// VIEWPORT separators or CHECK viewport
|
2972 |
if ($client_side_dynamic_blocks || $ai_wp_data [AI_CLIENT_SIDE_DETECTION] || $ai_wp_data [AI_CLIENT_SIDE_INSERTION] || $adb_code) {
|
2973 |
-
|
2974 |
echo ai_get_js ('ai-mobile-detect');
|
2975 |
-
|
2976 |
echo ai_get_js ('ai-lists');
|
2977 |
}
|
2978 |
|
2979 |
if ($ai_wp_data [AI_CLOSE_BUTTONS] && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
2980 |
-
|
|
|
|
|
2981 |
}
|
2982 |
|
2983 |
if ($ai_wp_data [AI_HTML_ELEMENT_SELECTION]) {
|
@@ -2986,14 +3067,21 @@ function add_footer_inline_scripts () {
|
|
2986 |
|
2987 |
if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0) {
|
2988 |
if (defined ('AI_ADSENSE_OVERLAY') && !(isset ($_GET ["hide-debug-labels"]) && $_GET ["hide-debug-labels"] == 1)) {
|
2989 |
-
echo ai_get_js ('ai-ads');
|
|
|
|
|
|
|
|
|
2990 |
}
|
2991 |
-
|
2992 |
-
echo ai_get_js ('ai-auto-ads', false);
|
2993 |
}
|
2994 |
|
|
|
2995 |
if ($adb_code) {
|
2996 |
-
if (!function_exists ('add_footer_inline_scripts_2'))
|
|
|
|
|
|
|
|
|
2997 |
}
|
2998 |
|
2999 |
if (function_exists ('add_footer_inline_scripts_2')) {
|
@@ -3007,14 +3095,14 @@ function add_footer_inline_scripts () {
|
|
3007 |
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING]) {
|
3008 |
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] = " var ai_debug = typeof ai_debugging !== 'undefined';
|
3009 |
if (typeof ai_debugging !== 'undefined') console.log ('AI DOM READY JS CODE RUN');
|
3010 |
-
" . $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] . "
|
3011 |
";
|
3012 |
}
|
3013 |
|
3014 |
echo ai_js_dom_ready ("\n".$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY], false);
|
3015 |
}
|
3016 |
|
3017 |
-
echo ("\nai_js_code = true
|
3018 |
|
3019 |
// Wait for jQuery - for iframe pages it is always loaded
|
3020 |
if ($wait_for_jquery && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
@@ -3044,18 +3132,18 @@ function add_footer_inline_scripts () {
|
|
3044 |
$footer_js_code = check_footer_inline_scripts ($footer_js_code);
|
3045 |
}
|
3046 |
|
3047 |
-
// if ($adb_code) {
|
3048 |
-
// $footer_js_code = str_replace ('ai_ajax', '[[ai-ajax]]', $footer_js_code);
|
3049 |
-
// $footer_js_code = ai_replace_prefix ($footer_js_code);
|
3050 |
-
// $footer_js_code = str_replace ('[[ai-ajax]]', 'ai_ajax', $footer_js_code);
|
3051 |
-
// }
|
3052 |
-
|
3053 |
-
// $footer_js_code = str_replace ('[[ai-adb-try]]', ai_get_js ('ai-adb-try'), $footer_js_code);
|
3054 |
-
|
3055 |
echo $footer_js_code;
|
3056 |
|
3057 |
echo "\n</script>\n";
|
3058 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3059 |
}
|
3060 |
|
3061 |
function ai_admin_notice_hook () {
|
@@ -3683,7 +3771,7 @@ function ai_wp_head_hook () {
|
|
3683 |
} else $code_for_insertion = '';
|
3684 |
|
3685 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_code_debug_block (' ' . $block_name, '', __('Code for insertion', 'ad-inserter') . ' ' . strlen ($code_for_insertion) . ' ' . _n('character', 'characters', strlen ($code_for_insertion), 'ad-inserter') . ' ', $obj->ai_getCode (), $code_for_insertion, true) . "\");
|
3686 |
-
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "
|
3687 |
|
3688 |
";
|
3689 |
}
|
@@ -3693,15 +3781,19 @@ function ai_wp_head_hook () {
|
|
3693 |
echo "<script>\n", ai_get_js ('ai-iframes', false), "</script>\n";
|
3694 |
}
|
3695 |
|
|
|
|
|
|
|
|
|
3696 |
if (!get_disable_js_code () && ($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0) {
|
3697 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= ' setTimeout (function(){jQuery(\'body\').prepend ("' . get_page_type_debug_info () . '");}, 1);
|
3698 |
-
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= '
|
3699 |
';
|
3700 |
}
|
3701 |
|
3702 |
if (!get_disable_header_code () && isset ($_GET ['ai-debug-code']) && !defined ('AI_DEBUGGING_DEMO')) {
|
3703 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_code_debug_block (' ' . __('Header code', 'ad-inserter') . ' ' . ($header->get_enable_manual () ? '' : ' ' . _x('DISABLED', 'Header code', 'ad-inserter')), '<head>...</head>', strlen ($header_code) . ' ' . _n('character inserted', 'characters inserted', strlen ($header_code), 'ad-inserter') . ' ', $header->ai_getCode (), $header_code, true) . "\");
|
3704 |
-
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "
|
3705 |
";
|
3706 |
}
|
3707 |
}
|
@@ -3714,19 +3806,19 @@ function ai_wp_head_hook () {
|
|
3714 |
// No scripts on AMP pages
|
3715 |
if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0 && $ai_wp_data [AI_ADB_DETECTION]) {
|
3716 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_adb_status_debug_info () . "\");
|
3717 |
-
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "
|
3718 |
";
|
3719 |
}
|
3720 |
}
|
3721 |
|
3722 |
if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_BLOCKS)) != 0) {
|
3723 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"<section id='ai-iab-tcf-bar' class='".AI_DEBUG_STATUS_CLASS."' style='cursor: pointer; display: none;' title='". __('Click to delete the cookie for the consents', 'ad-inserter') ."'><span id='ai-iab-tcf-status'>IAB TCF 2.0</span></section>\");
|
3724 |
-
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "
|
3725 |
";
|
3726 |
|
3727 |
if (!$ai_wp_data [AI_UNFILTERED_HTML]) {
|
3728 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"<section class='".AI_DEBUG_STATUS_CLASS." status-error'>".__('UNFILTERED HTML DISABLED', 'ad-inserter')."</section>\");
|
3729 |
-
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "
|
3730 |
";
|
3731 |
}
|
3732 |
}
|
@@ -4211,7 +4303,12 @@ function ai_write_debug_info ($write_processing_log = false) {
|
|
4211 |
echo " (get_the_ID: ", get_the_ID (), ", get_queried_object: ", $queried_object_id, ")";
|
4212 |
echo "\n";
|
4213 |
echo 'POST TYPE: ', get_post_type (), "\n";
|
4214 |
-
echo 'AUTHOR: ', strtolower (get_the_author_meta ('user_login')), "\n";
|
|
|
|
|
|
|
|
|
|
|
4215 |
|
4216 |
$category_data = get_the_category();
|
4217 |
$categories = array ();
|
@@ -4809,7 +4906,7 @@ function ai_write_debug_info ($write_processing_log = false) {
|
|
4809 |
echo 'DISALLOW_FILE_EDIT: ', defined ('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT ? 'SET' : "NO", "\n";
|
4810 |
echo 'DISALLOW_FILE_MODS: ', defined ('DISALLOW_FILE_MODS') && DISALLOW_FILE_MODS ? 'SET' : "NO", "\n";
|
4811 |
echo 'DISALLOW_UNFILTERED_HTML:', defined ('DISALLOW_UNFILTERED_HTML') && DISALLOW_UNFILTERED_HTML ? 'SET' : "NO", "\n";
|
4812 |
-
echo 'AI_NO_ADSENSE_API:
|
4813 |
|
4814 |
echo "\n";
|
4815 |
|
@@ -4983,6 +5080,7 @@ function ai_check_plugin_options ($plugin_options = array ()) {
|
|
4983 |
if (!isset ($plugin_options ['PARAGRAPH_COUNTING_FUNCTIONS'])) $plugin_options ['PARAGRAPH_COUNTING_FUNCTIONS'] = DEFAULT_PARAGRAPH_COUNTING_FUNCTIONS;
|
4984 |
if (!isset ($plugin_options ['OUTPUT_BUFFERING'])) $plugin_options ['OUTPUT_BUFFERING'] = DEFAULT_OUTPUT_BUFFERING;
|
4985 |
if (!isset ($plugin_options ['DISABLE_CACHING'])) $plugin_options ['DISABLE_CACHING'] = DEFAULT_DISABLE_CACHING;
|
|
|
4986 |
if (!isset ($plugin_options ['WAIT_FOR_JQUERY'])) $plugin_options ['WAIT_FOR_JQUERY'] = DEFAULT_WAIT_FOR_JQUERY;
|
4987 |
if (!isset ($plugin_options ['NO_PARAGRAPH_COUNTING_INSIDE'])) $plugin_options ['NO_PARAGRAPH_COUNTING_INSIDE'] = DEFAULT_NO_PARAGRAPH_COUNTING_INSIDE;
|
4988 |
if (!isset ($plugin_options ['AD_LABEL'])) $plugin_options ['AD_LABEL'] = DEFAULT_AD_TITLE;
|
@@ -5417,6 +5515,14 @@ function get_output_buffering(){
|
|
5417 |
return ($ai_db_options [AI_OPTION_GLOBAL]['OUTPUT_BUFFERING']);
|
5418 |
}
|
5419 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5420 |
function get_disable_caching (){
|
5421 |
global $ai_db_options;
|
5422 |
|
@@ -6052,7 +6158,6 @@ function filter_option ($option, $value, $delete_escaped_backslashes = true){
|
|
6052 |
$option == AI_OPTION_TAXONOMY_LIST ||
|
6053 |
$option == AI_OPTION_ID_LIST ||
|
6054 |
$option == AI_OPTION_URL_LIST ||
|
6055 |
-
$option == AI_OPTION_PARAGRAPH_NUMBER ||
|
6056 |
$option == AI_OPTION_MIN_PARAGRAPHS ||
|
6057 |
$option == AI_OPTION_MAX_PARAGRAPHS ||
|
6058 |
$option == AI_OPTION_SKIP_FIRST_PARAGRAPHS ||
|
@@ -6121,6 +6226,10 @@ function filter_option ($option, $value, $delete_escaped_backslashes = true){
|
|
6121 |
$value = str_replace (array ("\"", "<", ">", "[", "]"), "", $value);
|
6122 |
$value = esc_html ($value);
|
6123 |
}
|
|
|
|
|
|
|
|
|
6124 |
elseif ($option == AI_OPTION_URL_PARAMETER_LIST ||
|
6125 |
$option == AI_OPTION_COOKIE_LIST) {
|
6126 |
$value = str_replace (array ("\"", "<", ">"), "", $value);
|
@@ -7628,6 +7737,7 @@ function ai_settings () {
|
|
7628 |
if (isset ($_POST ['paragraph_counting_functions'])) $options ['PARAGRAPH_COUNTING_FUNCTIONS'] = filter_option ('PARAGRAPH_COUNTING_FUNCTIONS', $_POST ['paragraph_counting_functions']);
|
7629 |
if (isset ($_POST ['output-buffering'])) $options ['OUTPUT_BUFFERING'] = filter_option ('OUTPUT_BUFFERING', $_POST ['output-buffering']);
|
7630 |
if (isset ($_POST ['disable-caching-admin'])) $options ['DISABLE_CACHING'] = filter_option ('DISABLE_CACHING', $_POST ['disable-caching-admin']);
|
|
|
7631 |
if (isset ($_POST ['wait-for-jquery'])) $options ['WAIT_FOR_JQUERY'] = filter_option ('WAIT_FOR_JQUERY', $_POST ['wait-for-jquery']);
|
7632 |
if (isset ($_POST ['no-paragraph-counting-inside'])) $options ['NO_PARAGRAPH_COUNTING_INSIDE'] = filter_option ('NO_PARAGRAPH_COUNTING_INSIDE', $_POST ['no-paragraph-counting-inside']);
|
7633 |
if (isset ($_POST ['ad-label'])) $options ['AD_LABEL'] = filter_option ('AD_LABEL', $_POST ['ad-label']);
|
@@ -10472,7 +10582,8 @@ function ai_set_cookie ($block, $property, $value) {
|
|
10472 |
unset ($_COOKIE [$ai_cookie_name]);
|
10473 |
ai_setcookie ($ai_cookie_name, null, - 1, '/');
|
10474 |
} else {
|
10475 |
-
$_COOKIE [$ai_cookie_name] = addslashes (json_encode ($ai_cookie));
|
|
|
10476 |
ai_setcookie ($ai_cookie_name, $_COOKIE [$ai_cookie_name], time () + 365 * 24 * 3600, '/');
|
10477 |
}
|
10478 |
|
@@ -10753,8 +10864,15 @@ function ai_add_rewrite_rules () {
|
|
10753 |
|
10754 |
function ai_js_dom_ready ($js_code, $script_tag = true, $script_class = '') {
|
10755 |
$id = rand (100000, 999999) . rand (100000, 999999);
|
|
|
10756 |
$code = '';
|
10757 |
|
|
|
|
|
|
|
|
|
|
|
|
|
10758 |
if ($script_class != '') {
|
10759 |
$script_class = ' class="' . $script_class . '"';
|
10760 |
}
|
@@ -10768,6 +10886,10 @@ function ai_js_dom_ready ($js_code, $script_tag = true, $script_class = '') {
|
|
10768 |
|
10769 |
$code .= "ai_run_{$id} = function(){{$js_code}};";
|
10770 |
|
|
|
|
|
|
|
|
|
10771 |
$code .= "
|
10772 |
";
|
10773 |
|
@@ -10775,7 +10897,7 @@ function ai_js_dom_ready ($js_code, $script_tag = true, $script_class = '') {
|
|
10775 |
$code .= " ";
|
10776 |
}
|
10777 |
|
10778 |
-
$code .= "if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) ai_run_{$id} (); else document.addEventListener ('DOMContentLoaded', ai_run_{$id});";
|
10779 |
|
10780 |
if ($script_tag) {
|
10781 |
$code .= "
|
@@ -11412,9 +11534,9 @@ function replace_ai_tags ($content, $general_tag = '') {
|
|
11412 |
}
|
11413 |
if ($search_query == "") $search_query = $smart_tag;
|
11414 |
|
11415 |
-
$author = get_the_author_meta ('display_name');
|
11416 |
-
$author_name = get_the_author_meta ('first_name') . " " . get_the_author_meta ('last_name');
|
11417 |
-
if ($author_name == '') $author_name = $author;
|
11418 |
|
11419 |
$url = remove_debug_parameters_from_url ((isset ($_SERVER ['HTTPS']) && $_SERVER ['HTTPS'] === 'on' ? "https" : "http") . '://'. $_SERVER ['HTTP_HOST'] . $_SERVER ['REQUEST_URI']);
|
11420 |
|
@@ -11437,12 +11559,22 @@ function replace_ai_tags ($content, $general_tag = '') {
|
|
11437 |
$ai_wp_data [AI_TAGS]['TAGS_SPACES'] = $tags_spaces;
|
11438 |
$ai_wp_data [AI_TAGS]['SMART_TAG'] = $smart_tag;
|
11439 |
$ai_wp_data [AI_TAGS]['SEARCH_QUERY'] = $search_query;
|
11440 |
-
$ai_wp_data [AI_TAGS]['AUTHOR'] = $author;
|
11441 |
-
$ai_wp_data [AI_TAGS]['AUTHOR_NAME'] = $author_name;
|
11442 |
$ai_wp_data [AI_TAGS]['POST_ID'] = $post_id;
|
11443 |
$ai_wp_data [AI_TAGS]['URL'] = $url;
|
11444 |
}
|
11445 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11446 |
$ad_data = preg_replace ("/{title}/i", $ai_wp_data [AI_TAGS]['TITLE'], $content);
|
11447 |
$ad_data = preg_replace ("/{short-title}/i", $ai_wp_data [AI_TAGS]['SHORT_TITLE'], $ad_data);
|
11448 |
$ad_data = preg_replace ("/{category}/i", $ai_wp_data [AI_TAGS]['CATEGORY'], $ad_data);
|
@@ -11458,6 +11590,7 @@ function replace_ai_tags ($content, $general_tag = '') {
|
|
11458 |
$ad_data = preg_replace ("/{search-query}/i", $ai_wp_data [AI_TAGS]['SEARCH_QUERY'], $ad_data);
|
11459 |
$ad_data = preg_replace ("/{author}/i", $ai_wp_data [AI_TAGS]['AUTHOR'], $ad_data);
|
11460 |
$ad_data = preg_replace ("/{author-name}/i", $ai_wp_data [AI_TAGS]['AUTHOR_NAME'], $ad_data);
|
|
|
11461 |
$ad_data = preg_replace ("/{post-id}/i", $ai_wp_data [AI_TAGS]['POST_ID'], $ad_data);
|
11462 |
|
11463 |
$ad_data = preg_replace ("/{short_title}/i", $ai_wp_data [AI_TAGS]['SHORT_TITLE'], $ad_data);
|
@@ -11541,6 +11674,10 @@ function ai_php_enabled () {
|
|
11541 |
return apply_filters ('ai_php_enabled', $php_enabled);
|
11542 |
}
|
11543 |
|
|
|
|
|
|
|
|
|
11544 |
// ===========================================================================================
|
11545 |
|
11546 |
|
@@ -11663,6 +11800,9 @@ $ai_wp_data [AI_UNFILTERED_HTML] = !(defined ('DISALLOW_UNFILTERED_HTML')
|
|
11663 |
|
11664 |
ai_load_settings ();
|
11665 |
|
|
|
|
|
|
|
11666 |
if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0)
|
11667 |
ai_log ("AFTER LOAD SETTINGS: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms");
|
11668 |
|
2 |
|
3 |
/*
|
4 |
Plugin Name: Ad Inserter
|
5 |
+
Version: 2.7.21
|
6 |
Description: Ad management with many advanced advertising features to insert ads at optimal positions
|
7 |
Author: Igor Funa
|
8 |
Author URI: http://igorfuna.com/
|
17 |
|
18 |
Change Log
|
19 |
|
20 |
+
Ad Inserter 2.7.21 - 2022-10-25
|
21 |
+
- Added support for Ad Inserter menu position
|
22 |
+
- Added support for random paragraph ranges
|
23 |
+
- Added support for default waiting time for user interaction (Pro only)
|
24 |
+
- Improved front-end code
|
25 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
26 |
+
|
27 |
+
Ad Inserter 2.7.20 - 2022-10-02
|
28 |
- Fix for front-end translation
|
29 |
|
30 |
Ad Inserter 2.7.19 - 2022-09-16
|
1477 |
|
1478 |
ai_http_header ();
|
1479 |
|
1480 |
+
if (defined ('AI_NO_JQUERY')) {
|
1481 |
+
// Check again if the constant is defined in the wp_head hook
|
1482 |
+
$ai_wp_data [AI_NO_JQUERY_CODE] = true;
|
1483 |
+
}
|
1484 |
|
1485 |
if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 && get_disable_caching ()) ai_disable_caching ();
|
1486 |
|
1945 |
|
1946 |
if (is_multisite() && !is_main_site () && !multisite_settings_page_enabled ()) return;
|
1947 |
|
1948 |
+
$menu_position = get_menu_position ();
|
1949 |
+
|
1950 |
+
if (isset ($_POST [AI_FORM_SAVE])) {
|
1951 |
+
if (isset ($_POST ['menu-for-link'])) {
|
1952 |
+
$menu_position = $_POST ['menu-for-link'];
|
1953 |
+
} else $menu_position = DEFAULT_MENU_FOR_LINK;
|
1954 |
+
}
|
1955 |
+
|
1956 |
+
if ($menu_position == AI_SETTINGS_SUBMENU) {
|
1957 |
+
// translators: %s: Ad Inserter
|
1958 |
+
$ai_settings_page = add_submenu_page ('options-general.php', sprintf (__('%s Settings', 'ad-inserter'), AD_INSERTER_NAME), AD_INSERTER_NAME, 'manage_options', basename (__FILE__), 'ai_settings', defined ('AI_SETTINGS_MENU_PRIORITY') ? AI_SETTINGS_MENU_PRIORITY : DEFAULT_SETTINGS_SUBMENU_PRIORITY);
|
1959 |
+
} else {
|
1960 |
+
// translators: %s: Ad Inserter
|
1961 |
+
$ai_settings_page = add_menu_page (sprintf (__('%s Settings', 'ad-inserter'), AD_INSERTER_NAME), AD_INSERTER_NAME, 'manage_options', basename (__FILE__), 'ai_settings', '', defined ('AI_SETTINGS_MENU_PRIORITY') ? AI_SETTINGS_MENU_PRIORITY : DEFAULT_SETTINGS_MENU_PRIORITY);
|
1962 |
+
}
|
1963 |
+
|
1964 |
add_action ('admin_enqueue_scripts', 'ai_admin_enqueue_scripts');
|
1965 |
add_action ('admin_enqueue_scripts', 'ai_admin_enqueue_scripts_late', 99999);
|
1966 |
add_action ('admin_enqueue_scripts', 'ai_admin_remove_scripts', 99999);
|
2378 |
function ai_get_js ($js_name, $replace_js_data = true) {
|
2379 |
global $ai_wp_data;
|
2380 |
|
2381 |
+
$jq_js_name = $js_name . '.q';
|
2382 |
if (!$ai_wp_data [AI_NO_JQUERY_CODE] && file_exists (AD_INSERTER_PLUGIN_DIR."includes/js/{$jq_js_name}.js")) {
|
2383 |
$js_name = $jq_js_name;
|
2384 |
}
|
2385 |
|
2386 |
+
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING] || !file_exists (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.min.js")) {
|
2387 |
$script = @file_get_contents (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.js");
|
2388 |
} else $script = @file_get_contents (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.min.js");
|
2389 |
|
2511 |
$basic_adb_message_css = str_replace ('pointer', 'no-drop', $basic_adb_message_css);
|
2512 |
}
|
2513 |
|
2514 |
+
// $overlay_code = "jQuery ('<".$overlay_tag.">', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 1110002, 9914998)) . ai_randomize_properties (get_overlay_css ())) . "')}})";
|
2515 |
+
$overlay_code = "var e = document.createElement ('".$overlay_tag."'); e.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 1110002, 9914998)) . ai_randomize_properties (get_overlay_css ())) . "');";
|
|
|
2516 |
|
2517 |
for ($level = 1; $level <= 5; $level ++) {
|
2518 |
switch (rand (1, 10)) {
|
2531 |
continue 2;
|
2532 |
}
|
2533 |
|
2534 |
+
// $overlay_code .= ".append (jQuery ('<div>')).append (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))";
|
2535 |
+
$overlay_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "');";
|
2536 |
+
$overlay_code .= "e.append (f); e.append (document.createElement ('div'));";
|
2537 |
+
|
2538 |
+
// $overlay_code = "jQuery ('<".$tag.">').append (" . $overlay_code . ')';
|
2539 |
+
$overlay_code .= "f = document.createElement ('".$tag."'); f.append (e); e = f;";
|
2540 |
+
|
2541 |
+
// if (rand (1, 10) > 5) $overlay_code .= ".append (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))";
|
2542 |
+
if (rand (1, 10) > 5) $overlay_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "'); e.append (f);";
|
2543 |
+
|
2544 |
+
// if (rand (1, 10) > 5) $overlay_code .= ".append (jQuery ('<div>'))";
|
2545 |
+
if (rand (1, 10) > 5) $overlay_code .= "e.append (document.createElement ('div'));";
|
2546 |
|
2547 |
+
// if (rand (1, 10) > 5) $overlay_code .= ".prepend (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))";
|
2548 |
+
if (rand (1, 10) > 5) $overlay_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "'); e.prepend (f);";
|
2549 |
|
2550 |
+
// if (rand (1, 10) > 5) $overlay_code .= ".prepend (jQuery ('<div>'))";
|
2551 |
+
if (rand (1, 10) > 5) $overlay_code .= "e.prepend (document.createElement ('div'));";
|
|
|
|
|
|
|
|
|
2552 |
}
|
2553 |
|
2554 |
+
$overlay_code = '(function () {' . $overlay_code . ' return e;})()';
|
2555 |
+
|
2556 |
$js = str_replace ('AI_ADB_OVERLAY_WINDOW', $overlay_code, $js);
|
2557 |
|
|
|
|
|
2558 |
$message_code = "jQuery ('<".$message_tag.">', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 96610999, 99919998)) . ai_randomize_properties (get_message_css ())) . "')}, 'html': b64d ('" .
|
|
|
2559 |
base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))) . "')})";
|
2560 |
|
2561 |
+
$message_code = "var e = document.createElement ('".$message_tag."'); e.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 96610999, 99919998)) . ai_randomize_properties (get_message_css ())) . "');";
|
2562 |
+
$message_code .= "e.innerHTML = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))) . "');";
|
2563 |
+
|
2564 |
for ($level = 1; $level <= 5; $level ++) {
|
2565 |
switch (rand (1, 10)) {
|
2566 |
case 1:
|
2580 |
continue 2;
|
2581 |
}
|
2582 |
|
2583 |
+
// $message_code .= ".append (jQuery ('<p>')).append (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "')}}))";
|
2584 |
+
$message_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "');";
|
2585 |
+
$message_code .= "e.append (document.createElement ('p')); e.append (f);";
|
2586 |
+
|
2587 |
+
// $message_code = "jQuery ('<".$tag.">').append (" . $message_code . ')';
|
2588 |
+
$message_code .= "f = document.createElement ('".$tag."'); f.append (e); e = f;";
|
2589 |
+
|
2590 |
+
// if (rand (1, 10) > 7) $message_code .= ".append (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "')}}))";
|
2591 |
+
if (rand (1, 10) > 7) $message_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "'); e.append (f);";
|
2592 |
|
2593 |
+
// if (rand (1, 10) > 7) $message_code .= ".append (jQuery ('<p>'))";
|
2594 |
+
if (rand (1, 10) > 7) $message_code .= "e.append (document.createElement ('p'));";
|
2595 |
+
|
2596 |
+
// if (rand (1, 10) > 7) $message_code .= ".prepend (jQuery ('<div>', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "')}}))";
|
2597 |
+
if (rand (1, 10) > 7) $message_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "'); e.prepend (f);";
|
2598 |
+
|
2599 |
+
// if (rand (1, 10) > 7) $message_code .= ".prepend (jQuery ('<p>'))";
|
2600 |
+
if (rand (1, 10) > 7) $message_code .= "e.prepend (document.createElement ('p'));";
|
2601 |
+
|
2602 |
+
// if (rand (1, 10) > 3) $message_code .= ".prepend (jQuery ('<p>'))";
|
2603 |
+
if (rand (1, 10) > 3) $message_code .= "e.prepend (document.createElement ('p'));";
|
2604 |
}
|
2605 |
|
2606 |
+
$message_code = '(function () {' . $message_code . ' return e;})()';
|
2607 |
+
|
2608 |
$js = str_replace ('AI_ADB_MESSAGE_WINDOW', $message_code, $js);
|
2609 |
|
2610 |
// $js = str_replace ('AI_ADB_MSG_HTML', base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))), $js);
|
2611 |
+
$js = str_replace ('AI_ADB_MSG_HTML', str_replace (array ("\r", "\n", '"'), array ('', '', '"'), preg_replace ( '@<(script|style)[^>]*?'.'>.*?</\\1>@si', '', do_shortcode ($adb->ai_getCode ()))), $js);
|
2612 |
// $js = str_replace ('AI_ADB_MSG_STYLE', base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 100000, 9999999) . ai_randomize_properties (get_message_css ()))), $js);
|
2613 |
$js = str_replace ('AI_ADB_MSG_STYLE', str_replace (array ("\r", "\n", '"'), array ('', '', '"'), ai_randomize_properties ($basic_adb_message_css, 100000, 9999999) . ai_randomize_properties (get_message_css ())), $js);
|
2614 |
|
2727 |
}
|
2728 |
|
2729 |
// $js = str_replace ('AI_ADB_HTML', base64_encode ($js_code_1.$js_code_2.$js_code_3), $js);
|
2730 |
+
// $js = str_replace ('var AI_ADB_HTML=1;', $js_code_1.$js_code_2.$js_code_3, $js);
|
2731 |
+
$js = str_replace ('AI_ADB_HTML=1;', $js_code_1.$js_code_2.$js_code_3, $js);
|
2732 |
|
2733 |
$body_js_code = '';
|
2734 |
if (rand (1, 10) > 5) $body_js_code .= 'document.body.style.background = "rgba('.rand (11, 35).', '.rand (11, 35).', '.rand (11, 35).', '.(rand (60, 90)/100).')";';
|
2735 |
if (rand (1, 10) > 6) $body_js_code .= 'document.body.style.backgroundColor = "rgba('.rand (21, 45).', '.rand (21, 45).', '.rand (21, 45).', '.(rand (60, 90)/100).')";';
|
2736 |
+
if (rand (1, 10) > 6) $body_js_code .= 'document.body.style.margin = "'.rand (400, 4345).'px";';
|
2737 |
|
2738 |
+
// $js = str_replace ('var AI_ADB_HTML=2;', $body_js_code, $js);
|
2739 |
+
$js = str_replace ('AI_ADB_HTML=2', $body_js_code, $js);
|
2740 |
|
2741 |
$js = str_replace ('AI_ADB_SELECTORS', get_adb_selectors (true), $js);
|
2742 |
|
2746 |
|
2747 |
if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0) {
|
2748 |
// translators: AD BLOCKING DETECTED, PAGE VIEWS: n - NO ACTION
|
2749 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED, PAGE VIEWS', 'ad-inserter') . '" + ": " + window.ai_d1 + " - " + "' . __('NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
2750 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED, COOKIE DETECTED - NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
2751 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED - ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
2752 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING NOT DETECTED', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-off"))', $js);
|
2753 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTION COOKIES DELETED', 'ad-inserter') . '"))', $js);
|
2754 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED - NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js);
|
2755 |
+
|
2756 |
+
// translators: AD BLOCKING DETECTED, PAGE VIEWS: n - NO ACTION
|
2757 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED, PAGE VIEWS', 'ad-inserter') . '" + ": " + window.ai_d1 + " - " + "' . __('NO ACTION', 'ad-inserter') . '";if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js);
|
2758 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED, COOKIE DETECTED - NO ACTION', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js);
|
2759 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED - ACTION', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js);
|
2760 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING NOT DETECTED', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-off");', $js);
|
2761 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTION COOKIES DELETED', 'ad-inserter') . '";', $js);
|
2762 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED - NO ACTION', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js);
|
2763 |
} else {
|
2764 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '(0)', $js);
|
2765 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '(0)', $js);
|
2766 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '(0)', $js);
|
2767 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '(0)', $js);
|
2768 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '(0)', $js);
|
2769 |
+
// $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '(0)', $js);
|
2770 |
+
|
2771 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '', $js);
|
2772 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '', $js);
|
2773 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '', $js);
|
2774 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '', $js);
|
2775 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '', $js);
|
2776 |
+
$js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '', $js);
|
2777 |
}
|
2778 |
}
|
2779 |
}
|
2864 |
$code .= '<object id="ai-adb-ga" data="https://www.google-analytics.com/analytics.js" style="position:absolute; z-index: -100; top: -1000px; left: -1000px; visibility: hidden;"></object>' . "\n";
|
2865 |
}
|
2866 |
if (!defined ('AI_ADB_NO_MEDIA_NET')) {
|
2867 |
+
$code .= '<object id="ai-adb-mn" data="//contextual.media.net/dmedianet.js" style="position:absolute; z-index: -100; top: -1000px; left: -1000px; visibility: hidden;"></object>' . "\n";
|
2868 |
+
}
|
2869 |
+
if (!defined ('AI_ADB_NO_AMAZON-ADSYSTEM')) {
|
2870 |
+
$code .= '<object id="ai-adb-am" data="https://z-na.amazon-adsystem.com/widgets/onejs" style="position:absolute; z-index: -100; top: -1000px; left: -1000px; visibility: hidden;"></object>' . "\n";
|
2871 |
+
}
|
2872 |
+
if (!defined ('AI_ADB_NO_quant')) {
|
2873 |
+
$code .= '<object id="ai-adb-qu" data="https://secure.quantserve.com/quant.js" style="position:absolute; z-index: -100; top: -1000px; left: -1000px; visibility: hidden;"></object>' . "\n";
|
2874 |
}
|
2875 |
|
2876 |
return $code;
|
2936 |
// Use updated flags
|
2937 |
ai_set_footer_inline_scripts ();
|
2938 |
|
2939 |
+
$inline_js = ai_inline_js ();
|
2940 |
+
|
2941 |
if ($ai_wp_data [AI_FOOTER_INLINE_SCRIPTS]) {
|
2942 |
echo "<script>\n";
|
2943 |
|
2944 |
$client_side_dynamic_blocks = get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW || get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT;
|
2945 |
+
$wait_for_jquery = get_wait_for_jquery () && !$ai_wp_data [AI_WP_AMP_PAGE];
|
2946 |
|
2947 |
ob_start ();
|
2948 |
|
2963 |
$ai_wp_data [AI_CLIENT_SIDE_INSERTION] ||
|
2964 |
isset ($ai_wp_data [AI_CLIENT_SIDE_ROTATION]) ||
|
2965 |
$ai_wp_data [AI_CLIENT_SIDE_DETECTION] ||
|
2966 |
+
$inline_js && ($ai_wp_data [AI_CLOSE_BUTTONS] && !$ai_wp_data [AI_CODE_FOR_IFRAME]) ||
|
2967 |
$ai_wp_data [AI_PARALLAX] ||
|
2968 |
+
$inline_js && $ai_wp_data [AI_CHECK_BLOCK] ||
|
2969 |
$ai_wp_data [AI_LAZY_LOADING] ||
|
2970 |
+
$inline_js && ($ai_wp_data [AI_TRACKING] && !isset ($ai_wp_data [AI_TRACKING_SHORTCODE_DISABLED])) ||
|
2971 |
$adb_code
|
2972 |
) {
|
2973 |
echo ai_get_js ('ai-base64');
|
2992 |
}
|
2993 |
|
2994 |
if ($ai_wp_data [AI_STICKY_WIDGETS] && get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_JS) {
|
2995 |
+
if ($inline_js) {
|
2996 |
+
echo ai_get_js ('ResizeSensor');
|
2997 |
+
echo ai_get_js ('theia-sticky-sidebar');
|
2998 |
+
}
|
2999 |
}
|
3000 |
|
3001 |
if ($ai_wp_data [AI_STICKY_WIDGETS] && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
3009 |
$client_side_dynamic_blocks ||
|
3010 |
$ai_wp_data [AI_CLIENT_SIDE_DETECTION] ||
|
3011 |
$ai_wp_data [AI_CLIENT_SIDE_INSERTION]) {
|
3012 |
+
echo ai_get_js ('ai-cookie-data');
|
3013 |
+
if ($inline_js) {
|
3014 |
+
echo ai_get_js ('ai-cookie', false);
|
3015 |
+
}
|
3016 |
}
|
3017 |
|
3018 |
if ($ai_wp_data [AI_CLIENT_SIDE_FILTER_CHECKS]) {
|
3019 |
+
echo ai_get_js ('ai-filter-data');
|
3020 |
+
if ($inline_js) {
|
3021 |
+
echo ai_get_js ('ai-filter', false);
|
3022 |
+
}
|
3023 |
}
|
3024 |
|
3025 |
if (($ai_wp_data [AI_CLIENT_SIDE_INSERTION] || $ai_wp_data [AI_CHECK_BLOCK])) {
|
3026 |
+
if ($inline_js) {
|
3027 |
+
echo ai_get_js ('ai-insert', false);
|
3028 |
+
}
|
3029 |
}
|
3030 |
|
3031 |
if (function_exists ('add_footer_inline_scripts_2') && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
3049 |
}
|
3050 |
// VIEWPORT separators or CHECK viewport
|
3051 |
if ($client_side_dynamic_blocks || $ai_wp_data [AI_CLIENT_SIDE_DETECTION] || $ai_wp_data [AI_CLIENT_SIDE_INSERTION] || $adb_code) {
|
3052 |
+
if ($inline_js) {
|
3053 |
echo ai_get_js ('ai-mobile-detect');
|
3054 |
+
}
|
3055 |
echo ai_get_js ('ai-lists');
|
3056 |
}
|
3057 |
|
3058 |
if ($ai_wp_data [AI_CLOSE_BUTTONS] && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
3059 |
+
if ($inline_js) {
|
3060 |
+
echo ai_get_js ('ai-close');
|
3061 |
+
}
|
3062 |
}
|
3063 |
|
3064 |
if ($ai_wp_data [AI_HTML_ELEMENT_SELECTION]) {
|
3067 |
|
3068 |
if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0) {
|
3069 |
if (defined ('AI_ADSENSE_OVERLAY') && !(isset ($_GET ["hide-debug-labels"]) && $_GET ["hide-debug-labels"] == 1)) {
|
3070 |
+
echo ai_get_js ('ai-ads-data');
|
3071 |
+
if ($inline_js) {
|
3072 |
+
echo ai_get_js ('ai-ads');
|
3073 |
+
echo ai_get_js ('ai-auto-ads', false);
|
3074 |
+
}
|
3075 |
}
|
|
|
|
|
3076 |
}
|
3077 |
|
3078 |
+
// Always inline
|
3079 |
if ($adb_code) {
|
3080 |
+
if (!function_exists ('add_footer_inline_scripts_2')) {
|
3081 |
+
echo ai_get_js ('ai-adb-data');
|
3082 |
+
// echo ai_replace_js_data (ai_adb_code ());
|
3083 |
+
echo ai_replace_js_data (ai_adb_code (), false);
|
3084 |
+
}
|
3085 |
}
|
3086 |
|
3087 |
if (function_exists ('add_footer_inline_scripts_2')) {
|
3095 |
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING]) {
|
3096 |
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] = " var ai_debug = typeof ai_debugging !== 'undefined';
|
3097 |
if (typeof ai_debugging !== 'undefined') console.log ('AI DOM READY JS CODE RUN');
|
3098 |
+
" . $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] . "if (typeof ai_debugging !== 'undefined') console.log ('AI DOM READY JS CODE END');
|
3099 |
";
|
3100 |
}
|
3101 |
|
3102 |
echo ai_js_dom_ready ("\n".$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY], false);
|
3103 |
}
|
3104 |
|
3105 |
+
echo ("\nai_js_code = true;");
|
3106 |
|
3107 |
// Wait for jQuery - for iframe pages it is always loaded
|
3108 |
if ($wait_for_jquery && !$ai_wp_data [AI_CODE_FOR_IFRAME]) {
|
3132 |
$footer_js_code = check_footer_inline_scripts ($footer_js_code);
|
3133 |
}
|
3134 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3135 |
echo $footer_js_code;
|
3136 |
|
3137 |
echo "\n</script>\n";
|
3138 |
}
|
3139 |
+
|
3140 |
+
if (!$inline_js) {
|
3141 |
+
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING] || !file_exists (AD_INSERTER_PLUGIN_DIR."js/ai-functions.min.js")) {
|
3142 |
+
$script = 'ai-functions.js';
|
3143 |
+
} else $script = 'ai-functions.min.js';
|
3144 |
+
|
3145 |
+
echo '<script async id="ai-functions" src="', plugins_url ('js/' . $script, __FILE__ ), "?ver=", AD_INSERTER_VERSION . ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING] ? '-'.time () : ''), '"></script>', "\n";
|
3146 |
+
}
|
3147 |
}
|
3148 |
|
3149 |
function ai_admin_notice_hook () {
|
3771 |
} else $code_for_insertion = '';
|
3772 |
|
3773 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_code_debug_block (' ' . $block_name, '', __('Code for insertion', 'ad-inserter') . ' ' . strlen ($code_for_insertion) . ' ' . _n('character', 'characters', strlen ($code_for_insertion), 'ad-inserter') . ' ', $obj->ai_getCode (), $code_for_insertion, true) . "\");
|
3774 |
+
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"" . get_code_debug_block (' ' . $block_name, '', __('Code for insertion', 'ad-inserter') . ' ' . strlen ($code_for_insertion) . ' ' . _n('character', 'characters', strlen ($code_for_insertion), 'ad-inserter') . ' ', $obj->ai_getCode (), $code_for_insertion, true) . "\");
|
3775 |
|
3776 |
";
|
3777 |
}
|
3781 |
echo "<script>\n", ai_get_js ('ai-iframes', false), "</script>\n";
|
3782 |
}
|
3783 |
|
3784 |
+
if (!ai_inline_js () /*&& $ai_wp_data [AI_IFRAMES]*/) {
|
3785 |
+
echo "<script>\n", ai_get_js ('ai-wait-functions', false), "</script>\n";
|
3786 |
+
}
|
3787 |
+
|
3788 |
if (!get_disable_js_code () && ($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0) {
|
3789 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= ' setTimeout (function(){jQuery(\'body\').prepend ("' . get_page_type_debug_info () . '");}, 1);
|
3790 |
+
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= 'setTimeout (function(){document.querySelector (\'body\').insertAdjacentHTML (\'afterbegin\', "' . get_page_type_debug_info () . '");}, 1);
|
3791 |
';
|
3792 |
}
|
3793 |
|
3794 |
if (!get_disable_header_code () && isset ($_GET ['ai-debug-code']) && !defined ('AI_DEBUGGING_DEMO')) {
|
3795 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_code_debug_block (' ' . __('Header code', 'ad-inserter') . ' ' . ($header->get_enable_manual () ? '' : ' ' . _x('DISABLED', 'Header code', 'ad-inserter')), '<head>...</head>', strlen ($header_code) . ' ' . _n('character inserted', 'characters inserted', strlen ($header_code), 'ad-inserter') . ' ', $header->ai_getCode (), $header_code, true) . "\");
|
3796 |
+
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"" . get_code_debug_block (' ' . __('Header code', 'ad-inserter') . ' ' . ($header->get_enable_manual () ? '' : ' ' . _x('DISABLED', 'Header code', 'ad-inserter')), '<head>...</head>', strlen ($header_code) . ' ' . _n('character inserted', 'characters inserted', strlen ($header_code), 'ad-inserter') . ' ', $header->ai_getCode (), $header_code, true) . "\");
|
3797 |
";
|
3798 |
}
|
3799 |
}
|
3806 |
// No scripts on AMP pages
|
3807 |
if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0 && $ai_wp_data [AI_ADB_DETECTION]) {
|
3808 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_adb_status_debug_info () . "\");
|
3809 |
+
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"" . get_adb_status_debug_info () . "\");
|
3810 |
";
|
3811 |
}
|
3812 |
}
|
3813 |
|
3814 |
if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_BLOCKS)) != 0) {
|
3815 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"<section id='ai-iab-tcf-bar' class='".AI_DEBUG_STATUS_CLASS."' style='cursor: pointer; display: none;' title='". __('Click to delete the cookie for the consents', 'ad-inserter') ."'><span id='ai-iab-tcf-status'>IAB TCF 2.0</span></section>\");
|
3816 |
+
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"<section id='ai-iab-tcf-bar' class='".AI_DEBUG_STATUS_CLASS."' style='cursor: pointer; display: none;' title='". __('Click to delete the cookie for the consents', 'ad-inserter') ."'><span id='ai-iab-tcf-status'>IAB TCF 2.0</span></section>\");
|
3817 |
";
|
3818 |
|
3819 |
if (!$ai_wp_data [AI_UNFILTERED_HTML]) {
|
3820 |
// $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"<section class='".AI_DEBUG_STATUS_CLASS." status-error'>".__('UNFILTERED HTML DISABLED', 'ad-inserter')."</section>\");
|
3821 |
+
$ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"<section class='".AI_DEBUG_STATUS_CLASS." status-error'>".__('UNFILTERED HTML DISABLED', 'ad-inserter')."</section>\");
|
3822 |
";
|
3823 |
}
|
3824 |
}
|
4303 |
echo " (get_the_ID: ", get_the_ID (), ", get_queried_object: ", $queried_object_id, ")";
|
4304 |
echo "\n";
|
4305 |
echo 'POST TYPE: ', get_post_type (), "\n";
|
4306 |
+
echo 'AUTHOR: ', strtolower (get_the_author_meta ('user_login')), ' (', get_the_author_meta ('display_name'), ")\n";
|
4307 |
+
|
4308 |
+
// $author = get_the_author_meta ('display_name');
|
4309 |
+
// $author_login = get_the_author_meta ('user_login');
|
4310 |
+
// $author_name = get_the_author_meta ('first_name') . " " . get_the_author_meta ('last_name');
|
4311 |
+
|
4312 |
|
4313 |
$category_data = get_the_category();
|
4314 |
$categories = array ();
|
4906 |
echo 'DISALLOW_FILE_EDIT: ', defined ('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT ? 'SET' : "NO", "\n";
|
4907 |
echo 'DISALLOW_FILE_MODS: ', defined ('DISALLOW_FILE_MODS') && DISALLOW_FILE_MODS ? 'SET' : "NO", "\n";
|
4908 |
echo 'DISALLOW_UNFILTERED_HTML:', defined ('DISALLOW_UNFILTERED_HTML') && DISALLOW_UNFILTERED_HTML ? 'SET' : "NO", "\n";
|
4909 |
+
echo 'AI_NO_ADSENSE_API: ', defined ('AI_NO_ADSENSE_API') ? 'SET' : "NO", "\n";
|
4910 |
|
4911 |
echo "\n";
|
4912 |
|
5080 |
if (!isset ($plugin_options ['PARAGRAPH_COUNTING_FUNCTIONS'])) $plugin_options ['PARAGRAPH_COUNTING_FUNCTIONS'] = DEFAULT_PARAGRAPH_COUNTING_FUNCTIONS;
|
5081 |
if (!isset ($plugin_options ['OUTPUT_BUFFERING'])) $plugin_options ['OUTPUT_BUFFERING'] = DEFAULT_OUTPUT_BUFFERING;
|
5082 |
if (!isset ($plugin_options ['DISABLE_CACHING'])) $plugin_options ['DISABLE_CACHING'] = DEFAULT_DISABLE_CACHING;
|
5083 |
+
if (!isset ($plugin_options ['MENU_FOR_LINK'])) $plugin_options ['MENU_FOR_LINK'] = DEFAULT_MENU_FOR_LINK;
|
5084 |
if (!isset ($plugin_options ['WAIT_FOR_JQUERY'])) $plugin_options ['WAIT_FOR_JQUERY'] = DEFAULT_WAIT_FOR_JQUERY;
|
5085 |
if (!isset ($plugin_options ['NO_PARAGRAPH_COUNTING_INSIDE'])) $plugin_options ['NO_PARAGRAPH_COUNTING_INSIDE'] = DEFAULT_NO_PARAGRAPH_COUNTING_INSIDE;
|
5086 |
if (!isset ($plugin_options ['AD_LABEL'])) $plugin_options ['AD_LABEL'] = DEFAULT_AD_TITLE;
|
5515 |
return ($ai_db_options [AI_OPTION_GLOBAL]['OUTPUT_BUFFERING']);
|
5516 |
}
|
5517 |
|
5518 |
+
function get_menu_position (){
|
5519 |
+
global $ai_db_options;
|
5520 |
+
|
5521 |
+
if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['MENU_FOR_LINK'])) $ai_db_options [AI_OPTION_GLOBAL]['MENU_FOR_LINK'] = DEFAULT_MENU_FOR_LINK;
|
5522 |
+
|
5523 |
+
return ($ai_db_options [AI_OPTION_GLOBAL]['MENU_FOR_LINK']);
|
5524 |
+
}
|
5525 |
+
|
5526 |
function get_disable_caching (){
|
5527 |
global $ai_db_options;
|
5528 |
|
6158 |
$option == AI_OPTION_TAXONOMY_LIST ||
|
6159 |
$option == AI_OPTION_ID_LIST ||
|
6160 |
$option == AI_OPTION_URL_LIST ||
|
|
|
6161 |
$option == AI_OPTION_MIN_PARAGRAPHS ||
|
6162 |
$option == AI_OPTION_MAX_PARAGRAPHS ||
|
6163 |
$option == AI_OPTION_SKIP_FIRST_PARAGRAPHS ||
|
6226 |
$value = str_replace (array ("\"", "<", ">", "[", "]"), "", $value);
|
6227 |
$value = esc_html ($value);
|
6228 |
}
|
6229 |
+
elseif ($option == AI_OPTION_PARAGRAPH_NUMBER) {
|
6230 |
+
$value = str_replace (array ("\"", "<", ">"), "", $value);
|
6231 |
+
$value = esc_html ($value);
|
6232 |
+
}
|
6233 |
elseif ($option == AI_OPTION_URL_PARAMETER_LIST ||
|
6234 |
$option == AI_OPTION_COOKIE_LIST) {
|
6235 |
$value = str_replace (array ("\"", "<", ">"), "", $value);
|
7737 |
if (isset ($_POST ['paragraph_counting_functions'])) $options ['PARAGRAPH_COUNTING_FUNCTIONS'] = filter_option ('PARAGRAPH_COUNTING_FUNCTIONS', $_POST ['paragraph_counting_functions']);
|
7738 |
if (isset ($_POST ['output-buffering'])) $options ['OUTPUT_BUFFERING'] = filter_option ('OUTPUT_BUFFERING', $_POST ['output-buffering']);
|
7739 |
if (isset ($_POST ['disable-caching-admin'])) $options ['DISABLE_CACHING'] = filter_option ('DISABLE_CACHING', $_POST ['disable-caching-admin']);
|
7740 |
+
if (isset ($_POST ['menu-for-link'])) $options ['MENU_FOR_LINK'] = filter_option ('MENU_FOR_LINK', $_POST ['menu-for-link']);
|
7741 |
if (isset ($_POST ['wait-for-jquery'])) $options ['WAIT_FOR_JQUERY'] = filter_option ('WAIT_FOR_JQUERY', $_POST ['wait-for-jquery']);
|
7742 |
if (isset ($_POST ['no-paragraph-counting-inside'])) $options ['NO_PARAGRAPH_COUNTING_INSIDE'] = filter_option ('NO_PARAGRAPH_COUNTING_INSIDE', $_POST ['no-paragraph-counting-inside']);
|
7743 |
if (isset ($_POST ['ad-label'])) $options ['AD_LABEL'] = filter_option ('AD_LABEL', $_POST ['ad-label']);
|
10582 |
unset ($_COOKIE [$ai_cookie_name]);
|
10583 |
ai_setcookie ($ai_cookie_name, null, - 1, '/');
|
10584 |
} else {
|
10585 |
+
// $_COOKIE [$ai_cookie_name] = addslashes (json_encode ($ai_cookie));
|
10586 |
+
$_COOKIE [$ai_cookie_name] = json_encode ($ai_cookie);
|
10587 |
ai_setcookie ($ai_cookie_name, $_COOKIE [$ai_cookie_name], time () + 365 * 24 * 3600, '/');
|
10588 |
}
|
10589 |
|
10864 |
|
10865 |
function ai_js_dom_ready ($js_code, $script_tag = true, $script_class = '') {
|
10866 |
$id = rand (100000, 999999) . rand (100000, 999999);
|
10867 |
+
$id_fn = '';
|
10868 |
$code = '';
|
10869 |
|
10870 |
+
$inline_js = ai_inline_js ();
|
10871 |
+
|
10872 |
+
if (!$inline_js) {
|
10873 |
+
$id_fn = '_fn';
|
10874 |
+
}
|
10875 |
+
|
10876 |
if ($script_class != '') {
|
10877 |
$script_class = ' class="' . $script_class . '"';
|
10878 |
}
|
10886 |
|
10887 |
$code .= "ai_run_{$id} = function(){{$js_code}};";
|
10888 |
|
10889 |
+
if (!$inline_js) {
|
10890 |
+
$code .= "ai_run_{$id}{$id_fn} = function(){ai_wait_for_functions ().then (ai_run_{$id})}";
|
10891 |
+
}
|
10892 |
+
|
10893 |
$code .= "
|
10894 |
";
|
10895 |
|
10897 |
$code .= " ";
|
10898 |
}
|
10899 |
|
10900 |
+
$code .= "if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) ai_run_{$id}{$id_fn} (); else document.addEventListener ('DOMContentLoaded', ai_run_{$id}{$id_fn});";
|
10901 |
|
10902 |
if ($script_tag) {
|
10903 |
$code .= "
|
11534 |
}
|
11535 |
if ($search_query == "") $search_query = $smart_tag;
|
11536 |
|
11537 |
+
// $author = get_the_author_meta ('display_name');
|
11538 |
+
// $author_name = get_the_author_meta ('first_name') . " " . get_the_author_meta ('last_name');
|
11539 |
+
// if ($author_name == ' ') $author_name = $author;
|
11540 |
|
11541 |
$url = remove_debug_parameters_from_url ((isset ($_SERVER ['HTTPS']) && $_SERVER ['HTTPS'] === 'on' ? "https" : "http") . '://'. $_SERVER ['HTTP_HOST'] . $_SERVER ['REQUEST_URI']);
|
11542 |
|
11559 |
$ai_wp_data [AI_TAGS]['TAGS_SPACES'] = $tags_spaces;
|
11560 |
$ai_wp_data [AI_TAGS]['SMART_TAG'] = $smart_tag;
|
11561 |
$ai_wp_data [AI_TAGS]['SEARCH_QUERY'] = $search_query;
|
11562 |
+
// $ai_wp_data [AI_TAGS]['AUTHOR'] = $author;
|
11563 |
+
// $ai_wp_data [AI_TAGS]['AUTHOR_NAME'] = $author_name;
|
11564 |
$ai_wp_data [AI_TAGS]['POST_ID'] = $post_id;
|
11565 |
$ai_wp_data [AI_TAGS]['URL'] = $url;
|
11566 |
}
|
11567 |
|
11568 |
+
// Author should not be cached
|
11569 |
+
$author = get_the_author_meta ('display_name');
|
11570 |
+
$author_login = get_the_author_meta ('user_login');
|
11571 |
+
$author_name = get_the_author_meta ('first_name') . " " . get_the_author_meta ('last_name');
|
11572 |
+
if ($author_name == ' ') $author_name = $author;
|
11573 |
+
|
11574 |
+
$ai_wp_data [AI_TAGS]['AUTHOR'] = $author;
|
11575 |
+
$ai_wp_data [AI_TAGS]['AUTHOR_NAME'] = $author_name;
|
11576 |
+
$ai_wp_data [AI_TAGS]['AUTHOR_LOGIN'] = $author_login;
|
11577 |
+
|
11578 |
$ad_data = preg_replace ("/{title}/i", $ai_wp_data [AI_TAGS]['TITLE'], $content);
|
11579 |
$ad_data = preg_replace ("/{short-title}/i", $ai_wp_data [AI_TAGS]['SHORT_TITLE'], $ad_data);
|
11580 |
$ad_data = preg_replace ("/{category}/i", $ai_wp_data [AI_TAGS]['CATEGORY'], $ad_data);
|
11590 |
$ad_data = preg_replace ("/{search-query}/i", $ai_wp_data [AI_TAGS]['SEARCH_QUERY'], $ad_data);
|
11591 |
$ad_data = preg_replace ("/{author}/i", $ai_wp_data [AI_TAGS]['AUTHOR'], $ad_data);
|
11592 |
$ad_data = preg_replace ("/{author-name}/i", $ai_wp_data [AI_TAGS]['AUTHOR_NAME'], $ad_data);
|
11593 |
+
$ad_data = preg_replace ("/{author-login}/i", $ai_wp_data [AI_TAGS]['AUTHOR_LOGIN'], $ad_data);
|
11594 |
$ad_data = preg_replace ("/{post-id}/i", $ai_wp_data [AI_TAGS]['POST_ID'], $ad_data);
|
11595 |
|
11596 |
$ad_data = preg_replace ("/{short_title}/i", $ai_wp_data [AI_TAGS]['SHORT_TITLE'], $ad_data);
|
11674 |
return apply_filters ('ai_php_enabled', $php_enabled);
|
11675 |
}
|
11676 |
|
11677 |
+
function ai_inline_js () {
|
11678 |
+
return (get_wait_for_jquery () || !defined ('AI_EXTERNAL_JS'));
|
11679 |
+
}
|
11680 |
+
|
11681 |
// ===========================================================================================
|
11682 |
|
11683 |
|
11800 |
|
11801 |
ai_load_settings ();
|
11802 |
|
11803 |
+
$ai_wp_data [AI_NO_JQUERY_CODE] = defined ('AI_NO_JQUERY') || !get_wait_for_jquery () || (isset ($_GET [AI_URL_DEBUG_NO_JQUERY]) && !empty ($_GET [AI_URL_DEBUG_NO_JQUERY]));
|
11804 |
+
|
11805 |
+
|
11806 |
if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0)
|
11807 |
ai_log ("AFTER LOAD SETTINGS: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms");
|
11808 |
|
changelog.txt
CHANGED
@@ -2,6 +2,194 @@
|
|
2 |
|
3 |
This is an archive of older changelog entries. Most recent entries are maintained in readme.txt
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
= 2.5.10 =
|
6 |
- Optimized Javascript code to allow advanced optimizations
|
7 |
- Added support to wait for jQuery so it can be deferred
|
2 |
|
3 |
This is an archive of older changelog entries. Most recent entries are maintained in readme.txt
|
4 |
|
5 |
+
= 2.6.27 =
|
6 |
+
- Added support for scheduled rotation
|
7 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
8 |
+
|
9 |
+
= 2.6.26 =
|
10 |
+
- Few bug fixes (Pro only)
|
11 |
+
|
12 |
+
= 2.6.25 =
|
13 |
+
- Added support for block names in adinserter shortcode block attributes
|
14 |
+
- Added support for default custom field values
|
15 |
+
- Added support to list post ID range
|
16 |
+
- Improved ad blocking detection
|
17 |
+
- Reduced layout shift when using CHECK shortcodes
|
18 |
+
- Fix for expanded shortcodes in the rotate code generator
|
19 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
20 |
+
|
21 |
+
= 2.6.24 =
|
22 |
+
- Added support for consent attribute for code generator for AdSense and Amazon AMP ads
|
23 |
+
- Added support for random number shortcode
|
24 |
+
- Added support for && and !! operators in client-side client list checks
|
25 |
+
- Added scheduling time on blocks list (Pro only)
|
26 |
+
- Improved undismissible message when ad blocking is detected
|
27 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
28 |
+
|
29 |
+
= 2.6.23 =
|
30 |
+
- Reduced layout shift when using lists and client-side dynamic blocks
|
31 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
32 |
+
|
33 |
+
= 2.6.22 =
|
34 |
+
- Various security fixes
|
35 |
+
- Updated AdSense API authorization process
|
36 |
+
- Reduced layout shift when using client-side device detection
|
37 |
+
- Added option to block IP addresses for click fraud protection (Pro only)
|
38 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
39 |
+
|
40 |
+
= 2.6.21 =
|
41 |
+
- Improved compatibility with PHP 8
|
42 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
43 |
+
|
44 |
+
= 2.6.20 =
|
45 |
+
- Added support for alt text and lazy loading for banner code generator
|
46 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
47 |
+
|
48 |
+
= 2.6.19 =
|
49 |
+
- Improved code to reduce layout shift when using client-side device detection
|
50 |
+
- Added translation for es_ES
|
51 |
+
- Added translation for fr_FR
|
52 |
+
- Added translation for it_IT
|
53 |
+
- Improved compatibility with PHP 8
|
54 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
55 |
+
|
56 |
+
= 2.6.18 =
|
57 |
+
- Added support to change Dynamic blocks setting for adinserter PHP function call
|
58 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
59 |
+
|
60 |
+
= 2.6.17 =
|
61 |
+
- Fix for double client-side insertions when using geolocation (Pro only)
|
62 |
+
|
63 |
+
= 2.6.16 =
|
64 |
+
- Added support for ad blocking detection action every n pageviews
|
65 |
+
- Added support to individually disable pageview or click tracking (Pro only)
|
66 |
+
- Changed IAB TCF v2 cookie check name from euconsent-v2 to tcf-v2 (euconsent-v2 will still work)
|
67 |
+
- Fix for category check on category pages
|
68 |
+
- Fix for issues with Safari browser
|
69 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
70 |
+
|
71 |
+
= 2.6.15 =
|
72 |
+
- No ad blocking detection actions for crawlers and bots
|
73 |
+
- Fix for processing Ad Inserter shortcodes inside HTML tags
|
74 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
75 |
+
|
76 |
+
= 2.6.14 =
|
77 |
+
- Added support to insert [embed] shortcodes
|
78 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
79 |
+
|
80 |
+
= 2.6.13 =
|
81 |
+
- Few minor bug fixes
|
82 |
+
|
83 |
+
= 2.6.12 =
|
84 |
+
- Improved ad blocking detection
|
85 |
+
- Added options to delay client-side insertions at HTML element
|
86 |
+
- Added support to check for multiple cookie values (needed for IAB TCF 2.0)
|
87 |
+
- Added filter hooks for block processing
|
88 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
89 |
+
|
90 |
+
= 2.6.11 =
|
91 |
+
- Added support for IAB Transparency & Consent Framework 2.0
|
92 |
+
- Added support for taxonomy for primary category
|
93 |
+
- Added support for taxonomy for post meta data
|
94 |
+
- Added support to invert contain/do not contain text condition for paragraph counting
|
95 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
96 |
+
|
97 |
+
= 2.6.10 =
|
98 |
+
- Added user taxonomy items for logged-in and not logged-in users
|
99 |
+
- Added option to define tab setup delay (for the plugin settings page)
|
100 |
+
- Added option to insert unique ad rotation options when block is inserted more than once
|
101 |
+
- Added support for client-side device detection for AMP pages (for method Show)
|
102 |
+
- Added support for code generator for Amazon AMP ads
|
103 |
+
- Added support for custom tracking events (Pro only)
|
104 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
105 |
+
|
106 |
+
= 2.6.9 =
|
107 |
+
- Added option for paragraph counting to search only tag attributes for text
|
108 |
+
- Added option to embed block Javascript code (to be loaded with Ajax calls)
|
109 |
+
- Added support to prevent duplicate insertions when the_content filter is called more than once (experimental)
|
110 |
+
- Added support for the client list to check for partial user agent strings
|
111 |
+
- Added support for check of cookie object properties
|
112 |
+
- Improved ad blocking detection
|
113 |
+
- Viewports no longer need to be in descending width order
|
114 |
+
- Added option to protect inserted block content (Pro only)
|
115 |
+
- Added support for adb scripts path filter hook (Pro only)
|
116 |
+
- Added support to export statistics data to CSV file (Pro only)
|
117 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
118 |
+
|
119 |
+
= 2.6.8 =
|
120 |
+
- Added support to disable PHP processing by PHP constant
|
121 |
+
- Added support to repeat COUNT options
|
122 |
+
- Added support for offset for %n paragraph number (%n@o)
|
123 |
+
- Added support for options to skip insertion for first and last paragraphs
|
124 |
+
- Added support for hook filter 'ai_block_insertion_check'
|
125 |
+
- Added support for background ads (Pro only)
|
126 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
127 |
+
|
128 |
+
= 2.6.7 =
|
129 |
+
- Added support for various shortcodes for post categories
|
130 |
+
- Added support for various shortcodes for post tags
|
131 |
+
- Added support for user action on click (Pro only)
|
132 |
+
- Added support for manual loading (Pro only)
|
133 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
134 |
+
|
135 |
+
= 2.6.6 =
|
136 |
+
- Fix for exceptions list not showing all exceptions
|
137 |
+
- Improved ad blocking detection
|
138 |
+
- Fix for close button in preview window (Pro only)
|
139 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
140 |
+
|
141 |
+
= 2.6.5 =
|
142 |
+
- Added support for url data shortcode
|
143 |
+
- Added warning if not all exceptions were cleared
|
144 |
+
- Added support for MaxMind country only database (Pro only)
|
145 |
+
- Added support for ip to country lookup filter hook (Pro only)
|
146 |
+
- Fix for country groups in CHECK separators (Pro only)
|
147 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
148 |
+
|
149 |
+
= 2.6.4 =
|
150 |
+
- Fix for use of undefined constant warning (Pro only)
|
151 |
+
|
152 |
+
= 2.6.3 =
|
153 |
+
- Added support for shortcodes to disable block insertion
|
154 |
+
- Added support for child taxonomy list items
|
155 |
+
- Added random parameter to Ajax requests for geolocation (Pro only)
|
156 |
+
- Added options to define external tracking event category, action and label (Pro only)
|
157 |
+
- Number of custom hooks increased to 20
|
158 |
+
- Fix to prevent insertion into head section when using Rank Math plugin
|
159 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
160 |
+
|
161 |
+
= 2.6.2 =
|
162 |
+
- Added support to disable caching of block PHP code
|
163 |
+
- Added support to pause blocks on the blocks list
|
164 |
+
- Added support for no url parameters list item
|
165 |
+
- Added support for client-side scheduling (Pro only)
|
166 |
+
- Added support for server-side scheduling using W3TC (Pro only)
|
167 |
+
- Added support for multisite:site-id taxonomy list item (Pro only)
|
168 |
+
- Updated MaxMind GeoLite2 database download using license key (Pro only)
|
169 |
+
- Changed settings format in the database to prevent export/import issues with MySQL/PhpMyAdmin
|
170 |
+
- Fix for [ADINSERTER counter] shortcode not expanding inside HTML tags
|
171 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
172 |
+
|
173 |
+
= 2.6.1 =
|
174 |
+
- Fix for errors on the settings page
|
175 |
+
- Fix for non English characters in ads
|
176 |
+
- Fix for sticky widgets
|
177 |
+
- Few minor bug fixes
|
178 |
+
|
179 |
+
= 2.6.0 =
|
180 |
+
- Added support for VIEWPORT separator
|
181 |
+
- Added support for viewport check in CHECK separators (Pro only)
|
182 |
+
- Added support to show processing log on front-end
|
183 |
+
- Added support to show link to the Ad Inserter Pro settings page on multisite Sites page (Pro only)
|
184 |
+
- Added support to detect and prevent document.write after DOM is ready
|
185 |
+
- Added support for scheduling hours (Pro only)
|
186 |
+
- Added support for scheduling days in week (Pro only)
|
187 |
+
- Added support for W3TC insertion debugging info
|
188 |
+
- Improved Javascript code for client-side functions
|
189 |
+
- Improved ad blocking detection
|
190 |
+
- Default value for Wait for jQuery set to Enabled
|
191 |
+
- Few minor bug fixes, cosmetic changes and code improvements
|
192 |
+
|
193 |
= 2.5.10 =
|
194 |
- Optimized Javascript code to allow advanced optimizations
|
195 |
- Added support to wait for jQuery so it can be deferred
|
class.php
CHANGED
@@ -2848,14 +2848,23 @@ abstract class ai_CodeBlock extends ai_BaseCodeBlock {
|
|
2848 |
|
2849 |
if ($this->get_embed_js_code ()) {
|
2850 |
$id = rand (100000, 999999) . rand (100000, 999999);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2851 |
|
2852 |
if ($script_class != '') {
|
2853 |
$script_class = ' class="' . $script_class . '"';
|
2854 |
}
|
2855 |
|
2856 |
$code = "<script{$script_class}>". ai_get_js ('ai-base64') . "
|
2857 |
-
ai_run_{$id} = function(){if (typeof ai_js_code == 'boolean') {{$js_code}};};
|
2858 |
-
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) ai_run_{$id} (); else document.addEventListener ('DOMContentLoaded', ai_run_{$id});
|
2859 |
</script>
|
2860 |
";
|
2861 |
} else $code = ai_js_dom_ready ($js_code, $script_tag, $script_class);
|
@@ -2875,7 +2884,7 @@ abstract class ai_CodeBlock extends ai_BaseCodeBlock {
|
|
2875 |
|
2876 |
if ($delay != 0) {
|
2877 |
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING]) {
|
2878 |
-
$js_code = "console.log ('AI WAIT FOR
|
2879 |
}
|
2880 |
|
2881 |
$js_code = 'setTimeout (function () {'.$js_code.'}, '.$delay.');';
|
@@ -2883,10 +2892,11 @@ abstract class ai_CodeBlock extends ai_BaseCodeBlock {
|
|
2883 |
|
2884 |
if ($wait_for != '') {
|
2885 |
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING]) {
|
2886 |
-
$js_code = "console.log ('AI WAIT FOR ".$wait_for."
|
2887 |
}
|
2888 |
|
2889 |
-
$js_code = 'document.arrive ("'.$wait_for.'", function () {'.$js_code.'});';
|
|
|
2890 |
}
|
2891 |
|
2892 |
return $js_code;
|
@@ -6975,6 +6985,26 @@ echo '</body>
|
|
6975 |
$positions = array ();
|
6976 |
|
6977 |
if (!$position_preview) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6978 |
$position = $position_text;
|
6979 |
|
6980 |
if (is_numeric ($position)) {
|
@@ -6994,11 +7024,122 @@ echo '</body>
|
|
6994 |
|
6995 |
$positions = array ($position);
|
6996 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6997 |
elseif (strpos ($position_text, ',') !== false) {
|
|
|
|
|
|
|
|
|
|
|
6998 |
$new_positions = array ();
|
6999 |
$positions = explode (',', str_replace (' ', '', $position_text));
|
7000 |
foreach ($positions as $index => $position) {
|
7001 |
-
if (isset ($position [0]) && $position [0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7002 |
unset ($positions [$index]);
|
7003 |
|
7004 |
$position = substr ($position, 1);
|
@@ -7901,6 +8042,26 @@ echo '</body>
|
|
7901 |
$positions = array ();
|
7902 |
|
7903 |
if (!$position_preview) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7904 |
$position = $position_text;
|
7905 |
|
7906 |
if (is_numeric ($position)) {
|
@@ -7920,11 +8081,123 @@ echo '</body>
|
|
7920 |
|
7921 |
$positions = array ($position);
|
7922 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7923 |
elseif (strpos ($position_text, ',') !== false) {
|
|
|
|
|
|
|
|
|
|
|
7924 |
$new_positions = array ();
|
7925 |
$positions = explode (',', str_replace (' ', '', $position_text));
|
7926 |
foreach ($positions as $index => $position) {
|
7927 |
-
if (isset ($position [0]) && $position [0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7928 |
unset ($positions [$index]);
|
7929 |
|
7930 |
$position = substr ($position, 1);
|
@@ -8336,7 +8609,7 @@ echo '</body>
|
|
8336 |
|
8337 |
$real_positions = array ();
|
8338 |
foreach ($positions as $position_index) $real_positions []= $position_index >= 0 ? $position_index + 1 : '*';
|
8339 |
-
if ($debug_processing && $this->number != 0 && count ($real_positions) != 0) ai_log ('BLOCK ' . $this->number . ' INSERTION POSITIONS: ' . implode (', ', $real_positions));
|
8340 |
|
8341 |
$min_paragraphs = intval ($this->get_paragraph_number_minimum());
|
8342 |
$max_paragraphs = intval ($this->get_paragraph_number_maximum());
|
2848 |
|
2849 |
if ($this->get_embed_js_code ()) {
|
2850 |
$id = rand (100000, 999999) . rand (100000, 999999);
|
2851 |
+
$id_fn = '';
|
2852 |
+
$code_fn = '';
|
2853 |
+
|
2854 |
+
$inline_js = ai_inline_js ();
|
2855 |
+
|
2856 |
+
if (!$inline_js) {
|
2857 |
+
$id_fn = '_fn';
|
2858 |
+
$code_fn = "ai_run_{$id}{$id_fn} = function(){ai_wait_for_functions ().then (ai_run_{$id})}";
|
2859 |
+
}
|
2860 |
|
2861 |
if ($script_class != '') {
|
2862 |
$script_class = ' class="' . $script_class . '"';
|
2863 |
}
|
2864 |
|
2865 |
$code = "<script{$script_class}>". ai_get_js ('ai-base64') . "
|
2866 |
+
ai_run_{$id} = function(){if (typeof ai_js_code == 'boolean') {{$js_code}};};{$code_fn}
|
2867 |
+
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) ai_run_{$id}{$id_fn} (); else document.addEventListener ('DOMContentLoaded', ai_run_{$id}{$id_fn});
|
2868 |
</script>
|
2869 |
";
|
2870 |
} else $code = ai_js_dom_ready ($js_code, $script_tag, $script_class);
|
2884 |
|
2885 |
if ($delay != 0) {
|
2886 |
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING]) {
|
2887 |
+
$js_code = "console.log ('AI WAIT FOR ".$wait_for." INSERTING BLOCK ".$this->number."');\n" . $js_code;
|
2888 |
}
|
2889 |
|
2890 |
$js_code = 'setTimeout (function () {'.$js_code.'}, '.$delay.');';
|
2892 |
|
2893 |
if ($wait_for != '') {
|
2894 |
if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING]) {
|
2895 |
+
$js_code = "console.log ('AI WAIT FOR ".$wait_for." ACTIVATED, INSERTION DELAYED FOR ".$delay." ms');\n" . $js_code;
|
2896 |
}
|
2897 |
|
2898 |
+
// $js_code = 'document.arrive ("'.$wait_for.'", function () {'.$js_code.'});';
|
2899 |
+
$js_code = 'document.arrive ("'.$wait_for.'", {onceOnly: true, existing: true}, function () {'.$js_code.'});';
|
2900 |
}
|
2901 |
|
2902 |
return $js_code;
|
6985 |
$positions = array ();
|
6986 |
|
6987 |
if (!$position_preview) {
|
6988 |
+
|
6989 |
+
if (strpos ($position_text, '[') !== false) {
|
6990 |
+
$random_range = false;
|
6991 |
+
for ($i = 0; $i < strlen ($position_text); $i ++) {
|
6992 |
+
switch ($position_text [$i]) {
|
6993 |
+
case '[':
|
6994 |
+
$random_range = true;
|
6995 |
+
break;
|
6996 |
+
case ']':
|
6997 |
+
$random_range = false;
|
6998 |
+
break;
|
6999 |
+
case ',':
|
7000 |
+
if ($random_range) {
|
7001 |
+
$position_text [$i] = '|';
|
7002 |
+
}
|
7003 |
+
break;
|
7004 |
+
}
|
7005 |
+
}
|
7006 |
+
}
|
7007 |
+
|
7008 |
$position = $position_text;
|
7009 |
|
7010 |
if (is_numeric ($position)) {
|
7024 |
|
7025 |
$positions = array ($position);
|
7026 |
}
|
7027 |
+
elseif (strpos ($position_text, '[') === 0 && strpos ($position_text, ']') === strlen ($position_text) - 1) {
|
7028 |
+
$wanted_paragraphs_text = trim (substr ($position_text, 1, strlen ($position_text) - 2));
|
7029 |
+
$wanted_paragraph_ranges = array ();
|
7030 |
+
$wanted_paragraphs = array ();
|
7031 |
+
|
7032 |
+
if (strpos ($position_text, '|') !== false) {
|
7033 |
+
$items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text));
|
7034 |
+
foreach ($items as $item) {
|
7035 |
+
$wanted_paragraph_ranges []= $item;
|
7036 |
+
}
|
7037 |
+
} else $wanted_paragraph_ranges []= $wanted_paragraphs_text;
|
7038 |
+
|
7039 |
+
foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) {
|
7040 |
+
if (strpos ($wanted_paragraph_range, '-') !== false) {
|
7041 |
+
$limits = explode ('-', $wanted_paragraph_range);
|
7042 |
+
$limit_min = (int) $limits [0];
|
7043 |
+
$limit_max = (int) $limits [1];
|
7044 |
+
} else {
|
7045 |
+
$limit_min = (int) $wanted_paragraph_range;
|
7046 |
+
$limit_max = (int) $wanted_paragraph_range;
|
7047 |
+
}
|
7048 |
+
|
7049 |
+
if ($limit_min < 0) $limit_min = 0;
|
7050 |
+
else if ($limit_min > 9999) $limit_min = 9999;
|
7051 |
+
if ($limit_max < 0) $limit_max = 0;
|
7052 |
+
else if ($limit_max > 9999) $limit_max = 9999;
|
7053 |
+
|
7054 |
+
if ($limit_min > $limit_max) $limit_max = $limit_min;
|
7055 |
+
|
7056 |
+
while ($limit_max >= $limit_min) {
|
7057 |
+
$wanted_paragraphs [] = $limit_max;
|
7058 |
+
$limit_max --;
|
7059 |
+
}
|
7060 |
+
}
|
7061 |
+
|
7062 |
+
$wanted_paragraphs = array_unique ($wanted_paragraphs);
|
7063 |
+
sort ($wanted_paragraphs);
|
7064 |
+
|
7065 |
+
if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0);
|
7066 |
+
|
7067 |
+
$random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1);
|
7068 |
+
$paragraph = $wanted_paragraphs [$random_paragraph];
|
7069 |
+
|
7070 |
+
if ($paragraph == 0) {
|
7071 |
+
$paragraph = mt_rand (0, count ($paragraph_positions) - 1);
|
7072 |
+
} else $paragraph --;
|
7073 |
+
|
7074 |
+
$positions = array ($paragraph);
|
7075 |
+
|
7076 |
+
if ($debug_processing) {
|
7077 |
+
ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' => [' . implode (', ', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . $paragraph + 1);
|
7078 |
+
}
|
7079 |
+
}
|
7080 |
elseif (strpos ($position_text, ',') !== false) {
|
7081 |
+
|
7082 |
+
if ($debug_processing) {
|
7083 |
+
ai_log ('BLOCK ' . $this->number . ' BEFORE PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' of ' . count ($paragraph_positions) . ' available');
|
7084 |
+
}
|
7085 |
+
|
7086 |
$new_positions = array ();
|
7087 |
$positions = explode (',', str_replace (' ', '', $position_text));
|
7088 |
foreach ($positions as $index => $position) {
|
7089 |
+
if (isset ($position [0]) && strpos ($position, '[') === 0 && strpos ($position, ']') === strlen ($position) - 1) {
|
7090 |
+
$wanted_paragraphs_text = trim (substr ($position, 1, strlen ($position) - 2));
|
7091 |
+
$wanted_paragraph_ranges = array ();
|
7092 |
+
$wanted_paragraphs = array ();
|
7093 |
+
|
7094 |
+
if (strpos ($position, '|') !== false) {
|
7095 |
+
$items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text));
|
7096 |
+
foreach ($items as $item) {
|
7097 |
+
$wanted_paragraph_ranges []= $item;
|
7098 |
+
}
|
7099 |
+
} else $wanted_paragraph_ranges []= $wanted_paragraphs_text;
|
7100 |
+
|
7101 |
+
foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) {
|
7102 |
+
if (strpos ($wanted_paragraph_range, '-') !== false) {
|
7103 |
+
$limits = explode ('-', $wanted_paragraph_range);
|
7104 |
+
$limit_min = (int) $limits [0];
|
7105 |
+
$limit_max = (int) $limits [1];
|
7106 |
+
} else {
|
7107 |
+
$limit_min = (int) $wanted_paragraph_range;
|
7108 |
+
$limit_max = (int) $wanted_paragraph_range;
|
7109 |
+
}
|
7110 |
+
|
7111 |
+
if ($limit_min < 0) $limit_min = 0;
|
7112 |
+
else if ($limit_min > 9999) $limit_min = 9999;
|
7113 |
+
if ($limit_max < 0) $limit_max = 0;
|
7114 |
+
else if ($limit_max > 9999) $limit_max = 9999;
|
7115 |
+
|
7116 |
+
if ($limit_min > $limit_max) $limit_max = $limit_min;
|
7117 |
+
|
7118 |
+
while ($limit_max >= $limit_min) {
|
7119 |
+
$wanted_paragraphs [] = $limit_max;
|
7120 |
+
$limit_max --;
|
7121 |
+
}
|
7122 |
+
}
|
7123 |
+
|
7124 |
+
$wanted_paragraphs = array_unique ($wanted_paragraphs);
|
7125 |
+
sort ($wanted_paragraphs);
|
7126 |
+
|
7127 |
+
if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0);
|
7128 |
+
|
7129 |
+
$random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1);
|
7130 |
+
$paragraph = $wanted_paragraphs [$random_paragraph];
|
7131 |
+
|
7132 |
+
if ($paragraph == 0) {
|
7133 |
+
$paragraph = mt_rand (0, count ($paragraph_positions) - 1);
|
7134 |
+
} else $paragraph --;
|
7135 |
+
|
7136 |
+
$positions [$index] = $paragraph;
|
7137 |
+
|
7138 |
+
if ($debug_processing) {
|
7139 |
+
ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position) . ' => [' . implode (', ', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . $paragraph + 1);
|
7140 |
+
}
|
7141 |
+
}
|
7142 |
+
elseif (isset ($position [0]) && $position [0] == '%') {
|
7143 |
unset ($positions [$index]);
|
7144 |
|
7145 |
$position = substr ($position, 1);
|
8042 |
$positions = array ();
|
8043 |
|
8044 |
if (!$position_preview) {
|
8045 |
+
|
8046 |
+
if (strpos ($position_text, '[') !== false) {
|
8047 |
+
$random_range = false;
|
8048 |
+
for ($i = 0; $i < strlen ($position_text); $i ++) {
|
8049 |
+
switch ($position_text [$i]) {
|
8050 |
+
case '[':
|
8051 |
+
$random_range = true;
|
8052 |
+
break;
|
8053 |
+
case ']':
|
8054 |
+
$random_range = false;
|
8055 |
+
break;
|
8056 |
+
case ',':
|
8057 |
+
if ($random_range) {
|
8058 |
+
$position_text [$i] = '|';
|
8059 |
+
}
|
8060 |
+
break;
|
8061 |
+
}
|
8062 |
+
}
|
8063 |
+
}
|
8064 |
+
|
8065 |
$position = $position_text;
|
8066 |
|
8067 |
if (is_numeric ($position)) {
|
8081 |
|
8082 |
$positions = array ($position);
|
8083 |
}
|
8084 |
+
|
8085 |
+
elseif (strpos ($position_text, '[') === 0 && strpos ($position_text, ']') === strlen ($position_text) - 1) {
|
8086 |
+
$wanted_paragraphs_text = trim (substr ($position_text, 1, strlen ($position_text) - 2));
|
8087 |
+
$wanted_paragraph_ranges = array ();
|
8088 |
+
$wanted_paragraphs = array ();
|
8089 |
+
|
8090 |
+
if (strpos ($position_text, '|') !== false) {
|
8091 |
+
$items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text));
|
8092 |
+
foreach ($items as $item) {
|
8093 |
+
$wanted_paragraph_ranges []= $item;
|
8094 |
+
}
|
8095 |
+
} else $wanted_paragraph_ranges []= $wanted_paragraphs_text;
|
8096 |
+
|
8097 |
+
foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) {
|
8098 |
+
if (strpos ($wanted_paragraph_range, '-') !== false) {
|
8099 |
+
$limits = explode ('-', $wanted_paragraph_range);
|
8100 |
+
$limit_min = (int) $limits [0];
|
8101 |
+
$limit_max = (int) $limits [1];
|
8102 |
+
} else {
|
8103 |
+
$limit_min = (int) $wanted_paragraph_range;
|
8104 |
+
$limit_max = (int) $wanted_paragraph_range;
|
8105 |
+
}
|
8106 |
+
|
8107 |
+
if ($limit_min < 0) $limit_min = 0;
|
8108 |
+
else if ($limit_min > 9999) $limit_min = 9999;
|
8109 |
+
if ($limit_max < 0) $limit_max = 0;
|
8110 |
+
else if ($limit_max > 9999) $limit_max = 9999;
|
8111 |
+
|
8112 |
+
if ($limit_min > $limit_max) $limit_max = $limit_min;
|
8113 |
+
|
8114 |
+
while ($limit_max >= $limit_min) {
|
8115 |
+
$wanted_paragraphs [] = $limit_max;
|
8116 |
+
$limit_max --;
|
8117 |
+
}
|
8118 |
+
}
|
8119 |
+
|
8120 |
+
$wanted_paragraphs = array_unique ($wanted_paragraphs);
|
8121 |
+
sort ($wanted_paragraphs);
|
8122 |
+
|
8123 |
+
if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0);
|
8124 |
+
|
8125 |
+
$random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1);
|
8126 |
+
$paragraph = $wanted_paragraphs [$random_paragraph];
|
8127 |
+
|
8128 |
+
if ($paragraph == 0) {
|
8129 |
+
$paragraph = mt_rand (0, count ($paragraph_positions) - 1);
|
8130 |
+
} else $paragraph --;
|
8131 |
+
|
8132 |
+
$positions = array ($paragraph);
|
8133 |
+
|
8134 |
+
if ($debug_processing) {
|
8135 |
+
ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' => [' . implode (',', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . $paragraph + 1);
|
8136 |
+
}
|
8137 |
+
}
|
8138 |
elseif (strpos ($position_text, ',') !== false) {
|
8139 |
+
|
8140 |
+
if ($debug_processing) {
|
8141 |
+
ai_log ('BLOCK ' . $this->number . ' AFTER PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' of ' . count ($paragraph_positions) . ' available');
|
8142 |
+
}
|
8143 |
+
|
8144 |
$new_positions = array ();
|
8145 |
$positions = explode (',', str_replace (' ', '', $position_text));
|
8146 |
foreach ($positions as $index => $position) {
|
8147 |
+
if (isset ($position [0]) && strpos ($position, '[') === 0 && strpos ($position, ']') === strlen ($position) - 1) {
|
8148 |
+
$wanted_paragraphs_text = trim (substr ($position, 1, strlen ($position) - 2));
|
8149 |
+
$wanted_paragraph_ranges = array ();
|
8150 |
+
$wanted_paragraphs = array ();
|
8151 |
+
|
8152 |
+
if (strpos ($position, '|') !== false) {
|
8153 |
+
$items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text));
|
8154 |
+
foreach ($items as $item) {
|
8155 |
+
$wanted_paragraph_ranges []= $item;
|
8156 |
+
}
|
8157 |
+
} else $wanted_paragraph_ranges []= $wanted_paragraphs_text;
|
8158 |
+
|
8159 |
+
foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) {
|
8160 |
+
if (strpos ($wanted_paragraph_range, '-') !== false) {
|
8161 |
+
$limits = explode ('-', $wanted_paragraph_range);
|
8162 |
+
$limit_min = (int) $limits [0];
|
8163 |
+
$limit_max = (int) $limits [1];
|
8164 |
+
} else {
|
8165 |
+
$limit_min = (int) $wanted_paragraph_range;
|
8166 |
+
$limit_max = (int) $wanted_paragraph_range;
|
8167 |
+
}
|
8168 |
+
|
8169 |
+
if ($limit_min < 0) $limit_min = 0;
|
8170 |
+
else if ($limit_min > 9999) $limit_min = 9999;
|
8171 |
+
if ($limit_max < 0) $limit_max = 0;
|
8172 |
+
else if ($limit_max > 9999) $limit_max = 9999;
|
8173 |
+
|
8174 |
+
if ($limit_min > $limit_max) $limit_max = $limit_min;
|
8175 |
+
|
8176 |
+
while ($limit_max >= $limit_min) {
|
8177 |
+
$wanted_paragraphs [] = $limit_max;
|
8178 |
+
$limit_max --;
|
8179 |
+
}
|
8180 |
+
}
|
8181 |
+
|
8182 |
+
$wanted_paragraphs = array_unique ($wanted_paragraphs);
|
8183 |
+
sort ($wanted_paragraphs);
|
8184 |
+
|
8185 |
+
if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0);
|
8186 |
+
|
8187 |
+
$random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1);
|
8188 |
+
$paragraph = $wanted_paragraphs [$random_paragraph];
|
8189 |
+
|
8190 |
+
if ($paragraph == 0) {
|
8191 |
+
$paragraph = mt_rand (0, count ($paragraph_positions) - 1);
|
8192 |
+
} else $paragraph --;
|
8193 |
+
|
8194 |
+
$positions [$index] = $paragraph;
|
8195 |
+
|
8196 |
+
if ($debug_processing) {
|
8197 |
+
ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position) . ' => [' . implode (', ', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . $paragraph + 1);
|
8198 |
+
}
|
8199 |
+
}
|
8200 |
+
elseif (isset ($position [0]) && $position [0] == '%') {
|
8201 |
unset ($positions [$index]);
|
8202 |
|
8203 |
$position = substr ($position, 1);
|
8609 |
|
8610 |
$real_positions = array ();
|
8611 |
foreach ($positions as $position_index) $real_positions []= $position_index >= 0 ? $position_index + 1 : '*';
|
8612 |
+
if ($debug_processing && $this->number != 0 && count ($real_positions) != 0) ai_log ('BLOCK ' . $this->number . ' INSERTION POSITIONS: ' . implode (', ', $real_positions) . ' of ' . count ($paragraph_positions));
|
8613 |
|
8614 |
$min_paragraphs = intval ($this->get_paragraph_number_minimum());
|
8615 |
$max_paragraphs = intval ($this->get_paragraph_number_maximum());
|
constants.php
CHANGED
@@ -31,7 +31,7 @@ if (!defined( 'AD_INSERTER_NAME'))
|
|
31 |
define ('AD_INSERTER_NAME', 'Ad Inserter');
|
32 |
|
33 |
if (!defined( 'AD_INSERTER_VERSION'))
|
34 |
-
define ('AD_INSERTER_VERSION', '2.7.
|
35 |
|
36 |
if (!defined ('AD_INSERTER_PLUGIN_BASENAME'))
|
37 |
define ('AD_INSERTER_PLUGIN_BASENAME', plugin_basename (__FILE__));
|
@@ -760,6 +760,10 @@ define ('AI_TEXT_ENG_ENABLED', 'Enabled');
|
|
760 |
define ('AI_STICKY_WIDGET_MODE_CSS', 0);
|
761 |
define ('AI_STICKY_WIDGET_MODE_JS', 1);
|
762 |
|
|
|
|
|
|
|
|
|
763 |
define ('AI_TEXT_CSS', 'CSS');
|
764 |
define ('AI_TEXT_JS', 'JavaScript ');
|
765 |
|
@@ -905,7 +909,7 @@ define ('DEFAULT_CUSTOM_HOOK_PRIORITY', 10);
|
|
905 |
define ('DEFAULT_OUTPUT_BUFFERING', AI_OUTPUT_BUFFERING_DISABLED);
|
906 |
define ('DEFAULT_DISABLE_CACHING', AI_DISABLE_CACHING_ENABLED);
|
907 |
define ('DEFAULT_TAB_SETUP_DELAY', 100);
|
908 |
-
define ('DEFAULT_WAIT_FOR_JQUERY',
|
909 |
define ('DEFAULT_GEO_DB', AI_GEO_DB_INTERNAL);
|
910 |
define ('DEFAULT_GEO_DB_UPDATES', AI_DISABLED);
|
911 |
define ('DEFAULT_CLOSE_BUTTON', AI_CLOSE_NONE);
|
@@ -972,6 +976,10 @@ define ('DEFAULT_SET_BODY_BACKGROUND', AI_DISABLED);
|
|
972 |
define ('DEFAULT_REMOTE_MANAGEMENT', AI_DISABLED);
|
973 |
define ('DEFAULT_MANAGEMENT_IP_CHECK', AI_DISABLED);
|
974 |
define ('DEFAULT_RECAPTCHA_THRESHOLD', '0.5');
|
|
|
|
|
|
|
|
|
975 |
|
976 |
define ('AI_ADBLOCKING_DETECTION', true);
|
977 |
define ('AI_NORMAL_HEADER_STYLES', true);
|
31 |
define ('AD_INSERTER_NAME', 'Ad Inserter');
|
32 |
|
33 |
if (!defined( 'AD_INSERTER_VERSION'))
|
34 |
+
define ('AD_INSERTER_VERSION', '2.7.21');
|
35 |
|
36 |
if (!defined ('AD_INSERTER_PLUGIN_BASENAME'))
|
37 |
define ('AD_INSERTER_PLUGIN_BASENAME', plugin_basename (__FILE__));
|
760 |
define ('AI_STICKY_WIDGET_MODE_CSS', 0);
|
761 |
define ('AI_STICKY_WIDGET_MODE_JS', 1);
|
762 |
|
763 |
+
// Plugin settings menu position
|
764 |
+
define ('AI_SETTINGS_SUBMENU', 0);
|
765 |
+
define ('AI_TOP_MENU', 1);
|
766 |
+
|
767 |
define ('AI_TEXT_CSS', 'CSS');
|
768 |
define ('AI_TEXT_JS', 'JavaScript ');
|
769 |
|
909 |
define ('DEFAULT_OUTPUT_BUFFERING', AI_OUTPUT_BUFFERING_DISABLED);
|
910 |
define ('DEFAULT_DISABLE_CACHING', AI_DISABLE_CACHING_ENABLED);
|
911 |
define ('DEFAULT_TAB_SETUP_DELAY', 100);
|
912 |
+
define ('DEFAULT_WAIT_FOR_JQUERY', AI_WAIT_FOR_JQUERY_DISABLED);
|
913 |
define ('DEFAULT_GEO_DB', AI_GEO_DB_INTERNAL);
|
914 |
define ('DEFAULT_GEO_DB_UPDATES', AI_DISABLED);
|
915 |
define ('DEFAULT_CLOSE_BUTTON', AI_CLOSE_NONE);
|
976 |
define ('DEFAULT_REMOTE_MANAGEMENT', AI_DISABLED);
|
977 |
define ('DEFAULT_MANAGEMENT_IP_CHECK', AI_DISABLED);
|
978 |
define ('DEFAULT_RECAPTCHA_THRESHOLD', '0.5');
|
979 |
+
define ('DEFAULT_SETTINGS_MENU_PRIORITY', 81);
|
980 |
+
define ('DEFAULT_SETTINGS_SUBMENU_PRIORITY', 10);
|
981 |
+
define ('DEFAULT_MENU_FOR_LINK', AI_SETTINGS_SUBMENU);
|
982 |
+
|
983 |
|
984 |
define ('AI_ADBLOCKING_DETECTION', true);
|
985 |
define ('AI_NORMAL_HEADER_STYLES', true);
|
css/ai-settings.css
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
#ai-data {
|
2 |
-
font-family: "2.7.
|
3 |
}
|
4 |
|
5 |
#blocked-warning {
|
1 |
#ai-data {
|
2 |
+
font-family: "2.7.21"; /* Used for version number of the file */
|
3 |
}
|
4 |
|
5 |
#blocked-warning {
|
includes/js/ai-adb-data.js
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var ai_adb_active = false;
|
2 |
+
var ai_adb_counter = 0;
|
3 |
+
var ai_adb_act_cookie_name = "aiADB";
|
4 |
+
var ai_adb_pgv_cookie_name = "aiADB_PV";
|
5 |
+
var ai_adb_page_redirection_cookie_name = "aiADB_PR";
|
6 |
+
|
7 |
+
var ai_adb_overlay = AI_ADB_OVERLAY_WINDOW;
|
8 |
+
var ai_adb_message_window = AI_ADB_MESSAGE_WINDOW;
|
9 |
+
var ai_adb_message_undismissible = AI_FUNCB_GET_UNDISMISSIBLE_MESSAGE;
|
10 |
+
var ai_adb_message_cookie_lifetime = AI_FUNCT_GET_NO_ACTION_PERIOD;
|
11 |
+
var ai_adb_devices = AI_FUNC_GET_ADB_DEVICES;
|
12 |
+
var ai_adb_action = AI_FUNC_GET_ADB_ACTION;
|
13 |
+
var ai_adb_page_views = "AI_FUNC_GET_DELAY_ACTION";
|
14 |
+
var ai_adb_selectors = "AI_ADB_SELECTORS";
|
15 |
+
var ai_adb_redirection_url = "AI_ADB_REDIRECTION_PAGE";
|
16 |
+
|
17 |
+
var ai_block_class = 'AI_FUNC_GET_BLOCK_CLASS_NAME';
|
18 |
+
var ai_adb_content_css_begin_class = 'AI_ADB_CONTENT_CSS_BEGIN_CLASS';
|
19 |
+
var ai_adb_content_css_end_class = 'AI_ADB_CONTENT_CSS_END_CLASS';
|
20 |
+
var ai_adb_content_delete_begin_class = 'AI_ADB_CONTENT_DELETE_BEGIN_CLASS';
|
21 |
+
var ai_adb_content_delete_end_class = 'AI_ADB_CONTENT_DELETE_END_CLASS';
|
22 |
+
var ai_adb_content_replace_begin_class = 'AI_ADB_CONTENT_REPLACE_BEGIN_CLASS';
|
23 |
+
var ai_adb_content_replace_end_class = 'AI_ADB_CONTENT_REPLACE_END_CLASS';
|
24 |
+
var ai_adb_cookie_value = 'AI_CONST_AI_ADB_COOKIE_VALUE';
|
25 |
+
var ai_adb_name_1 = 'AI_CONST_AI_ADB_1_NAME';
|
26 |
+
var ai_adb_name_2 = 'AI_CONST_AI_ADB_2_NAME';
|
27 |
+
var ai_adb_attribute = AI_ADB_ATTR_NAME;
|
28 |
+
|
29 |
+
var ai_adb_message_code_1 = function () {window.AI_ADB_STATUS_MESSAGE=1}
|
30 |
+
var ai_adb_message_code_2 = function () {window.AI_ADB_STATUS_MESSAGE=2}
|
31 |
+
var ai_adb_message_code_3 = function () {window.AI_ADB_STATUS_MESSAGE=3}
|
32 |
+
var ai_adb_message_code_4 = function () {window.AI_ADB_STATUS_MESSAGE=4}
|
33 |
+
var ai_adb_message_code_5 = function () {window.AI_ADB_STATUS_MESSAGE=5}
|
34 |
+
var ai_adb_message_code_6 = function () {window.AI_ADB_STATUS_MESSAGE=6}
|
35 |
+
|
includes/js/ai-adb-data.min.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
var ai_adb_active=!1,ai_adb_counter=0,ai_adb_act_cookie_name="aiADB",ai_adb_pgv_cookie_name="aiADB_PV",ai_adb_page_redirection_cookie_name="aiADB_PR",ai_adb_overlay=AI_ADB_OVERLAY_WINDOW,ai_adb_message_window=AI_ADB_MESSAGE_WINDOW,ai_adb_message_undismissible=AI_FUNCB_GET_UNDISMISSIBLE_MESSAGE,ai_adb_message_cookie_lifetime=AI_FUNCT_GET_NO_ACTION_PERIOD,ai_adb_devices=AI_FUNC_GET_ADB_DEVICES,ai_adb_action=AI_FUNC_GET_ADB_ACTION,ai_adb_page_views="AI_FUNC_GET_DELAY_ACTION",ai_adb_selectors="AI_ADB_SELECTORS",
|
2 |
+
ai_adb_redirection_url="AI_ADB_REDIRECTION_PAGE",ai_block_class="AI_FUNC_GET_BLOCK_CLASS_NAME",ai_adb_content_css_begin_class="AI_ADB_CONTENT_CSS_BEGIN_CLASS",ai_adb_content_css_end_class="AI_ADB_CONTENT_CSS_END_CLASS",ai_adb_content_delete_begin_class="AI_ADB_CONTENT_DELETE_BEGIN_CLASS",ai_adb_content_delete_end_class="AI_ADB_CONTENT_DELETE_END_CLASS",ai_adb_content_replace_begin_class="AI_ADB_CONTENT_REPLACE_BEGIN_CLASS",ai_adb_content_replace_end_class="AI_ADB_CONTENT_REPLACE_END_CLASS",ai_adb_cookie_value=
|
3 |
+
"AI_CONST_AI_ADB_COOKIE_VALUE",ai_adb_name_1="AI_CONST_AI_ADB_1_NAME",ai_adb_name_2="AI_CONST_AI_ADB_2_NAME",ai_adb_attribute=AI_ADB_ATTR_NAME,ai_adb_message_code_1=function(){window.AI_ADB_STATUS_MESSAGE=1},ai_adb_message_code_2=function(){window.AI_ADB_STATUS_MESSAGE=2},ai_adb_message_code_3=function(){window.AI_ADB_STATUS_MESSAGE=3},ai_adb_message_code_4=function(){window.AI_ADB_STATUS_MESSAGE=4},ai_adb_message_code_5=function(){window.AI_ADB_STATUS_MESSAGE=5},ai_adb_message_code_6=function(){window.AI_ADB_STATUS_MESSAGE=
|
4 |
+
6};
|
includes/js/ai-adb-try.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
try {
|
2 |
-
var ai_adb = window.jQuery && window.jQuery.fn, ai_check = ai_adb,
|
3 |
}
|
4 |
catch (e) {
|
5 |
-
|
6 |
|
7 |
document.body.prepend (
|
8 |
Object.assign (document.createElement ('AI_ADB_MSG_TAG'), {
|
@@ -11,6 +11,5 @@ catch (e) {
|
|
11 |
})
|
12 |
);
|
13 |
|
14 |
-
|
15 |
}
|
16 |
-
|
1 |
try {
|
2 |
+
var ai_adb = window.jQuery && window.jQuery.fn, ai_check = ai_adb, ai_adb_overlay = String (ai_check).charCodeAt (ai_adb), ai_check_block = ai_adb;
|
3 |
}
|
4 |
catch (e) {
|
5 |
+
AI_ADB_HTML=1;
|
6 |
|
7 |
document.body.prepend (
|
8 |
Object.assign (document.createElement ('AI_ADB_MSG_TAG'), {
|
11 |
})
|
12 |
);
|
13 |
|
14 |
+
AI_ADB_HTML=2
|
15 |
}
|
|
includes/js/ai-adb-try.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
try{var ai_adb=window.jQuery&&window.jQuery.fn,ai_check=ai_adb,
|
1 |
+
try{var ai_adb=window.jQuery&&window.jQuery.fn,ai_check=ai_adb,ai_adb_overlay=String(ai_check).charCodeAt(ai_adb),ai_check_block=ai_adb}catch(a){AI_ADB_HTML=1,document.body.prepend(Object.assign(document.createElement("AI_ADB_MSG_TAG"),{style:"AI_ADB_MSG_STYLE",innerHTML:"AI_ADB_MSG_HTML"})),AI_ADB_HTML=2};
|
includes/js/ai-adb.js
CHANGED
@@ -1,21 +1,8 @@
|
|
1 |
-
|
2 |
-
var ai_adb_counter = 0;
|
3 |
-
var ai_adb_act_cookie_name = "aiADB";
|
4 |
-
var ai_adb_pgv_cookie_name = "aiADB_PV";
|
5 |
-
var ai_adb_page_redirection_cookie_name = "aiADB_PR";
|
6 |
-
|
7 |
-
var ai_adb_overlay = AI_ADB_OVERLAY_WINDOW;
|
8 |
-
var ai_adb_message_window = AI_ADB_MESSAGE_WINDOW;
|
9 |
-
var ai_adb_message_undismissible = AI_FUNCB_GET_UNDISMISSIBLE_MESSAGE;
|
10 |
-
var ai_adb_message_cookie_lifetime = AI_FUNCT_GET_NO_ACTION_PERIOD;
|
11 |
-
var ai_adb_devices = AI_FUNC_GET_ADB_DEVICES;
|
12 |
-
var ai_adb_action = AI_FUNC_GET_ADB_ACTION;
|
13 |
-
var ai_adb_page_views = "AI_FUNC_GET_DELAY_ACTION";
|
14 |
-
var ai_adb_selectors = "AI_ADB_SELECTORS";
|
15 |
-
var ai_adb_redirection_url = "AI_ADB_REDIRECTION_PAGE";
|
16 |
|
17 |
function ai_adb_process_content () {
|
18 |
-
(function ($) {
|
|
|
19 |
|
20 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 1
|
21 |
// var ai_adb_debugging = false;
|
@@ -23,117 +10,237 @@ function ai_adb_process_content () {
|
|
23 |
if (ai_adb_debugging) console.log ('');
|
24 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING CONTENT PROCESSING", ai_adb_active);
|
25 |
|
26 |
-
$(".AI_ADB_CONTENT_CSS_BEGIN_CLASS").each (function () {
|
27 |
-
|
|
|
28 |
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
|
33 |
-
if (ai_adb_parent.closest ('.
|
34 |
-
|
|
|
|
|
|
|
|
|
35 |
}
|
36 |
|
37 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
-
var ai_adb_selectors = $(this).data ("selectors");
|
43 |
-
if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
if (ai_adb_debugging) console.log ('AI AD BLOCKING CSS, css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
|
46 |
|
47 |
var ai_adb_action = false;
|
48 |
-
$(ai_adb_parent).find ('.AI_ADB_CONTENT_CSS_BEGIN_CLASS, .AI_ADB_CONTENT_CSS_END_CLASS, ' + ai_adb_selectors).each (function () {
|
49 |
-
|
50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
else if (ai_adb_action) {
|
52 |
-
var ai_adb_style = $(this).attr ("style");
|
53 |
-
|
|
|
|
|
54 |
else {
|
55 |
ai_adb_style = ai_adb_style.trim ();
|
56 |
if (ai_adb_style != '' && ai_adb_style [ai_adb_style.length - 1] != ';') {
|
57 |
ai_adb_style = ai_adb_style + ';';
|
58 |
}
|
59 |
}
|
|
|
|
|
|
|
60 |
|
61 |
-
if (ai_adb_debugging) console.log ("AI AD BLOCKING CSS:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
|
|
|
|
62 |
|
63 |
-
$(this).attr ("style", ai_adb_style + ' ' + ai_adb_css);
|
|
|
|
|
64 |
}
|
65 |
});
|
66 |
});
|
67 |
|
68 |
-
$(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS").each (function () {
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
}
|
74 |
|
75 |
-
if (ai_adb_parent.closest ('.AI_FUNC_GET_BLOCK_CLASS_NAME').length) {
|
76 |
-
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
|
79 |
-
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")+"\"");
|
80 |
-
|
81 |
-
|
82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE, selectors='" + ai_adb_selectors + "'");
|
85 |
|
86 |
var ai_adb_action = false;
|
87 |
|
88 |
-
$(ai_adb_parent).find ('.AI_ADB_CONTENT_DELETE_BEGIN_CLASS, .AI_ADB_CONTENT_DELETE_END_CLASS, ' + ai_adb_selectors).each (function () {
|
89 |
-
|
90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
else if (ai_adb_action) {
|
92 |
-
if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
|
|
|
|
93 |
|
94 |
-
$(this).remove ();
|
|
|
|
|
95 |
}
|
96 |
});
|
97 |
|
98 |
});
|
99 |
|
100 |
-
$(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS").each (function () {
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
}
|
106 |
|
107 |
-
if (ai_adb_parent.closest ('.AI_FUNC_GET_BLOCK_CLASS_NAME').length) {
|
108 |
-
|
|
|
|
|
|
|
|
|
109 |
}
|
110 |
|
111 |
-
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")+"\"");
|
|
|
|
|
112 |
|
113 |
-
var ai_adb_text = $(this).data ("text");
|
114 |
-
if (typeof ai_adb_text == "undefined") ai_adb_text = "";
|
|
|
|
|
|
|
|
|
|
|
115 |
|
116 |
-
var ai_adb_css = $(this).data ("css");
|
117 |
-
if (typeof ai_adb_css == "undefined") ai_adb_css = "";
|
|
|
|
|
|
|
|
|
|
|
118 |
|
119 |
-
var ai_adb_selectors = $(this).data ("selectors");
|
120 |
-
if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
|
|
|
|
|
122 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE, text=\'" + ai_adb_text + '\'', 'css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
|
123 |
|
124 |
var ai_adb_action = false;
|
125 |
-
$(ai_adb_parent).find ('.AI_ADB_CONTENT_REPLACE_BEGIN_CLASS, .AI_ADB_CONTENT_REPLACE_END_CLASS, ' + ai_adb_selectors).each (function () {
|
126 |
-
|
127 |
-
|
|
|
|
|
|
|
|
|
|
|
128 |
else if (ai_adb_action) {
|
129 |
if (ai_adb_text.length != 0) {
|
130 |
-
var n = Math.round ($(this).text ().length / (ai_adb_text.length + 1));
|
131 |
-
|
132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
|
134 |
if (ai_adb_css != '') {
|
135 |
-
var ai_adb_style = $(this).attr ("style");
|
136 |
-
|
|
|
|
|
|
|
|
|
137 |
else {
|
138 |
ai_adb_style = ai_adb_style.trim ();
|
139 |
if (ai_adb_style != '' && ai_adb_style [ai_adb_style.length - 1] != ';') {
|
@@ -143,35 +250,53 @@ function ai_adb_process_content () {
|
|
143 |
if (ai_adb_css != '') {
|
144 |
ai_adb_css = ' ' + ai_adb_css;
|
145 |
}
|
146 |
-
$(this).attr ("style", ai_adb_style + ai_adb_css);
|
|
|
|
|
147 |
}
|
148 |
|
149 |
-
if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
|
|
|
|
150 |
}
|
151 |
});
|
152 |
});
|
153 |
|
154 |
-
}(jQuery));
|
|
|
155 |
}
|
156 |
|
157 |
function ai_adb_process_blocks (element) {
|
158 |
-
(function ($) {
|
|
|
159 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 2
|
160 |
// var ai_adb_debugging = false;
|
161 |
|
162 |
if (typeof element == 'undefined') {
|
163 |
-
element = $('body');
|
|
|
|
|
164 |
if (ai_adb_debugging) console.log ('');
|
165 |
}
|
166 |
-
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
if (typeof ai_adb_data === "string") {
|
169 |
var ai_adb_active = ai_adb_data == b64d ("bWFzaw==");
|
170 |
} else {
|
171 |
var ai_adb_active = null;
|
172 |
}
|
173 |
|
174 |
-
if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions:", ai_adb_active, $(element).prop ("tagName") + '.' + $(element).attr ('class'));
|
|
|
|
|
175 |
|
176 |
if (typeof ai_adb_data === "string" && typeof ai_adb_active === "boolean") {
|
177 |
|
@@ -185,46 +310,76 @@ function ai_adb_process_blocks (element) {
|
|
185 |
var code_insertion = false;
|
186 |
|
187 |
// Don't use data () as the value will be cached - wrong value for tracking
|
188 |
-
$(".ai-adb-hide", element).each (function () {
|
189 |
-
|
190 |
-
|
191 |
-
$(this).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
|
193 |
// Disable tracking
|
194 |
-
var wrapping_div = $(this).closest ('div[data-ai]');
|
195 |
-
|
196 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
if (typeof data !== "undefined" && data.constructor === Array) {
|
198 |
data [1] = "";
|
199 |
|
200 |
-
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING ", b64d (wrapping_div.
|
201 |
|
202 |
-
wrapping_div.attr ("data-ai", b64e (JSON.stringify (data)));
|
|
|
|
|
203 |
}
|
204 |
}
|
205 |
|
206 |
-
ai_disable_processing ($(this));
|
|
|
207 |
|
208 |
if (ai_adb_debugging) {
|
209 |
-
var debug_info = $(this).data ("ai-debug");
|
210 |
-
console.log ("AI AD BLOCKING HIDE", typeof debug_info != "undefined" ? debug_info : "");
|
|
|
|
|
211 |
}
|
212 |
});
|
213 |
|
214 |
// after hide to update tracking data on replace
|
215 |
// Don't use data () as the value will be cached - wrong value for tracking
|
216 |
-
$(".ai-adb-show", element).each (function () {
|
217 |
-
|
|
|
|
|
|
|
|
|
|
|
218 |
|
219 |
-
$(this).removeClass ('ai-adb-show');
|
|
|
|
|
220 |
|
221 |
-
if (typeof $(this).data ('code') != 'undefined') {
|
222 |
-
|
|
|
|
|
|
|
|
|
223 |
|
224 |
if (ai_adb_debugging) console.log ('AI AD BLOCKING SHOW INSERT CODE');
|
225 |
if (ai_adb_debugging) console.log ('');
|
226 |
|
227 |
-
$(this).append (adb_code);
|
|
|
228 |
|
229 |
code_insertion = true;
|
230 |
code_inserted = true;
|
@@ -235,26 +390,41 @@ function ai_adb_process_blocks (element) {
|
|
235 |
}
|
236 |
}
|
237 |
|
238 |
-
var tracking_data = $(this).attr ('data-ai-tracking');
|
239 |
-
if (typeof tracking_data != 'undefined') {
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
if (typeof data !== "undefined" && data.constructor === Array) {
|
245 |
data [1] = "";
|
246 |
tracking_data = b64e (JSON.stringify (data));
|
247 |
}
|
248 |
}
|
249 |
|
250 |
-
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING ", b64d (wrapping_div.attr ("data-ai")), ' <= ', b64d (tracking_data));
|
|
|
|
|
251 |
|
252 |
-
wrapping_div.attr ("data-ai", tracking_data);
|
|
|
|
|
253 |
}
|
254 |
}
|
255 |
if (ai_adb_debugging) {
|
256 |
-
var debug_info = $(this).data ("ai-debug");
|
257 |
-
console.log ("AI AD BLOCKING SHOW", typeof debug_info != "undefined" ? debug_info : "");
|
|
|
|
|
258 |
}
|
259 |
});
|
260 |
} while (code_insertion);
|
@@ -271,53 +441,92 @@ function ai_adb_process_blocks (element) {
|
|
271 |
setTimeout (ai_adb_process_content, 10);
|
272 |
} else {
|
273 |
// Prevent tracking if block was not displayed because of cookie
|
274 |
-
$(".ai-adb-hide", element).each (function () {
|
275 |
-
|
|
|
|
|
|
|
|
|
|
|
276 |
|
277 |
-
$(this).removeClass ('ai-adb-hide');
|
|
|
|
|
278 |
|
279 |
-
if ($(this).outerHeight () == 0 && $(this).closest ('.ai-adb-show').length == 0) {
|
|
|
|
|
280 |
// Top level (not nested) block
|
281 |
-
var wrapper = $(this).closest ('div[data-ai]');
|
282 |
-
|
283 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
284 |
if (typeof data !== "undefined" && data.constructor === Array) {
|
285 |
data [1] = "";
|
286 |
|
287 |
-
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING DISABLED: ", b64d (wrapper.attr ("data-ai")), ' <= ', JSON.stringify (data));
|
|
|
|
|
288 |
|
289 |
-
wrapper.attr ("data-ai", b64e (JSON.stringify (data)));
|
|
|
|
|
290 |
|
291 |
// Hide block (wrapping div with margin)
|
292 |
-
wrapper.addClass ('ai-viewport-0').css ("display", "none");
|
|
|
|
|
|
|
293 |
}
|
294 |
}
|
295 |
|
296 |
}
|
297 |
});
|
298 |
|
299 |
-
$(".ai-adb-show", element).each (function () {
|
300 |
-
|
|
|
|
|
|
|
|
|
301 |
|
302 |
-
$(this).removeClass ('ai-adb-show');
|
|
|
|
|
303 |
|
304 |
-
if (ai_adb_debugging) console.log ('AI AD BLOCKING SHOW disable processing', $(this).prop ("tagName") + '.' + $(this).attr ('class'));
|
|
|
|
|
305 |
});
|
306 |
}
|
307 |
}
|
308 |
|
309 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions END");
|
310 |
-
}(jQuery));
|
|
|
311 |
}
|
312 |
|
313 |
ai_adb_detection_type_log = function (n) {
|
314 |
var type = ai_adb_detection_type (n);
|
315 |
-
var ai_adb_events = jQuery('#ai-adb-events');
|
316 |
-
|
317 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
318 |
if (message != '') message = message + ', '; else message = message + ', EVENTS: ';
|
319 |
message = message + n;
|
320 |
-
ai_adb_events.text (message);
|
|
|
|
|
321 |
}
|
322 |
return type;
|
323 |
}
|
@@ -368,6 +577,12 @@ ai_adb_detection_type = function (n) {
|
|
368 |
case 12:
|
369 |
return "12 300x250 js";
|
370 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
371 |
default:
|
372 |
return n;
|
373 |
break;
|
@@ -382,36 +597,67 @@ var ai_adb_detected = function (n) {
|
|
382 |
}
|
383 |
|
384 |
var ai_disable_processing = function (element) {
|
385 |
-
jQuery(element).find ('.ai-lazy').removeClass ('ai-lazy'); // Disable lazy loading
|
386 |
-
jQuery(element).find ('.ai-manual').removeClass ('ai-manual'); // Disable manual loading
|
387 |
-
jQuery(element).find ('.ai-rotate').removeClass ('ai-unprocessed').removeAttr ('data-info'); // Disable rotations
|
388 |
-
jQuery(element).find ('.ai-list-data').removeClass ('ai-list-data'); // Disable lists
|
389 |
-
jQuery(element).find ('.ai-ip-data').removeClass ('ai-ip-data'); // Disable IP lists
|
390 |
-
jQuery(element).find ('[data-code]').removeAttr ('data-code'); // Disable insertions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
}
|
392 |
|
393 |
-
var ai_adb_detected_actions = function(n) {
|
394 |
|
395 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 4
|
396 |
// var ai_adb_debugging = false;
|
397 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
if (ai_adb_debugging && n == 0) console.log ('');
|
399 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING DETECTED", ai_adb_detection_type_log (n));
|
400 |
|
401 |
if (!ai_adb_active) {
|
402 |
ai_adb_active = true;
|
403 |
|
404 |
-
jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME, b64d ("bWFzaw=="));
|
|
|
|
|
405 |
|
406 |
-
(function ($) {
|
|
|
407 |
|
408 |
-
$(window).ready(function () {
|
409 |
-
ai_adb_process_blocks ();
|
410 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
411 |
// if (code_inserted && typeof ai_process_elements == 'function') {
|
412 |
// setTimeout (ai_process_elements, 20);
|
413 |
// }
|
414 |
-
}
|
|
|
|
|
415 |
|
416 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING action check");
|
417 |
// AiCookies.remove (ai_adb_pgv_cookie_name, {path: "/"});
|
@@ -451,7 +697,8 @@ var ai_adb_detected_actions = function(n) {
|
|
451 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING", ai_adb_page_view_delay, "page views not reached, no action");
|
452 |
AiCookies.set (ai_adb_pgv_cookie_name, ai_adb_page_view_counter, {expires: 365, path: "/"});
|
453 |
window.ai_d1 = ai_adb_page_view_counter;
|
454 |
-
window.AI_ADB_STATUS_MESSAGE=1;
|
|
|
455 |
return;
|
456 |
}
|
457 |
if (ai_adb_page_view_repeat != 0) {
|
@@ -459,7 +706,8 @@ var ai_adb_detected_actions = function(n) {
|
|
459 |
if ((ai_adb_page_view_counter - ai_adb_page_view_delay - 1) % ai_adb_page_view_repeat != 0) {
|
460 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING every", ai_adb_page_view_repeat, "page views, no action");
|
461 |
window.ai_d1 = ai_adb_page_view_counter;
|
462 |
-
window.AI_ADB_STATUS_MESSAGE=1;
|
|
|
463 |
return;
|
464 |
}
|
465 |
}
|
@@ -469,14 +717,15 @@ var ai_adb_detected_actions = function(n) {
|
|
469 |
|
470 |
var cookie = AiCookies.get (ai_adb_act_cookie_name);
|
471 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING cookie:", cookie);
|
472 |
-
if (typeof cookie != "undefined" && cookie ==
|
473 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING valid cookie detected, no action");
|
474 |
-
window.AI_ADB_STATUS_MESSAGE=2;
|
|
|
475 |
return;
|
476 |
}
|
477 |
|
478 |
else if (ai_adb_debugging) console.log ("AI AD BLOCKING invalid cookie");
|
479 |
-
AiCookies.set (ai_adb_act_cookie_name,
|
480 |
} else
|
481 |
AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
482 |
|
@@ -484,45 +733,69 @@ var ai_adb_detected_actions = function(n) {
|
|
484 |
|
485 |
if (ai_adb_action == 0) {
|
486 |
ai_dummy = 16; // Do not remove - to prevent optimization
|
487 |
-
window.AI_ADB_STATUS_MESSAGE=6;
|
|
|
488 |
ai_dummy ++; // Do not remove - to prevent optimization
|
489 |
} else {
|
490 |
-
window.AI_ADB_STATUS_MESSAGE=3;
|
|
|
491 |
ai_dummy = 13; // Do not remove - to prevent optimization
|
492 |
}
|
493 |
|
494 |
switch (ai_adb_action) {
|
495 |
case 1:
|
496 |
if (!ai_adb_message_undismissible) {
|
497 |
-
ai_adb_overlay.click (function () {
|
498 |
-
|
499 |
-
|
|
|
|
|
|
|
|
|
500 |
});
|
501 |
-
ai_adb_message_window.click (function () {
|
502 |
-
|
503 |
-
|
|
|
|
|
|
|
|
|
504 |
});
|
505 |
-
window.onkeydown = function( event ) {
|
|
|
|
|
506 |
if (event.keyCode === 27 ) {
|
507 |
ai_adb_overlay.click ();
|
508 |
ai_adb_message_window.click ();
|
509 |
}
|
510 |
-
}
|
511 |
|
512 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE click detection installed");
|
513 |
|
514 |
} else {
|
515 |
// AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
516 |
|
517 |
-
ai_adb_overlay.find
|
518 |
-
ai_adb_message_window.find ('[style*="cursor"]').css ("cursor", "no-drop");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
519 |
}
|
520 |
|
521 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE");
|
522 |
|
523 |
-
var body_children = $(b64d ("Ym9keQ==")).children ();
|
524 |
-
body_children.eq (Math.floor (Math.random() * body_children.length)).after (ai_adb_overlay);
|
525 |
-
body_children.eq (Math.floor (Math.random() * body_children.length)).after (ai_adb_message_window);
|
|
|
|
|
|
|
|
|
526 |
|
527 |
break;
|
528 |
case 2:
|
@@ -563,7 +836,8 @@ var ai_adb_detected_actions = function(n) {
|
|
563 |
break;
|
564 |
}
|
565 |
|
566 |
-
}(jQuery));
|
|
|
567 |
}
|
568 |
}
|
569 |
|
@@ -589,10 +863,13 @@ var ai_adb_undetected_actions = function (n) {
|
|
589 |
if (!ai_adb_active && ai_adb_counter == 4) {
|
590 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING NOT DETECTED");
|
591 |
|
592 |
-
jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME, b64d ("Y2xlYXI="));
|
|
|
|
|
593 |
|
594 |
ai_dummy = 11; // Do not remove - to prevent optimization
|
595 |
-
window.AI_ADB_STATUS_MESSAGE=4; // Check replacement code {}
|
|
|
596 |
ai_dummy = 14; // Do not remove - to prevent optimization
|
597 |
|
598 |
// // Prevent tracking if block was not displayed because of cookie
|
@@ -646,10 +923,14 @@ var ai_adb_undetected_actions = function (n) {
|
|
646 |
}
|
647 |
}
|
648 |
|
649 |
-
if (AI_DBG_AI_DEBUG_AD_BLOCKING) jQuery (document).ready (function () {ai_adb_detected (0)});
|
|
|
|
|
650 |
|
651 |
-
jQuery (document).ready (function ($) {
|
652 |
-
$(window).ready (function () {
|
|
|
|
|
653 |
|
654 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 6
|
655 |
// var ai_adb_debugging = false;
|
@@ -657,14 +938,18 @@ jQuery (document).ready (function ($) {
|
|
657 |
// var ai_debugging_active = typeof ai_adb_fe_dbg !== 'undefined';
|
658 |
ai_debugging_active = typeof ai_adb_fe_dbg !== 'undefined';
|
659 |
|
660 |
-
setTimeout (function() {
|
661 |
-
$("#ai-adb-bar").click (function () {
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
|
|
|
|
|
|
|
|
668 |
|
669 |
// if (jQuery("#banner-advert-container").length) {
|
670 |
// if ($("#banner-advert-container img").length > 0) {
|
@@ -679,33 +964,54 @@ jQuery (document).ready (function ($) {
|
|
679 |
var ai_adb_el_counter = 0;
|
680 |
var ai_adb_el_zero = 0;
|
681 |
var ai_adb_selector = ai_adb_selectors.split (",");
|
682 |
-
$.each (ai_adb_selector, function (i) {
|
|
|
|
|
683 |
ai_adb_selector [i] = ai_adb_selector [i].trim ();
|
684 |
|
685 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING selector", ai_adb_selector [i]);
|
686 |
|
687 |
-
if ($(ai_adb_selector [i]).length != 0) {
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
703 |
|
704 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING effective height:", outer_height);
|
705 |
|
706 |
ai_adb_el_counter ++;
|
707 |
if (outer_height === 0) {
|
708 |
-
$ (document).ready (function () {if (!ai_adb_active || ai_debugging_active) ai_adb_detected (4)});
|
|
|
|
|
709 |
ai_adb_el_zero ++;
|
710 |
if (!ai_debugging_active) return false;
|
711 |
}
|
@@ -714,11 +1020,15 @@ jQuery (document).ready (function ($) {
|
|
714 |
|
715 |
}
|
716 |
});
|
717 |
-
if (ai_adb_el_counter != 0 && ai_adb_el_zero == 0) $(document).ready (function () {ai_adb_undetected (4)});
|
|
|
|
|
718 |
}
|
719 |
|
720 |
-
});
|
721 |
-
});
|
|
|
|
|
722 |
|
723 |
function ai_adb_get_script (ai_adb_script, ai_adb_action) {
|
724 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 7
|
@@ -763,7 +1073,10 @@ function ai_adb_get_script (ai_adb_script, ai_adb_action) {
|
|
763 |
head.appendChild (script);
|
764 |
};
|
765 |
|
766 |
-
jQuery (window).on ('load', function () {
|
|
|
|
|
|
|
767 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 8
|
768 |
// var ai_adb_debugging = false;
|
769 |
|
@@ -811,7 +1124,7 @@ jQuery (window).on ('load', function () {
|
|
811 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING window load");
|
812 |
|
813 |
function ai_adb_1 () {
|
814 |
-
if (!document.getElementById (
|
815 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (1);
|
816 |
} else {
|
817 |
ai_adb_undetected (1);
|
@@ -819,7 +1132,9 @@ jQuery (window).on ('load', function () {
|
|
819 |
}
|
820 |
|
821 |
function ai_adb_2 () {
|
822 |
-
if (typeof window.AI_CONST_AI_ADB_2_NAME == "undefined") {
|
|
|
|
|
823 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (2);
|
824 |
} else {
|
825 |
ai_adb_undetected (2);
|
@@ -845,32 +1160,69 @@ jQuery (window).on ('load', function () {
|
|
845 |
function ai_adb_external_scripts () {
|
846 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING check external scripts");
|
847 |
|
848 |
-
var element = jQuery (b64d ("I2FpLWFkYi1nYQ=="));
|
849 |
-
if (element.length) {
|
850 |
-
|
|
|
|
|
|
|
|
|
|
|
851 |
ai_adb_undetected (5);
|
852 |
} else {
|
853 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (5);
|
854 |
}
|
855 |
}
|
856 |
|
857 |
-
var element = jQuery (b64d ("I2FpLWFkYi1tbg=="));
|
858 |
-
if (element.length) {
|
859 |
-
|
|
|
|
|
|
|
|
|
|
|
860 |
ai_adb_undetected (6);
|
861 |
} else {
|
862 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (6);
|
863 |
}
|
864 |
}
|
865 |
|
866 |
-
var element = jQuery (b64d ("I2FpLWFkYi1kYmxjbGs="));
|
867 |
-
if (element.length) {
|
868 |
-
|
|
|
|
|
|
|
|
|
|
|
869 |
ai_adb_undetected (8);
|
870 |
} else {
|
871 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (8);
|
872 |
}
|
873 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
874 |
}
|
875 |
|
876 |
setTimeout (function() {
|
@@ -893,36 +1245,68 @@ jQuery (window).on ('load', function () {
|
|
893 |
|
894 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING delayed checks 1, 2, 3, 11, 12");
|
895 |
|
896 |
-
if (jQuery(b64d ("I2FpLWFkYi1hZHM=")).length) {
|
897 |
-
|
|
|
|
|
898 |
ai_adb_get_script ('ads', ai_adb_1);
|
899 |
} else ai_adb_1 ();
|
900 |
}
|
901 |
|
902 |
-
if (jQuery(b64d ("I2FpLWFkYi1zcG9uc29ycw==")).length) {
|
903 |
-
|
|
|
|
|
|
|
904 |
ai_adb_get_script ('sponsors', ai_adb_2);
|
905 |
} else ai_adb_2 ();
|
906 |
}
|
907 |
|
908 |
var banner_advert_container = b64d ("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVy");
|
909 |
var banner_advert_container_img = b64d ("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVyIGltZw==");
|
910 |
-
if (jQuery(banner_advert_container).length) {
|
911 |
-
|
912 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
913 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (3);
|
914 |
} else ai_adb_undetected (3);
|
915 |
-
jQuery(banner_advert_container_img).remove();
|
|
|
|
|
916 |
}
|
917 |
}
|
918 |
|
919 |
-
if (jQuery(b64d ("I2FpLWFkYi1iYW5uZXI=")).length) {
|
|
|
|
|
920 |
ai_adb_11 ();
|
921 |
}
|
922 |
|
923 |
-
if (jQuery(b64d ("I2FpLWFkYi0zMDB4MjUw")).length) {
|
|
|
|
|
924 |
ai_adb_12 ();
|
925 |
}
|
926 |
}, 1150);
|
927 |
});
|
928 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
if (typeof ai_adb_action !== 'undefined') {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
function ai_adb_process_content () {
|
4 |
+
// (function ($) {
|
5 |
+
// ***
|
6 |
|
7 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 1
|
8 |
// var ai_adb_debugging = false;
|
10 |
if (ai_adb_debugging) console.log ('');
|
11 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING CONTENT PROCESSING", ai_adb_active);
|
12 |
|
13 |
+
// $(".AI_ADB_CONTENT_CSS_BEGIN_CLASS").each (function () {
|
14 |
+
// ***
|
15 |
+
document.querySelectorAll ('.' + ai_adb_content_css_begin_class).forEach ((el, index) => {
|
16 |
|
17 |
+
// var ai_adb_parent = $(this).parent ();
|
18 |
+
// ***
|
19 |
+
var ai_adb_parent = el.parentElement;
|
20 |
|
21 |
+
// if (ai_adb_parent.closest ('.ai-debug-block').length) {
|
22 |
+
// ***
|
23 |
+
if (ai_adb_parent.closest ('.ai-debug-block') != null) {
|
24 |
+
// ai_adb_parent = ai_adb_parent.parent ().parent ();
|
25 |
+
// ***
|
26 |
+
ai_adb_parent = ai_adb_parent.parentElement.parentElement;
|
27 |
}
|
28 |
|
29 |
+
// if (ai_adb_parent.closest ('.AI_FUNC_GET_BLOCK_CLASS_NAME') != null) {
|
30 |
+
if (ai_adb_parent.closest ('.' + ai_block_class) != null) {
|
31 |
+
// ai_adb_parent = ai_adb_parent.parent ();
|
32 |
+
// ***
|
33 |
+
ai_adb_parent = ai_adb_parent.parentElement;
|
34 |
+
}
|
35 |
|
36 |
+
// 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")+"\"");
|
37 |
+
// ***
|
38 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING parent", ai_adb_parent.tagName, ai_adb_parent.getAttribute ("id") != null ? "id=\""+ ai_adb_parent.getAttribute ("id")+"\"" :'', ai_adb_parent.getAttribute ("class") != null ? "class=\""+ ai_adb_parent.getAttribute ("class")+"\"":'');
|
39 |
+
|
40 |
+
// ***
|
41 |
+
var ai_adb_css = "display: none !important;";
|
42 |
+
if (typeof el.getAttribute ("data-css") != "undefined") {
|
43 |
+
// var ai_adb_css = $(this).data ("css");
|
44 |
+
// ***
|
45 |
+
ai_adb_css = el.dataset.css;
|
46 |
+
// if (typeof ai_adb_css == "undefined") ai_adb_css = "display: none !important;";
|
47 |
+
}
|
48 |
|
49 |
+
// var ai_adb_selectors = $(this).data ("selectors");
|
50 |
+
// if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
51 |
+
// ***
|
52 |
+
var ai_adb_selectors = "p";
|
53 |
+
if (el.getAttribute ("data-selectors") != null) {
|
54 |
+
var el_selectors = el.dataset.selectors;
|
55 |
+
if (el_selectors == '') el_selectors = "p";
|
56 |
+
ai_adb_selectors = el_selectors;
|
57 |
+
}
|
58 |
|
59 |
if (ai_adb_debugging) console.log ('AI AD BLOCKING CSS, css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
|
60 |
|
61 |
var ai_adb_action = false;
|
62 |
+
// $(ai_adb_parent).find ('.AI_ADB_CONTENT_CSS_BEGIN_CLASS, .AI_ADB_CONTENT_CSS_END_CLASS, ' + ai_adb_selectors).each (function () {
|
63 |
+
// ***
|
64 |
+
ai_adb_parent.querySelectorAll ('.' + ai_adb_content_css_begin_class +', .' + ai_adb_content_css_end_class + ', ' + ai_adb_selectors).forEach ((element, index) => {
|
65 |
+
// if ($(this).hasClass ("AI_ADB_CONTENT_CSS_BEGIN_CLASS")) {$(this).remove (); ai_adb_action = true;}
|
66 |
+
// ***
|
67 |
+
if (element.classList.contains (ai_adb_content_css_begin_class)) {element.remove (); ai_adb_action = true;}
|
68 |
+
// else if ($(this).hasClass ("AI_ADB_CONTENT_CSS_END_CLASS")) {$(this).remove (); ai_adb_action = false;}
|
69 |
+
// ***
|
70 |
+
else if (element.classList.contains (ai_adb_content_css_end_class)) {element.remove (); ai_adb_action = false;}
|
71 |
else if (ai_adb_action) {
|
72 |
+
// var ai_adb_style = $(this).attr ("style");
|
73 |
+
// ***
|
74 |
+
var ai_adb_style = element.getAttribute ("style");
|
75 |
+
if (ai_adb_style == null) ai_adb_style = "";
|
76 |
else {
|
77 |
ai_adb_style = ai_adb_style.trim ();
|
78 |
if (ai_adb_style != '' && ai_adb_style [ai_adb_style.length - 1] != ';') {
|
79 |
ai_adb_style = ai_adb_style + ';';
|
80 |
}
|
81 |
}
|
82 |
+
if (ai_adb_css != '') {
|
83 |
+
ai_adb_css = ' ' + ai_adb_css;
|
84 |
+
}
|
85 |
|
86 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING CSS:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
87 |
+
// ***
|
88 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING CSS:", element.tagName, element.getAttribute ("id") != null ? "id=\""+ element.getAttribute ("id")+"\"":'', element.getAttribute ("class") != null ? "class=\""+ element.getAttribute ("class")+"\"":'');
|
89 |
|
90 |
+
// $(this).attr ("style", ai_adb_style + ' ' + ai_adb_css);
|
91 |
+
// ***
|
92 |
+
element.setAttribute ("style", ai_adb_style + ai_adb_css);
|
93 |
}
|
94 |
});
|
95 |
});
|
96 |
|
97 |
+
// $(".AI_ADB_CONTENT_DELETE_BEGIN_CLASS").each (function () {
|
98 |
+
// ***
|
99 |
+
document.querySelectorAll ('.' + ai_adb_content_delete_begin_class).forEach ((el, index) => {
|
100 |
+
// var ai_adb_parent = $(this).parent ();
|
101 |
+
// ***
|
102 |
+
var ai_adb_parent = el.parentElement;
|
103 |
+
|
104 |
+
// if (ai_adb_parent.closest ('.ai-debug-block').length) {
|
105 |
+
// ***
|
106 |
+
if (ai_adb_parent.closest ('.ai-debug-block') != null) {
|
107 |
+
// ai_adb_parent = ai_adb_parent.parent ().parent ();
|
108 |
+
// ***
|
109 |
+
ai_adb_parent = ai_adb_parent.parentElement.parentElement;
|
110 |
}
|
111 |
|
112 |
+
// if (ai_adb_parent.closest ('.AI_FUNC_GET_BLOCK_CLASS_NAME').length) {
|
113 |
+
// ***
|
114 |
+
if (ai_adb_parent.closest ('.' + ai_block_class) != null) {
|
115 |
+
// ai_adb_parent = ai_adb_parent.parent ();
|
116 |
+
// ***
|
117 |
+
ai_adb_parent = ai_adb_parent.parentElement;
|
118 |
}
|
119 |
|
120 |
+
// 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")+"\"");
|
121 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE, parent", ai_adb_parent.tagName, ai_adb_parent.getAttribute ("id") != null ? "id=\""+ ai_adb_parent.getAttribute ("id")+"\"":'', ai_adb_parent.getAttribute ("class") != null ? "class=\""+ ai_adb_parent.getAttribute ("class")+"\"":'');
|
122 |
+
|
123 |
+
// var ai_adb_selectors = $(this).data ("selectors");
|
124 |
+
// if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
125 |
+
// ***
|
126 |
+
var ai_adb_selectors = "p";
|
127 |
+
if (el.getAttribute ("data-selectors") != null) {
|
128 |
+
var el_selectors = el.dataset.selectors;
|
129 |
+
if (el_selectors == '') el_selectors = "p";
|
130 |
+
ai_adb_selectors = el_selectors;
|
131 |
+
}
|
132 |
|
133 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE, selectors='" + ai_adb_selectors + "'");
|
134 |
|
135 |
var ai_adb_action = false;
|
136 |
|
137 |
+
// $(ai_adb_parent).find ('.AI_ADB_CONTENT_DELETE_BEGIN_CLASS, .AI_ADB_CONTENT_DELETE_END_CLASS, ' + ai_adb_selectors).each (function () {
|
138 |
+
// ***
|
139 |
+
ai_adb_parent.querySelectorAll ('.' + ai_adb_content_delete_begin_class + ', .' + ai_adb_content_delete_end_class + ', ' + ai_adb_selectors).forEach ((element, index) => {
|
140 |
+
// if ($(this).hasClass ("AI_ADB_CONTENT_DELETE_BEGIN_CLASS")) {$(this).remove (); ai_adb_action = true;}
|
141 |
+
// ***
|
142 |
+
if (element.classList.contains (ai_adb_content_delete_begin_class)) {element.remove (); ai_adb_action = true;}
|
143 |
+
// else if ($(this).hasClass ("AI_ADB_CONTENT_DELETE_END_CLASS")) {$(this).remove (); ai_adb_action = false;}
|
144 |
+
// ***
|
145 |
+
else if (element.classList.contains (ai_adb_content_delete_end_class)) {element.remove (); ai_adb_action = false;}
|
146 |
else if (ai_adb_action) {
|
147 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
148 |
+
// ***
|
149 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE:", element.tagName, element.getAttribute ("id") != null ? "id=\""+ element.getAttribute ("id")+"\"":'', element.getAttribute ("class") != null ? "class=\""+ element.getAttribute ("class")+"\"":'');
|
150 |
|
151 |
+
// $(this).remove ();
|
152 |
+
// ***
|
153 |
+
element.remove ();
|
154 |
}
|
155 |
});
|
156 |
|
157 |
});
|
158 |
|
159 |
+
// $(".AI_ADB_CONTENT_REPLACE_BEGIN_CLASS").each (function () {
|
160 |
+
// ***
|
161 |
+
document.querySelectorAll ('.' + ai_adb_content_replace_begin_class).forEach ((el, index) => {
|
162 |
+
// var ai_adb_parent = $(this).parent ();
|
163 |
+
// ***
|
164 |
+
var ai_adb_parent = el.parentElement;
|
165 |
+
|
166 |
+
// if (ai_adb_parent.closest ('.ai-debug-block').length) {
|
167 |
+
// ***
|
168 |
+
if (ai_adb_parent.closest ('.ai-debug-block') != null) {
|
169 |
+
// ai_adb_parent = ai_adb_parent.parent ().parent ();
|
170 |
+
// ***
|
171 |
+
ai_adb_parent = ai_adb_parent.parentElement.parentElement;
|
172 |
}
|
173 |
|
174 |
+
// if (ai_adb_parent.closest ('.AI_FUNC_GET_BLOCK_CLASS_NAME').length) {
|
175 |
+
// ***
|
176 |
+
if (ai_adb_parent.closest ('.' + ai_block_class) != null) {
|
177 |
+
// ai_adb_parent = ai_adb_parent.parent ();
|
178 |
+
// ***
|
179 |
+
ai_adb_parent = ai_adb_parent.parentElement;
|
180 |
}
|
181 |
|
182 |
+
// 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")+"\"");
|
183 |
+
// ***
|
184 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE, parent", ai_adb_parent.tagName, "id=\""+ ai_adb_parent.getAttribute ("id") != null ? ai_adb_parent.getAttribute ("id")+"\"":'', ai_adb_parent.getAttribute ("class") != null ? "class=\""+ ai_adb_parent.getAttribute ("class")+"\"":'');
|
185 |
|
186 |
+
// var ai_adb_text = $(this).data ("text");
|
187 |
+
// if (typeof ai_adb_text == "undefined") ai_adb_text = "";
|
188 |
+
// ***
|
189 |
+
var ai_adb_text = "";
|
190 |
+
if (el.getAttribute ("data-text") != null) {
|
191 |
+
ai_adb_text = el.dataset.text;
|
192 |
+
}
|
193 |
|
194 |
+
// var ai_adb_css = $(this).data ("css");
|
195 |
+
// if (typeof ai_adb_css == "undefined") ai_adb_css = "";
|
196 |
+
// ***
|
197 |
+
var ai_adb_css = "";
|
198 |
+
if (el.getAttribute ("data-css") != null) {
|
199 |
+
ai_adb_css = el.dataset.css;
|
200 |
+
}
|
201 |
|
202 |
+
// var ai_adb_selectors = $(this).data ("selectors");
|
203 |
+
// if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
204 |
+
// ***
|
205 |
+
var ai_adb_selectors = "p";
|
206 |
+
if (el.getAttribute ("data-selectors") != null) {
|
207 |
+
var el_selectors = el.dataset.selectors;
|
208 |
+
if (el_selectors == '') el_selectors = "p";
|
209 |
+
ai_adb_selectors = el_selectors;
|
210 |
+
}
|
211 |
|
212 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE, text=\'" + ai_adb_text + '\'', 'css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
|
213 |
+
// ***
|
214 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE, text=\'" + ai_adb_text + '\'', 'css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
|
215 |
|
216 |
var ai_adb_action = false;
|
217 |
+
// $(ai_adb_parent).find ('.AI_ADB_CONTENT_REPLACE_BEGIN_CLASS, .AI_ADB_CONTENT_REPLACE_END_CLASS, ' + ai_adb_selectors).each (function () {
|
218 |
+
ai_adb_parent.querySelectorAll ('.' + ai_adb_content_replace_begin_class + ', .' + ai_adb_content_replace_end_class + ', ' + ai_adb_selectors).forEach ((element, index) => {
|
219 |
+
|
220 |
+
// if ($(this).hasClass ("AI_ADB_CONTENT_REPLACE_BEGIN_CLASS")) {$(this).remove (); ai_adb_action = true;}
|
221 |
+
// ***
|
222 |
+
if (element.classList.contains (ai_adb_content_replace_begin_class)) {element.remove (); ai_adb_action = true;}
|
223 |
+
// else if ($(this).hasClass ("AI_ADB_CONTENT_REPLACE_END_CLASS")) {$(this).remove (); ai_adb_action = false;}
|
224 |
+
else if (element.classList.contains (ai_adb_content_replace_end_class)) {element.remove (); ai_adb_action = false;}
|
225 |
else if (ai_adb_action) {
|
226 |
if (ai_adb_text.length != 0) {
|
227 |
+
// var n = Math.round ($(this).text ().length / (ai_adb_text.length + 1));
|
228 |
+
// ***
|
229 |
+
var n = Math.round (element.innerText.length / (ai_adb_text.length + 1));
|
230 |
+
// $(this).text (Array(n + 1).join(ai_adb_text + ' ').trim ());
|
231 |
+
// ***
|
232 |
+
element.innerText = Array(n + 1).join(ai_adb_text + ' ').trim ();
|
233 |
+
// } else $(this).text ('');
|
234 |
+
// ***
|
235 |
+
} else element.innerText = '';
|
236 |
|
237 |
if (ai_adb_css != '') {
|
238 |
+
// var ai_adb_style = $(this).attr ("style");
|
239 |
+
// ***
|
240 |
+
var ai_adb_style = element.getAttribute ("style");
|
241 |
+
// if (typeof ai_adb_style == "undefined") ai_adb_style = "";
|
242 |
+
// ***
|
243 |
+
if (ai_adb_style == null) ai_adb_style = "";
|
244 |
else {
|
245 |
ai_adb_style = ai_adb_style.trim ();
|
246 |
if (ai_adb_style != '' && ai_adb_style [ai_adb_style.length - 1] != ';') {
|
250 |
if (ai_adb_css != '') {
|
251 |
ai_adb_css = ' ' + ai_adb_css;
|
252 |
}
|
253 |
+
// $(this).attr ("style", ai_adb_style + ai_adb_css);
|
254 |
+
// ***
|
255 |
+
element.setAttribute ("style", ai_adb_style + ai_adb_css);
|
256 |
}
|
257 |
|
258 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
259 |
+
// ***
|
260 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE:", element.tagName, element.getAttribute ("id") != null ? "id=\""+ element.getAttribute ("id")+"\"":'', element.getAttribute ("class") != null ? "class=\""+ element.getAttribute ("class")+"\"":'');
|
261 |
}
|
262 |
});
|
263 |
});
|
264 |
|
265 |
+
// }(jQuery));
|
266 |
+
// ***
|
267 |
}
|
268 |
|
269 |
function ai_adb_process_blocks (element) {
|
270 |
+
// (function ($) {
|
271 |
+
// ***
|
272 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 2
|
273 |
// var ai_adb_debugging = false;
|
274 |
|
275 |
if (typeof element == 'undefined') {
|
276 |
+
// element = $('body');
|
277 |
+
// ***
|
278 |
+
element = document.querySelector ('body');
|
279 |
if (ai_adb_debugging) console.log ('');
|
280 |
}
|
281 |
+
|
282 |
+
// Temp fix for jQuery elements
|
283 |
+
// ***
|
284 |
+
if (window.jQuery && window.jQuery.fn && element instanceof jQuery && element.hasOwnProperty ('0')) {
|
285 |
+
element = element [0];
|
286 |
+
}
|
287 |
+
|
288 |
+
// var ai_adb_data = $(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME);
|
289 |
+
// ***
|
290 |
+
var ai_adb_data = document.querySelector (b64d ("Ym9keQ==")).getAttribute (ai_adb_attribute);
|
291 |
if (typeof ai_adb_data === "string") {
|
292 |
var ai_adb_active = ai_adb_data == b64d ("bWFzaw==");
|
293 |
} else {
|
294 |
var ai_adb_active = null;
|
295 |
}
|
296 |
|
297 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions:", ai_adb_active, $(element).prop ("tagName") + '.' + $(element).attr ('class'));
|
298 |
+
// ***
|
299 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions:", ai_adb_active, element.tagName + element.getAttribute ('class') != null ? ('.' + element.getAttribute ('class')) : '');
|
300 |
|
301 |
if (typeof ai_adb_data === "string" && typeof ai_adb_active === "boolean") {
|
302 |
|
310 |
var code_insertion = false;
|
311 |
|
312 |
// Don't use data () as the value will be cached - wrong value for tracking
|
313 |
+
// $(".ai-adb-hide", element).each (function () {
|
314 |
+
// ***
|
315 |
+
element.querySelectorAll (".ai-adb-hide").forEach ((el, i) => {
|
316 |
+
// $(this).css ({"display": "none", "visibility": "hidden"});
|
317 |
+
// ***
|
318 |
+
el.style.display = 'none';
|
319 |
+
el.style.visibility = 'hidden';
|
320 |
+
|
321 |
+
// $(this).removeClass ('ai-adb-hide');
|
322 |
+
// ***
|
323 |
+
el.classList.remove ('ai-adb-hide');
|
324 |
|
325 |
// Disable tracking
|
326 |
+
// var wrapping_div = $(this).closest ('div[data-ai]');
|
327 |
+
// ***
|
328 |
+
var wrapping_div = el.closest ('div[data-ai]');
|
329 |
+
// if (typeof wrapping_div.attr ("data-ai") != "undefined") {
|
330 |
+
// ***
|
331 |
+
if (wrapping_div != null && el.hasAttribute ("data-ai")) {
|
332 |
+
// var data = JSON.parse (b64d (wrapping_div.attr ("data-ai")));
|
333 |
+
// ***
|
334 |
+
var data = JSON.parse (b64d (wrapping_div.getAttribute ("data-ai")));
|
335 |
if (typeof data !== "undefined" && data.constructor === Array) {
|
336 |
data [1] = "";
|
337 |
|
338 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING ", b64d (wrapping_div.getAttribute ("data-ai")), ' <= ', JSON.stringify (data));
|
339 |
|
340 |
+
// wrapping_div.attr ("data-ai", b64e (JSON.stringify (data)));
|
341 |
+
// ***
|
342 |
+
wrapping_div.setAttribute ("data-ai", b64e (JSON.stringify (data)));
|
343 |
}
|
344 |
}
|
345 |
|
346 |
+
// ai_disable_processing ($(this));
|
347 |
+
ai_disable_processing (el);
|
348 |
|
349 |
if (ai_adb_debugging) {
|
350 |
+
// var debug_info = $(this).data ("ai-debug");
|
351 |
+
// console.log ("AI AD BLOCKING HIDE", typeof debug_info != "undefined" ? debug_info : "");
|
352 |
+
// ***
|
353 |
+
console.log ("AI AD BLOCKING HIDE", 'aiDebug' in el.dataset ? el.dataset.aiDebug : "");
|
354 |
}
|
355 |
});
|
356 |
|
357 |
// after hide to update tracking data on replace
|
358 |
// Don't use data () as the value will be cached - wrong value for tracking
|
359 |
+
// $(".ai-adb-show", element).each (function () {
|
360 |
+
// ***
|
361 |
+
element.querySelectorAll (".ai-adb-show").forEach ((el, i) => {
|
362 |
+
// $(this).css ({"display": "block", "visibility": "visible"});
|
363 |
+
// ***
|
364 |
+
el.style.display = 'block';
|
365 |
+
el.style.visibility = 'visible';
|
366 |
|
367 |
+
// $(this).removeClass ('ai-adb-show');
|
368 |
+
// ***
|
369 |
+
el.classList.remove ('ai-adb-show');
|
370 |
|
371 |
+
// if (typeof $(this).data ('code') != 'undefined') {
|
372 |
+
// ***
|
373 |
+
if ('code' in el.dataset) {
|
374 |
+
// var adb_code = b64d ($(this).data ('code'));
|
375 |
+
// ***
|
376 |
+
var adb_code = b64d (el.dataset.code);
|
377 |
|
378 |
if (ai_adb_debugging) console.log ('AI AD BLOCKING SHOW INSERT CODE');
|
379 |
if (ai_adb_debugging) console.log ('');
|
380 |
|
381 |
+
// $(this).append (adb_code);
|
382 |
+
el.innerHTML += adb_code;
|
383 |
|
384 |
code_insertion = true;
|
385 |
code_inserted = true;
|
390 |
}
|
391 |
}
|
392 |
|
393 |
+
// var tracking_data = $(this).attr ('data-ai-tracking');
|
394 |
+
// if (typeof tracking_data != 'undefined') {
|
395 |
+
if (el.hasAttribute ('data-ai-tracking')) {
|
396 |
+
// ***
|
397 |
+
var tracking_data = el.getAttribute ('data-ai-tracking');
|
398 |
+
var wrapping_div = el.closest ('div[data-ai]');
|
399 |
+
// if (typeof wrapping_div.attr ("data-ai") != "undefined") {
|
400 |
+
// ***
|
401 |
+
if (wrapping_div.hasAttribute ("data-ai")) {
|
402 |
+
// if ($(this).hasClass ('ai-no-tracking')) {
|
403 |
+
// ***
|
404 |
+
if (el.classList.contains ('ai-no-tracking')) {
|
405 |
+
// var data = JSON.parse (b64d (wrapping_div.attr ("data-ai")));
|
406 |
+
// ***
|
407 |
+
var data = JSON.parse (b64d (wrapping_div.getAttribute ("data-ai")));
|
408 |
if (typeof data !== "undefined" && data.constructor === Array) {
|
409 |
data [1] = "";
|
410 |
tracking_data = b64e (JSON.stringify (data));
|
411 |
}
|
412 |
}
|
413 |
|
414 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING ", b64d (wrapping_div.attr ("data-ai")), ' <= ', b64d (tracking_data));
|
415 |
+
// ***
|
416 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING ", b64d (wrapping_div.getAttribute ("data-ai")), ' <= ', b64d (tracking_data));
|
417 |
|
418 |
+
// wrapping_div.attr ("data-ai", tracking_data);
|
419 |
+
// ***
|
420 |
+
wrapping_div.setAttribute ("data-ai", tracking_data);
|
421 |
}
|
422 |
}
|
423 |
if (ai_adb_debugging) {
|
424 |
+
// var debug_info = $(this).data ("ai-debug");
|
425 |
+
// console.log ("AI AD BLOCKING SHOW", typeof debug_info != "undefined" ? debug_info : "");
|
426 |
+
// ***
|
427 |
+
console.log ("AI AD BLOCKING SHOW", 'aiDebug' in el.dataset ? el.dataset.aiDebug : "");
|
428 |
}
|
429 |
});
|
430 |
} while (code_insertion);
|
441 |
setTimeout (ai_adb_process_content, 10);
|
442 |
} else {
|
443 |
// Prevent tracking if block was not displayed because of cookie
|
444 |
+
// $(".ai-adb-hide", element).each (function () {
|
445 |
+
// ***
|
446 |
+
element.querySelectorAll ('.ai-adb-hide').forEach ((el, index) => {
|
447 |
+
|
448 |
+
// if (ai_adb_debugging) console.log ('AI ai-adb-hide', $(this), $(this).outerHeight (), $(this).closest ('.ai-adb-show').length);
|
449 |
+
// ***
|
450 |
+
if (ai_adb_debugging) console.log ('AI ai-adb-hide', el, el.offsetHeight, el.closest ('.ai-adb-show') != null);
|
451 |
|
452 |
+
// $(this).removeClass ('ai-adb-hide');
|
453 |
+
// ***
|
454 |
+
el.classList.remove ('ai-adb-hide');
|
455 |
|
456 |
+
// if ($(this).outerHeight () == 0 && $(this).closest ('.ai-adb-show').length == 0) {
|
457 |
+
// ***
|
458 |
+
if (el.offsetHeight == 0 && el.closest ('.ai-adb-show') != null) {
|
459 |
// Top level (not nested) block
|
460 |
+
// var wrapper = $(this).closest ('div[data-ai]');
|
461 |
+
// ***
|
462 |
+
var wrapper = el.closest ('div[data-ai]');
|
463 |
+
// if (typeof wrapper.attr ("data-ai") != "undefined") {
|
464 |
+
// ***
|
465 |
+
if (wrapper.hetAttribute ("data-ai")) {
|
466 |
+
// var data = JSON.parse (b64d (wrapper.attr ("data-ai")));
|
467 |
+
// ***
|
468 |
+
var data = JSON.parse (b64d (wrapper.getAttribute ("data-ai")));
|
469 |
if (typeof data !== "undefined" && data.constructor === Array) {
|
470 |
data [1] = "";
|
471 |
|
472 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING DISABLED: ", b64d (wrapper.attr ("data-ai")), ' <= ', JSON.stringify (data));
|
473 |
+
// ***
|
474 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING DISABLED: ", b64d (wrapper.getAttribute ("data-ai")), ' <= ', JSON.stringify (data));
|
475 |
|
476 |
+
// wrapper.attr ("data-ai", b64e (JSON.stringify (data)));
|
477 |
+
// ***
|
478 |
+
wrapper.setAttribute ("data-ai", b64e (JSON.stringify (data)));
|
479 |
|
480 |
// Hide block (wrapping div with margin)
|
481 |
+
// wrapper.addClass ('ai-viewport-0').css ("display", "none");
|
482 |
+
// ***
|
483 |
+
wrapper.classList.add ('ai-viewport-0');
|
484 |
+
wrapper.style.display = 'none';
|
485 |
}
|
486 |
}
|
487 |
|
488 |
}
|
489 |
});
|
490 |
|
491 |
+
// $(".ai-adb-show", element).each (function () {
|
492 |
+
// ***
|
493 |
+
element.querySelectorAll ('.ai-adb-show').forEach ((el, index) => {
|
494 |
+
// ai_disable_processing ($(this));
|
495 |
+
// ***
|
496 |
+
ai_disable_processing (el);
|
497 |
|
498 |
+
// $(this).removeClass ('ai-adb-show');
|
499 |
+
// ***
|
500 |
+
el.classList.remove ('ai-adb-show');
|
501 |
|
502 |
+
// if (ai_adb_debugging) console.log ('AI AD BLOCKING SHOW disable processing', $(this).prop ("tagName") + '.' + $(this).attr ('class'));
|
503 |
+
// ***
|
504 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING SHOW disable processing', el.tagName + el.getAttribute ('class') != null ? ('.' + el.getAttribute ('class')) : '');
|
505 |
});
|
506 |
}
|
507 |
}
|
508 |
|
509 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions END");
|
510 |
+
// }(jQuery));
|
511 |
+
// ***
|
512 |
}
|
513 |
|
514 |
ai_adb_detection_type_log = function (n) {
|
515 |
var type = ai_adb_detection_type (n);
|
516 |
+
// var ai_adb_events = jQuery('#ai-adb-events');
|
517 |
+
// ***
|
518 |
+
var ai_adb_events = document.querySelector ('#ai-adb-events');
|
519 |
+
// if (ai_adb_events.count != 0) {
|
520 |
+
// ***
|
521 |
+
if (ai_adb_events != null) {
|
522 |
+
// var message = ai_adb_events.text ();
|
523 |
+
// ***
|
524 |
+
var message = ai_adb_events.innerText;
|
525 |
if (message != '') message = message + ', '; else message = message + ', EVENTS: ';
|
526 |
message = message + n;
|
527 |
+
// ai_adb_events.text (message);
|
528 |
+
// ***
|
529 |
+
ai_adb_events.innerText = message;
|
530 |
}
|
531 |
return type;
|
532 |
}
|
577 |
case 12:
|
578 |
return "12 300x250 js";
|
579 |
break;
|
580 |
+
case 13:
|
581 |
+
return "13 amazon-adsystem";
|
582 |
+
break;
|
583 |
+
case 14:
|
584 |
+
return "14 quantserve.com";
|
585 |
+
break;
|
586 |
default:
|
587 |
return n;
|
588 |
break;
|
597 |
}
|
598 |
|
599 |
var ai_disable_processing = function (element) {
|
600 |
+
// jQuery(element).find ('.ai-lazy').removeClass ('ai-lazy'); // Disable lazy loading
|
601 |
+
// jQuery(element).find ('.ai-manual').removeClass ('ai-manual'); // Disable manual loading
|
602 |
+
// jQuery(element).find ('.ai-rotate').removeClass ('ai-unprocessed').removeAttr ('data-info'); // Disable rotations
|
603 |
+
// jQuery(element).find ('.ai-list-data').removeClass ('ai-list-data'); // Disable lists
|
604 |
+
// jQuery(element).find ('.ai-ip-data').removeClass ('ai-ip-data'); // Disable IP lists
|
605 |
+
// jQuery(element).find ('[data-code]').removeAttr ('data-code'); // Disable insertions
|
606 |
+
// ***
|
607 |
+
|
608 |
+
document.querySelectorAll ('.ai-lazy').forEach ((el, index) => {el.classList.remove ('ai-lazy');}); // Disable lazy loading
|
609 |
+
document.querySelectorAll ('.ai-manual').forEach ((el, index) => {el.classList.remove ('ai-manual');}); // Disable manual loading
|
610 |
+
document.querySelectorAll ('.ai-rotate').forEach ((el, index) => {el.classList.remove ('ai-unprocessed'); el.removeAttribute ('data-info');}); // Disable rotations
|
611 |
+
document.querySelectorAll ('.ai-list-data').forEach ((el, index) => {el.classList.remove ('ai-list-data');}); // Disable lists
|
612 |
+
document.querySelectorAll ('.ai-ip-data').forEach ((el, index) => {el.classList.remove ('ai-ip-data');}); // Disable IP lists
|
613 |
+
document.querySelectorAll ('[data-code]').forEach ((el, index) => {el.removeAttribute ('data-code');}); // Disable insertions
|
614 |
}
|
615 |
|
616 |
+
var ai_adb_detected_actions = function (n) {
|
617 |
|
618 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 4
|
619 |
// var ai_adb_debugging = false;
|
620 |
|
621 |
+
|
622 |
+
// Temp fix for jQuery elements
|
623 |
+
// ***
|
624 |
+
if (window.jQuery && window.jQuery.fn && ai_adb_overlay instanceof jQuery && ai_adb_overlay.hasOwnProperty ('0')) {
|
625 |
+
ai_adb_overlay = ai_adb_overlay [0];
|
626 |
+
}
|
627 |
+
if (ai_adb_message_window.hasOwnProperty ('0')) {
|
628 |
+
ai_adb_message_window = ai_adb_message_window [0];
|
629 |
+
}
|
630 |
+
|
631 |
if (ai_adb_debugging && n == 0) console.log ('');
|
632 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING DETECTED", ai_adb_detection_type_log (n));
|
633 |
|
634 |
if (!ai_adb_active) {
|
635 |
ai_adb_active = true;
|
636 |
|
637 |
+
// jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME, b64d ("bWFzaw=="));
|
638 |
+
// ***
|
639 |
+
document.querySelector (b64d ("Ym9keQ==")).setAttribute (ai_adb_attribute, b64d ("bWFzaw=="));
|
640 |
|
641 |
+
// (function ($) {
|
642 |
+
// ***
|
643 |
|
644 |
+
// $(window).ready(function () {
|
645 |
+
// ai_adb_process_blocks ();
|
646 |
|
647 |
+
//// if (code_inserted && typeof ai_process_elements == 'function') {
|
648 |
+
//// setTimeout (ai_process_elements, 20);
|
649 |
+
//// }
|
650 |
+
// });
|
651 |
+
// ***
|
652 |
+
function ai_ready_ProcessElements () {
|
653 |
+
ai_adb_process_blocks ();
|
654 |
+
|
655 |
// if (code_inserted && typeof ai_process_elements == 'function') {
|
656 |
// setTimeout (ai_process_elements, 20);
|
657 |
// }
|
658 |
+
}
|
659 |
+
|
660 |
+
ai_ready (ai_ready_ProcessElements);
|
661 |
|
662 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING action check");
|
663 |
// AiCookies.remove (ai_adb_pgv_cookie_name, {path: "/"});
|
697 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING", ai_adb_page_view_delay, "page views not reached, no action");
|
698 |
AiCookies.set (ai_adb_pgv_cookie_name, ai_adb_page_view_counter, {expires: 365, path: "/"});
|
699 |
window.ai_d1 = ai_adb_page_view_counter;
|
700 |
+
// window.AI_ADB_STATUS_MESSAGE=1;
|
701 |
+
ai_adb_message_code_1 ();
|
702 |
return;
|
703 |
}
|
704 |
if (ai_adb_page_view_repeat != 0) {
|
706 |
if ((ai_adb_page_view_counter - ai_adb_page_view_delay - 1) % ai_adb_page_view_repeat != 0) {
|
707 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING every", ai_adb_page_view_repeat, "page views, no action");
|
708 |
window.ai_d1 = ai_adb_page_view_counter;
|
709 |
+
// window.AI_ADB_STATUS_MESSAGE=1;
|
710 |
+
ai_adb_message_code_1 ();
|
711 |
return;
|
712 |
}
|
713 |
}
|
717 |
|
718 |
var cookie = AiCookies.get (ai_adb_act_cookie_name);
|
719 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING cookie:", cookie);
|
720 |
+
if (typeof cookie != "undefined" && cookie == ai_adb_cookie_value) {
|
721 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING valid cookie detected, no action");
|
722 |
+
// window.AI_ADB_STATUS_MESSAGE=2;
|
723 |
+
ai_adb_message_code_2 ();
|
724 |
return;
|
725 |
}
|
726 |
|
727 |
else if (ai_adb_debugging) console.log ("AI AD BLOCKING invalid cookie");
|
728 |
+
AiCookies.set (ai_adb_act_cookie_name, ai_adb_cookie_value, {expires: ai_adb_message_cookie_lifetime, path: "/"});
|
729 |
} else
|
730 |
AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
731 |
|
733 |
|
734 |
if (ai_adb_action == 0) {
|
735 |
ai_dummy = 16; // Do not remove - to prevent optimization
|
736 |
+
// window.AI_ADB_STATUS_MESSAGE=6;
|
737 |
+
ai_adb_message_code_6 ();
|
738 |
ai_dummy ++; // Do not remove - to prevent optimization
|
739 |
} else {
|
740 |
+
// window.AI_ADB_STATUS_MESSAGE=3;
|
741 |
+
ai_adb_message_code_3 ();
|
742 |
ai_dummy = 13; // Do not remove - to prevent optimization
|
743 |
}
|
744 |
|
745 |
switch (ai_adb_action) {
|
746 |
case 1:
|
747 |
if (!ai_adb_message_undismissible) {
|
748 |
+
// ai_adb_overlay.click (function () {
|
749 |
+
// ***
|
750 |
+
ai_adb_overlay.addEventListener ('click', (event) => {
|
751 |
+
// $(this).remove();
|
752 |
+
// ***
|
753 |
+
ai_adb_overlay.remove ();
|
754 |
+
ai_adb_message_window.remove ();
|
755 |
});
|
756 |
+
// ai_adb_message_window.click (function () {
|
757 |
+
// ***
|
758 |
+
ai_adb_message_window.addEventListener ('click', (event) => {
|
759 |
+
// $(this).remove();
|
760 |
+
// ***
|
761 |
+
ai_adb_message_window.remove ();
|
762 |
+
ai_adb_overlay.remove ();
|
763 |
});
|
764 |
+
// window.onkeydown = function( event ) {
|
765 |
+
// ***
|
766 |
+
window.addEventListener ('keydown', (event) => {
|
767 |
if (event.keyCode === 27 ) {
|
768 |
ai_adb_overlay.click ();
|
769 |
ai_adb_message_window.click ();
|
770 |
}
|
771 |
+
});
|
772 |
|
773 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE click detection installed");
|
774 |
|
775 |
} else {
|
776 |
// AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
777 |
|
778 |
+
// ai_adb_overlay.find ('[style*="cursor"]').css ("cursor", "no-drop");
|
779 |
+
// ai_adb_message_window.find ('[style*="cursor"]').css ("cursor", "no-drop");
|
780 |
+
// ***
|
781 |
+
ai_adb_overlay.querySelectorAll ('[style*="cursor"]').forEach ((el, index) => {
|
782 |
+
el.style.cursor = 'no-drop';
|
783 |
+
});
|
784 |
+
ai_adb_message_window.querySelectorAll ('[style*="cursor"]').forEach ((el, index) => {
|
785 |
+
el.style.cursor = 'no-drop';
|
786 |
+
});
|
787 |
+
|
788 |
}
|
789 |
|
790 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE");
|
791 |
|
792 |
+
// var body_children = $(b64d ("Ym9keQ==")).children ();
|
793 |
+
// body_children.eq (Math.floor (Math.random() * body_children.length)).after (ai_adb_overlay);
|
794 |
+
// body_children.eq (Math.floor (Math.random() * body_children.length)).after (ai_adb_message_window);
|
795 |
+
// ***
|
796 |
+
var body_children = document.querySelector (b64d ("Ym9keQ==")).children;
|
797 |
+
insertAfter (ai_adb_overlay, body_children.item (Math.floor (Math.random () * body_children.length)));
|
798 |
+
insertAfter (ai_adb_message_window, body_children.item (Math.floor (Math.random () * body_children.length)));
|
799 |
|
800 |
break;
|
801 |
case 2:
|
836 |
break;
|
837 |
}
|
838 |
|
839 |
+
// }(jQuery));
|
840 |
+
// ***
|
841 |
}
|
842 |
}
|
843 |
|
863 |
if (!ai_adb_active && ai_adb_counter == 4) {
|
864 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING NOT DETECTED");
|
865 |
|
866 |
+
// jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME, b64d ("Y2xlYXI="));
|
867 |
+
// ***
|
868 |
+
document.querySelector (b64d ("Ym9keQ==")).setAttribute (ai_adb_attribute, b64d ("Y2xlYXI="));
|
869 |
|
870 |
ai_dummy = 11; // Do not remove - to prevent optimization
|
871 |
+
// window.AI_ADB_STATUS_MESSAGE=4; // Check replacement code {}
|
872 |
+
ai_adb_message_code_4 ();
|
873 |
ai_dummy = 14; // Do not remove - to prevent optimization
|
874 |
|
875 |
// // Prevent tracking if block was not displayed because of cookie
|
923 |
}
|
924 |
}
|
925 |
|
926 |
+
//if (AI_DBG_AI_DEBUG_AD_BLOCKING) jQuery (document).ready (function () {ai_adb_detected (0)});
|
927 |
+
// ***
|
928 |
+
if (AI_DBG_AI_DEBUG_AD_BLOCKING) ai_ready (function () {ai_adb_detected (0);});
|
929 |
|
930 |
+
//jQuery (document).ready (function ($) {
|
931 |
+
// $(window).ready (function () {
|
932 |
+
// ***
|
933 |
+
function ai_adb_checks () {
|
934 |
|
935 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 6
|
936 |
// var ai_adb_debugging = false;
|
938 |
// var ai_debugging_active = typeof ai_adb_fe_dbg !== 'undefined';
|
939 |
ai_debugging_active = typeof ai_adb_fe_dbg !== 'undefined';
|
940 |
|
941 |
+
setTimeout (function () {
|
942 |
+
// $("#ai-adb-bar").click (function () {
|
943 |
+
// ***
|
944 |
+
if (document.querySelector ('#ai-adb-bar') != null)
|
945 |
+
document.querySelector ('#ai-adb-bar').addEventListener ('click', (event) => {
|
946 |
+
AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
947 |
+
AiCookies.remove (ai_adb_pgv_cookie_name, {path: "/"});
|
948 |
+
// window.AI_ADB_STATUS_MESSAGE=5;
|
949 |
+
ai_adb_message_code_5 ();
|
950 |
+
ai_dummy = 15; // Do not remove - to prevent optimization
|
951 |
+
});
|
952 |
+
}, 5);
|
953 |
|
954 |
// if (jQuery("#banner-advert-container").length) {
|
955 |
// if ($("#banner-advert-container img").length > 0) {
|
964 |
var ai_adb_el_counter = 0;
|
965 |
var ai_adb_el_zero = 0;
|
966 |
var ai_adb_selector = ai_adb_selectors.split (",");
|
967 |
+
// $.each (ai_adb_selector, function (i) {
|
968 |
+
// ***
|
969 |
+
ai_adb_selector.forEach ((el, i) => {
|
970 |
ai_adb_selector [i] = ai_adb_selector [i].trim ();
|
971 |
|
972 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING selector", ai_adb_selector [i]);
|
973 |
|
974 |
+
// if ($(ai_adb_selector [i]).length != 0) {
|
975 |
+
// ***
|
976 |
+
if (document.querySelector (ai_adb_selector [i]) != null) {
|
977 |
+
// $(ai_adb_selector [i]).each (function (n) {
|
978 |
+
// ***
|
979 |
+
|
980 |
+
// var document.querySelectorAll (ai_adb_selector [i]);
|
981 |
+
document.querySelectorAll (ai_adb_selector [i]).forEach ((el, index) => {
|
982 |
+
|
983 |
+
// var outer_height = $(this).outerHeight ();
|
984 |
+
// ***
|
985 |
+
var outer_height = el.offsetHeight;
|
986 |
+
|
987 |
+
// 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 ());
|
988 |
+
// ***
|
989 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING element", el.getAttribute ("id") != null ? (" id=\"" + el.getAttribute ("id") + "\"") : '', el.getAttribute ("class") != null ? (" class=\"" + el.getAttribute ("class") + "\"") : '', "heights:", el.offsetHeight, el.clientHeight);
|
990 |
+
|
991 |
+
// var ai_attributes = $(this).find ('.ai-attributes');
|
992 |
+
// if (ai_attributes.length) {
|
993 |
+
// ai_attributes.each (function (){
|
994 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING attributes height:", $(this).outerHeight ());
|
995 |
+
// if (outer_height >= $(this).outerHeight ()) {
|
996 |
+
// outer_height -= $(this).outerHeight ();
|
997 |
+
// }
|
998 |
+
// });
|
999 |
+
// }
|
1000 |
+
// ***
|
1001 |
+
el.querySelectorAll ('.ai-attributes').forEach ((element, index) => {
|
1002 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING attributes height:", element.offsetHeight);
|
1003 |
+
if (outer_height >= element.offsetHeight) {
|
1004 |
+
outer_height -= element.offsetHeight;
|
1005 |
+
}
|
1006 |
+
});
|
1007 |
|
1008 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING effective height:", outer_height);
|
1009 |
|
1010 |
ai_adb_el_counter ++;
|
1011 |
if (outer_height === 0) {
|
1012 |
+
// $ (document).ready (function () {if (!ai_adb_active || ai_debugging_active) ai_adb_detected (4)});
|
1013 |
+
// ***
|
1014 |
+
ai_ready (function () {if (!ai_adb_active || ai_debugging_active) ai_adb_detected (4)});
|
1015 |
ai_adb_el_zero ++;
|
1016 |
if (!ai_debugging_active) return false;
|
1017 |
}
|
1020 |
|
1021 |
}
|
1022 |
});
|
1023 |
+
// if (ai_adb_el_counter != 0 && ai_adb_el_zero == 0) $(document).ready (function () {ai_adb_undetected (4)});
|
1024 |
+
// ***
|
1025 |
+
if (ai_adb_el_counter != 0 && ai_adb_el_zero == 0) ai_ready (function () {ai_adb_undetected (4)});
|
1026 |
}
|
1027 |
|
1028 |
+
// });
|
1029 |
+
//});
|
1030 |
+
// ***
|
1031 |
+
}
|
1032 |
|
1033 |
function ai_adb_get_script (ai_adb_script, ai_adb_action) {
|
1034 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 7
|
1073 |
head.appendChild (script);
|
1074 |
};
|
1075 |
|
1076 |
+
//jQuery (window).on ('load', function () {
|
1077 |
+
// ***
|
1078 |
+
window.addEventListener ('load', (event) => {
|
1079 |
+
|
1080 |
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 8
|
1081 |
// var ai_adb_debugging = false;
|
1082 |
|
1124 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING window load");
|
1125 |
|
1126 |
function ai_adb_1 () {
|
1127 |
+
if (!document.getElementById (ai_adb_name_1)){
|
1128 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (1);
|
1129 |
} else {
|
1130 |
ai_adb_undetected (1);
|
1132 |
}
|
1133 |
|
1134 |
function ai_adb_2 () {
|
1135 |
+
// if (typeof window.AI_CONST_AI_ADB_2_NAME == "undefined") {
|
1136 |
+
if (typeof window [ai_adb_name_2] == "undefined") {
|
1137 |
+
|
1138 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (2);
|
1139 |
} else {
|
1140 |
ai_adb_undetected (2);
|
1160 |
function ai_adb_external_scripts () {
|
1161 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING check external scripts");
|
1162 |
|
1163 |
+
// var element = jQuery (b64d ("I2FpLWFkYi1nYQ=="));
|
1164 |
+
// if (element.length) {
|
1165 |
+
// ***
|
1166 |
+
var element = document.querySelector (b64d ("I2FpLWFkYi1nYQ=="));
|
1167 |
+
if (element != null) {
|
1168 |
+
// if (!!(element.width () * element.height ())) {
|
1169 |
+
// ***
|
1170 |
+
if (!!(element.clientWidth * element.clientHeight)) {
|
1171 |
ai_adb_undetected (5);
|
1172 |
} else {
|
1173 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (5);
|
1174 |
}
|
1175 |
}
|
1176 |
|
1177 |
+
// var element = jQuery (b64d ("I2FpLWFkYi1tbg=="));
|
1178 |
+
// if (element.length) {
|
1179 |
+
// ***
|
1180 |
+
var element = document.querySelector (b64d ("I2FpLWFkYi1tbg=="));
|
1181 |
+
if (element != null) {
|
1182 |
+
// if (!!(element.width () * element.height ())) {
|
1183 |
+
// ***
|
1184 |
+
if (!!(element.clientWidth * element.clientHeight)) {
|
1185 |
ai_adb_undetected (6);
|
1186 |
} else {
|
1187 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (6);
|
1188 |
}
|
1189 |
}
|
1190 |
|
1191 |
+
// var element = jQuery (b64d ("I2FpLWFkYi1kYmxjbGs="));
|
1192 |
+
// if (element.length) {
|
1193 |
+
// ***
|
1194 |
+
var element = document.querySelector (b64d ("I2FpLWFkYi1kYmxjbGs="));
|
1195 |
+
if (element != null) {
|
1196 |
+
// if (!!(element.width () * element.height ())) {
|
1197 |
+
// ***
|
1198 |
+
if (!!(element.clientWidth * element.clientHeight)) {
|
1199 |
ai_adb_undetected (8);
|
1200 |
} else {
|
1201 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (8);
|
1202 |
}
|
1203 |
}
|
1204 |
+
|
1205 |
+
var element = document.querySelector (b64d ("I2FpLWFkYi1hbQ=="));
|
1206 |
+
if (element != null) {
|
1207 |
+
// if (!!(element.width () * element.height ())) {
|
1208 |
+
// ***
|
1209 |
+
if (!!(element.clientWidth * element.clientHeight)) {
|
1210 |
+
ai_adb_undetected (13);
|
1211 |
+
} else {
|
1212 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (13);
|
1213 |
+
}
|
1214 |
+
}
|
1215 |
+
|
1216 |
+
var element = document.querySelector (b64d ("I2FpLWFkYi1xdQ=="));
|
1217 |
+
if (element != null) {
|
1218 |
+
// if (!!(element.width () * element.height ())) {
|
1219 |
+
// ***
|
1220 |
+
if (!!(element.clientWidth * element.clientHeight)) {
|
1221 |
+
ai_adb_undetected (14);
|
1222 |
+
} else {
|
1223 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (14);
|
1224 |
+
}
|
1225 |
+
}
|
1226 |
}
|
1227 |
|
1228 |
setTimeout (function() {
|
1245 |
|
1246 |
if (ai_adb_debugging) console.log ("AI AD BLOCKING delayed checks 1, 2, 3, 11, 12");
|
1247 |
|
1248 |
+
// if (jQuery(b64d ("I2FpLWFkYi1hZHM=")).length) {
|
1249 |
+
// ***
|
1250 |
+
if (document.querySelector (b64d ("I2FpLWFkYi1hZHM=")) != null) {
|
1251 |
+
if (!document.getElementById (ai_adb_name_1)) {
|
1252 |
ai_adb_get_script ('ads', ai_adb_1);
|
1253 |
} else ai_adb_1 ();
|
1254 |
}
|
1255 |
|
1256 |
+
// if (jQuery(b64d ("I2FpLWFkYi1zcG9uc29ycw==")).length) {
|
1257 |
+
// ***
|
1258 |
+
if (document.querySelector (b64d ("I2FpLWFkYi1zcG9uc29ycw==")) != null) {
|
1259 |
+
// if (typeof window.AI_CONST_AI_ADB_2_NAME == "undefined") {
|
1260 |
+
if (typeof window [ai_adb_name_2] == "undefined") {
|
1261 |
ai_adb_get_script ('sponsors', ai_adb_2);
|
1262 |
} else ai_adb_2 ();
|
1263 |
}
|
1264 |
|
1265 |
var banner_advert_container = b64d ("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVy");
|
1266 |
var banner_advert_container_img = b64d ("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVyIGltZw==");
|
1267 |
+
// if (jQuery(banner_advert_container).length) {
|
1268 |
+
// ***
|
1269 |
+
if (document.querySelector (banner_advert_container) != null) {
|
1270 |
+
|
1271 |
+
// if (jQuery(banner_advert_container_img).length > 0) {
|
1272 |
+
// ***
|
1273 |
+
if (document.querySelector (banner_advert_container_img) != null) {
|
1274 |
+
// if (jQuery(banner_advert_container_img).outerHeight() === 0) {
|
1275 |
+
// ***
|
1276 |
+
if (document.querySelector (banner_advert_container_img).offsetHeight === 0) {
|
1277 |
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (3);
|
1278 |
} else ai_adb_undetected (3);
|
1279 |
+
// jQuery(banner_advert_container_img).remove();
|
1280 |
+
// ***
|
1281 |
+
document.querySelector (banner_advert_container_img).remove ();
|
1282 |
}
|
1283 |
}
|
1284 |
|
1285 |
+
// if (jQuery(b64d ("I2FpLWFkYi1iYW5uZXI=")).length) {
|
1286 |
+
// ***
|
1287 |
+
if (document.querySelector (b64d ("I2FpLWFkYi1iYW5uZXI=")) != null) {
|
1288 |
ai_adb_11 ();
|
1289 |
}
|
1290 |
|
1291 |
+
// if (jQuery(b64d ("I2FpLWFkYi0zMDB4MjUw")).length) {
|
1292 |
+
// ***
|
1293 |
+
if (document.querySelector (b64d ("I2FpLWFkYi0zMDB4MjUw")) != null) {
|
1294 |
ai_adb_12 ();
|
1295 |
}
|
1296 |
}, 1150);
|
1297 |
});
|
1298 |
|
1299 |
+
function ai_ready (fn) {
|
1300 |
+
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) {
|
1301 |
+
fn ();
|
1302 |
+
} else {
|
1303 |
+
document.addEventListener ('DOMContentLoaded', fn);
|
1304 |
+
}
|
1305 |
+
}
|
1306 |
+
function insertAfter (newNode, referenceNode) {
|
1307 |
+
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
|
1308 |
+
}
|
1309 |
+
|
1310 |
+
ai_ready (ai_adb_checks);
|
1311 |
+
|
1312 |
+
}
|
includes/js/ai-adb.min.js
CHANGED
@@ -1,27 +1,27 @@
|
|
1 |
-
var
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
(
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
function(
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
function
|
23 |
-
|
24 |
-
|
25 |
-
case
|
26 |
-
|
27 |
-
(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(12):ai_adb_undetected(12))},1150)});
|
1 |
+
if("undefined"!==typeof ai_adb_action){var insertAfter=function(b,d){d.parentNode.insertBefore(b,d.nextSibling)},ai_ready=function(b){"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?b():document.addEventListener("DOMContentLoaded",b)},ai_adb_get_script=function(b,d){var c=document.createElement("script");c.src="ai-adb-url"+b+".js?ver="+(new Date).getTime();var e=document.getElementsByTagName("head")[0],a=!1;c.onerror=function(){d&&d();c.onerror=
|
2 |
+
null;e.removeChild(c)};c.onload=c.onreadystatechange=function(){a||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(a=!0,d&&d(),c.onload=c.onreadystatechange=null,e.removeChild(c))};e.appendChild(c)},ai_adb_checks=function(){ai_debugging_active="undefined"!==typeof ai_adb_fe_dbg;setTimeout(function(){null!=document.querySelector("#ai-adb-bar")&&document.querySelector("#ai-adb-bar").addEventListener("click",function(e){AiCookies.remove(ai_adb_act_cookie_name,{path:"/"});AiCookies.remove(ai_adb_pgv_cookie_name,
|
3 |
+
{path:"/"});ai_adb_message_code_5();ai_dummy=15})},5);if((!ai_adb_active||ai_debugging_active)&&""!=ai_adb_selectors){var b=0,d=0,c=ai_adb_selectors.split(",");c.forEach(function(e,a){c[a]=c[a].trim();null!=document.querySelector(c[a])&&document.querySelectorAll(c[a]).forEach(function(h,f){var g=h.offsetHeight;h.querySelectorAll(".ai-attributes").forEach(function(k,l){g>=k.offsetHeight&&(g-=k.offsetHeight)});b++;if(0===g&&(ai_ready(function(){ai_adb_active&&!ai_debugging_active||ai_adb_detected(4)}),
|
4 |
+
d++,!ai_debugging_active))return!1})});0!=b&&0==d&&ai_ready(function(){ai_adb_undetected(4)})}},ai_adb_process_blocks=function(b){"undefined"==typeof b&&(b=document.querySelector("body"));window.jQuery&&window.jQuery.fn&&b instanceof jQuery&&b.hasOwnProperty("0")&&(b=b[0]);var d=document.querySelector(b64d("Ym9keQ==")).getAttribute(ai_adb_attribute),c="string"===typeof d?d==b64d("bWFzaw=="):null;if("string"===typeof d&&"boolean"===typeof c)if(c){do{var e=!1;b.querySelectorAll(".ai-adb-hide").forEach(function(a,
|
5 |
+
h){a.style.display="none";a.style.visibility="hidden";a.classList.remove("ai-adb-hide");var f=a.closest("div[data-ai]");if(null!=f&&a.hasAttribute("data-ai")){var g=JSON.parse(b64d(f.getAttribute("data-ai")));"undefined"!==typeof g&&g.constructor===Array&&(g[1]="",f.setAttribute("data-ai",b64e(JSON.stringify(g))))}ai_disable_processing(a)});b.querySelectorAll(".ai-adb-show").forEach(function(a,h){a.style.display="block";a.style.visibility="visible";a.classList.remove("ai-adb-show");if("code"in a.dataset){var f=
|
6 |
+
b64d(a.dataset.code);a.innerHTML+=f;e=!0;"function"==typeof ai_process_elements&&ai_process_elements()}if(a.hasAttribute("data-ai-tracking")){f=a.getAttribute("data-ai-tracking");var g=a.closest("div[data-ai]");if(g.hasAttribute("data-ai")){if(a.classList.contains("ai-no-tracking")){var k=JSON.parse(b64d(g.getAttribute("data-ai")));"undefined"!==typeof k&&k.constructor===Array&&(k[1]="",f=b64e(JSON.stringify(k)))}g.setAttribute("data-ai",f)}}})}while(e);setTimeout(function(){"function"==typeof ai_process_impressions&&
|
7 |
+
1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers()},15);setTimeout(ai_adb_process_content,10)}else b.querySelectorAll(".ai-adb-hide").forEach(function(a,h){a.classList.remove("ai-adb-hide");if(0==a.offsetHeight&&null!=a.closest(".ai-adb-show")){var f=a.closest("div[data-ai]");if(f.hetAttribute("data-ai")){var g=JSON.parse(b64d(f.getAttribute("data-ai")));"undefined"!==typeof g&&g.constructor===Array&&
|
8 |
+
(g[1]="",f.setAttribute("data-ai",b64e(JSON.stringify(g))),f.classList.add("ai-viewport-0"),f.style.display="none")}}}),b.querySelectorAll(".ai-adb-show").forEach(function(a,h){ai_disable_processing(a);a.classList.remove("ai-adb-show")})},ai_adb_process_content=function(){document.querySelectorAll("."+ai_adb_content_css_begin_class).forEach(function(b,d){var c=b.parentElement;null!=c.closest(".ai-debug-block")&&(c=c.parentElement.parentElement);null!=c.closest("."+ai_block_class)&&(c=c.parentElement);
|
9 |
+
var e="display: none !important;";"undefined"!=typeof b.getAttribute("data-css")&&(e=b.dataset.css);var a="p";null!=b.getAttribute("data-selectors")&&(a=b.dataset.selectors,""==a&&(a="p"));var h=!1;c.querySelectorAll("."+ai_adb_content_css_begin_class+", ."+ai_adb_content_css_end_class+", "+a).forEach(function(f,g){if(f.classList.contains(ai_adb_content_css_begin_class))f.remove(),h=!0;else if(f.classList.contains(ai_adb_content_css_end_class))f.remove(),h=!1;else if(h){var k=f.getAttribute("style");
|
10 |
+
null==k?k="":(k=k.trim(),""!=k&&";"!=k[k.length-1]&&(k+=";"));""!=e&&(e=" "+e);f.setAttribute("style",k+e)}})});document.querySelectorAll("."+ai_adb_content_delete_begin_class).forEach(function(b,d){var c=b.parentElement;null!=c.closest(".ai-debug-block")&&(c=c.parentElement.parentElement);null!=c.closest("."+ai_block_class)&&(c=c.parentElement);var e="p";null!=b.getAttribute("data-selectors")&&(e=b.dataset.selectors,""==e&&(e="p"));var a=!1;c.querySelectorAll("."+ai_adb_content_delete_begin_class+
|
11 |
+
", ."+ai_adb_content_delete_end_class+", "+e).forEach(function(h,f){h.classList.contains(ai_adb_content_delete_begin_class)?(h.remove(),a=!0):h.classList.contains(ai_adb_content_delete_end_class)?(h.remove(),a=!1):a&&h.remove()})});document.querySelectorAll("."+ai_adb_content_replace_begin_class).forEach(function(b,d){var c=b.parentElement;null!=c.closest(".ai-debug-block")&&(c=c.parentElement.parentElement);null!=c.closest("."+ai_block_class)&&(c=c.parentElement);var e="";null!=b.getAttribute("data-text")&&
|
12 |
+
(e=b.dataset.text);var a="";null!=b.getAttribute("data-css")&&(a=b.dataset.css);var h="p";null!=b.getAttribute("data-selectors")&&(h=b.dataset.selectors,""==h&&(h="p"));var f=!1;c.querySelectorAll("."+ai_adb_content_replace_begin_class+", ."+ai_adb_content_replace_end_class+", "+h).forEach(function(g,k){if(g.classList.contains(ai_adb_content_replace_begin_class))g.remove(),f=!0;else if(g.classList.contains(ai_adb_content_replace_end_class))g.remove(),f=!1;else if(f&&(g.innerText=0!=e.length?Array(Math.round(g.innerText.length/
|
13 |
+
(e.length+1))+1).join(e+" ").trim():"",""!=a)){var l=g.getAttribute("style");null==l?l="":(l=l.trim(),""!=l&&";"!=l[l.length-1]&&(l+=";"));""!=a&&(a=" "+a);g.setAttribute("style",l+a)}})})};ai_adb_detection_type_log=function(b){var d=ai_adb_detection_type(b),c=document.querySelector("#ai-adb-events");if(null!=c){var e=c.innerText;c.innerText=(""!=e?e+", ":e+", EVENTS: ")+b}return d};ai_adb_detection_type=function(b){return""};var ai_adb_detected=function(b){setTimeout(function(){ai_adb_detected_actions(b)},
|
14 |
+
2)},ai_disable_processing=function(b){document.querySelectorAll(".ai-lazy").forEach(function(d,c){d.classList.remove("ai-lazy")});document.querySelectorAll(".ai-manual").forEach(function(d,c){d.classList.remove("ai-manual")});document.querySelectorAll(".ai-rotate").forEach(function(d,c){d.classList.remove("ai-unprocessed");d.removeAttribute("data-info")});document.querySelectorAll(".ai-list-data").forEach(function(d,c){d.classList.remove("ai-list-data")});document.querySelectorAll(".ai-ip-data").forEach(function(d,
|
15 |
+
c){d.classList.remove("ai-ip-data")});document.querySelectorAll("[data-code]").forEach(function(d,c){d.removeAttribute("data-code")})},ai_adb_detected_actions=function(b){window.jQuery&&window.jQuery.fn&&ai_adb_overlay instanceof jQuery&&ai_adb_overlay.hasOwnProperty("0")&&(ai_adb_overlay=ai_adb_overlay[0]);ai_adb_message_window.hasOwnProperty("0")&&(ai_adb_message_window=ai_adb_message_window[0]);if(!ai_adb_active){ai_adb_active=!0;document.querySelector(b64d("Ym9keQ==")).setAttribute(ai_adb_attribute,
|
16 |
+
b64d("bWFzaw=="));ai_ready(function(){ai_adb_process_blocks()});"undefined"!==typeof MobileDetect&&(new MobileDetect(window.navigator.userAgent)).is("bot")&&(ai_adb_action=0);if(""!=ai_adb_page_views){if(ai_adb_page_views.includes(",")){var d=ai_adb_page_views.split(",");b=parseInt(d[0]);d=parseInt(d[1])}else b=parseInt(ai_adb_page_views),d=0;var c=1,e=AiCookies.get(ai_adb_pgv_cookie_name);"undefined"!=typeof e&&(c=parseInt(e)+1);if(c<=b){AiCookies.set(ai_adb_pgv_cookie_name,c,{expires:365,path:"/"});
|
17 |
+
window.ai_d1=c;ai_adb_message_code_1();return}if(0!=d&&(AiCookies.set(ai_adb_pgv_cookie_name,c,{expires:365,path:"/"}),0!=(c-b-1)%d)){window.ai_d1=c;ai_adb_message_code_1();return}}if(0==ai_adb_message_cookie_lifetime||1==ai_adb_action&&ai_adb_message_undismissible)AiCookies.remove(ai_adb_act_cookie_name,{path:"/"});else{e=AiCookies.get(ai_adb_act_cookie_name);if("undefined"!=typeof e&&e==ai_adb_cookie_value){ai_adb_message_code_2();return}AiCookies.set(ai_adb_act_cookie_name,ai_adb_cookie_value,
|
18 |
+
{expires:ai_adb_message_cookie_lifetime,path:"/"})}0==ai_adb_action?(ai_dummy=16,ai_adb_message_code_6(),ai_dummy++):(ai_adb_message_code_3(),ai_dummy=13);switch(ai_adb_action){case 1:ai_adb_message_undismissible?(ai_adb_overlay.querySelectorAll('[style*="cursor"]').forEach(function(a,h){a.style.cursor="no-drop"}),ai_adb_message_window.querySelectorAll('[style*="cursor"]').forEach(function(a,h){a.style.cursor="no-drop"})):(ai_adb_overlay.addEventListener("click",function(a){ai_adb_overlay.remove();
|
19 |
+
ai_adb_message_window.remove()}),ai_adb_message_window.addEventListener("click",function(a){ai_adb_message_window.remove();ai_adb_overlay.remove()}),window.addEventListener("keydown",function(a){27===a.keyCode&&(ai_adb_overlay.click(),ai_adb_message_window.click())}));b=document.querySelector(b64d("Ym9keQ==")).children;insertAfter(ai_adb_overlay,b.item(Math.floor(Math.random()*b.length)));insertAfter(ai_adb_message_window,b.item(Math.floor(Math.random()*b.length)));break;case 2:""!=ai_adb_redirection_url&&
|
20 |
+
(b=!0,"http"==ai_adb_redirection_url.toLowerCase().substring(0,4)?window.location.href==ai_adb_redirection_url&&(b=!1):window.location.pathname==ai_adb_redirection_url&&(b=!1),b?(e=AiCookies.get(ai_adb_page_redirection_cookie_name),"undefined"==typeof e&&(b=new Date,b.setTime(b.getTime()+1E4),AiCookies.set(ai_adb_page_redirection_cookie_name,window.location.href,{expires:b,path:"/"}),"?"==ai_adb_redirection_url.substr(ai_adb_redirection_url.length-1)&&(ai_adb_redirection_url=ai_adb_redirection_url.slice(0,
|
21 |
+
-1),ai_adb_redirection_url+=location.search),window.location.replace(ai_adb_redirection_url))):AiCookies.remove(ai_adb_page_redirection_cookie_name,{path:"/"}))}}},ai_adb_undetected=function(b){setTimeout(function(){ai_adb_active||ai_adb_undetected_actions(b)},200)},ai_adb_undetected_actions=function(b){ai_adb_counter++;ai_adb_active||4!=ai_adb_counter||(document.querySelector(b64d("Ym9keQ==")).setAttribute(ai_adb_attribute,b64d("Y2xlYXI=")),ai_dummy=11,ai_adb_message_code_4(),ai_dummy=14,ai_adb_process_blocks())};
|
22 |
+
AI_DBG_AI_DEBUG_AD_BLOCKING&&ai_ready(function(){ai_adb_detected(0)});window.addEventListener("load",function(b){function d(){document.getElementById(ai_adb_name_1)?ai_adb_undetected(1):ai_adb_active&&!ai_debugging_active||ai_adb_detected(1)}function c(){"undefined"==typeof window[ai_adb_name_2]?(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(2):ai_adb_undetected(2)}function e(){var a=document.querySelector(b64d("I2FpLWFkYi1nYQ=="));null!=a&&(a.clientWidth*a.clientHeight?ai_adb_undetected(5):
|
23 |
+
(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(5));a=document.querySelector(b64d("I2FpLWFkYi1tbg=="));null!=a&&(a.clientWidth*a.clientHeight?ai_adb_undetected(6):(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(6));a=document.querySelector(b64d("I2FpLWFkYi1kYmxjbGs="));null!=a&&(a.clientWidth*a.clientHeight?ai_adb_undetected(8):(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(8));a=document.querySelector(b64d("I2FpLWFkYi1hbQ=="));null!=a&&(a.clientWidth*a.clientHeight?ai_adb_undetected(13):
|
24 |
+
(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(13));a=document.querySelector(b64d("I2FpLWFkYi1xdQ=="));null!=a&&(a.clientWidth*a.clientHeight?ai_adb_undetected(14):(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(14))}if("undefined"!==typeof MobileDetect&&(b=new MobileDetect(window.navigator.userAgent),6!=ai_adb_devices))switch(ai_adb_devices){case 0:if(b.mobile())return!1;break;case 1:if(!b.mobile())return!1;break;case 2:if(!b.tablet())return!1;break;case 3:if(!b.phone())return!1;break;
|
25 |
+
case 4:if(b.phone())return!1;break;case 5:if(b.tablet())return!1}setTimeout(function(){e();setTimeout(function(){ai_adb_active||setTimeout(function(){e()},400)},5)},1050);setTimeout(function(){var a="undefined"!==typeof ai_adb_fe_dbg;null!=document.querySelector(b64d("I2FpLWFkYi1hZHM="))&&(document.getElementById(ai_adb_name_1)?d():ai_adb_get_script("ads",d));null!=document.querySelector(b64d("I2FpLWFkYi1zcG9uc29ycw=="))&&("undefined"==typeof window[ai_adb_name_2]?ai_adb_get_script("sponsors",c):
|
26 |
+
c());var h=b64d("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVy"),f=b64d("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVyIGltZw==");null!=document.querySelector(h)&&null!=document.querySelector(f)&&(0===document.querySelector(f).offsetHeight?(!ai_adb_active||a)&&ai_adb_detected(3):ai_adb_undetected(3),document.querySelector(f).remove());null!=document.querySelector(b64d("I2FpLWFkYi1iYW5uZXI="))&&("undefined"==typeof window.ad_banner?(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(11):ai_adb_undetected(11));null!=document.querySelector(b64d("I2FpLWFkYi0zMDB4MjUw"))&&
|
27 |
+
("undefined"==typeof window.ad_300x250?(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(12):ai_adb_undetected(12))},1150)});ai_ready(ai_adb_checks)};
|
includes/js/ai-adb.q.js
ADDED
@@ -0,0 +1,946 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function ai_adb_process_content () {
|
2 |
+
(function ($) {
|
3 |
+
|
4 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 1
|
5 |
+
// var ai_adb_debugging = false;
|
6 |
+
|
7 |
+
if (ai_adb_debugging) console.log ('');
|
8 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING CONTENT PROCESSING", ai_adb_active);
|
9 |
+
|
10 |
+
$('.' + ai_adb_content_css_begin_class).each (function () {
|
11 |
+
var ai_adb_parent = $(this).parent ();
|
12 |
+
|
13 |
+
if (ai_adb_parent.closest ('.ai-debug-block').length) {
|
14 |
+
ai_adb_parent = ai_adb_parent.parent ().parent ();
|
15 |
+
}
|
16 |
+
|
17 |
+
if (ai_adb_parent.closest ('.' + ai_block_class).length) {
|
18 |
+
ai_adb_parent = ai_adb_parent.parent ();
|
19 |
+
}
|
20 |
+
|
21 |
+
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")+"\"");
|
22 |
+
|
23 |
+
var ai_adb_css = $(this).data ("css");
|
24 |
+
if (typeof ai_adb_css == "undefined") ai_adb_css = "display: none !important;";
|
25 |
+
|
26 |
+
var ai_adb_selectors = $(this).data ("selectors");
|
27 |
+
if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
28 |
+
|
29 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING CSS, css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
|
30 |
+
|
31 |
+
var ai_adb_action = false;
|
32 |
+
$(ai_adb_parent).find ('.' + ai_adb_content_css_begin_class + ', .' + ai_adb_content_css_end_class + ', ' + ai_adb_selectors).each (function () {
|
33 |
+
if ($(this).hasClass (ai_adb_content_css_begin_class)) {$(this).remove (); ai_adb_action = true;}
|
34 |
+
else if ($(this).hasClass (ai_adb_content_css_end_class)) {$(this).remove (); ai_adb_action = false;}
|
35 |
+
else if (ai_adb_action) {
|
36 |
+
var ai_adb_style = $(this).attr ("style");
|
37 |
+
if (typeof ai_adb_style == "undefined") ai_adb_style = "";
|
38 |
+
else {
|
39 |
+
ai_adb_style = ai_adb_style.trim ();
|
40 |
+
if (ai_adb_style != '' && ai_adb_style [ai_adb_style.length - 1] != ';') {
|
41 |
+
ai_adb_style = ai_adb_style + ';';
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING CSS:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
46 |
+
|
47 |
+
$(this).attr ("style", ai_adb_style + ' ' + ai_adb_css);
|
48 |
+
}
|
49 |
+
});
|
50 |
+
});
|
51 |
+
|
52 |
+
$('.' + ai_adb_content_delete_begin_class).each (function () {
|
53 |
+
var ai_adb_parent = $(this).parent ();
|
54 |
+
|
55 |
+
if (ai_adb_parent.closest ('.ai-debug-block').length) {
|
56 |
+
ai_adb_parent = ai_adb_parent.parent ().parent ();
|
57 |
+
}
|
58 |
+
|
59 |
+
if (ai_adb_parent.closest ('.' + ai_block_class).length) {
|
60 |
+
ai_adb_parent = ai_adb_parent.parent ();
|
61 |
+
}
|
62 |
+
|
63 |
+
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")+"\"");
|
64 |
+
|
65 |
+
var ai_adb_selectors = $(this).data ("selectors");
|
66 |
+
if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
67 |
+
|
68 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE, selectors='" + ai_adb_selectors + "'");
|
69 |
+
|
70 |
+
var ai_adb_action = false;
|
71 |
+
|
72 |
+
$(ai_adb_parent).find ('.' + ai_adb_content_delete_begin_class + ', .' + ai_adb_content_delete_end_class + ', ' + ai_adb_selectors).each (function () {
|
73 |
+
if ($(this).hasClass (ai_adb_content_delete_begin_class)) {$(this).remove (); ai_adb_action = true;}
|
74 |
+
else if ($(this).hasClass (ai_adb_content_delete_end_class)) {$(this).remove (); ai_adb_action = false;}
|
75 |
+
else if (ai_adb_action) {
|
76 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING DELETE:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
77 |
+
|
78 |
+
$(this).remove ();
|
79 |
+
}
|
80 |
+
});
|
81 |
+
|
82 |
+
});
|
83 |
+
|
84 |
+
$('.' + ai_adb_content_replace_begin_class).each (function () {
|
85 |
+
var ai_adb_parent = $(this).parent ();
|
86 |
+
|
87 |
+
if (ai_adb_parent.closest ('.ai-debug-block').length) {
|
88 |
+
ai_adb_parent = ai_adb_parent.parent ().parent ();
|
89 |
+
}
|
90 |
+
|
91 |
+
if (ai_adb_parent.closest ('.' + ai_block_class).length) {
|
92 |
+
ai_adb_parent = ai_adb_parent.parent ();
|
93 |
+
}
|
94 |
+
|
95 |
+
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")+"\"");
|
96 |
+
|
97 |
+
var ai_adb_text = $(this).data ("text");
|
98 |
+
if (typeof ai_adb_text == "undefined") ai_adb_text = "";
|
99 |
+
|
100 |
+
var ai_adb_css = $(this).data ("css");
|
101 |
+
if (typeof ai_adb_css == "undefined") ai_adb_css = "";
|
102 |
+
|
103 |
+
var ai_adb_selectors = $(this).data ("selectors");
|
104 |
+
if (typeof ai_adb_selectors == "undefined" || ai_adb_selectors == '') ai_adb_selectors = "p";
|
105 |
+
|
106 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE, text=\'" + ai_adb_text + '\'', 'css=\'' + ai_adb_css +'\'', "selectors='" + ai_adb_selectors + "'");
|
107 |
+
|
108 |
+
var ai_adb_action = false;
|
109 |
+
$(ai_adb_parent).find ('.' + ai_adb_content_replace_begin_class + ', .' + ai_adb_content_replace_end_class + ', ' + ai_adb_selectors).each (function () {
|
110 |
+
if ($(this).hasClass (ai_adb_content_replace_begin_class)) {$(this).remove (); ai_adb_action = true;}
|
111 |
+
else if ($(this).hasClass (ai_adb_content_replace_end_class)) {$(this).remove (); ai_adb_action = false;}
|
112 |
+
else if (ai_adb_action) {
|
113 |
+
if (ai_adb_text.length != 0) {
|
114 |
+
var n = Math.round ($(this).text ().length / (ai_adb_text.length + 1));
|
115 |
+
$(this).text (Array(n + 1).join(ai_adb_text + ' ').trim ());
|
116 |
+
} else $(this).text ('');
|
117 |
+
|
118 |
+
if (ai_adb_css != '') {
|
119 |
+
var ai_adb_style = $(this).attr ("style");
|
120 |
+
if (typeof ai_adb_style == "undefined") ai_adb_style = "";
|
121 |
+
else {
|
122 |
+
ai_adb_style = ai_adb_style.trim ();
|
123 |
+
if (ai_adb_style != '' && ai_adb_style [ai_adb_style.length - 1] != ';') {
|
124 |
+
ai_adb_style = ai_adb_style + ';';
|
125 |
+
}
|
126 |
+
}
|
127 |
+
if (ai_adb_css != '') {
|
128 |
+
ai_adb_css = ' ' + ai_adb_css;
|
129 |
+
}
|
130 |
+
$(this).attr ("style", ai_adb_style + ai_adb_css);
|
131 |
+
}
|
132 |
+
|
133 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING REPLACE:", $(this).prop ("tagName"), "id=\""+ $(this).attr ("id")+"\"", "class=\""+ $(this).attr ("class")+"\"");
|
134 |
+
}
|
135 |
+
});
|
136 |
+
});
|
137 |
+
|
138 |
+
}(jQuery));
|
139 |
+
}
|
140 |
+
|
141 |
+
function ai_adb_process_blocks (element) {
|
142 |
+
(function ($) {
|
143 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 2
|
144 |
+
// var ai_adb_debugging = false;
|
145 |
+
|
146 |
+
if (typeof element == 'undefined') {
|
147 |
+
element = $('body');
|
148 |
+
if (ai_adb_debugging) console.log ('');
|
149 |
+
}
|
150 |
+
|
151 |
+
// var ai_adb_data = $(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME);
|
152 |
+
var ai_adb_data = $(b64d ("Ym9keQ==")).attr (ai_adb_attribute);
|
153 |
+
if (typeof ai_adb_data === "string") {
|
154 |
+
var ai_adb_active = ai_adb_data == b64d ("bWFzaw==");
|
155 |
+
} else {
|
156 |
+
var ai_adb_active = null;
|
157 |
+
}
|
158 |
+
|
159 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions:", ai_adb_active, $(element).prop ("tagName") + '.' + $(element).attr ('class'));
|
160 |
+
|
161 |
+
if (typeof ai_adb_data === "string" && typeof ai_adb_active === "boolean") {
|
162 |
+
|
163 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions checking");
|
164 |
+
|
165 |
+
if (ai_adb_active) {
|
166 |
+
|
167 |
+
var code_inserted = false;
|
168 |
+
|
169 |
+
do {
|
170 |
+
var code_insertion = false;
|
171 |
+
|
172 |
+
// Don't use data () as the value will be cached - wrong value for tracking
|
173 |
+
$(".ai-adb-hide", element).each (function () {
|
174 |
+
$(this).css ({"display": "none", "visibility": "hidden"});
|
175 |
+
|
176 |
+
$(this).removeClass ('ai-adb-hide');
|
177 |
+
|
178 |
+
// Disable tracking
|
179 |
+
var wrapping_div = $(this).closest ('div[data-ai]');
|
180 |
+
if (typeof wrapping_div.attr ("data-ai") != "undefined") {
|
181 |
+
var data = JSON.parse (b64d (wrapping_div.attr ("data-ai")));
|
182 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
183 |
+
data [1] = "";
|
184 |
+
|
185 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING ", b64d (wrapping_div.attr ("data-ai")), ' <= ', JSON.stringify (data));
|
186 |
+
|
187 |
+
wrapping_div.attr ("data-ai", b64e (JSON.stringify (data)));
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
ai_disable_processing ($(this));
|
192 |
+
|
193 |
+
if (ai_adb_debugging) {
|
194 |
+
var debug_info = $(this).data ("ai-debug");
|
195 |
+
console.log ("AI AD BLOCKING HIDE", typeof debug_info != "undefined" ? debug_info : "");
|
196 |
+
}
|
197 |
+
});
|
198 |
+
|
199 |
+
// after hide to update tracking data on replace
|
200 |
+
// Don't use data () as the value will be cached - wrong value for tracking
|
201 |
+
$(".ai-adb-show", element).each (function () {
|
202 |
+
$(this).css ({"display": "block", "visibility": "visible"});
|
203 |
+
|
204 |
+
$(this).removeClass ('ai-adb-show');
|
205 |
+
|
206 |
+
if (typeof $(this).data ('code') != 'undefined') {
|
207 |
+
var adb_code = b64d ($(this).data ('code'));
|
208 |
+
|
209 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING SHOW INSERT CODE');
|
210 |
+
if (ai_adb_debugging) console.log ('');
|
211 |
+
|
212 |
+
$(this).append (adb_code);
|
213 |
+
|
214 |
+
code_insertion = true;
|
215 |
+
code_inserted = true;
|
216 |
+
|
217 |
+
// Process rotations to set versions before tracking data is set
|
218 |
+
if (typeof ai_process_elements == 'function') {
|
219 |
+
ai_process_elements ();
|
220 |
+
}
|
221 |
+
}
|
222 |
+
|
223 |
+
var tracking_data = $(this).attr ('data-ai-tracking');
|
224 |
+
if (typeof tracking_data != 'undefined') {
|
225 |
+
var wrapping_div = $(this).closest ('div[data-ai]');
|
226 |
+
if (typeof wrapping_div.attr ("data-ai") != "undefined") {
|
227 |
+
if ($(this).hasClass ('ai-no-tracking')) {
|
228 |
+
var data = JSON.parse (b64d (wrapping_div.attr ("data-ai")));
|
229 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
230 |
+
data [1] = "";
|
231 |
+
tracking_data = b64e (JSON.stringify (data));
|
232 |
+
}
|
233 |
+
}
|
234 |
+
|
235 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING ", b64d (wrapping_div.attr ("data-ai")), ' <= ', b64d (tracking_data));
|
236 |
+
|
237 |
+
wrapping_div.attr ("data-ai", tracking_data);
|
238 |
+
}
|
239 |
+
}
|
240 |
+
if (ai_adb_debugging) {
|
241 |
+
var debug_info = $(this).data ("ai-debug");
|
242 |
+
console.log ("AI AD BLOCKING SHOW", typeof debug_info != "undefined" ? debug_info : "");
|
243 |
+
}
|
244 |
+
});
|
245 |
+
} while (code_insertion);
|
246 |
+
|
247 |
+
setTimeout (function() {
|
248 |
+
if (typeof ai_process_impressions == 'function' && ai_tracking_finished == true) {
|
249 |
+
ai_process_impressions ();
|
250 |
+
}
|
251 |
+
if (typeof ai_install_click_trackers == 'function' && ai_tracking_finished == true) {
|
252 |
+
ai_install_click_trackers ();
|
253 |
+
}
|
254 |
+
}, 15);
|
255 |
+
|
256 |
+
setTimeout (ai_adb_process_content, 10);
|
257 |
+
} else {
|
258 |
+
// Prevent tracking if block was not displayed because of cookie
|
259 |
+
$(".ai-adb-hide", element).each (function () {
|
260 |
+
if (ai_adb_debugging) console.log ('AI ai-adb-hide', $(this), $(this).outerHeight (), $(this).closest ('.ai-adb-show').length);
|
261 |
+
|
262 |
+
$(this).removeClass ('ai-adb-hide');
|
263 |
+
|
264 |
+
if ($(this).outerHeight () == 0 && $(this).closest ('.ai-adb-show').length == 0) {
|
265 |
+
// Top level (not nested) block
|
266 |
+
var wrapper = $(this).closest ('div[data-ai]');
|
267 |
+
if (typeof wrapper.attr ("data-ai") != "undefined") {
|
268 |
+
var data = JSON.parse (b64d (wrapper.attr ("data-ai")));
|
269 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
270 |
+
data [1] = "";
|
271 |
+
|
272 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING DISABLED: ", b64d (wrapper.attr ("data-ai")), ' <= ', JSON.stringify (data));
|
273 |
+
|
274 |
+
wrapper.attr ("data-ai", b64e (JSON.stringify (data)));
|
275 |
+
|
276 |
+
// Hide block (wrapping div with margin)
|
277 |
+
wrapper.addClass ('ai-viewport-0').css ("display", "none");
|
278 |
+
}
|
279 |
+
}
|
280 |
+
|
281 |
+
}
|
282 |
+
});
|
283 |
+
|
284 |
+
$(".ai-adb-show", element).each (function () {
|
285 |
+
ai_disable_processing ($(this));
|
286 |
+
|
287 |
+
$(this).removeClass ('ai-adb-show');
|
288 |
+
|
289 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING SHOW disable processing', $(this).prop ("tagName") + '.' + $(this).attr ('class'));
|
290 |
+
});
|
291 |
+
}
|
292 |
+
}
|
293 |
+
|
294 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING block actions END");
|
295 |
+
}(jQuery));
|
296 |
+
}
|
297 |
+
|
298 |
+
ai_adb_detection_type_log = function (n) {
|
299 |
+
var type = ai_adb_detection_type (n);
|
300 |
+
var ai_adb_events = jQuery('#ai-adb-events');
|
301 |
+
if (ai_adb_events.count != 0) {
|
302 |
+
var message = ai_adb_events.text ();
|
303 |
+
if (message != '') message = message + ', '; else message = message + ', EVENTS: ';
|
304 |
+
message = message + n;
|
305 |
+
ai_adb_events.text (message);
|
306 |
+
}
|
307 |
+
return type;
|
308 |
+
}
|
309 |
+
|
310 |
+
ai_adb_detection_type = function (n) {
|
311 |
+
|
312 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 3
|
313 |
+
// var ai_adb_debugging = false;
|
314 |
+
|
315 |
+
if (ai_adb_debugging) {
|
316 |
+
switch (n) {
|
317 |
+
case 0:
|
318 |
+
return "0 debugging";
|
319 |
+
break;
|
320 |
+
case 1:
|
321 |
+
return "1 ads create element";
|
322 |
+
break;
|
323 |
+
case 2:
|
324 |
+
return "2 sponsors window var";
|
325 |
+
break;
|
326 |
+
case 3:
|
327 |
+
return "3 banner element";
|
328 |
+
break;
|
329 |
+
case 4:
|
330 |
+
return "4 custom selectors";
|
331 |
+
break;
|
332 |
+
case 5:
|
333 |
+
return "5 ga";
|
334 |
+
break;
|
335 |
+
case 6:
|
336 |
+
return "6 media.net";
|
337 |
+
break;
|
338 |
+
case 7:
|
339 |
+
return "7 adsense";
|
340 |
+
break;
|
341 |
+
case 8:
|
342 |
+
return "8 doubleclick.net";
|
343 |
+
break;
|
344 |
+
case 9:
|
345 |
+
return "9 fun adblock 3";
|
346 |
+
break;
|
347 |
+
case 10:
|
348 |
+
return "10 fun adblock 4";
|
349 |
+
break;
|
350 |
+
case 11:
|
351 |
+
return "11 banner js";
|
352 |
+
break;
|
353 |
+
case 12:
|
354 |
+
return "12 300x250 js";
|
355 |
+
break;
|
356 |
+
case 13:
|
357 |
+
return "13 amazon-adsystem";
|
358 |
+
break;
|
359 |
+
case 14:
|
360 |
+
return "14 quantserve.com";
|
361 |
+
break;
|
362 |
+
default:
|
363 |
+
return n;
|
364 |
+
break;
|
365 |
+
}
|
366 |
+
} else return '';
|
367 |
+
}
|
368 |
+
|
369 |
+
var ai_adb_detected = function (n) {
|
370 |
+
setTimeout (function() {
|
371 |
+
ai_adb_detected_actions (n);
|
372 |
+
}, 2);
|
373 |
+
}
|
374 |
+
|
375 |
+
var ai_disable_processing = function (element) {
|
376 |
+
jQuery(element).find ('.ai-lazy').removeClass ('ai-lazy'); // Disable lazy loading
|
377 |
+
jQuery(element).find ('.ai-manual').removeClass ('ai-manual'); // Disable manual loading
|
378 |
+
jQuery(element).find ('.ai-rotate').removeClass ('ai-unprocessed').removeAttr ('data-info'); // Disable rotations
|
379 |
+
jQuery(element).find ('.ai-list-data').removeClass ('ai-list-data'); // Disable lists
|
380 |
+
jQuery(element).find ('.ai-ip-data').removeClass ('ai-ip-data'); // Disable IP lists
|
381 |
+
jQuery(element).find ('[data-code]').removeAttr ('data-code'); // Disable insertions
|
382 |
+
}
|
383 |
+
|
384 |
+
var ai_adb_detected_actions = function(n) {
|
385 |
+
|
386 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 4
|
387 |
+
// var ai_adb_debugging = false;
|
388 |
+
|
389 |
+
if (ai_adb_debugging && n == 0) console.log ('');
|
390 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING DETECTED", ai_adb_detection_type_log (n));
|
391 |
+
|
392 |
+
if (!ai_adb_active) {
|
393 |
+
ai_adb_active = true;
|
394 |
+
|
395 |
+
// jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME, b64d ("bWFzaw=="));
|
396 |
+
jQuery(b64d ("Ym9keQ==")).attr (ai_adb_attribute, b64d ("bWFzaw=="));
|
397 |
+
|
398 |
+
(function ($) {
|
399 |
+
|
400 |
+
$(window).ready(function () {
|
401 |
+
ai_adb_process_blocks ();
|
402 |
+
|
403 |
+
// if (code_inserted && typeof ai_process_elements == 'function') {
|
404 |
+
// setTimeout (ai_process_elements, 20);
|
405 |
+
// }
|
406 |
+
});
|
407 |
+
|
408 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING action check");
|
409 |
+
// AiCookies.remove (ai_adb_pgv_cookie_name, {path: "/"});
|
410 |
+
|
411 |
+
// Disable action for bots
|
412 |
+
if (typeof MobileDetect !== "undefined") {
|
413 |
+
var md = new MobileDetect (window.navigator.userAgent);
|
414 |
+
|
415 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING IS BOT:', md.is ('bot'));
|
416 |
+
|
417 |
+
if (md.is ('bot')) {
|
418 |
+
ai_adb_action = 0;
|
419 |
+
}
|
420 |
+
}
|
421 |
+
|
422 |
+
if (ai_adb_page_views != '') {
|
423 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING page views delay:", ai_adb_page_views);
|
424 |
+
if (ai_adb_page_views.includes (',')) {
|
425 |
+
var ai_adb_page_view_parts = ai_adb_page_views.split (',');
|
426 |
+
|
427 |
+
var ai_adb_page_view_delay = parseInt (ai_adb_page_view_parts [0]);
|
428 |
+
var ai_adb_page_view_repeat = parseInt (ai_adb_page_view_parts [1]);
|
429 |
+
|
430 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING page views delay:", ai_adb_page_view_delay, "repeat:", ai_adb_page_view_repeat);
|
431 |
+
} else {
|
432 |
+
var ai_adb_page_view_delay = parseInt (ai_adb_page_views);
|
433 |
+
var ai_adb_page_view_repeat = 0
|
434 |
+
|
435 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING page views delay:", ai_adb_page_view_delay);
|
436 |
+
}
|
437 |
+
|
438 |
+
var ai_adb_page_view_counter = 1;
|
439 |
+
var cookie = AiCookies.get (ai_adb_pgv_cookie_name);
|
440 |
+
if (typeof cookie != "undefined") ai_adb_page_view_counter = parseInt (cookie) + 1;
|
441 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING page views cookie:", cookie, "- page view:", ai_adb_page_view_counter);
|
442 |
+
if (ai_adb_page_view_counter <= ai_adb_page_view_delay) {
|
443 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING", ai_adb_page_view_delay, "page views not reached, no action");
|
444 |
+
AiCookies.set (ai_adb_pgv_cookie_name, ai_adb_page_view_counter, {expires: 365, path: "/"});
|
445 |
+
window.ai_d1 = ai_adb_page_view_counter;
|
446 |
+
// window.AI_ADB_STATUS_MESSAGE=1;
|
447 |
+
ai_adb_message_code_1 ();
|
448 |
+
return;
|
449 |
+
}
|
450 |
+
if (ai_adb_page_view_repeat != 0) {
|
451 |
+
AiCookies.set (ai_adb_pgv_cookie_name, ai_adb_page_view_counter, {expires: 365, path: "/"});
|
452 |
+
if ((ai_adb_page_view_counter - ai_adb_page_view_delay - 1) % ai_adb_page_view_repeat != 0) {
|
453 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING every", ai_adb_page_view_repeat, "page views, no action");
|
454 |
+
window.ai_d1 = ai_adb_page_view_counter;
|
455 |
+
// window.AI_ADB_STATUS_MESSAGE=1;
|
456 |
+
ai_adb_message_code_1 ();
|
457 |
+
return;
|
458 |
+
}
|
459 |
+
}
|
460 |
+
}
|
461 |
+
|
462 |
+
if (ai_adb_message_cookie_lifetime != 0 && (ai_adb_action != 1 || !ai_adb_message_undismissible)) {
|
463 |
+
|
464 |
+
var cookie = AiCookies.get (ai_adb_act_cookie_name);
|
465 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING cookie:", cookie);
|
466 |
+
if (typeof cookie != "undefined" && cookie == ai_adb_cookie_value) {
|
467 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING valid cookie detected, no action");
|
468 |
+
// window.AI_ADB_STATUS_MESSAGE=2;
|
469 |
+
ai_adb_message_code_2 ();
|
470 |
+
return;
|
471 |
+
}
|
472 |
+
|
473 |
+
else if (ai_adb_debugging) console.log ("AI AD BLOCKING invalid cookie");
|
474 |
+
AiCookies.set (ai_adb_act_cookie_name, ai_adb_cookie_value, {expires: ai_adb_message_cookie_lifetime, path: "/"});
|
475 |
+
} else
|
476 |
+
AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
477 |
+
|
478 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING action", ai_adb_action);
|
479 |
+
|
480 |
+
if (ai_adb_action == 0) {
|
481 |
+
ai_dummy = 16; // Do not remove - to prevent optimization
|
482 |
+
// window.AI_ADB_STATUS_MESSAGE=6;
|
483 |
+
ai_adb_message_code_6 ();
|
484 |
+
ai_dummy ++; // Do not remove - to prevent optimization
|
485 |
+
} else {
|
486 |
+
// window.AI_ADB_STATUS_MESSAGE=3;
|
487 |
+
ai_adb_message_code_3 ();
|
488 |
+
ai_dummy = 13; // Do not remove - to prevent optimization
|
489 |
+
}
|
490 |
+
|
491 |
+
switch (ai_adb_action) {
|
492 |
+
case 1:
|
493 |
+
if (!ai_adb_message_undismissible) {
|
494 |
+
$(ai_adb_overlay).click (function () {
|
495 |
+
$(this).remove();
|
496 |
+
$(ai_adb_message_window).remove();
|
497 |
+
});
|
498 |
+
$(ai_adb_message_window).click (function () {
|
499 |
+
$(this).remove();
|
500 |
+
$(ai_adb_overlay).remove();
|
501 |
+
});
|
502 |
+
window.onkeydown = function( event ) {
|
503 |
+
if (event.keyCode === 27 ) {
|
504 |
+
$(ai_adb_overlay).click ();
|
505 |
+
$(ai_adb_message_window).click ();
|
506 |
+
}
|
507 |
+
}
|
508 |
+
|
509 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE click detection installed");
|
510 |
+
|
511 |
+
} else {
|
512 |
+
// AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
513 |
+
|
514 |
+
$(ai_adb_overlay).find ('[style*="cursor"]').css ("cursor", "no-drop");
|
515 |
+
$(ai_adb_message_window).find ('[style*="cursor"]').css ("cursor", "no-drop");
|
516 |
+
}
|
517 |
+
|
518 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING MESSAGE");
|
519 |
+
|
520 |
+
var body_children = $(b64d ("Ym9keQ==")).children ();
|
521 |
+
body_children.eq (Math.floor (Math.random() * body_children.length)).after ($(ai_adb_overlay));
|
522 |
+
body_children.eq (Math.floor (Math.random() * body_children.length)).after ($(ai_adb_message_window));
|
523 |
+
|
524 |
+
break;
|
525 |
+
case 2:
|
526 |
+
if (ai_adb_redirection_url != "") {
|
527 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING REDIRECTION to", ai_adb_redirection_url);
|
528 |
+
|
529 |
+
var redirect = true;
|
530 |
+
if (ai_adb_redirection_url.toLowerCase().substring (0, 4) == "http") {
|
531 |
+
if (window.location.href == ai_adb_redirection_url) var redirect = false;
|
532 |
+
} else {
|
533 |
+
if (window.location.pathname == ai_adb_redirection_url) var redirect = false;
|
534 |
+
}
|
535 |
+
|
536 |
+
if (redirect) {
|
537 |
+
var cookie = AiCookies.get (ai_adb_page_redirection_cookie_name);
|
538 |
+
if (typeof cookie == "undefined") {
|
539 |
+
var date = new Date();
|
540 |
+
date.setTime (date.getTime() + (10 * 1000));
|
541 |
+
AiCookies.set (ai_adb_page_redirection_cookie_name, window.location.href, {expires: date, path: "/"});
|
542 |
+
|
543 |
+
if (ai_adb_redirection_url.substr (ai_adb_redirection_url.length - 1) == "?") {
|
544 |
+
ai_adb_redirection_url = ai_adb_redirection_url.slice (0, - 1);
|
545 |
+
ai_adb_redirection_url = ai_adb_redirection_url + location.search;
|
546 |
+
|
547 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING redirection using query parameters:", location.search);
|
548 |
+
}
|
549 |
+
|
550 |
+
window.location.replace (ai_adb_redirection_url)
|
551 |
+
} else {
|
552 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING no redirection, cookie:", cookie);
|
553 |
+
|
554 |
+
}
|
555 |
+
} else {
|
556 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING already on page", window.location.href);
|
557 |
+
AiCookies.remove (ai_adb_page_redirection_cookie_name, {path: "/"});
|
558 |
+
}
|
559 |
+
}
|
560 |
+
break;
|
561 |
+
}
|
562 |
+
|
563 |
+
}(jQuery));
|
564 |
+
}
|
565 |
+
}
|
566 |
+
|
567 |
+
|
568 |
+
var ai_adb_undetected = function (n) {
|
569 |
+
setTimeout (function() {
|
570 |
+
if (!ai_adb_active) {
|
571 |
+
ai_adb_undetected_actions (n);
|
572 |
+
}
|
573 |
+
}, 200);
|
574 |
+
}
|
575 |
+
|
576 |
+
|
577 |
+
var ai_adb_undetected_actions = function (n) {
|
578 |
+
ai_adb_counter ++;
|
579 |
+
|
580 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 5
|
581 |
+
// var ai_adb_debugging = false;
|
582 |
+
|
583 |
+
// if (ai_adb_debugging && n == 1) console.log ('');
|
584 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING not detected:", '(' + ai_adb_counter + ')', ai_adb_detection_type (n));
|
585 |
+
|
586 |
+
if (!ai_adb_active && ai_adb_counter == 4) {
|
587 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING NOT DETECTED");
|
588 |
+
|
589 |
+
// jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME, b64d ("Y2xlYXI="));
|
590 |
+
jQuery(b64d ("Ym9keQ==")).attr (ai_adb_attribute, b64d ("Y2xlYXI="));
|
591 |
+
|
592 |
+
ai_dummy = 11; // Do not remove - to prevent optimization
|
593 |
+
// window.AI_ADB_STATUS_MESSAGE=4; // Check replacement code {}
|
594 |
+
ai_adb_message_code_4 ();
|
595 |
+
ai_dummy = 14; // Do not remove - to prevent optimization
|
596 |
+
|
597 |
+
// // Prevent tracking if block was not displayed because of cookie
|
598 |
+
// jQuery(".ai-adb-hide").each (function () {
|
599 |
+
// if (ai_adb_debugging) console.log ('AI ai-adb-hide', jQuery(this), jQuery(this).outerHeight (), jQuery(this).closest ('.ai-adb-show').length);
|
600 |
+
|
601 |
+
// if (jQuery(this).outerHeight () == 0 && jQuery(this).closest ('.ai-adb-show').length == 0) {
|
602 |
+
// // Top level (not nested) block
|
603 |
+
// var wrapper = jQuery(this).closest ('div[data-ai]');
|
604 |
+
// if (typeof wrapper.attr ("data-ai") != "undefined") {
|
605 |
+
// var data = JSON.parse (b64d (wrapper.attr ("data-ai")));
|
606 |
+
// if (typeof data !== "undefined" && data.constructor === Array) {
|
607 |
+
// data [1] = "";
|
608 |
+
|
609 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING TRACKING DISABLED: ", b64d (wrapper.attr ("data-ai")), ' <= ', JSON.stringify (data));
|
610 |
+
|
611 |
+
// wrapper.attr ("data-ai", b64e (JSON.stringify (data)));
|
612 |
+
|
613 |
+
// // Hide block (wrapping div with margin)
|
614 |
+
// wrapper.addClass ('ai-viewport-0').css ("display", "none");
|
615 |
+
// }
|
616 |
+
// }
|
617 |
+
|
618 |
+
// }
|
619 |
+
// });
|
620 |
+
|
621 |
+
// jQuery(".ai-adb-show").each (function () {
|
622 |
+
// ai_disable_processing (jQuery (this));
|
623 |
+
// });
|
624 |
+
|
625 |
+
ai_adb_process_blocks ();
|
626 |
+
|
627 |
+
// var redirected_page = false;
|
628 |
+
// if (ai_adb_redirection_url.toLowerCase().substring (0, 4) == "http") {
|
629 |
+
// if (window.location.href == ai_adb_redirection_url) var redirected_page = true;
|
630 |
+
// } else {
|
631 |
+
// if (window.location.pathname == ai_adb_redirection_url) var redirected_page = true;
|
632 |
+
// }
|
633 |
+
|
634 |
+
// if (redirected_page) {
|
635 |
+
// //var cookie = jQuery.cookie (ai_adb_page_redirection_cookie_name);
|
636 |
+
// var cookie = AiCookies.get (ai_adb_page_redirection_cookie_name);
|
637 |
+
// if (typeof cookie != "undefined" && cookie.toLowerCase().substring (0, 4) == "http") {
|
638 |
+
// if (ai_adb_debugging) console.log ("AI AD BLOCKING returning to", cookie);
|
639 |
+
// //jQuery.removeCookie (ai_adb_page_redirection_cookie_name, {path: "/"});
|
640 |
+
// AiCookies.remove (ai_adb_page_redirection_cookie_name, {path: "/"});
|
641 |
+
// window.location.replace (cookie);
|
642 |
+
// }
|
643 |
+
// }
|
644 |
+
|
645 |
+
}
|
646 |
+
}
|
647 |
+
|
648 |
+
if (AI_DBG_AI_DEBUG_AD_BLOCKING) jQuery (document).ready (function () {ai_adb_detected (0)});
|
649 |
+
|
650 |
+
jQuery (document).ready (function ($) {
|
651 |
+
$(window).ready (function () {
|
652 |
+
|
653 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 6
|
654 |
+
// var ai_adb_debugging = false;
|
655 |
+
|
656 |
+
// var ai_debugging_active = typeof ai_adb_fe_dbg !== 'undefined';
|
657 |
+
ai_debugging_active = typeof ai_adb_fe_dbg !== 'undefined';
|
658 |
+
|
659 |
+
setTimeout (function() {
|
660 |
+
$("#ai-adb-bar").click (function () {
|
661 |
+
AiCookies.remove (ai_adb_act_cookie_name, {path: "/"});
|
662 |
+
AiCookies.remove (ai_adb_pgv_cookie_name, {path: "/"});
|
663 |
+
// window.AI_ADB_STATUS_MESSAGE=5;
|
664 |
+
ai_adb_message_code_5 ();
|
665 |
+
ai_dummy = 15; // Do not remove - to prevent optimization
|
666 |
+
});
|
667 |
+
}, 2);
|
668 |
+
|
669 |
+
// if (jQuery("#banner-advert-container").length) {
|
670 |
+
// if ($("#banner-advert-container img").length > 0) {
|
671 |
+
// if ($("#banner-advert-container img").outerHeight() === 0) {
|
672 |
+
// if (!ai_adb_active || ai_debugging_active) ai_adb_detected (3);
|
673 |
+
// } else ai_adb_undetected (3);
|
674 |
+
// $("#banner-advert-container img").remove();
|
675 |
+
// }
|
676 |
+
// }
|
677 |
+
|
678 |
+
if ((!ai_adb_active || ai_debugging_active) && ai_adb_selectors != "") {
|
679 |
+
var ai_adb_el_counter = 0;
|
680 |
+
var ai_adb_el_zero = 0;
|
681 |
+
var ai_adb_selector = ai_adb_selectors.split (",");
|
682 |
+
$.each (ai_adb_selector, function (i) {
|
683 |
+
ai_adb_selector [i] = ai_adb_selector [i].trim ();
|
684 |
+
|
685 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING selector", ai_adb_selector [i]);
|
686 |
+
|
687 |
+
if ($(ai_adb_selector [i]).length != 0) {
|
688 |
+
$(ai_adb_selector [i]).each (function (n) {
|
689 |
+
|
690 |
+
var outer_height = $(this).outerHeight ();
|
691 |
+
|
692 |
+
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 ());
|
693 |
+
|
694 |
+
var ai_attributes = $(this).find ('.ai-attributes');
|
695 |
+
if (ai_attributes.length) {
|
696 |
+
ai_attributes.each (function (){
|
697 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING attributes height:", $(this).outerHeight ());
|
698 |
+
if (outer_height >= $(this).outerHeight ()) {
|
699 |
+
outer_height -= $(this).outerHeight ();
|
700 |
+
}
|
701 |
+
});
|
702 |
+
}
|
703 |
+
|
704 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING effective height:", outer_height);
|
705 |
+
|
706 |
+
ai_adb_el_counter ++;
|
707 |
+
if (outer_height === 0) {
|
708 |
+
$ (document).ready (function () {if (!ai_adb_active || ai_debugging_active) ai_adb_detected (4)});
|
709 |
+
ai_adb_el_zero ++;
|
710 |
+
if (!ai_debugging_active) return false;
|
711 |
+
}
|
712 |
+
|
713 |
+
});
|
714 |
+
|
715 |
+
}
|
716 |
+
});
|
717 |
+
if (ai_adb_el_counter != 0 && ai_adb_el_zero == 0) $(document).ready (function () {ai_adb_undetected (4)});
|
718 |
+
}
|
719 |
+
|
720 |
+
});
|
721 |
+
});
|
722 |
+
|
723 |
+
function ai_adb_get_script (ai_adb_script, ai_adb_action) {
|
724 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 7
|
725 |
+
// var ai_adb_debugging = false;
|
726 |
+
|
727 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING loading script", ai_adb_script);
|
728 |
+
|
729 |
+
var script = document.createElement ('script');
|
730 |
+
var date = new Date();
|
731 |
+
script.src = 'ai-adb-url' + ai_adb_script + '.js?ver=' + date.getTime();
|
732 |
+
|
733 |
+
var head = document.getElementsByTagName ('head')[0],
|
734 |
+
done = false;
|
735 |
+
|
736 |
+
// Attach handlers for all browsers
|
737 |
+
|
738 |
+
script.onerror = function () {
|
739 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING error loading script", ai_adb_script);
|
740 |
+
|
741 |
+
if (ai_adb_action) {
|
742 |
+
ai_adb_action ();
|
743 |
+
}
|
744 |
+
script.onerror = null;
|
745 |
+
head.removeChild (script);
|
746 |
+
}
|
747 |
+
|
748 |
+
script.onload = script.onreadystatechange = function () {
|
749 |
+
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
|
750 |
+
done = true;
|
751 |
+
|
752 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING script loaded ", ai_adb_script);
|
753 |
+
|
754 |
+
if (ai_adb_action) {
|
755 |
+
ai_adb_action ();
|
756 |
+
}
|
757 |
+
|
758 |
+
script.onload = script.onreadystatechange = null;
|
759 |
+
head.removeChild (script);
|
760 |
+
};
|
761 |
+
};
|
762 |
+
|
763 |
+
head.appendChild (script);
|
764 |
+
};
|
765 |
+
|
766 |
+
jQuery (window).on ('load', function () {
|
767 |
+
var ai_adb_debugging = typeof ai_debugging !== 'undefined'; // 8
|
768 |
+
// var ai_adb_debugging = false;
|
769 |
+
|
770 |
+
if (typeof MobileDetect !== "undefined") {
|
771 |
+
var md = new MobileDetect (window.navigator.userAgent);
|
772 |
+
|
773 |
+
// ENABLED FOR_ALL_DEVICES
|
774 |
+
if (ai_adb_devices != 6) {
|
775 |
+
|
776 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING DEVICES:', ai_adb_devices);
|
777 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING DEVICE desktop', !md.mobile ());
|
778 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING DEVICE mobile', !!md.mobile ());
|
779 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING DEVICE phone', !!md.phone ());
|
780 |
+
if (ai_adb_debugging) console.log ('AI AD BLOCKING DEVICE tablet', !!md.tablet ());
|
781 |
+
|
782 |
+
switch (ai_adb_devices) {
|
783 |
+
// ENABLED FOR DESKTOP_DEVICES
|
784 |
+
case 0:
|
785 |
+
if (!!md.mobile ()) return false;
|
786 |
+
break;
|
787 |
+
// ENABLED FOR MOBILE_DEVICES
|
788 |
+
case 1:
|
789 |
+
if (!md.mobile ()) return false;
|
790 |
+
break;
|
791 |
+
// ENABLED FOR TABLET_DEVICES
|
792 |
+
case 2:
|
793 |
+
if (!md.tablet ()) return false;
|
794 |
+
break;
|
795 |
+
// ENABLED FOR PHONE_DEVICES
|
796 |
+
case 3:
|
797 |
+
if (!md.phone ()) return false;
|
798 |
+
break;
|
799 |
+
// ENABLED FOR DESKTOP_TABLET_DEVICES
|
800 |
+
case 4:
|
801 |
+
if (!!md.phone ()) return false;
|
802 |
+
break;
|
803 |
+
// ENABLED FOR DESKTOP_PHONE_DEVICES
|
804 |
+
case 5:
|
805 |
+
if (!!md.tablet ()) return false;
|
806 |
+
break;
|
807 |
+
}
|
808 |
+
}
|
809 |
+
}
|
810 |
+
|
811 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING window load");
|
812 |
+
|
813 |
+
function ai_adb_1 () {
|
814 |
+
if (!document.getElementById (ai_adb_name_1)){
|
815 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (1);
|
816 |
+
} else {
|
817 |
+
ai_adb_undetected (1);
|
818 |
+
}
|
819 |
+
}
|
820 |
+
|
821 |
+
function ai_adb_2 () {
|
822 |
+
if (typeof window [ai_adb_name_2] == "undefined") {
|
823 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (2);
|
824 |
+
} else {
|
825 |
+
ai_adb_undetected (2);
|
826 |
+
}
|
827 |
+
}
|
828 |
+
|
829 |
+
function ai_adb_11 () {
|
830 |
+
if (typeof window.ad_banner == "undefined") {
|
831 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (11);
|
832 |
+
} else {
|
833 |
+
ai_adb_undetected (11);
|
834 |
+
}
|
835 |
+
}
|
836 |
+
|
837 |
+
function ai_adb_12 () {
|
838 |
+
if (typeof window.ad_300x250 == "undefined") {
|
839 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (12);
|
840 |
+
} else {
|
841 |
+
ai_adb_undetected (12);
|
842 |
+
}
|
843 |
+
}
|
844 |
+
|
845 |
+
function ai_adb_external_scripts () {
|
846 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING check external scripts");
|
847 |
+
|
848 |
+
var element = jQuery (b64d ("I2FpLWFkYi1nYQ=="));
|
849 |
+
if (element.length) {
|
850 |
+
if (!!(element.width () * element.height ())) {
|
851 |
+
ai_adb_undetected (5);
|
852 |
+
} else {
|
853 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (5);
|
854 |
+
}
|
855 |
+
}
|
856 |
+
|
857 |
+
var element = jQuery (b64d ("I2FpLWFkYi1tbg=="));
|
858 |
+
if (element.length) {
|
859 |
+
if (!!(element.width () * element.height ())) {
|
860 |
+
ai_adb_undetected (6);
|
861 |
+
} else {
|
862 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (6);
|
863 |
+
}
|
864 |
+
}
|
865 |
+
|
866 |
+
var element = jQuery (b64d ("I2FpLWFkYi1kYmxjbGs="));
|
867 |
+
if (element.length) {
|
868 |
+
if (!!(element.width () * element.height ())) {
|
869 |
+
ai_adb_undetected (8);
|
870 |
+
} else {
|
871 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (8);
|
872 |
+
}
|
873 |
+
}
|
874 |
+
|
875 |
+
var element = jQuery (b64d ("I2FpLWFkYi1hbQ=="));
|
876 |
+
if (element.length) {
|
877 |
+
if (!!(element.width () * element.height ())) {
|
878 |
+
ai_adb_undetected (13);
|
879 |
+
} else {
|
880 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (13);
|
881 |
+
}
|
882 |
+
}
|
883 |
+
|
884 |
+
var element = jQuery (b64d ("I2FpLWFkYi1xdQ=="));
|
885 |
+
if (element.length) {
|
886 |
+
if (!!(element.width () * element.height ())) {
|
887 |
+
ai_adb_undetected (14);
|
888 |
+
} else {
|
889 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (14);
|
890 |
+
}
|
891 |
+
}
|
892 |
+
}
|
893 |
+
|
894 |
+
setTimeout (function() {
|
895 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING delayed checks external scripts");
|
896 |
+
|
897 |
+
ai_adb_external_scripts ();
|
898 |
+
|
899 |
+
// Check again, result is delayed
|
900 |
+
setTimeout (function() {
|
901 |
+
if (!ai_adb_active) {
|
902 |
+
setTimeout (function() {
|
903 |
+
ai_adb_external_scripts ();
|
904 |
+
}, 400);
|
905 |
+
}
|
906 |
+
}, 5);
|
907 |
+
}, 1050);
|
908 |
+
|
909 |
+
setTimeout (function() {
|
910 |
+
var ai_debugging_active = typeof ai_adb_fe_dbg !== 'undefined';
|
911 |
+
|
912 |
+
if (ai_adb_debugging) console.log ("AI AD BLOCKING delayed checks 1, 2, 3, 11, 12");
|
913 |
+
|
914 |
+
if (jQuery(b64d ("I2FpLWFkYi1hZHM=")).length) {
|
915 |
+
if (!document.getElementById (ai_adb_name_1)) {
|
916 |
+
ai_adb_get_script ('ads', ai_adb_1);
|
917 |
+
} else ai_adb_1 ();
|
918 |
+
}
|
919 |
+
|
920 |
+
if (jQuery(b64d ("I2FpLWFkYi1zcG9uc29ycw==")).length) {
|
921 |
+
if (typeof window [ai_adb_name_2] == "undefined") {
|
922 |
+
ai_adb_get_script ('sponsors', ai_adb_2);
|
923 |
+
} else ai_adb_2 ();
|
924 |
+
}
|
925 |
+
|
926 |
+
var banner_advert_container = b64d ("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVy");
|
927 |
+
var banner_advert_container_img = b64d ("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVyIGltZw==");
|
928 |
+
if (jQuery(banner_advert_container).length) {
|
929 |
+
if (jQuery(banner_advert_container_img).length > 0) {
|
930 |
+
if (jQuery(banner_advert_container_img).outerHeight() === 0) {
|
931 |
+
if (!ai_adb_active || ai_debugging_active) ai_adb_detected (3);
|
932 |
+
} else ai_adb_undetected (3);
|
933 |
+
jQuery(banner_advert_container_img).remove();
|
934 |
+
}
|
935 |
+
}
|
936 |
+
|
937 |
+
if (jQuery(b64d ("I2FpLWFkYi1iYW5uZXI=")).length) {
|
938 |
+
ai_adb_11 ();
|
939 |
+
}
|
940 |
+
|
941 |
+
if (jQuery(b64d ("I2FpLWFkYi0zMDB4MjUw")).length) {
|
942 |
+
ai_adb_12 ();
|
943 |
+
}
|
944 |
+
}, 1150);
|
945 |
+
});
|
946 |
+
|
includes/js/ai-adb.q.min.js
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function ai_adb_process_content(){(function(a){a("."+ai_adb_content_css_begin_class).each(function(){var b=a(this).parent();b.closest(".ai-debug-block").length&&(b=b.parent().parent());b.closest("."+ai_block_class).length&&(b=b.parent());var e=a(this).data("css");"undefined"==typeof e&&(e="display: none !important;");var c=a(this).data("selectors");if("undefined"==typeof c||""==c)c="p";var d=!1;a(b).find("."+ai_adb_content_css_begin_class+", ."+ai_adb_content_css_end_class+", "+c).each(function(){if(a(this).hasClass(ai_adb_content_css_begin_class))a(this).remove(),
|
2 |
+
d=!0;else if(a(this).hasClass(ai_adb_content_css_end_class))a(this).remove(),d=!1;else if(d){var f=a(this).attr("style");"undefined"==typeof f?f="":(f=f.trim(),""!=f&&";"!=f[f.length-1]&&(f+=";"));a(this).attr("style",f+" "+e)}})});a("."+ai_adb_content_delete_begin_class).each(function(){var b=a(this).parent();b.closest(".ai-debug-block").length&&(b=b.parent().parent());b.closest("."+ai_block_class).length&&(b=b.parent());var e=a(this).data("selectors");if("undefined"==typeof e||""==e)e="p";var c=
|
3 |
+
!1;a(b).find("."+ai_adb_content_delete_begin_class+", ."+ai_adb_content_delete_end_class+", "+e).each(function(){a(this).hasClass(ai_adb_content_delete_begin_class)?(a(this).remove(),c=!0):a(this).hasClass(ai_adb_content_delete_end_class)?(a(this).remove(),c=!1):c&&a(this).remove()})});a("."+ai_adb_content_replace_begin_class).each(function(){var b=a(this).parent();b.closest(".ai-debug-block").length&&(b=b.parent().parent());b.closest("."+ai_block_class).length&&(b=b.parent());var e=a(this).data("text");
|
4 |
+
"undefined"==typeof e&&(e="");var c=a(this).data("css");"undefined"==typeof c&&(c="");var d=a(this).data("selectors");if("undefined"==typeof d||""==d)d="p";var f=!1;a(b).find("."+ai_adb_content_replace_begin_class+", ."+ai_adb_content_replace_end_class+", "+d).each(function(){if(a(this).hasClass(ai_adb_content_replace_begin_class))a(this).remove(),f=!0;else if(a(this).hasClass(ai_adb_content_replace_end_class))a(this).remove(),f=!1;else if(f){if(0!=e.length){var g=Math.round(a(this).text().length/
|
5 |
+
(e.length+1));a(this).text(Array(g+1).join(e+" ").trim())}else a(this).text("");""!=c&&(g=a(this).attr("style"),"undefined"==typeof g?g="":(g=g.trim(),""!=g&&";"!=g[g.length-1]&&(g+=";")),""!=c&&(c=" "+c),a(this).attr("style",g+c))}})})})(jQuery)}
|
6 |
+
function ai_adb_process_blocks(a){(function(b){"undefined"==typeof a&&(a=b("body"));var e=b(b64d("Ym9keQ==")).attr(ai_adb_attribute),c="string"===typeof e?e==b64d("bWFzaw=="):null;if("string"===typeof e&&"boolean"===typeof c)if(c){do{var d=!1;b(".ai-adb-hide",a).each(function(){b(this).css({display:"none",visibility:"hidden"});b(this).removeClass("ai-adb-hide");var f=b(this).closest("div[data-ai]");if("undefined"!=typeof f.attr("data-ai")){var g=JSON.parse(b64d(f.attr("data-ai")));"undefined"!==typeof g&&
|
7 |
+
g.constructor===Array&&(g[1]="",f.attr("data-ai",b64e(JSON.stringify(g))))}ai_disable_processing(b(this))});b(".ai-adb-show",a).each(function(){b(this).css({display:"block",visibility:"visible"});b(this).removeClass("ai-adb-show");if("undefined"!=typeof b(this).data("code")){var f=b64d(b(this).data("code"));b(this).append(f);d=!0;"function"==typeof ai_process_elements&&ai_process_elements()}f=b(this).attr("data-ai-tracking");if("undefined"!=typeof f){var g=b(this).closest("div[data-ai]");if("undefined"!=
|
8 |
+
typeof g.attr("data-ai")){if(b(this).hasClass("ai-no-tracking")){var h=JSON.parse(b64d(g.attr("data-ai")));"undefined"!==typeof h&&h.constructor===Array&&(h[1]="",f=b64e(JSON.stringify(h)))}g.attr("data-ai",f)}}})}while(d);setTimeout(function(){"function"==typeof ai_process_impressions&&1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers()},15);setTimeout(ai_adb_process_content,10)}else b(".ai-adb-hide",
|
9 |
+
a).each(function(){b(this).removeClass("ai-adb-hide");if(0==b(this).outerHeight()&&0==b(this).closest(".ai-adb-show").length){var f=b(this).closest("div[data-ai]");if("undefined"!=typeof f.attr("data-ai")){var g=JSON.parse(b64d(f.attr("data-ai")));"undefined"!==typeof g&&g.constructor===Array&&(g[1]="",f.attr("data-ai",b64e(JSON.stringify(g))),f.addClass("ai-viewport-0").css("display","none"))}}}),b(".ai-adb-show",a).each(function(){ai_disable_processing(b(this));b(this).removeClass("ai-adb-show")})})(jQuery)}
|
10 |
+
ai_adb_detection_type_log=function(a){var b=ai_adb_detection_type(a),e=jQuery("#ai-adb-events");if(0!=e.count){var c=e.text();e.text((""!=c?c+", ":c+", EVENTS: ")+a)}return b};ai_adb_detection_type=function(a){return""};
|
11 |
+
var ai_adb_detected=function(a){setTimeout(function(){ai_adb_detected_actions(a)},2)},ai_disable_processing=function(a){jQuery(a).find(".ai-lazy").removeClass("ai-lazy");jQuery(a).find(".ai-manual").removeClass("ai-manual");jQuery(a).find(".ai-rotate").removeClass("ai-unprocessed").removeAttr("data-info");jQuery(a).find(".ai-list-data").removeClass("ai-list-data");jQuery(a).find(".ai-ip-data").removeClass("ai-ip-data");jQuery(a).find("[data-code]").removeAttr("data-code")},ai_adb_detected_actions=
|
12 |
+
function(a){ai_adb_active||(ai_adb_active=!0,jQuery(b64d("Ym9keQ==")).attr(ai_adb_attribute,b64d("bWFzaw==")),function(b){b(window).ready(function(){ai_adb_process_blocks()});"undefined"!==typeof MobileDetect&&(new MobileDetect(window.navigator.userAgent)).is("bot")&&(ai_adb_action=0);if(""!=ai_adb_page_views){if(ai_adb_page_views.includes(",")){var e=ai_adb_page_views.split(","),c=parseInt(e[0]);e=parseInt(e[1])}else c=parseInt(ai_adb_page_views),e=0;var d=1,f=AiCookies.get(ai_adb_pgv_cookie_name);
|
13 |
+
"undefined"!=typeof f&&(d=parseInt(f)+1);if(d<=c){AiCookies.set(ai_adb_pgv_cookie_name,d,{expires:365,path:"/"});window.ai_d1=d;ai_adb_message_code_1();return}if(0!=e&&(AiCookies.set(ai_adb_pgv_cookie_name,d,{expires:365,path:"/"}),0!=(d-c-1)%e)){window.ai_d1=d;ai_adb_message_code_1();return}}if(0==ai_adb_message_cookie_lifetime||1==ai_adb_action&&ai_adb_message_undismissible)AiCookies.remove(ai_adb_act_cookie_name,{path:"/"});else{f=AiCookies.get(ai_adb_act_cookie_name);if("undefined"!=typeof f&&
|
14 |
+
f==ai_adb_cookie_value){ai_adb_message_code_2();return}AiCookies.set(ai_adb_act_cookie_name,ai_adb_cookie_value,{expires:ai_adb_message_cookie_lifetime,path:"/"})}0==ai_adb_action?(ai_dummy=16,ai_adb_message_code_6(),ai_dummy++):(ai_adb_message_code_3(),ai_dummy=13);switch(ai_adb_action){case 1:ai_adb_message_undismissible?(b(ai_adb_overlay).find('[style*="cursor"]').css("cursor","no-drop"),b(ai_adb_message_window).find('[style*="cursor"]').css("cursor","no-drop")):(b(ai_adb_overlay).click(function(){b(this).remove();
|
15 |
+
b(ai_adb_message_window).remove()}),b(ai_adb_message_window).click(function(){b(this).remove();b(ai_adb_overlay).remove()}),window.onkeydown=function(g){27===g.keyCode&&(b(ai_adb_overlay).click(),b(ai_adb_message_window).click())});c=b(b64d("Ym9keQ==")).children();c.eq(Math.floor(Math.random()*c.length)).after(b(ai_adb_overlay));c.eq(Math.floor(Math.random()*c.length)).after(b(ai_adb_message_window));break;case 2:""!=ai_adb_redirection_url&&(c=!0,"http"==ai_adb_redirection_url.toLowerCase().substring(0,
|
16 |
+
4)?window.location.href==ai_adb_redirection_url&&(c=!1):window.location.pathname==ai_adb_redirection_url&&(c=!1),c?(f=AiCookies.get(ai_adb_page_redirection_cookie_name),"undefined"==typeof f&&(c=new Date,c.setTime(c.getTime()+1E4),AiCookies.set(ai_adb_page_redirection_cookie_name,window.location.href,{expires:c,path:"/"}),"?"==ai_adb_redirection_url.substr(ai_adb_redirection_url.length-1)&&(ai_adb_redirection_url=ai_adb_redirection_url.slice(0,-1),ai_adb_redirection_url+=location.search),window.location.replace(ai_adb_redirection_url))):
|
17 |
+
AiCookies.remove(ai_adb_page_redirection_cookie_name,{path:"/"}))}}(jQuery))},ai_adb_undetected=function(a){setTimeout(function(){ai_adb_active||ai_adb_undetected_actions(a)},200)},ai_adb_undetected_actions=function(a){ai_adb_counter++;ai_adb_active||4!=ai_adb_counter||(jQuery(b64d("Ym9keQ==")).attr(ai_adb_attribute,b64d("Y2xlYXI=")),ai_dummy=11,ai_adb_message_code_4(),ai_dummy=14,ai_adb_process_blocks())};AI_DBG_AI_DEBUG_AD_BLOCKING&&jQuery(document).ready(function(){ai_adb_detected(0)});
|
18 |
+
jQuery(document).ready(function(a){a(window).ready(function(){ai_debugging_active="undefined"!==typeof ai_adb_fe_dbg;setTimeout(function(){a("#ai-adb-bar").click(function(){AiCookies.remove(ai_adb_act_cookie_name,{path:"/"});AiCookies.remove(ai_adb_pgv_cookie_name,{path:"/"});ai_adb_message_code_5();ai_dummy=15})},2);if((!ai_adb_active||ai_debugging_active)&&""!=ai_adb_selectors){var b=0,e=0,c=ai_adb_selectors.split(",");a.each(c,function(d){c[d]=c[d].trim();0!=a(c[d]).length&&a(c[d]).each(function(f){var g=
|
19 |
+
a(this).outerHeight();f=a(this).find(".ai-attributes");f.length&&f.each(function(){g>=a(this).outerHeight()&&(g-=a(this).outerHeight())});b++;if(0===g&&(a(document).ready(function(){ai_adb_active&&!ai_debugging_active||ai_adb_detected(4)}),e++,!ai_debugging_active))return!1})});0!=b&&0==e&&a(document).ready(function(){ai_adb_undetected(4)})}})});
|
20 |
+
function ai_adb_get_script(a,b){var e=document.createElement("script");e.src="ai-adb-url"+a+".js?ver="+(new Date).getTime();var c=document.getElementsByTagName("head")[0],d=!1;e.onerror=function(){b&&b();e.onerror=null;c.removeChild(e)};e.onload=e.onreadystatechange=function(){d||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(d=!0,b&&b(),e.onload=e.onreadystatechange=null,c.removeChild(e))};c.appendChild(e)}
|
21 |
+
jQuery(window).on("load",function(){function a(){document.getElementById(ai_adb_name_1)?ai_adb_undetected(1):ai_adb_active&&!ai_debugging_active||ai_adb_detected(1)}function b(){"undefined"==typeof window[ai_adb_name_2]?(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(2):ai_adb_undetected(2)}function e(){var d=jQuery(b64d("I2FpLWFkYi1nYQ=="));d.length&&(d.width()*d.height()?ai_adb_undetected(5):(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(5));d=jQuery(b64d("I2FpLWFkYi1tbg=="));d.length&&
|
22 |
+
(d.width()*d.height()?ai_adb_undetected(6):(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(6));d=jQuery(b64d("I2FpLWFkYi1kYmxjbGs="));d.length&&(d.width()*d.height()?ai_adb_undetected(8):(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(8));d=jQuery(b64d("I2FpLWFkYi1hbQ=="));d.length&&(d.width()*d.height()?ai_adb_undetected(13):(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(13));d=jQuery(b64d("I2FpLWFkYi1xdQ=="));d.length&&(d.width()*d.height()?ai_adb_undetected(14):(!ai_adb_active||
|
23 |
+
ai_debugging_active)&&ai_adb_detected(14))}if("undefined"!==typeof MobileDetect){var c=new MobileDetect(window.navigator.userAgent);if(6!=ai_adb_devices)switch(ai_adb_devices){case 0:if(c.mobile())return!1;break;case 1:if(!c.mobile())return!1;break;case 2:if(!c.tablet())return!1;break;case 3:if(!c.phone())return!1;break;case 4:if(c.phone())return!1;break;case 5:if(c.tablet())return!1}}setTimeout(function(){e();setTimeout(function(){ai_adb_active||setTimeout(function(){e()},400)},5)},1050);setTimeout(function(){var d=
|
24 |
+
"undefined"!==typeof ai_adb_fe_dbg;jQuery(b64d("I2FpLWFkYi1hZHM=")).length&&(document.getElementById(ai_adb_name_1)?a():ai_adb_get_script("ads",a));jQuery(b64d("I2FpLWFkYi1zcG9uc29ycw==")).length&&("undefined"==typeof window[ai_adb_name_2]?ai_adb_get_script("sponsors",b):b());var f=b64d("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVy"),g=b64d("I2Jhbm5lci1hZHZlcnQtY29udGFpbmVyIGltZw==");jQuery(f).length&&0<jQuery(g).length&&(0===jQuery(g).outerHeight()?(!ai_adb_active||d)&&ai_adb_detected(3):ai_adb_undetected(3),
|
25 |
+
jQuery(g).remove());jQuery(b64d("I2FpLWFkYi1iYW5uZXI=")).length&&("undefined"==typeof window.ad_banner?(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(11):ai_adb_undetected(11));jQuery(b64d("I2FpLWFkYi0zMDB4MjUw")).length&&("undefined"==typeof window.ad_300x250?(!ai_adb_active||ai_debugging_active)&&ai_adb_detected(12):ai_adb_undetected(12))},1150)});
|
includes/js/ai-ads-data.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
var ai_adsense_ad_names = [];
|
2 |
+
var ai_preview_window = typeof ai_preview !== 'undefined';
|
3 |
+
var ai_ajax_url = 'AI_AJAXURL';
|
4 |
+
var ai_nonce = 'AI_NONCE';
|
includes/js/ai-ads-data.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
var ai_adsense_ad_names=[],ai_preview_window="undefined"!==typeof ai_preview,ai_ajax_url="AI_AJAXURL",ai_nonce="AI_NONCE";
|
includes/js/ai-ads.js
CHANGED
@@ -1,12 +1,15 @@
|
|
1 |
-
|
2 |
-
|
|
|
|
|
3 |
|
4 |
function ai_process_adsense_ad (element) {
|
5 |
-
|
6 |
-
var ai_debug = false;
|
7 |
|
8 |
// var adsense_container = jQuery(element);
|
9 |
var adsense_container = element;
|
|
|
10 |
// var adsense_width = adsense_container.attr ('width');
|
11 |
var adsense_width = adsense_container.getAttribute ('width');
|
12 |
// var adsense_height = adsense_container.attr ('height');
|
@@ -31,10 +34,10 @@ function ai_process_adsense_ad (element) {
|
|
31 |
var adsense_ad_info = '';
|
32 |
if (typeof adsense_ad_slot !== 'undefined') {
|
33 |
var adsense_ad_name = '';
|
34 |
-
if (typeof
|
35 |
-
|
36 |
-
typeof
|
37 |
-
adsense_ad_name = '<div class="ai-info ai-info-2">' +
|
38 |
}
|
39 |
adsense_ad_info = '<div class="ai-info ai-info-1">' + adsense_ad_slot + '</div>' + adsense_ad_name;
|
40 |
} else {
|
@@ -63,33 +66,33 @@ function ai_process_adsense_ad (element) {
|
|
63 |
}
|
64 |
}
|
65 |
|
66 |
-
function ai_process_adsense_ads () {
|
67 |
-
|
68 |
-
document.querySelectorAll ('ins
|
69 |
-
if (!!(el.offsetWidth || el.offsetHeight || el.getClientRects ().length)) {
|
70 |
-
|
71 |
-
ai_process_adsense_ad (el);
|
72 |
-
}
|
73 |
-
});
|
74 |
-
}
|
75 |
|
76 |
|
77 |
//jQuery(document).ready(function($) {
|
78 |
function ai_load_adsense_ad_units () {
|
79 |
|
80 |
-
|
81 |
-
var ai_debug = false;
|
82 |
|
83 |
-
var
|
84 |
-
var
|
85 |
// var adsense_data = {'ai': 1}; // dummy
|
86 |
|
87 |
-
// $.post (
|
88 |
// ).done (function (data) {
|
89 |
|
90 |
var data = {
|
91 |
'action': "ai_ajax",
|
92 |
-
'ai_check':
|
93 |
'adsense-ad-units[ai]': 1
|
94 |
};
|
95 |
|
@@ -102,7 +105,7 @@ function ai_load_adsense_ad_units () {
|
|
102 |
formBody = formBody.join ("&");
|
103 |
|
104 |
async function ai_load_adsense () {
|
105 |
-
const response = await fetch (
|
106 |
method: 'POST',
|
107 |
headers: {
|
108 |
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
@@ -118,10 +121,10 @@ function ai_load_adsense_ad_units () {
|
|
118 |
ai_load_adsense ().then (data => {
|
119 |
if (data != '') {
|
120 |
try {
|
121 |
-
|
122 |
|
123 |
if (ai_debug) console.log ('');
|
124 |
-
if (ai_debug) console.log ("AI ADSENSE DATA:", Object.keys (
|
125 |
|
126 |
} catch (error) {
|
127 |
if (ai_debug) console.log ("AI ADSENSE DATA ERROR:", data);
|
@@ -235,3 +238,4 @@ function getAllUrlParams (url) {
|
|
235 |
return obj;
|
236 |
}
|
237 |
|
|
1 |
+
if (typeof ai_adsense_ad_names !== 'undefined') {
|
2 |
+
|
3 |
+
//var ai_adsense_ad_names = [];
|
4 |
+
//var ai_preview_window = typeof ai_preview !== 'undefined';
|
5 |
|
6 |
function ai_process_adsense_ad (element) {
|
7 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
8 |
+
// var ai_debug = false;
|
9 |
|
10 |
// var adsense_container = jQuery(element);
|
11 |
var adsense_container = element;
|
12 |
+
|
13 |
// var adsense_width = adsense_container.attr ('width');
|
14 |
var adsense_width = adsense_container.getAttribute ('width');
|
15 |
// var adsense_height = adsense_container.attr ('height');
|
34 |
var adsense_ad_info = '';
|
35 |
if (typeof adsense_ad_slot !== 'undefined') {
|
36 |
var adsense_ad_name = '';
|
37 |
+
if (typeof ai_adsense_ad_names ['publisher_id'] !== 'undefined' &&
|
38 |
+
ai_adsense_ad_names ['publisher_id'] == adsense_publisher_id &&
|
39 |
+
typeof ai_adsense_ad_names [adsense_ad_slot] !== 'undefined') {
|
40 |
+
adsense_ad_name = '<div class="ai-info ai-info-2">' + ai_adsense_ad_names [adsense_ad_slot] + '</div>';
|
41 |
}
|
42 |
adsense_ad_info = '<div class="ai-info ai-info-1">' + adsense_ad_slot + '</div>' + adsense_ad_name;
|
43 |
} else {
|
66 |
}
|
67 |
}
|
68 |
|
69 |
+
//function ai_process_adsense_ads () {
|
70 |
+
//// jQuery('ins > ins > iframe[src*="google"]:visible').each (function () {
|
71 |
+
// document.querySelectorAll ('ins iframe[src*="google"]').forEach ((el, index) => {
|
72 |
+
// if (!!(el.offsetWidth || el.offsetHeight || el.getClientRects ().length)) {
|
73 |
+
//// ai_process_adsense_ad (this);
|
74 |
+
// ai_process_adsense_ad (el);
|
75 |
+
// }
|
76 |
+
// });
|
77 |
+
//}
|
78 |
|
79 |
|
80 |
//jQuery(document).ready(function($) {
|
81 |
function ai_load_adsense_ad_units () {
|
82 |
|
83 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
84 |
+
// var ai_debug = false;
|
85 |
|
86 |
+
// var ai_ajax_url = 'AI_AJAXURL';
|
87 |
+
// var ai_nonce = 'AI_NONCE';
|
88 |
// var adsense_data = {'ai': 1}; // dummy
|
89 |
|
90 |
+
// $.post (ai_ajax_url, {'action': 'ai_ajax', 'ai_check': ai_nonce, 'adsense-ad-units': adsense_data}
|
91 |
// ).done (function (data) {
|
92 |
|
93 |
var data = {
|
94 |
'action': "ai_ajax",
|
95 |
+
'ai_check': ai_nonce,
|
96 |
'adsense-ad-units[ai]': 1
|
97 |
};
|
98 |
|
105 |
formBody = formBody.join ("&");
|
106 |
|
107 |
async function ai_load_adsense () {
|
108 |
+
const response = await fetch (ai_ajax_url, {
|
109 |
method: 'POST',
|
110 |
headers: {
|
111 |
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
121 |
ai_load_adsense ().then (data => {
|
122 |
if (data != '') {
|
123 |
try {
|
124 |
+
ai_adsense_ad_names = JSON.parse (data);
|
125 |
|
126 |
if (ai_debug) console.log ('');
|
127 |
+
if (ai_debug) console.log ("AI ADSENSE DATA:", Object.keys (ai_adsense_ad_names).length - 1, 'ad units');
|
128 |
|
129 |
} catch (error) {
|
130 |
if (ai_debug) console.log ("AI ADSENSE DATA ERROR:", data);
|
238 |
return obj;
|
239 |
}
|
240 |
|
241 |
+
}
|
includes/js/ai-ads.min.js
CHANGED
@@ -1 +1,28 @@
|
|
1 |
-
var
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
|
2 |
+
$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,d){if(a==Array.prototype||a==Object.prototype)return a;a[b]=d.value;return a};
|
3 |
+
$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var d=a[b];if(d&&d.Math==Math)return d}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};
|
4 |
+
$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var d=$jscomp.propertyToPolyfillSymbol[b];if(null==d)return a[b];d=a[d];return void 0!==d?d:a[b]};$jscomp.polyfill=function(a,b,d,c){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,d,c):$jscomp.polyfillUnisolated(a,b,d,c))};
|
5 |
+
$jscomp.polyfillUnisolated=function(a,b,d,c){d=$jscomp.global;a=a.split(".");for(c=0;c<a.length-1;c++){var e=a[c];if(!(e in d))return;d=d[e]}a=a[a.length-1];c=d[a];b=b(c);b!=c&&null!=b&&$jscomp.defineProperty(d,a,{configurable:!0,writable:!0,value:b})};
|
6 |
+
$jscomp.polyfillIsolated=function(a,b,d,c){var e=a.split(".");a=1===e.length;c=e[0];c=!a&&c in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<e.length-1;f++){var g=e[f];if(!(g in c))return;c=c[g]}e=e[e.length-1];d=$jscomp.IS_SYMBOL_NATIVE&&"es6"===d?c[e]:null;b=b(d);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,e,{configurable:!0,writable:!0,value:b}):b!==d&&(void 0===$jscomp.propertyToPolyfillSymbol[e]&&(d=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?
|
7 |
+
$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+d+"$"+e),$jscomp.defineProperty(c,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(d){}return!1};
|
8 |
+
$jscomp.setPrototypeOf=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null;$jscomp.generator={};$jscomp.generator.ensureIteratorResultIsObject_=function(a){if(!(a instanceof Object))throw new TypeError("Iterator result "+a+" is not an object");};
|
9 |
+
$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null};$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};
|
10 |
+
$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(a){this.yieldResult=a};$jscomp.generator.Context.prototype.throw_=function(a){this.abruptCompletion_={exception:a,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype["return"]=function(a){this.abruptCompletion_={"return":a};this.nextAddress=this.finallyAddress_};
|
11 |
+
$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(a){this.abruptCompletion_={jumpTo:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(a,b){this.nextAddress=b;return{value:a}};$jscomp.generator.Context.prototype.yieldAll=function(a,b){var d=$jscomp.makeIterator(a),c=d.next();$jscomp.generator.ensureIteratorResultIsObject_(c);if(c.done)this.yieldResult=c.value,this.nextAddress=b;else return this.yieldAllIterator_=d,this.yield(c.value,b)};
|
12 |
+
$jscomp.generator.Context.prototype.jumpTo=function(a){this.nextAddress=a};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(a,b){this.catchAddress_=a;void 0!=b&&(this.finallyAddress_=b)};$jscomp.generator.Context.prototype.setFinallyBlock=function(a){this.catchAddress_=0;this.finallyAddress_=a||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(a,b){this.nextAddress=a;this.catchAddress_=b||0};
|
13 |
+
$jscomp.generator.Context.prototype.enterCatchBlock=function(a){this.catchAddress_=a||0;a=this.abruptCompletion_.exception;this.abruptCompletion_=null;return a};$jscomp.generator.Context.prototype.enterFinallyBlock=function(a,b,d){d?this.finallyContexts_[d]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=a||0;this.finallyAddress_=b||0};
|
14 |
+
$jscomp.generator.Context.prototype.leaveFinallyBlock=function(a,b){var d=this.finallyContexts_.splice(b||0)[0];if(d=this.abruptCompletion_=this.abruptCompletion_||d){if(d.isException)return this.jumpToErrorHandler_();void 0!=d.jumpTo&&this.finallyAddress_<d.jumpTo?(this.nextAddress=d.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=a};$jscomp.generator.Context.prototype.forIn=function(a){return new $jscomp.generator.Context.PropertyIterator(a)};
|
15 |
+
$jscomp.generator.Context.PropertyIterator=function(a){this.object_=a;this.properties_=[];for(var b in a)this.properties_.push(b);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};
|
16 |
+
$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};
|
17 |
+
$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_("return"in b?b["return"]:function(d){return{value:d,done:!0}},a,this.context_["return"]);this.context_["return"](a);return this.nextStep_()};
|
18 |
+
$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};
|
19 |
+
$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,d){try{var c=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(c);if(!c.done)return this.context_.stop_(),c;var e=c.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;d.call(this.context_,e);return this.nextStep_()};
|
20 |
+
$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a["return"],done:!0}}return{value:void 0,done:!0}};
|
21 |
+
$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this["throw"]=function(b){return a.throw_(b)};this["return"]=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){var d=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(d,a.prototype);return d};
|
22 |
+
$jscomp.asyncExecutePromiseGenerator=function(a){function b(c){return a.next(c)}function d(c){return a["throw"](c)}return new Promise(function(c,e){function f(g){g.done?c(g.value):Promise.resolve(g.value).then(b,d).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};
|
23 |
+
if("undefined"!==typeof ai_adsense_ad_names){var getAllUrlParams=function(a){var b=a?a.split("?")[1]:window.location.search.slice(1);a={};if(b){b=b.split("#")[0];b=b.split("&");for(var d=0;d<b.length;d++){var c=b[d].split("="),e=void 0,f=c[0].replace(/\[\d*\]/,function(g){e=g.slice(1,-1);return""});c="undefined"===typeof c[1]?"":c[1];f=f.toLowerCase();c=c.toLowerCase();a[f]?("string"===typeof a[f]&&(a[f]=[a[f]]),"undefined"===typeof e?a[f].push(c):a[f][e]=c):a[f]=c}}return a},ai_ready=function(a){"complete"===
|
24 |
+
document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?a():document.addEventListener("DOMContentLoaded",a)},ai_load_adsense_ad_units=function(){var a={action:"ai_ajax",ai_check:ai_nonce,"adsense-ad-units[ai]":1},b=[],d;for(d in a){var c=encodeURIComponent(d),e=encodeURIComponent(a[d]);b.push(c+"="+e)}b=b.join("&");(function(){var f,g;return $jscomp.asyncExecutePromiseGeneratorProgram(function(h){if(1==h.nextAddress)return h.yield(fetch(ai_ajax_url,{method:"POST",
|
25 |
+
headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:b}),2);if(3!=h.nextAddress)return f=h.yieldResult,h.yield(f.text(),3);g=h.yieldResult;return h["return"](g)})})().then(function(f){if(""!=f)try{ai_adsense_ad_names=JSON.parse(f)}catch(g){}})["catch"](function(f){})},ai_process_adsense_ad=function(a){var b=a.getAttribute("width"),d=a.getAttribute("height"),c=getAllUrlParams(a.getAttribute("src"));if("undefined"!==typeof c.client){var e=c.client.replace("ca-",""),f=c.slotname;
|
26 |
+
c=c.ifi;var g="ai-debug-ad-overlay",h="";"undefined"!==typeof f?(h="","undefined"!==typeof ai_adsense_ad_names.publisher_id&&ai_adsense_ad_names.publisher_id==e&&"undefined"!==typeof ai_adsense_ad_names[f]&&(h='<div class="ai-info ai-info-2">'+ai_adsense_ad_names[f]+"</div>"),h='<div class="ai-info ai-info-1">'+f+"</div>"+h):0!=a.closest("div.google-auto-placed").length?(g+=" ai-auto-ads",h='<div class="ai-info ai-info-1">Auto ads</div>'):g+=" ai-no-slot";e='<div class="'+g+'"></div>';a.insertAdjacentHTML("afterend",
|
27 |
+
'<div class="ai-debug-ad-info"><div class="ai-info ai-info-1">AdSense #'+c+'</div><div class="ai-info ai-info-2">'+b+"x"+d+"</div>"+h+"</div>");ai_preview_window||a.insertAdjacentHTML("afterend",e)}};ai_ready(ai_load_adsense_ad_units);if(!ai_preview_window){var targetNode=document.querySelector("body"),config={attributes:!1,childList:!0,subtree:!0},ai_process_adsense_callback=function(a,b){for(var d=$jscomp.makeIterator(a),c=d.next();!c.done;c=d.next())c=c.value,"childList"===c.type&&c.addedNodes.length&&
|
28 |
+
"IFRAME"==c.addedNodes[0].tagName&&null!=c.addedNodes[0].getAttribute("width")&&null!=c.addedNodes[0].getAttribute("height")&&c.addedNodes[0].closest(".adsbygoogle")&&ai_process_adsense_ad(c.addedNodes[0])},observer=new MutationObserver(ai_process_adsense_callback);observer.observe(targetNode,config)}};
|
includes/js/{ai-ads.jq.js → ai-ads.q.js}
RENAMED
@@ -1,5 +1,5 @@
|
|
1 |
-
var
|
2 |
-
var ai_preview_window = typeof ai_preview !== 'undefined';
|
3 |
|
4 |
function ai_process_adsense_ad (element) {
|
5 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
@@ -26,10 +26,10 @@ function ai_process_adsense_ad (element) {
|
|
26 |
var adsense_ad_info = '';
|
27 |
if (typeof adsense_ad_slot !== 'undefined') {
|
28 |
var adsense_ad_name = '';
|
29 |
-
if (typeof
|
30 |
-
|
31 |
-
typeof
|
32 |
-
adsense_ad_name = '<div class="ai-info ai-info-2">' +
|
33 |
}
|
34 |
adsense_ad_info = '<div class="ai-info ai-info-1">' + adsense_ad_slot + '</div>' + adsense_ad_name;
|
35 |
} else {
|
@@ -50,32 +50,32 @@ function ai_process_adsense_ad (element) {
|
|
50 |
}
|
51 |
}
|
52 |
|
53 |
-
function ai_process_adsense_ads () {
|
54 |
-
|
55 |
-
jQuery('ins
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
ai_process_adsense_ad (this);
|
60 |
-
});
|
61 |
-
}
|
62 |
|
63 |
jQuery(document).ready(function($) {
|
64 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
65 |
// var ai_debug = false;
|
66 |
|
67 |
-
var
|
68 |
-
var
|
69 |
var adsense_data = {'ai': 1}; // dummy
|
70 |
|
71 |
-
$.post (
|
72 |
).done (function (data) {
|
73 |
if (data != '') {
|
74 |
try {
|
75 |
-
|
76 |
|
77 |
if (ai_debug) console.log ('');
|
78 |
-
if (ai_debug) console.log ("AI ADSENSE DATA:", Object.keys (
|
79 |
|
80 |
} catch (error) {
|
81 |
if (ai_debug) console.log ("AI ADSENSE DATA ERROR:", data);
|
1 |
+
//var ai_adsense_ad_names = [];
|
2 |
+
//var ai_preview_window = typeof ai_preview !== 'undefined';
|
3 |
|
4 |
function ai_process_adsense_ad (element) {
|
5 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
26 |
var adsense_ad_info = '';
|
27 |
if (typeof adsense_ad_slot !== 'undefined') {
|
28 |
var adsense_ad_name = '';
|
29 |
+
if (typeof ai_adsense_ad_names ['publisher_id'] !== 'undefined' &&
|
30 |
+
ai_adsense_ad_names ['publisher_id'] == adsense_publisher_id &&
|
31 |
+
typeof ai_adsense_ad_names [adsense_ad_slot] !== 'undefined') {
|
32 |
+
adsense_ad_name = '<div class="ai-info ai-info-2">' + ai_adsense_ad_names [adsense_ad_slot] + '</div>';
|
33 |
}
|
34 |
adsense_ad_info = '<div class="ai-info ai-info-1">' + adsense_ad_slot + '</div>' + adsense_ad_name;
|
35 |
} else {
|
50 |
}
|
51 |
}
|
52 |
|
53 |
+
//function ai_process_adsense_ads () {
|
54 |
+
//// jQuery('ins ins iframe').each (function () {
|
55 |
+
// jQuery('ins iframe[src*="google"]:visible').each (function () {
|
56 |
+
//// var dummy_container = jQuery (this).closest ('.ai-dummy-ad');
|
57 |
+
//// if (!dummy_container.length) ai_process_adsense_ad (this);
|
58 |
+
//// if (!dummy_container.length)
|
59 |
+
// ai_process_adsense_ad (this);
|
60 |
+
// });
|
61 |
+
//}
|
62 |
|
63 |
jQuery(document).ready(function($) {
|
64 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
65 |
// var ai_debug = false;
|
66 |
|
67 |
+
// var ai_ajax_url = 'AI_AJAXURL';
|
68 |
+
// var ai_nonce = 'AI_NONCE';
|
69 |
var adsense_data = {'ai': 1}; // dummy
|
70 |
|
71 |
+
$.post (ai_ajax_url, {'action': 'ai_ajax', 'ai_check': ai_nonce, 'adsense-ad-units': adsense_data}
|
72 |
).done (function (data) {
|
73 |
if (data != '') {
|
74 |
try {
|
75 |
+
ai_adsense_ad_names = JSON.parse (data);
|
76 |
|
77 |
if (ai_debug) console.log ('');
|
78 |
+
if (ai_debug) console.log ("AI ADSENSE DATA:", Object.keys (ai_adsense_ad_names).length - 1, 'ad units');
|
79 |
|
80 |
} catch (error) {
|
81 |
if (ai_debug) console.log ("AI ADSENSE DATA ERROR:", data);
|
includes/js/{ai-ads.jq.min.js → ai-ads.q.min.js}
RENAMED
@@ -1,6 +1,6 @@
|
|
1 |
-
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var c="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return c?c.call(a):$jscomp.arrayIterator(a)};
|
2 |
-
function ai_process_adsense_ad(a){a=jQuery(a);var c=a.attr("width"),e=a.attr("height"),b=getAllUrlParams(a.attr("src"));if("undefined"!==typeof b.client){var g=b.client.replace("ca-",""),d=b.slotname,h=b.ifi;b=jQuery('<div class="ai-debug-ad-overlay"></div>');var f="";"undefined"!==typeof d?(f="","undefined"!==typeof
|
3 |
-
d+"</div>"+f):0!=a.closest("div.google-auto-placed").length?(b.addClass("ai-auto-ads"),f='<div class="ai-info ai-info-1">Auto ads</div>'):b.addClass("ai-no-slot");c=jQuery('<div class="ai-debug-ad-info"><div class="ai-info ai-info-1">AdSense #'+h+'</div><div class="ai-info ai-info-2">'+c+"x"+e+"</div>"+f+"</div>");a.after(c);ai_preview_window||a.after(b)}}
|
4 |
-
jQuery(document).ready(function(a){a.post(
|
5 |
if(!ai_preview_window){var targetNode=document.querySelector("body"),config={attributes:!1,childList:!0,subtree:!0},ai_process_adsense_callback=function(a,c){for(var e=$jscomp.makeIterator(a),b=e.next();!b.done;b=e.next())b=b.value,"childList"===b.type&&b.addedNodes.length&&"IFRAME"==b.addedNodes[0].tagName&&null!=b.addedNodes[0].getAttribute("width")&&null!=b.addedNodes[0].getAttribute("height")&&b.addedNodes[0].closest(".adsbygoogle")&&ai_process_adsense_ad(b.addedNodes[0])},observer=new MutationObserver(ai_process_adsense_callback);
|
6 |
observer.observe(targetNode,config)}function getAllUrlParams(a){var c=a?a.split("?")[1]:window.location.search.slice(1);a={};if(c){c=c.split("#")[0];c=c.split("&");for(var e=0;e<c.length;e++){var b=c[e].split("="),g=void 0,d=b[0].replace(/\[\d*\]/,function(h){g=h.slice(1,-1);return""});b="undefined"===typeof b[1]?"":b[1];d=d.toLowerCase();b=b.toLowerCase();a[d]?("string"===typeof a[d]&&(a[d]=[a[d]]),"undefined"===typeof g?a[d].push(b):a[d][g]=b):a[d]=b}}return a};
|
1 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var c="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return c?c.call(a):$jscomp.arrayIterator(a)};
|
2 |
+
function ai_process_adsense_ad(a){a=jQuery(a);var c=a.attr("width"),e=a.attr("height"),b=getAllUrlParams(a.attr("src"));if("undefined"!==typeof b.client){var g=b.client.replace("ca-",""),d=b.slotname,h=b.ifi;b=jQuery('<div class="ai-debug-ad-overlay"></div>');var f="";"undefined"!==typeof d?(f="","undefined"!==typeof ai_adsense_ad_names.publisher_id&&ai_adsense_ad_names.publisher_id==g&&"undefined"!==typeof ai_adsense_ad_names[d]&&(f='<div class="ai-info ai-info-2">'+ai_adsense_ad_names[d]+"</div>"),
|
3 |
+
f='<div class="ai-info ai-info-1">'+d+"</div>"+f):0!=a.closest("div.google-auto-placed").length?(b.addClass("ai-auto-ads"),f='<div class="ai-info ai-info-1">Auto ads</div>'):b.addClass("ai-no-slot");c=jQuery('<div class="ai-debug-ad-info"><div class="ai-info ai-info-1">AdSense #'+h+'</div><div class="ai-info ai-info-2">'+c+"x"+e+"</div>"+f+"</div>");a.after(c);ai_preview_window||a.after(b)}}
|
4 |
+
jQuery(document).ready(function(a){a.post(ai_ajax_url,{action:"ai_ajax",ai_check:ai_nonce,"adsense-ad-units":{ai:1}}).done(function(c){if(""!=c)try{ai_adsense_ad_names=JSON.parse(c)}catch(e){}}).fail(function(c,e,b){}).always(function(c){})});
|
5 |
if(!ai_preview_window){var targetNode=document.querySelector("body"),config={attributes:!1,childList:!0,subtree:!0},ai_process_adsense_callback=function(a,c){for(var e=$jscomp.makeIterator(a),b=e.next();!b.done;b=e.next())b=b.value,"childList"===b.type&&b.addedNodes.length&&"IFRAME"==b.addedNodes[0].tagName&&null!=b.addedNodes[0].getAttribute("width")&&null!=b.addedNodes[0].getAttribute("height")&&b.addedNodes[0].closest(".adsbygoogle")&&ai_process_adsense_ad(b.addedNodes[0])},observer=new MutationObserver(ai_process_adsense_callback);
|
6 |
observer.observe(targetNode,config)}function getAllUrlParams(a){var c=a?a.split("?")[1]:window.location.search.slice(1);a={};if(c){c=c.split("#")[0];c=c.split("&");for(var e=0;e<c.length;e++){var b=c[e].split("="),g=void 0,d=b[0].replace(/\[\d*\]/,function(h){g=h.slice(1,-1);return""});b="undefined"===typeof b[1]?"":b[1];d=d.toLowerCase();b=b.toLowerCase();a[d]?("string"===typeof a[d]&&(a[d]=[a[d]]),"undefined"===typeof g?a[d].push(b):a[d][g]=b):a[d]=b}}return a};
|
includes/js/ai-auto-ads.js
CHANGED
@@ -1,3 +1,5 @@
|
|
|
|
|
|
1 |
//jQuery(window).on ('load', function () {
|
2 |
window.addEventListener ('load', (event) => {
|
3 |
setTimeout (function() {
|
@@ -9,3 +11,5 @@ window.addEventListener ('load', (event) => {
|
|
9 |
|
10 |
}, 150);
|
11 |
});
|
|
|
|
1 |
+
if (typeof ai_adsense_ad_names !== 'undefined') {
|
2 |
+
|
3 |
//jQuery(window).on ('load', function () {
|
4 |
window.addEventListener ('load', (event) => {
|
5 |
setTimeout (function() {
|
11 |
|
12 |
}, 150);
|
13 |
});
|
14 |
+
|
15 |
+
}
|
includes/js/ai-auto-ads.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
window.addEventListener("load",function(b){setTimeout(function(){document.querySelectorAll(".google-auto-placed > ins").forEach(function(a,c){a.insertAdjacentHTML("afterbegin",'<section class="ai-debug-bar ai-debug-adsense ai-adsense-auto-ads">'+ai_front.automatically_placed+"</section>")})},150)});
|
1 |
+
"undefined"!==typeof ai_adsense_ad_names&&window.addEventListener("load",function(b){setTimeout(function(){document.querySelectorAll(".google-auto-placed > ins").forEach(function(a,c){a.insertAdjacentHTML("afterbegin",'<section class="ai-debug-bar ai-debug-adsense ai-adsense-auto-ads">'+ai_front.automatically_placed+"</section>")})},150)});
|
includes/js/{ai-auto-ads.jq.js → ai-auto-ads.q.js}
RENAMED
File without changes
|
includes/js/{ai-auto-ads.jq.min.js → ai-auto-ads.q.min.js}
RENAMED
File without changes
|
includes/js/ai-cookie-data.js
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
var ai_block_class_def = 'AI_FUNCT_GET_BLOCK_CLASS_NAME';
|
2 |
+
|
includes/js/ai-cookie-data.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
var ai_block_class_def="AI_FUNCT_GET_BLOCK_CLASS_NAME";
|
includes/js/ai-cookie.js
CHANGED
@@ -1,3 +1,5 @@
|
|
|
|
|
|
1 |
/*!
|
2 |
* JavaScript Cookie v2.2.0
|
3 |
* https://github.com/js-cookie/js-cookie
|
@@ -164,7 +166,6 @@
|
|
164 |
}));
|
165 |
|
166 |
|
167 |
-
|
168 |
AiCookies = Cookies.noConflict();
|
169 |
|
170 |
|
@@ -404,8 +405,9 @@ ai_check_and_insert_block = function (block, id) {
|
|
404 |
|
405 |
var ai_block_divs = document.getElementsByClassName (id);
|
406 |
if (ai_block_divs.length) {
|
|
|
407 |
var ai_block_div = ai_block_divs [0];
|
408 |
-
var wrapping_div = ai_block_div.closest ('.
|
409 |
|
410 |
var insert_block = ai_check_block (block);
|
411 |
|
@@ -418,7 +420,7 @@ ai_check_and_insert_block = function (block, id) {
|
|
418 |
|
419 |
ai_block_div.setAttribute ('data-code', ai_block_div.getAttribute ('data-fallback-code'));
|
420 |
|
421 |
-
if (wrapping_div.hasAttribute ('data-ai')) {
|
422 |
if (ai_block_div.hasAttribute ('fallback-tracking') && ai_block_div.hasAttribute ('fallback_level')) {
|
423 |
wrapping_div.setAttribute ('data-ai-' + ai_block_div.getAttribute ('fallback_level'), ai_block_div.getAttribute ('fallback-tracking'));
|
424 |
}
|
@@ -428,8 +430,12 @@ ai_check_and_insert_block = function (block, id) {
|
|
428 |
}
|
429 |
}
|
430 |
|
|
|
|
|
|
|
431 |
if (insert_block) {
|
432 |
ai_insert_code (ai_block_div);
|
|
|
433 |
if (wrapping_div) {
|
434 |
|
435 |
var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block');
|
@@ -465,6 +471,7 @@ ai_check_and_insert_block = function (block, id) {
|
|
465 |
}
|
466 |
}
|
467 |
|
|
|
468 |
ai_block_div.classList.remove (id);
|
469 |
}
|
470 |
|
@@ -645,3 +652,5 @@ ai_get_cookie_text = function (block) {
|
|
645 |
|
646 |
return global_data + block_data;
|
647 |
}
|
|
|
|
1 |
+
if (typeof ai_block_class_def !== 'undefined') {
|
2 |
+
|
3 |
/*!
|
4 |
* JavaScript Cookie v2.2.0
|
5 |
* https://github.com/js-cookie/js-cookie
|
166 |
}));
|
167 |
|
168 |
|
|
|
169 |
AiCookies = Cookies.noConflict();
|
170 |
|
171 |
|
405 |
|
406 |
var ai_block_divs = document.getElementsByClassName (id);
|
407 |
if (ai_block_divs.length) {
|
408 |
+
|
409 |
var ai_block_div = ai_block_divs [0];
|
410 |
+
var wrapping_div = ai_block_div.closest ('.' + ai_block_class_def);
|
411 |
|
412 |
var insert_block = ai_check_block (block);
|
413 |
|
420 |
|
421 |
ai_block_div.setAttribute ('data-code', ai_block_div.getAttribute ('data-fallback-code'));
|
422 |
|
423 |
+
if (wrapping_div != null && wrapping_div.hasAttribute ('data-ai')) {
|
424 |
if (ai_block_div.hasAttribute ('fallback-tracking') && ai_block_div.hasAttribute ('fallback_level')) {
|
425 |
wrapping_div.setAttribute ('data-ai-' + ai_block_div.getAttribute ('fallback_level'), ai_block_div.getAttribute ('fallback-tracking'));
|
426 |
}
|
430 |
}
|
431 |
}
|
432 |
|
433 |
+
// Remove selector to prevent further insertions at this element
|
434 |
+
ai_block_div.removeAttribute ('data-selector');
|
435 |
+
|
436 |
if (insert_block) {
|
437 |
ai_insert_code (ai_block_div);
|
438 |
+
|
439 |
if (wrapping_div) {
|
440 |
|
441 |
var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block');
|
471 |
}
|
472 |
}
|
473 |
|
474 |
+
// Remove class
|
475 |
ai_block_div.classList.remove (id);
|
476 |
}
|
477 |
|
652 |
|
653 |
return global_data + block_data;
|
654 |
}
|
655 |
+
|
656 |
+
}
|
includes/js/ai-cookie.min.js
CHANGED
@@ -1,16 +1,14 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
ai_check_block=function(a){if(null==a)return!0;var c=AiCookies.getJSON("aiBLOCKS");ai_debug_cookie_status="";null==c&&(c={});"undefined"!==typeof ai_delay_showing_pageviews&&(c.hasOwnProperty(a)||(c[a]={}),c[a].hasOwnProperty("d")||
|
6 |
-
|
7 |
-
if(0
|
8 |
-
|
9 |
-
c[a]
|
10 |
-
"OK";return!0};
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
function ai_set_cookie(a,c,d){var b=ai_load_cookie();if(""===d){if(b.hasOwnProperty(a)){delete b[a][c];a:{c=b[a];for(f in c)if(c.hasOwnProperty(f)){var f=!1;break a}f=!0}f&&delete b[a]}}else b.hasOwnProperty(a)||(b[a]={}),b[a][c]=d;0===Object.keys(b).length&&b.constructor===Object?AiCookies.remove("aiBLOCKS"):AiCookies.set("aiBLOCKS",b,{expires:365,path:"/"});return b}
|
16 |
-
ai_get_cookie_text=function(a){var c=AiCookies.getJSON("aiBLOCKS");null==c&&(c={});var d="";c.hasOwnProperty("G")&&(d="G["+JSON.stringify(c.G).replace(/"/g,"").replace("{","").replace("}","")+"] ");var b="";c.hasOwnProperty(a)&&(b=JSON.stringify(c[a]).replace(/"/g,"").replace("{","").replace("}",""));return d+b};
|
1 |
+
if("undefined"!==typeof ai_block_class_def){var ai_set_cookie=function(a,c,d){var b=ai_load_cookie();if(""===d){if(b.hasOwnProperty(a)){delete b[a][c];a:{c=b[a];for(f in c)if(c.hasOwnProperty(f)){var f=!1;break a}f=!0}f&&delete b[a]}}else b.hasOwnProperty(a)||(b[a]={}),b[a][c]=d;0===Object.keys(b).length&&b.constructor===Object?AiCookies.remove("aiBLOCKS"):AiCookies.set("aiBLOCKS",b,{expires:365,path:"/"});return b},ai_get_cookie=function(a,c){var d="",b=ai_load_cookie();b.hasOwnProperty(a)&&b[a].hasOwnProperty(c)&&
|
2 |
+
(d=b[a][c]);return d},ai_load_cookie=function(){var a=AiCookies.getJSON("aiBLOCKS");null==a&&(a={});return a};(function(a){if("function"===typeof define&&define.amd){define(a);var c=!0}"object"===typeof exports&&(module.exports=a(),c=!0);if(!c){var d=window.Cookies,b=window.Cookies=a();b.noConflict=function(){window.Cookies=d;return b}}})(function(){function a(){for(var d=0,b={};d<arguments.length;d++){var f=arguments[d],e;for(e in f)b[e]=f[e]}return b}function c(d){function b(){}function f(h,k,g){if("undefined"!==
|
3 |
+
typeof document){g=a({path:"/",sameSite:"Lax"},b.defaults,g);"number"===typeof g.expires&&(g.expires=new Date(1*new Date+864E5*g.expires));g.expires=g.expires?g.expires.toUTCString():"";try{var l=JSON.stringify(k);/^[\{\[]/.test(l)&&(k=l)}catch(p){}k=d.write?d.write(k,h):encodeURIComponent(String(k)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent);h=encodeURIComponent(String(h)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);
|
4 |
+
l="";for(var n in g)g[n]&&(l+="; "+n,!0!==g[n]&&(l+="="+g[n].split(";")[0]));return document.cookie=h+"="+k+l}}function e(h,k){if("undefined"!==typeof document){for(var g={},l=document.cookie?document.cookie.split("; "):[],n=0;n<l.length;n++){var p=l[n].split("="),m=p.slice(1).join("=");k||'"'!==m.charAt(0)||(m=m.slice(1,-1));try{var q=p[0].replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent);m=(d.read||d)(m,q)||m.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent);if(k)try{m=JSON.parse(m)}catch(r){}g[q]=m;
|
5 |
+
if(h===q)break}catch(r){}}return h?g[h]:g}}b.set=f;b.get=function(h){return e(h,!1)};b.getJSON=function(h){return e(h,!0)};b.remove=function(h,k){f(h,"",a(k,{expires:-1}))};b.defaults={};b.withConverter=c;return b}return c(function(){})});AiCookies=Cookies.noConflict();ai_check_block=function(a){if(null==a)return!0;var c=AiCookies.getJSON("aiBLOCKS");ai_debug_cookie_status="";null==c&&(c={});"undefined"!==typeof ai_delay_showing_pageviews&&(c.hasOwnProperty(a)||(c[a]={}),c[a].hasOwnProperty("d")||
|
6 |
+
(c[a].d=ai_delay_showing_pageviews));if(c.hasOwnProperty(a)){for(var d in c[a]){if("x"==d){var b="",f=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in f.dataset&&(b=f.dataset.aiHash);f="";c[a].hasOwnProperty("h")&&(f=c[a].h);var e=new Date;e=c[a][d]-Math.round(e.getTime()/1E3);if(0<e&&f==b)return ai_debug_cookie_status=a="closed for "+e+" s = "+Math.round(1E4*e/3600/24)/1E4+" days",!1;ai_set_cookie(a,"x","");c[a].hasOwnProperty("i")||c[a].hasOwnProperty("c")||ai_set_cookie(a,
|
7 |
+
"h","")}else if("d"==d){if(0!=c[a][d])return ai_debug_cookie_status=a="delayed for "+c[a][d]+" pageviews",!1}else if("i"==d){b="";f=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in f.dataset&&(b=f.dataset.aiHash);f="";c[a].hasOwnProperty("h")&&(f=c[a].h);if(0==c[a][d]&&f==b)return ai_debug_cookie_status=a="max impressions reached",!1;if(0>c[a][d]&&f==b){e=new Date;e=-c[a][d]-Math.round(e.getTime()/1E3);if(0<e)return ai_debug_cookie_status=a="max imp. reached ("+Math.round(1E4*
|
8 |
+
e/24/3600)/1E4+" days = "+e+" s)",!1;ai_set_cookie(a,"i","");c[a].hasOwnProperty("c")||c[a].hasOwnProperty("x")||ai_set_cookie(a,"h","")}}if("ipt"==d&&0==c[a][d]&&(e=new Date,b=Math.round(e.getTime()/1E3),e=c[a].it-b,0<e))return ai_debug_cookie_status=a="max imp. per time reached ("+Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1;if("c"==d){b="";f=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in f.dataset&&(b=f.dataset.aiHash);f="";c[a].hasOwnProperty("h")&&(f=c[a].h);if(0==
|
9 |
+
c[a][d]&&f==b)return ai_debug_cookie_status=a="max clicks reached",!1;if(0>c[a][d]&&f==b){e=new Date;e=-c[a][d]-Math.round(e.getTime()/1E3);if(0<e)return ai_debug_cookie_status=a="max clicks reached ("+Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1;ai_set_cookie(a,"c","");c[a].hasOwnProperty("i")||c[a].hasOwnProperty("x")||ai_set_cookie(a,"h","")}}if("cpt"==d&&0==c[a][d]&&(e=new Date,b=Math.round(e.getTime()/1E3),e=c[a].ct-b,0<e))return ai_debug_cookie_status=a="max clicks per time reached ("+
|
10 |
+
Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1}if(c.hasOwnProperty("G")&&c.G.hasOwnProperty("cpt")&&0==c.G.cpt&&(e=new Date,b=Math.round(e.getTime()/1E3),e=c.G.ct-b,0<e))return ai_debug_cookie_status=a="max global clicks per time reached ("+Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1}ai_debug_cookie_status="OK";return!0};ai_check_and_insert_block=function(a,c){if(null==a)return!0;var d=document.getElementsByClassName(c);if(d.length){d=d[0];var b=d.closest("."+ai_block_class_def),f=ai_check_block(a);
|
11 |
+
!f&&0!=parseInt(d.getAttribute("limits-fallback"))&&d.hasAttribute("data-fallback-code")&&(d.setAttribute("data-code",d.getAttribute("data-fallback-code")),null!=b&&b.hasAttribute("data-ai")&&d.hasAttribute("fallback-tracking")&&d.hasAttribute("fallback_level")&&b.setAttribute("data-ai-"+d.getAttribute("fallback_level"),d.getAttribute("fallback-tracking")),f=!0);d.removeAttribute("data-selector");if(f)ai_insert_code(d),b&&(f=b.querySelectorAll(".ai-debug-block"),b&&f.length&&(b.classList.remove("ai-list-block"),
|
12 |
+
b.classList.remove("ai-list-block-ip"),b.classList.remove("ai-list-block-filter"),b.style.visibility="",b.classList.contains("ai-remove-position")&&(b.style.position="")));else{f=d.closest("div[data-ai]");if(null!=f&&"undefined"!=typeof f.getAttribute("data-ai")){var e=JSON.parse(b64d(f.getAttribute("data-ai")));"undefined"!==typeof e&&e.constructor===Array&&(e[1]="",f.setAttribute("data-ai",b64e(JSON.stringify(e))))}f=b.querySelectorAll(".ai-debug-block");b&&f.length&&(b.classList.remove("ai-list-block"),
|
13 |
+
b.classList.remove("ai-list-block-ip"),b.classList.remove("ai-list-block-filter"),b.style.visibility="",b.classList.contains("ai-remove-position")&&(b.style.position=""))}d.classList.remove(c)}d=document.querySelectorAll("."+c+"-dbg");b=0;for(f=d.length;b<f;b++)e=d[b],e.querySelector(".ai-status").textContent=ai_debug_cookie_status,e.querySelector(".ai-cookie-data").textContent=ai_get_cookie_text(a),e.classList.remove(c+"-dbg")};ai_get_cookie_text=function(a){var c=AiCookies.getJSON("aiBLOCKS");null==
|
14 |
+
c&&(c={});var d="";c.hasOwnProperty("G")&&(d="G["+JSON.stringify(c.G).replace(/"/g,"").replace("{","").replace("}","")+"] ");var b="";c.hasOwnProperty(a)&&(b=JSON.stringify(c[a]).replace(/"/g,"").replace("{","").replace("}",""));return d+b}};
|
|
|
|
includes/js/ai-filter-data.js
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var ai_filter = true;
|
2 |
+
var ai_data_id = "AI_NONCE";
|
3 |
+
var ai_ajax_url = 'AI_AJAXURL';
|
4 |
+
var ai_block_class_def = 'AI_FUNCT_GET_BLOCK_CLASS_NAME';
|
5 |
+
|
includes/js/ai-filter-data.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
var ai_filter=!0,ai_data_id="AI_NONCE",ai_ajax_url="AI_AJAXURL",ai_block_class_def="AI_FUNCT_GET_BLOCK_CLASS_NAME";
|
includes/js/ai-filter.js
CHANGED
@@ -1,15 +1,38 @@
|
|
1 |
-
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
function ai_random_parameter () {
|
4 |
var current_time = new Date ().getTime ();
|
5 |
-
return
|
6 |
}
|
7 |
|
8 |
function process_filter_hook_data (ai_filter_hook_blocks) {
|
|
|
9 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
10 |
// var ai_debug = false;
|
11 |
|
12 |
-
ai_filter_hook_blocks.removeClass ('ai-filter-check');
|
|
|
|
|
|
|
|
|
13 |
|
14 |
var enable_block = false;
|
15 |
|
@@ -28,12 +51,20 @@ jQuery (function ($) {
|
|
28 |
return;
|
29 |
}
|
30 |
|
31 |
-
if (filter_hook_data_array != null) ai_filter_hook_blocks.each (function () {
|
|
|
|
|
32 |
|
33 |
-
var block_wrapping_div = $(this).closest ('div.AI_FUNCT_GET_BLOCK_CLASS_NAME');
|
34 |
-
|
|
|
|
|
|
|
|
|
35 |
|
36 |
-
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block_wrapping_div.attr ('class'));
|
|
|
|
|
37 |
|
38 |
enable_block = false;
|
39 |
|
@@ -49,7 +80,13 @@ jQuery (function ($) {
|
|
49 |
|
50 |
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block, enable_block ? 'ENABLED' : 'DISABLED');
|
51 |
|
52 |
-
$(this).css ({"visibility": "", "position": "", "width": "", "height": "", "z-index": ""});
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
var comments = '';
|
55 |
var comments_decoded = JSON.parse (ai_filter_hook_comments);
|
@@ -64,75 +101,171 @@ jQuery (function ($) {
|
|
64 |
}
|
65 |
else comments = ai_filter_hook_comments;
|
66 |
|
67 |
-
|
68 |
-
debug_bar.
|
69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
|
71 |
if (!enable_block) {
|
72 |
-
$(this).hide (); // .ai-filter-check
|
73 |
-
|
74 |
-
|
75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
}
|
77 |
|
78 |
-
block_wrapping_div.removeAttr ('data-ai');
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
}
|
85 |
|
86 |
// In case client-side insert is used and lists will not be processed
|
87 |
-
if (typeof $(this).data ('code') != 'undefined') {
|
|
|
|
|
88 |
// Remove ai-list-block to show debug info
|
89 |
-
block_wrapping_div.removeClass ('ai-list-block');
|
90 |
-
block_wrapping_div.removeClass ('ai-list-block-ip');
|
|
|
|
|
|
|
91 |
|
92 |
// Remove also 'NOT LOADED' bar if it is there
|
93 |
-
if (block_wrapping_div.prev ().hasClass ('ai-debug-info')) {
|
94 |
-
|
|
|
|
|
|
|
|
|
95 |
}
|
96 |
}
|
97 |
|
98 |
-
} else block_wrapping_div.hide ();
|
|
|
|
|
99 |
} else {
|
100 |
-
block_wrapping_div.css ({"visibility": ""});
|
101 |
-
|
102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
}
|
104 |
|
105 |
-
if (typeof $(this).data ('code') != 'undefined') {
|
106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
|
113 |
// if (!ai_debug)
|
114 |
-
$(this).attr ('data-code', '');
|
|
|
|
|
115 |
|
116 |
-
if (ai_debug) console.log ('AI INSERT CODE', $(block_wrapping_div).attr ('class'));
|
|
|
|
|
117 |
if (ai_debug) console.log ('');
|
118 |
|
119 |
-
ai_process_element (this);
|
|
|
|
|
120 |
}
|
121 |
}
|
122 |
|
123 |
-
block_wrapping_div.removeClass ('ai-list-block-filter');
|
|
|
124 |
});
|
125 |
}
|
126 |
|
127 |
-
ai_process_filter_hooks = function (ai_filter_hook_blocks) {
|
|
|
|
|
128 |
|
129 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
130 |
// var ai_debug = false;
|
131 |
|
132 |
-
if (
|
133 |
-
ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
|
|
|
|
134 |
} else {
|
135 |
-
ai_filter_hook_blocks = ai_filter_hook_blocks.filter ('.ai-filter-check');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
}
|
137 |
|
138 |
if (!ai_filter_hook_blocks.length) return;
|
@@ -159,14 +292,45 @@ jQuery (function ($) {
|
|
159 |
|
160 |
ai_filter_hook_data_requested = true;
|
161 |
|
162 |
-
var
|
163 |
-
|
164 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
|
166 |
-
|
|
|
|
|
|
|
|
|
|
|
167 |
|
168 |
if (filter_hook_data == '') {
|
169 |
-
var error_message = 'Ajax request returned empty data, filter hook checks not processed';
|
170 |
console.error (error_message);
|
171 |
|
172 |
if (typeof ai_js_errors != 'undefined') {
|
@@ -176,8 +340,8 @@ jQuery (function ($) {
|
|
176 |
try {
|
177 |
var filter_hook_data_test = JSON.parse (filter_hook_data);
|
178 |
} catch (error) {
|
179 |
-
var error_message = 'Ajax call returned invalid data, filter hook checks not processed';
|
180 |
-
console.error (error_message
|
181 |
|
182 |
if (typeof ai_js_errors != 'undefined') {
|
183 |
ai_js_errors.push ([error_message, page, 0]);
|
@@ -193,23 +357,55 @@ jQuery (function ($) {
|
|
193 |
if (ai_debug) console.log ("AI FILTER HOOK RETURNED COMMENTS:", filter_hook_data_test ['comments']);
|
194 |
|
195 |
// Check blocks again - some blocks might get inserted after the filte hook data was requested
|
196 |
-
ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
|
|
197 |
|
198 |
if (ai_debug) console.log ("AI FILTER HOOK BLOCKS:", ai_filter_hook_blocks.length);
|
199 |
|
200 |
process_filter_hook_data (ai_filter_hook_blocks);
|
201 |
-
}).fail (function(jqXHR, status, err) {
|
202 |
-
|
203 |
-
|
204 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
});
|
206 |
});
|
207 |
}
|
208 |
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
|
214 |
function ai_process_element (element) {
|
215 |
setTimeout (function() {
|
@@ -218,15 +414,19 @@ function ai_process_element (element) {
|
|
218 |
}
|
219 |
|
220 |
if (typeof ai_process_lists == 'function') {
|
|
|
221 |
ai_process_lists (jQuery (".ai-list-data", element));
|
222 |
}
|
223 |
|
224 |
if (typeof ai_process_ip_addresses == 'function') {
|
|
|
225 |
ai_process_ip_addresses (jQuery (".ai-ip-data", element));
|
226 |
}
|
227 |
|
228 |
if (typeof ai_process_filter_hooks == 'function') {
|
229 |
-
ai_process_filter_hooks (jQuery (".ai-filter-check", element));
|
|
|
|
|
230 |
}
|
231 |
|
232 |
if (typeof ai_adb_process_blocks == 'function') {
|
@@ -246,3 +446,5 @@ function ai_process_element (element) {
|
|
246 |
}, 5);
|
247 |
}
|
248 |
|
|
|
|
1 |
+
if (typeof ai_filter != 'undefined') {
|
2 |
|
3 |
+
function prev (el, selector) {
|
4 |
+
if (selector) {
|
5 |
+
let previous = el.previousElementSibling;
|
6 |
+
while (previous && !previous.matches (selector)) {
|
7 |
+
previous = previous.previousElementSibling;
|
8 |
+
}
|
9 |
+
return previous;
|
10 |
+
} else {
|
11 |
+
return el.previousElementSibling;
|
12 |
+
}
|
13 |
+
}
|
14 |
+
|
15 |
+
//jQuery (function ($) {
|
16 |
+
// ***
|
17 |
+
// function ai_random_parameter () {
|
18 |
+
// var current_time = new Date ().getTime ();
|
19 |
+
// return '&ver=' + current_time + '-' + Math.round (Math.random () * 100000);
|
20 |
+
// }
|
21 |
function ai_random_parameter () {
|
22 |
var current_time = new Date ().getTime ();
|
23 |
+
return current_time + '-' + Math.round (Math.random () * 100000);
|
24 |
}
|
25 |
|
26 |
function process_filter_hook_data (ai_filter_hook_blocks) {
|
27 |
+
|
28 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
29 |
// var ai_debug = false;
|
30 |
|
31 |
+
// ai_filter_hook_blocks.removeClass ('ai-filter-check');
|
32 |
+
// ***
|
33 |
+
ai_filter_hook_blocks.forEach ((el, i) => {
|
34 |
+
el.classList.remove ('ai-filter-check');
|
35 |
+
});
|
36 |
|
37 |
var enable_block = false;
|
38 |
|
51 |
return;
|
52 |
}
|
53 |
|
54 |
+
// if (filter_hook_data_array != null) ai_filter_hook_blocks.each (function () {
|
55 |
+
// ***
|
56 |
+
if (filter_hook_data_array != null) ai_filter_hook_blocks.forEach ((el, index) => {
|
57 |
|
58 |
+
// var block_wrapping_div = $(this).closest ('div.AI_FUNCT_GET_BLOCK_CLASS_NAME');
|
59 |
+
// ***
|
60 |
+
var block_wrapping_div = el.closest ('div.' + ai_block_class_def);
|
61 |
+
// var block = parseInt ($(this).data ('block'));
|
62 |
+
// ***
|
63 |
+
var block = parseInt (el.dataset.block);
|
64 |
|
65 |
+
// if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block_wrapping_div.attr ('class'));
|
66 |
+
// ***
|
67 |
+
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block_wrapping_div.hasAttribute ('class') ? block_wrapping_div.getAttribute ('class') : '');
|
68 |
|
69 |
enable_block = false;
|
70 |
|
80 |
|
81 |
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block, enable_block ? 'ENABLED' : 'DISABLED');
|
82 |
|
83 |
+
// $(this).css ({"visibility": "", "position": "", "width": "", "height": "", "z-index": ""});
|
84 |
+
// ***
|
85 |
+
el.style.visibility = '';
|
86 |
+
el.style.position = 'none';
|
87 |
+
el.style.width = '';
|
88 |
+
el.style.height = '';
|
89 |
+
el.style.zIndex = '';
|
90 |
|
91 |
var comments = '';
|
92 |
var comments_decoded = JSON.parse (ai_filter_hook_comments);
|
101 |
}
|
102 |
else comments = ai_filter_hook_comments;
|
103 |
|
104 |
+
if (typeof ai_front != 'undefined') {
|
105 |
+
// var debug_bar = $(this).prev ('.ai-debug-bar');
|
106 |
+
// ***
|
107 |
+
var debug_bar = prev (el, '.ai-debug-bar');
|
108 |
+
if (debug_bar != null) {
|
109 |
+
// debug_bar.find ('.ai-status').text (enable_block ? ai_front.visible : ai_front.hidden);
|
110 |
+
// ***
|
111 |
+
debug_bar.querySelectorAll ('.ai-status').forEach ((element, index) => {
|
112 |
+
element.textContent = enable_block ? ai_front.visible : ai_front.hidden;
|
113 |
+
});
|
114 |
+
|
115 |
+
// debug_bar.find ('.ai-filter-data').attr ('title', comments);
|
116 |
+
// ***
|
117 |
+
debug_bar.querySelectorAll ('.ai-filter-data').forEach ((element, index) => {
|
118 |
+
element.setAttribute ('title', comments);
|
119 |
+
});
|
120 |
+
}
|
121 |
+
}
|
122 |
|
123 |
if (!enable_block) {
|
124 |
+
// $(this).hide (); // .ai-filter-check
|
125 |
+
// ***
|
126 |
+
el.style.display = 'none'; // .ai-filter-check
|
127 |
+
|
128 |
+
// if (!block_wrapping_div.find ('.ai-debug-block').length) {
|
129 |
+
// ***
|
130 |
+
if (!block_wrapping_div.querySelector ('.ai-debug-block') != null) {
|
131 |
+
// block_wrapping_div.hide ();
|
132 |
+
// ***
|
133 |
+
block_wrapping_div.style.display = 'none'; // .ai-filter-check
|
134 |
}
|
135 |
|
136 |
+
// block_wrapping_div.removeAttr ('data-ai');
|
137 |
+
// ***
|
138 |
+
block_wrapping_div.removeAttribute ('data-ai');
|
139 |
+
|
140 |
+
// if (block_wrapping_div.find ('.ai-debug-block')) {
|
141 |
+
// ***
|
142 |
+
if (block_wrapping_div.querySelector('.ai-debug-block') != null) {
|
143 |
+
// block_wrapping_div.css ({"visibility": ""}).removeClass ('ai-close');
|
144 |
+
// ***
|
145 |
+
block_wrapping_div.style.visibility = '';
|
146 |
+
block_wrapping_div.classList.remove ('ai-close');
|
147 |
+
|
148 |
+
// if (block_wrapping_div.hasClass ('ai-remove-position')) {
|
149 |
+
// ***
|
150 |
+
if (block_wrapping_div.classList.contains ('ai-remove-position')) {
|
151 |
+
// block_wrapping_div.css ({"position": ""});
|
152 |
+
block_wrapping_div.style.position = '';
|
153 |
}
|
154 |
|
155 |
// In case client-side insert is used and lists will not be processed
|
156 |
+
// if (typeof $(this).data ('code') != 'undefined') {
|
157 |
+
// ***
|
158 |
+
if ('code' in el.dataset) {
|
159 |
// Remove ai-list-block to show debug info
|
160 |
+
// block_wrapping_div.removeClass ('ai-list-block');
|
161 |
+
// block_wrapping_div.removeClass ('ai-list-block-ip');
|
162 |
+
// ***
|
163 |
+
block_wrapping_div.classList.remove ('ai-list-block');
|
164 |
+
block_wrapping_div.classList.remove ('ai-list-block-ip');
|
165 |
|
166 |
// Remove also 'NOT LOADED' bar if it is there
|
167 |
+
// if (block_wrapping_div.prev ().hasClass ('ai-debug-info')) {
|
168 |
+
// ***
|
169 |
+
if (prev (block_wrapping_div) != null && prev (block_wrapping_div).classList.contains ('ai-debug-info')) {
|
170 |
+
// block_wrapping_div.prev ().remove ();
|
171 |
+
// ***
|
172 |
+
prev (block_wrapping_div).remove ();
|
173 |
}
|
174 |
}
|
175 |
|
176 |
+
// } else block_wrapping_div.hide ();
|
177 |
+
// ***
|
178 |
+
} else block_wrapping_div.style.display = 'none';;
|
179 |
} else {
|
180 |
+
// block_wrapping_div.css ({"visibility": ""});
|
181 |
+
// ***
|
182 |
+
block_wrapping_div.style.visibility = '';
|
183 |
+
|
184 |
+
// if (block_wrapping_div.hasClass ('ai-remove-position')) {
|
185 |
+
// ***
|
186 |
+
if (block_wrapping_div.classList.contains ('ai-remove-position')) {
|
187 |
+
// block_wrapping_div.css ({"position": ""});
|
188 |
+
// ***
|
189 |
+
block_wrapping_div.style.position = '';
|
190 |
}
|
191 |
|
192 |
+
// if (typeof $(this).data ('code') != 'undefined') {
|
193 |
+
// ***
|
194 |
+
if ('code' in el.dataset) {
|
195 |
+
// var block_code = b64d ($(this).data ('code'));
|
196 |
+
var block_code = b64d (el.dataset.code);
|
197 |
+
|
198 |
+
var template = document.createElement ('div');
|
199 |
+
template.innerHTML = block_code;
|
200 |
|
201 |
+
var range = document.createRange ();
|
202 |
+
|
203 |
+
var fragment_ok = true;
|
204 |
+
try {
|
205 |
+
var fragment = range.createContextualFragment (template.innerHTML);
|
206 |
+
}
|
207 |
+
catch (err) {
|
208 |
+
var fragment_ok = false;
|
209 |
+
if (ai_debug) console.log ('AI INSERT', 'range.createContextualFragment ERROR:', err.message);
|
210 |
+
}
|
211 |
+
|
212 |
+
// if ($(this).closest ('head').length != 0) {
|
213 |
+
// ***
|
214 |
+
if (el.closest ('head') != null) {
|
215 |
+
// $(this).after (block_code);
|
216 |
+
// ***
|
217 |
+
el.insertBefore (fragment, null);
|
218 |
+
|
219 |
+
// if (!ai_debug) $(this).remove ();
|
220 |
+
// ***
|
221 |
+
if (!ai_debug) el.remove ();
|
222 |
+
// } else $(this).append (block_code);
|
223 |
+
// ***
|
224 |
+
} else el.parentNode.insertBefore (fragment, el.nextSibling);
|
225 |
|
226 |
// if (!ai_debug)
|
227 |
+
// $(this).attr ('data-code', '');
|
228 |
+
// ***
|
229 |
+
el.setAttribute ('data-code', '');
|
230 |
|
231 |
+
// if (ai_debug) console.log ('AI INSERT CODE', $(block_wrapping_div).attr ('class'));
|
232 |
+
// ***
|
233 |
+
if (ai_debug) console.log ('AI INSERT CODE', block_wrapping_div.hasAttribute ('class') ? block_wrapping_div.getAttribute ('class') : '');
|
234 |
if (ai_debug) console.log ('');
|
235 |
|
236 |
+
// ai_process_element (this);
|
237 |
+
// ***
|
238 |
+
ai_process_element (el);
|
239 |
}
|
240 |
}
|
241 |
|
242 |
+
// block_wrapping_div.removeClass ('ai-list-block-filter');
|
243 |
+
block_wrapping_div.classList.remove ('ai-list-block-filter');
|
244 |
});
|
245 |
}
|
246 |
|
247 |
+
// ai_process_filter_hooks = function (ai_filter_hook_blocks) {
|
248 |
+
// ***
|
249 |
+
ai_process_filter_hooks = function (element) {
|
250 |
|
251 |
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
252 |
// var ai_debug = false;
|
253 |
|
254 |
+
if (element == null) {
|
255 |
+
// ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
256 |
+
// ***
|
257 |
+
ai_filter_hook_blocks = document.querySelectorAll ("div.ai-filter-check, meta.ai-filter-check");
|
258 |
} else {
|
259 |
+
// ai_filter_hook_blocks = ai_filter_hook_blocks.filter ('.ai-filter-check');
|
260 |
+
|
261 |
+
// Temp fix for jQuery elements
|
262 |
+
// ***
|
263 |
+
if (window.jQuery && window.jQuery.fn && element instanceof jQuery && element.hasOwnProperty ('0')) {
|
264 |
+
ai_filter_hook_blocks = element [0];
|
265 |
+
} else
|
266 |
+
|
267 |
+
// ***
|
268 |
+
ai_filter_hook_blocks = element.querySelectorAll ('.ai-filter-check');
|
269 |
}
|
270 |
|
271 |
if (!ai_filter_hook_blocks.length) return;
|
292 |
|
293 |
ai_filter_hook_data_requested = true;
|
294 |
|
295 |
+
// var page = site_url+"/wp-admin/admin-ajax.php?action=ai_ajax&filter-hook-data=all&ai_check=" + ai_data_id + '&http_user_agent=' + encodeURIComponent (user_agent) + '&http_accept_language=' + encodeURIComponent (language) + ai_random_parameter ();
|
296 |
+
// $.get (page, function (filter_hook_data) {
|
297 |
+
// ***
|
298 |
+
var url_data = {
|
299 |
+
action: "ai_ajax",
|
300 |
+
'filter-hook-data': 'all',
|
301 |
+
check: ai_data_id,
|
302 |
+
http_user_agent: encodeURIComponent (user_agent),
|
303 |
+
http_accept_language: encodeURIComponent (language),
|
304 |
+
ver: ai_random_parameter ()
|
305 |
+
};
|
306 |
+
|
307 |
+
var formBody = [];
|
308 |
+
for (var property in url_data) {
|
309 |
+
var encodedKey = encodeURIComponent (property);
|
310 |
+
var encodedValue = encodeURIComponent (url_data [property]);
|
311 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
312 |
+
}
|
313 |
+
formBody = formBody.join ("&");
|
314 |
+
|
315 |
+
async function ai_filter_check () {
|
316 |
+
const response = await fetch (ai_ajax_url + '?' + formBody, {
|
317 |
+
method: 'GET',
|
318 |
+
});
|
319 |
+
|
320 |
+
// if (!response.ok) {
|
321 |
+
//// throw new Error(`HTTP error! status: ${response.status}`);
|
322 |
+
// if (ai_debug) console.log ("Ajax call failed, Status: " + response.status + ", Error: " + response.statusText);
|
323 |
+
// }
|
324 |
|
325 |
+
const text = await response.text ();
|
326 |
+
|
327 |
+
return text;
|
328 |
+
}
|
329 |
+
|
330 |
+
ai_filter_check ().then (filter_hook_data => {
|
331 |
|
332 |
if (filter_hook_data == '') {
|
333 |
+
var error_message = 'AI FILTER HOOK Ajax request returned empty data, filter hook checks not processed';
|
334 |
console.error (error_message);
|
335 |
|
336 |
if (typeof ai_js_errors != 'undefined') {
|
340 |
try {
|
341 |
var filter_hook_data_test = JSON.parse (filter_hook_data);
|
342 |
} catch (error) {
|
343 |
+
var error_message = 'AI FILTER HOOK Ajax call returned invalid data, filter hook checks not processed';
|
344 |
+
console.error (error_message);
|
345 |
|
346 |
if (typeof ai_js_errors != 'undefined') {
|
347 |
ai_js_errors.push ([error_message, page, 0]);
|
357 |
if (ai_debug) console.log ("AI FILTER HOOK RETURNED COMMENTS:", filter_hook_data_test ['comments']);
|
358 |
|
359 |
// Check blocks again - some blocks might get inserted after the filte hook data was requested
|
360 |
+
// ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
361 |
+
ai_filter_hook_blocks = document.querySelectorAll ("div.ai-filter-check, meta.ai-filter-check");
|
362 |
|
363 |
if (ai_debug) console.log ("AI FILTER HOOK BLOCKS:", ai_filter_hook_blocks.length);
|
364 |
|
365 |
process_filter_hook_data (ai_filter_hook_blocks);
|
366 |
+
// }).fail (function(jqXHR, status, err) {
|
367 |
+
// ***
|
368 |
+
}).catch ((error) => {
|
369 |
+
// if (ai_debug) console.log ("Ajax call failed, Status: " + status + ", Error: " + err);
|
370 |
+
// ***
|
371 |
+
if (ai_debug) console.error ("AI FILTER ERROR:", error);
|
372 |
+
// $("div.ai-filter-check").each (function () {
|
373 |
+
document.querySelectorAll ('div.ai-filter-check').forEach ((el, index) => {
|
374 |
+
// $(this).css ({"display": "none", "visibility": "", "position": "", "width": "", "height": "", "z-index": ""}).removeClass ('ai-filter-check').hide ();
|
375 |
+
el.style.display = 'none';
|
376 |
+
el.style.visibility = '';
|
377 |
+
el.style.position = '';
|
378 |
+
el.style.width = '';
|
379 |
+
el.style.height = '';
|
380 |
+
el.style.zIndex = '';
|
381 |
+
|
382 |
+
el.classList.remove ('ai-filter-check');
|
383 |
+
el.style.display = 'none';
|
384 |
});
|
385 |
});
|
386 |
}
|
387 |
|
388 |
+
|
389 |
+
// $(document).ready (function($) {
|
390 |
+
// setTimeout (function () {ai_process_filter_hooks ()}, 3);
|
391 |
+
// });
|
392 |
+
// ***
|
393 |
+
function ai_ready (fn) {
|
394 |
+
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) {
|
395 |
+
fn ();
|
396 |
+
} else {
|
397 |
+
document.addEventListener ('DOMContentLoaded', fn);
|
398 |
+
}
|
399 |
+
}
|
400 |
+
|
401 |
+
function ai_check_filter_hooks () {
|
402 |
+
setTimeout (function () {ai_process_filter_hooks ()}, 3);
|
403 |
+
}
|
404 |
+
|
405 |
+
ai_ready (ai_check_filter_hooks);
|
406 |
+
|
407 |
+
//});
|
408 |
+
// ***
|
409 |
|
410 |
function ai_process_element (element) {
|
411 |
setTimeout (function() {
|
414 |
}
|
415 |
|
416 |
if (typeof ai_process_lists == 'function') {
|
417 |
+
// ***
|
418 |
ai_process_lists (jQuery (".ai-list-data", element));
|
419 |
}
|
420 |
|
421 |
if (typeof ai_process_ip_addresses == 'function') {
|
422 |
+
// ***
|
423 |
ai_process_ip_addresses (jQuery (".ai-ip-data", element));
|
424 |
}
|
425 |
|
426 |
if (typeof ai_process_filter_hooks == 'function') {
|
427 |
+
// ai_process_filter_hooks (jQuery (".ai-filter-check", element));
|
428 |
+
// ***
|
429 |
+
ai_process_filter_hooks (element);
|
430 |
}
|
431 |
|
432 |
if (typeof ai_adb_process_blocks == 'function') {
|
446 |
}, 5);
|
447 |
}
|
448 |
|
449 |
+
}
|
450 |
+
|
includes/js/ai-filter.min.js
CHANGED
@@ -1,9 +1,33 @@
|
|
1 |
-
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(a){return a.raw=a};$jscomp.createTemplateTagFirstArgWithRaw=function(a,
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
function
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(a){return a.raw=a};$jscomp.createTemplateTagFirstArgWithRaw=function(a,b){a.raw=b;return a};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};
|
2 |
+
$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
|
3 |
+
$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};
|
4 |
+
$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};$jscomp.polyfill=function(a,b,c,d){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,d):$jscomp.polyfillUnisolated(a,b,c,d))};
|
5 |
+
$jscomp.polyfillUnisolated=function(a,b,c,d){c=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var g=a[d];if(!(g in c))return;c=c[g]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};
|
6 |
+
$jscomp.polyfillIsolated=function(a,b,c,d){var g=a.split(".");a=1===g.length;d=g[0];d=!a&&d in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var e=0;e<g.length-1;e++){var f=g[e];if(!(f in d))return;d=d[f]}g=g[g.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&"es6"===c?d[g]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,g,{configurable:!0,writable:!0,value:b}):b!==c&&(void 0===$jscomp.propertyToPolyfillSymbol[g]&&(c=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[g]=$jscomp.IS_SYMBOL_NATIVE?
|
7 |
+
$jscomp.global.Symbol(g):$jscomp.POLYFILL_PREFIX+c+"$"+g),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[g],{configurable:!0,writable:!0,value:b})))};$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};
|
8 |
+
$jscomp.setPrototypeOf=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null;$jscomp.generator={};$jscomp.generator.ensureIteratorResultIsObject_=function(a){if(!(a instanceof Object))throw new TypeError("Iterator result "+a+" is not an object");};
|
9 |
+
$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null};$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};
|
10 |
+
$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(a){this.yieldResult=a};$jscomp.generator.Context.prototype.throw_=function(a){this.abruptCompletion_={exception:a,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype["return"]=function(a){this.abruptCompletion_={"return":a};this.nextAddress=this.finallyAddress_};
|
11 |
+
$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(a){this.abruptCompletion_={jumpTo:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(a,b){this.nextAddress=b;return{value:a}};$jscomp.generator.Context.prototype.yieldAll=function(a,b){var c=$jscomp.makeIterator(a),d=c.next();$jscomp.generator.ensureIteratorResultIsObject_(d);if(d.done)this.yieldResult=d.value,this.nextAddress=b;else return this.yieldAllIterator_=c,this.yield(d.value,b)};
|
12 |
+
$jscomp.generator.Context.prototype.jumpTo=function(a){this.nextAddress=a};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(a,b){this.catchAddress_=a;void 0!=b&&(this.finallyAddress_=b)};$jscomp.generator.Context.prototype.setFinallyBlock=function(a){this.catchAddress_=0;this.finallyAddress_=a||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(a,b){this.nextAddress=a;this.catchAddress_=b||0};
|
13 |
+
$jscomp.generator.Context.prototype.enterCatchBlock=function(a){this.catchAddress_=a||0;a=this.abruptCompletion_.exception;this.abruptCompletion_=null;return a};$jscomp.generator.Context.prototype.enterFinallyBlock=function(a,b,c){c?this.finallyContexts_[c]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=a||0;this.finallyAddress_=b||0};
|
14 |
+
$jscomp.generator.Context.prototype.leaveFinallyBlock=function(a,b){var c=this.finallyContexts_.splice(b||0)[0];if(c=this.abruptCompletion_=this.abruptCompletion_||c){if(c.isException)return this.jumpToErrorHandler_();void 0!=c.jumpTo&&this.finallyAddress_<c.jumpTo?(this.nextAddress=c.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=a};$jscomp.generator.Context.prototype.forIn=function(a){return new $jscomp.generator.Context.PropertyIterator(a)};
|
15 |
+
$jscomp.generator.Context.PropertyIterator=function(a){this.object_=a;this.properties_=[];for(var b in a)this.properties_.push(b);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};
|
16 |
+
$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};
|
17 |
+
$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_("return"in b?b["return"]:function(c){return{value:c,done:!0}},a,this.context_["return"]);this.context_["return"](a);return this.nextStep_()};
|
18 |
+
$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};
|
19 |
+
$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var g=d.value}catch(e){return this.context_.yieldAllIterator_=null,this.context_.throw_(e),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,g);return this.nextStep_()};
|
20 |
+
$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a["return"],done:!0}}return{value:void 0,done:!0}};
|
21 |
+
$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this["throw"]=function(b){return a.throw_(b)};this["return"]=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){var c=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(c,a.prototype);return c};
|
22 |
+
$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a["throw"](d)}return new Promise(function(d,g){function e(f){f.done?d(f.value):Promise.resolve(f.value).then(b,c).then(e,g)}e(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};
|
23 |
+
if("undefined"!=typeof ai_filter){var ai_process_element=function(a){setTimeout(function(){"function"==typeof ai_process_rotations_in_element&&ai_process_rotations_in_element(a);"function"==typeof ai_process_lists&&ai_process_lists(jQuery(".ai-list-data",a));"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses(jQuery(".ai-ip-data",a));"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks(a);"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks(a);"function"==
|
24 |
+
typeof ai_process_impressions&&1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)},5)},ai_check_filter_hooks=function(){setTimeout(function(){ai_process_filter_hooks()},3)},ai_ready=function(a){"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?a():document.addEventListener("DOMContentLoaded",
|
25 |
+
a)},process_filter_hook_data=function(a){a.forEach(function(d,g){d.classList.remove("ai-filter-check")});var b=!1;if(""!=ai_filter_hook_data){try{var c=JSON.parse(ai_filter_hook_data)}catch(d){return}null!=c&&a.forEach(function(d,g){var e=d.closest("div."+ai_block_class_def),f=parseInt(d.dataset.block);b=!1;"undefined"!==typeof c&&(c.includes("*")?(b=!0,c.includes(-f)&&(b=!1)):c.includes(f)&&(b=!0));d.style.visibility="";d.style.position="none";d.style.width="";d.style.height="";var h=d.style.zIndex=
|
26 |
+
"";f=JSON.parse(ai_filter_hook_comments);if("string"==typeof f)h=f;else if("object"==typeof f){h="";f=$jscomp.makeIterator(Object.entries(f));for(var k=f.next();!k.done;k=f.next()){var l=$jscomp.makeIterator(k.value);k=l.next().value;l=l.next().value;h+=k+": "+l+"\n"}}else h=ai_filter_hook_comments;"undefined"!=typeof ai_front&&(f=prev(d,".ai-debug-bar"),null!=f&&(f.querySelectorAll(".ai-status").forEach(function(m,p){m.textContent=b?ai_front.visible:ai_front.hidden}),f.querySelectorAll(".ai-filter-data").forEach(function(m,
|
27 |
+
p){m.setAttribute("title",h)})));if(b){if(e.style.visibility="",e.classList.contains("ai-remove-position")&&(e.style.position=""),"code"in d.dataset){k=b64d(d.dataset.code);f=document.createElement("div");f.innerHTML=k;k=document.createRange();try{var n=k.createContextualFragment(f.innerHTML)}catch(m){}null!=d.closest("head")?(d.insertBefore(n,null),d.remove()):d.parentNode.insertBefore(n,d.nextSibling);d.setAttribute("data-code","");ai_process_element(d)}}else d.style.display="none",null!=!e.querySelector(".ai-debug-block")&&
|
28 |
+
(e.style.display="none"),e.removeAttribute("data-ai"),null!=e.querySelector(".ai-debug-block")?(e.style.visibility="",e.classList.remove("ai-close"),e.classList.contains("ai-remove-position")&&(e.style.position=""),"code"in d.dataset&&(e.classList.remove("ai-list-block"),e.classList.remove("ai-list-block-ip"),null!=prev(e)&&prev(e).classList.contains("ai-debug-info")&&prev(e).remove())):e.style.display="none";e.classList.remove("ai-list-block-filter")})}},ai_random_parameter=function(){return(new Date).getTime()+
|
29 |
+
"-"+Math.round(1E5*Math.random())},prev=function(a,b){if(b){for(var c=a.previousElementSibling;c&&!c.matches(b);)c=c.previousElementSibling;return c}return a.previousElementSibling};ai_process_filter_hooks=function(a){ai_filter_hook_blocks=null==a?document.querySelectorAll("div.ai-filter-check, meta.ai-filter-check"):window.jQuery&&window.jQuery.fn&&a instanceof jQuery&&a.hasOwnProperty("0")?a[0]:a.querySelectorAll(".ai-filter-check");if(ai_filter_hook_blocks.length)if("undefined"!=typeof ai_filter_hook_data)process_filter_hook_data(ai_filter_hook_blocks);
|
30 |
+
else if("undefined"==typeof ai_filter_hook_data_requested){a=window.navigator.userAgent;var b=navigator.language;ai_filter_hook_data_requested=!0;a={action:"ai_ajax","filter-hook-data":"all",check:ai_data_id,http_user_agent:encodeURIComponent(a),http_accept_language:encodeURIComponent(b),ver:ai_random_parameter()};var c=[],d;for(d in a){b=encodeURIComponent(d);var g=encodeURIComponent(a[d]);c.push(b+"="+g)}c=c.join("&");(function(){var e,f;return $jscomp.asyncExecutePromiseGeneratorProgram(function(h){if(1==
|
31 |
+
h.nextAddress)return h.yield(fetch(ai_ajax_url+"?"+c,{method:"GET"}),2);if(3!=h.nextAddress)return e=h.yieldResult,h.yield(e.text(),3);f=h.yieldResult;return h["return"](f)})})().then(function(e){if(""==e)e="AI FILTER HOOK Ajax request returned empty data, filter hook checks not processed",console.error(e),"undefined"!=typeof ai_js_errors&&ai_js_errors.push([e,page,0]);else try{var f=JSON.parse(e)}catch(h){e="AI FILTER HOOK Ajax call returned invalid data, filter hook checks not processed",console.error(e),
|
32 |
+
"undefined"!=typeof ai_js_errors&&ai_js_errors.push([e,page,0])}ai_filter_hook_data=JSON.stringify(f.blocks);ai_filter_hook_comments=JSON.stringify(f.comments);ai_filter_hook_blocks=document.querySelectorAll("div.ai-filter-check, meta.ai-filter-check");process_filter_hook_data(ai_filter_hook_blocks)})["catch"](function(e){document.querySelectorAll("div.ai-filter-check").forEach(function(f,h){f.style.display="none";f.style.visibility="";f.style.position="";f.style.width="";f.style.height="";f.style.zIndex=
|
33 |
+
"";f.classList.remove("ai-filter-check");f.style.display="none"})})}};ai_ready(ai_check_filter_hooks)};
|
includes/js/ai-filter.q.js
ADDED
@@ -0,0 +1,248 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery (function ($) {
|
2 |
+
|
3 |
+
function ai_random_parameter () {
|
4 |
+
var current_time = new Date ().getTime ();
|
5 |
+
return '&ver=' + current_time + '-' + Math.round (Math.random () * 100000);
|
6 |
+
}
|
7 |
+
|
8 |
+
function process_filter_hook_data (ai_filter_hook_blocks) {
|
9 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
10 |
+
// var ai_debug = false;
|
11 |
+
|
12 |
+
ai_filter_hook_blocks.removeClass ('ai-filter-check');
|
13 |
+
|
14 |
+
var enable_block = false;
|
15 |
+
|
16 |
+
if (ai_debug) console.log ('');
|
17 |
+
if (ai_debug) console.log ("AI FILTER HOOK DATA: " + ai_filter_hook_data);
|
18 |
+
|
19 |
+
if (ai_filter_hook_data == '') {
|
20 |
+
if (ai_debug) console.log ('AI FILTER HOOK DATA EMPTY');
|
21 |
+
return;
|
22 |
+
}
|
23 |
+
try {
|
24 |
+
var filter_hook_data_array = JSON.parse (ai_filter_hook_data);
|
25 |
+
|
26 |
+
} catch (error) {
|
27 |
+
if (ai_debug) console.log ('AI FILTER HOOK DATA JSON ERROR');
|
28 |
+
return;
|
29 |
+
}
|
30 |
+
|
31 |
+
if (filter_hook_data_array != null) ai_filter_hook_blocks.each (function () {
|
32 |
+
|
33 |
+
var block_wrapping_div = $(this).closest ('div.' + ai_block_class_def);
|
34 |
+
var block = parseInt ($(this).data ('block'));
|
35 |
+
|
36 |
+
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block_wrapping_div.attr ('class'));
|
37 |
+
|
38 |
+
enable_block = false;
|
39 |
+
|
40 |
+
if (typeof filter_hook_data_array !== 'undefined') {
|
41 |
+
if (filter_hook_data_array.includes ('*')) {
|
42 |
+
enable_block = true;
|
43 |
+
if (filter_hook_data_array.includes (- block)) {
|
44 |
+
enable_block = false;
|
45 |
+
}
|
46 |
+
}
|
47 |
+
else if (filter_hook_data_array.includes (block)) enable_block = true;
|
48 |
+
}
|
49 |
+
|
50 |
+
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block, enable_block ? 'ENABLED' : 'DISABLED');
|
51 |
+
|
52 |
+
$(this).css ({"visibility": "", "position": "", "width": "", "height": "", "z-index": ""});
|
53 |
+
|
54 |
+
var comments = '';
|
55 |
+
var comments_decoded = JSON.parse (ai_filter_hook_comments);
|
56 |
+
if (typeof comments_decoded == 'string') {
|
57 |
+
comments = comments_decoded;
|
58 |
+
}
|
59 |
+
else if (typeof comments_decoded == 'object') {
|
60 |
+
comments = '';
|
61 |
+
for (const [key, value] of Object.entries (comments_decoded)) {
|
62 |
+
comments = comments + `${key}: ${value}\n`;
|
63 |
+
}
|
64 |
+
}
|
65 |
+
else comments = ai_filter_hook_comments;
|
66 |
+
|
67 |
+
if (typeof ai_front != 'undefined') {
|
68 |
+
var debug_bar = $(this).prev ('.ai-debug-bar');
|
69 |
+
debug_bar.find ('.ai-status').text (enable_block ? ai_front.visible : ai_front.hidden);
|
70 |
+
debug_bar.find ('.ai-filter-data').attr ('title', comments);
|
71 |
+
}
|
72 |
+
|
73 |
+
if (!enable_block) {
|
74 |
+
$(this).hide (); // .ai-filter-check
|
75 |
+
|
76 |
+
if (!block_wrapping_div.find ('.ai-debug-block').length) {
|
77 |
+
block_wrapping_div.hide ();
|
78 |
+
}
|
79 |
+
|
80 |
+
block_wrapping_div.removeAttr ('data-ai');
|
81 |
+
|
82 |
+
if (block_wrapping_div.find ('.ai-debug-block')) {
|
83 |
+
block_wrapping_div.css ({"visibility": ""}).removeClass ('ai-close');
|
84 |
+
if (block_wrapping_div.hasClass ('ai-remove-position')) {
|
85 |
+
block_wrapping_div.css ({"position": ""});
|
86 |
+
}
|
87 |
+
|
88 |
+
// In case client-side insert is used and lists will not be processed
|
89 |
+
if (typeof $(this).data ('code') != 'undefined') {
|
90 |
+
// Remove ai-list-block to show debug info
|
91 |
+
block_wrapping_div.removeClass ('ai-list-block');
|
92 |
+
block_wrapping_div.removeClass ('ai-list-block-ip');
|
93 |
+
|
94 |
+
// Remove also 'NOT LOADED' bar if it is there
|
95 |
+
if (block_wrapping_div.prev ().hasClass ('ai-debug-info')) {
|
96 |
+
block_wrapping_div.prev ().remove ();
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
} else block_wrapping_div.hide ();
|
101 |
+
} else {
|
102 |
+
block_wrapping_div.css ({"visibility": ""});
|
103 |
+
if (block_wrapping_div.hasClass ('ai-remove-position')) {
|
104 |
+
block_wrapping_div.css ({"position": ""});
|
105 |
+
}
|
106 |
+
|
107 |
+
if (typeof $(this).data ('code') != 'undefined') {
|
108 |
+
var block_code = b64d ($(this).data ('code'));
|
109 |
+
|
110 |
+
if ($(this).closest ('head').length != 0) {
|
111 |
+
$(this).after (block_code);
|
112 |
+
if (!ai_debug) $(this).remove ();
|
113 |
+
} else $(this).append (block_code);
|
114 |
+
|
115 |
+
// if (!ai_debug)
|
116 |
+
$(this).attr ('data-code', '');
|
117 |
+
|
118 |
+
if (ai_debug) console.log ('AI INSERT CODE', $(block_wrapping_div).attr ('class'));
|
119 |
+
if (ai_debug) console.log ('');
|
120 |
+
|
121 |
+
ai_process_element (this);
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
block_wrapping_div.removeClass ('ai-list-block-filter');
|
126 |
+
});
|
127 |
+
}
|
128 |
+
|
129 |
+
ai_process_filter_hooks = function (ai_filter_hook_blocks) {
|
130 |
+
|
131 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
132 |
+
// var ai_debug = false;
|
133 |
+
|
134 |
+
if (ai_filter_hook_blocks == null) {
|
135 |
+
ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
136 |
+
} else {
|
137 |
+
ai_filter_hook_blocks = ai_filter_hook_blocks.filter ('.ai-filter-check');
|
138 |
+
}
|
139 |
+
|
140 |
+
if (!ai_filter_hook_blocks.length) return;
|
141 |
+
|
142 |
+
if (ai_debug) console.log ("AI PROCESSING FILTER HOOK:", ai_filter_hook_blocks.length, "blocks");
|
143 |
+
|
144 |
+
if (typeof ai_filter_hook_data != 'undefined') {
|
145 |
+
if (ai_debug) console.log ("SAVED FILTER HOOK DATA:", ai_filter_hook_data);
|
146 |
+
process_filter_hook_data (ai_filter_hook_blocks);
|
147 |
+
return;
|
148 |
+
}
|
149 |
+
|
150 |
+
if (typeof ai_filter_hook_data_requested != 'undefined') {
|
151 |
+
if (ai_debug) console.log ("FILTER HOOK DATA ALREADY REQUESTED, STILL WAITING...");
|
152 |
+
return;
|
153 |
+
}
|
154 |
+
|
155 |
+
var user_agent = window.navigator.userAgent;
|
156 |
+
var language = navigator.language;
|
157 |
+
|
158 |
+
if (ai_debug) console.log ("REQUESTING FILTER HOOK DATA");
|
159 |
+
if (ai_debug) console.log ("USER AGENT:", user_agent);
|
160 |
+
if (ai_debug) console.log ("LANGUAGE:", language);
|
161 |
+
|
162 |
+
ai_filter_hook_data_requested = true;
|
163 |
+
|
164 |
+
var page = ai_ajax_url+"?action=ai_ajax&filter-hook-data=all&ai_check=" + ai_data_id + '&http_user_agent=' + encodeURIComponent (user_agent) + '&http_accept_language=' + encodeURIComponent (language) + ai_random_parameter ();
|
165 |
+
|
166 |
+
$.get (page, function (filter_hook_data) {
|
167 |
+
|
168 |
+
if (filter_hook_data == '') {
|
169 |
+
var error_message = 'Ajax request returned empty data, filter hook checks not processed';
|
170 |
+
console.error (error_message);
|
171 |
+
|
172 |
+
if (typeof ai_js_errors != 'undefined') {
|
173 |
+
ai_js_errors.push ([error_message, page, 0]);
|
174 |
+
}
|
175 |
+
} else {
|
176 |
+
try {
|
177 |
+
var filter_hook_data_test = JSON.parse (filter_hook_data);
|
178 |
+
} catch (error) {
|
179 |
+
var error_message = 'Ajax call returned invalid data, filter hook checks not processed';
|
180 |
+
console.error (error_message, filter_hook_data);
|
181 |
+
|
182 |
+
if (typeof ai_js_errors != 'undefined') {
|
183 |
+
ai_js_errors.push ([error_message, page, 0]);
|
184 |
+
}
|
185 |
+
}
|
186 |
+
}
|
187 |
+
|
188 |
+
ai_filter_hook_data = JSON.stringify (filter_hook_data_test ['blocks']);
|
189 |
+
ai_filter_hook_comments = JSON.stringify (filter_hook_data_test ['comments']);
|
190 |
+
|
191 |
+
if (ai_debug) console.log ('');
|
192 |
+
if (ai_debug) console.log ("AI FILTER HOOK RETURNED DATA:", ai_filter_hook_data);
|
193 |
+
if (ai_debug) console.log ("AI FILTER HOOK RETURNED COMMENTS:", filter_hook_data_test ['comments']);
|
194 |
+
|
195 |
+
// Check blocks again - some blocks might get inserted after the filte hook data was requested
|
196 |
+
ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
197 |
+
|
198 |
+
if (ai_debug) console.log ("AI FILTER HOOK BLOCKS:", ai_filter_hook_blocks.length);
|
199 |
+
|
200 |
+
process_filter_hook_data (ai_filter_hook_blocks);
|
201 |
+
}).fail (function(jqXHR, status, err) {
|
202 |
+
if (ai_debug) console.log ("Ajax call failed, Status: " + status + ", Error: " + err);
|
203 |
+
$("div.ai-filter-check").each (function () {
|
204 |
+
$(this).css ({"display": "none", "visibility": "", "position": "", "width": "", "height": "", "z-index": ""}).removeClass ('ai-filter-check').hide ();
|
205 |
+
});
|
206 |
+
});
|
207 |
+
}
|
208 |
+
|
209 |
+
$(document).ready (function($) {
|
210 |
+
setTimeout (function () {ai_process_filter_hooks ()}, 3);
|
211 |
+
});
|
212 |
+
});
|
213 |
+
|
214 |
+
function ai_process_element (element) {
|
215 |
+
setTimeout (function() {
|
216 |
+
if (typeof ai_process_rotations_in_element == 'function') {
|
217 |
+
ai_process_rotations_in_element (element);
|
218 |
+
}
|
219 |
+
|
220 |
+
if (typeof ai_process_lists == 'function') {
|
221 |
+
ai_process_lists (jQuery (".ai-list-data", element));
|
222 |
+
}
|
223 |
+
|
224 |
+
if (typeof ai_process_ip_addresses == 'function') {
|
225 |
+
ai_process_ip_addresses (jQuery (".ai-ip-data", element));
|
226 |
+
}
|
227 |
+
|
228 |
+
if (typeof ai_process_filter_hooks == 'function') {
|
229 |
+
ai_process_filter_hooks (jQuery (".ai-filter-check", element));
|
230 |
+
}
|
231 |
+
|
232 |
+
if (typeof ai_adb_process_blocks == 'function') {
|
233 |
+
ai_adb_process_blocks (element);
|
234 |
+
}
|
235 |
+
|
236 |
+
if (typeof ai_process_impressions == 'function' && ai_tracking_finished == true) {
|
237 |
+
ai_process_impressions ();
|
238 |
+
}
|
239 |
+
if (typeof ai_install_click_trackers == 'function' && ai_tracking_finished == true) {
|
240 |
+
ai_install_click_trackers ();
|
241 |
+
}
|
242 |
+
|
243 |
+
if (typeof ai_install_close_buttons == 'function') {
|
244 |
+
ai_install_close_buttons (document);
|
245 |
+
}
|
246 |
+
}, 5);
|
247 |
+
}
|
248 |
+
|
includes/js/ai-filter.q.min.js
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(a){return a.raw=a};$jscomp.createTemplateTagFirstArgWithRaw=function(a,f){a.raw=f;return a};$jscomp.arrayIteratorImpl=function(a){var f=0;return function(){return f<a.length?{done:!1,value:a[f++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var f="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return f?f.call(a):$jscomp.arrayIterator(a)};
|
2 |
+
jQuery(function(a){function f(e){e.removeClass("ai-filter-check");var h=!1;if(""!=ai_filter_hook_data){try{var k=JSON.parse(ai_filter_hook_data)}catch(b){return}null!=k&&e.each(function(){var b=a(this).closest("div."+ai_block_class_def),d=parseInt(a(this).data("block"));h=!1;"undefined"!==typeof k&&(k.includes("*")?(h=!0,k.includes(-d)&&(h=!1)):k.includes(d)&&(h=!0));a(this).css({visibility:"",position:"",width:"",height:"","z-index":""});var c=JSON.parse(ai_filter_hook_comments);if("string"==typeof c)d=
|
3 |
+
c;else if("object"==typeof c){d="";c=$jscomp.makeIterator(Object.entries(c));for(var g=c.next();!g.done;g=c.next()){var l=$jscomp.makeIterator(g.value);g=l.next().value;l=l.next().value;d+=g+": "+l+"\n"}}else d=ai_filter_hook_comments;"undefined"!=typeof ai_front&&(c=a(this).prev(".ai-debug-bar"),c.find(".ai-status").text(h?ai_front.visible:ai_front.hidden),c.find(".ai-filter-data").attr("title",d));h?(b.css({visibility:""}),b.hasClass("ai-remove-position")&&b.css({position:""}),"undefined"!=typeof a(this).data("code")&&
|
4 |
+
(d=b64d(a(this).data("code")),0!=a(this).closest("head").length?(a(this).after(d),a(this).remove()):a(this).append(d),a(this).attr("data-code",""),ai_process_element(this))):(a(this).hide(),b.find(".ai-debug-block").length||b.hide(),b.removeAttr("data-ai"),b.find(".ai-debug-block")?(b.css({visibility:""}).removeClass("ai-close"),b.hasClass("ai-remove-position")&&b.css({position:""}),"undefined"!=typeof a(this).data("code")&&(b.removeClass("ai-list-block"),b.removeClass("ai-list-block-ip"),b.prev().hasClass("ai-debug-info")&&
|
5 |
+
b.prev().remove())):b.hide());b.removeClass("ai-list-block-filter")})}}ai_process_filter_hooks=function(e){e=null==e?a("div.ai-filter-check, meta.ai-filter-check"):e.filter(".ai-filter-check");if(e.length)if("undefined"!=typeof ai_filter_hook_data)f(e);else if("undefined"==typeof ai_filter_hook_data_requested){var h=window.navigator.userAgent,k=navigator.language;ai_filter_hook_data_requested=!0;var b=ai_ajax_url+"?action=ai_ajax&filter-hook-data=all&ai_check="+ai_data_id+"&http_user_agent="+encodeURIComponent(h)+
|
6 |
+
"&http_accept_language="+encodeURIComponent(k)+("&ver="+(new Date).getTime()+"-"+Math.round(1E5*Math.random()));a.get(b,function(d){if(""==d){var c="Ajax request returned empty data, filter hook checks not processed";console.error(c);"undefined"!=typeof ai_js_errors&&ai_js_errors.push([c,b,0])}else try{var g=JSON.parse(d)}catch(l){c="Ajax call returned invalid data, filter hook checks not processed",console.error(c,d),"undefined"!=typeof ai_js_errors&&ai_js_errors.push([c,b,0])}ai_filter_hook_data=
|
7 |
+
JSON.stringify(g.blocks);ai_filter_hook_comments=JSON.stringify(g.comments);e=a("div.ai-filter-check, meta.ai-filter-check");f(e)}).fail(function(d,c,g){a("div.ai-filter-check").each(function(){a(this).css({display:"none",visibility:"",position:"",width:"",height:"","z-index":""}).removeClass("ai-filter-check").hide()})})}};a(document).ready(function(e){setTimeout(function(){ai_process_filter_hooks()},3)})});
|
8 |
+
function ai_process_element(a){setTimeout(function(){"function"==typeof ai_process_rotations_in_element&&ai_process_rotations_in_element(a);"function"==typeof ai_process_lists&&ai_process_lists(jQuery(".ai-list-data",a));"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses(jQuery(".ai-ip-data",a));"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks(jQuery(".ai-filter-check",a));"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks(a);"function"==typeof ai_process_impressions&&
|
9 |
+
1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)},5)};
|
includes/js/ai-insert.js
CHANGED
@@ -1,15 +1,24 @@
|
|
1 |
ai_insert = function (insertion, selector, insertion_code) {
|
2 |
-
|
3 |
-
var
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
} else var elements = document.querySelectorAll (selector);
|
5 |
|
6 |
// Array.prototype.forEach.call (elements, function (element, index) {
|
7 |
for (var index = 0, len = elements.length; index < len; index++) {
|
8 |
var element = elements [index];
|
9 |
|
10 |
-
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
11 |
-
// var ai_debug = false;
|
12 |
-
|
13 |
if (element.hasAttribute ('id')) {
|
14 |
selector_string = '#' + element.getAttribute ('id');
|
15 |
} else
|
@@ -31,24 +40,27 @@ ai_insert = function (insertion, selector, insertion_code) {
|
|
31 |
|
32 |
var ai_debug_name_ai_main = template.getElementsByClassName ("ai-debug-name ai-main")[0];
|
33 |
if (ai_debug_name_ai_main != null) {
|
34 |
-
var insertion_name =
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
|
|
|
|
|
|
52 |
}
|
53 |
|
54 |
if (selector_string.indexOf ('.ai-viewports') == - 1) {
|
@@ -68,46 +80,52 @@ ai_insert = function (insertion, selector, insertion_code) {
|
|
68 |
}
|
69 |
|
70 |
if (insertion == 'before') {
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
74 |
|
75 |
element.parentNode.insertBefore (fragment, element);
|
76 |
} else
|
77 |
if (insertion == 'after') {
|
78 |
-
|
79 |
-
|
80 |
-
|
|
|
81 |
|
82 |
element.parentNode.insertBefore (fragment, element.nextSibling);
|
83 |
} else
|
84 |
if (insertion == 'prepend') {
|
85 |
-
|
86 |
-
|
87 |
-
|
|
|
88 |
|
89 |
element.insertBefore (fragment, element.firstChild);
|
90 |
} else
|
91 |
if (insertion == 'append') {
|
92 |
-
|
93 |
-
|
94 |
-
|
|
|
95 |
|
96 |
element.insertBefore (fragment, null);
|
97 |
} else
|
98 |
if (insertion == 'replace-content') {
|
99 |
element.innerHTML = '';
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
104 |
|
105 |
element.insertBefore (fragment, null);
|
106 |
} else
|
107 |
if (insertion == 'replace-element') {
|
108 |
-
|
109 |
-
|
110 |
-
|
|
|
111 |
|
112 |
element.parentNode.insertBefore (fragment, element);
|
113 |
|
@@ -166,10 +184,12 @@ ai_insert_code = function (element) {
|
|
166 |
|
167 |
if (insertion_code != null) {
|
168 |
if (insertion_type != null && selector != null) {
|
169 |
-
//
|
170 |
-
|
171 |
-
|
172 |
-
|
|
|
|
|
173 |
} else var selector_exists = document.querySelectorAll (selector).length;
|
174 |
|
175 |
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block, insertion_type, selector, selector_exists ? '' : 'NOT FOUND');
|
@@ -192,9 +212,10 @@ ai_insert_code = function (element) {
|
|
192 |
if (ai_debug) console.log ('AI INSERT NEXT', 'range.createContextualFragment ERROR:', err.message);
|
193 |
}
|
194 |
|
195 |
-
|
196 |
-
|
197 |
-
|
|
|
198 |
|
199 |
element.parentNode.insertBefore (fragment, element.nextSibling);
|
200 |
|
@@ -386,7 +407,8 @@ ai_insert_client_code = function (id, len) {
|
|
386 |
if (typeof ai_block_div != 'undefined') {
|
387 |
var insertion_code = ai_block_div.getAttribute ('data-code');
|
388 |
|
389 |
-
if (insertion_code != null && ai_check_block () && ai_check_and_insert_block ()) {
|
|
|
390 |
ai_block_div.setAttribute ('data-code', insertion_code.substring (Math.floor (len / 19)));
|
391 |
ai_insert_code_by_class (id);
|
392 |
ai_block_div.remove();
|
@@ -406,15 +428,19 @@ function ai_process_elements () {
|
|
406 |
}
|
407 |
|
408 |
if (typeof ai_process_lists == 'function') {
|
|
|
409 |
ai_process_lists (jQuery (".ai-list-data"));
|
410 |
}
|
411 |
|
412 |
if (typeof ai_process_ip_addresses == 'function') {
|
|
|
413 |
ai_process_ip_addresses (jQuery (".ai-ip-data"));
|
414 |
}
|
415 |
|
416 |
if (typeof ai_process_filter_hooks == 'function') {
|
417 |
-
|
|
|
|
|
418 |
}
|
419 |
|
420 |
if (typeof ai_adb_process_blocks == 'function') {
|
1 |
ai_insert = function (insertion, selector, insertion_code) {
|
2 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
3 |
+
// var ai_debug = false;
|
4 |
+
|
5 |
+
// if (selector.indexOf (':eq') != - 1) {
|
6 |
+
// ***
|
7 |
+
if (selector.indexOf (':eq(') != - 1) {
|
8 |
+
var jq = window.jQuery && window.jQuery.fn;
|
9 |
+
|
10 |
+
if (ai_debug) console.log ('AI INSERT USING jQuery QUERIES:', selector);
|
11 |
+
|
12 |
+
if (!jq) {
|
13 |
+
console.error ('AI INSERT USING jQuery QUERIES:', selector, '- jQuery not found');
|
14 |
+
return;
|
15 |
+
} else var elements = jQuery (selector);
|
16 |
} else var elements = document.querySelectorAll (selector);
|
17 |
|
18 |
// Array.prototype.forEach.call (elements, function (element, index) {
|
19 |
for (var index = 0, len = elements.length; index < len; index++) {
|
20 |
var element = elements [index];
|
21 |
|
|
|
|
|
|
|
22 |
if (element.hasAttribute ('id')) {
|
23 |
selector_string = '#' + element.getAttribute ('id');
|
24 |
} else
|
40 |
|
41 |
var ai_debug_name_ai_main = template.getElementsByClassName ("ai-debug-name ai-main")[0];
|
42 |
if (ai_debug_name_ai_main != null) {
|
43 |
+
var insertion_name = insertion.toUpperCase ();
|
44 |
+
|
45 |
+
if (typeof ai_front != 'undefined') {
|
46 |
+
if (insertion == 'before') {
|
47 |
+
insertion_name = ai_front.insertion_before;
|
48 |
+
} else
|
49 |
+
if (insertion == 'after') {
|
50 |
+
insertion_name = ai_front.insertion_after;
|
51 |
+
} else
|
52 |
+
if (insertion == 'prepend') {
|
53 |
+
insertion_name = ai_front.insertion_prepend;
|
54 |
+
} else
|
55 |
+
if (insertion == 'append') {
|
56 |
+
insertion_name = ai_front.insertion_append;
|
57 |
+
} else
|
58 |
+
if (insertion == 'replace-content') {
|
59 |
+
insertion_name = ai_front.insertion_replace_content;
|
60 |
+
} else
|
61 |
+
if (insertion == 'replace-element') {
|
62 |
+
insertion_name = ai_front.insertion_replace_element;
|
63 |
+
}
|
64 |
}
|
65 |
|
66 |
if (selector_string.indexOf ('.ai-viewports') == - 1) {
|
80 |
}
|
81 |
|
82 |
if (insertion == 'before') {
|
83 |
+
// ***
|
84 |
+
// if (!fragment_ok) {
|
85 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element));
|
86 |
+
// } else
|
87 |
|
88 |
element.parentNode.insertBefore (fragment, element);
|
89 |
} else
|
90 |
if (insertion == 'after') {
|
91 |
+
// ***
|
92 |
+
// if (!fragment_ok) {
|
93 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element.nextSibling));
|
94 |
+
// } else
|
95 |
|
96 |
element.parentNode.insertBefore (fragment, element.nextSibling);
|
97 |
} else
|
98 |
if (insertion == 'prepend') {
|
99 |
+
// ***
|
100 |
+
// if (!fragment_ok) {
|
101 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element.firstChild));
|
102 |
+
// } else
|
103 |
|
104 |
element.insertBefore (fragment, element.firstChild);
|
105 |
} else
|
106 |
if (insertion == 'append') {
|
107 |
+
// ***
|
108 |
+
// if (!fragment_ok) {
|
109 |
+
// jQuery (template.innerHTML).appendTo (jQuery (element));
|
110 |
+
// } else
|
111 |
|
112 |
element.insertBefore (fragment, null);
|
113 |
} else
|
114 |
if (insertion == 'replace-content') {
|
115 |
element.innerHTML = '';
|
116 |
|
117 |
+
// ***
|
118 |
+
// if (!fragment_ok) {
|
119 |
+
// jQuery (template.innerHTML).appendTo (jQuery (element));
|
120 |
+
// } else
|
121 |
|
122 |
element.insertBefore (fragment, null);
|
123 |
} else
|
124 |
if (insertion == 'replace-element') {
|
125 |
+
// ***
|
126 |
+
// if (!fragment_ok) {
|
127 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element));
|
128 |
+
// } else
|
129 |
|
130 |
element.parentNode.insertBefore (fragment, element);
|
131 |
|
184 |
|
185 |
if (insertion_code != null) {
|
186 |
if (insertion_type != null && selector != null) {
|
187 |
+
// ***
|
188 |
+
if (selector.indexOf (':eq(') != - 1) {
|
189 |
+
var jq = window.jQuery && window.jQuery.fn;
|
190 |
+
if (jq) {
|
191 |
+
var selector_exists = jQuery (selector).length;
|
192 |
+
} else var selector_exists = false;
|
193 |
} else var selector_exists = document.querySelectorAll (selector).length;
|
194 |
|
195 |
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block, insertion_type, selector, selector_exists ? '' : 'NOT FOUND');
|
212 |
if (ai_debug) console.log ('AI INSERT NEXT', 'range.createContextualFragment ERROR:', err.message);
|
213 |
}
|
214 |
|
215 |
+
// ***
|
216 |
+
// if (!fragment_ok) {
|
217 |
+
// jQuery (b64d (insertion_code)).insertBefore (jQuery (element.nextSibling));
|
218 |
+
// } else
|
219 |
|
220 |
element.parentNode.insertBefore (fragment, element.nextSibling);
|
221 |
|
407 |
if (typeof ai_block_div != 'undefined') {
|
408 |
var insertion_code = ai_block_div.getAttribute ('data-code');
|
409 |
|
410 |
+
// if (insertion_code != null && ai_check_block () && ai_check_and_insert_block ()) {
|
411 |
+
if (insertion_code != null && ai_check_block () /*&& ai_check_and_insert_block ()*/) {
|
412 |
ai_block_div.setAttribute ('data-code', insertion_code.substring (Math.floor (len / 19)));
|
413 |
ai_insert_code_by_class (id);
|
414 |
ai_block_div.remove();
|
428 |
}
|
429 |
|
430 |
if (typeof ai_process_lists == 'function') {
|
431 |
+
// ***
|
432 |
ai_process_lists (jQuery (".ai-list-data"));
|
433 |
}
|
434 |
|
435 |
if (typeof ai_process_ip_addresses == 'function') {
|
436 |
+
// ***
|
437 |
ai_process_ip_addresses (jQuery (".ai-ip-data"));
|
438 |
}
|
439 |
|
440 |
if (typeof ai_process_filter_hooks == 'function') {
|
441 |
+
// ***
|
442 |
+
// ai_process_filter_hooks (jQuery (".ai-filter-check"));
|
443 |
+
ai_process_filter_hooks ();
|
444 |
}
|
445 |
|
446 |
if (typeof ai_adb_process_blocks == 'function') {
|
includes/js/ai-insert.min.js
CHANGED
@@ -1,25 +1,24 @@
|
|
1 |
-
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var
|
2 |
-
ai_insert=function(a,
|
3 |
-
ai_front.insertion_before:"after"==a?
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
"
|
15 |
-
var
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
function(g,b,h){"undefined"===typeof h?(h=b,b=d):b=c.mergeArrays(d,b);e.call(this,g,b,h)};return w};f&&u(f.fn);u(HTMLElement.prototype);u(NodeList.prototype);u(HTMLCollection.prototype);u(HTMLDocument.prototype);u(Window.prototype);f={};k(m,f,"unbindAllArrive");k(w,f,"unbindAllLeave");return f}}(window,"undefined"===typeof jQuery?null:jQuery,void 0);
|
1 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var d=0;return function(){return d<a.length?{done:!1,value:a[d++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var d="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return d?d.call(a):$jscomp.arrayIterator(a)};
|
2 |
+
ai_insert=function(a,d,m){if(-1!=d.indexOf(":eq("))if(window.jQuery&&window.jQuery.fn)var k=jQuery(d);else{console.error("AI INSERT USING jQuery QUERIES:",d,"- jQuery not found");return}else k=document.querySelectorAll(d);for(var u=0,y=k.length;u<y;u++){var e=k[u];selector_string=e.hasAttribute("id")?"#"+e.getAttribute("id"):e.hasAttribute("class")?"."+e.getAttribute("class").replace(RegExp(" ","g"),"."):"";var w=document.createElement("div");w.innerHTML=m;var n=w.getElementsByClassName("ai-selector-counter")[0];
|
3 |
+
null!=n&&(n.innerText=u+1);n=w.getElementsByClassName("ai-debug-name ai-main")[0];if(null!=n){var r=a.toUpperCase();"undefined"!=typeof ai_front&&("before"==a?r=ai_front.insertion_before:"after"==a?r=ai_front.insertion_after:"prepend"==a?r=ai_front.insertion_prepend:"append"==a?r=ai_front.insertion_append:"replace-content"==a?r=ai_front.insertion_replace_content:"replace-element"==a&&(r=ai_front.insertion_replace_element));-1==selector_string.indexOf(".ai-viewports")&&(n.innerText=r+" "+d+" ("+e.tagName.toLowerCase()+
|
4 |
+
selector_string+")")}n=document.createRange();try{var v=n.createContextualFragment(w.innerHTML)}catch(t){}"before"==a?e.parentNode.insertBefore(v,e):"after"==a?e.parentNode.insertBefore(v,e.nextSibling):"prepend"==a?e.insertBefore(v,e.firstChild):"append"==a?e.insertBefore(v,null):"replace-content"==a?(e.innerHTML="",e.insertBefore(v,null)):"replace-element"==a&&(e.parentNode.insertBefore(v,e),e.parentNode.removeChild(e))}};
|
5 |
+
ai_insert_code=function(a){function d(n,r){return null==n?!1:n.classList?n.classList.contains(r):-1<(" "+n.className+" ").indexOf(" "+r+" ")}function m(n,r){null!=n&&(n.classList?n.classList.add(r):n.className+=" "+r)}function k(n,r){null!=n&&(n.classList?n.classList.remove(r):n.className=n.className.replace(new RegExp("(^|\\b)"+r.split(" ").join("|")+"(\\b|$)","gi")," "))}if("undefined"!=typeof a){var u=!1;if(d(a,"no-visibility-check")||a.offsetWidth||a.offsetHeight||a.getClientRects().length){u=
|
6 |
+
a.getAttribute("data-code");var y=a.getAttribute("data-insertion-position"),e=a.getAttribute("data-selector");if(null!=u)if(null!=y&&null!=e){if(-1!=e.indexOf(":eq(")?window.jQuery&&window.jQuery.fn&&jQuery(e).length:document.querySelectorAll(e).length)ai_insert(y,e,b64d(u)),k(a,"ai-viewports")}else{y=document.createRange();try{var w=y.createContextualFragment(b64d(u))}catch(n){}a.parentNode.insertBefore(w,a.nextSibling);k(a,"ai-viewports")}u=!0}else w=a.previousElementSibling,d(w,"ai-debug-bar")&&
|
7 |
+
d(w,"ai-debug-script")&&(k(w,"ai-debug-script"),m(w,"ai-debug-viewport-invisible")),k(a,"ai-viewports");return u}};
|
8 |
+
ai_insert_list_code=function(a){var d=document.getElementsByClassName(a)[0];if("undefined"!=typeof d){var m=ai_insert_code(d),k=d.closest("div.AI_FUNCT_GET_BLOCK_CLASS_NAME");if(k){m||k.removeAttribute("data-ai");var u=k.querySelectorAll(".ai-debug-block");k&&u.length&&(k.classList.remove("ai-list-block"),k.classList.remove("ai-list-block-ip"),k.classList.remove("ai-list-block-filter"),k.style.visibility="",k.classList.contains("ai-remove-position")&&(k.style.position=""))}d.classList.remove(a);m&&
|
9 |
+
ai_process_elements()}};ai_insert_viewport_code=function(a){var d=document.getElementsByClassName(a)[0];if("undefined"!=typeof d){var m=ai_insert_code(d);d.classList.remove(a);m&&(a=d.closest("div.AI_FUNCT_GET_BLOCK_CLASS_NAME"),null!=a&&(m=d.getAttribute("style"),null!=m&&a.setAttribute("style",a.getAttribute("style")+" "+m)));setTimeout(function(){d.removeAttribute("style")},2);ai_process_elements()}};
|
10 |
+
ai_insert_adsense_fallback_codes=function(a){a.style.display="none";var d=a.closest(".ai-fallback-adsense"),m=d.nextElementSibling;m.getAttribute("data-code")?ai_insert_code(m)&&ai_process_elements():m.style.display="block";d.classList.contains("ai-empty-code")&&(a=a.closest(".AI_FUNCT_GET_BLOCK_CLASS_NAME").getElementsByClassName("code-block-label"),0!=a.length&&(a[0].style.display="none"))};
|
11 |
+
ai_insert_code_by_class=function(a){var d=document.getElementsByClassName(a)[0];"undefined"!=typeof d&&(ai_insert_code(d),d.classList.remove(a))};ai_insert_client_code=function(a,d){var m=document.getElementsByClassName(a)[0];if("undefined"!=typeof m){var k=m.getAttribute("data-code");null!=k&&ai_check_block()&&(m.setAttribute("data-code",k.substring(Math.floor(d/19))),ai_insert_code_by_class(a),m.remove())}};ai_process_elements_active=!1;
|
12 |
+
function ai_process_elements(){ai_process_elements_active||setTimeout(function(){ai_process_elements_active=!1;"function"==typeof ai_process_rotations&&ai_process_rotations();"function"==typeof ai_process_lists&&ai_process_lists(jQuery(".ai-list-data"));"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses(jQuery(".ai-ip-data"));"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks();"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks();"function"==typeof ai_process_impressions&&
|
13 |
+
1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)},5);ai_process_elements_active=!0}
|
14 |
+
var targetNode=document.querySelector("body"),config={attributes:!0,childList:!1,subtree:!0},ai_adsense_callback=function(a,d){for(var m=$jscomp.makeIterator(a),k=m.next();!k.done;k=m.next())k=k.value,"attributes"===k.type&&"data-ad-status"==k.attributeName&&"unfilled"==k.target.dataset.adStatus&&k.target.closest(".ai-fallback-adsense")&&ai_insert_adsense_fallback_codes(k.target)},observer=new MutationObserver(ai_adsense_callback);observer.observe(targetNode,config);
|
15 |
+
var Arrive=function(a,d,m){function k(t,c,f){e.addMethod(c,f,t.unbindEvent);e.addMethod(c,f,t.unbindEventWithSelectorOrCallback);e.addMethod(c,f,t.unbindEventWithSelectorAndCallback)}function u(t){t.arrive=r.bindEvent;k(r,t,"unbindArrive");t.leave=v.bindEvent;k(v,t,"unbindLeave")}if(a.MutationObserver&&"undefined"!==typeof HTMLElement){var y=0,e=function(){var t=HTMLElement.prototype.matches||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector;
|
16 |
+
return{matchesSelector:function(c,f){return c instanceof HTMLElement&&t.call(c,f)},addMethod:function(c,f,g){var b=c[f];c[f]=function(){if(g.length==arguments.length)return g.apply(this,arguments);if("function"==typeof b)return b.apply(this,arguments)}},callCallbacks:function(c,f){f&&f.options.onceOnly&&1==f.firedElems.length&&(c=[c[0]]);for(var g=0,b;b=c[g];g++)b&&b.callback&&b.callback.call(b.elem,b.elem);f&&f.options.onceOnly&&1==f.firedElems.length&&f.me.unbindEventWithSelectorAndCallback.call(f.target,
|
17 |
+
f.selector,f.callback)},checkChildNodesRecursively:function(c,f,g,b){for(var h=0,l;l=c[h];h++)g(l,f,b)&&b.push({callback:f.callback,elem:l}),0<l.childNodes.length&&e.checkChildNodesRecursively(l.childNodes,f,g,b)},mergeArrays:function(c,f){var g={},b;for(b in c)c.hasOwnProperty(b)&&(g[b]=c[b]);for(b in f)f.hasOwnProperty(b)&&(g[b]=f[b]);return g},toElementsArray:function(c){"undefined"===typeof c||"number"===typeof c.length&&c!==a||(c=[c]);return c}}}(),w=function(){var t=function(){this._eventsBucket=
|
18 |
+
[];this._beforeRemoving=this._beforeAdding=null};t.prototype.addEvent=function(c,f,g,b){c={target:c,selector:f,options:g,callback:b,firedElems:[]};this._beforeAdding&&this._beforeAdding(c);this._eventsBucket.push(c);return c};t.prototype.removeEvent=function(c){for(var f=this._eventsBucket.length-1,g;g=this._eventsBucket[f];f--)c(g)&&(this._beforeRemoving&&this._beforeRemoving(g),(g=this._eventsBucket.splice(f,1))&&g.length&&(g[0].callback=null))};t.prototype.beforeAdding=function(c){this._beforeAdding=
|
19 |
+
c};t.prototype.beforeRemoving=function(c){this._beforeRemoving=c};return t}(),n=function(t,c){var f=new w,g=this,b={fireOnAttributesModification:!1};f.beforeAdding(function(h){var l=h.target;if(l===a.document||l===a)l=document.getElementsByTagName("html")[0];var p=new MutationObserver(function(x){c.call(this,x,h)});var q=t(h.options);p.observe(l,q);h.observer=p;h.me=g});f.beforeRemoving(function(h){h.observer.disconnect()});this.bindEvent=function(h,l,p){l=e.mergeArrays(b,l);for(var q=e.toElementsArray(this),
|
20 |
+
x=0;x<q.length;x++)f.addEvent(q[x],h,l,p)};this.unbindEvent=function(){var h=e.toElementsArray(this);f.removeEvent(function(l){for(var p=0;p<h.length;p++)if(this===m||l.target===h[p])return!0;return!1})};this.unbindEventWithSelectorOrCallback=function(h){var l=e.toElementsArray(this);f.removeEvent("function"===typeof h?function(p){for(var q=0;q<l.length;q++)if((this===m||p.target===l[q])&&p.callback===h)return!0;return!1}:function(p){for(var q=0;q<l.length;q++)if((this===m||p.target===l[q])&&p.selector===
|
21 |
+
h)return!0;return!1})};this.unbindEventWithSelectorAndCallback=function(h,l){var p=e.toElementsArray(this);f.removeEvent(function(q){for(var x=0;x<p.length;x++)if((this===m||q.target===p[x])&&q.selector===h&&q.callback===l)return!0;return!1})};return this},r=new function(){function t(g,b,h){return e.matchesSelector(g,b.selector)&&(g._id===m&&(g._id=y++),-1==b.firedElems.indexOf(g._id))?(b.firedElems.push(g._id),!0):!1}var c={fireOnAttributesModification:!1,onceOnly:!1,existing:!1};r=new n(function(g){var b=
|
22 |
+
{attributes:!1,childList:!0,subtree:!0};g.fireOnAttributesModification&&(b.attributes=!0);return b},function(g,b){g.forEach(function(h){var l=h.addedNodes,p=h.target,q=[];null!==l&&0<l.length?e.checkChildNodesRecursively(l,b,t,q):"attributes"===h.type&&t(p,b,q)&&q.push({callback:b.callback,elem:p});e.callCallbacks(q,b)})});var f=r.bindEvent;r.bindEvent=function(g,b,h){"undefined"===typeof h?(h=b,b=c):b=e.mergeArrays(c,b);var l=e.toElementsArray(this);if(b.existing){for(var p=[],q=0;q<l.length;q++)for(var x=
|
23 |
+
l[q].querySelectorAll(g),z=0;z<x.length;z++)p.push({callback:h,elem:x[z]});if(b.onceOnly&&p.length)return h.call(p[0].elem,p[0].elem);setTimeout(e.callCallbacks,1,p)}f.call(this,g,b,h)};return r},v=new function(){function t(g,b){return e.matchesSelector(g,b.selector)}var c={};v=new n(function(){return{childList:!0,subtree:!0}},function(g,b){g.forEach(function(h){h=h.removedNodes;var l=[];null!==h&&0<h.length&&e.checkChildNodesRecursively(h,b,t,l);e.callCallbacks(l,b)})});var f=v.bindEvent;v.bindEvent=
|
24 |
+
function(g,b,h){"undefined"===typeof h?(h=b,b=c):b=e.mergeArrays(c,b);f.call(this,g,b,h)};return v};d&&u(d.fn);u(HTMLElement.prototype);u(NodeList.prototype);u(HTMLCollection.prototype);u(HTMLDocument.prototype);u(Window.prototype);d={};k(r,d,"unbindAllArrive");k(v,d,"unbindAllLeave");return d}}(window,"undefined"===typeof jQuery?null:jQuery,void 0);
|
|
includes/js/ai-insert.q.js
ADDED
@@ -0,0 +1,921 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ai_insert = function (insertion, selector, insertion_code) {
|
2 |
+
if (selector.indexOf (':eq') != - 1) {
|
3 |
+
var elements = jQuery (selector);
|
4 |
+
} else var elements = document.querySelectorAll (selector);
|
5 |
+
|
6 |
+
// Array.prototype.forEach.call (elements, function (element, index) {
|
7 |
+
for (var index = 0, len = elements.length; index < len; index++) {
|
8 |
+
var element = elements [index];
|
9 |
+
|
10 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
11 |
+
// var ai_debug = false;
|
12 |
+
|
13 |
+
if (element.hasAttribute ('id')) {
|
14 |
+
selector_string = '#' + element.getAttribute ('id');
|
15 |
+
} else
|
16 |
+
if (element.hasAttribute ('class')) {
|
17 |
+
selector_string = '.' + element.getAttribute ('class').replace (new RegExp (' ', 'g'), '.');
|
18 |
+
} else
|
19 |
+
selector_string = '';
|
20 |
+
|
21 |
+
if (ai_debug) console.log ('');
|
22 |
+
if (ai_debug) console.log ('AI INSERT', insertion, selector, '(' + element.tagName.toLowerCase() + selector_string + ')');
|
23 |
+
|
24 |
+
var template = document.createElement ('div');
|
25 |
+
template.innerHTML = insertion_code;
|
26 |
+
|
27 |
+
var ai_selector_counter = template.getElementsByClassName ("ai-selector-counter")[0];
|
28 |
+
if (ai_selector_counter != null) {
|
29 |
+
ai_selector_counter.innerText = index + 1;
|
30 |
+
}
|
31 |
+
|
32 |
+
var ai_debug_name_ai_main = template.getElementsByClassName ("ai-debug-name ai-main")[0];
|
33 |
+
if (ai_debug_name_ai_main != null) {
|
34 |
+
var insertion_name = '';
|
35 |
+
|
36 |
+
if (typeof ai_front != 'undefined') {
|
37 |
+
if (insertion == 'before') {
|
38 |
+
insertion_name = ai_front.insertion_before;
|
39 |
+
} else
|
40 |
+
if (insertion == 'after') {
|
41 |
+
insertion_name = ai_front.insertion_after;
|
42 |
+
} else
|
43 |
+
if (insertion == 'prepend') {
|
44 |
+
insertion_name = ai_front.insertion_prepend;
|
45 |
+
} else
|
46 |
+
if (insertion == 'append') {
|
47 |
+
insertion_name = ai_front.insertion_append;
|
48 |
+
} else
|
49 |
+
if (insertion == 'replace-content') {
|
50 |
+
insertion_name = ai_front.insertion_replace_content;
|
51 |
+
} else
|
52 |
+
if (insertion == 'replace-element') {
|
53 |
+
insertion_name = ai_front.insertion_replace_element;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
if (selector_string.indexOf ('.ai-viewports') == - 1) {
|
58 |
+
ai_debug_name_ai_main.innerText = insertion_name + ' ' + selector + ' (' + element.tagName.toLowerCase() + selector_string + ')';
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
var range = document.createRange ();
|
63 |
+
|
64 |
+
var fragment_ok = true;
|
65 |
+
try {
|
66 |
+
var fragment = range.createContextualFragment (template.innerHTML);
|
67 |
+
}
|
68 |
+
catch (err) {
|
69 |
+
var fragment_ok = false;
|
70 |
+
if (ai_debug) console.log ('AI INSERT', 'range.createContextualFragment ERROR:', err.message);
|
71 |
+
}
|
72 |
+
|
73 |
+
if (insertion == 'before') {
|
74 |
+
if (!fragment_ok) {
|
75 |
+
jQuery (template.innerHTML).insertBefore (jQuery (element));
|
76 |
+
} else
|
77 |
+
|
78 |
+
element.parentNode.insertBefore (fragment, element);
|
79 |
+
} else
|
80 |
+
if (insertion == 'after') {
|
81 |
+
if (!fragment_ok) {
|
82 |
+
jQuery (template.innerHTML).insertBefore (jQuery (element.nextSibling));
|
83 |
+
} else
|
84 |
+
|
85 |
+
element.parentNode.insertBefore (fragment, element.nextSibling);
|
86 |
+
} else
|
87 |
+
if (insertion == 'prepend') {
|
88 |
+
if (!fragment_ok) {
|
89 |
+
jQuery (template.innerHTML).insertBefore (jQuery (element.firstChild));
|
90 |
+
} else
|
91 |
+
|
92 |
+
element.insertBefore (fragment, element.firstChild);
|
93 |
+
} else
|
94 |
+
if (insertion == 'append') {
|
95 |
+
if (!fragment_ok) {
|
96 |
+
jQuery (template.innerHTML).appendTo (jQuery (element));
|
97 |
+
} else
|
98 |
+
|
99 |
+
element.insertBefore (fragment, null);
|
100 |
+
} else
|
101 |
+
if (insertion == 'replace-content') {
|
102 |
+
element.innerHTML = '';
|
103 |
+
|
104 |
+
if (!fragment_ok) {
|
105 |
+
jQuery (template.innerHTML).appendTo (jQuery (element));
|
106 |
+
} else
|
107 |
+
|
108 |
+
element.insertBefore (fragment, null);
|
109 |
+
} else
|
110 |
+
if (insertion == 'replace-element') {
|
111 |
+
if (!fragment_ok) {
|
112 |
+
jQuery (template.innerHTML).insertBefore (jQuery (element));
|
113 |
+
} else
|
114 |
+
|
115 |
+
element.parentNode.insertBefore (fragment, element);
|
116 |
+
|
117 |
+
element.parentNode.removeChild (element);
|
118 |
+
}
|
119 |
+
// });
|
120 |
+
};
|
121 |
+
}
|
122 |
+
|
123 |
+
ai_insert_code = function (element) {
|
124 |
+
|
125 |
+
function hasClass (element, cls) {
|
126 |
+
if (element == null) return false;
|
127 |
+
|
128 |
+
if (element.classList) return element.classList.contains (cls); else
|
129 |
+
return (' ' + element.className + ' ').indexOf (' ' + cls + ' ') > - 1;
|
130 |
+
}
|
131 |
+
|
132 |
+
function addClass (element, cls) {
|
133 |
+
if (element == null) return;
|
134 |
+
|
135 |
+
if (element.classList) element.classList.add (cls); else
|
136 |
+
element.className += ' ' + cls;
|
137 |
+
}
|
138 |
+
|
139 |
+
function removeClass (element, cls) {
|
140 |
+
if (element == null) return;
|
141 |
+
|
142 |
+
if (element.classList) element.classList.remove (cls); else
|
143 |
+
element.className = element.className.replace (new RegExp ('(^|\\b)' + cls.split (' ').join ('|') + '(\\b|$)', 'gi'), ' ');
|
144 |
+
}
|
145 |
+
|
146 |
+
if (typeof element == 'undefined') return;
|
147 |
+
|
148 |
+
var insertion = false;
|
149 |
+
|
150 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
151 |
+
// var ai_debug = false;
|
152 |
+
|
153 |
+
if (ai_debug) console.log ('AI INSERT ELEMENT class:', element.getAttribute ('class'));
|
154 |
+
|
155 |
+
if (hasClass (element, 'no-visibility-check')) {
|
156 |
+
var visible = true;
|
157 |
+
} else var visible = !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
|
158 |
+
|
159 |
+
if (ai_debug) {
|
160 |
+
var block = element.getAttribute ('data-block');
|
161 |
+
}
|
162 |
+
|
163 |
+
if (visible) {
|
164 |
+
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block, 'offsetWidth:', element.offsetWidth, 'offsetHeight:', element.offsetHeight, 'getClientRects().length:', element.getClientRects().length);
|
165 |
+
|
166 |
+
var insertion_code = element.getAttribute ('data-code');
|
167 |
+
var insertion_type = element.getAttribute ('data-insertion-position');
|
168 |
+
var selector = element.getAttribute ('data-selector');
|
169 |
+
|
170 |
+
if (insertion_code != null) {
|
171 |
+
if (insertion_type != null && selector != null) {
|
172 |
+
// var selector_exists = document.querySelectorAll (selector).length;
|
173 |
+
|
174 |
+
if (selector.indexOf (':eq') != - 1) {
|
175 |
+
var selector_exists = jQuery (selector).length;
|
176 |
+
} else var selector_exists = document.querySelectorAll (selector).length;
|
177 |
+
|
178 |
+
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block, insertion_type, selector, selector_exists ? '' : 'NOT FOUND');
|
179 |
+
|
180 |
+
if (selector_exists) {
|
181 |
+
ai_insert (insertion_type, selector, b64d (insertion_code));
|
182 |
+
removeClass (element, 'ai-viewports');
|
183 |
+
}
|
184 |
+
} else {
|
185 |
+
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block);
|
186 |
+
|
187 |
+
var range = document.createRange ();
|
188 |
+
|
189 |
+
var fragment_ok = true;
|
190 |
+
try {
|
191 |
+
var fragment = range.createContextualFragment (b64d (insertion_code));
|
192 |
+
}
|
193 |
+
catch (err) {
|
194 |
+
var fragment_ok = false;
|
195 |
+
if (ai_debug) console.log ('AI INSERT NEXT', 'range.createContextualFragment ERROR:', err.message);
|
196 |
+
}
|
197 |
+
|
198 |
+
if (!fragment_ok) {
|
199 |
+
jQuery (b64d (insertion_code)).insertBefore (jQuery (element.nextSibling));
|
200 |
+
} else
|
201 |
+
|
202 |
+
element.parentNode.insertBefore (fragment, element.nextSibling);
|
203 |
+
|
204 |
+
removeClass (element, 'ai-viewports');
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
insertion = true;
|
209 |
+
|
210 |
+
// Should not be removed here as it is needed for tracking - removed there
|
211 |
+
// var ai_check_block_data = element.getElementsByClassName ('ai-check-block');
|
212 |
+
// if (typeof ai_check_block_data [0] != 'undefined') {
|
213 |
+
// // Remove span
|
214 |
+
// ai_check_block_data [0].parentNode.removeChild (ai_check_block_data [0]);
|
215 |
+
// }
|
216 |
+
} else {
|
217 |
+
if (ai_debug) console.log ('AI ELEMENT NOT VISIBLE: block', block, 'offsetWidth:', element.offsetWidth, 'offsetHeight:', element.offsetHeight, 'getClientRects().length:', element.getClientRects().length);
|
218 |
+
|
219 |
+
var debug_bar = element.previousElementSibling;
|
220 |
+
|
221 |
+
if (hasClass (debug_bar, 'ai-debug-bar') && hasClass (debug_bar, 'ai-debug-script')) {
|
222 |
+
removeClass (debug_bar, 'ai-debug-script');
|
223 |
+
addClass (debug_bar, 'ai-debug-viewport-invisible');
|
224 |
+
}
|
225 |
+
|
226 |
+
removeClass (element, 'ai-viewports');
|
227 |
+
}
|
228 |
+
return insertion;
|
229 |
+
}
|
230 |
+
|
231 |
+
ai_insert_list_code = function (id) {
|
232 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
233 |
+
|
234 |
+
if (typeof ai_block_div != 'undefined') {
|
235 |
+
var inserted = ai_insert_code (ai_block_div);
|
236 |
+
var wrapping_div = ai_block_div.closest ('div.AI_FUNCT_GET_BLOCK_CLASS_NAME');
|
237 |
+
if (wrapping_div) {
|
238 |
+
if (!inserted) {
|
239 |
+
wrapping_div.removeAttribute ('data-ai');
|
240 |
+
}
|
241 |
+
|
242 |
+
var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block');
|
243 |
+
if (wrapping_div && debug_block.length) {
|
244 |
+
wrapping_div.classList.remove ('ai-list-block');
|
245 |
+
wrapping_div.classList.remove ('ai-list-block-ip');
|
246 |
+
wrapping_div.classList.remove ('ai-list-block-filter');
|
247 |
+
wrapping_div.style.visibility = '';
|
248 |
+
if (wrapping_div.classList.contains ('ai-remove-position')) {
|
249 |
+
wrapping_div.style.position = '';
|
250 |
+
}
|
251 |
+
}
|
252 |
+
}
|
253 |
+
|
254 |
+
ai_block_div.classList.remove (id);
|
255 |
+
|
256 |
+
if (inserted) ai_process_elements ();
|
257 |
+
}
|
258 |
+
}
|
259 |
+
|
260 |
+
ai_insert_viewport_code = function (id) {
|
261 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
262 |
+
|
263 |
+
if (typeof ai_block_div != 'undefined') {
|
264 |
+
var inserted = ai_insert_code (ai_block_div);
|
265 |
+
|
266 |
+
ai_block_div.classList.remove (id);
|
267 |
+
|
268 |
+
if (inserted) {
|
269 |
+
var wrapping_div = ai_block_div.closest ('div.AI_FUNCT_GET_BLOCK_CLASS_NAME');
|
270 |
+
|
271 |
+
if (wrapping_div != null) {
|
272 |
+
var viewport_style = ai_block_div.getAttribute ('style');
|
273 |
+
|
274 |
+
if (viewport_style != null) {
|
275 |
+
wrapping_div.setAttribute ('style', wrapping_div.getAttribute ('style') + ' ' + viewport_style);
|
276 |
+
}
|
277 |
+
}
|
278 |
+
}
|
279 |
+
|
280 |
+
setTimeout (function () {
|
281 |
+
ai_block_div.removeAttribute ('style');
|
282 |
+
}, 2);
|
283 |
+
|
284 |
+
ai_process_elements ();
|
285 |
+
}
|
286 |
+
}
|
287 |
+
|
288 |
+
ai_insert_adsense_fallback_codes = function (adsense_unfilled_ins) {
|
289 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 3
|
290 |
+
// var ai_debug = false;
|
291 |
+
|
292 |
+
adsense_unfilled_ins.style.display = "none";
|
293 |
+
|
294 |
+
var fallback_wrapper = adsense_unfilled_ins.closest ('.ai-fallback-adsense');
|
295 |
+
var fallback_div = fallback_wrapper.nextElementSibling;
|
296 |
+
|
297 |
+
if (!!fallback_div.getAttribute ('data-code')) {
|
298 |
+
var inserted = ai_insert_code (fallback_div);
|
299 |
+
|
300 |
+
if (inserted) {
|
301 |
+
ai_process_elements ();
|
302 |
+
}
|
303 |
+
} else {
|
304 |
+
fallback_div.style.display = "block";
|
305 |
+
}
|
306 |
+
|
307 |
+
if (fallback_wrapper.classList.contains ('ai-empty-code')) {
|
308 |
+
var label_div = adsense_unfilled_ins.closest ('.AI_FUNCT_GET_BLOCK_CLASS_NAME').getElementsByClassName ('code-block-label');
|
309 |
+
if (label_div.length != 0) {
|
310 |
+
label_div [0].style.display = "none";
|
311 |
+
}
|
312 |
+
}
|
313 |
+
|
314 |
+
if (ai_debug) {
|
315 |
+
console.log ('AI FALLBACK ADSENSE UNFILLED:', adsense_unfilled_ins.closest ('.AI_FUNCT_GET_BLOCK_CLASS_NAME').classList.value, !!fallback_div.getAttribute ('data-code') ? 'INSERT' : 'SHOW');
|
316 |
+
}
|
317 |
+
}
|
318 |
+
|
319 |
+
//ai_insert_fallback_codes = function () {
|
320 |
+
// var ai_debug = typeof ai_debugging !== 'undefined'; // 3
|
321 |
+
//// var ai_debug = false;
|
322 |
+
|
323 |
+
// var ai_fallback_divs = document.getElementsByClassName ('ai-fallback-adsense');
|
324 |
+
|
325 |
+
// var fallback_check = ai_fallback_divs.length;
|
326 |
+
// if (ai_debug && fallback_check) {
|
327 |
+
// console.log ('');
|
328 |
+
// console.log ('AI FALLBACK CHECK ADSENSE:', ai_fallback_divs.length, 'block' + (ai_fallback_divs.length == 1 ? '' : 's')) ;
|
329 |
+
// }
|
330 |
+
|
331 |
+
// for (var adsense = 0; adsense < ai_fallback_divs.length; adsense ++) {
|
332 |
+
// var adsense_div = ai_fallback_divs [adsense];
|
333 |
+
// var adsense_unfilled_ins = adsense_div.querySelector ('ins.adsbygoogle[data-ad-status="filled"]');
|
334 |
+
|
335 |
+
// if (!!adsense_unfilled_ins) {
|
336 |
+
// adsense_unfilled_ins.style.display = "none";
|
337 |
+
|
338 |
+
// var fallback_div = adsense_div.nextElementSibling;
|
339 |
+
// var insert = !!fallback_div.getAttribute ('data-code');
|
340 |
+
|
341 |
+
// if (insert) {
|
342 |
+
// if (ai_debug) {
|
343 |
+
// var block = fallback_div.getAttribute ('data-block');
|
344 |
+
// console.log ('AI INSERT FALLBACK CODE FOR BLOCK', block);
|
345 |
+
// }
|
346 |
+
|
347 |
+
// var inserted = ai_insert_code (fallback_div);
|
348 |
+
|
349 |
+
// if (inserted) {
|
350 |
+
// ai_process_elements ();
|
351 |
+
// }
|
352 |
+
// } else {
|
353 |
+
// if (ai_debug) {
|
354 |
+
// var block = fallback_div.getAttribute ('data-block');
|
355 |
+
// console.log ('AI SHOW FALLBACK CODE FOR BLOCK', block);
|
356 |
+
// }
|
357 |
+
|
358 |
+
// fallback_div.style.display = "block";
|
359 |
+
// }
|
360 |
+
// }
|
361 |
+
// }
|
362 |
+
|
363 |
+
// if (ai_debug && fallback_check) {
|
364 |
+
// console.log ('');
|
365 |
+
// }
|
366 |
+
//}
|
367 |
+
|
368 |
+
ai_insert_code_by_class = function (id) {
|
369 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
370 |
+
|
371 |
+
if (typeof ai_block_div != 'undefined') {
|
372 |
+
ai_insert_code (ai_block_div);
|
373 |
+
|
374 |
+
ai_block_div.classList.remove (id);
|
375 |
+
}
|
376 |
+
}
|
377 |
+
|
378 |
+
ai_insert_client_code = function (id, len) {
|
379 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 4
|
380 |
+
// var ai_debug = false;
|
381 |
+
|
382 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
383 |
+
|
384 |
+
if (ai_debug) {
|
385 |
+
var block = ai_block_div.getAttribute ('data-block');
|
386 |
+
console.log ('AI INSERT PROTECTED BLOCK', block, '.' + id);
|
387 |
+
}
|
388 |
+
|
389 |
+
if (typeof ai_block_div != 'undefined') {
|
390 |
+
var insertion_code = ai_block_div.getAttribute ('data-code');
|
391 |
+
|
392 |
+
if (insertion_code != null && ai_check_block () && ai_check_and_insert_block ()) {
|
393 |
+
ai_block_div.setAttribute ('data-code', insertion_code.substring (Math.floor (len / 19)));
|
394 |
+
ai_insert_code_by_class (id);
|
395 |
+
ai_block_div.remove();
|
396 |
+
}
|
397 |
+
}
|
398 |
+
}
|
399 |
+
|
400 |
+
ai_process_elements_active = false;
|
401 |
+
|
402 |
+
function ai_process_elements () {
|
403 |
+
if (!ai_process_elements_active)
|
404 |
+
setTimeout (function() {
|
405 |
+
ai_process_elements_active = false;
|
406 |
+
|
407 |
+
if (typeof ai_process_rotations == 'function') {
|
408 |
+
ai_process_rotations ();
|
409 |
+
}
|
410 |
+
|
411 |
+
if (typeof ai_process_lists == 'function') {
|
412 |
+
ai_process_lists (jQuery (".ai-list-data"));
|
413 |
+
}
|
414 |
+
|
415 |
+
if (typeof ai_process_ip_addresses == 'function') {
|
416 |
+
ai_process_ip_addresses (jQuery (".ai-ip-data"));
|
417 |
+
}
|
418 |
+
|
419 |
+
if (typeof ai_process_filter_hooks == 'function') {
|
420 |
+
ai_process_filter_hooks (jQuery (".ai-filter-check"));
|
421 |
+
}
|
422 |
+
|
423 |
+
if (typeof ai_adb_process_blocks == 'function') {
|
424 |
+
ai_adb_process_blocks ();
|
425 |
+
}
|
426 |
+
|
427 |
+
if (typeof ai_process_impressions == 'function' && ai_tracking_finished == true) {
|
428 |
+
ai_process_impressions ();
|
429 |
+
}
|
430 |
+
if (typeof ai_install_click_trackers == 'function' && ai_tracking_finished == true) {
|
431 |
+
ai_install_click_trackers ();
|
432 |
+
}
|
433 |
+
|
434 |
+
if (typeof ai_install_close_buttons == 'function') {
|
435 |
+
ai_install_close_buttons (document);
|
436 |
+
}
|
437 |
+
}, 5);
|
438 |
+
ai_process_elements_active = true;
|
439 |
+
}
|
440 |
+
|
441 |
+
const targetNode = document.querySelector ('body');
|
442 |
+
const config = {attributes: true, childList: false, subtree: true};
|
443 |
+
const ai_adsense_callback = function (mutationsList, observer) {
|
444 |
+
// Use traditional 'for loops' for IE 11
|
445 |
+
for (const mutation of mutationsList) {
|
446 |
+
if (mutation.type === 'attributes' && mutation.attributeName == 'data-ad-status' && mutation.target.dataset.adStatus == 'unfilled' && !!mutation.target.closest ('.ai-fallback-adsense')) {
|
447 |
+
ai_insert_adsense_fallback_codes (mutation.target);
|
448 |
+
}
|
449 |
+
}
|
450 |
+
};
|
451 |
+
|
452 |
+
const observer = new MutationObserver (ai_adsense_callback);
|
453 |
+
observer.observe (targetNode, config);
|
454 |
+
|
455 |
+
// Later, we can stop observing
|
456 |
+
//observer.disconnect();
|
457 |
+
|
458 |
+
|
459 |
+
|
460 |
+
/*globals jQuery,Window,HTMLElement,HTMLDocument,HTMLCollection,NodeList,MutationObserver */
|
461 |
+
/*exported Arrive*/
|
462 |
+
/*jshint latedef:false */
|
463 |
+
|
464 |
+
/*
|
465 |
+
* arrive.js
|
466 |
+
* v2.4.1
|
467 |
+
* https://github.com/uzairfarooq/arrive
|
468 |
+
* MIT licensed
|
469 |
+
*
|
470 |
+
* Copyright (c) 2014-2017 Uzair Farooq
|
471 |
+
*/
|
472 |
+
var Arrive = (function(window, $, undefined) {
|
473 |
+
|
474 |
+
"use strict";
|
475 |
+
|
476 |
+
if(!window.MutationObserver || typeof HTMLElement === 'undefined'){
|
477 |
+
return; //for unsupported browsers
|
478 |
+
}
|
479 |
+
|
480 |
+
var arriveUniqueId = 0;
|
481 |
+
|
482 |
+
var utils = (function() {
|
483 |
+
var matches = HTMLElement.prototype.matches || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector
|
484 |
+
|| HTMLElement.prototype.msMatchesSelector;
|
485 |
+
|
486 |
+
return {
|
487 |
+
matchesSelector: function(elem, selector) {
|
488 |
+
return elem instanceof HTMLElement && matches.call(elem, selector);
|
489 |
+
},
|
490 |
+
// to enable function overloading - By John Resig (MIT Licensed)
|
491 |
+
addMethod: function (object, name, fn) {
|
492 |
+
var old = object[ name ];
|
493 |
+
object[ name ] = function(){
|
494 |
+
if ( fn.length == arguments.length ) {
|
495 |
+
return fn.apply( this, arguments );
|
496 |
+
}
|
497 |
+
else if ( typeof old == 'function' ) {
|
498 |
+
return old.apply( this, arguments );
|
499 |
+
}
|
500 |
+
};
|
501 |
+
},
|
502 |
+
callCallbacks: function(callbacksToBeCalled, registrationData) {
|
503 |
+
if (registrationData && registrationData.options.onceOnly && registrationData.firedElems.length == 1) {
|
504 |
+
// as onlyOnce param is true, make sure we fire the event for only one item
|
505 |
+
callbacksToBeCalled = [callbacksToBeCalled[0]];
|
506 |
+
}
|
507 |
+
|
508 |
+
for (var i = 0, cb; (cb = callbacksToBeCalled[i]); i++) {
|
509 |
+
if (cb && cb.callback) {
|
510 |
+
cb.callback.call(cb.elem, cb.elem);
|
511 |
+
}
|
512 |
+
}
|
513 |
+
|
514 |
+
if (registrationData && registrationData.options.onceOnly && registrationData.firedElems.length == 1) {
|
515 |
+
// unbind event after first callback as onceOnly is true.
|
516 |
+
registrationData.me.unbindEventWithSelectorAndCallback.call(
|
517 |
+
registrationData.target, registrationData.selector, registrationData.callback);
|
518 |
+
}
|
519 |
+
},
|
520 |
+
// traverse through all descendants of a node to check if event should be fired for any descendant
|
521 |
+
checkChildNodesRecursively: function(nodes, registrationData, matchFunc, callbacksToBeCalled) {
|
522 |
+
// check each new node if it matches the selector
|
523 |
+
for (var i=0, node; (node = nodes[i]); i++) {
|
524 |
+
if (matchFunc(node, registrationData, callbacksToBeCalled)) {
|
525 |
+
callbacksToBeCalled.push({ callback: registrationData.callback, elem: node });
|
526 |
+
}
|
527 |
+
|
528 |
+
if (node.childNodes.length > 0) {
|
529 |
+
utils.checkChildNodesRecursively(node.childNodes, registrationData, matchFunc, callbacksToBeCalled);
|
530 |
+
}
|
531 |
+
}
|
532 |
+
},
|
533 |
+
mergeArrays: function(firstArr, secondArr){
|
534 |
+
// Overwrites default options with user-defined options.
|
535 |
+
var options = {},
|
536 |
+
attrName;
|
537 |
+
for (attrName in firstArr) {
|
538 |
+
if (firstArr.hasOwnProperty(attrName)) {
|
539 |
+
options[attrName] = firstArr[attrName];
|
540 |
+
}
|
541 |
+
}
|
542 |
+
for (attrName in secondArr) {
|
543 |
+
if (secondArr.hasOwnProperty(attrName)) {
|
544 |
+
options[attrName] = secondArr[attrName];
|
545 |
+
}
|
546 |
+
}
|
547 |
+
return options;
|
548 |
+
},
|
549 |
+
toElementsArray: function (elements) {
|
550 |
+
// check if object is an array (or array like object)
|
551 |
+
// Note: window object has .length property but it's not array of elements so don't consider it an array
|
552 |
+
if (typeof elements !== "undefined" && (typeof elements.length !== "number" || elements === window)) {
|
553 |
+
elements = [elements];
|
554 |
+
}
|
555 |
+
return elements;
|
556 |
+
}
|
557 |
+
};
|
558 |
+
})();
|
559 |
+
|
560 |
+
|
561 |
+
// Class to maintain state of all registered events of a single type
|
562 |
+
var EventsBucket = (function() {
|
563 |
+
var EventsBucket = function() {
|
564 |
+
// holds all the events
|
565 |
+
|
566 |
+
this._eventsBucket = [];
|
567 |
+
// function to be called while adding an event, the function should do the event initialization/registration
|
568 |
+
this._beforeAdding = null;
|
569 |
+
// function to be called while removing an event, the function should do the event destruction
|
570 |
+
this._beforeRemoving = null;
|
571 |
+
};
|
572 |
+
|
573 |
+
EventsBucket.prototype.addEvent = function(target, selector, options, callback) {
|
574 |
+
var newEvent = {
|
575 |
+
target: target,
|
576 |
+
selector: selector,
|
577 |
+
options: options,
|
578 |
+
callback: callback,
|
579 |
+
firedElems: []
|
580 |
+
};
|
581 |
+
|
582 |
+
if (this._beforeAdding) {
|
583 |
+
this._beforeAdding(newEvent);
|
584 |
+
}
|
585 |
+
|
586 |
+
this._eventsBucket.push(newEvent);
|
587 |
+
return newEvent;
|
588 |
+
};
|
589 |
+
|
590 |
+
EventsBucket.prototype.removeEvent = function(compareFunction) {
|
591 |
+
for (var i=this._eventsBucket.length - 1, registeredEvent; (registeredEvent = this._eventsBucket[i]); i--) {
|
592 |
+
if (compareFunction(registeredEvent)) {
|
593 |
+
if (this._beforeRemoving) {
|
594 |
+
this._beforeRemoving(registeredEvent);
|
595 |
+
}
|
596 |
+
|
597 |
+
// mark callback as null so that even if an event mutation was already triggered it does not call callback
|
598 |
+
var removedEvents = this._eventsBucket.splice(i, 1);
|
599 |
+
if (removedEvents && removedEvents.length) {
|
600 |
+
removedEvents[0].callback = null;
|
601 |
+
}
|
602 |
+
}
|
603 |
+
}
|
604 |
+
};
|
605 |
+
|
606 |
+
EventsBucket.prototype.beforeAdding = function(beforeAdding) {
|
607 |
+
this._beforeAdding = beforeAdding;
|
608 |
+
};
|
609 |
+
|
610 |
+
EventsBucket.prototype.beforeRemoving = function(beforeRemoving) {
|
611 |
+
this._beforeRemoving = beforeRemoving;
|
612 |
+
};
|
613 |
+
|
614 |
+
return EventsBucket;
|
615 |
+
})();
|
616 |
+
|
617 |
+
|
618 |
+
/**
|
619 |
+
* @constructor
|
620 |
+
* General class for binding/unbinding arrive and leave events
|
621 |
+
*/
|
622 |
+
var MutationEvents = function(getObserverConfig, onMutation) {
|
623 |
+
var eventsBucket = new EventsBucket(),
|
624 |
+
me = this;
|
625 |
+
|
626 |
+
var defaultOptions = {
|
627 |
+
fireOnAttributesModification: false
|
628 |
+
};
|
629 |
+
|
630 |
+
// actual event registration before adding it to bucket
|
631 |
+
eventsBucket.beforeAdding(function(registrationData) {
|
632 |
+
var
|
633 |
+
target = registrationData.target,
|
634 |
+
observer;
|
635 |
+
|
636 |
+
// mutation observer does not work on window or document
|
637 |
+
if (target === window.document || target === window) {
|
638 |
+
target = document.getElementsByTagName("html")[0];
|
639 |
+
}
|
640 |
+
|
641 |
+
// Create an observer instance
|
642 |
+
observer = new MutationObserver(function(e) {
|
643 |
+
onMutation.call(this, e, registrationData);
|
644 |
+
});
|
645 |
+
|
646 |
+
var config = getObserverConfig(registrationData.options);
|
647 |
+
|
648 |
+
observer.observe(target, config);
|
649 |
+
|
650 |
+
registrationData.observer = observer;
|
651 |
+
registrationData.me = me;
|
652 |
+
});
|
653 |
+
|
654 |
+
// cleanup/unregister before removing an event
|
655 |
+
eventsBucket.beforeRemoving(function (eventData) {
|
656 |
+
eventData.observer.disconnect();
|
657 |
+
});
|
658 |
+
|
659 |
+
this.bindEvent = function(selector, options, callback) {
|
660 |
+
options = utils.mergeArrays(defaultOptions, options);
|
661 |
+
|
662 |
+
var elements = utils.toElementsArray(this);
|
663 |
+
|
664 |
+
for (var i = 0; i < elements.length; i++) {
|
665 |
+
eventsBucket.addEvent(elements[i], selector, options, callback);
|
666 |
+
}
|
667 |
+
};
|
668 |
+
|
669 |
+
this.unbindEvent = function() {
|
670 |
+
var elements = utils.toElementsArray(this);
|
671 |
+
eventsBucket.removeEvent(function(eventObj) {
|
672 |
+
for (var i = 0; i < elements.length; i++) {
|
673 |
+
if (this === undefined || eventObj.target === elements[i]) {
|
674 |
+
return true;
|
675 |
+
}
|
676 |
+
}
|
677 |
+
return false;
|
678 |
+
});
|
679 |
+
};
|
680 |
+
|
681 |
+
this.unbindEventWithSelectorOrCallback = function(selector) {
|
682 |
+
var elements = utils.toElementsArray(this),
|
683 |
+
callback = selector,
|
684 |
+
compareFunction;
|
685 |
+
|
686 |
+
if (typeof selector === "function") {
|
687 |
+
compareFunction = function(eventObj) {
|
688 |
+
for (var i = 0; i < elements.length; i++) {
|
689 |
+
if ((this === undefined || eventObj.target === elements[i]) && eventObj.callback === callback) {
|
690 |
+
return true;
|
691 |
+
}
|
692 |
+
}
|
693 |
+
return false;
|
694 |
+
};
|
695 |
+
}
|
696 |
+
else {
|
697 |
+
compareFunction = function(eventObj) {
|
698 |
+
for (var i = 0; i < elements.length; i++) {
|
699 |
+
if ((this === undefined || eventObj.target === elements[i]) && eventObj.selector === selector) {
|
700 |
+
return true;
|
701 |
+
}
|
702 |
+
}
|
703 |
+
return false;
|
704 |
+
};
|
705 |
+
}
|
706 |
+
eventsBucket.removeEvent(compareFunction);
|
707 |
+
};
|
708 |
+
|
709 |
+
this.unbindEventWithSelectorAndCallback = function(selector, callback) {
|
710 |
+
var elements = utils.toElementsArray(this);
|
711 |
+
eventsBucket.removeEvent(function(eventObj) {
|
712 |
+
for (var i = 0; i < elements.length; i++) {
|
713 |
+
if ((this === undefined || eventObj.target === elements[i]) && eventObj.selector === selector && eventObj.callback === callback) {
|
714 |
+
return true;
|
715 |
+
}
|
716 |
+
}
|
717 |
+
return false;
|
718 |
+
});
|
719 |
+
};
|
720 |
+
|
721 |
+
return this;
|
722 |
+
};
|
723 |
+
|
724 |
+
|
725 |
+
/**
|
726 |
+
* @constructor
|
727 |
+
* Processes 'arrive' events
|
728 |
+
*/
|
729 |
+
var ArriveEvents = function() {
|
730 |
+
// Default options for 'arrive' event
|
731 |
+
var arriveDefaultOptions = {
|
732 |
+
fireOnAttributesModification: false,
|
733 |
+
onceOnly: false,
|
734 |
+
existing: false
|
735 |
+
};
|
736 |
+
|
737 |
+
function getArriveObserverConfig(options) {
|
738 |
+
var config = {
|
739 |
+
attributes: false,
|
740 |
+
childList: true,
|
741 |
+
subtree: true
|
742 |
+
};
|
743 |
+
|
744 |
+
if (options.fireOnAttributesModification) {
|
745 |
+
config.attributes = true;
|
746 |
+
}
|
747 |
+
|
748 |
+
return config;
|
749 |
+
}
|
750 |
+
|
751 |
+
function onArriveMutation(mutations, registrationData) {
|
752 |
+
mutations.forEach(function( mutation ) {
|
753 |
+
var newNodes = mutation.addedNodes,
|
754 |
+
targetNode = mutation.target,
|
755 |
+
callbacksToBeCalled = [],
|
756 |
+
node;
|
757 |
+
|
758 |
+
// If new nodes are added
|
759 |
+
if( newNodes !== null && newNodes.length > 0 ) {
|
760 |
+
utils.checkChildNodesRecursively(newNodes, registrationData, nodeMatchFunc, callbacksToBeCalled);
|
761 |
+
}
|
762 |
+
else if (mutation.type === "attributes") {
|
763 |
+
if (nodeMatchFunc(targetNode, registrationData, callbacksToBeCalled)) {
|
764 |
+
callbacksToBeCalled.push({ callback: registrationData.callback, elem: targetNode });
|
765 |
+
}
|
766 |
+
}
|
767 |
+
|
768 |
+
utils.callCallbacks(callbacksToBeCalled, registrationData);
|
769 |
+
});
|
770 |
+
}
|
771 |
+
|
772 |
+
function nodeMatchFunc(node, registrationData, callbacksToBeCalled) {
|
773 |
+
// check a single node to see if it matches the selector
|
774 |
+
if (utils.matchesSelector(node, registrationData.selector)) {
|
775 |
+
if(node._id === undefined) {
|
776 |
+
node._id = arriveUniqueId++;
|
777 |
+
}
|
778 |
+
// make sure the arrive event is not already fired for the element
|
779 |
+
if (registrationData.firedElems.indexOf(node._id) == -1) {
|
780 |
+
registrationData.firedElems.push(node._id);
|
781 |
+
|
782 |
+
return true;
|
783 |
+
}
|
784 |
+
}
|
785 |
+
|
786 |
+
return false;
|
787 |
+
}
|
788 |
+
|
789 |
+
arriveEvents = new MutationEvents(getArriveObserverConfig, onArriveMutation);
|
790 |
+
|
791 |
+
var mutationBindEvent = arriveEvents.bindEvent;
|
792 |
+
|
793 |
+
// override bindEvent function
|
794 |
+
arriveEvents.bindEvent = function(selector, options, callback) {
|
795 |
+
|
796 |
+
if (typeof callback === "undefined") {
|
797 |
+
callback = options;
|
798 |
+
options = arriveDefaultOptions;
|
799 |
+
} else {
|
800 |
+
options = utils.mergeArrays(arriveDefaultOptions, options);
|
801 |
+
}
|
802 |
+
|
803 |
+
var elements = utils.toElementsArray(this);
|
804 |
+
|
805 |
+
if (options.existing) {
|
806 |
+
var existing = [];
|
807 |
+
|
808 |
+
for (var i = 0; i < elements.length; i++) {
|
809 |
+
var nodes = elements[i].querySelectorAll(selector);
|
810 |
+
for (var j = 0; j < nodes.length; j++) {
|
811 |
+
existing.push({ callback: callback, elem: nodes[j] });
|
812 |
+
}
|
813 |
+
}
|
814 |
+
|
815 |
+
// no need to bind event if the callback has to be fired only once and we have already found the element
|
816 |
+
if (options.onceOnly && existing.length) {
|
817 |
+
return callback.call(existing[0].elem, existing[0].elem);
|
818 |
+
}
|
819 |
+
|
820 |
+
setTimeout(utils.callCallbacks, 1, existing);
|
821 |
+
}
|
822 |
+
|
823 |
+
mutationBindEvent.call(this, selector, options, callback);
|
824 |
+
};
|
825 |
+
|
826 |
+
return arriveEvents;
|
827 |
+
};
|
828 |
+
|
829 |
+
|
830 |
+
/**
|
831 |
+
* @constructor
|
832 |
+
* Processes 'leave' events
|
833 |
+
*/
|
834 |
+
var LeaveEvents = function() {
|
835 |
+
// Default options for 'leave' event
|
836 |
+
var leaveDefaultOptions = {};
|
837 |
+
|
838 |
+
function getLeaveObserverConfig() {
|
839 |
+
var config = {
|
840 |
+
childList: true,
|
841 |
+
subtree: true
|
842 |
+
};
|
843 |
+
|
844 |
+
return config;
|
845 |
+
}
|
846 |
+
|
847 |
+
function onLeaveMutation(mutations, registrationData) {
|
848 |
+
mutations.forEach(function( mutation ) {
|
849 |
+
var removedNodes = mutation.removedNodes,
|
850 |
+
callbacksToBeCalled = [];
|
851 |
+
|
852 |
+
if( removedNodes !== null && removedNodes.length > 0 ) {
|
853 |
+
utils.checkChildNodesRecursively(removedNodes, registrationData, nodeMatchFunc, callbacksToBeCalled);
|
854 |
+
}
|
855 |
+
|
856 |
+
utils.callCallbacks(callbacksToBeCalled, registrationData);
|
857 |
+
});
|
858 |
+
}
|
859 |
+
|
860 |
+
function nodeMatchFunc(node, registrationData) {
|
861 |
+
return utils.matchesSelector(node, registrationData.selector);
|
862 |
+
}
|
863 |
+
|
864 |
+
leaveEvents = new MutationEvents(getLeaveObserverConfig, onLeaveMutation);
|
865 |
+
|
866 |
+
var mutationBindEvent = leaveEvents.bindEvent;
|
867 |
+
|
868 |
+
// override bindEvent function
|
869 |
+
leaveEvents.bindEvent = function(selector, options, callback) {
|
870 |
+
|
871 |
+
if (typeof callback === "undefined") {
|
872 |
+
callback = options;
|
873 |
+
options = leaveDefaultOptions;
|
874 |
+
} else {
|
875 |
+
options = utils.mergeArrays(leaveDefaultOptions, options);
|
876 |
+
}
|
877 |
+
|
878 |
+
mutationBindEvent.call(this, selector, options, callback);
|
879 |
+
};
|
880 |
+
|
881 |
+
return leaveEvents;
|
882 |
+
};
|
883 |
+
|
884 |
+
|
885 |
+
var arriveEvents = new ArriveEvents(),
|
886 |
+
leaveEvents = new LeaveEvents();
|
887 |
+
|
888 |
+
function exposeUnbindApi(eventObj, exposeTo, funcName) {
|
889 |
+
// expose unbind function with function overriding
|
890 |
+
utils.addMethod(exposeTo, funcName, eventObj.unbindEvent);
|
891 |
+
utils.addMethod(exposeTo, funcName, eventObj.unbindEventWithSelectorOrCallback);
|
892 |
+
utils.addMethod(exposeTo, funcName, eventObj.unbindEventWithSelectorAndCallback);
|
893 |
+
}
|
894 |
+
|
895 |
+
/*** expose APIs ***/
|
896 |
+
function exposeApi(exposeTo) {
|
897 |
+
exposeTo.arrive = arriveEvents.bindEvent;
|
898 |
+
exposeUnbindApi(arriveEvents, exposeTo, "unbindArrive");
|
899 |
+
|
900 |
+
exposeTo.leave = leaveEvents.bindEvent;
|
901 |
+
exposeUnbindApi(leaveEvents, exposeTo, "unbindLeave");
|
902 |
+
}
|
903 |
+
|
904 |
+
if ($) {
|
905 |
+
exposeApi($.fn);
|
906 |
+
}
|
907 |
+
exposeApi(HTMLElement.prototype);
|
908 |
+
exposeApi(NodeList.prototype);
|
909 |
+
exposeApi(HTMLCollection.prototype);
|
910 |
+
exposeApi(HTMLDocument.prototype);
|
911 |
+
exposeApi(Window.prototype);
|
912 |
+
|
913 |
+
var Arrive = {};
|
914 |
+
// expose functions to unbind all arrive/leave events
|
915 |
+
exposeUnbindApi(arriveEvents, Arrive, "unbindAllArrive");
|
916 |
+
exposeUnbindApi(leaveEvents, Arrive, "unbindAllLeave");
|
917 |
+
|
918 |
+
return Arrive;
|
919 |
+
|
920 |
+
})(window, typeof jQuery === 'undefined' ? null : jQuery, undefined);
|
921 |
+
|
includes/js/ai-insert.q.min.js
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var f=0;return function(){return f<a.length?{done:!1,value:a[f++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var f="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return f?f.call(a):$jscomp.arrayIterator(a)};
|
2 |
+
ai_insert=function(a,f,n){for(var k=-1!=f.indexOf(":eq")?jQuery(f):document.querySelectorAll(f),u=0,y=k.length;u<y;u++){var c=k[u];selector_string=c.hasAttribute("id")?"#"+c.getAttribute("id"):c.hasAttribute("class")?"."+c.getAttribute("class").replace(RegExp(" ","g"),"."):"";var v=document.createElement("div");v.innerHTML=n;var p=v.getElementsByClassName("ai-selector-counter")[0];null!=p&&(p.innerText=u+1);p=v.getElementsByClassName("ai-debug-name ai-main")[0];if(null!=p){var m="";"undefined"!=typeof ai_front&&
|
3 |
+
("before"==a?m=ai_front.insertion_before:"after"==a?m=ai_front.insertion_after:"prepend"==a?m=ai_front.insertion_prepend:"append"==a?m=ai_front.insertion_append:"replace-content"==a?m=ai_front.insertion_replace_content:"replace-element"==a&&(m=ai_front.insertion_replace_element));-1==selector_string.indexOf(".ai-viewports")&&(p.innerText=m+" "+f+" ("+c.tagName.toLowerCase()+selector_string+")")}p=document.createRange();m=!0;try{var w=p.createContextualFragment(v.innerHTML)}catch(t){m=!1}"before"==
|
4 |
+
a?m?c.parentNode.insertBefore(w,c):jQuery(v.innerHTML).insertBefore(jQuery(c)):"after"==a?m?c.parentNode.insertBefore(w,c.nextSibling):jQuery(v.innerHTML).insertBefore(jQuery(c.nextSibling)):"prepend"==a?m?c.insertBefore(w,c.firstChild):jQuery(v.innerHTML).insertBefore(jQuery(c.firstChild)):"append"==a?m?c.insertBefore(w,null):jQuery(v.innerHTML).appendTo(jQuery(c)):"replace-content"==a?(c.innerHTML="",m?c.insertBefore(w,null):jQuery(v.innerHTML).appendTo(jQuery(c))):"replace-element"==a&&(m?c.parentNode.insertBefore(w,
|
5 |
+
c):jQuery(v.innerHTML).insertBefore(jQuery(c)),c.parentNode.removeChild(c))}};
|
6 |
+
ai_insert_code=function(a){function f(p,m){return null==p?!1:p.classList?p.classList.contains(m):-1<(" "+p.className+" ").indexOf(" "+m+" ")}function n(p,m){null!=p&&(p.classList?p.classList.add(m):p.className+=" "+m)}function k(p,m){null!=p&&(p.classList?p.classList.remove(m):p.className=p.className.replace(new RegExp("(^|\\b)"+m.split(" ").join("|")+"(\\b|$)","gi")," "))}if("undefined"!=typeof a){var u=!1;if(f(a,"no-visibility-check")||a.offsetWidth||a.offsetHeight||a.getClientRects().length){u=
|
7 |
+
a.getAttribute("data-code");var y=a.getAttribute("data-insertion-position"),c=a.getAttribute("data-selector");if(null!=u)if(null!=y&&null!=c){if(-1!=c.indexOf(":eq")?jQuery(c).length:document.querySelectorAll(c).length)ai_insert(y,c,b64d(u)),k(a,"ai-viewports")}else{y=document.createRange();c=!0;try{var v=y.createContextualFragment(b64d(u))}catch(p){c=!1}c?a.parentNode.insertBefore(v,a.nextSibling):jQuery(b64d(u)).insertBefore(jQuery(a.nextSibling));k(a,"ai-viewports")}u=!0}else v=a.previousElementSibling,
|
8 |
+
f(v,"ai-debug-bar")&&f(v,"ai-debug-script")&&(k(v,"ai-debug-script"),n(v,"ai-debug-viewport-invisible")),k(a,"ai-viewports");return u}};
|
9 |
+
ai_insert_list_code=function(a){var f=document.getElementsByClassName(a)[0];if("undefined"!=typeof f){var n=ai_insert_code(f),k=f.closest("div.AI_FUNCT_GET_BLOCK_CLASS_NAME");if(k){n||k.removeAttribute("data-ai");var u=k.querySelectorAll(".ai-debug-block");k&&u.length&&(k.classList.remove("ai-list-block"),k.classList.remove("ai-list-block-ip"),k.classList.remove("ai-list-block-filter"),k.style.visibility="",k.classList.contains("ai-remove-position")&&(k.style.position=""))}f.classList.remove(a);n&&
|
10 |
+
ai_process_elements()}};ai_insert_viewport_code=function(a){var f=document.getElementsByClassName(a)[0];if("undefined"!=typeof f){var n=ai_insert_code(f);f.classList.remove(a);n&&(a=f.closest("div.AI_FUNCT_GET_BLOCK_CLASS_NAME"),null!=a&&(n=f.getAttribute("style"),null!=n&&a.setAttribute("style",a.getAttribute("style")+" "+n)));setTimeout(function(){f.removeAttribute("style")},2);ai_process_elements()}};
|
11 |
+
ai_insert_adsense_fallback_codes=function(a){a.style.display="none";var f=a.closest(".ai-fallback-adsense"),n=f.nextElementSibling;n.getAttribute("data-code")?ai_insert_code(n)&&ai_process_elements():n.style.display="block";f.classList.contains("ai-empty-code")&&(a=a.closest(".AI_FUNCT_GET_BLOCK_CLASS_NAME").getElementsByClassName("code-block-label"),0!=a.length&&(a[0].style.display="none"))};
|
12 |
+
ai_insert_code_by_class=function(a){var f=document.getElementsByClassName(a)[0];"undefined"!=typeof f&&(ai_insert_code(f),f.classList.remove(a))};ai_insert_client_code=function(a,f){var n=document.getElementsByClassName(a)[0];if("undefined"!=typeof n){var k=n.getAttribute("data-code");null!=k&&ai_check_block()&&ai_check_and_insert_block()&&(n.setAttribute("data-code",k.substring(Math.floor(f/19))),ai_insert_code_by_class(a),n.remove())}};ai_process_elements_active=!1;
|
13 |
+
function ai_process_elements(){ai_process_elements_active||setTimeout(function(){ai_process_elements_active=!1;"function"==typeof ai_process_rotations&&ai_process_rotations();"function"==typeof ai_process_lists&&ai_process_lists(jQuery(".ai-list-data"));"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses(jQuery(".ai-ip-data"));"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks(jQuery(".ai-filter-check"));"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks();
|
14 |
+
"function"==typeof ai_process_impressions&&1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)},5);ai_process_elements_active=!0}
|
15 |
+
var targetNode=document.querySelector("body"),config={attributes:!0,childList:!1,subtree:!0},ai_adsense_callback=function(a,f){for(var n=$jscomp.makeIterator(a),k=n.next();!k.done;k=n.next())k=k.value,"attributes"===k.type&&"data-ad-status"==k.attributeName&&"unfilled"==k.target.dataset.adStatus&&k.target.closest(".ai-fallback-adsense")&&ai_insert_adsense_fallback_codes(k.target)},observer=new MutationObserver(ai_adsense_callback);observer.observe(targetNode,config);
|
16 |
+
var Arrive=function(a,f,n){function k(t,d,e){c.addMethod(d,e,t.unbindEvent);c.addMethod(d,e,t.unbindEventWithSelectorOrCallback);c.addMethod(d,e,t.unbindEventWithSelectorAndCallback)}function u(t){t.arrive=m.bindEvent;k(m,t,"unbindArrive");t.leave=w.bindEvent;k(w,t,"unbindLeave")}if(a.MutationObserver&&"undefined"!==typeof HTMLElement){var y=0,c=function(){var t=HTMLElement.prototype.matches||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector;
|
17 |
+
return{matchesSelector:function(d,e){return d instanceof HTMLElement&&t.call(d,e)},addMethod:function(d,e,g){var b=d[e];d[e]=function(){if(g.length==arguments.length)return g.apply(this,arguments);if("function"==typeof b)return b.apply(this,arguments)}},callCallbacks:function(d,e){e&&e.options.onceOnly&&1==e.firedElems.length&&(d=[d[0]]);for(var g=0,b;b=d[g];g++)b&&b.callback&&b.callback.call(b.elem,b.elem);e&&e.options.onceOnly&&1==e.firedElems.length&&e.me.unbindEventWithSelectorAndCallback.call(e.target,
|
18 |
+
e.selector,e.callback)},checkChildNodesRecursively:function(d,e,g,b){for(var h=0,l;l=d[h];h++)g(l,e,b)&&b.push({callback:e.callback,elem:l}),0<l.childNodes.length&&c.checkChildNodesRecursively(l.childNodes,e,g,b)},mergeArrays:function(d,e){var g={},b;for(b in d)d.hasOwnProperty(b)&&(g[b]=d[b]);for(b in e)e.hasOwnProperty(b)&&(g[b]=e[b]);return g},toElementsArray:function(d){"undefined"===typeof d||"number"===typeof d.length&&d!==a||(d=[d]);return d}}}(),v=function(){var t=function(){this._eventsBucket=
|
19 |
+
[];this._beforeRemoving=this._beforeAdding=null};t.prototype.addEvent=function(d,e,g,b){d={target:d,selector:e,options:g,callback:b,firedElems:[]};this._beforeAdding&&this._beforeAdding(d);this._eventsBucket.push(d);return d};t.prototype.removeEvent=function(d){for(var e=this._eventsBucket.length-1,g;g=this._eventsBucket[e];e--)d(g)&&(this._beforeRemoving&&this._beforeRemoving(g),(g=this._eventsBucket.splice(e,1))&&g.length&&(g[0].callback=null))};t.prototype.beforeAdding=function(d){this._beforeAdding=
|
20 |
+
d};t.prototype.beforeRemoving=function(d){this._beforeRemoving=d};return t}(),p=function(t,d){var e=new v,g=this,b={fireOnAttributesModification:!1};e.beforeAdding(function(h){var l=h.target;if(l===a.document||l===a)l=document.getElementsByTagName("html")[0];var q=new MutationObserver(function(x){d.call(this,x,h)});var r=t(h.options);q.observe(l,r);h.observer=q;h.me=g});e.beforeRemoving(function(h){h.observer.disconnect()});this.bindEvent=function(h,l,q){l=c.mergeArrays(b,l);for(var r=c.toElementsArray(this),
|
21 |
+
x=0;x<r.length;x++)e.addEvent(r[x],h,l,q)};this.unbindEvent=function(){var h=c.toElementsArray(this);e.removeEvent(function(l){for(var q=0;q<h.length;q++)if(this===n||l.target===h[q])return!0;return!1})};this.unbindEventWithSelectorOrCallback=function(h){var l=c.toElementsArray(this);e.removeEvent("function"===typeof h?function(q){for(var r=0;r<l.length;r++)if((this===n||q.target===l[r])&&q.callback===h)return!0;return!1}:function(q){for(var r=0;r<l.length;r++)if((this===n||q.target===l[r])&&q.selector===
|
22 |
+
h)return!0;return!1})};this.unbindEventWithSelectorAndCallback=function(h,l){var q=c.toElementsArray(this);e.removeEvent(function(r){for(var x=0;x<q.length;x++)if((this===n||r.target===q[x])&&r.selector===h&&r.callback===l)return!0;return!1})};return this},m=new function(){function t(g,b,h){return c.matchesSelector(g,b.selector)&&(g._id===n&&(g._id=y++),-1==b.firedElems.indexOf(g._id))?(b.firedElems.push(g._id),!0):!1}var d={fireOnAttributesModification:!1,onceOnly:!1,existing:!1};m=new p(function(g){var b=
|
23 |
+
{attributes:!1,childList:!0,subtree:!0};g.fireOnAttributesModification&&(b.attributes=!0);return b},function(g,b){g.forEach(function(h){var l=h.addedNodes,q=h.target,r=[];null!==l&&0<l.length?c.checkChildNodesRecursively(l,b,t,r):"attributes"===h.type&&t(q,b,r)&&r.push({callback:b.callback,elem:q});c.callCallbacks(r,b)})});var e=m.bindEvent;m.bindEvent=function(g,b,h){"undefined"===typeof h?(h=b,b=d):b=c.mergeArrays(d,b);var l=c.toElementsArray(this);if(b.existing){for(var q=[],r=0;r<l.length;r++)for(var x=
|
24 |
+
l[r].querySelectorAll(g),z=0;z<x.length;z++)q.push({callback:h,elem:x[z]});if(b.onceOnly&&q.length)return h.call(q[0].elem,q[0].elem);setTimeout(c.callCallbacks,1,q)}e.call(this,g,b,h)};return m},w=new function(){function t(g,b){return c.matchesSelector(g,b.selector)}var d={};w=new p(function(){return{childList:!0,subtree:!0}},function(g,b){g.forEach(function(h){h=h.removedNodes;var l=[];null!==h&&0<h.length&&c.checkChildNodesRecursively(h,b,t,l);c.callCallbacks(l,b)})});var e=w.bindEvent;w.bindEvent=
|
25 |
+
function(g,b,h){"undefined"===typeof h?(h=b,b=d):b=c.mergeArrays(d,b);e.call(this,g,b,h)};return w};f&&u(f.fn);u(HTMLElement.prototype);u(NodeList.prototype);u(HTMLCollection.prototype);u(HTMLDocument.prototype);u(Window.prototype);f={};k(m,f,"unbindAllArrive");k(w,f,"unbindAllLeave");return f}}(window,"undefined"===typeof jQuery?null:jQuery,void 0);
|
includes/js/ai-lists.js
CHANGED
@@ -495,7 +495,7 @@ jQuery (function ($) {
|
|
495 |
return false; // End && check
|
496 |
}
|
497 |
|
498 |
-
if (ai_debug) console.log ("AI LISTS CLIENT PASSED",
|
499 |
|
500 |
}); // &&
|
501 |
|
495 |
return false; // End && check
|
496 |
}
|
497 |
|
498 |
+
if (ai_debug) console.log ("AI LISTS CLIENT PASSED", list_client);
|
499 |
|
500 |
}); // &&
|
501 |
|
includes/js/ai-mobile-detect.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
;// Semicolon in the case it is missing in the code above
|
2 |
// THIS FILE IS GENERATED - DO NOT EDIT!
|
3 |
-
/*!mobile-detect v1.4.
|
4 |
/*global module:false, define:false*/
|
5 |
/*jshint latedef:false*/
|
6 |
/*!@license Copyright 2013, Heinrich Goebl, License: MIT, see https://github.com/hgoebl/mobile-detect.js*/
|
@@ -14,14 +14,16 @@ define(function () {
|
|
14 |
"phones": {
|
15 |
"iPhone": "\\biPhone\\b|\\biPod\\b",
|
16 |
"BlackBerry": "BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",
|
|
|
17 |
"HTC": "HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",
|
18 |
-
"Nexus": "Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6",
|
19 |
"Dell": "Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",
|
20 |
"Motorola": "Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",
|
21 |
-
"Samsung": "\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F",
|
22 |
"LG": "\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",
|
23 |
-
"Sony": "SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533",
|
24 |
"Asus": "Asus.*Galaxy|PadFone.*Mobile",
|
|
|
25 |
"NokiaLumia": "Lumia [0-9]{3,4}",
|
26 |
"Micromax": "Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",
|
27 |
"Palm": "PalmSource|Palm",
|
@@ -43,7 +45,7 @@ define(function () {
|
|
43 |
"iPad": "iPad|iPad.*Mobile",
|
44 |
"NexusTablet": "Android.*Nexus[\\s]+(7|9|10)",
|
45 |
"GoogleTablet": "Android.*Pixel C",
|
46 |
-
"SamsungTablet": "SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V",
|
47 |
"Kindle": "Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk\/[0-9.]+ like Chrome\/[0-9.]+ (?!Mobile)",
|
48 |
"SurfaceTablet": "Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",
|
49 |
"HPTablet": "HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",
|
@@ -52,12 +54,12 @@ define(function () {
|
|
52 |
"HTCtablet": "HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",
|
53 |
"MotorolaTablet": "xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",
|
54 |
"NookTablet": "Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",
|
55 |
-
"AcerTablet": "Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30",
|
56 |
"ToshibaTablet": "Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",
|
57 |
"LGTablet": "\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",
|
58 |
"FujitsuTablet": "Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",
|
59 |
"PrestigioTablet": "PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",
|
60 |
-
"LenovoTablet": "Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X",
|
61 |
"DellTablet": "Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",
|
62 |
"YarvikTablet": "Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",
|
63 |
"MedionTablet": "Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",
|
@@ -96,7 +98,7 @@ define(function () {
|
|
96 |
"PyleAudioTablet": "\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",
|
97 |
"AdvanTablet": "Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",
|
98 |
"DanyTechTablet": "Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",
|
99 |
-
"GalapadTablet": "Android
|
100 |
"MicromaxTablet": "Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",
|
101 |
"KarbonnTablet": "Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",
|
102 |
"AllFineTablet": "Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",
|
@@ -168,38 +170,28 @@ define(function () {
|
|
168 |
"WindowsPhoneOS": "Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",
|
169 |
"iOS": "\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",
|
170 |
"iPadOS": "CPU OS 13",
|
|
|
171 |
"MeeGoOS": "MeeGo",
|
172 |
"MaemoOS": "Maemo",
|
173 |
"JavaOS": "J2ME\/|\\bMIDP\\b|\\bCLDC\\b",
|
174 |
"webOS": "webOS|hpwOS",
|
175 |
"badaOS": "\\bBada\\b",
|
176 |
-
"BREWOS": "BREW"
|
177 |
-
|
178 |
-
// AI added
|
179 |
-
'Windows': 'Windows',
|
180 |
-
'Windows NT': 'Windows NT',
|
181 |
-
'OS X': 'Mac OS X',
|
182 |
-
'Debian': 'Debian',
|
183 |
-
'Ubuntu': 'Ubuntu',
|
184 |
-
'Macintosh': 'PPC',
|
185 |
-
'OpenBSD': 'OpenBSD',
|
186 |
-
'Linux': 'Linux',
|
187 |
-
'ChromeOS': 'CrOS'
|
188 |
},
|
189 |
"uas": {
|
190 |
-
|
191 |
"Dolfin": "\\bDolfin\\b",
|
192 |
-
|
193 |
"Skyfire": "Skyfire",
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
"Bolt": "bolt",
|
198 |
"TeaShark": "teashark",
|
199 |
"Blazer": "Blazer",
|
200 |
-
|
201 |
"WeChat": "\\bMicroMessenger\\b",
|
202 |
-
|
203 |
"baiduboxapp": "baiduboxapp",
|
204 |
"baidubrowser": "baidubrowser",
|
205 |
"DiigoBrowser": "DiigoBrowser",
|
@@ -207,20 +199,7 @@ define(function () {
|
|
207 |
"ObigoBrowser": "Obigo",
|
208 |
"NetFront": "NF-Browser",
|
209 |
"GenericBrowser": "NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",
|
210 |
-
"PaleMoon": "Android.*PaleMoon|Mobile.*PaleMoon"
|
211 |
-
|
212 |
-
// AI added
|
213 |
-
'Opera Mini': 'Opera Mini',
|
214 |
-
'Opera': 'Opera|OPR',
|
215 |
-
'Edge': 'Edge',
|
216 |
-
'UCBrowser': 'UCBrowser',
|
217 |
-
'Vivaldi': 'Vivaldi',
|
218 |
-
'Chrome': 'Chrome',
|
219 |
-
'Firefox': 'Firefox',
|
220 |
-
'Safari': 'Safari',
|
221 |
-
'IE': 'MSIE|IEMobile|MSIEMobile|Trident/[.0-9]+',
|
222 |
-
'Netscape': 'Netscape',
|
223 |
-
'Mozilla': 'Mozilla'
|
224 |
},
|
225 |
"props": {
|
226 |
"Mobile": "Mobile\/[VER]",
|
@@ -245,21 +224,21 @@ define(function () {
|
|
245 |
"FxiOS\/[VER]"
|
246 |
],
|
247 |
"Fennec": "Fennec\/[VER]",
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
"NetFront": "NetFront\/[VER]",
|
256 |
"NokiaBrowser": "NokiaBrowser\/[VER]",
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
"Opera Mobi": "Version\/[VER]",
|
264 |
"UCBrowser": [
|
265 |
"UCWEB[VER]",
|
@@ -279,12 +258,14 @@ define(function () {
|
|
279 |
"Tizen": "Tizen\/[VER]",
|
280 |
"Webkit": "webkit[ \/][VER]",
|
281 |
"PaleMoon": "PaleMoon\/[VER]",
|
|
|
282 |
"Gecko": "Gecko\/[VER]",
|
283 |
"Trident": "Trident\/[VER]",
|
284 |
"Presto": "Presto\/[VER]",
|
285 |
"Goanna": "Goanna\/[VER]",
|
286 |
"iOS": " \\bi?OS\\b [VER][ ;]{1}",
|
287 |
"Android": "Android [VER]",
|
|
|
288 |
"BlackBerry": [
|
289 |
"BlackBerry[\\w]+\/[VER]",
|
290 |
"BlackBerry.*Version\/[VER]",
|
@@ -298,7 +279,7 @@ define(function () {
|
|
298 |
],
|
299 |
"Windows Phone": "Windows Phone [VER]",
|
300 |
"Windows CE": "Windows CE\/[VER]",
|
301 |
-
|
302 |
"Symbian": [
|
303 |
"SymbianOS\/[VER]",
|
304 |
"Symbian\/[VER]"
|
@@ -306,37 +287,16 @@ define(function () {
|
|
306 |
"webOS": [
|
307 |
"webOS\/[VER]",
|
308 |
"hpwOS\/[VER];"
|
309 |
-
]
|
310 |
-
|
311 |
-
// AI added
|
312 |
-
// Operating systems
|
313 |
-
'Windows': 'Windows NT [VER]',
|
314 |
-
'Windows NT': 'Windows NT [VER]',
|
315 |
-
'OS X': 'OS X [VER]',
|
316 |
-
'BlackBerryOS': ['BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'],
|
317 |
-
'AndroidOS': 'Android [VER]',
|
318 |
-
'ChromeOS': 'CrOS x86_64 [VER]',
|
319 |
-
|
320 |
-
// Browsers
|
321 |
-
'Opera Mini': 'Opera Mini/[VER]',
|
322 |
-
'Opera': [' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]', 'Opera [VER]'],
|
323 |
-
'Netscape': 'Netscape/[VER]',
|
324 |
-
'Mozilla': 'rv:[VER]',
|
325 |
-
'IE': ['IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'rv:[VER]'],
|
326 |
-
'Edge': 'Edge/[VER]',
|
327 |
-
'Vivaldi': 'Vivaldi/[VER]'
|
328 |
},
|
329 |
"utils": {
|
330 |
-
"Bot": "Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp",
|
331 |
"MobileBot": "Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker\/M1A1-R2D2",
|
332 |
"DesktopMode": "WPDesktop",
|
333 |
"TV": "SonyDTV|HbbTV",
|
334 |
"WebKit": "(webkit)[ \/]([\\w.]+)",
|
335 |
"Console": "\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",
|
336 |
-
"Watch": "SM-V700"
|
337 |
-
|
338 |
-
// AI added
|
339 |
-
'Macintosh': 'Macintosh'
|
340 |
}
|
341 |
};
|
342 |
|
@@ -773,9 +733,9 @@ define(function () {
|
|
773 |
* Returns the detected phone type/family string or <tt>null</tt>.
|
774 |
* <br>
|
775 |
* The returned tablet (family or producer) is one of following keys:<br>
|
776 |
-
* <br><tt>iPhone, BlackBerry, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus,
|
777 |
-
* NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile,
|
778 |
-
* Wolfgang, Alcatel, Nintendo, Amoi, INQ, OnePlus, GenericPhone</tt><br>
|
779 |
* <br>
|
780 |
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
|
781 |
* the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
|
@@ -900,7 +860,7 @@ define(function () {
|
|
900 |
* <br>
|
901 |
* The operating system is one of following keys:<br>
|
902 |
* <br><tt>AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS,
|
903 |
-
* iOS, iPadOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS</tt><br>
|
904 |
*
|
905 |
* @returns {String} the key for the detected operating system.
|
906 |
* @function MobileDetect#os
|
@@ -922,9 +882,10 @@ define(function () {
|
|
922 |
* <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
|
923 |
* Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
|
924 |
* Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
|
925 |
-
* SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
|
926 |
-
*
|
927 |
-
*
|
|
|
928 |
*
|
929 |
* @returns {Number} the version as float or <tt>NaN</tt> if User-Agent doesn't contain this version.
|
930 |
* Be careful when comparing this value with '==' operator!
|
@@ -943,9 +904,10 @@ define(function () {
|
|
943 |
* <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
|
944 |
* Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
|
945 |
* Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
|
946 |
-
* SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
|
947 |
-
*
|
948 |
-
*
|
|
|
949 |
*
|
950 |
* @returns {String} the "raw" version as String or <tt>null</tt> if User-Agent doesn't contain this version.
|
951 |
*
|
@@ -1032,7 +994,7 @@ define(function () {
|
|
1032 |
// should not be replaced by a completely new object - just overwrite existing methods
|
1033 |
MobileDetect._impl = impl;
|
1034 |
|
1035 |
-
MobileDetect.version = '1.4.
|
1036 |
|
1037 |
return MobileDetect;
|
1038 |
}); // end of call of define()
|
@@ -1048,4 +1010,3 @@ define(function () {
|
|
1048 |
throw new Error('unknown environment');
|
1049 |
}
|
1050 |
})());
|
1051 |
-
|
1 |
;// Semicolon in the case it is missing in the code above
|
2 |
// THIS FILE IS GENERATED - DO NOT EDIT!
|
3 |
+
/*!mobile-detect v1.4.5 2021-03-13*/
|
4 |
/*global module:false, define:false*/
|
5 |
/*jshint latedef:false*/
|
6 |
/*!@license Copyright 2013, Heinrich Goebl, License: MIT, see https://github.com/hgoebl/mobile-detect.js*/
|
14 |
"phones": {
|
15 |
"iPhone": "\\biPhone\\b|\\biPod\\b",
|
16 |
"BlackBerry": "BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",
|
17 |
+
"Pixel": "; \\bPixel\\b",
|
18 |
"HTC": "HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",
|
19 |
+
"Nexus": "Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",
|
20 |
"Dell": "Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",
|
21 |
"Motorola": "Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",
|
22 |
+
"Samsung": "\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",
|
23 |
"LG": "\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",
|
24 |
+
"Sony": "SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",
|
25 |
"Asus": "Asus.*Galaxy|PadFone.*Mobile",
|
26 |
+
"Xiaomi": "^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",
|
27 |
"NokiaLumia": "Lumia [0-9]{3,4}",
|
28 |
"Micromax": "Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",
|
29 |
"Palm": "PalmSource|Palm",
|
45 |
"iPad": "iPad|iPad.*Mobile",
|
46 |
"NexusTablet": "Android.*Nexus[\\s]+(7|9|10)",
|
47 |
"GoogleTablet": "Android.*Pixel C",
|
48 |
+
"SamsungTablet": "SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",
|
49 |
"Kindle": "Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk\/[0-9.]+ like Chrome\/[0-9.]+ (?!Mobile)",
|
50 |
"SurfaceTablet": "Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",
|
51 |
"HPTablet": "HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",
|
54 |
"HTCtablet": "HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",
|
55 |
"MotorolaTablet": "xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",
|
56 |
"NookTablet": "Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",
|
57 |
+
"AcerTablet": "Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",
|
58 |
"ToshibaTablet": "Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",
|
59 |
"LGTablet": "\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",
|
60 |
"FujitsuTablet": "Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",
|
61 |
"PrestigioTablet": "PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",
|
62 |
+
"LenovoTablet": "Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",
|
63 |
"DellTablet": "Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",
|
64 |
"YarvikTablet": "Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",
|
65 |
"MedionTablet": "Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",
|
98 |
"PyleAudioTablet": "\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",
|
99 |
"AdvanTablet": "Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",
|
100 |
"DanyTechTablet": "Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",
|
101 |
+
"GalapadTablet": "Android [0-9.]+; [a-z-]+; \\bG1\\b",
|
102 |
"MicromaxTablet": "Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",
|
103 |
"KarbonnTablet": "Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",
|
104 |
"AllFineTablet": "Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",
|
170 |
"WindowsPhoneOS": "Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",
|
171 |
"iOS": "\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",
|
172 |
"iPadOS": "CPU OS 13",
|
173 |
+
"SailfishOS": "Sailfish",
|
174 |
"MeeGoOS": "MeeGo",
|
175 |
"MaemoOS": "Maemo",
|
176 |
"JavaOS": "J2ME\/|\\bMIDP\\b|\\bCLDC\\b",
|
177 |
"webOS": "webOS|hpwOS",
|
178 |
"badaOS": "\\bBada\\b",
|
179 |
+
"BREWOS": "BREW"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
},
|
181 |
"uas": {
|
182 |
+
"Chrome": "\\bCrMo\\b|CriOS|Android.*Chrome\/[.0-9]* (Mobile)?",
|
183 |
"Dolfin": "\\bDolfin\\b",
|
184 |
+
"Opera": "Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR\/[0-9.]+$|Coast\/[0-9.]+",
|
185 |
"Skyfire": "Skyfire",
|
186 |
+
"Edge": "\\bEdgiOS\\b|Mobile Safari\/[.0-9]* Edge",
|
187 |
+
"IE": "IEMobile|MSIEMobile",
|
188 |
+
"Firefox": "fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",
|
189 |
"Bolt": "bolt",
|
190 |
"TeaShark": "teashark",
|
191 |
"Blazer": "Blazer",
|
192 |
+
"Safari": "Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",
|
193 |
"WeChat": "\\bMicroMessenger\\b",
|
194 |
+
"UCBrowser": "UC.*Browser|UCWEB",
|
195 |
"baiduboxapp": "baiduboxapp",
|
196 |
"baidubrowser": "baidubrowser",
|
197 |
"DiigoBrowser": "DiigoBrowser",
|
199 |
"ObigoBrowser": "Obigo",
|
200 |
"NetFront": "NF-Browser",
|
201 |
"GenericBrowser": "NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",
|
202 |
+
"PaleMoon": "Android.*PaleMoon|Mobile.*PaleMoon"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
},
|
204 |
"props": {
|
205 |
"Mobile": "Mobile\/[VER]",
|
224 |
"FxiOS\/[VER]"
|
225 |
],
|
226 |
"Fennec": "Fennec\/[VER]",
|
227 |
+
"Edge": "Edge\/[VER]",
|
228 |
+
"IE": [
|
229 |
+
"IEMobile\/[VER];",
|
230 |
+
"IEMobile [VER]",
|
231 |
+
"MSIE [VER];",
|
232 |
+
"Trident\/[0-9.]+;.*rv:[VER]"
|
233 |
+
],
|
234 |
"NetFront": "NetFront\/[VER]",
|
235 |
"NokiaBrowser": "NokiaBrowser\/[VER]",
|
236 |
+
"Opera": [
|
237 |
+
" OPR\/[VER]",
|
238 |
+
"Opera Mini\/[VER]",
|
239 |
+
"Version\/[VER]"
|
240 |
+
],
|
241 |
+
"Opera Mini": "Opera Mini\/[VER]",
|
242 |
"Opera Mobi": "Version\/[VER]",
|
243 |
"UCBrowser": [
|
244 |
"UCWEB[VER]",
|
258 |
"Tizen": "Tizen\/[VER]",
|
259 |
"Webkit": "webkit[ \/][VER]",
|
260 |
"PaleMoon": "PaleMoon\/[VER]",
|
261 |
+
"SailfishBrowser": "SailfishBrowser\/[VER]",
|
262 |
"Gecko": "Gecko\/[VER]",
|
263 |
"Trident": "Trident\/[VER]",
|
264 |
"Presto": "Presto\/[VER]",
|
265 |
"Goanna": "Goanna\/[VER]",
|
266 |
"iOS": " \\bi?OS\\b [VER][ ;]{1}",
|
267 |
"Android": "Android [VER]",
|
268 |
+
"Sailfish": "Sailfish [VER]",
|
269 |
"BlackBerry": [
|
270 |
"BlackBerry[\\w]+\/[VER]",
|
271 |
"BlackBerry.*Version\/[VER]",
|
279 |
],
|
280 |
"Windows Phone": "Windows Phone [VER]",
|
281 |
"Windows CE": "Windows CE\/[VER]",
|
282 |
+
"Windows NT": "Windows NT [VER]",
|
283 |
"Symbian": [
|
284 |
"SymbianOS\/[VER]",
|
285 |
"Symbian\/[VER]"
|
287 |
"webOS": [
|
288 |
"webOS\/[VER]",
|
289 |
"hpwOS\/[VER];"
|
290 |
+
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
},
|
292 |
"utils": {
|
293 |
+
"Bot": "Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",
|
294 |
"MobileBot": "Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker\/M1A1-R2D2",
|
295 |
"DesktopMode": "WPDesktop",
|
296 |
"TV": "SonyDTV|HbbTV",
|
297 |
"WebKit": "(webkit)[ \/]([\\w.]+)",
|
298 |
"Console": "\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",
|
299 |
+
"Watch": "SM-V700"
|
|
|
|
|
|
|
300 |
}
|
301 |
};
|
302 |
|
733 |
* Returns the detected phone type/family string or <tt>null</tt>.
|
734 |
* <br>
|
735 |
* The returned tablet (family or producer) is one of following keys:<br>
|
736 |
+
* <br><tt>iPhone, BlackBerry, Pixel, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus,
|
737 |
+
* Xiaomi, NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile,
|
738 |
+
* SimValley, Wolfgang, Alcatel, Nintendo, Amoi, INQ, OnePlus, GenericPhone</tt><br>
|
739 |
* <br>
|
740 |
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
|
741 |
* the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
|
860 |
* <br>
|
861 |
* The operating system is one of following keys:<br>
|
862 |
* <br><tt>AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS,
|
863 |
+
* iOS, iPadOS, SailfishOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS</tt><br>
|
864 |
*
|
865 |
* @returns {String} the key for the detected operating system.
|
866 |
* @function MobileDetect#os
|
882 |
* <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
|
883 |
* Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
|
884 |
* Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
|
885 |
+
* SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
|
886 |
+
* SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,
|
887 |
+
* BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows
|
888 |
+
* NT, Symbian, webOS</tt><br>
|
889 |
*
|
890 |
* @returns {Number} the version as float or <tt>NaN</tt> if User-Agent doesn't contain this version.
|
891 |
* Be careful when comparing this value with '==' operator!
|
904 |
* <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
|
905 |
* Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
|
906 |
* Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
|
907 |
+
* SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
|
908 |
+
* SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,
|
909 |
+
* BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows
|
910 |
+
* NT, Symbian, webOS</tt><br>
|
911 |
*
|
912 |
* @returns {String} the "raw" version as String or <tt>null</tt> if User-Agent doesn't contain this version.
|
913 |
*
|
994 |
// should not be replaced by a completely new object - just overwrite existing methods
|
995 |
MobileDetect._impl = impl;
|
996 |
|
997 |
+
MobileDetect.version = '1.4.5 2021-03-13';
|
998 |
|
999 |
return MobileDetect;
|
1000 |
}); // end of call of define()
|
1010 |
throw new Error('unknown environment');
|
1011 |
}
|
1012 |
})());
|
|
includes/js/ai-mobile-detect.min.js
CHANGED
@@ -1,52 +1,2 @@
|
|
1 |
-
;(function(h,f){h(function(){function m(a,b){return null!=a&&null!=b&&a.toLowerCase()===b.toLowerCase()}function h(a,b){var c,d=a.length;if(!d||!b)return!1;var f=b.toLowerCase();for(c=0;c<d;++c)if(f===a[c].toLowerCase())return!0;return!1}function k(a){for(var b in a)l.call(a,b)&&(a[b]=new RegExp(a[b],"i"))}function g(a,b){this.ua=(a||"").substr(0,500);this._cache={};this.maxPhoneWidth=b||600}var b={mobileDetectRules:{phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",
|
2 |
-
|
3 |
-
Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F",
|
4 |
-
LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",
|
5 |
-
Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533",Asus:"Asus.*Galaxy|PadFone.*Mobile",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",
|
6 |
-
Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",
|
7 |
-
Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V",
|
8 |
-
Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",
|
9 |
-
BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30",
|
10 |
-
ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",
|
11 |
-
LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X",
|
12 |
-
DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",
|
13 |
-
MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",
|
14 |
-
AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",
|
15 |
-
CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",
|
16 |
-
MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",
|
17 |
-
HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",
|
18 |
-
DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",
|
19 |
-
PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",
|
20 |
-
GalapadTablet:"Android.*\\bG1\\b(?!\\))",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",
|
21 |
-
YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",
|
22 |
-
PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",
|
23 |
-
HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",
|
24 |
-
ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",
|
25 |
-
ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",
|
26 |
-
TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",
|
27 |
-
FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",
|
28 |
-
VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",
|
29 |
-
OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",
|
30 |
-
EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",
|
31 |
-
CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",
|
32 |
-
NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},
|
33 |
-
oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",
|
34 |
-
iPadOS:"CPU OS 13",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW",Windows:"Windows","Windows NT":"Windows NT","OS X":"Mac OS X",Debian:"Debian",Ubuntu:"Ubuntu",Macintosh:"PPC",OpenBSD:"OpenBSD",Linux:"Linux",ChromeOS:"CrOS"},uas:{Dolfin:"\\bDolfin\\b",Skyfire:"Skyfire",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",WeChat:"\\bMicroMessenger\\b",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",
|
35 |
-
Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon","Opera Mini":"Opera Mini",Opera:"Opera|OPR",Edge:"Edge",UCBrowser:"UCBrowser",Vivaldi:"Vivaldi",Chrome:"Chrome",Firefox:"Firefox",Safari:"Safari",IE:"MSIE|IEMobile|MSIEMobile|Trident/[.0-9]+",Netscape:"Netscape",Mozilla:"Mozilla"},props:{Mobile:"Mobile/[VER]",
|
36 |
-
Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",
|
37 |
-
MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]",
|
38 |
-
"Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"],Windows:"Windows NT [VER]","Windows NT":"Windows NT [VER]","OS X":"OS X [VER]",BlackBerryOS:["BlackBerry[w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],AndroidOS:"Android [VER]",ChromeOS:"CrOS x86_64 [VER]","Opera Mini":"Opera Mini/[VER]",
|
39 |
-
Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]","Opera [VER]"],Netscape:"Netscape/[VER]",Mozilla:"rv:[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","rv:[VER]"],Edge:"Edge/[VER]",Vivaldi:"Vivaldi/[VER]"},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp",
|
40 |
-
MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700",Macintosh:"Macintosh"}},detectMobileBrowsers:{fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,
|
41 |
-
shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,
|
42 |
-
tabletPattern:/android|ipad|playbook|silk/i}},l=Object.prototype.hasOwnProperty;b.FALLBACK_PHONE="UnknownPhone";b.FALLBACK_TABLET="UnknownTablet";b.FALLBACK_MOBILE="UnknownMobile";var n="isArray"in Array?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};(function(){var a,c,e=b.mobileDetectRules;for(a in e.props)if(l.call(e.props,a)){var d=e.props[a];n(d)||(d=[d]);var f=d.length;for(c=0;c<f;++c){var g=d[c];var h=g.indexOf("[VER]");0<=h&&(g=g.substring(0,h)+"([\\w._\\+]+)"+
|
43 |
-
g.substring(h+5));d[c]=new RegExp(g,"i")}e.props[a]=d}k(e.oss);k(e.phones);k(e.tablets);k(e.uas);k(e.utils);e.oss0={WindowsPhoneOS:e.oss.WindowsPhoneOS,WindowsMobileOS:e.oss.WindowsMobileOS}})();b.findMatch=function(a,b){for(var c in a)if(l.call(a,c)&&a[c].test(b))return c;return null};b.findMatches=function(a,b){var c=[],d;for(d in a)l.call(a,d)&&a[d].test(b)&&c.push(d);return c};b.getVersionStr=function(a,c){var e=b.mobileDetectRules.props,d;if(l.call(e,a)){e=e[a];var f=e.length;for(d=0;d<f;++d){var g=
|
44 |
-
e[d].exec(c);if(null!==g)return g[1]}}return null};b.getVersion=function(a,c){var e=b.getVersionStr(a,c);return e?b.prepareVersionNo(e):NaN};b.prepareVersionNo=function(a){var b=a.split(/[a-z._ \/\-]/i);1===b.length&&(a=b[0]);1<b.length&&(a=b[0]+".",b.shift(),a+=b.join(""));return Number(a)};b.isMobileFallback=function(a){return b.detectMobileBrowsers.fullPattern.test(a)||b.detectMobileBrowsers.shortPattern.test(a.substr(0,4))};b.isTabletFallback=function(a){return b.detectMobileBrowsers.tabletPattern.test(a)};
|
45 |
-
b.prepareDetectionCache=function(a,c,e){if(a.mobile===f){var d;(d=b.findMatch(b.mobileDetectRules.tablets,c))?(a.mobile=a.tablet=d,a.phone=null):(d=b.findMatch(b.mobileDetectRules.phones,c))?(a.mobile=a.phone=d,a.tablet=null):b.isMobileFallback(c)?(c=g.isPhoneSized(e),c===f?(a.mobile=b.FALLBACK_MOBILE,a.tablet=a.phone=null):c?(a.mobile=a.phone=b.FALLBACK_PHONE,a.tablet=null):(a.mobile=a.tablet=b.FALLBACK_TABLET,a.phone=null)):b.isTabletFallback(c)?(a.mobile=a.tablet=b.FALLBACK_TABLET,a.phone=null):
|
46 |
-
a.mobile=a.tablet=a.phone=null}};b.mobileGrade=function(a){var b=null!==a.mobile();if(a.os("iOS")&&4.3<=a.version("iPad")||a.os("iOS")&&3.1<=a.version("iPhone")||a.os("iOS")&&3.1<=a.version("iPod")||2.1<a.version("Android")&&a.is("Webkit")||7<=a.version("Windows Phone OS")||a.is("BlackBerry")&&6<=a.version("BlackBerry")||a.match("Playbook.*Tablet")||1.4<=a.version("webOS")&&a.match("Palm|Pre|Pixi")||a.match("hp.*TouchPad")||a.is("Firefox")&&12<=a.version("Firefox")||a.is("Chrome")&&a.is("AndroidOS")&&
|
47 |
-
4<=a.version("Android")||a.is("Skyfire")&&4.1<=a.version("Skyfire")&&a.is("AndroidOS")&&2.3<=a.version("Android")||a.is("Opera")&&11<a.version("Opera Mobi")&&a.is("AndroidOS")||a.is("MeeGoOS")||a.is("Tizen")||a.is("Dolfin")&&2<=a.version("Bada")||(a.is("UC Browser")||a.is("Dolfin"))&&2.3<=a.version("Android")||a.match("Kindle Fire")||a.is("Kindle")&&3<=a.version("Kindle")||a.is("AndroidOS")&&a.is("NookTablet")||11<=a.version("Chrome")&&!b||5<=a.version("Safari")&&!b||4<=a.version("Firefox")&&!b||
|
48 |
-
7<=a.version("MSIE")&&!b||10<=a.version("Opera")&&!b)return"A";if(a.os("iOS")&&4.3>a.version("iPad")||a.os("iOS")&&3.1>a.version("iPhone")||a.os("iOS")&&3.1>a.version("iPod")||a.is("Blackberry")&&5<=a.version("BlackBerry")&&6>a.version("BlackBerry")||5<=a.version("Opera Mini")&&6.5>=a.version("Opera Mini")&&(2.3<=a.version("Android")||a.is("iOS"))||a.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||11<=a.version("Opera Mobi")&&a.is("SymbianOS"))return"B";5>a.version("BlackBerry")||a.match("MSIEMobile|Windows CE.*Mobile")||
|
49 |
-
a.version("Windows Mobile");return"C"};b.detectOS=function(a){return b.findMatch(b.mobileDetectRules.oss0,a)||b.findMatch(b.mobileDetectRules.oss,a)};b.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height};g.prototype={constructor:g,mobile:function(){b.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth);return this._cache.mobile},phone:function(){b.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth);return this._cache.phone},
|
50 |
-
tablet:function(){b.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth);return this._cache.tablet},userAgent:function(){this._cache.userAgent===f&&(this._cache.userAgent=b.findMatch(b.mobileDetectRules.uas,this.ua));return this._cache.userAgent},userAgents:function(){this._cache.userAgents===f&&(this._cache.userAgents=b.findMatches(b.mobileDetectRules.uas,this.ua));return this._cache.userAgents},os:function(){this._cache.os===f&&(this._cache.os=b.detectOS(this.ua));return this._cache.os},
|
51 |
-
version:function(a){return b.getVersion(a,this.ua)},versionStr:function(a){return b.getVersionStr(a,this.ua)},is:function(a){return h(this.userAgents(),a)||m(a,this.os())||m(a,this.phone())||m(a,this.tablet())||h(b.findMatches(b.mobileDetectRules.utils,this.ua),a)},match:function(a){a instanceof RegExp||(a=new RegExp(a,"i"));return a.test(this.ua)},isPhoneSized:function(a){return g.isPhoneSized(a||this.maxPhoneWidth)},mobileGrade:function(){this._cache.grade===f&&(this._cache.grade=b.mobileGrade(this));
|
52 |
-
return this._cache.grade}};g.isPhoneSized="undefined"!==typeof window&&window.screen?function(a){return 0>a?f:b.getDeviceSmallerSide()<=a}:function(){};g._impl=b;g.version="1.4.4 2019-09-21";return g})})(function(h){if("undefined"!==typeof module&&module.exports)return function(f){module.exports=f()};if("function"===typeof define&&define.amd)return define;if("undefined"!==typeof window)return function(f){window.MobileDetect=f()};throw Error("unknown environment");}());
|
1 |
+
;!function(a,b){a(function(){"use strict";function a(a,b){return null!=a&&null!=b&&a.toLowerCase()===b.toLowerCase()}function c(a,b){var c,d,e=a.length;if(!e||!b)return!1;for(c=b.toLowerCase(),d=0;d<e;++d)if(c===a[d].toLowerCase())return!0;return!1}function d(a){for(var b in a)i.call(a,b)&&(a[b]=new RegExp(a[b],"i"))}function e(a){return(a||"").substr(0,500)}function f(a,b){this.ua=e(a),this._cache={},this.maxPhoneWidth=b||600}var g={};g.mobileDetectRules={phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",Pixel:"; \\bPixel\\b",HTC:"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",Nexus:"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",Dell:"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",Motorola:"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",Asus:"Asus.*Galaxy|PadFone.*Mobile",Xiaomi:"^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",GalapadTablet:"Android [0-9.]+; [a-z-]+; \\bG1\\b",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",iPadOS:"CPU OS 13",SailfishOS:"Sailfish",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW"},uas:{Chrome:"\\bCrMo\\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?",Dolfin:"\\bDolfin\\b",Opera:"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+",Skyfire:"Skyfire",Edge:"\\bEdgiOS\\b|Mobile Safari/[.0-9]* Edge",IE:"IEMobile|MSIEMobile",Firefox:"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",Safari:"Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",WeChat:"\\bMicroMessenger\\b",UCBrowser:"UC.*Browser|UCWEB",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon"},props:{Mobile:"Mobile/[VER]",Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",Edge:"Edge/[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","Trident/[0-9.]+;.*rv:[VER]"],NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]",Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]"],"Opera Mini":"Opera Mini/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",SailfishBrowser:"SailfishBrowser/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",Sailfish:"Sailfish [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]","Windows NT":"Windows NT [VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"]},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700"}},g.detectMobileBrowsers={fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,
|
2 |
+
shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,tabletPattern:/android|ipad|playbook|silk/i};var h,i=Object.prototype.hasOwnProperty;return g.FALLBACK_PHONE="UnknownPhone",g.FALLBACK_TABLET="UnknownTablet",g.FALLBACK_MOBILE="UnknownMobile",h="isArray"in Array?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},function(){var a,b,c,e,f,j,k=g.mobileDetectRules;for(a in k.props)if(i.call(k.props,a)){for(b=k.props[a],h(b)||(b=[b]),f=b.length,e=0;e<f;++e)c=b[e],j=c.indexOf("[VER]"),j>=0&&(c=c.substring(0,j)+"([\\w._\\+]+)"+c.substring(j+5)),b[e]=new RegExp(c,"i");k.props[a]=b}d(k.oss),d(k.phones),d(k.tablets),d(k.uas),d(k.utils),k.oss0={WindowsPhoneOS:k.oss.WindowsPhoneOS,WindowsMobileOS:k.oss.WindowsMobileOS}}(),g.findMatch=function(a,b){for(var c in a)if(i.call(a,c)&&a[c].test(b))return c;return null},g.findMatches=function(a,b){var c=[];for(var d in a)i.call(a,d)&&a[d].test(b)&&c.push(d);return c},g.getVersionStr=function(a,b){var c,d,e,f,h=g.mobileDetectRules.props;if(i.call(h,a))for(c=h[a],e=c.length,d=0;d<e;++d)if(f=c[d].exec(b),null!==f)return f[1];return null},g.getVersion=function(a,b){var c=g.getVersionStr(a,b);return c?g.prepareVersionNo(c):NaN},g.prepareVersionNo=function(a){var b;return b=a.split(/[a-z._ \/\-]/i),1===b.length&&(a=b[0]),b.length>1&&(a=b[0]+".",b.shift(),a+=b.join("")),Number(a)},g.isMobileFallback=function(a){return g.detectMobileBrowsers.fullPattern.test(a)||g.detectMobileBrowsers.shortPattern.test(a.substr(0,4))},g.isTabletFallback=function(a){return g.detectMobileBrowsers.tabletPattern.test(a)},g.prepareDetectionCache=function(a,c,d){if(a.mobile===b){var e,h,i;return(h=g.findMatch(g.mobileDetectRules.tablets,c))?(a.mobile=a.tablet=h,void(a.phone=null)):(e=g.findMatch(g.mobileDetectRules.phones,c))?(a.mobile=a.phone=e,void(a.tablet=null)):void(g.isMobileFallback(c)?(i=f.isPhoneSized(d),i===b?(a.mobile=g.FALLBACK_MOBILE,a.tablet=a.phone=null):i?(a.mobile=a.phone=g.FALLBACK_PHONE,a.tablet=null):(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null)):g.isTabletFallback(c)?(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null):a.mobile=a.tablet=a.phone=null)}},g.mobileGrade=function(a){var b=null!==a.mobile();return a.os("iOS")&&a.version("iPad")>=4.3||a.os("iOS")&&a.version("iPhone")>=3.1||a.os("iOS")&&a.version("iPod")>=3.1||a.version("Android")>2.1&&a.is("Webkit")||a.version("Windows Phone OS")>=7||a.is("BlackBerry")&&a.version("BlackBerry")>=6||a.match("Playbook.*Tablet")||a.version("webOS")>=1.4&&a.match("Palm|Pre|Pixi")||a.match("hp.*TouchPad")||a.is("Firefox")&&a.version("Firefox")>=12||a.is("Chrome")&&a.is("AndroidOS")&&a.version("Android")>=4||a.is("Skyfire")&&a.version("Skyfire")>=4.1&&a.is("AndroidOS")&&a.version("Android")>=2.3||a.is("Opera")&&a.version("Opera Mobi")>11&&a.is("AndroidOS")||a.is("MeeGoOS")||a.is("Tizen")||a.is("Dolfin")&&a.version("Bada")>=2||(a.is("UC Browser")||a.is("Dolfin"))&&a.version("Android")>=2.3||a.match("Kindle Fire")||a.is("Kindle")&&a.version("Kindle")>=3||a.is("AndroidOS")&&a.is("NookTablet")||a.version("Chrome")>=11&&!b||a.version("Safari")>=5&&!b||a.version("Firefox")>=4&&!b||a.version("MSIE")>=7&&!b||a.version("Opera")>=10&&!b?"A":a.os("iOS")&&a.version("iPad")<4.3||a.os("iOS")&&a.version("iPhone")<3.1||a.os("iOS")&&a.version("iPod")<3.1||a.is("Blackberry")&&a.version("BlackBerry")>=5&&a.version("BlackBerry")<6||a.version("Opera Mini")>=5&&a.version("Opera Mini")<=6.5&&(a.version("Android")>=2.3||a.is("iOS"))||a.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||a.version("Opera Mobi")>=11&&a.is("SymbianOS")?"B":(a.version("BlackBerry")<5||a.match("MSIEMobile|Windows CE.*Mobile")||a.version("Windows Mobile")<=5.2,"C")},g.detectOS=function(a){return g.findMatch(g.mobileDetectRules.oss0,a)||g.findMatch(g.mobileDetectRules.oss,a)},g.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height},f.prototype={constructor:f,mobile:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.mobile},phone:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.phone},tablet:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.tablet},userAgent:function(){return this._cache.userAgent===b&&(this._cache.userAgent=g.findMatch(g.mobileDetectRules.uas,this.ua)),this._cache.userAgent},userAgents:function(){return this._cache.userAgents===b&&(this._cache.userAgents=g.findMatches(g.mobileDetectRules.uas,this.ua)),this._cache.userAgents},os:function(){return this._cache.os===b&&(this._cache.os=g.detectOS(this.ua)),this._cache.os},version:function(a){return g.getVersion(a,this.ua)},versionStr:function(a){return g.getVersionStr(a,this.ua)},is:function(b){return c(this.userAgents(),b)||a(b,this.os())||a(b,this.phone())||a(b,this.tablet())||c(g.findMatches(g.mobileDetectRules.utils,this.ua),b)},match:function(a){return a instanceof RegExp||(a=new RegExp(a,"i")),a.test(this.ua)},isPhoneSized:function(a){return f.isPhoneSized(a||this.maxPhoneWidth)},mobileGrade:function(){return this._cache.grade===b&&(this._cache.grade=g.mobileGrade(this)),this._cache.grade}},"undefined"!=typeof window&&window.screen?f.isPhoneSized=function(a){return a<0?b:g.getDeviceSmallerSide()<=a}:f.isPhoneSized=function(){},f._impl=g,f.version="1.4.5 2021-03-13",f})}(function(a){if("undefined"!=typeof module&&module.exports)return function(a){module.exports=a()};if("function"==typeof define&&define.amd)return define;if("undefined"!=typeof window)return function(a){window.MobileDetect=a()};throw new Error("unknown environment")}());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/js/ai-wait-functions.js
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function ai_wait_for_functions () {
|
2 |
+
var timeout = 5 * 1000;
|
3 |
+
var start = Date.now ();
|
4 |
+
|
5 |
+
return new Promise (wait_for_functions);
|
6 |
+
|
7 |
+
function wait_for_functions (resolve, reject) {
|
8 |
+
if (typeof ai_functions !== 'undefined')
|
9 |
+
resolve (ai_functions);
|
10 |
+
else if (timeout && (Date.now () - start) >= timeout)
|
11 |
+
reject (new Error ("AI FUNCTIONS NOT LOADED"));
|
12 |
+
else
|
13 |
+
setTimeout (wait_for_functions.bind (this, resolve, reject), 50);
|
14 |
+
}
|
15 |
+
}
|
includes/js/ai-wait-functions.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
function ai_wait_for_functions(){function a(b,c){"undefined"!==typeof ai_functions?b(ai_functions):5E3<=Date.now()-d?c(Error("AI FUNCTIONS NOT LOADED")):setTimeout(a.bind(this,b,c),50)}var d=Date.now();return new Promise(a)};
|
includes/preview.php
CHANGED
@@ -1733,7 +1733,9 @@ function generate_code_preview (
|
|
1733 |
<?php
|
1734 |
if (defined ('AI_ADSENSE_OVERLAY')) {
|
1735 |
echo "
|
1736 |
-
|
|
|
|
|
1737 |
$('.ai-debug-ad-info').each (function () {
|
1738 |
var info_top = $(this).offset ().top;
|
1739 |
var info_left = $(this).offset ().left;
|
@@ -2884,7 +2886,7 @@ Single pages (posts and static pages) have also additional setting for individua
|
|
2884 |
|
2885 |
<?php echo $footer_code ?>
|
2886 |
<script>
|
2887 |
-
<?php if (function_exists ('ai_extract_features_2')) echo ai_get_js ('ai-cookie'), ai_get_js ('ai-close'); ?>
|
2888 |
<?php
|
2889 |
echo ai_get_js ('ai-base64');
|
2890 |
if ($sticky) echo ai_get_js ('ai-sticky');
|
@@ -2895,7 +2897,8 @@ Single pages (posts and static pages) have also additional setting for individua
|
|
2895 |
}
|
2896 |
if ($sticky) echo "setTimeout (function() {AOS.init();}, 200);\n";
|
2897 |
if (defined ('AI_ADSENSE_OVERLAY')) {
|
2898 |
-
echo ai_get_js ('ai-ads');
|
|
|
2899 |
}
|
2900 |
if ($iframe_resize) {
|
2901 |
echo 'function ai_resize_iframe (iframe) {
|
1733 |
<?php
|
1734 |
if (defined ('AI_ADSENSE_OVERLAY')) {
|
1735 |
echo "
|
1736 |
+
$('ins iframe[src*=\"google\"]:visible').each (function () {
|
1737 |
+
ai_process_adsense_ad (this);
|
1738 |
+
});
|
1739 |
$('.ai-debug-ad-info').each (function () {
|
1740 |
var info_top = $(this).offset ().top;
|
1741 |
var info_left = $(this).offset ().left;
|
2886 |
|
2887 |
<?php echo $footer_code ?>
|
2888 |
<script>
|
2889 |
+
<?php if (function_exists ('ai_extract_features_2')) echo ai_get_js ('ai-cookie-data'), ai_get_js ('ai-cookie', false), ai_get_js ('ai-close'); ?>
|
2890 |
<?php
|
2891 |
echo ai_get_js ('ai-base64');
|
2892 |
if ($sticky) echo ai_get_js ('ai-sticky');
|
2897 |
}
|
2898 |
if ($sticky) echo "setTimeout (function() {AOS.init();}, 200);\n";
|
2899 |
if (defined ('AI_ADSENSE_OVERLAY')) {
|
2900 |
+
echo ai_get_js ('ai-ads-data');
|
2901 |
+
echo ai_get_js ('ai-ads', false);
|
2902 |
}
|
2903 |
if ($iframe_resize) {
|
2904 |
echo 'function ai_resize_iframe (iframe) {
|
js/ad-inserter.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
var javascript_version = "2.7.
|
2 |
var ignore_key = true;
|
3 |
var start = 1;
|
4 |
var end = 16;
|
@@ -4485,7 +4485,8 @@ jQuery(document).ready (function($) {
|
|
4485 |
} else ms_val = custom_data;
|
4486 |
}
|
4487 |
|
4488 |
-
list.attr ('value', ms_val);
|
|
|
4489 |
select_element.qs1.cache();
|
4490 |
// select_element.qs2.cache();
|
4491 |
}
|
1 |
+
var javascript_version = "2.7.21"
|
2 |
var ignore_key = true;
|
3 |
var start = 1;
|
4 |
var end = 16;
|
4485 |
} else ms_val = custom_data;
|
4486 |
}
|
4487 |
|
4488 |
+
// list.attr ('value', ms_val);
|
4489 |
+
list.val (ms_val);
|
4490 |
select_element.qs1.cache();
|
4491 |
// select_element.qs2.cache();
|
4492 |
}
|
js/ad-inserter.min.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
var javascript_version="2.7.
|
2 |
10,AI_BETWEEN_COMMENTS=11,AI_AFTER_COMMENTS=12,AI_FOOTER=13,AI_ABOVE_HEADER=14,AI_BEFORE_HTML_ELEMENT=15,AI_AFTER_HTML_ELEMENT=16,AI_INSIDE_HTML_ELEMENT=17,AI_BEFORE_IMAGE=18,AI_AFTER_IMAGE=19,AI_ALIGNMENT_DEFAULT=0,AI_ALIGNMENT_LEFT=1,AI_ALIGNMENT_RIGHT=2,AI_ALIGNMENT_CENTER=3,AI_ALIGNMENT_FLOAT_LEFT=4,AI_ALIGNMENT_FLOAT_RIGHT=5,AI_ALIGNMENT_NO_WRAPPING=6,AI_ALIGNMENT_CUSTOM_CSS=7,AI_ALIGNMENT_STICKY_LEFT=8,AI_ALIGNMENT_STICKY_RIGHT=9,AI_ALIGNMENT_STICKY_TOP=10,AI_ALIGNMENT_STICKY_BOTTOM=11,AI_ALIGNMENT_STICKY=
|
3 |
12,AI_ADB_ACTION_NONE=0,AI_ADB_ACTION_MESSAGE=1,AI_ADB_ACTION_REDIRECTION=2,AI_ADB_BLOCK_ACTION_DO_NOTHING=0,AI_ADB_BLOCK_ACTION_REPLACE=1,AI_ADB_BLOCK_ACTION_SHOW=2,AI_ADB_BLOCK_ACTION_HIDE=3,AI_CODE_UNKNOWN=100,AI_CODE_BANNER=0,AI_CODE_ADSENSE=1,AI_CODE_AMAZON=2,AI_ADSENSE_STANDARD=0,AI_ADSENSE_LINK=1,AI_ADSENSE_IN_ARTICLE=2,AI_ADSENSE_IN_FEED=3,AI_ADSENSE_MATCHED_CONTENT=4,AI_ADSENSE_SIZE_FIXED=0,AI_ADSENSE_SIZE_RESPONSIVE=1,AI_ADSENSE_SIZE_FIXED_BY_VIEWPORT=2,AI_HTML_INSERTION_CLIENT_SIDE=0,AI_HTML_INSERTION_SEREVR_SIDE=
|
4 |
2,AI_STICK_TO_THE_LEFT=0,AI_STICK_TO_THE_CONTENT_LEFT=1,AI_STICK_HORIZONTAL_CENTER=2,AI_STICK_TO_THE_CONTENT_RIGHT=3,AI_STICK_TO_THE_RIGHT=4,AI_STICK_TO_THE_TOP=0,AI_STICK_VERTICAL_CENTER=1,AI_SCROLL_WITH_THE_CONTENT=2,AI_STICK_TO_THE_BOTTOM=3,AI_ANIMATION_NONE=0,AI_BACKGROUND_REPEAT_DEFAULT=0,AI_BACKGROUND_REPEAT_NO=1,AI_BACKGROUND_REPEAT_YES=2,AI_BACKGROUND_REPEAT_HORIZONTALY=3,AI_BACKGROUND_REPEAT_VERTICALLY=4,AI_BACKGROUND_REPEAT_SPACE=5,AI_BACKGROUND_REPEAT_ROUND=6,AI_BACKGROUND_SIZE_DEFAULT=
|
@@ -167,8 +167,8 @@ g,n){console.log("AI GENERATE ROTATION CODE ERROR:",e.status,e.statusText);a("#a
|
|
167 |
b+"-"+(f+1));set_editor_text(b,b64d(active_li.data("code")));c.closest(".ai-rotate").data("option",f+1)}}function M(b,d){var f=a("#"+b+"-select-"+d);if(0!==f.length){var c=function(n,r){"function"==typeof before_update_selection_from_list&&before_update_selection_from_list(d);e.find("span.ui-button-text").addClass("ai-button-updating");setTimeout(function(){Qa(n,r)},5)},e=a("#"+b+"-button-"+d),g=e.data("list");null==g&&(g=b);e.click(function(){if(f.hasClass("multi-select"))c(a("#"+g+"-list-"+d),b),
|
168 |
a("#ms-"+b+"-select-"+d).toggle();else if(0==f.find("option").length){var n=a("#ms-"+b+"-select-"+d).find(".filter-input");n=n.length?n.val():"";var r=f.data("parameters");r="undefined"==typeof r?"":r;a("#ai-loading").show();e.find("span.ui-button-text").addClass("ai-button-active").show();a.get(ajaxurl+"?action=ai_ajax_backend&list-options="+b+"¶meters="+r+"&filter="+n+"&ai_check="+ai_nonce,function(q){if(""!=q){var t="";q=a("option","<div>"+q+"</div>");0!=q.length&&0==a(q[0]).attr("value").length&&
|
169 |
(t=a(q[0]).text(),q=q.splice(1));f.attr("data-message",t);f.html(q);ra(f,b,g,d);a("#ms-"+b+"-select-"+d).find(".filter-message").text(t);c(a("#"+g+"-list-"+d),b)}}).fail(function(q,t,v){a("input.filter-input",selection_container).remove();console.log("Error loading "+b+" options: "+q.status+" "+q.statusText)}).always(function(){a("#ai-loading").hide();e.find("span.ui-button-text").removeClass("ai-button-active")})}else ra(f,b,g,d)});a("#"+g+"-list-"+d).focusout(function(){var n=a("#ms-"+b+"-select-"+
|
170 |
-
d);n.length&&n.is(":visible")&&c(a(this),b)})}}function sa(b,d,f){var c=b.$element,e=c.val();null!=e&&(""==e[0]&&(e=e.splice(1)),e=e.join(", ").trim(","));d=c.attr("id").replace(d+"-select-","");f=a("#"+f+"-list-"+d);d=f.attr("data-custom");"undefined"!=typeof d&&""!=d&&(null!=e?(""!=e&&(e+=", "),e+=d):e=d);f.
|
171 |
-
|
172 |
b.hasClass("ai-list-lowercase")?e=e.map(Function.prototype.call,String.prototype.toLowerCase):b.hasClass("ai-list-country-case")&&(e=e.map(function(t){t=t.split(":");null!=t[0]&&(t[0]=t[0].toUpperCase());null!=t[1]&&(t[1]=t[1].toUpperCase());null!=t[2]&&(t[2]=t[2].toLowerCase());return t.join(":")}));a("#"+d+"-select-"+f).multiSelect("refresh").multiSelect("deselect_all").multiSelect("select",e);if(b.hasClass("ai-list-custom")){g=e;var n=a("#"+d+"-select-"+f).val();null!=n&&(g=e.diff(n));null!=g&&
|
173 |
(g=g.join(", "));b.attr("data-custom",g);c.multiSelect("deselect_all").multiSelect("select",e)}if(c.hasClass("ai-list-filter")){e=a("#ms-"+d+"-select-"+f).find(".ai-list-filter-container");var r=e.find(".filter-input"),q=e.find(".filter-button");e.hasClass("configured")||(e.addClass("configured"),r.on("keyup keypress",function(t){if(13===(t.keyCode||t.which))return t.preventDefault(),q.click(),!1}),q.on("click",function(t){t.preventDefault();t=r.val();c.attr("data-filter",t);c.empty();c.removeClass("multi-select");
|
174 |
a("#"+d+"-button-"+f).click();return!1}));e.show();a("#ms-"+d+"-select-"+f).find(".search-input").hide();q.button().show();r.val(c.attr("data-filter"));a("#ms-"+d+"-select-"+f).find(".filter-message").text(c.attr("data-message"))}}a("#"+d+"-button-"+f).find("span.ui-button-text").removeClass("ai-button-updating")}function ra(b,d,f,c){b.addClass("multi-select");b.multiSelect({selectableHeader:'<div class="ai-list-filter-container"><input type="text" class="filter-input" autocomplete="off" placeholder="'+
|
1 |
+
var javascript_version="2.7.21",ignore_key=!0,start=1,end=16,active_tab=1,active_tab_0=0,tabs_to_configure=[],debug=!1,debug_title=!1,save_enabled=!0,current_tab=0,next_tab=0,syntax_highlighting=!1,settings_page="",dateFormat="yy-mm-dd",timeFormat="H:i:s",list_search_reload=!1,website_list_search_reload=!1,AI_DISABLED=0,AI_BEFORE_POST=1,AI_AFTER_POST=2,AI_BEFORE_CONTENT=3,AI_AFTER_CONTENT=4,AI_BEFORE_PARAGRAPH=5,AI_AFTER_PARAGRAPH=6,AI_BEFORE_EXCERPT=7,AI_AFTER_EXCERPT=8,AI_BETWEEN_POSTS=9,AI_BEFORE_COMMENTS=
|
2 |
10,AI_BETWEEN_COMMENTS=11,AI_AFTER_COMMENTS=12,AI_FOOTER=13,AI_ABOVE_HEADER=14,AI_BEFORE_HTML_ELEMENT=15,AI_AFTER_HTML_ELEMENT=16,AI_INSIDE_HTML_ELEMENT=17,AI_BEFORE_IMAGE=18,AI_AFTER_IMAGE=19,AI_ALIGNMENT_DEFAULT=0,AI_ALIGNMENT_LEFT=1,AI_ALIGNMENT_RIGHT=2,AI_ALIGNMENT_CENTER=3,AI_ALIGNMENT_FLOAT_LEFT=4,AI_ALIGNMENT_FLOAT_RIGHT=5,AI_ALIGNMENT_NO_WRAPPING=6,AI_ALIGNMENT_CUSTOM_CSS=7,AI_ALIGNMENT_STICKY_LEFT=8,AI_ALIGNMENT_STICKY_RIGHT=9,AI_ALIGNMENT_STICKY_TOP=10,AI_ALIGNMENT_STICKY_BOTTOM=11,AI_ALIGNMENT_STICKY=
|
3 |
12,AI_ADB_ACTION_NONE=0,AI_ADB_ACTION_MESSAGE=1,AI_ADB_ACTION_REDIRECTION=2,AI_ADB_BLOCK_ACTION_DO_NOTHING=0,AI_ADB_BLOCK_ACTION_REPLACE=1,AI_ADB_BLOCK_ACTION_SHOW=2,AI_ADB_BLOCK_ACTION_HIDE=3,AI_CODE_UNKNOWN=100,AI_CODE_BANNER=0,AI_CODE_ADSENSE=1,AI_CODE_AMAZON=2,AI_ADSENSE_STANDARD=0,AI_ADSENSE_LINK=1,AI_ADSENSE_IN_ARTICLE=2,AI_ADSENSE_IN_FEED=3,AI_ADSENSE_MATCHED_CONTENT=4,AI_ADSENSE_SIZE_FIXED=0,AI_ADSENSE_SIZE_RESPONSIVE=1,AI_ADSENSE_SIZE_FIXED_BY_VIEWPORT=2,AI_HTML_INSERTION_CLIENT_SIDE=0,AI_HTML_INSERTION_SEREVR_SIDE=
|
4 |
2,AI_STICK_TO_THE_LEFT=0,AI_STICK_TO_THE_CONTENT_LEFT=1,AI_STICK_HORIZONTAL_CENTER=2,AI_STICK_TO_THE_CONTENT_RIGHT=3,AI_STICK_TO_THE_RIGHT=4,AI_STICK_TO_THE_TOP=0,AI_STICK_VERTICAL_CENTER=1,AI_SCROLL_WITH_THE_CONTENT=2,AI_STICK_TO_THE_BOTTOM=3,AI_ANIMATION_NONE=0,AI_BACKGROUND_REPEAT_DEFAULT=0,AI_BACKGROUND_REPEAT_NO=1,AI_BACKGROUND_REPEAT_YES=2,AI_BACKGROUND_REPEAT_HORIZONTALY=3,AI_BACKGROUND_REPEAT_VERTICALLY=4,AI_BACKGROUND_REPEAT_SPACE=5,AI_BACKGROUND_REPEAT_ROUND=6,AI_BACKGROUND_SIZE_DEFAULT=
|
167 |
b+"-"+(f+1));set_editor_text(b,b64d(active_li.data("code")));c.closest(".ai-rotate").data("option",f+1)}}function M(b,d){var f=a("#"+b+"-select-"+d);if(0!==f.length){var c=function(n,r){"function"==typeof before_update_selection_from_list&&before_update_selection_from_list(d);e.find("span.ui-button-text").addClass("ai-button-updating");setTimeout(function(){Qa(n,r)},5)},e=a("#"+b+"-button-"+d),g=e.data("list");null==g&&(g=b);e.click(function(){if(f.hasClass("multi-select"))c(a("#"+g+"-list-"+d),b),
|
168 |
a("#ms-"+b+"-select-"+d).toggle();else if(0==f.find("option").length){var n=a("#ms-"+b+"-select-"+d).find(".filter-input");n=n.length?n.val():"";var r=f.data("parameters");r="undefined"==typeof r?"":r;a("#ai-loading").show();e.find("span.ui-button-text").addClass("ai-button-active").show();a.get(ajaxurl+"?action=ai_ajax_backend&list-options="+b+"¶meters="+r+"&filter="+n+"&ai_check="+ai_nonce,function(q){if(""!=q){var t="";q=a("option","<div>"+q+"</div>");0!=q.length&&0==a(q[0]).attr("value").length&&
|
169 |
(t=a(q[0]).text(),q=q.splice(1));f.attr("data-message",t);f.html(q);ra(f,b,g,d);a("#ms-"+b+"-select-"+d).find(".filter-message").text(t);c(a("#"+g+"-list-"+d),b)}}).fail(function(q,t,v){a("input.filter-input",selection_container).remove();console.log("Error loading "+b+" options: "+q.status+" "+q.statusText)}).always(function(){a("#ai-loading").hide();e.find("span.ui-button-text").removeClass("ai-button-active")})}else ra(f,b,g,d)});a("#"+g+"-list-"+d).focusout(function(){var n=a("#ms-"+b+"-select-"+
|
170 |
+
d);n.length&&n.is(":visible")&&c(a(this),b)})}}function sa(b,d,f){var c=b.$element,e=c.val();null!=e&&(""==e[0]&&(e=e.splice(1)),e=e.join(", ").trim(","));d=c.attr("id").replace(d+"-select-","");f=a("#"+f+"-list-"+d);d=f.attr("data-custom");"undefined"!=typeof d&&""!=d&&(null!=e?(""!=e&&(e+=", "),e+=d):e=d);f.val(e);b.qs1.cache()}function Qa(b,d){Array.prototype.diff=function(t){return this.filter(function(v){return-1===t.indexOf(v)})};var f=b.attr("id").replace(/^\D+/g,""),c=a("#"+d+"-select-"+f);
|
171 |
+
if(a("#ms-"+d+"-select-"+f).is(":visible")){var e=b.val().split(",").map(Function.prototype.call,String.prototype.trim);""==e[0]&&(e=e.splice(1));if(b.hasClass("ai-list-filter"))for(var g=0;g<e.length;g++)e[g]=e[g].replace(/ /g,"-").replace(/[!@#\$%\^&\*\(\)=\+\{\}\|\[\]\\;':"\.\/\?]/g,"");if(b.hasClass("ai-list-filter-cat"))for(g=0;g<e.length;g++)e[g]=e[g].replace(/ /g,"-").replace(/[!@#\$%\^&\(\)=\{\}\|\[\]\\;':"\.\/\?]/g,"");b.hasClass("ai-list-uppercase")?e=e.map(Function.prototype.call,String.prototype.toUpperCase):
|
172 |
b.hasClass("ai-list-lowercase")?e=e.map(Function.prototype.call,String.prototype.toLowerCase):b.hasClass("ai-list-country-case")&&(e=e.map(function(t){t=t.split(":");null!=t[0]&&(t[0]=t[0].toUpperCase());null!=t[1]&&(t[1]=t[1].toUpperCase());null!=t[2]&&(t[2]=t[2].toLowerCase());return t.join(":")}));a("#"+d+"-select-"+f).multiSelect("refresh").multiSelect("deselect_all").multiSelect("select",e);if(b.hasClass("ai-list-custom")){g=e;var n=a("#"+d+"-select-"+f).val();null!=n&&(g=e.diff(n));null!=g&&
|
173 |
(g=g.join(", "));b.attr("data-custom",g);c.multiSelect("deselect_all").multiSelect("select",e)}if(c.hasClass("ai-list-filter")){e=a("#ms-"+d+"-select-"+f).find(".ai-list-filter-container");var r=e.find(".filter-input"),q=e.find(".filter-button");e.hasClass("configured")||(e.addClass("configured"),r.on("keyup keypress",function(t){if(13===(t.keyCode||t.which))return t.preventDefault(),q.click(),!1}),q.on("click",function(t){t.preventDefault();t=r.val();c.attr("data-filter",t);c.empty();c.removeClass("multi-select");
|
174 |
a("#"+d+"-button-"+f).click();return!1}));e.show();a("#ms-"+d+"-select-"+f).find(".search-input").hide();q.button().show();r.val(c.attr("data-filter"));a("#ms-"+d+"-select-"+f).find(".filter-message").text(c.attr("data-message"))}}a("#"+d+"-button-"+f).find("span.ui-button-text").removeClass("ai-button-updating")}function ra(b,d,f,c){b.addClass("multi-select");b.multiSelect({selectableHeader:'<div class="ai-list-filter-container"><input type="text" class="filter-input" autocomplete="off" placeholder="'+
|
js/ai-functions.js
ADDED
@@ -0,0 +1,6267 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function b2a (a) {
|
2 |
+
var c, d, e, f, g, h, i, j, o, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", k = 0, l = 0, m = "", n = [];
|
3 |
+
if (!a) return a;
|
4 |
+
do c = a.charCodeAt(k++), d = a.charCodeAt(k++), e = a.charCodeAt(k++), j = c << 16 | d << 8 | e,
|
5 |
+
f = 63 & j >> 18, g = 63 & j >> 12, h = 63 & j >> 6, i = 63 & j, n[l++] = b.charAt(f) + b.charAt(g) + b.charAt(h) + b.charAt(i); while (k < a.length);
|
6 |
+
return m = n.join(""), o = a.length % 3, (o ? m.slice(0, o - 3) :m) + "===".slice(o || 3);
|
7 |
+
}
|
8 |
+
|
9 |
+
function a2b (a) {
|
10 |
+
var b, c, d, e = {}, f = 0, g = 0, h = "", i = String.fromCharCode, j = a.length;
|
11 |
+
for (b = 0; 64 > b; b++) e["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(b)] = b;
|
12 |
+
for (c = 0; j > c; c++) for (b = e[a.charAt(c)], f = (f << 6) + b, g += 6; g >= 8; ) ((d = 255 & f >>> (g -= 8)) || j - 2 > c) && (h += i(d));
|
13 |
+
return h;
|
14 |
+
}
|
15 |
+
|
16 |
+
b64e = function (str) {
|
17 |
+
return btoa (encodeURIComponent (str).replace (/%([0-9A-F]{2})/g,
|
18 |
+
function toSolidBytes (match, p1) {
|
19 |
+
return String.fromCharCode ('0x' + p1);
|
20 |
+
}));
|
21 |
+
}
|
22 |
+
|
23 |
+
b64d = function (str) {
|
24 |
+
return decodeURIComponent (atob (str).split ('').map (function(c) {
|
25 |
+
return '%' + ('00' + c.charCodeAt (0).toString (16)).slice (-2);
|
26 |
+
}).join (''));
|
27 |
+
}
|
28 |
+
;// Semicolon in the case it is missing in the code above
|
29 |
+
// THIS FILE IS GENERATED - DO NOT EDIT!
|
30 |
+
/*!mobile-detect v1.4.5 2021-03-13*/
|
31 |
+
/*global module:false, define:false*/
|
32 |
+
/*jshint latedef:false*/
|
33 |
+
/*!@license Copyright 2013, Heinrich Goebl, License: MIT, see https://github.com/hgoebl/mobile-detect.js*/
|
34 |
+
(function (define, undefined) {
|
35 |
+
define(function () {
|
36 |
+
'use strict';
|
37 |
+
|
38 |
+
var impl = {};
|
39 |
+
|
40 |
+
impl.mobileDetectRules = {
|
41 |
+
"phones": {
|
42 |
+
"iPhone": "\\biPhone\\b|\\biPod\\b",
|
43 |
+
"BlackBerry": "BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",
|
44 |
+
"Pixel": "; \\bPixel\\b",
|
45 |
+
"HTC": "HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",
|
46 |
+
"Nexus": "Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",
|
47 |
+
"Dell": "Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",
|
48 |
+
"Motorola": "Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",
|
49 |
+
"Samsung": "\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",
|
50 |
+
"LG": "\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",
|
51 |
+
"Sony": "SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",
|
52 |
+
"Asus": "Asus.*Galaxy|PadFone.*Mobile",
|
53 |
+
"Xiaomi": "^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",
|
54 |
+
"NokiaLumia": "Lumia [0-9]{3,4}",
|
55 |
+
"Micromax": "Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",
|
56 |
+
"Palm": "PalmSource|Palm",
|
57 |
+
"Vertu": "Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",
|
58 |
+
"Pantech": "PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",
|
59 |
+
"Fly": "IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",
|
60 |
+
"Wiko": "KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",
|
61 |
+
"iMobile": "i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",
|
62 |
+
"SimValley": "\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",
|
63 |
+
"Wolfgang": "AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",
|
64 |
+
"Alcatel": "Alcatel",
|
65 |
+
"Nintendo": "Nintendo (3DS|Switch)",
|
66 |
+
"Amoi": "Amoi",
|
67 |
+
"INQ": "INQ",
|
68 |
+
"OnePlus": "ONEPLUS",
|
69 |
+
"GenericPhone": "Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"
|
70 |
+
},
|
71 |
+
"tablets": {
|
72 |
+
"iPad": "iPad|iPad.*Mobile",
|
73 |
+
"NexusTablet": "Android.*Nexus[\\s]+(7|9|10)",
|
74 |
+
"GoogleTablet": "Android.*Pixel C",
|
75 |
+
"SamsungTablet": "SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",
|
76 |
+
"Kindle": "Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk\/[0-9.]+ like Chrome\/[0-9.]+ (?!Mobile)",
|
77 |
+
"SurfaceTablet": "Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",
|
78 |
+
"HPTablet": "HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",
|
79 |
+
"AsusTablet": "^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",
|
80 |
+
"BlackBerryTablet": "PlayBook|RIM Tablet",
|
81 |
+
"HTCtablet": "HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",
|
82 |
+
"MotorolaTablet": "xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",
|
83 |
+
"NookTablet": "Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",
|
84 |
+
"AcerTablet": "Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",
|
85 |
+
"ToshibaTablet": "Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",
|
86 |
+
"LGTablet": "\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",
|
87 |
+
"FujitsuTablet": "Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",
|
88 |
+
"PrestigioTablet": "PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",
|
89 |
+
"LenovoTablet": "Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",
|
90 |
+
"DellTablet": "Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",
|
91 |
+
"YarvikTablet": "Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",
|
92 |
+
"MedionTablet": "Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",
|
93 |
+
"ArnovaTablet": "97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",
|
94 |
+
"IntensoTablet": "INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",
|
95 |
+
"IRUTablet": "M702pro",
|
96 |
+
"MegafonTablet": "MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",
|
97 |
+
"EbodaTablet": "E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",
|
98 |
+
"AllViewTablet": "Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",
|
99 |
+
"ArchosTablet": "\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",
|
100 |
+
"AinolTablet": "NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",
|
101 |
+
"NokiaLumiaTablet": "Lumia 2520",
|
102 |
+
"SonyTablet": "Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",
|
103 |
+
"PhilipsTablet": "\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",
|
104 |
+
"CubeTablet": "Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",
|
105 |
+
"CobyTablet": "MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",
|
106 |
+
"MIDTablet": "M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",
|
107 |
+
"MSITablet": "MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",
|
108 |
+
"SMiTTablet": "Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",
|
109 |
+
"RockChipTablet": "Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",
|
110 |
+
"FlyTablet": "IQ310|Fly Vision",
|
111 |
+
"bqTablet": "Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",
|
112 |
+
"HuaweiTablet": "MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",
|
113 |
+
"NecTablet": "\\bN-06D|\\bN-08D",
|
114 |
+
"PantechTablet": "Pantech.*P4100",
|
115 |
+
"BronchoTablet": "Broncho.*(N701|N708|N802|a710)",
|
116 |
+
"VersusTablet": "TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",
|
117 |
+
"ZyncTablet": "z1000|Z99 2G|z930|z990|z909|Z919|z900",
|
118 |
+
"PositivoTablet": "TB07STA|TB10STA|TB07FTA|TB10FTA",
|
119 |
+
"NabiTablet": "Android.*\\bNabi",
|
120 |
+
"KoboTablet": "Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",
|
121 |
+
"DanewTablet": "DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",
|
122 |
+
"TexetTablet": "NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",
|
123 |
+
"PlaystationTablet": "Playstation.*(Portable|Vita)",
|
124 |
+
"TrekstorTablet": "ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",
|
125 |
+
"PyleAudioTablet": "\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",
|
126 |
+
"AdvanTablet": "Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",
|
127 |
+
"DanyTechTablet": "Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",
|
128 |
+
"GalapadTablet": "Android [0-9.]+; [a-z-]+; \\bG1\\b",
|
129 |
+
"MicromaxTablet": "Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",
|
130 |
+
"KarbonnTablet": "Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",
|
131 |
+
"AllFineTablet": "Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",
|
132 |
+
"PROSCANTablet": "\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",
|
133 |
+
"YONESTablet": "BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",
|
134 |
+
"ChangJiaTablet": "TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",
|
135 |
+
"GUTablet": "TX-A1301|TX-M9002|Q702|kf026",
|
136 |
+
"PointOfViewTablet": "TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",
|
137 |
+
"OvermaxTablet": "OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",
|
138 |
+
"HCLTablet": "HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",
|
139 |
+
"DPSTablet": "DPS Dream 9|DPS Dual 7",
|
140 |
+
"VistureTablet": "V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",
|
141 |
+
"CrestaTablet": "CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",
|
142 |
+
"MediatekTablet": "\\bMT8125|MT8389|MT8135|MT8377\\b",
|
143 |
+
"ConcordeTablet": "Concorde([ ]+)?Tab|ConCorde ReadMan",
|
144 |
+
"GoCleverTablet": "GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",
|
145 |
+
"ModecomTablet": "FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",
|
146 |
+
"VoninoTablet": "\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",
|
147 |
+
"ECSTablet": "V07OT2|TM105A|S10OT1|TR10CS1",
|
148 |
+
"StorexTablet": "eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",
|
149 |
+
"VodafoneTablet": "SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",
|
150 |
+
"EssentielBTablet": "Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",
|
151 |
+
"RossMoorTablet": "RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",
|
152 |
+
"iMobileTablet": "i-mobile i-note",
|
153 |
+
"TolinoTablet": "tolino tab [0-9.]+|tolino shine",
|
154 |
+
"AudioSonicTablet": "\\bC-22Q|T7-QC|T-17B|T-17P\\b",
|
155 |
+
"AMPETablet": "Android.* A78 ",
|
156 |
+
"SkkTablet": "Android.* (SKYPAD|PHOENIX|CYCLOPS)",
|
157 |
+
"TecnoTablet": "TECNO P9|TECNO DP8D",
|
158 |
+
"JXDTablet": "Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",
|
159 |
+
"iJoyTablet": "Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",
|
160 |
+
"FX2Tablet": "FX2 PAD7|FX2 PAD10",
|
161 |
+
"XoroTablet": "KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",
|
162 |
+
"ViewsonicTablet": "ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",
|
163 |
+
"VerizonTablet": "QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",
|
164 |
+
"OdysTablet": "LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",
|
165 |
+
"CaptivaTablet": "CAPTIVA PAD",
|
166 |
+
"IconbitTablet": "NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",
|
167 |
+
"TeclastTablet": "T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",
|
168 |
+
"OndaTablet": "\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",
|
169 |
+
"JaytechTablet": "TPC-PA762",
|
170 |
+
"BlaupunktTablet": "Endeavour 800NG|Endeavour 1010",
|
171 |
+
"DigmaTablet": "\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",
|
172 |
+
"EvolioTablet": "ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",
|
173 |
+
"LavaTablet": "QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",
|
174 |
+
"AocTablet": "MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",
|
175 |
+
"MpmanTablet": "MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",
|
176 |
+
"CelkonTablet": "CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",
|
177 |
+
"WolderTablet": "miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",
|
178 |
+
"MediacomTablet": "M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",
|
179 |
+
"MiTablet": "\\bMI PAD\\b|\\bHM NOTE 1W\\b",
|
180 |
+
"NibiruTablet": "Nibiru M1|Nibiru Jupiter One",
|
181 |
+
"NexoTablet": "NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",
|
182 |
+
"LeaderTablet": "TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",
|
183 |
+
"UbislateTablet": "UbiSlate[\\s]?7C",
|
184 |
+
"PocketBookTablet": "Pocketbook",
|
185 |
+
"KocasoTablet": "\\b(TB-1207)\\b",
|
186 |
+
"HisenseTablet": "\\b(F5281|E2371)\\b",
|
187 |
+
"Hudl": "Hudl HT7S3|Hudl 2",
|
188 |
+
"TelstraTablet": "T-Hub2",
|
189 |
+
"GenericTablet": "Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"
|
190 |
+
},
|
191 |
+
"oss": {
|
192 |
+
"AndroidOS": "Android",
|
193 |
+
"BlackBerryOS": "blackberry|\\bBB10\\b|rim tablet os",
|
194 |
+
"PalmOS": "PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",
|
195 |
+
"SymbianOS": "Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",
|
196 |
+
"WindowsMobileOS": "Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",
|
197 |
+
"WindowsPhoneOS": "Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",
|
198 |
+
"iOS": "\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",
|
199 |
+
"iPadOS": "CPU OS 13",
|
200 |
+
"SailfishOS": "Sailfish",
|
201 |
+
"MeeGoOS": "MeeGo",
|
202 |
+
"MaemoOS": "Maemo",
|
203 |
+
"JavaOS": "J2ME\/|\\bMIDP\\b|\\bCLDC\\b",
|
204 |
+
"webOS": "webOS|hpwOS",
|
205 |
+
"badaOS": "\\bBada\\b",
|
206 |
+
"BREWOS": "BREW"
|
207 |
+
},
|
208 |
+
"uas": {
|
209 |
+
"Chrome": "\\bCrMo\\b|CriOS|Android.*Chrome\/[.0-9]* (Mobile)?",
|
210 |
+
"Dolfin": "\\bDolfin\\b",
|
211 |
+
"Opera": "Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR\/[0-9.]+$|Coast\/[0-9.]+",
|
212 |
+
"Skyfire": "Skyfire",
|
213 |
+
"Edge": "\\bEdgiOS\\b|Mobile Safari\/[.0-9]* Edge",
|
214 |
+
"IE": "IEMobile|MSIEMobile",
|
215 |
+
"Firefox": "fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",
|
216 |
+
"Bolt": "bolt",
|
217 |
+
"TeaShark": "teashark",
|
218 |
+
"Blazer": "Blazer",
|
219 |
+
"Safari": "Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",
|
220 |
+
"WeChat": "\\bMicroMessenger\\b",
|
221 |
+
"UCBrowser": "UC.*Browser|UCWEB",
|
222 |
+
"baiduboxapp": "baiduboxapp",
|
223 |
+
"baidubrowser": "baidubrowser",
|
224 |
+
"DiigoBrowser": "DiigoBrowser",
|
225 |
+
"Mercury": "\\bMercury\\b",
|
226 |
+
"ObigoBrowser": "Obigo",
|
227 |
+
"NetFront": "NF-Browser",
|
228 |
+
"GenericBrowser": "NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",
|
229 |
+
"PaleMoon": "Android.*PaleMoon|Mobile.*PaleMoon"
|
230 |
+
},
|
231 |
+
"props": {
|
232 |
+
"Mobile": "Mobile\/[VER]",
|
233 |
+
"Build": "Build\/[VER]",
|
234 |
+
"Version": "Version\/[VER]",
|
235 |
+
"VendorID": "VendorID\/[VER]",
|
236 |
+
"iPad": "iPad.*CPU[a-z ]+[VER]",
|
237 |
+
"iPhone": "iPhone.*CPU[a-z ]+[VER]",
|
238 |
+
"iPod": "iPod.*CPU[a-z ]+[VER]",
|
239 |
+
"Kindle": "Kindle\/[VER]",
|
240 |
+
"Chrome": [
|
241 |
+
"Chrome\/[VER]",
|
242 |
+
"CriOS\/[VER]",
|
243 |
+
"CrMo\/[VER]"
|
244 |
+
],
|
245 |
+
"Coast": [
|
246 |
+
"Coast\/[VER]"
|
247 |
+
],
|
248 |
+
"Dolfin": "Dolfin\/[VER]",
|
249 |
+
"Firefox": [
|
250 |
+
"Firefox\/[VER]",
|
251 |
+
"FxiOS\/[VER]"
|
252 |
+
],
|
253 |
+
"Fennec": "Fennec\/[VER]",
|
254 |
+
"Edge": "Edge\/[VER]",
|
255 |
+
"IE": [
|
256 |
+
"IEMobile\/[VER];",
|
257 |
+
"IEMobile [VER]",
|
258 |
+
"MSIE [VER];",
|
259 |
+
"Trident\/[0-9.]+;.*rv:[VER]"
|
260 |
+
],
|
261 |
+
"NetFront": "NetFront\/[VER]",
|
262 |
+
"NokiaBrowser": "NokiaBrowser\/[VER]",
|
263 |
+
"Opera": [
|
264 |
+
" OPR\/[VER]",
|
265 |
+
"Opera Mini\/[VER]",
|
266 |
+
"Version\/[VER]"
|
267 |
+
],
|
268 |
+
"Opera Mini": "Opera Mini\/[VER]",
|
269 |
+
"Opera Mobi": "Version\/[VER]",
|
270 |
+
"UCBrowser": [
|
271 |
+
"UCWEB[VER]",
|
272 |
+
"UC.*Browser\/[VER]"
|
273 |
+
],
|
274 |
+
"MQQBrowser": "MQQBrowser\/[VER]",
|
275 |
+
"MicroMessenger": "MicroMessenger\/[VER]",
|
276 |
+
"baiduboxapp": "baiduboxapp\/[VER]",
|
277 |
+
"baidubrowser": "baidubrowser\/[VER]",
|
278 |
+
"SamsungBrowser": "SamsungBrowser\/[VER]",
|
279 |
+
"Iron": "Iron\/[VER]",
|
280 |
+
"Safari": [
|
281 |
+
"Version\/[VER]",
|
282 |
+
"Safari\/[VER]"
|
283 |
+
],
|
284 |
+
"Skyfire": "Skyfire\/[VER]",
|
285 |
+
"Tizen": "Tizen\/[VER]",
|
286 |
+
"Webkit": "webkit[ \/][VER]",
|
287 |
+
"PaleMoon": "PaleMoon\/[VER]",
|
288 |
+
"SailfishBrowser": "SailfishBrowser\/[VER]",
|
289 |
+
"Gecko": "Gecko\/[VER]",
|
290 |
+
"Trident": "Trident\/[VER]",
|
291 |
+
"Presto": "Presto\/[VER]",
|
292 |
+
"Goanna": "Goanna\/[VER]",
|
293 |
+
"iOS": " \\bi?OS\\b [VER][ ;]{1}",
|
294 |
+
"Android": "Android [VER]",
|
295 |
+
"Sailfish": "Sailfish [VER]",
|
296 |
+
"BlackBerry": [
|
297 |
+
"BlackBerry[\\w]+\/[VER]",
|
298 |
+
"BlackBerry.*Version\/[VER]",
|
299 |
+
"Version\/[VER]"
|
300 |
+
],
|
301 |
+
"BREW": "BREW [VER]",
|
302 |
+
"Java": "Java\/[VER]",
|
303 |
+
"Windows Phone OS": [
|
304 |
+
"Windows Phone OS [VER]",
|
305 |
+
"Windows Phone [VER]"
|
306 |
+
],
|
307 |
+
"Windows Phone": "Windows Phone [VER]",
|
308 |
+
"Windows CE": "Windows CE\/[VER]",
|
309 |
+
"Windows NT": "Windows NT [VER]",
|
310 |
+
"Symbian": [
|
311 |
+
"SymbianOS\/[VER]",
|
312 |
+
"Symbian\/[VER]"
|
313 |
+
],
|
314 |
+
"webOS": [
|
315 |
+
"webOS\/[VER]",
|
316 |
+
"hpwOS\/[VER];"
|
317 |
+
]
|
318 |
+
},
|
319 |
+
"utils": {
|
320 |
+
"Bot": "Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",
|
321 |
+
"MobileBot": "Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker\/M1A1-R2D2",
|
322 |
+
"DesktopMode": "WPDesktop",
|
323 |
+
"TV": "SonyDTV|HbbTV",
|
324 |
+
"WebKit": "(webkit)[ \/]([\\w.]+)",
|
325 |
+
"Console": "\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",
|
326 |
+
"Watch": "SM-V700"
|
327 |
+
}
|
328 |
+
};
|
329 |
+
|
330 |
+
// following patterns come from http://detectmobilebrowsers.com/
|
331 |
+
impl.detectMobileBrowsers = {
|
332 |
+
fullPattern: /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,
|
333 |
+
shortPattern: /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,
|
334 |
+
tabletPattern: /android|ipad|playbook|silk/i
|
335 |
+
};
|
336 |
+
|
337 |
+
var hasOwnProp = Object.prototype.hasOwnProperty,
|
338 |
+
isArray;
|
339 |
+
|
340 |
+
impl.FALLBACK_PHONE = 'UnknownPhone';
|
341 |
+
impl.FALLBACK_TABLET = 'UnknownTablet';
|
342 |
+
impl.FALLBACK_MOBILE = 'UnknownMobile';
|
343 |
+
|
344 |
+
isArray = ('isArray' in Array) ?
|
345 |
+
Array.isArray : function (value) { return Object.prototype.toString.call(value) === '[object Array]'; };
|
346 |
+
|
347 |
+
function equalIC(a, b) {
|
348 |
+
return a != null && b != null && a.toLowerCase() === b.toLowerCase();
|
349 |
+
}
|
350 |
+
|
351 |
+
function containsIC(array, value) {
|
352 |
+
var valueLC, i, len = array.length;
|
353 |
+
if (!len || !value) {
|
354 |
+
return false;
|
355 |
+
}
|
356 |
+
valueLC = value.toLowerCase();
|
357 |
+
for (i = 0; i < len; ++i) {
|
358 |
+
if (valueLC === array[i].toLowerCase()) {
|
359 |
+
return true;
|
360 |
+
}
|
361 |
+
}
|
362 |
+
return false;
|
363 |
+
}
|
364 |
+
|
365 |
+
function convertPropsToRegExp(object) {
|
366 |
+
for (var key in object) {
|
367 |
+
if (hasOwnProp.call(object, key)) {
|
368 |
+
object[key] = new RegExp(object[key], 'i');
|
369 |
+
}
|
370 |
+
}
|
371 |
+
}
|
372 |
+
|
373 |
+
function prepareUserAgent(userAgent) {
|
374 |
+
return (userAgent || '').substr(0, 500); // mitigate vulnerable to ReDoS
|
375 |
+
}
|
376 |
+
|
377 |
+
(function init() {
|
378 |
+
var key, values, value, i, len, verPos, mobileDetectRules = impl.mobileDetectRules;
|
379 |
+
for (key in mobileDetectRules.props) {
|
380 |
+
if (hasOwnProp.call(mobileDetectRules.props, key)) {
|
381 |
+
values = mobileDetectRules.props[key];
|
382 |
+
if (!isArray(values)) {
|
383 |
+
values = [values];
|
384 |
+
}
|
385 |
+
len = values.length;
|
386 |
+
for (i = 0; i < len; ++i) {
|
387 |
+
value = values[i];
|
388 |
+
verPos = value.indexOf('[VER]');
|
389 |
+
if (verPos >= 0) {
|
390 |
+
value = value.substring(0, verPos) + '([\\w._\\+]+)' + value.substring(verPos + 5);
|
391 |
+
}
|
392 |
+
values[i] = new RegExp(value, 'i');
|
393 |
+
}
|
394 |
+
mobileDetectRules.props[key] = values;
|
395 |
+
}
|
396 |
+
}
|
397 |
+
convertPropsToRegExp(mobileDetectRules.oss);
|
398 |
+
convertPropsToRegExp(mobileDetectRules.phones);
|
399 |
+
convertPropsToRegExp(mobileDetectRules.tablets);
|
400 |
+
convertPropsToRegExp(mobileDetectRules.uas);
|
401 |
+
convertPropsToRegExp(mobileDetectRules.utils);
|
402 |
+
|
403 |
+
// copy some patterns to oss0 which are tested first (see issue#15)
|
404 |
+
mobileDetectRules.oss0 = {
|
405 |
+
WindowsPhoneOS: mobileDetectRules.oss.WindowsPhoneOS,
|
406 |
+
WindowsMobileOS: mobileDetectRules.oss.WindowsMobileOS
|
407 |
+
};
|
408 |
+
}());
|
409 |
+
|
410 |
+
/**
|
411 |
+
* Test userAgent string against a set of rules and find the first matched key.
|
412 |
+
* @param {Object} rules (key is String, value is RegExp)
|
413 |
+
* @param {String} userAgent the navigator.userAgent (or HTTP-Header 'User-Agent').
|
414 |
+
* @returns {String|null} the matched key if found, otherwise <tt>null</tt>
|
415 |
+
* @private
|
416 |
+
*/
|
417 |
+
impl.findMatch = function(rules, userAgent) {
|
418 |
+
for (var key in rules) {
|
419 |
+
if (hasOwnProp.call(rules, key)) {
|
420 |
+
if (rules[key].test(userAgent)) {
|
421 |
+
return key;
|
422 |
+
}
|
423 |
+
}
|
424 |
+
}
|
425 |
+
return null;
|
426 |
+
};
|
427 |
+
|
428 |
+
/**
|
429 |
+
* Test userAgent string against a set of rules and return an array of matched keys.
|
430 |
+
* @param {Object} rules (key is String, value is RegExp)
|
431 |
+
* @param {String} userAgent the navigator.userAgent (or HTTP-Header 'User-Agent').
|
432 |
+
* @returns {Array} an array of matched keys, may be empty when there is no match, but not <tt>null</tt>
|
433 |
+
* @private
|
434 |
+
*/
|
435 |
+
impl.findMatches = function(rules, userAgent) {
|
436 |
+
var result = [];
|
437 |
+
for (var key in rules) {
|
438 |
+
if (hasOwnProp.call(rules, key)) {
|
439 |
+
if (rules[key].test(userAgent)) {
|
440 |
+
result.push(key);
|
441 |
+
}
|
442 |
+
}
|
443 |
+
}
|
444 |
+
return result;
|
445 |
+
};
|
446 |
+
|
447 |
+
/**
|
448 |
+
* Check the version of the given property in the User-Agent.
|
449 |
+
*
|
450 |
+
* @param {String} propertyName
|
451 |
+
* @param {String} userAgent
|
452 |
+
* @return {String} version or <tt>null</tt> if version not found
|
453 |
+
* @private
|
454 |
+
*/
|
455 |
+
impl.getVersionStr = function (propertyName, userAgent) {
|
456 |
+
var props = impl.mobileDetectRules.props, patterns, i, len, match;
|
457 |
+
if (hasOwnProp.call(props, propertyName)) {
|
458 |
+
patterns = props[propertyName];
|
459 |
+
len = patterns.length;
|
460 |
+
for (i = 0; i < len; ++i) {
|
461 |
+
match = patterns[i].exec(userAgent);
|
462 |
+
if (match !== null) {
|
463 |
+
return match[1];
|
464 |
+
}
|
465 |
+
}
|
466 |
+
}
|
467 |
+
return null;
|
468 |
+
};
|
469 |
+
|
470 |
+
/**
|
471 |
+
* Check the version of the given property in the User-Agent.
|
472 |
+
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
|
473 |
+
*
|
474 |
+
* @param {String} propertyName
|
475 |
+
* @param {String} userAgent
|
476 |
+
* @return {Number} version or <tt>NaN</tt> if version not found
|
477 |
+
* @private
|
478 |
+
*/
|
479 |
+
impl.getVersion = function (propertyName, userAgent) {
|
480 |
+
var version = impl.getVersionStr(propertyName, userAgent);
|
481 |
+
return version ? impl.prepareVersionNo(version) : NaN;
|
482 |
+
};
|
483 |
+
|
484 |
+
/**
|
485 |
+
* Prepare the version number.
|
486 |
+
*
|
487 |
+
* @param {String} version
|
488 |
+
* @return {Number} the version number as a floating number
|
489 |
+
* @private
|
490 |
+
*/
|
491 |
+
impl.prepareVersionNo = function (version) {
|
492 |
+
var numbers;
|
493 |
+
|
494 |
+
numbers = version.split(/[a-z._ \/\-]/i);
|
495 |
+
if (numbers.length === 1) {
|
496 |
+
version = numbers[0];
|
497 |
+
}
|
498 |
+
if (numbers.length > 1) {
|
499 |
+
version = numbers[0] + '.';
|
500 |
+
numbers.shift();
|
501 |
+
version += numbers.join('');
|
502 |
+
}
|
503 |
+
return Number(version);
|
504 |
+
};
|
505 |
+
|
506 |
+
impl.isMobileFallback = function (userAgent) {
|
507 |
+
return impl.detectMobileBrowsers.fullPattern.test(userAgent) ||
|
508 |
+
impl.detectMobileBrowsers.shortPattern.test(userAgent.substr(0,4));
|
509 |
+
};
|
510 |
+
|
511 |
+
impl.isTabletFallback = function (userAgent) {
|
512 |
+
return impl.detectMobileBrowsers.tabletPattern.test(userAgent);
|
513 |
+
};
|
514 |
+
|
515 |
+
impl.prepareDetectionCache = function (cache, userAgent, maxPhoneWidth) {
|
516 |
+
if (cache.mobile !== undefined) {
|
517 |
+
return;
|
518 |
+
}
|
519 |
+
var phone, tablet, phoneSized;
|
520 |
+
|
521 |
+
// first check for stronger tablet rules, then phone (see issue#5)
|
522 |
+
tablet = impl.findMatch(impl.mobileDetectRules.tablets, userAgent);
|
523 |
+
if (tablet) {
|
524 |
+
cache.mobile = cache.tablet = tablet;
|
525 |
+
cache.phone = null;
|
526 |
+
return; // unambiguously identified as tablet
|
527 |
+
}
|
528 |
+
|
529 |
+
phone = impl.findMatch(impl.mobileDetectRules.phones, userAgent);
|
530 |
+
if (phone) {
|
531 |
+
cache.mobile = cache.phone = phone;
|
532 |
+
cache.tablet = null;
|
533 |
+
return; // unambiguously identified as phone
|
534 |
+
}
|
535 |
+
|
536 |
+
// our rules haven't found a match -> try more general fallback rules
|
537 |
+
if (impl.isMobileFallback(userAgent)) {
|
538 |
+
phoneSized = MobileDetect.isPhoneSized(maxPhoneWidth);
|
539 |
+
if (phoneSized === undefined) {
|
540 |
+
cache.mobile = impl.FALLBACK_MOBILE;
|
541 |
+
cache.tablet = cache.phone = null;
|
542 |
+
} else if (phoneSized) {
|
543 |
+
cache.mobile = cache.phone = impl.FALLBACK_PHONE;
|
544 |
+
cache.tablet = null;
|
545 |
+
} else {
|
546 |
+
cache.mobile = cache.tablet = impl.FALLBACK_TABLET;
|
547 |
+
cache.phone = null;
|
548 |
+
}
|
549 |
+
} else if (impl.isTabletFallback(userAgent)) {
|
550 |
+
cache.mobile = cache.tablet = impl.FALLBACK_TABLET;
|
551 |
+
cache.phone = null;
|
552 |
+
} else {
|
553 |
+
// not mobile at all!
|
554 |
+
cache.mobile = cache.tablet = cache.phone = null;
|
555 |
+
}
|
556 |
+
};
|
557 |
+
|
558 |
+
// t is a reference to a MobileDetect instance
|
559 |
+
impl.mobileGrade = function (t) {
|
560 |
+
// impl note:
|
561 |
+
// To keep in sync w/ Mobile_Detect.php easily, the following code is tightly aligned to the PHP version.
|
562 |
+
// When changes are made in Mobile_Detect.php, copy this method and replace:
|
563 |
+
// $this-> / t.
|
564 |
+
// self::MOBILE_GRADE_(.) / '$1'
|
565 |
+
// , self::VERSION_TYPE_FLOAT / (nothing)
|
566 |
+
// isIOS() / os('iOS')
|
567 |
+
// [reg] / (nothing) <-- jsdelivr complaining about unescaped unicode character U+00AE
|
568 |
+
var $isMobile = t.mobile() !== null;
|
569 |
+
|
570 |
+
if (
|
571 |
+
// Apple iOS 3.2-5.1 - Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3), iPad 3 (5.1), original iPhone (3.1), iPhone 3 (3.2), 3GS (4.3), 4 (4.3 / 5.0), and 4S (5.1)
|
572 |
+
t.os('iOS') && t.version('iPad')>=4.3 ||
|
573 |
+
t.os('iOS') && t.version('iPhone')>=3.1 ||
|
574 |
+
t.os('iOS') && t.version('iPod')>=3.1 ||
|
575 |
+
|
576 |
+
// Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
|
577 |
+
// Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
|
578 |
+
// Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
|
579 |
+
// Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
|
580 |
+
( t.version('Android')>2.1 && t.is('Webkit') ) ||
|
581 |
+
|
582 |
+
// Windows Phone 7-7.5 - Tested on the HTC Surround (7.0) HTC Trophy (7.5), LG-E900 (7.5), Nokia Lumia 800
|
583 |
+
t.version('Windows Phone OS')>=7.0 ||
|
584 |
+
|
585 |
+
// Blackberry 7 - Tested on BlackBerry Torch 9810
|
586 |
+
// Blackberry 6.0 - Tested on the Torch 9800 and Style 9670
|
587 |
+
t.is('BlackBerry') && t.version('BlackBerry')>=6.0 ||
|
588 |
+
// Blackberry Playbook (1.0-2.0) - Tested on PlayBook
|
589 |
+
t.match('Playbook.*Tablet') ||
|
590 |
+
|
591 |
+
// Palm WebOS (1.4-2.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0)
|
592 |
+
( t.version('webOS')>=1.4 && t.match('Palm|Pre|Pixi') ) ||
|
593 |
+
// Palm WebOS 3.0 - Tested on HP TouchPad
|
594 |
+
t.match('hp.*TouchPad') ||
|
595 |
+
|
596 |
+
// Firefox Mobile (12 Beta) - Tested on Android 2.3 device
|
597 |
+
( t.is('Firefox') && t.version('Firefox')>=12 ) ||
|
598 |
+
|
599 |
+
// Chrome for Android - Tested on Android 4.0, 4.1 device
|
600 |
+
( t.is('Chrome') && t.is('AndroidOS') && t.version('Android')>=4.0 ) ||
|
601 |
+
|
602 |
+
// Skyfire 4.1 - Tested on Android 2.3 device
|
603 |
+
( t.is('Skyfire') && t.version('Skyfire')>=4.1 && t.is('AndroidOS') && t.version('Android')>=2.3 ) ||
|
604 |
+
|
605 |
+
// Opera Mobile 11.5-12: Tested on Android 2.3
|
606 |
+
( t.is('Opera') && t.version('Opera Mobi')>11 && t.is('AndroidOS') ) ||
|
607 |
+
|
608 |
+
// Meego 1.2 - Tested on Nokia 950 and N9
|
609 |
+
t.is('MeeGoOS') ||
|
610 |
+
|
611 |
+
// Tizen (pre-release) - Tested on early hardware
|
612 |
+
t.is('Tizen') ||
|
613 |
+
|
614 |
+
// Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
|
615 |
+
// @todo: more tests here!
|
616 |
+
t.is('Dolfin') && t.version('Bada')>=2.0 ||
|
617 |
+
|
618 |
+
// UC Browser - Tested on Android 2.3 device
|
619 |
+
( (t.is('UC Browser') || t.is('Dolfin')) && t.version('Android')>=2.3 ) ||
|
620 |
+
|
621 |
+
// Kindle 3 and Fire - Tested on the built-in WebKit browser for each
|
622 |
+
( t.match('Kindle Fire') ||
|
623 |
+
t.is('Kindle') && t.version('Kindle')>=3.0 ) ||
|
624 |
+
|
625 |
+
// Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
|
626 |
+
t.is('AndroidOS') && t.is('NookTablet') ||
|
627 |
+
|
628 |
+
// Chrome Desktop 11-21 - Tested on OS X 10.7 and Windows 7
|
629 |
+
t.version('Chrome')>=11 && !$isMobile ||
|
630 |
+
|
631 |
+
// Safari Desktop 4-5 - Tested on OS X 10.7 and Windows 7
|
632 |
+
t.version('Safari')>=5.0 && !$isMobile ||
|
633 |
+
|
634 |
+
// Firefox Desktop 4-13 - Tested on OS X 10.7 and Windows 7
|
635 |
+
t.version('Firefox')>=4.0 && !$isMobile ||
|
636 |
+
|
637 |
+
// Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
|
638 |
+
t.version('MSIE')>=7.0 && !$isMobile ||
|
639 |
+
|
640 |
+
// Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
|
641 |
+
// @reference: http://my.opera.com/community/openweb/idopera/
|
642 |
+
t.version('Opera')>=10 && !$isMobile
|
643 |
+
|
644 |
+
){
|
645 |
+
return 'A';
|
646 |
+
}
|
647 |
+
|
648 |
+
if (
|
649 |
+
t.os('iOS') && t.version('iPad')<4.3 ||
|
650 |
+
t.os('iOS') && t.version('iPhone')<3.1 ||
|
651 |
+
t.os('iOS') && t.version('iPod')<3.1 ||
|
652 |
+
|
653 |
+
// Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
|
654 |
+
t.is('Blackberry') && t.version('BlackBerry')>=5 && t.version('BlackBerry')<6 ||
|
655 |
+
|
656 |
+
//Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
|
657 |
+
( t.version('Opera Mini')>=5.0 && t.version('Opera Mini')<=6.5 &&
|
658 |
+
(t.version('Android')>=2.3 || t.is('iOS')) ) ||
|
659 |
+
|
660 |
+
// Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
|
661 |
+
t.match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||
|
662 |
+
|
663 |
+
// @todo: report this (tested on Nokia N71)
|
664 |
+
t.version('Opera Mobi')>=11 && t.is('SymbianOS')
|
665 |
+
){
|
666 |
+
return 'B';
|
667 |
+
}
|
668 |
+
|
669 |
+
if (
|
670 |
+
// Blackberry 4.x - Tested on the Curve 8330
|
671 |
+
t.version('BlackBerry')<5.0 ||
|
672 |
+
// Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
|
673 |
+
t.match('MSIEMobile|Windows CE.*Mobile') || t.version('Windows Mobile')<=5.2
|
674 |
+
|
675 |
+
){
|
676 |
+
return 'C';
|
677 |
+
}
|
678 |
+
|
679 |
+
//All older smartphone platforms and featurephones - Any device that doesn't support media queries
|
680 |
+
//will receive the basic, C grade experience.
|
681 |
+
return 'C';
|
682 |
+
};
|
683 |
+
|
684 |
+
impl.detectOS = function (ua) {
|
685 |
+
return impl.findMatch(impl.mobileDetectRules.oss0, ua) ||
|
686 |
+
impl.findMatch(impl.mobileDetectRules.oss, ua);
|
687 |
+
};
|
688 |
+
|
689 |
+
impl.getDeviceSmallerSide = function () {
|
690 |
+
return window.screen.width < window.screen.height ?
|
691 |
+
window.screen.width :
|
692 |
+
window.screen.height;
|
693 |
+
};
|
694 |
+
|
695 |
+
/**
|
696 |
+
* Constructor for MobileDetect object.
|
697 |
+
* <br>
|
698 |
+
* Such an object will keep a reference to the given user-agent string and cache most of the detect queries.<br>
|
699 |
+
* <div style="background-color: #d9edf7; border: 1px solid #bce8f1; color: #3a87ad; padding: 14px; border-radius: 2px; margin-top: 20px">
|
700 |
+
* <strong>Find information how to download and install:</strong>
|
701 |
+
* <a href="https://github.com/hgoebl/mobile-detect.js/">github.com/hgoebl/mobile-detect.js/</a>
|
702 |
+
* </div>
|
703 |
+
*
|
704 |
+
* @example <pre>
|
705 |
+
* var md = new MobileDetect(window.navigator.userAgent);
|
706 |
+
* if (md.mobile()) {
|
707 |
+
* location.href = (md.mobileGrade() === 'A') ? '/mobile/' : '/lynx/';
|
708 |
+
* }
|
709 |
+
* </pre>
|
710 |
+
*
|
711 |
+
* @param {string} userAgent typically taken from window.navigator.userAgent or http_header['User-Agent']
|
712 |
+
* @param {number} [maxPhoneWidth=600] <strong>only for browsers</strong> specify a value for the maximum
|
713 |
+
* width of smallest device side (in logical "CSS" pixels) until a device detected as mobile will be handled
|
714 |
+
* as phone.
|
715 |
+
* This is only used in cases where the device cannot be classified as phone or tablet.<br>
|
716 |
+
* See <a href="http://developer.android.com/guide/practices/screens_support.html">Declaring Tablet Layouts
|
717 |
+
* for Android</a>.<br>
|
718 |
+
* If you provide a value < 0, then this "fuzzy" check is disabled.
|
719 |
+
* @constructor
|
720 |
+
* @global
|
721 |
+
*/
|
722 |
+
function MobileDetect(userAgent, maxPhoneWidth) {
|
723 |
+
this.ua = prepareUserAgent(userAgent);
|
724 |
+
this._cache = {};
|
725 |
+
//600dp is typical 7" tablet minimum width
|
726 |
+
this.maxPhoneWidth = maxPhoneWidth || 600;
|
727 |
+
}
|
728 |
+
|
729 |
+
MobileDetect.prototype = {
|
730 |
+
constructor: MobileDetect,
|
731 |
+
|
732 |
+
/**
|
733 |
+
* Returns the detected phone or tablet type or <tt>null</tt> if it is not a mobile device.
|
734 |
+
* <br>
|
735 |
+
* For a list of possible return values see {@link MobileDetect#phone} and {@link MobileDetect#tablet}.<br>
|
736 |
+
* <br>
|
737 |
+
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
|
738 |
+
* the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
|
739 |
+
* is positive, a value of <code>UnknownPhone</code>, <code>UnknownTablet</code> or
|
740 |
+
* <code>UnknownMobile</code> is returned.<br>
|
741 |
+
* When used in browser, the decision whether phone or tablet is made based on <code>screen.width/height</code>.<br>
|
742 |
+
* <br>
|
743 |
+
* When used server-side (node.js), there is no way to tell the difference between <code>UnknownTablet</code>
|
744 |
+
* and <code>UnknownMobile</code>, so you will get <code>UnknownMobile</code> here.<br>
|
745 |
+
* Be aware that since v1.0.0 in this special case you will get <code>UnknownMobile</code> only for:
|
746 |
+
* {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
|
747 |
+
* In versions before v1.0.0 all 3 methods returned <code>UnknownMobile</code> which was tedious to use.
|
748 |
+
* <br>
|
749 |
+
* In most cases you will use the return value just as a boolean.
|
750 |
+
*
|
751 |
+
* @returns {String} the key for the phone family or tablet family, e.g. "Nexus".
|
752 |
+
* @function MobileDetect#mobile
|
753 |
+
*/
|
754 |
+
mobile: function () {
|
755 |
+
impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);
|
756 |
+
return this._cache.mobile;
|
757 |
+
},
|
758 |
+
|
759 |
+
/**
|
760 |
+
* Returns the detected phone type/family string or <tt>null</tt>.
|
761 |
+
* <br>
|
762 |
+
* The returned tablet (family or producer) is one of following keys:<br>
|
763 |
+
* <br><tt>iPhone, BlackBerry, Pixel, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus,
|
764 |
+
* Xiaomi, NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile,
|
765 |
+
* SimValley, Wolfgang, Alcatel, Nintendo, Amoi, INQ, OnePlus, GenericPhone</tt><br>
|
766 |
+
* <br>
|
767 |
+
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
|
768 |
+
* the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
|
769 |
+
* is positive, a value of <code>UnknownPhone</code> or <code>UnknownMobile</code> is returned.<br>
|
770 |
+
* When used in browser, the decision whether phone or tablet is made based on <code>screen.width/height</code>.<br>
|
771 |
+
* <br>
|
772 |
+
* When used server-side (node.js), there is no way to tell the difference between <code>UnknownTablet</code>
|
773 |
+
* and <code>UnknownMobile</code>, so you will get <code>null</code> here, while {@link MobileDetect#mobile}
|
774 |
+
* will return <code>UnknownMobile</code>.<br>
|
775 |
+
* Be aware that since v1.0.0 in this special case you will get <code>UnknownMobile</code> only for:
|
776 |
+
* {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
|
777 |
+
* In versions before v1.0.0 all 3 methods returned <code>UnknownMobile</code> which was tedious to use.
|
778 |
+
* <br>
|
779 |
+
* In most cases you will use the return value just as a boolean.
|
780 |
+
*
|
781 |
+
* @returns {String} the key of the phone family or producer, e.g. "iPhone"
|
782 |
+
* @function MobileDetect#phone
|
783 |
+
*/
|
784 |
+
phone: function () {
|
785 |
+
impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);
|
786 |
+
return this._cache.phone;
|
787 |
+
},
|
788 |
+
|
789 |
+
/**
|
790 |
+
* Returns the detected tablet type/family string or <tt>null</tt>.
|
791 |
+
* <br>
|
792 |
+
* The returned tablet (family or producer) is one of following keys:<br>
|
793 |
+
* <br><tt>iPad, NexusTablet, GoogleTablet, SamsungTablet, Kindle, SurfaceTablet,
|
794 |
+
* HPTablet, AsusTablet, BlackBerryTablet, HTCtablet, MotorolaTablet, NookTablet,
|
795 |
+
* AcerTablet, ToshibaTablet, LGTablet, FujitsuTablet, PrestigioTablet,
|
796 |
+
* LenovoTablet, DellTablet, YarvikTablet, MedionTablet, ArnovaTablet,
|
797 |
+
* IntensoTablet, IRUTablet, MegafonTablet, EbodaTablet, AllViewTablet,
|
798 |
+
* ArchosTablet, AinolTablet, NokiaLumiaTablet, SonyTablet, PhilipsTablet,
|
799 |
+
* CubeTablet, CobyTablet, MIDTablet, MSITablet, SMiTTablet, RockChipTablet,
|
800 |
+
* FlyTablet, bqTablet, HuaweiTablet, NecTablet, PantechTablet, BronchoTablet,
|
801 |
+
* VersusTablet, ZyncTablet, PositivoTablet, NabiTablet, KoboTablet, DanewTablet,
|
802 |
+
* TexetTablet, PlaystationTablet, TrekstorTablet, PyleAudioTablet, AdvanTablet,
|
803 |
+
* DanyTechTablet, GalapadTablet, MicromaxTablet, KarbonnTablet, AllFineTablet,
|
804 |
+
* PROSCANTablet, YONESTablet, ChangJiaTablet, GUTablet, PointOfViewTablet,
|
805 |
+
* OvermaxTablet, HCLTablet, DPSTablet, VistureTablet, CrestaTablet,
|
806 |
+
* MediatekTablet, ConcordeTablet, GoCleverTablet, ModecomTablet, VoninoTablet,
|
807 |
+
* ECSTablet, StorexTablet, VodafoneTablet, EssentielBTablet, RossMoorTablet,
|
808 |
+
* iMobileTablet, TolinoTablet, AudioSonicTablet, AMPETablet, SkkTablet,
|
809 |
+
* TecnoTablet, JXDTablet, iJoyTablet, FX2Tablet, XoroTablet, ViewsonicTablet,
|
810 |
+
* VerizonTablet, OdysTablet, CaptivaTablet, IconbitTablet, TeclastTablet,
|
811 |
+
* OndaTablet, JaytechTablet, BlaupunktTablet, DigmaTablet, EvolioTablet,
|
812 |
+
* LavaTablet, AocTablet, MpmanTablet, CelkonTablet, WolderTablet, MediacomTablet,
|
813 |
+
* MiTablet, NibiruTablet, NexoTablet, LeaderTablet, UbislateTablet,
|
814 |
+
* PocketBookTablet, KocasoTablet, HisenseTablet, Hudl, TelstraTablet,
|
815 |
+
* GenericTablet</tt><br>
|
816 |
+
* <br>
|
817 |
+
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against
|
818 |
+
* the patterns of <a href="http://detectmobilebrowsers.com/">detectmobilebrowsers.com</a>. If this test
|
819 |
+
* is positive, a value of <code>UnknownTablet</code> or <code>UnknownMobile</code> is returned.<br>
|
820 |
+
* When used in browser, the decision whether phone or tablet is made based on <code>screen.width/height</code>.<br>
|
821 |
+
* <br>
|
822 |
+
* When used server-side (node.js), there is no way to tell the difference between <code>UnknownTablet</code>
|
823 |
+
* and <code>UnknownMobile</code>, so you will get <code>null</code> here, while {@link MobileDetect#mobile}
|
824 |
+
* will return <code>UnknownMobile</code>.<br>
|
825 |
+
* Be aware that since v1.0.0 in this special case you will get <code>UnknownMobile</code> only for:
|
826 |
+
* {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
|
827 |
+
* In versions before v1.0.0 all 3 methods returned <code>UnknownMobile</code> which was tedious to use.
|
828 |
+
* <br>
|
829 |
+
* In most cases you will use the return value just as a boolean.
|
830 |
+
*
|
831 |
+
* @returns {String} the key of the tablet family or producer, e.g. "SamsungTablet"
|
832 |
+
* @function MobileDetect#tablet
|
833 |
+
*/
|
834 |
+
tablet: function () {
|
835 |
+
impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth);
|
836 |
+
return this._cache.tablet;
|
837 |
+
},
|
838 |
+
|
839 |
+
/**
|
840 |
+
* Returns the (first) detected user-agent string or <tt>null</tt>.
|
841 |
+
* <br>
|
842 |
+
* The returned user-agent is one of following keys:<br>
|
843 |
+
* <br><tt>Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, Blazer,
|
844 |
+
* Safari, WeChat, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, Mercury,
|
845 |
+
* ObigoBrowser, NetFront, GenericBrowser, PaleMoon</tt><br>
|
846 |
+
* <br>
|
847 |
+
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare
|
848 |
+
* cases where a mobile device pretends to be more than one particular browser. You can get the
|
849 |
+
* list of all matches with {@link MobileDetect#userAgents} or check for a particular value by
|
850 |
+
* providing one of the defined keys as first argument to {@link MobileDetect#is}.
|
851 |
+
*
|
852 |
+
* @returns {String} the key for the detected user-agent or <tt>null</tt>
|
853 |
+
* @function MobileDetect#userAgent
|
854 |
+
*/
|
855 |
+
userAgent: function () {
|
856 |
+
if (this._cache.userAgent === undefined) {
|
857 |
+
this._cache.userAgent = impl.findMatch(impl.mobileDetectRules.uas, this.ua);
|
858 |
+
}
|
859 |
+
return this._cache.userAgent;
|
860 |
+
},
|
861 |
+
|
862 |
+
/**
|
863 |
+
* Returns all detected user-agent strings.
|
864 |
+
* <br>
|
865 |
+
* The array is empty or contains one or more of following keys:<br>
|
866 |
+
* <br><tt>Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, Blazer,
|
867 |
+
* Safari, WeChat, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, Mercury,
|
868 |
+
* ObigoBrowser, NetFront, GenericBrowser, PaleMoon</tt><br>
|
869 |
+
* <br>
|
870 |
+
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare
|
871 |
+
* cases where a mobile device pretends to be more than one particular browser. You can get the
|
872 |
+
* list of all matches with {@link MobileDetect#userAgents} or check for a particular value by
|
873 |
+
* providing one of the defined keys as first argument to {@link MobileDetect#is}.
|
874 |
+
*
|
875 |
+
* @returns {Array} the array of detected user-agent keys or <tt>[]</tt>
|
876 |
+
* @function MobileDetect#userAgents
|
877 |
+
*/
|
878 |
+
userAgents: function () {
|
879 |
+
if (this._cache.userAgents === undefined) {
|
880 |
+
this._cache.userAgents = impl.findMatches(impl.mobileDetectRules.uas, this.ua);
|
881 |
+
}
|
882 |
+
return this._cache.userAgents;
|
883 |
+
},
|
884 |
+
|
885 |
+
/**
|
886 |
+
* Returns the detected operating system string or <tt>null</tt>.
|
887 |
+
* <br>
|
888 |
+
* The operating system is one of following keys:<br>
|
889 |
+
* <br><tt>AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS,
|
890 |
+
* iOS, iPadOS, SailfishOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS</tt><br>
|
891 |
+
*
|
892 |
+
* @returns {String} the key for the detected operating system.
|
893 |
+
* @function MobileDetect#os
|
894 |
+
*/
|
895 |
+
os: function () {
|
896 |
+
if (this._cache.os === undefined) {
|
897 |
+
this._cache.os = impl.detectOS(this.ua);
|
898 |
+
}
|
899 |
+
return this._cache.os;
|
900 |
+
},
|
901 |
+
|
902 |
+
/**
|
903 |
+
* Get the version (as Number) of the given property in the User-Agent.
|
904 |
+
* <br>
|
905 |
+
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
|
906 |
+
*
|
907 |
+
* @param {String} key a key defining a thing which has a version.<br>
|
908 |
+
* You can use one of following keys:<br>
|
909 |
+
* <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
|
910 |
+
* Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
|
911 |
+
* Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
|
912 |
+
* SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
|
913 |
+
* SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,
|
914 |
+
* BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows
|
915 |
+
* NT, Symbian, webOS</tt><br>
|
916 |
+
*
|
917 |
+
* @returns {Number} the version as float or <tt>NaN</tt> if User-Agent doesn't contain this version.
|
918 |
+
* Be careful when comparing this value with '==' operator!
|
919 |
+
* @function MobileDetect#version
|
920 |
+
*/
|
921 |
+
version: function (key) {
|
922 |
+
return impl.getVersion(key, this.ua);
|
923 |
+
},
|
924 |
+
|
925 |
+
/**
|
926 |
+
* Get the version (as String) of the given property in the User-Agent.
|
927 |
+
* <br>
|
928 |
+
*
|
929 |
+
* @param {String} key a key defining a thing which has a version.<br>
|
930 |
+
* You can use one of following keys:<br>
|
931 |
+
* <br><tt>Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast,
|
932 |
+
* Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini,
|
933 |
+
* Opera Mobi, UCBrowser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser,
|
934 |
+
* SamsungBrowser, Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon,
|
935 |
+
* SailfishBrowser, Gecko, Trident, Presto, Goanna, iOS, Android, Sailfish,
|
936 |
+
* BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows CE, Windows
|
937 |
+
* NT, Symbian, webOS</tt><br>
|
938 |
+
*
|
939 |
+
* @returns {String} the "raw" version as String or <tt>null</tt> if User-Agent doesn't contain this version.
|
940 |
+
*
|
941 |
+
* @function MobileDetect#versionStr
|
942 |
+
*/
|
943 |
+
versionStr: function (key) {
|
944 |
+
return impl.getVersionStr(key, this.ua);
|
945 |
+
},
|
946 |
+
|
947 |
+
/**
|
948 |
+
* Global test key against userAgent, os, phone, tablet and some other properties of userAgent string.
|
949 |
+
*
|
950 |
+
* @param {String} key the key (case-insensitive) of a userAgent, an operating system, phone or
|
951 |
+
* tablet family.<br>
|
952 |
+
* For a complete list of possible values, see {@link MobileDetect#userAgent},
|
953 |
+
* {@link MobileDetect#os}, {@link MobileDetect#phone}, {@link MobileDetect#tablet}.<br>
|
954 |
+
* Additionally you have following keys:<br>
|
955 |
+
* <br><tt>Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch</tt><br>
|
956 |
+
*
|
957 |
+
* @returns {boolean} <tt>true</tt> when the given key is one of the defined keys of userAgent, os, phone,
|
958 |
+
* tablet or one of the listed additional keys, otherwise <tt>false</tt>
|
959 |
+
* @function MobileDetect#is
|
960 |
+
*/
|
961 |
+
is: function (key) {
|
962 |
+
return containsIC(this.userAgents(), key) ||
|
963 |
+
equalIC(key, this.os()) ||
|
964 |
+
equalIC(key, this.phone()) ||
|
965 |
+
equalIC(key, this.tablet()) ||
|
966 |
+
containsIC(impl.findMatches(impl.mobileDetectRules.utils, this.ua), key);
|
967 |
+
},
|
968 |
+
|
969 |
+
/**
|
970 |
+
* Do a quick test against navigator::userAgent.
|
971 |
+
*
|
972 |
+
* @param {String|RegExp} pattern the pattern, either as String or RegExp
|
973 |
+
* (a string will be converted to a case-insensitive RegExp).
|
974 |
+
* @returns {boolean} <tt>true</tt> when the pattern matches, otherwise <tt>false</tt>
|
975 |
+
* @function MobileDetect#match
|
976 |
+
*/
|
977 |
+
match: function (pattern) {
|
978 |
+
if (!(pattern instanceof RegExp)) {
|
979 |
+
pattern = new RegExp(pattern, 'i');
|
980 |
+
}
|
981 |
+
return pattern.test(this.ua);
|
982 |
+
},
|
983 |
+
|
984 |
+
/**
|
985 |
+
* Checks whether the mobile device can be considered as phone regarding <code>screen.width</code>.
|
986 |
+
* <br>
|
987 |
+
* Obviously this method makes sense in browser environments only (not for Node.js)!
|
988 |
+
* @param {number} [maxPhoneWidth] the maximum logical pixels (aka. CSS-pixels) to be considered as phone.<br>
|
989 |
+
* The argument is optional and if not present or falsy, the value of the constructor is taken.
|
990 |
+
* @returns {boolean|undefined} <code>undefined</code> if screen size wasn't detectable, else <code>true</code>
|
991 |
+
* when screen.width is less or equal to maxPhoneWidth, otherwise <code>false</code>.<br>
|
992 |
+
* Will always return <code>undefined</code> server-side.
|
993 |
+
*/
|
994 |
+
isPhoneSized: function (maxPhoneWidth) {
|
995 |
+
return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth);
|
996 |
+
},
|
997 |
+
|
998 |
+
/**
|
999 |
+
* Returns the mobile grade ('A', 'B', 'C').
|
1000 |
+
*
|
1001 |
+
* @returns {String} one of the mobile grades ('A', 'B', 'C').
|
1002 |
+
* @function MobileDetect#mobileGrade
|
1003 |
+
*/
|
1004 |
+
mobileGrade: function () {
|
1005 |
+
if (this._cache.grade === undefined) {
|
1006 |
+
this._cache.grade = impl.mobileGrade(this);
|
1007 |
+
}
|
1008 |
+
return this._cache.grade;
|
1009 |
+
}
|
1010 |
+
};
|
1011 |
+
|
1012 |
+
// environment-dependent
|
1013 |
+
if (typeof window !== 'undefined' && window.screen) {
|
1014 |
+
MobileDetect.isPhoneSized = function (maxPhoneWidth) {
|
1015 |
+
return maxPhoneWidth < 0 ? undefined : impl.getDeviceSmallerSide() <= maxPhoneWidth;
|
1016 |
+
};
|
1017 |
+
} else {
|
1018 |
+
MobileDetect.isPhoneSized = function () {};
|
1019 |
+
}
|
1020 |
+
|
1021 |
+
// should not be replaced by a completely new object - just overwrite existing methods
|
1022 |
+
MobileDetect._impl = impl;
|
1023 |
+
|
1024 |
+
MobileDetect.version = '1.4.5 2021-03-13';
|
1025 |
+
|
1026 |
+
return MobileDetect;
|
1027 |
+
}); // end of call of define()
|
1028 |
+
})((function (undefined) {
|
1029 |
+
if (typeof module !== 'undefined' && module.exports) {
|
1030 |
+
return function (factory) { module.exports = factory(); };
|
1031 |
+
} else if (typeof define === 'function' && define.amd) {
|
1032 |
+
return define;
|
1033 |
+
} else if (typeof window !== 'undefined') {
|
1034 |
+
return function (factory) { window.MobileDetect = factory(); };
|
1035 |
+
} else {
|
1036 |
+
// please file a bug if you get this error!
|
1037 |
+
throw new Error('unknown environment');
|
1038 |
+
}
|
1039 |
+
})());
|
1040 |
+
ai_insert = function (insertion, selector, insertion_code) {
|
1041 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
1042 |
+
// var ai_debug = false;
|
1043 |
+
|
1044 |
+
// if (selector.indexOf (':eq') != - 1) {
|
1045 |
+
// ***
|
1046 |
+
if (selector.indexOf (':eq(') != - 1) {
|
1047 |
+
var jq = window.jQuery && window.jQuery.fn;
|
1048 |
+
|
1049 |
+
if (ai_debug) console.log ('AI INSERT USING jQuery QUERIES:', selector);
|
1050 |
+
|
1051 |
+
if (!jq) {
|
1052 |
+
console.error ('AI INSERT USING jQuery QUERIES:', selector, '- jQuery not found');
|
1053 |
+
return;
|
1054 |
+
} else var elements = jQuery (selector);
|
1055 |
+
} else var elements = document.querySelectorAll (selector);
|
1056 |
+
|
1057 |
+
// Array.prototype.forEach.call (elements, function (element, index) {
|
1058 |
+
for (var index = 0, len = elements.length; index < len; index++) {
|
1059 |
+
var element = elements [index];
|
1060 |
+
|
1061 |
+
if (element.hasAttribute ('id')) {
|
1062 |
+
selector_string = '#' + element.getAttribute ('id');
|
1063 |
+
} else
|
1064 |
+
if (element.hasAttribute ('class')) {
|
1065 |
+
selector_string = '.' + element.getAttribute ('class').replace (new RegExp (' ', 'g'), '.');
|
1066 |
+
} else
|
1067 |
+
selector_string = '';
|
1068 |
+
|
1069 |
+
if (ai_debug) console.log ('');
|
1070 |
+
if (ai_debug) console.log ('AI INSERT', insertion, selector, '(' + element.tagName.toLowerCase() + selector_string + ')');
|
1071 |
+
|
1072 |
+
var template = document.createElement ('div');
|
1073 |
+
template.innerHTML = insertion_code;
|
1074 |
+
|
1075 |
+
var ai_selector_counter = template.getElementsByClassName ("ai-selector-counter")[0];
|
1076 |
+
if (ai_selector_counter != null) {
|
1077 |
+
ai_selector_counter.innerText = index + 1;
|
1078 |
+
}
|
1079 |
+
|
1080 |
+
var ai_debug_name_ai_main = template.getElementsByClassName ("ai-debug-name ai-main")[0];
|
1081 |
+
if (ai_debug_name_ai_main != null) {
|
1082 |
+
var insertion_name = insertion.toUpperCase ();
|
1083 |
+
|
1084 |
+
if (typeof ai_front != 'undefined') {
|
1085 |
+
if (insertion == 'before') {
|
1086 |
+
insertion_name = ai_front.insertion_before;
|
1087 |
+
} else
|
1088 |
+
if (insertion == 'after') {
|
1089 |
+
insertion_name = ai_front.insertion_after;
|
1090 |
+
} else
|
1091 |
+
if (insertion == 'prepend') {
|
1092 |
+
insertion_name = ai_front.insertion_prepend;
|
1093 |
+
} else
|
1094 |
+
if (insertion == 'append') {
|
1095 |
+
insertion_name = ai_front.insertion_append;
|
1096 |
+
} else
|
1097 |
+
if (insertion == 'replace-content') {
|
1098 |
+
insertion_name = ai_front.insertion_replace_content;
|
1099 |
+
} else
|
1100 |
+
if (insertion == 'replace-element') {
|
1101 |
+
insertion_name = ai_front.insertion_replace_element;
|
1102 |
+
}
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
if (selector_string.indexOf ('.ai-viewports') == - 1) {
|
1106 |
+
ai_debug_name_ai_main.innerText = insertion_name + ' ' + selector + ' (' + element.tagName.toLowerCase() + selector_string + ')';
|
1107 |
+
}
|
1108 |
+
}
|
1109 |
+
|
1110 |
+
var range = document.createRange ();
|
1111 |
+
|
1112 |
+
var fragment_ok = true;
|
1113 |
+
try {
|
1114 |
+
var fragment = range.createContextualFragment (template.innerHTML);
|
1115 |
+
}
|
1116 |
+
catch (err) {
|
1117 |
+
var fragment_ok = false;
|
1118 |
+
if (ai_debug) console.log ('AI INSERT', 'range.createContextualFragment ERROR:', err.message);
|
1119 |
+
}
|
1120 |
+
|
1121 |
+
if (insertion == 'before') {
|
1122 |
+
// ***
|
1123 |
+
// if (!fragment_ok) {
|
1124 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element));
|
1125 |
+
// } else
|
1126 |
+
|
1127 |
+
element.parentNode.insertBefore (fragment, element);
|
1128 |
+
} else
|
1129 |
+
if (insertion == 'after') {
|
1130 |
+
// ***
|
1131 |
+
// if (!fragment_ok) {
|
1132 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element.nextSibling));
|
1133 |
+
// } else
|
1134 |
+
|
1135 |
+
element.parentNode.insertBefore (fragment, element.nextSibling);
|
1136 |
+
} else
|
1137 |
+
if (insertion == 'prepend') {
|
1138 |
+
// ***
|
1139 |
+
// if (!fragment_ok) {
|
1140 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element.firstChild));
|
1141 |
+
// } else
|
1142 |
+
|
1143 |
+
element.insertBefore (fragment, element.firstChild);
|
1144 |
+
} else
|
1145 |
+
if (insertion == 'append') {
|
1146 |
+
// ***
|
1147 |
+
// if (!fragment_ok) {
|
1148 |
+
// jQuery (template.innerHTML).appendTo (jQuery (element));
|
1149 |
+
// } else
|
1150 |
+
|
1151 |
+
element.insertBefore (fragment, null);
|
1152 |
+
} else
|
1153 |
+
if (insertion == 'replace-content') {
|
1154 |
+
element.innerHTML = '';
|
1155 |
+
|
1156 |
+
// ***
|
1157 |
+
// if (!fragment_ok) {
|
1158 |
+
// jQuery (template.innerHTML).appendTo (jQuery (element));
|
1159 |
+
// } else
|
1160 |
+
|
1161 |
+
element.insertBefore (fragment, null);
|
1162 |
+
} else
|
1163 |
+
if (insertion == 'replace-element') {
|
1164 |
+
// ***
|
1165 |
+
// if (!fragment_ok) {
|
1166 |
+
// jQuery (template.innerHTML).insertBefore (jQuery (element));
|
1167 |
+
// } else
|
1168 |
+
|
1169 |
+
element.parentNode.insertBefore (fragment, element);
|
1170 |
+
|
1171 |
+
element.parentNode.removeChild (element);
|
1172 |
+
}
|
1173 |
+
// });
|
1174 |
+
};
|
1175 |
+
}
|
1176 |
+
|
1177 |
+
ai_insert_code = function (element) {
|
1178 |
+
|
1179 |
+
function hasClass (element, cls) {
|
1180 |
+
if (element == null) return false;
|
1181 |
+
|
1182 |
+
if (element.classList) return element.classList.contains (cls); else
|
1183 |
+
return (' ' + element.className + ' ').indexOf (' ' + cls + ' ') > - 1;
|
1184 |
+
}
|
1185 |
+
|
1186 |
+
function addClass (element, cls) {
|
1187 |
+
if (element == null) return;
|
1188 |
+
|
1189 |
+
if (element.classList) element.classList.add (cls); else
|
1190 |
+
element.className += ' ' + cls;
|
1191 |
+
}
|
1192 |
+
|
1193 |
+
function removeClass (element, cls) {
|
1194 |
+
if (element == null) return;
|
1195 |
+
|
1196 |
+
if (element.classList) element.classList.remove (cls); else
|
1197 |
+
element.className = element.className.replace (new RegExp ('(^|\\b)' + cls.split (' ').join ('|') + '(\\b|$)', 'gi'), ' ');
|
1198 |
+
}
|
1199 |
+
|
1200 |
+
if (typeof element == 'undefined') return;
|
1201 |
+
|
1202 |
+
var insertion = false;
|
1203 |
+
|
1204 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
1205 |
+
// var ai_debug = false;
|
1206 |
+
|
1207 |
+
if (ai_debug) console.log ('AI INSERT ELEMENT class:', element.getAttribute ('class'));
|
1208 |
+
|
1209 |
+
if (hasClass (element, 'no-visibility-check')) {
|
1210 |
+
var visible = true;
|
1211 |
+
} else var visible = !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
|
1212 |
+
|
1213 |
+
if (ai_debug) {
|
1214 |
+
var block = element.getAttribute ('data-block');
|
1215 |
+
}
|
1216 |
+
|
1217 |
+
if (visible) {
|
1218 |
+
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block, 'offsetWidth:', element.offsetWidth, 'offsetHeight:', element.offsetHeight, 'getClientRects().length:', element.getClientRects().length);
|
1219 |
+
|
1220 |
+
var insertion_code = element.getAttribute ('data-code');
|
1221 |
+
var insertion_type = element.getAttribute ('data-insertion-position');
|
1222 |
+
var selector = element.getAttribute ('data-selector');
|
1223 |
+
|
1224 |
+
if (insertion_code != null) {
|
1225 |
+
if (insertion_type != null && selector != null) {
|
1226 |
+
// ***
|
1227 |
+
if (selector.indexOf (':eq(') != - 1) {
|
1228 |
+
var jq = window.jQuery && window.jQuery.fn;
|
1229 |
+
if (jq) {
|
1230 |
+
var selector_exists = jQuery (selector).length;
|
1231 |
+
} else var selector_exists = false;
|
1232 |
+
} else var selector_exists = document.querySelectorAll (selector).length;
|
1233 |
+
|
1234 |
+
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block, insertion_type, selector, selector_exists ? '' : 'NOT FOUND');
|
1235 |
+
|
1236 |
+
if (selector_exists) {
|
1237 |
+
ai_insert (insertion_type, selector, b64d (insertion_code));
|
1238 |
+
removeClass (element, 'ai-viewports');
|
1239 |
+
}
|
1240 |
+
} else {
|
1241 |
+
if (ai_debug) console.log ('AI ELEMENT VISIBLE: block', block);
|
1242 |
+
|
1243 |
+
var range = document.createRange ();
|
1244 |
+
|
1245 |
+
var fragment_ok = true;
|
1246 |
+
try {
|
1247 |
+
var fragment = range.createContextualFragment (b64d (insertion_code));
|
1248 |
+
}
|
1249 |
+
catch (err) {
|
1250 |
+
var fragment_ok = false;
|
1251 |
+
if (ai_debug) console.log ('AI INSERT NEXT', 'range.createContextualFragment ERROR:', err.message);
|
1252 |
+
}
|
1253 |
+
|
1254 |
+
// ***
|
1255 |
+
// if (!fragment_ok) {
|
1256 |
+
// jQuery (b64d (insertion_code)).insertBefore (jQuery (element.nextSibling));
|
1257 |
+
// } else
|
1258 |
+
|
1259 |
+
element.parentNode.insertBefore (fragment, element.nextSibling);
|
1260 |
+
|
1261 |
+
removeClass (element, 'ai-viewports');
|
1262 |
+
}
|
1263 |
+
}
|
1264 |
+
|
1265 |
+
insertion = true;
|
1266 |
+
|
1267 |
+
// Should not be removed here as it is needed for tracking - removed there
|
1268 |
+
// var ai_check_block_data = element.getElementsByClassName ('ai-check-block');
|
1269 |
+
// if (typeof ai_check_block_data [0] != 'undefined') {
|
1270 |
+
// // Remove span
|
1271 |
+
// ai_check_block_data [0].parentNode.removeChild (ai_check_block_data [0]);
|
1272 |
+
// }
|
1273 |
+
} else {
|
1274 |
+
if (ai_debug) console.log ('AI ELEMENT NOT VISIBLE: block', block, 'offsetWidth:', element.offsetWidth, 'offsetHeight:', element.offsetHeight, 'getClientRects().length:', element.getClientRects().length);
|
1275 |
+
|
1276 |
+
var debug_bar = element.previousElementSibling;
|
1277 |
+
|
1278 |
+
if (hasClass (debug_bar, 'ai-debug-bar') && hasClass (debug_bar, 'ai-debug-script')) {
|
1279 |
+
removeClass (debug_bar, 'ai-debug-script');
|
1280 |
+
addClass (debug_bar, 'ai-debug-viewport-invisible');
|
1281 |
+
}
|
1282 |
+
|
1283 |
+
removeClass (element, 'ai-viewports');
|
1284 |
+
}
|
1285 |
+
return insertion;
|
1286 |
+
}
|
1287 |
+
|
1288 |
+
ai_insert_list_code = function (id) {
|
1289 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
1290 |
+
|
1291 |
+
if (typeof ai_block_div != 'undefined') {
|
1292 |
+
var inserted = ai_insert_code (ai_block_div);
|
1293 |
+
var wrapping_div = ai_block_div.closest ('div.AI_FUNCT_GET_BLOCK_CLASS_NAME');
|
1294 |
+
if (wrapping_div) {
|
1295 |
+
if (!inserted) {
|
1296 |
+
wrapping_div.removeAttribute ('data-ai');
|
1297 |
+
}
|
1298 |
+
|
1299 |
+
var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block');
|
1300 |
+
if (wrapping_div && debug_block.length) {
|
1301 |
+
wrapping_div.classList.remove ('ai-list-block');
|
1302 |
+
wrapping_div.classList.remove ('ai-list-block-ip');
|
1303 |
+
wrapping_div.classList.remove ('ai-list-block-filter');
|
1304 |
+
wrapping_div.style.visibility = '';
|
1305 |
+
if (wrapping_div.classList.contains ('ai-remove-position')) {
|
1306 |
+
wrapping_div.style.position = '';
|
1307 |
+
}
|
1308 |
+
}
|
1309 |
+
}
|
1310 |
+
|
1311 |
+
ai_block_div.classList.remove (id);
|
1312 |
+
|
1313 |
+
if (inserted) ai_process_elements ();
|
1314 |
+
}
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
ai_insert_viewport_code = function (id) {
|
1318 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
1319 |
+
|
1320 |
+
if (typeof ai_block_div != 'undefined') {
|
1321 |
+
var inserted = ai_insert_code (ai_block_div);
|
1322 |
+
|
1323 |
+
ai_block_div.classList.remove (id);
|
1324 |
+
|
1325 |
+
if (inserted) {
|
1326 |
+
var wrapping_div = ai_block_div.closest ('div.AI_FUNCT_GET_BLOCK_CLASS_NAME');
|
1327 |
+
|
1328 |
+
if (wrapping_div != null) {
|
1329 |
+
var viewport_style = ai_block_div.getAttribute ('style');
|
1330 |
+
|
1331 |
+
if (viewport_style != null) {
|
1332 |
+
wrapping_div.setAttribute ('style', wrapping_div.getAttribute ('style') + ' ' + viewport_style);
|
1333 |
+
}
|
1334 |
+
}
|
1335 |
+
}
|
1336 |
+
|
1337 |
+
setTimeout (function () {
|
1338 |
+
ai_block_div.removeAttribute ('style');
|
1339 |
+
}, 2);
|
1340 |
+
|
1341 |
+
ai_process_elements ();
|
1342 |
+
}
|
1343 |
+
}
|
1344 |
+
|
1345 |
+
ai_insert_adsense_fallback_codes = function (adsense_unfilled_ins) {
|
1346 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 3
|
1347 |
+
// var ai_debug = false;
|
1348 |
+
|
1349 |
+
adsense_unfilled_ins.style.display = "none";
|
1350 |
+
|
1351 |
+
var fallback_wrapper = adsense_unfilled_ins.closest ('.ai-fallback-adsense');
|
1352 |
+
var fallback_div = fallback_wrapper.nextElementSibling;
|
1353 |
+
|
1354 |
+
if (!!fallback_div.getAttribute ('data-code')) {
|
1355 |
+
var inserted = ai_insert_code (fallback_div);
|
1356 |
+
|
1357 |
+
if (inserted) {
|
1358 |
+
ai_process_elements ();
|
1359 |
+
}
|
1360 |
+
} else {
|
1361 |
+
fallback_div.style.display = "block";
|
1362 |
+
}
|
1363 |
+
|
1364 |
+
if (fallback_wrapper.classList.contains ('ai-empty-code')) {
|
1365 |
+
var label_div = adsense_unfilled_ins.closest ('.AI_FUNCT_GET_BLOCK_CLASS_NAME').getElementsByClassName ('code-block-label');
|
1366 |
+
if (label_div.length != 0) {
|
1367 |
+
label_div [0].style.display = "none";
|
1368 |
+
}
|
1369 |
+
}
|
1370 |
+
|
1371 |
+
if (ai_debug) {
|
1372 |
+
console.log ('AI FALLBACK ADSENSE UNFILLED:', adsense_unfilled_ins.closest ('.AI_FUNCT_GET_BLOCK_CLASS_NAME').classList.value, !!fallback_div.getAttribute ('data-code') ? 'INSERT' : 'SHOW');
|
1373 |
+
}
|
1374 |
+
}
|
1375 |
+
|
1376 |
+
//ai_insert_fallback_codes = function () {
|
1377 |
+
// var ai_debug = typeof ai_debugging !== 'undefined'; // 3
|
1378 |
+
//// var ai_debug = false;
|
1379 |
+
|
1380 |
+
// var ai_fallback_divs = document.getElementsByClassName ('ai-fallback-adsense');
|
1381 |
+
|
1382 |
+
// var fallback_check = ai_fallback_divs.length;
|
1383 |
+
// if (ai_debug && fallback_check) {
|
1384 |
+
// console.log ('');
|
1385 |
+
// console.log ('AI FALLBACK CHECK ADSENSE:', ai_fallback_divs.length, 'block' + (ai_fallback_divs.length == 1 ? '' : 's')) ;
|
1386 |
+
// }
|
1387 |
+
|
1388 |
+
// for (var adsense = 0; adsense < ai_fallback_divs.length; adsense ++) {
|
1389 |
+
// var adsense_div = ai_fallback_divs [adsense];
|
1390 |
+
// var adsense_unfilled_ins = adsense_div.querySelector ('ins.adsbygoogle[data-ad-status="filled"]');
|
1391 |
+
|
1392 |
+
// if (!!adsense_unfilled_ins) {
|
1393 |
+
// adsense_unfilled_ins.style.display = "none";
|
1394 |
+
|
1395 |
+
// var fallback_div = adsense_div.nextElementSibling;
|
1396 |
+
// var insert = !!fallback_div.getAttribute ('data-code');
|
1397 |
+
|
1398 |
+
// if (insert) {
|
1399 |
+
// if (ai_debug) {
|
1400 |
+
// var block = fallback_div.getAttribute ('data-block');
|
1401 |
+
// console.log ('AI INSERT FALLBACK CODE FOR BLOCK', block);
|
1402 |
+
// }
|
1403 |
+
|
1404 |
+
// var inserted = ai_insert_code (fallback_div);
|
1405 |
+
|
1406 |
+
// if (inserted) {
|
1407 |
+
// ai_process_elements ();
|
1408 |
+
// }
|
1409 |
+
// } else {
|
1410 |
+
// if (ai_debug) {
|
1411 |
+
// var block = fallback_div.getAttribute ('data-block');
|
1412 |
+
// console.log ('AI SHOW FALLBACK CODE FOR BLOCK', block);
|
1413 |
+
// }
|
1414 |
+
|
1415 |
+
// fallback_div.style.display = "block";
|
1416 |
+
// }
|
1417 |
+
// }
|
1418 |
+
// }
|
1419 |
+
|
1420 |
+
// if (ai_debug && fallback_check) {
|
1421 |
+
// console.log ('');
|
1422 |
+
// }
|
1423 |
+
//}
|
1424 |
+
|
1425 |
+
ai_insert_code_by_class = function (id) {
|
1426 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
1427 |
+
|
1428 |
+
if (typeof ai_block_div != 'undefined') {
|
1429 |
+
ai_insert_code (ai_block_div);
|
1430 |
+
|
1431 |
+
ai_block_div.classList.remove (id);
|
1432 |
+
}
|
1433 |
+
}
|
1434 |
+
|
1435 |
+
ai_insert_client_code = function (id, len) {
|
1436 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 4
|
1437 |
+
// var ai_debug = false;
|
1438 |
+
|
1439 |
+
var ai_block_div = document.getElementsByClassName (id) [0];
|
1440 |
+
|
1441 |
+
if (ai_debug) {
|
1442 |
+
var block = ai_block_div.getAttribute ('data-block');
|
1443 |
+
console.log ('AI INSERT PROTECTED BLOCK', block, '.' + id);
|
1444 |
+
}
|
1445 |
+
|
1446 |
+
if (typeof ai_block_div != 'undefined') {
|
1447 |
+
var insertion_code = ai_block_div.getAttribute ('data-code');
|
1448 |
+
|
1449 |
+
// if (insertion_code != null && ai_check_block () && ai_check_and_insert_block ()) {
|
1450 |
+
if (insertion_code != null && ai_check_block () /*&& ai_check_and_insert_block ()*/) {
|
1451 |
+
ai_block_div.setAttribute ('data-code', insertion_code.substring (Math.floor (len / 19)));
|
1452 |
+
ai_insert_code_by_class (id);
|
1453 |
+
ai_block_div.remove();
|
1454 |
+
}
|
1455 |
+
}
|
1456 |
+
}
|
1457 |
+
|
1458 |
+
ai_process_elements_active = false;
|
1459 |
+
|
1460 |
+
function ai_process_elements () {
|
1461 |
+
if (!ai_process_elements_active)
|
1462 |
+
setTimeout (function() {
|
1463 |
+
ai_process_elements_active = false;
|
1464 |
+
|
1465 |
+
if (typeof ai_process_rotations == 'function') {
|
1466 |
+
ai_process_rotations ();
|
1467 |
+
}
|
1468 |
+
|
1469 |
+
if (typeof ai_process_lists == 'function') {
|
1470 |
+
// ***
|
1471 |
+
ai_process_lists (jQuery (".ai-list-data"));
|
1472 |
+
}
|
1473 |
+
|
1474 |
+
if (typeof ai_process_ip_addresses == 'function') {
|
1475 |
+
// ***
|
1476 |
+
ai_process_ip_addresses (jQuery (".ai-ip-data"));
|
1477 |
+
}
|
1478 |
+
|
1479 |
+
if (typeof ai_process_filter_hooks == 'function') {
|
1480 |
+
// ***
|
1481 |
+
// ai_process_filter_hooks (jQuery (".ai-filter-check"));
|
1482 |
+
ai_process_filter_hooks ();
|
1483 |
+
}
|
1484 |
+
|
1485 |
+
if (typeof ai_adb_process_blocks == 'function') {
|
1486 |
+
ai_adb_process_blocks ();
|
1487 |
+
}
|
1488 |
+
|
1489 |
+
if (typeof ai_process_impressions == 'function' && ai_tracking_finished == true) {
|
1490 |
+
ai_process_impressions ();
|
1491 |
+
}
|
1492 |
+
if (typeof ai_install_click_trackers == 'function' && ai_tracking_finished == true) {
|
1493 |
+
ai_install_click_trackers ();
|
1494 |
+
}
|
1495 |
+
|
1496 |
+
if (typeof ai_install_close_buttons == 'function') {
|
1497 |
+
ai_install_close_buttons (document);
|
1498 |
+
}
|
1499 |
+
}, 5);
|
1500 |
+
ai_process_elements_active = true;
|
1501 |
+
}
|
1502 |
+
|
1503 |
+
const targetNode = document.querySelector ('body');
|
1504 |
+
const config = {attributes: true, childList: false, subtree: true};
|
1505 |
+
const ai_adsense_callback = function (mutationsList, observer) {
|
1506 |
+
// Use traditional 'for loops' for IE 11
|
1507 |
+
for (const mutation of mutationsList) {
|
1508 |
+
if (mutation.type === 'attributes' && mutation.attributeName == 'data-ad-status' && mutation.target.dataset.adStatus == 'unfilled' && !!mutation.target.closest ('.ai-fallback-adsense')) {
|
1509 |
+
ai_insert_adsense_fallback_codes (mutation.target);
|
1510 |
+
}
|
1511 |
+
}
|
1512 |
+
};
|
1513 |
+
|
1514 |
+
const observer = new MutationObserver (ai_adsense_callback);
|
1515 |
+
observer.observe (targetNode, config);
|
1516 |
+
|
1517 |
+
// Later, we can stop observing
|
1518 |
+
//observer.disconnect();
|
1519 |
+
|
1520 |
+
|
1521 |
+
|
1522 |
+
/*globals jQuery,Window,HTMLElement,HTMLDocument,HTMLCollection,NodeList,MutationObserver */
|
1523 |
+
/*exported Arrive*/
|
1524 |
+
/*jshint latedef:false */
|
1525 |
+
|
1526 |
+
/*
|
1527 |
+
* arrive.js
|
1528 |
+
* v2.4.1
|
1529 |
+
* https://github.com/uzairfarooq/arrive
|
1530 |
+
* MIT licensed
|
1531 |
+
*
|
1532 |
+
* Copyright (c) 2014-2017 Uzair Farooq
|
1533 |
+
*/
|
1534 |
+
var Arrive = (function(window, $, undefined) {
|
1535 |
+
|
1536 |
+
"use strict";
|
1537 |
+
|
1538 |
+
if(!window.MutationObserver || typeof HTMLElement === 'undefined'){
|
1539 |
+
return; //for unsupported browsers
|
1540 |
+
}
|
1541 |
+
|
1542 |
+
var arriveUniqueId = 0;
|
1543 |
+
|
1544 |
+
var utils = (function() {
|
1545 |
+
var matches = HTMLElement.prototype.matches || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector
|
1546 |
+
|| HTMLElement.prototype.msMatchesSelector;
|
1547 |
+
|
1548 |
+
return {
|
1549 |
+
matchesSelector: function(elem, selector) {
|
1550 |
+
return elem instanceof HTMLElement && matches.call(elem, selector);
|
1551 |
+
},
|
1552 |
+
// to enable function overloading - By John Resig (MIT Licensed)
|
1553 |
+
addMethod: function (object, name, fn) {
|
1554 |
+
var old = object[ name ];
|
1555 |
+
object[ name ] = function(){
|
1556 |
+
if ( fn.length == arguments.length ) {
|
1557 |
+
return fn.apply( this, arguments );
|
1558 |
+
}
|
1559 |
+
else if ( typeof old == 'function' ) {
|
1560 |
+
return old.apply( this, arguments );
|
1561 |
+
}
|
1562 |
+
};
|
1563 |
+
},
|
1564 |
+
callCallbacks: function(callbacksToBeCalled, registrationData) {
|
1565 |
+
if (registrationData && registrationData.options.onceOnly && registrationData.firedElems.length == 1) {
|
1566 |
+
// as onlyOnce param is true, make sure we fire the event for only one item
|
1567 |
+
callbacksToBeCalled = [callbacksToBeCalled[0]];
|
1568 |
+
}
|
1569 |
+
|
1570 |
+
for (var i = 0, cb; (cb = callbacksToBeCalled[i]); i++) {
|
1571 |
+
if (cb && cb.callback) {
|
1572 |
+
cb.callback.call(cb.elem, cb.elem);
|
1573 |
+
}
|
1574 |
+
}
|
1575 |
+
|
1576 |
+
if (registrationData && registrationData.options.onceOnly && registrationData.firedElems.length == 1) {
|
1577 |
+
// unbind event after first callback as onceOnly is true.
|
1578 |
+
registrationData.me.unbindEventWithSelectorAndCallback.call(
|
1579 |
+
registrationData.target, registrationData.selector, registrationData.callback);
|
1580 |
+
}
|
1581 |
+
},
|
1582 |
+
// traverse through all descendants of a node to check if event should be fired for any descendant
|
1583 |
+
checkChildNodesRecursively: function(nodes, registrationData, matchFunc, callbacksToBeCalled) {
|
1584 |
+
// check each new node if it matches the selector
|
1585 |
+
for (var i=0, node; (node = nodes[i]); i++) {
|
1586 |
+
if (matchFunc(node, registrationData, callbacksToBeCalled)) {
|
1587 |
+
callbacksToBeCalled.push({ callback: registrationData.callback, elem: node });
|
1588 |
+
}
|
1589 |
+
|
1590 |
+
if (node.childNodes.length > 0) {
|
1591 |
+
utils.checkChildNodesRecursively(node.childNodes, registrationData, matchFunc, callbacksToBeCalled);
|
1592 |
+
}
|
1593 |
+
}
|
1594 |
+
},
|
1595 |
+
mergeArrays: function(firstArr, secondArr){
|
1596 |
+
// Overwrites default options with user-defined options.
|
1597 |
+
var options = {},
|
1598 |
+
attrName;
|
1599 |
+
for (attrName in firstArr) {
|
1600 |
+
if (firstArr.hasOwnProperty(attrName)) {
|
1601 |
+
options[attrName] = firstArr[attrName];
|
1602 |
+
}
|
1603 |
+
}
|
1604 |
+
for (attrName in secondArr) {
|
1605 |
+
if (secondArr.hasOwnProperty(attrName)) {
|
1606 |
+
options[attrName] = secondArr[attrName];
|
1607 |
+
}
|
1608 |
+
}
|
1609 |
+
return options;
|
1610 |
+
},
|
1611 |
+
toElementsArray: function (elements) {
|
1612 |
+
// check if object is an array (or array like object)
|
1613 |
+
// Note: window object has .length property but it's not array of elements so don't consider it an array
|
1614 |
+
if (typeof elements !== "undefined" && (typeof elements.length !== "number" || elements === window)) {
|
1615 |
+
elements = [elements];
|
1616 |
+
}
|
1617 |
+
return elements;
|
1618 |
+
}
|
1619 |
+
};
|
1620 |
+
})();
|
1621 |
+
|
1622 |
+
|
1623 |
+
// Class to maintain state of all registered events of a single type
|
1624 |
+
var EventsBucket = (function() {
|
1625 |
+
var EventsBucket = function() {
|
1626 |
+
// holds all the events
|
1627 |
+
|
1628 |
+
this._eventsBucket = [];
|
1629 |
+
// function to be called while adding an event, the function should do the event initialization/registration
|
1630 |
+
this._beforeAdding = null;
|
1631 |
+
// function to be called while removing an event, the function should do the event destruction
|
1632 |
+
this._beforeRemoving = null;
|
1633 |
+
};
|
1634 |
+
|
1635 |
+
EventsBucket.prototype.addEvent = function(target, selector, options, callback) {
|
1636 |
+
var newEvent = {
|
1637 |
+
target: target,
|
1638 |
+
selector: selector,
|
1639 |
+
options: options,
|
1640 |
+
callback: callback,
|
1641 |
+
firedElems: []
|
1642 |
+
};
|
1643 |
+
|
1644 |
+
if (this._beforeAdding) {
|
1645 |
+
this._beforeAdding(newEvent);
|
1646 |
+
}
|
1647 |
+
|
1648 |
+
this._eventsBucket.push(newEvent);
|
1649 |
+
return newEvent;
|
1650 |
+
};
|
1651 |
+
|
1652 |
+
EventsBucket.prototype.removeEvent = function(compareFunction) {
|
1653 |
+
for (var i=this._eventsBucket.length - 1, registeredEvent; (registeredEvent = this._eventsBucket[i]); i--) {
|
1654 |
+
if (compareFunction(registeredEvent)) {
|
1655 |
+
if (this._beforeRemoving) {
|
1656 |
+
this._beforeRemoving(registeredEvent);
|
1657 |
+
}
|
1658 |
+
|
1659 |
+
// mark callback as null so that even if an event mutation was already triggered it does not call callback
|
1660 |
+
var removedEvents = this._eventsBucket.splice(i, 1);
|
1661 |
+
if (removedEvents && removedEvents.length) {
|
1662 |
+
removedEvents[0].callback = null;
|
1663 |
+
}
|
1664 |
+
}
|
1665 |
+
}
|
1666 |
+
};
|
1667 |
+
|
1668 |
+
EventsBucket.prototype.beforeAdding = function(beforeAdding) {
|
1669 |
+
this._beforeAdding = beforeAdding;
|
1670 |
+
};
|
1671 |
+
|
1672 |
+
EventsBucket.prototype.beforeRemoving = function(beforeRemoving) {
|
1673 |
+
this._beforeRemoving = beforeRemoving;
|
1674 |
+
};
|
1675 |
+
|
1676 |
+
return EventsBucket;
|
1677 |
+
})();
|
1678 |
+
|
1679 |
+
|
1680 |
+
/**
|
1681 |
+
* @constructor
|
1682 |
+
* General class for binding/unbinding arrive and leave events
|
1683 |
+
*/
|
1684 |
+
var MutationEvents = function(getObserverConfig, onMutation) {
|
1685 |
+
var eventsBucket = new EventsBucket(),
|
1686 |
+
me = this;
|
1687 |
+
|
1688 |
+
var defaultOptions = {
|
1689 |
+
fireOnAttributesModification: false
|
1690 |
+
};
|
1691 |
+
|
1692 |
+
// actual event registration before adding it to bucket
|
1693 |
+
eventsBucket.beforeAdding(function(registrationData) {
|
1694 |
+
var
|
1695 |
+
target = registrationData.target,
|
1696 |
+
observer;
|
1697 |
+
|
1698 |
+
// mutation observer does not work on window or document
|
1699 |
+
if (target === window.document || target === window) {
|
1700 |
+
target = document.getElementsByTagName("html")[0];
|
1701 |
+
}
|
1702 |
+
|
1703 |
+
// Create an observer instance
|
1704 |
+
observer = new MutationObserver(function(e) {
|
1705 |
+
onMutation.call(this, e, registrationData);
|
1706 |
+
});
|
1707 |
+
|
1708 |
+
var config = getObserverConfig(registrationData.options);
|
1709 |
+
|
1710 |
+
observer.observe(target, config);
|
1711 |
+
|
1712 |
+
registrationData.observer = observer;
|
1713 |
+
registrationData.me = me;
|
1714 |
+
});
|
1715 |
+
|
1716 |
+
// cleanup/unregister before removing an event
|
1717 |
+
eventsBucket.beforeRemoving(function (eventData) {
|
1718 |
+
eventData.observer.disconnect();
|
1719 |
+
});
|
1720 |
+
|
1721 |
+
this.bindEvent = function(selector, options, callback) {
|
1722 |
+
options = utils.mergeArrays(defaultOptions, options);
|
1723 |
+
|
1724 |
+
var elements = utils.toElementsArray(this);
|
1725 |
+
|
1726 |
+
for (var i = 0; i < elements.length; i++) {
|
1727 |
+
eventsBucket.addEvent(elements[i], selector, options, callback);
|
1728 |
+
}
|
1729 |
+
};
|
1730 |
+
|
1731 |
+
this.unbindEvent = function() {
|
1732 |
+
var elements = utils.toElementsArray(this);
|
1733 |
+
eventsBucket.removeEvent(function(eventObj) {
|
1734 |
+
for (var i = 0; i < elements.length; i++) {
|
1735 |
+
if (this === undefined || eventObj.target === elements[i]) {
|
1736 |
+
return true;
|
1737 |
+
}
|
1738 |
+
}
|
1739 |
+
return false;
|
1740 |
+
});
|
1741 |
+
};
|
1742 |
+
|
1743 |
+
this.unbindEventWithSelectorOrCallback = function(selector) {
|
1744 |
+
var elements = utils.toElementsArray(this),
|
1745 |
+
callback = selector,
|
1746 |
+
compareFunction;
|
1747 |
+
|
1748 |
+
if (typeof selector === "function") {
|
1749 |
+
compareFunction = function(eventObj) {
|
1750 |
+
for (var i = 0; i < elements.length; i++) {
|
1751 |
+
if ((this === undefined || eventObj.target === elements[i]) && eventObj.callback === callback) {
|
1752 |
+
return true;
|
1753 |
+
}
|
1754 |
+
}
|
1755 |
+
return false;
|
1756 |
+
};
|
1757 |
+
}
|
1758 |
+
else {
|
1759 |
+
compareFunction = function(eventObj) {
|
1760 |
+
for (var i = 0; i < elements.length; i++) {
|
1761 |
+
if ((this === undefined || eventObj.target === elements[i]) && eventObj.selector === selector) {
|
1762 |
+
return true;
|
1763 |
+
}
|
1764 |
+
}
|
1765 |
+
return false;
|
1766 |
+
};
|
1767 |
+
}
|
1768 |
+
eventsBucket.removeEvent(compareFunction);
|
1769 |
+
};
|
1770 |
+
|
1771 |
+
this.unbindEventWithSelectorAndCallback = function(selector, callback) {
|
1772 |
+
var elements = utils.toElementsArray(this);
|
1773 |
+
eventsBucket.removeEvent(function(eventObj) {
|
1774 |
+
for (var i = 0; i < elements.length; i++) {
|
1775 |
+
if ((this === undefined || eventObj.target === elements[i]) && eventObj.selector === selector && eventObj.callback === callback) {
|
1776 |
+
return true;
|
1777 |
+
}
|
1778 |
+
}
|
1779 |
+
return false;
|
1780 |
+
});
|
1781 |
+
};
|
1782 |
+
|
1783 |
+
return this;
|
1784 |
+
};
|
1785 |
+
|
1786 |
+
|
1787 |
+
/**
|
1788 |
+
* @constructor
|
1789 |
+
* Processes 'arrive' events
|
1790 |
+
*/
|
1791 |
+
var ArriveEvents = function() {
|
1792 |
+
// Default options for 'arrive' event
|
1793 |
+
var arriveDefaultOptions = {
|
1794 |
+
fireOnAttributesModification: false,
|
1795 |
+
onceOnly: false,
|
1796 |
+
existing: false
|
1797 |
+
};
|
1798 |
+
|
1799 |
+
function getArriveObserverConfig(options) {
|
1800 |
+
var config = {
|
1801 |
+
attributes: false,
|
1802 |
+
childList: true,
|
1803 |
+
subtree: true
|
1804 |
+
};
|
1805 |
+
|
1806 |
+
if (options.fireOnAttributesModification) {
|
1807 |
+
config.attributes = true;
|
1808 |
+
}
|
1809 |
+
|
1810 |
+
return config;
|
1811 |
+
}
|
1812 |
+
|
1813 |
+
function onArriveMutation(mutations, registrationData) {
|
1814 |
+
mutations.forEach(function( mutation ) {
|
1815 |
+
var newNodes = mutation.addedNodes,
|
1816 |
+
targetNode = mutation.target,
|
1817 |
+
callbacksToBeCalled = [],
|
1818 |
+
node;
|
1819 |
+
|
1820 |
+
// If new nodes are added
|
1821 |
+
if( newNodes !== null && newNodes.length > 0 ) {
|
1822 |
+
utils.checkChildNodesRecursively(newNodes, registrationData, nodeMatchFunc, callbacksToBeCalled);
|
1823 |
+
}
|
1824 |
+
else if (mutation.type === "attributes") {
|
1825 |
+
if (nodeMatchFunc(targetNode, registrationData, callbacksToBeCalled)) {
|
1826 |
+
callbacksToBeCalled.push({ callback: registrationData.callback, elem: targetNode });
|
1827 |
+
}
|
1828 |
+
}
|
1829 |
+
|
1830 |
+
utils.callCallbacks(callbacksToBeCalled, registrationData);
|
1831 |
+
});
|
1832 |
+
}
|
1833 |
+
|
1834 |
+
function nodeMatchFunc(node, registrationData, callbacksToBeCalled) {
|
1835 |
+
// check a single node to see if it matches the selector
|
1836 |
+
if (utils.matchesSelector(node, registrationData.selector)) {
|
1837 |
+
if(node._id === undefined) {
|
1838 |
+
node._id = arriveUniqueId++;
|
1839 |
+
}
|
1840 |
+
// make sure the arrive event is not already fired for the element
|
1841 |
+
if (registrationData.firedElems.indexOf(node._id) == -1) {
|
1842 |
+
registrationData.firedElems.push(node._id);
|
1843 |
+
|
1844 |
+
return true;
|
1845 |
+
}
|
1846 |
+
}
|
1847 |
+
|
1848 |
+
return false;
|
1849 |
+
}
|
1850 |
+
|
1851 |
+
arriveEvents = new MutationEvents(getArriveObserverConfig, onArriveMutation);
|
1852 |
+
|
1853 |
+
var mutationBindEvent = arriveEvents.bindEvent;
|
1854 |
+
|
1855 |
+
// override bindEvent function
|
1856 |
+
arriveEvents.bindEvent = function(selector, options, callback) {
|
1857 |
+
|
1858 |
+
if (typeof callback === "undefined") {
|
1859 |
+
callback = options;
|
1860 |
+
options = arriveDefaultOptions;
|
1861 |
+
} else {
|
1862 |
+
options = utils.mergeArrays(arriveDefaultOptions, options);
|
1863 |
+
}
|
1864 |
+
|
1865 |
+
var elements = utils.toElementsArray(this);
|
1866 |
+
|
1867 |
+
if (options.existing) {
|
1868 |
+
var existing = [];
|
1869 |
+
|
1870 |
+
for (var i = 0; i < elements.length; i++) {
|
1871 |
+
var nodes = elements[i].querySelectorAll(selector);
|
1872 |
+
for (var j = 0; j < nodes.length; j++) {
|
1873 |
+
existing.push({ callback: callback, elem: nodes[j] });
|
1874 |
+
}
|
1875 |
+
}
|
1876 |
+
|
1877 |
+
// no need to bind event if the callback has to be fired only once and we have already found the element
|
1878 |
+
if (options.onceOnly && existing.length) {
|
1879 |
+
return callback.call(existing[0].elem, existing[0].elem);
|
1880 |
+
}
|
1881 |
+
|
1882 |
+
setTimeout(utils.callCallbacks, 1, existing);
|
1883 |
+
}
|
1884 |
+
|
1885 |
+
mutationBindEvent.call(this, selector, options, callback);
|
1886 |
+
};
|
1887 |
+
|
1888 |
+
return arriveEvents;
|
1889 |
+
};
|
1890 |
+
|
1891 |
+
|
1892 |
+
/**
|
1893 |
+
* @constructor
|
1894 |
+
* Processes 'leave' events
|
1895 |
+
*/
|
1896 |
+
var LeaveEvents = function() {
|
1897 |
+
// Default options for 'leave' event
|
1898 |
+
var leaveDefaultOptions = {};
|
1899 |
+
|
1900 |
+
function getLeaveObserverConfig() {
|
1901 |
+
var config = {
|
1902 |
+
childList: true,
|
1903 |
+
subtree: true
|
1904 |
+
};
|
1905 |
+
|
1906 |
+
return config;
|
1907 |
+
}
|
1908 |
+
|
1909 |
+
function onLeaveMutation(mutations, registrationData) {
|
1910 |
+
mutations.forEach(function( mutation ) {
|
1911 |
+
var removedNodes = mutation.removedNodes,
|
1912 |
+
callbacksToBeCalled = [];
|
1913 |
+
|
1914 |
+
if( removedNodes !== null && removedNodes.length > 0 ) {
|
1915 |
+
utils.checkChildNodesRecursively(removedNodes, registrationData, nodeMatchFunc, callbacksToBeCalled);
|
1916 |
+
}
|
1917 |
+
|
1918 |
+
utils.callCallbacks(callbacksToBeCalled, registrationData);
|
1919 |
+
});
|
1920 |
+
}
|
1921 |
+
|
1922 |
+
function nodeMatchFunc(node, registrationData) {
|
1923 |
+
return utils.matchesSelector(node, registrationData.selector);
|
1924 |
+
}
|
1925 |
+
|
1926 |
+
leaveEvents = new MutationEvents(getLeaveObserverConfig, onLeaveMutation);
|
1927 |
+
|
1928 |
+
var mutationBindEvent = leaveEvents.bindEvent;
|
1929 |
+
|
1930 |
+
// override bindEvent function
|
1931 |
+
leaveEvents.bindEvent = function(selector, options, callback) {
|
1932 |
+
|
1933 |
+
if (typeof callback === "undefined") {
|
1934 |
+
callback = options;
|
1935 |
+
options = leaveDefaultOptions;
|
1936 |
+
} else {
|
1937 |
+
options = utils.mergeArrays(leaveDefaultOptions, options);
|
1938 |
+
}
|
1939 |
+
|
1940 |
+
mutationBindEvent.call(this, selector, options, callback);
|
1941 |
+
};
|
1942 |
+
|
1943 |
+
return leaveEvents;
|
1944 |
+
};
|
1945 |
+
|
1946 |
+
|
1947 |
+
var arriveEvents = new ArriveEvents(),
|
1948 |
+
leaveEvents = new LeaveEvents();
|
1949 |
+
|
1950 |
+
function exposeUnbindApi(eventObj, exposeTo, funcName) {
|
1951 |
+
// expose unbind function with function overriding
|
1952 |
+
utils.addMethod(exposeTo, funcName, eventObj.unbindEvent);
|
1953 |
+
utils.addMethod(exposeTo, funcName, eventObj.unbindEventWithSelectorOrCallback);
|
1954 |
+
utils.addMethod(exposeTo, funcName, eventObj.unbindEventWithSelectorAndCallback);
|
1955 |
+
}
|
1956 |
+
|
1957 |
+
/*** expose APIs ***/
|
1958 |
+
function exposeApi(exposeTo) {
|
1959 |
+
exposeTo.arrive = arriveEvents.bindEvent;
|
1960 |
+
exposeUnbindApi(arriveEvents, exposeTo, "unbindArrive");
|
1961 |
+
|
1962 |
+
exposeTo.leave = leaveEvents.bindEvent;
|
1963 |
+
exposeUnbindApi(leaveEvents, exposeTo, "unbindLeave");
|
1964 |
+
}
|
1965 |
+
|
1966 |
+
if ($) {
|
1967 |
+
exposeApi($.fn);
|
1968 |
+
}
|
1969 |
+
exposeApi(HTMLElement.prototype);
|
1970 |
+
exposeApi(NodeList.prototype);
|
1971 |
+
exposeApi(HTMLCollection.prototype);
|
1972 |
+
exposeApi(HTMLDocument.prototype);
|
1973 |
+
exposeApi(Window.prototype);
|
1974 |
+
|
1975 |
+
var Arrive = {};
|
1976 |
+
// expose functions to unbind all arrive/leave events
|
1977 |
+
exposeUnbindApi(arriveEvents, Arrive, "unbindAllArrive");
|
1978 |
+
exposeUnbindApi(leaveEvents, Arrive, "unbindAllLeave");
|
1979 |
+
|
1980 |
+
return Arrive;
|
1981 |
+
|
1982 |
+
})(window, typeof jQuery === 'undefined' ? null : jQuery, undefined);
|
1983 |
+
|
1984 |
+
if (typeof ai_block_class_def !== 'undefined') {
|
1985 |
+
|
1986 |
+
/*!
|
1987 |
+
* JavaScript Cookie v2.2.0
|
1988 |
+
* https://github.com/js-cookie/js-cookie
|
1989 |
+
*
|
1990 |
+
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
|
1991 |
+
* Released under the MIT license
|
1992 |
+
*/
|
1993 |
+
;(function (factory) {
|
1994 |
+
var registeredInModuleLoader;
|
1995 |
+
if (typeof define === 'function' && define.amd) {
|
1996 |
+
define(factory);
|
1997 |
+
registeredInModuleLoader = true;
|
1998 |
+
}
|
1999 |
+
if (typeof exports === 'object') {
|
2000 |
+
module.exports = factory();
|
2001 |
+
registeredInModuleLoader = true;
|
2002 |
+
}
|
2003 |
+
if (!registeredInModuleLoader) {
|
2004 |
+
var OldCookies = window.Cookies;
|
2005 |
+
var api = window.Cookies = factory();
|
2006 |
+
api.noConflict = function () {
|
2007 |
+
window.Cookies = OldCookies;
|
2008 |
+
return api;
|
2009 |
+
};
|
2010 |
+
}
|
2011 |
+
}(function () {
|
2012 |
+
function extend () {
|
2013 |
+
var i = 0;
|
2014 |
+
var result = {};
|
2015 |
+
for (; i < arguments.length; i++) {
|
2016 |
+
var attributes = arguments[ i ];
|
2017 |
+
for (var key in attributes) {
|
2018 |
+
result[key] = attributes[key];
|
2019 |
+
}
|
2020 |
+
}
|
2021 |
+
return result;
|
2022 |
+
}
|
2023 |
+
|
2024 |
+
function decode (s) {
|
2025 |
+
return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
|
2026 |
+
}
|
2027 |
+
|
2028 |
+
function init (converter) {
|
2029 |
+
function api() {}
|
2030 |
+
|
2031 |
+
function set (key, value, attributes) {
|
2032 |
+
if (typeof document === 'undefined') {
|
2033 |
+
return;
|
2034 |
+
}
|
2035 |
+
|
2036 |
+
attributes = extend({
|
2037 |
+
path: '/',
|
2038 |
+
sameSite: 'Lax'
|
2039 |
+
}, api.defaults, attributes);
|
2040 |
+
|
2041 |
+
if (typeof attributes.expires === 'number') {
|
2042 |
+
attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);
|
2043 |
+
}
|
2044 |
+
|
2045 |
+
// We're using "expires" because "max-age" is not supported by IE
|
2046 |
+
attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
|
2047 |
+
|
2048 |
+
try {
|
2049 |
+
var result = JSON.stringify(value);
|
2050 |
+
if (/^[\{\[]/.test(result)) {
|
2051 |
+
value = result;
|
2052 |
+
}
|
2053 |
+
} catch (e) {}
|
2054 |
+
|
2055 |
+
value = converter.write ?
|
2056 |
+
converter.write(value, key) :
|
2057 |
+
encodeURIComponent(String(value))
|
2058 |
+
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
|
2059 |
+
|
2060 |
+
key = encodeURIComponent(String(key))
|
2061 |
+
.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)
|
2062 |
+
.replace(/[\(\)]/g, escape);
|
2063 |
+
|
2064 |
+
var stringifiedAttributes = '';
|
2065 |
+
for (var attributeName in attributes) {
|
2066 |
+
if (!attributes[attributeName]) {
|
2067 |
+
continue;
|
2068 |
+
}
|
2069 |
+
stringifiedAttributes += '; ' + attributeName;
|
2070 |
+
if (attributes[attributeName] === true) {
|
2071 |
+
continue;
|
2072 |
+
}
|
2073 |
+
|
2074 |
+
// Considers RFC 6265 section 5.2:
|
2075 |
+
// ...
|
2076 |
+
// 3. If the remaining unparsed-attributes contains a %x3B (";")
|
2077 |
+
// character:
|
2078 |
+
// Consume the characters of the unparsed-attributes up to,
|
2079 |
+
// not including, the first %x3B (";") character.
|
2080 |
+
// ...
|
2081 |
+
stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
|
2082 |
+
}
|
2083 |
+
|
2084 |
+
return (document.cookie = key + '=' + value + stringifiedAttributes);
|
2085 |
+
}
|
2086 |
+
|
2087 |
+
function get (key, json) {
|
2088 |
+
if (typeof document === 'undefined') {
|
2089 |
+
return;
|
2090 |
+
}
|
2091 |
+
|
2092 |
+
var jar = {};
|
2093 |
+
// To prevent the for loop in the first place assign an empty array
|
2094 |
+
// in case there are no cookies at all.
|
2095 |
+
var cookies = document.cookie ? document.cookie.split('; ') : [];
|
2096 |
+
var i = 0;
|
2097 |
+
|
2098 |
+
for (; i < cookies.length; i++) {
|
2099 |
+
var parts = cookies[i].split('=');
|
2100 |
+
var cookie = parts.slice(1).join('=');
|
2101 |
+
|
2102 |
+
if (!json && cookie.charAt(0) === '"') {
|
2103 |
+
cookie = cookie.slice(1, -1);
|
2104 |
+
}
|
2105 |
+
|
2106 |
+
try {
|
2107 |
+
var name = decode(parts[0]);
|
2108 |
+
cookie = (converter.read || converter)(cookie, name) ||
|
2109 |
+
decode(cookie);
|
2110 |
+
|
2111 |
+
if (json) {
|
2112 |
+
try {
|
2113 |
+
cookie = JSON.parse(cookie);
|
2114 |
+
} catch (e) {}
|
2115 |
+
}
|
2116 |
+
|
2117 |
+
jar[name] = cookie;
|
2118 |
+
|
2119 |
+
if (key === name) {
|
2120 |
+
break;
|
2121 |
+
}
|
2122 |
+
} catch (e) {}
|
2123 |
+
}
|
2124 |
+
|
2125 |
+
return key ? jar[key] : jar;
|
2126 |
+
}
|
2127 |
+
|
2128 |
+
api.set = set;
|
2129 |
+
api.get = function (key) {
|
2130 |
+
return get(key, false /* read as raw */);
|
2131 |
+
};
|
2132 |
+
api.getJSON = function (key) {
|
2133 |
+
return get(key, true /* read as json */);
|
2134 |
+
};
|
2135 |
+
api.remove = function (key, attributes) {
|
2136 |
+
set(key, '', extend(attributes, {
|
2137 |
+
expires: -1
|
2138 |
+
}));
|
2139 |
+
};
|
2140 |
+
|
2141 |
+
api.defaults = {};
|
2142 |
+
|
2143 |
+
api.withConverter = init;
|
2144 |
+
|
2145 |
+
return api;
|
2146 |
+
}
|
2147 |
+
|
2148 |
+
return init(function () {});
|
2149 |
+
}));
|
2150 |
+
|
2151 |
+
|
2152 |
+
AiCookies = Cookies.noConflict();
|
2153 |
+
|
2154 |
+
|
2155 |
+
ai_check_block = function (block) {
|
2156 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
2157 |
+
// var ai_debug = false;
|
2158 |
+
|
2159 |
+
if (block == null) {
|
2160 |
+
return true;
|
2161 |
+
}
|
2162 |
+
|
2163 |
+
var ai_cookie_name = 'aiBLOCKS';
|
2164 |
+
var ai_cookie = AiCookies.getJSON (ai_cookie_name);
|
2165 |
+
ai_debug_cookie_status = '';
|
2166 |
+
|
2167 |
+
if (ai_cookie == null) {
|
2168 |
+
ai_cookie = {};
|
2169 |
+
}
|
2170 |
+
|
2171 |
+
if (typeof ai_delay_showing_pageviews !== 'undefined') {
|
2172 |
+
if (!ai_cookie.hasOwnProperty (block)) {
|
2173 |
+
ai_cookie [block] = {};
|
2174 |
+
}
|
2175 |
+
|
2176 |
+
if (!ai_cookie [block].hasOwnProperty ('d')) {
|
2177 |
+
ai_cookie [block]['d'] = ai_delay_showing_pageviews;
|
2178 |
+
|
2179 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'NO COOKIE DATA d, delayed for', ai_delay_showing_pageviews, 'pageviews');
|
2180 |
+
}
|
2181 |
+
}
|
2182 |
+
|
2183 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
2184 |
+
for (var cookie_block_property in ai_cookie [block]) {
|
2185 |
+
|
2186 |
+
if (cookie_block_property == 'x') {
|
2187 |
+
|
2188 |
+
var code_hash = '';
|
2189 |
+
var block_object = document.querySelectorAll ('span[data-ai-block="'+block+'"]') [0]
|
2190 |
+
if ("aiHash" in block_object.dataset) {
|
2191 |
+
code_hash = block_object.dataset.aiHash;
|
2192 |
+
}
|
2193 |
+
|
2194 |
+
var cookie_code_hash = '';
|
2195 |
+
if (ai_cookie [block].hasOwnProperty ('h')) {
|
2196 |
+
cookie_code_hash = ai_cookie [block]['h'];
|
2197 |
+
}
|
2198 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'x cookie hash', cookie_code_hash, 'code hash', code_hash);
|
2199 |
+
|
2200 |
+
var date = new Date();
|
2201 |
+
var closed_for = ai_cookie [block][cookie_block_property] - Math.round (date.getTime() / 1000);
|
2202 |
+
if (closed_for > 0 && cookie_code_hash == code_hash) {
|
2203 |
+
var message = 'closed for ' + closed_for + ' s = ' + (Math.round (10000 * closed_for / 3600 / 24) / 10000) + ' days';
|
2204 |
+
ai_debug_cookie_status = message;
|
2205 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2206 |
+
if (ai_debug) console.log ('');
|
2207 |
+
|
2208 |
+
return false;
|
2209 |
+
} else {
|
2210 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'removing x');
|
2211 |
+
|
2212 |
+
ai_set_cookie (block, 'x', '');
|
2213 |
+
if (!ai_cookie [block].hasOwnProperty ('i') && !ai_cookie [block].hasOwnProperty ('c')) {
|
2214 |
+
ai_set_cookie (block, 'h', '');
|
2215 |
+
}
|
2216 |
+
}
|
2217 |
+
} else
|
2218 |
+
if (cookie_block_property == 'd') {
|
2219 |
+
if (ai_cookie [block][cookie_block_property] != 0) {
|
2220 |
+
var message = 'delayed for ' + ai_cookie [block][cookie_block_property] + ' pageviews';
|
2221 |
+
ai_debug_cookie_status = message;
|
2222 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2223 |
+
if (ai_debug) console.log ('');
|
2224 |
+
|
2225 |
+
return false;
|
2226 |
+
}
|
2227 |
+
} else
|
2228 |
+
if (cookie_block_property == 'i') {
|
2229 |
+
|
2230 |
+
var code_hash = '';
|
2231 |
+
var block_object = document.querySelectorAll ('span[data-ai-block="'+block+'"]') [0]
|
2232 |
+
if ("aiHash" in block_object.dataset) {
|
2233 |
+
code_hash = block_object.dataset.aiHash;
|
2234 |
+
}
|
2235 |
+
|
2236 |
+
var cookie_code_hash = '';
|
2237 |
+
if (ai_cookie [block].hasOwnProperty ('h')) {
|
2238 |
+
cookie_code_hash = ai_cookie [block]['h'];
|
2239 |
+
}
|
2240 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'i cookie hash', cookie_code_hash, 'code hash', code_hash);
|
2241 |
+
|
2242 |
+
if (ai_cookie [block][cookie_block_property] == 0 && cookie_code_hash == code_hash) {
|
2243 |
+
var message = 'max impressions reached';
|
2244 |
+
ai_debug_cookie_status = message;
|
2245 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2246 |
+
if (ai_debug) console.log ('');
|
2247 |
+
|
2248 |
+
return false;
|
2249 |
+
} else
|
2250 |
+
|
2251 |
+
if (ai_cookie [block][cookie_block_property] < 0 && cookie_code_hash == code_hash) {
|
2252 |
+
var date = new Date();
|
2253 |
+
var closed_for = - ai_cookie [block][cookie_block_property] - Math.round (date.getTime() / 1000);
|
2254 |
+
if (closed_for > 0) {
|
2255 |
+
var message = 'max imp. reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)';
|
2256 |
+
ai_debug_cookie_status = message;
|
2257 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2258 |
+
if (ai_debug) console.log ('');
|
2259 |
+
|
2260 |
+
return false;
|
2261 |
+
} else {
|
2262 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'removing i');
|
2263 |
+
|
2264 |
+
ai_set_cookie (block, 'i', '');
|
2265 |
+
if (!ai_cookie [block].hasOwnProperty ('c') && !ai_cookie [block].hasOwnProperty ('x')) {
|
2266 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'cookie h removed');
|
2267 |
+
|
2268 |
+
ai_set_cookie (block, 'h', '');
|
2269 |
+
}
|
2270 |
+
}
|
2271 |
+
}
|
2272 |
+
}
|
2273 |
+
if (cookie_block_property == 'ipt') {
|
2274 |
+
if (ai_cookie [block][cookie_block_property] == 0) {
|
2275 |
+
|
2276 |
+
var date = new Date();
|
2277 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
2278 |
+
var closed_for = ai_cookie [block]['it'] - timestamp;
|
2279 |
+
|
2280 |
+
if (closed_for > 0) {
|
2281 |
+
var message = 'max imp. per time reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)';
|
2282 |
+
ai_debug_cookie_status = message;
|
2283 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2284 |
+
if (ai_debug) console.log ('');
|
2285 |
+
|
2286 |
+
return false;
|
2287 |
+
}
|
2288 |
+
}
|
2289 |
+
}
|
2290 |
+
if (cookie_block_property == 'c') {
|
2291 |
+
|
2292 |
+
var code_hash = '';
|
2293 |
+
var block_object = document.querySelectorAll ('span[data-ai-block="'+block+'"]') [0]
|
2294 |
+
if ("aiHash" in block_object.dataset) {
|
2295 |
+
code_hash = block_object.dataset.aiHash;
|
2296 |
+
}
|
2297 |
+
|
2298 |
+
var cookie_code_hash = '';
|
2299 |
+
if (ai_cookie [block].hasOwnProperty ('h')) {
|
2300 |
+
cookie_code_hash = ai_cookie [block]['h'];
|
2301 |
+
}
|
2302 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'c cookie hash', cookie_code_hash, 'code hash', code_hash);
|
2303 |
+
|
2304 |
+
if (ai_cookie [block][cookie_block_property] == 0 && cookie_code_hash == code_hash) {
|
2305 |
+
var message = 'max clicks reached';
|
2306 |
+
ai_debug_cookie_status = message;
|
2307 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2308 |
+
if (ai_debug) console.log ('');
|
2309 |
+
|
2310 |
+
return false;
|
2311 |
+
} else
|
2312 |
+
|
2313 |
+
if (ai_cookie [block][cookie_block_property] < 0 && cookie_code_hash == code_hash) {
|
2314 |
+
var date = new Date();
|
2315 |
+
var closed_for = - ai_cookie [block][cookie_block_property] - Math.round (date.getTime() / 1000);
|
2316 |
+
if (closed_for > 0) {
|
2317 |
+
var message = 'max clicks reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)';
|
2318 |
+
ai_debug_cookie_status = message;
|
2319 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2320 |
+
if (ai_debug) console.log ('');
|
2321 |
+
|
2322 |
+
return false;
|
2323 |
+
} else {
|
2324 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'removing c');
|
2325 |
+
|
2326 |
+
ai_set_cookie (block, 'c', '');
|
2327 |
+
if (!ai_cookie [block].hasOwnProperty ('i') && !ai_cookie [block].hasOwnProperty ('x')) {
|
2328 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'cookie h removed');
|
2329 |
+
|
2330 |
+
ai_set_cookie (block, 'h', '');
|
2331 |
+
}
|
2332 |
+
}
|
2333 |
+
}
|
2334 |
+
}
|
2335 |
+
if (cookie_block_property == 'cpt') {
|
2336 |
+
if (ai_cookie [block][cookie_block_property] == 0) {
|
2337 |
+
|
2338 |
+
var date = new Date();
|
2339 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
2340 |
+
var closed_for = ai_cookie [block]['ct'] - timestamp;
|
2341 |
+
|
2342 |
+
if (closed_for > 0) {
|
2343 |
+
var message = 'max clicks per time reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)';
|
2344 |
+
ai_debug_cookie_status = message;
|
2345 |
+
if (ai_debug) console.log ('AI CHECK block', block, message);
|
2346 |
+
if (ai_debug) console.log ('');
|
2347 |
+
|
2348 |
+
return false;
|
2349 |
+
}
|
2350 |
+
}
|
2351 |
+
}
|
2352 |
+
}
|
2353 |
+
|
2354 |
+
if (ai_cookie.hasOwnProperty ('G') && ai_cookie ['G'].hasOwnProperty ('cpt')) {
|
2355 |
+
if (ai_cookie ['G']['cpt'] == 0) {
|
2356 |
+
|
2357 |
+
var date = new Date();
|
2358 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
2359 |
+
var closed_for = ai_cookie ['G']['ct'] - timestamp;
|
2360 |
+
|
2361 |
+
if (closed_for > 0) {
|
2362 |
+
var message = 'max global clicks per time reached (' + Math. round (10000 * closed_for / 24 / 3600) / 10000 + ' days = ' + closed_for + ' s)';
|
2363 |
+
ai_debug_cookie_status = message;
|
2364 |
+
if (ai_debug) console.log ('AI CHECK GLOBAL', message);
|
2365 |
+
if (ai_debug) console.log ('');
|
2366 |
+
|
2367 |
+
return false;
|
2368 |
+
}
|
2369 |
+
}
|
2370 |
+
}
|
2371 |
+
}
|
2372 |
+
|
2373 |
+
ai_debug_cookie_status = 'OK';
|
2374 |
+
if (ai_debug) console.log ('AI CHECK block', block, 'OK');
|
2375 |
+
if (ai_debug) console.log ('');
|
2376 |
+
|
2377 |
+
return true;
|
2378 |
+
}
|
2379 |
+
|
2380 |
+
ai_check_and_insert_block = function (block, id) {
|
2381 |
+
|
2382 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
2383 |
+
// var ai_debug = false;
|
2384 |
+
|
2385 |
+
if (block == null) {
|
2386 |
+
return true;
|
2387 |
+
}
|
2388 |
+
|
2389 |
+
var ai_block_divs = document.getElementsByClassName (id);
|
2390 |
+
if (ai_block_divs.length) {
|
2391 |
+
|
2392 |
+
var ai_block_div = ai_block_divs [0];
|
2393 |
+
var wrapping_div = ai_block_div.closest ('.' + ai_block_class_def);
|
2394 |
+
|
2395 |
+
var insert_block = ai_check_block (block);
|
2396 |
+
|
2397 |
+
if (!insert_block) {
|
2398 |
+
// if (ai_debug) console.log ('AI CHECK FAILED, !insert_block', block);
|
2399 |
+
// Check for a fallback block
|
2400 |
+
if (parseInt (ai_block_div.getAttribute ('limits-fallback')) != 0 && ai_block_div.hasAttribute ('data-fallback-code')) {
|
2401 |
+
|
2402 |
+
if (ai_debug) console.log ('AI CHECK FAILED, INSERTING FALLBACK BLOCK', ai_block_div.getAttribute ('limits-fallback'));
|
2403 |
+
|
2404 |
+
ai_block_div.setAttribute ('data-code', ai_block_div.getAttribute ('data-fallback-code'));
|
2405 |
+
|
2406 |
+
if (wrapping_div != null && wrapping_div.hasAttribute ('data-ai')) {
|
2407 |
+
if (ai_block_div.hasAttribute ('fallback-tracking') && ai_block_div.hasAttribute ('fallback_level')) {
|
2408 |
+
wrapping_div.setAttribute ('data-ai-' + ai_block_div.getAttribute ('fallback_level'), ai_block_div.getAttribute ('fallback-tracking'));
|
2409 |
+
}
|
2410 |
+
}
|
2411 |
+
|
2412 |
+
insert_block = true;
|
2413 |
+
}
|
2414 |
+
}
|
2415 |
+
|
2416 |
+
// Remove selector to prevent further insertions at this element
|
2417 |
+
ai_block_div.removeAttribute ('data-selector');
|
2418 |
+
|
2419 |
+
if (insert_block) {
|
2420 |
+
ai_insert_code (ai_block_div);
|
2421 |
+
|
2422 |
+
if (wrapping_div) {
|
2423 |
+
|
2424 |
+
var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block');
|
2425 |
+
if (wrapping_div && debug_block.length) {
|
2426 |
+
wrapping_div.classList.remove ('ai-list-block');
|
2427 |
+
wrapping_div.classList.remove ('ai-list-block-ip');
|
2428 |
+
wrapping_div.classList.remove ('ai-list-block-filter');
|
2429 |
+
wrapping_div.style.visibility = '';
|
2430 |
+
if (wrapping_div.classList.contains ('ai-remove-position')) {
|
2431 |
+
wrapping_div.style.position = '';
|
2432 |
+
}
|
2433 |
+
}
|
2434 |
+
|
2435 |
+
}
|
2436 |
+
} else {
|
2437 |
+
var ai_block_div_data = ai_block_div.closest ('div[data-ai]');
|
2438 |
+
if (ai_block_div_data != null && typeof ai_block_div_data.getAttribute ("data-ai") != "undefined") {
|
2439 |
+
var data = JSON.parse (b64d (ai_block_div_data.getAttribute ("data-ai")));
|
2440 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
2441 |
+
data [1] = "";
|
2442 |
+
ai_block_div_data.setAttribute ("data-ai", b64e (JSON.stringify (data)));
|
2443 |
+
}
|
2444 |
+
}
|
2445 |
+
var debug_block = wrapping_div.querySelectorAll ('.ai-debug-block');
|
2446 |
+
if (wrapping_div && debug_block.length) {
|
2447 |
+
wrapping_div.classList.remove ('ai-list-block');
|
2448 |
+
wrapping_div.classList.remove ('ai-list-block-ip');
|
2449 |
+
wrapping_div.classList.remove ('ai-list-block-filter');
|
2450 |
+
wrapping_div.style.visibility = '';
|
2451 |
+
if (wrapping_div.classList.contains ('ai-remove-position')) {
|
2452 |
+
wrapping_div.style.position = '';
|
2453 |
+
}
|
2454 |
+
}
|
2455 |
+
}
|
2456 |
+
|
2457 |
+
// Remove class
|
2458 |
+
ai_block_div.classList.remove (id);
|
2459 |
+
}
|
2460 |
+
|
2461 |
+
var ai_debug_bars = document.querySelectorAll ('.' + id + '-dbg');
|
2462 |
+
|
2463 |
+
// for (let ai_debug_bar of ai_debug_bars) {
|
2464 |
+
for (var index = 0, len = ai_debug_bars.length; index < len; index++) {
|
2465 |
+
var ai_debug_bar = ai_debug_bars [index];
|
2466 |
+
ai_debug_bar.querySelector ('.ai-status').textContent = ai_debug_cookie_status;
|
2467 |
+
ai_debug_bar.querySelector ('.ai-cookie-data').textContent = ai_get_cookie_text (block);
|
2468 |
+
ai_debug_bar.classList.remove (id + '-dbg');
|
2469 |
+
}
|
2470 |
+
}
|
2471 |
+
|
2472 |
+
function ai_load_cookie () {
|
2473 |
+
|
2474 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 3
|
2475 |
+
// var ai_debug = false;
|
2476 |
+
|
2477 |
+
var ai_cookie_name = 'aiBLOCKS';
|
2478 |
+
var ai_cookie = AiCookies.getJSON (ai_cookie_name);
|
2479 |
+
|
2480 |
+
if (ai_cookie == null) {
|
2481 |
+
ai_cookie = {};
|
2482 |
+
|
2483 |
+
if (ai_debug) console.log ('AI COOKIE NOT PRESENT');
|
2484 |
+
}
|
2485 |
+
|
2486 |
+
if (ai_debug) console.log ('AI COOKIE LOAD', ai_cookie);
|
2487 |
+
|
2488 |
+
return ai_cookie;
|
2489 |
+
}
|
2490 |
+
|
2491 |
+
function ai_get_cookie (block, property) {
|
2492 |
+
|
2493 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 4
|
2494 |
+
// var ai_debug = false;
|
2495 |
+
|
2496 |
+
var value = '';
|
2497 |
+
var ai_cookie = ai_load_cookie ();
|
2498 |
+
|
2499 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
2500 |
+
if (ai_cookie [block].hasOwnProperty (property)) {
|
2501 |
+
value = ai_cookie [block][property];
|
2502 |
+
}
|
2503 |
+
}
|
2504 |
+
|
2505 |
+
if (ai_debug) console.log ('AI COOKIE GET block:', block, 'property:', property, 'value:', value);
|
2506 |
+
|
2507 |
+
return value;
|
2508 |
+
}
|
2509 |
+
|
2510 |
+
function ai_set_cookie (block, property, value) {
|
2511 |
+
|
2512 |
+
function isEmpty (obj) {
|
2513 |
+
for (var key in obj) {
|
2514 |
+
if (obj.hasOwnProperty (key))
|
2515 |
+
return false;
|
2516 |
+
}
|
2517 |
+
return true;
|
2518 |
+
}
|
2519 |
+
|
2520 |
+
var ai_cookie_name = 'aiBLOCKS';
|
2521 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 5
|
2522 |
+
// var ai_debug = false;
|
2523 |
+
|
2524 |
+
if (ai_debug) console.log ('AI COOKIE SET block:', block, 'property:', property, 'value:', value);
|
2525 |
+
|
2526 |
+
var ai_cookie = ai_load_cookie ();
|
2527 |
+
|
2528 |
+
if (value === '') {
|
2529 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
2530 |
+
delete ai_cookie [block][property];
|
2531 |
+
if (isEmpty (ai_cookie [block])) {
|
2532 |
+
delete ai_cookie [block];
|
2533 |
+
}
|
2534 |
+
}
|
2535 |
+
} else {
|
2536 |
+
if (!ai_cookie.hasOwnProperty (block)) {
|
2537 |
+
ai_cookie [block] = {};
|
2538 |
+
}
|
2539 |
+
ai_cookie [block][property] = value;
|
2540 |
+
}
|
2541 |
+
|
2542 |
+
if (Object.keys (ai_cookie).length === 0 && ai_cookie.constructor === Object) {
|
2543 |
+
AiCookies.remove (ai_cookie_name);
|
2544 |
+
|
2545 |
+
if (ai_debug) console.log ('AI COOKIE REMOVED');
|
2546 |
+
} else {
|
2547 |
+
AiCookies.set (ai_cookie_name, ai_cookie, {expires: 365, path: '/'});
|
2548 |
+
}
|
2549 |
+
|
2550 |
+
if (ai_debug) {
|
2551 |
+
var ai_cookie_test = AiCookies.getJSON (ai_cookie_name);
|
2552 |
+
if (typeof (ai_cookie_test) != 'undefined') {
|
2553 |
+
console.log ('AI COOKIE NEW', ai_cookie_test);
|
2554 |
+
|
2555 |
+
console.log ('AI COOKIE DATA:');
|
2556 |
+
for (var cookie_block in ai_cookie_test) {
|
2557 |
+
for (var cookie_block_property in ai_cookie_test [cookie_block]) {
|
2558 |
+
if (cookie_block_property == 'x') {
|
2559 |
+
var date = new Date();
|
2560 |
+
var closed_for = ai_cookie_test [cookie_block][cookie_block_property] - Math.round (date.getTime() / 1000);
|
2561 |
+
console.log (' BLOCK', cookie_block, 'closed for', closed_for, 's = ', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days');
|
2562 |
+
} else
|
2563 |
+
if (cookie_block_property == 'd') {
|
2564 |
+
console.log (' BLOCK', cookie_block, 'delayed for', ai_cookie_test [cookie_block][cookie_block_property], 'pageviews');
|
2565 |
+
} else
|
2566 |
+
if (cookie_block_property == 'e') {
|
2567 |
+
console.log (' BLOCK', cookie_block, 'show every', ai_cookie_test [cookie_block][cookie_block_property], 'pageviews');
|
2568 |
+
} else
|
2569 |
+
if (cookie_block_property == 'i') {
|
2570 |
+
var i = ai_cookie_test [cookie_block][cookie_block_property];
|
2571 |
+
if (i >= 0) {
|
2572 |
+
console.log (' BLOCK', cookie_block, ai_cookie_test [cookie_block][cookie_block_property], 'impressions until limit');
|
2573 |
+
} else {
|
2574 |
+
var date = new Date();
|
2575 |
+
var closed_for = - i - Math.round (date.getTime() / 1000);
|
2576 |
+
console.log (' BLOCK', cookie_block, 'max impressions, closed for', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days');
|
2577 |
+
}
|
2578 |
+
} else
|
2579 |
+
if (cookie_block_property == 'ipt') {
|
2580 |
+
console.log (' BLOCK', cookie_block, ai_cookie_test [cookie_block][cookie_block_property], 'impressions until limit per time period');
|
2581 |
+
} else
|
2582 |
+
if (cookie_block_property == 'it') {
|
2583 |
+
var date = new Date();
|
2584 |
+
var closed_for = ai_cookie_test [cookie_block][cookie_block_property] - Math.round (date.getTime() / 1000);
|
2585 |
+
console.log (' BLOCK', cookie_block, 'impressions limit expiration in', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days');
|
2586 |
+
} else
|
2587 |
+
if (cookie_block_property == 'c') {
|
2588 |
+
var c = ai_cookie_test [cookie_block][cookie_block_property]
|
2589 |
+
if (c >= 0) {
|
2590 |
+
console.log (' BLOCK', cookie_block, c, 'clicks until limit');
|
2591 |
+
} else {
|
2592 |
+
var date = new Date();
|
2593 |
+
var closed_for = - c - Math.round (date.getTime() / 1000);
|
2594 |
+
console.log (' BLOCK', cookie_block, 'max clicks, closed for', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days');
|
2595 |
+
}
|
2596 |
+
} else
|
2597 |
+
if (cookie_block_property == 'cpt') {
|
2598 |
+
console.log (' BLOCK', cookie_block, ai_cookie_test [cookie_block][cookie_block_property], 'clicks until limit per time period');
|
2599 |
+
} else
|
2600 |
+
if (cookie_block_property == 'ct') {
|
2601 |
+
var date = new Date();
|
2602 |
+
var closed_for = ai_cookie_test [cookie_block][cookie_block_property] - Math.round (date.getTime() / 1000);
|
2603 |
+
console.log (' BLOCK', cookie_block, 'clicks limit expiration in ', closed_for, 's =', Math.round (10000 * closed_for / 3600 / 24) / 10000, 'days');
|
2604 |
+
} else
|
2605 |
+
if (cookie_block_property == 'h') {
|
2606 |
+
console.log (' BLOCK', cookie_block, 'hash', ai_cookie_test [cookie_block][cookie_block_property]);
|
2607 |
+
} else
|
2608 |
+
console.log (' ?:', cookie_block, ':', cookie_block_property, ai_cookie_test [cookie_block][cookie_block_property]);
|
2609 |
+
}
|
2610 |
+
console.log ('');
|
2611 |
+
}
|
2612 |
+
} else console.log ('AI COOKIE NOT PRESENT');
|
2613 |
+
}
|
2614 |
+
|
2615 |
+
return ai_cookie;
|
2616 |
+
}
|
2617 |
+
|
2618 |
+
ai_get_cookie_text = function (block) {
|
2619 |
+
var ai_cookie_name = 'aiBLOCKS';
|
2620 |
+
var ai_cookie = AiCookies.getJSON (ai_cookie_name);
|
2621 |
+
|
2622 |
+
if (ai_cookie == null) {
|
2623 |
+
ai_cookie = {};
|
2624 |
+
}
|
2625 |
+
|
2626 |
+
var global_data = '';
|
2627 |
+
if (ai_cookie.hasOwnProperty ('G')) {
|
2628 |
+
global_data = 'G[' + JSON.stringify (ai_cookie ['G']).replace (/\"/g, '').replace ('{', '').replace('}', '') + '] ';
|
2629 |
+
}
|
2630 |
+
|
2631 |
+
var block_data = '';
|
2632 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
2633 |
+
block_data = JSON.stringify (ai_cookie [block]).replace (/\"/g, '').replace ('{', '').replace('}', '');
|
2634 |
+
}
|
2635 |
+
|
2636 |
+
return global_data + block_data;
|
2637 |
+
}
|
2638 |
+
|
2639 |
+
}
|
2640 |
+
if (typeof ai_internal_tracking !== 'undefined') {
|
2641 |
+
|
2642 |
+
function matchRuleShort (str, rule) {
|
2643 |
+
var escapeRegex = (str) => str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
2644 |
+
return new RegExp("^" + rule.split("*").map(escapeRegex).join(".*") + "$").test(str);
|
2645 |
+
}
|
2646 |
+
|
2647 |
+
function ai_addEventListener (el, eventName, eventHandler, selector) {
|
2648 |
+
if (selector) {
|
2649 |
+
const wrappedHandler = (e) => {
|
2650 |
+
if (e.target && e.target.matches(selector)) {
|
2651 |
+
eventHandler(e);
|
2652 |
+
}
|
2653 |
+
};
|
2654 |
+
el.addEventListener (eventName, wrappedHandler);
|
2655 |
+
return wrappedHandler;
|
2656 |
+
} else {
|
2657 |
+
el.addEventListener (eventName, eventHandler);
|
2658 |
+
return eventHandler;
|
2659 |
+
}
|
2660 |
+
}
|
2661 |
+
|
2662 |
+
// ***
|
2663 |
+
//(function($) {
|
2664 |
+
// Tracking handler manager
|
2665 |
+
// ***
|
2666 |
+
// $.fn.iframeTracker = function(handler) {
|
2667 |
+
installIframeTracker = function (handler, target) {
|
2668 |
+
// Building handler object from handler function
|
2669 |
+
if (typeof handler == "function") {
|
2670 |
+
handler = {
|
2671 |
+
blurCallback: handler
|
2672 |
+
};
|
2673 |
+
}
|
2674 |
+
|
2675 |
+
// ***
|
2676 |
+
// var target = this.get();
|
2677 |
+
if (handler === null || handler === false) {
|
2678 |
+
// $.iframeTracker.untrack(target);
|
2679 |
+
ai_iframeTracker.untrack (target);
|
2680 |
+
} else if (typeof handler == "object") {
|
2681 |
+
// $.iframeTracker.track(target, handler);
|
2682 |
+
ai_iframeTracker.track (target, handler);
|
2683 |
+
} else {
|
2684 |
+
throw new Error ("Wrong handler type (must be an object, or null|false to untrack)");
|
2685 |
+
}
|
2686 |
+
return this;
|
2687 |
+
};
|
2688 |
+
|
2689 |
+
// ***
|
2690 |
+
var ai_mouseoverHander = function (handler, event){
|
2691 |
+
event.data = {'handler': handler};
|
2692 |
+
ai_iframeTracker.mouseoverListener (event);
|
2693 |
+
}
|
2694 |
+
var ai_mouseoutHander = function (handler, event){
|
2695 |
+
event.data = {'handler': handler};
|
2696 |
+
ai_iframeTracker.mouseoutListener (event);
|
2697 |
+
}
|
2698 |
+
|
2699 |
+
// Iframe tracker common object
|
2700 |
+
// ***
|
2701 |
+
// $.iframeTracker = {
|
2702 |
+
ai_iframeTracker = {
|
2703 |
+
// State
|
2704 |
+
focusRetriever: null, // Element used for restoring focus on window (element)
|
2705 |
+
focusRetrieved: false, // Says if the focus was retrieved on the current page (bool)
|
2706 |
+
handlersList: [], // Store a list of every trakers (created by calling $(selector).iframeTracker...)
|
2707 |
+
isIE8AndOlder: false, // true for Internet Explorer 8 and older
|
2708 |
+
|
2709 |
+
// Init (called once on document ready)
|
2710 |
+
init: function () {
|
2711 |
+
// ***
|
2712 |
+
// Determine browser version (IE8-)
|
2713 |
+
try {
|
2714 |
+
// ### AI
|
2715 |
+
// To prevent replacement of regexp pattern with CDN url (CDN code bug)
|
2716 |
+
var msie_regexp = new RegExp ('(msie) ([\\w.]+)', 'i');
|
2717 |
+
|
2718 |
+
// var matches = navigator.userAgent.match(/(msie) ([\w.]+)/i);
|
2719 |
+
var matches = navigator.userAgent.match (msie_regexp);
|
2720 |
+
// ### /AI
|
2721 |
+
|
2722 |
+
if (matches [2] < 9) {
|
2723 |
+
this.isIE8AndOlder = true;
|
2724 |
+
}
|
2725 |
+
} catch (ex2) {}
|
2726 |
+
|
2727 |
+
// Listening window blur
|
2728 |
+
// ***
|
2729 |
+
// $(window).focus();
|
2730 |
+
window.focus ();
|
2731 |
+
|
2732 |
+
// ***
|
2733 |
+
// $(window).blur(function(e) {
|
2734 |
+
window.addEventListener ('blur', (event) => {
|
2735 |
+
// ***
|
2736 |
+
// $.iframeTracker.windowLoseFocus (e);
|
2737 |
+
ai_iframeTracker.windowLoseFocus (event);
|
2738 |
+
});
|
2739 |
+
|
2740 |
+
// Focus retriever (get the focus back to the page, on mouse move)
|
2741 |
+
// ### AI
|
2742 |
+
// ### added label for tools like https://web.dev/measure/
|
2743 |
+
// ***
|
2744 |
+
// $("body").append('<div style="position:fixed; top:0; left:0; overflow:hidden;"><input style="position:absolute; left:-300px;" type="text" value="" id="focus_retriever" readonly="true" /><label for="focus_retriever"> </label></div>');
|
2745 |
+
// document.querySelector ('body').innerHTML += '<div style="position:fixed; top:0; left:0; overflow:hidden;"><input style="position:absolute; left:-300px;" type="text" value="" id=" focus_retriever" readonly="true" /><label for="focus_retriever"> </label></div>';
|
2746 |
+
|
2747 |
+
var focus_retriever_holder = document.createElement ('div');
|
2748 |
+
focus_retriever_holder.style = 'position:fixed; top:0; left:0; overflow:hidden;';
|
2749 |
+
focus_retriever_holder.innerHTML = '<input style="position:absolute; left:-300px;" type="text" value="" id="focus_retriever" readonly="true" /><label for="focus_retriever"> </label>';
|
2750 |
+
document.querySelector ('body').append (focus_retriever_holder);
|
2751 |
+
|
2752 |
+
// ### /AI
|
2753 |
+
// ***
|
2754 |
+
// this.focusRetriever = $("#focus_retriever");
|
2755 |
+
this.focusRetriever = document.querySelector ("#focus_retriever");
|
2756 |
+
this.focusRetrieved = false;
|
2757 |
+
|
2758 |
+
// Special processing to make it work with my old friend IE8 (and older) ;)
|
2759 |
+
if (this.isIE8AndOlder) {
|
2760 |
+
// Blur doesn't works correctly on IE8-, so we need to trigger it manually
|
2761 |
+
|
2762 |
+
this.focusRetriever.blur (function (e) {
|
2763 |
+
e.stopPropagation ();
|
2764 |
+
e.preventDefault ();
|
2765 |
+
// ***
|
2766 |
+
// $.iframeTracker.windowLoseFocus(e);
|
2767 |
+
ai_iframeTracker.windowLoseFocus (e);
|
2768 |
+
|
2769 |
+
});
|
2770 |
+
|
2771 |
+
// Keep focus on window (fix bug IE8-, focusable elements)
|
2772 |
+
// ***
|
2773 |
+
// $("body").click(function(e) {
|
2774 |
+
document.querySelector ('body').addEventListener ('click', (e) => {
|
2775 |
+
// ***
|
2776 |
+
// $(window).focus();
|
2777 |
+
window.focus ();
|
2778 |
+
});
|
2779 |
+
// ***
|
2780 |
+
// $("form").click(function(e) {
|
2781 |
+
document.querySelector ('form').addEventListener ('click', (e) => {
|
2782 |
+
e.stopPropagation ();
|
2783 |
+
});
|
2784 |
+
|
2785 |
+
// Same thing for "post-DOMready" created forms (issue #6)
|
2786 |
+
try {
|
2787 |
+
// ***
|
2788 |
+
// $("body").on("click", "form", function(e) {
|
2789 |
+
ai_addEventListener (document.querySelector ('body'), 'click', (e) => {e.stopPropagation();}, 'form');
|
2790 |
+
} catch (ex) {
|
2791 |
+
// ***
|
2792 |
+
// console.log("[iframeTracker] Please update jQuery to 1.7 or newer. (exception: " + ex.message + ")");
|
2793 |
+
console.log ("[iframeTracker] error (exception: " + ex.message + ")");
|
2794 |
+
}
|
2795 |
+
}
|
2796 |
+
},
|
2797 |
+
|
2798 |
+
// Add tracker to target using handler (bind boundary listener + register handler)
|
2799 |
+
// target: Array of target elements (native DOM elements)
|
2800 |
+
// handler: User handler object
|
2801 |
+
track: function (target, handler) {
|
2802 |
+
// Adding target elements references into handler
|
2803 |
+
handler.target = target;
|
2804 |
+
|
2805 |
+
// Storing the new handler into handler list
|
2806 |
+
// ***
|
2807 |
+
// $.iframeTracker.handlersList.push(handler);
|
2808 |
+
ai_iframeTracker.handlersList.push (handler);
|
2809 |
+
|
2810 |
+
// Binding boundary listener
|
2811 |
+
// ***
|
2812 |
+
// $(target)
|
2813 |
+
// .bind("mouseover", { handler: handler }, $.iframeTracker.mouseoverListener)
|
2814 |
+
// .bind("mouseout", { handler: handler }, $.iframeTracker.mouseoutListener);
|
2815 |
+
|
2816 |
+
target.addEventListener ('mouseover', ai_mouseoverHander.bind (event, handler), false);
|
2817 |
+
target.addEventListener ('mouseout', ai_mouseoutHander.bind (event, handler), false);
|
2818 |
+
},
|
2819 |
+
|
2820 |
+
// Remove tracking on target elements
|
2821 |
+
// target: target element
|
2822 |
+
untrack: function (target) {
|
2823 |
+
if (typeof Array.prototype.filter != "function") {
|
2824 |
+
console.log ("Your browser doesn't support Array filter, untrack disabled");
|
2825 |
+
return;
|
2826 |
+
}
|
2827 |
+
|
2828 |
+
// Unbinding boundary listener
|
2829 |
+
// ***
|
2830 |
+
// $(target).each(function(index) {
|
2831 |
+
target.forEach ((el, i) => {
|
2832 |
+
// $(this)
|
2833 |
+
// .unbind("mouseover", $.iframeTracker.mouseoverListener)
|
2834 |
+
// .unbind("mouseout", $.iframeTracker.mouseoutListener);
|
2835 |
+
|
2836 |
+
el.removeEventListener ('mouseover', ai_mouseoverHander, false);
|
2837 |
+
el.removeEventListener ('mouseout', ai_mouseoutHander, false);
|
2838 |
+
});
|
2839 |
+
|
2840 |
+
// Handler garbage collector
|
2841 |
+
var nullFilter = function(value) {
|
2842 |
+
return value === null ? false : true;
|
2843 |
+
};
|
2844 |
+
for (var i in this.handlersList) {
|
2845 |
+
// Prune target
|
2846 |
+
for (var j in this.handlersList [i].target) {
|
2847 |
+
if ($.inArray (this.handlersList [i].target [j], target) !== -1) {
|
2848 |
+
this.handlersList [i].target [j] = null;
|
2849 |
+
}
|
2850 |
+
}
|
2851 |
+
this.handlersList [i].target = this.handlersList[i].target.filter (nullFilter);
|
2852 |
+
|
2853 |
+
// Delete handler if unused
|
2854 |
+
if (this.handlersList [i].target.length === 0) {
|
2855 |
+
this.handlersList [i] = null;
|
2856 |
+
}
|
2857 |
+
}
|
2858 |
+
this.handlersList = this.handlersList.filter (nullFilter);
|
2859 |
+
},
|
2860 |
+
|
2861 |
+
// Target mouseover event listener
|
2862 |
+
mouseoverListener: function(e) {
|
2863 |
+
e.data.handler.over = true;
|
2864 |
+
// ***
|
2865 |
+
// $.iframeTracker.retrieveFocus();
|
2866 |
+
ai_iframeTracker.retrieveFocus ();
|
2867 |
+
try {
|
2868 |
+
// ***
|
2869 |
+
// e.data.handler.overCallback(this, e);
|
2870 |
+
e.data.handler.overCallback (e.data.handler.target, e);
|
2871 |
+
} catch (ex) {}
|
2872 |
+
},
|
2873 |
+
|
2874 |
+
// Target mouseout event listener
|
2875 |
+
mouseoutListener: function(e) {
|
2876 |
+
e.data.handler.over = false;
|
2877 |
+
// ***
|
2878 |
+
// $.iframeTracker.retrieveFocus();
|
2879 |
+
ai_iframeTracker.retrieveFocus ();
|
2880 |
+
try {
|
2881 |
+
// ***
|
2882 |
+
// e.data.handler.outCallback(this, e);
|
2883 |
+
e.data.handler.outCallback (e.data.handler.target, e);
|
2884 |
+
} catch (ex) {}
|
2885 |
+
},
|
2886 |
+
|
2887 |
+
// Give back focus from an iframe to parent page
|
2888 |
+
retrieveFocus: function() {
|
2889 |
+
if (document.activeElement && document.activeElement.tagName === "IFRAME") {
|
2890 |
+
var process_iframe = true;
|
2891 |
+
|
2892 |
+
// Do not process listed iframes
|
2893 |
+
if (document.activeElement.hasAttribute ('id') && typeof ai_ignore_iframe_ids !== "undefined" && ai_ignore_iframe_ids.constructor === Array) {
|
2894 |
+
var iframe_id = document.activeElement.id;
|
2895 |
+
ai_ignore_iframe_ids.forEach (function (ignored_id) {if (matchRuleShort (iframe_id, ignored_id)) process_iframe = false});
|
2896 |
+
}
|
2897 |
+
|
2898 |
+
if (process_iframe && document.activeElement.hasAttribute ('class') && typeof ai_ignore_iframe_classes !== "undefined" && ai_ignore_iframe_classes.constructor === Array) {
|
2899 |
+
var iframe_class = document.activeElement.className;
|
2900 |
+
ai_ignore_iframe_classes.forEach (function (ignored_class) {if (matchRuleShort (iframe_class, ignored_class)) process_iframe = false});
|
2901 |
+
}
|
2902 |
+
|
2903 |
+
if (process_iframe) {
|
2904 |
+
// ***
|
2905 |
+
// $.iframeTracker.focusRetriever.focus();
|
2906 |
+
ai_iframeTracker.focusRetriever.focus ();
|
2907 |
+
// ***
|
2908 |
+
// $.iframeTracker.focusRetrieved = true;
|
2909 |
+
ai_iframeTracker.focusRetrieved = true;
|
2910 |
+
}
|
2911 |
+
}
|
2912 |
+
},
|
2913 |
+
|
2914 |
+
// Calls blurCallback for every handler with over=true on window blur
|
2915 |
+
windowLoseFocus: function (e) {
|
2916 |
+
for (var i in this.handlersList) {
|
2917 |
+
if (this.handlersList [i].over === true) {
|
2918 |
+
try {
|
2919 |
+
this.handlersList [i].blurCallback (e);
|
2920 |
+
} catch (ex) {}
|
2921 |
+
}
|
2922 |
+
}
|
2923 |
+
}
|
2924 |
+
};
|
2925 |
+
|
2926 |
+
function ai_ready (fn) {
|
2927 |
+
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) {
|
2928 |
+
fn ();
|
2929 |
+
} else {
|
2930 |
+
document.addEventListener ('DOMContentLoaded', fn);
|
2931 |
+
}
|
2932 |
+
}
|
2933 |
+
|
2934 |
+
// Init the iframeTracker on document ready
|
2935 |
+
// ***
|
2936 |
+
// $(document).ready(function() {
|
2937 |
+
// ***
|
2938 |
+
// $.iframeTracker.init();
|
2939 |
+
function ai_init_IframeTracker () {
|
2940 |
+
ai_iframeTracker.init ();
|
2941 |
+
}
|
2942 |
+
|
2943 |
+
ai_ready (ai_init_IframeTracker);
|
2944 |
+
|
2945 |
+
// ***
|
2946 |
+
//})(jQuery);
|
2947 |
+
|
2948 |
+
// ***
|
2949 |
+
//}));
|
2950 |
+
|
2951 |
+
|
2952 |
+
ai_tracking_finished = false;
|
2953 |
+
|
2954 |
+
// ***
|
2955 |
+
//jQuery(document).ready(function($) {
|
2956 |
+
function ai_tracking () {
|
2957 |
+
|
2958 |
+
// var ai_internal_tracking = AI_INTERNAL_TRACKING;
|
2959 |
+
// var ai_external_tracking = AI_EXTERNAL_TRACKING;
|
2960 |
+
|
2961 |
+
// var ai_external_tracking_category = "AI_EXT_CATEGORY";
|
2962 |
+
// var ai_external_tracking_action = "AI_EXT_ACTION";
|
2963 |
+
// var ai_external_tracking_label = "AI_EXT_LABEL";
|
2964 |
+
// var ai_external_tracking_username = "WP_USERNAME";
|
2965 |
+
|
2966 |
+
// var ai_track_pageviews = AI_TRACK_PAGEVIEWS;
|
2967 |
+
// var ai_advanced_click_detection = AI_ADVANCED_CLICK_DETECTION;
|
2968 |
+
// var ai_viewport_widths = AI_VIEWPORT_WIDTHS;
|
2969 |
+
// var ai_viewport_indexes = AI_VIEWPORT_INDEXES;
|
2970 |
+
// var ai_viewport_names = JSON.parse (b64d ("AI_VIEWPORT_NAMES"));
|
2971 |
+
// var ai_data_id = "AI_NONCE";
|
2972 |
+
// var ai_ajax_url = "AI_SITE_URL/wp-admin/admin-ajax.php";
|
2973 |
+
// var ai_debug_tracking = AI_DEBUG_TRACKING;
|
2974 |
+
|
2975 |
+
if (ai_debug_tracking) {
|
2976 |
+
ai_ajax_url = ai_ajax_url + '?ai-debug-tracking=1';
|
2977 |
+
}
|
2978 |
+
|
2979 |
+
Number.isInteger = Number.isInteger || function (value) {
|
2980 |
+
return typeof value === "number" &&
|
2981 |
+
isFinite (value) &&
|
2982 |
+
Math.floor (value) === value;
|
2983 |
+
};
|
2984 |
+
|
2985 |
+
function replace_tags (text, event, block, block_name, block_counter, version, version_name) {
|
2986 |
+
text = text.replace ('[EVENT]', event);
|
2987 |
+
text = text.replace ('[BLOCK_NUMBER]', block);
|
2988 |
+
text = text.replace ('[BLOCK_NAME]', block_name);
|
2989 |
+
text = text.replace ('[BLOCK_COUNTER]', block_counter);
|
2990 |
+
text = text.replace ('[VERSION_NUMBER]', version);
|
2991 |
+
text = text.replace ('[VERSION_NAME]', version_name);
|
2992 |
+
text = text.replace ('[BLOCK_VERSION_NUMBER]', block + (version == 0 ? '' : ' - ' + version));
|
2993 |
+
text = text.replace ('[BLOCK_VERSION_NAME]', block_name + (version_name == '' ? '' : ' - ' + version_name));
|
2994 |
+
text = text.replace ('[WP_USERNAME]', ai_external_tracking_username);
|
2995 |
+
|
2996 |
+
return (text);
|
2997 |
+
}
|
2998 |
+
|
2999 |
+
function external_tracking (event, block, block_name, block_counter, version, version_name, non_interaction) {
|
3000 |
+
|
3001 |
+
var category = replace_tags (ai_external_tracking_category, event, block, block_name, block_counter, version, version_name);
|
3002 |
+
var action = replace_tags (ai_external_tracking_action, event, block, block_name, block_counter, version, version_name);
|
3003 |
+
var label = replace_tags (ai_external_tracking_label, event, block, block_name, block_counter, version, version_name);
|
3004 |
+
|
3005 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
3006 |
+
// var ai_debug = false;
|
3007 |
+
|
3008 |
+
if (ai_debug) console.log ("AI TRACKING EXTERNAL", event, block, '["' + category + '", "' + action + '", "' + label + '"]');
|
3009 |
+
|
3010 |
+
if (typeof ai_external_tracking_event == 'function') {
|
3011 |
+
if (ai_debug) console.log ('AI TRACKING ai_external_tracking_event (' + block + ', ' + event + ', ' + category + ', ' + action + ', ' + label + ', ' + non_interaction + ')');
|
3012 |
+
|
3013 |
+
var event_data = {'event': event, 'block': block, 'block_name': block_name, 'block_counter': block_counter, 'version': version, 'version_name': version_name};
|
3014 |
+
|
3015 |
+
var result = ai_external_tracking_event (event_data, category, action, label, non_interaction);
|
3016 |
+
|
3017 |
+
if (ai_debug) console.log ('AI TRACKING ai_external_tracking_event ():', result);
|
3018 |
+
|
3019 |
+
if (result == 0) return;
|
3020 |
+
}
|
3021 |
+
|
3022 |
+
// Google Analytics
|
3023 |
+
if (typeof window.ga == 'function') {
|
3024 |
+
var ga_command = 'send';
|
3025 |
+
|
3026 |
+
if (typeof ai_ga_tracker_name == 'string') {
|
3027 |
+
ga_command = ai_ga_tracker_name + '.' + ga_command;
|
3028 |
+
|
3029 |
+
if (ai_debug) console.log ("AI TRACKING ai_ga_tracker_name:", ai_ga_tracker_name);
|
3030 |
+
} else {
|
3031 |
+
var trackers = ga.getAll();
|
3032 |
+
|
3033 |
+
if (trackers.length != 0) {
|
3034 |
+
var tracker_name = trackers [0].get ('name');
|
3035 |
+
if (tracker_name != 't0') {
|
3036 |
+
ga_command = tracker_name + '.' + ga_command;
|
3037 |
+
|
3038 |
+
if (ai_debug) console.log ("AI TRACKING ga tracker name:", tracker_name);
|
3039 |
+
}
|
3040 |
+
} else {
|
3041 |
+
if (ai_debug) console.log ("AI TRACKING no ga tracker");
|
3042 |
+
}
|
3043 |
+
}
|
3044 |
+
|
3045 |
+
ga (ga_command, 'event', {
|
3046 |
+
eventCategory: category,
|
3047 |
+
eventAction: action,
|
3048 |
+
eventLabel: label,
|
3049 |
+
nonInteraction: non_interaction
|
3050 |
+
});
|
3051 |
+
|
3052 |
+
if (ai_debug) console.log ("AI TRACKING Google Universal Analytics:", non_interaction);
|
3053 |
+
} else
|
3054 |
+
|
3055 |
+
if (typeof window.gtag == 'function') {
|
3056 |
+
gtag ('event', 'impression', {
|
3057 |
+
'event_category': category,
|
3058 |
+
'event_action': action,
|
3059 |
+
'event_label': label,
|
3060 |
+
'non_interaction': non_interaction
|
3061 |
+
});
|
3062 |
+
|
3063 |
+
if (ai_debug) console.log ("AI TRACKING Global Site Tag:", non_interaction);
|
3064 |
+
} else
|
3065 |
+
|
3066 |
+
if (typeof window.__gaTracker == 'function') {
|
3067 |
+
__gaTracker ('send', 'event', {
|
3068 |
+
eventCategory: category,
|
3069 |
+
eventAction: action,
|
3070 |
+
eventLabel: label,
|
3071 |
+
nonInteraction: non_interaction
|
3072 |
+
});
|
3073 |
+
|
3074 |
+
if (ai_debug) console.log ("AI TRACKING Google Universal Analytics by MonsterInsights:", non_interaction);
|
3075 |
+
} else
|
3076 |
+
|
3077 |
+
if (typeof _gaq == 'object') {
|
3078 |
+
// _gaq.push (['_trackEvent', category, action, label]);
|
3079 |
+
_gaq.push (['_trackEvent', category, action, label, undefined, non_interaction]);
|
3080 |
+
|
3081 |
+
if (ai_debug) console.log ("AI TRACKING Google Legacy Analytics:", non_interaction);
|
3082 |
+
}
|
3083 |
+
|
3084 |
+
// Matomo (Piwik)
|
3085 |
+
if (typeof _paq == 'object') {
|
3086 |
+
_paq.push (['trackEvent', category, action, label]);
|
3087 |
+
|
3088 |
+
if (ai_debug) console.log ("AI TRACKING Matomo");
|
3089 |
+
}
|
3090 |
+
}
|
3091 |
+
|
3092 |
+
function ai_click (data, click_type) {
|
3093 |
+
|
3094 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; //2
|
3095 |
+
// var ai_debug = false;
|
3096 |
+
|
3097 |
+
var block = data [0];
|
3098 |
+
var code_version = data [1];
|
3099 |
+
|
3100 |
+
if (Number.isInteger (code_version)) {
|
3101 |
+
|
3102 |
+
if (typeof ai_check_data == 'undefined' && typeof ai_check_data_timeout == 'undefined') {
|
3103 |
+
if (ai_debug) console.log ('AI CHECK CLICK - DATA NOT SET YET');
|
3104 |
+
|
3105 |
+
ai_check_data_timeout = true;
|
3106 |
+
setTimeout (function() {if (ai_debug) console.log (''); if (ai_debug) console.log ('AI CHECK CLICK TIMEOUT'); ai_click (data, click_type);}, 2500);
|
3107 |
+
return;
|
3108 |
+
}
|
3109 |
+
|
3110 |
+
if (ai_debug) console.log ('AI CHECK CLICK block', block);
|
3111 |
+
if (ai_debug) console.log ('AI CHECK CLICK data', ai_check_data);
|
3112 |
+
|
3113 |
+
ai_cookie = ai_load_cookie ();
|
3114 |
+
|
3115 |
+
for (var cookie_block in ai_cookie) {
|
3116 |
+
|
3117 |
+
if (parseInt (block) != parseInt (cookie_block)) continue;
|
3118 |
+
|
3119 |
+
for (var cookie_block_property in ai_cookie [cookie_block]) {
|
3120 |
+
if (cookie_block_property == 'c') {
|
3121 |
+
if (ai_debug) console.log ('AI CHECK CLICKS block:', cookie_block);
|
3122 |
+
|
3123 |
+
var clicks = ai_cookie [cookie_block][cookie_block_property];
|
3124 |
+
if (clicks > 0) {
|
3125 |
+
if (ai_debug) console.log ('AI CLICK, block', cookie_block, 'remaining', clicks - 1, 'clicks');
|
3126 |
+
|
3127 |
+
ai_set_cookie (cookie_block, 'c', clicks - 1);
|
3128 |
+
|
3129 |
+
if (clicks == 1) {
|
3130 |
+
if (ai_debug) console.log ('AI CLICKS #1, closing block', block, '- no more clicks');
|
3131 |
+
|
3132 |
+
// ***
|
3133 |
+
// var cfp_time = $('span[data-ai-block=' + block + ']').data ('ai-cfp-time');
|
3134 |
+
var cfp_time = document.querySelector ('span[data-ai-block="' + block + '"]').dataset.aiCfpTime;
|
3135 |
+
var date = new Date();
|
3136 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
3137 |
+
|
3138 |
+
var closed_until = timestamp + 7 * 24 * 3600;
|
3139 |
+
ai_set_cookie (cookie_block, 'c', - closed_until);
|
3140 |
+
|
3141 |
+
// ***
|
3142 |
+
// setTimeout (function() {$('span[data-ai-block=' + block + ']').closest ("div[data-ai]").remove ();}, 50);
|
3143 |
+
setTimeout (function() {
|
3144 |
+
document.querySelectorAll ('span[data-ai-block="' + block + '"]').forEach ((el, index) => {
|
3145 |
+
var closest = el.closest ("div[data-ai]");
|
3146 |
+
if (closest) {
|
3147 |
+
closest.remove ();
|
3148 |
+
}
|
3149 |
+
});
|
3150 |
+
}, 50);
|
3151 |
+
} else ai_set_cookie (cookie_block, 'c', clicks - 1);
|
3152 |
+
}
|
3153 |
+
} else
|
3154 |
+
|
3155 |
+
if (cookie_block_property == 'cpt') {
|
3156 |
+
if (ai_debug) console.log ('AI CHECK CLICKS PER TIME PERIOD block:', cookie_block);
|
3157 |
+
|
3158 |
+
var clicks = ai_cookie [cookie_block][cookie_block_property];
|
3159 |
+
if (clicks > 0) {
|
3160 |
+
if (ai_debug) console.log ('AI CLICKS, block', cookie_block, 'remaining', clicks - 1, 'clicks per time period');
|
3161 |
+
|
3162 |
+
ai_set_cookie (cookie_block, 'cpt', clicks - 1);
|
3163 |
+
|
3164 |
+
if (clicks == 1) {
|
3165 |
+
if (ai_debug) console.log ('AI CLICKS, closing block', block, '- no more clicks per time period');
|
3166 |
+
|
3167 |
+
// ***
|
3168 |
+
// var cfp_time = $('span[data-ai-block=' + block + ']').data ('ai-cfp-time');
|
3169 |
+
var cfp_time = document.querySelector ('span[data-ai-block="' + block + '"]').dataset.aiCfpTime;
|
3170 |
+
|
3171 |
+
var date = new Date();
|
3172 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
3173 |
+
|
3174 |
+
var closed_until = ai_cookie [cookie_block]['ct'];
|
3175 |
+
ai_set_cookie (cookie_block, 'x', closed_until);
|
3176 |
+
|
3177 |
+
if (ai_debug) console.log ('AI CLICKS, closing block', block, 'for', closed_until - timestamp, 's');
|
3178 |
+
|
3179 |
+
// ***
|
3180 |
+
// var block_to_close = $('span[data-ai-block=' + block + ']').closest ("div[data-ai]");
|
3181 |
+
// setTimeout (function() {
|
3182 |
+
// block_to_close.closest ("div[data-ai]").remove ();
|
3183 |
+
// }, 75); // Remove after CFP check
|
3184 |
+
setTimeout (function() {
|
3185 |
+
document.querySelectorAll ('span[data-ai-block="' + block + '"]').forEach ((el, index) => {
|
3186 |
+
var closest = el.closest ("div[data-ai]");
|
3187 |
+
if (closest) {
|
3188 |
+
closest.remove ();
|
3189 |
+
}
|
3190 |
+
});
|
3191 |
+
}, 75); // After CFP is processed
|
3192 |
+
|
3193 |
+
if (typeof cfp_time != 'undefined') {
|
3194 |
+
if (ai_debug) console.log ('AI CLICKS CFP, closing block', block, 'for', cfp_time, 'days');
|
3195 |
+
|
3196 |
+
var closed_until = timestamp + cfp_time * 24 * 3600;
|
3197 |
+
|
3198 |
+
// if (ai_debug) console.log ('AI COOKIE x 3 block', block, 'closed_until', closed_until);
|
3199 |
+
ai_set_cookie (block, 'x', closed_until);
|
3200 |
+
|
3201 |
+
// ***
|
3202 |
+
// $('span.ai-cfp').each (function (index) {
|
3203 |
+
document.querySelectorAll ('span.ai-cfp').forEach ((el, index) => {
|
3204 |
+
// ***
|
3205 |
+
// var cfp_block = $(this).data ('ai-block');
|
3206 |
+
var cfp_block = el.dataset.aiBlock;
|
3207 |
+
|
3208 |
+
if (ai_debug) console.log ('AI CLICKS CFP, closing block', cfp_block, 'for', cfp_time, 'days');
|
3209 |
+
|
3210 |
+
// ***
|
3211 |
+
// var block_to_close = $(this);
|
3212 |
+
var block_to_close = el;
|
3213 |
+
|
3214 |
+
setTimeout (function() {
|
3215 |
+
// block_to_close.closest ("div[data-ai]").remove ();
|
3216 |
+
var closest = block_to_close.closest ("div[data-ai]");
|
3217 |
+
if (closest) {
|
3218 |
+
closest.remove ();
|
3219 |
+
}
|
3220 |
+
}, 50);
|
3221 |
+
|
3222 |
+
// if (ai_debug) console.log ('AI COOKIE x 4 block', cfp_block, 'closed_until', closed_until);
|
3223 |
+
ai_set_cookie (cfp_block, 'x', closed_until);
|
3224 |
+
});
|
3225 |
+
}
|
3226 |
+
}
|
3227 |
+
} else {
|
3228 |
+
if (ai_check_data.hasOwnProperty (cookie_block) && ai_check_data [cookie_block].hasOwnProperty ('cpt') && ai_check_data [cookie_block].hasOwnProperty ('ct')) {
|
3229 |
+
if (ai_cookie.hasOwnProperty (cookie_block) && ai_cookie [cookie_block].hasOwnProperty ('ct')) {
|
3230 |
+
var date = new Date();
|
3231 |
+
var closed_for = ai_cookie [cookie_block]['ct'] - Math.round (date.getTime() / 1000);
|
3232 |
+
if (closed_for <= 0) {
|
3233 |
+
if (ai_debug) console.log ('AI CLICKS, block', cookie_block, 'set max clicks period (', ai_check_data [cookie_block]['ct'], 'days =', ai_check_data [cookie_block]['ct'] * 24 * 3600, 's)');
|
3234 |
+
|
3235 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
3236 |
+
|
3237 |
+
ai_set_cookie (cookie_block, 'cpt', ai_check_data [cookie_block]['cpt'] - 1);
|
3238 |
+
ai_set_cookie (cookie_block, 'ct', Math.round (timestamp + ai_check_data [cookie_block]['ct'] * 24 * 3600));
|
3239 |
+
}
|
3240 |
+
}
|
3241 |
+
} else {
|
3242 |
+
if (ai_cookie.hasOwnProperty (cookie_block) && ai_cookie [cookie_block].hasOwnProperty ('cpt')) {
|
3243 |
+
if (ai_debug) console.log ('AI CLICKS, block', cookie_block, 'removing cpt');
|
3244 |
+
|
3245 |
+
ai_set_cookie (cookie_block, 'cpt', '');
|
3246 |
+
}
|
3247 |
+
if (ai_cookie.hasOwnProperty (cookie_block) && ai_cookie [cookie_block].hasOwnProperty ('ct')) {
|
3248 |
+
if (ai_debug) console.log ('AI CLICKS, block', cookie_block, 'removing ct');
|
3249 |
+
|
3250 |
+
ai_set_cookie (cookie_block, 'ct', '');
|
3251 |
+
}
|
3252 |
+
}
|
3253 |
+
}
|
3254 |
+
}
|
3255 |
+
}
|
3256 |
+
}
|
3257 |
+
|
3258 |
+
if (ai_cookie.hasOwnProperty ('G') && ai_cookie ['G'].hasOwnProperty ('cpt')) {
|
3259 |
+
if (ai_debug) console.log ('AI CHECK GLOBAL CLICKS PER TIME PERIOD');
|
3260 |
+
|
3261 |
+
var clicks = ai_cookie ['G']['cpt'];
|
3262 |
+
if (clicks > 0) {
|
3263 |
+
if (ai_debug) console.log ('AI CLICKS, GLOBAL remaining', clicks - 1, 'clicks per time period');
|
3264 |
+
|
3265 |
+
ai_set_cookie ('G', 'cpt', clicks - 1);
|
3266 |
+
|
3267 |
+
if (clicks == 1) {
|
3268 |
+
if (ai_debug) console.log ('AI CLICKS, closing block', block, '- no more global clicks per time period');
|
3269 |
+
|
3270 |
+
// ***
|
3271 |
+
// var cfp_time = $('span[data-ai-block=' + block + ']').data ('ai-cfp-time');
|
3272 |
+
var cfp_time = document.querySelector ('span[data-ai-block="' + block + '"]').dataset.aiCfpTime;
|
3273 |
+
var date = new Date();
|
3274 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
3275 |
+
|
3276 |
+
var closed_until = ai_cookie ['G']['ct'];
|
3277 |
+
ai_set_cookie (block, 'x', closed_until);
|
3278 |
+
|
3279 |
+
if (ai_debug) console.log ('AI CLICKS, closing block', block, 'for', closed_until - timestamp, 's');
|
3280 |
+
|
3281 |
+
// ***
|
3282 |
+
// var block_to_close = $('span[data-ai-block=' + block + ']').closest ("div[data-ai]");
|
3283 |
+
setTimeout (function() {
|
3284 |
+
document.querySelectorAll ('span[data-ai-block="' + block + '"]').forEach ((el, index) => {
|
3285 |
+
var closest = el.closest ("div[data-ai]");
|
3286 |
+
if (closest) {
|
3287 |
+
closest.remove ();
|
3288 |
+
}
|
3289 |
+
});
|
3290 |
+
}, 75); // After CFP is processed
|
3291 |
+
|
3292 |
+
if (ai_debug) console.log ('AI CLICKS GLOBAL block', block, 'cfp_time', cfp_time);
|
3293 |
+
|
3294 |
+
if (typeof cfp_time != 'undefined') {
|
3295 |
+
if (ai_debug) console.log ('AI CLICKS GLOBAL CFP, closing block', block, 'for', cfp_time, 'days');
|
3296 |
+
|
3297 |
+
var closed_until = timestamp + cfp_time * 24 * 3600;
|
3298 |
+
|
3299 |
+
// if (ai_debug) console.log ('AI COOKIE x 3 block', block, 'closed_until', closed_until);
|
3300 |
+
ai_set_cookie (block, 'x', closed_until);
|
3301 |
+
|
3302 |
+
// ***
|
3303 |
+
// $('span.ai-cfp').each (function (index) {
|
3304 |
+
document.querySelectorAll ('span.ai-cfp').forEach ((el, index) => {
|
3305 |
+
// ***
|
3306 |
+
// var cfp_block = $(this).data ('ai-block');
|
3307 |
+
var cfp_block = el.dataset.aiBlock;
|
3308 |
+
if (ai_debug) console.log ('AI CLICKS GLOBAL CFP, closing block', cfp_block, 'for', cfp_time, 'days');
|
3309 |
+
|
3310 |
+
// ***
|
3311 |
+
// var block_to_close = $(this);
|
3312 |
+
var block_to_close = el;
|
3313 |
+
setTimeout (function() {
|
3314 |
+
block_to_close.closest ("div[data-ai]").remove ();
|
3315 |
+
}, 50);
|
3316 |
+
|
3317 |
+
// if (ai_debug) console.log ('AI COOKIE x 4 block', cfp_block, 'closed_until', closed_until);
|
3318 |
+
ai_set_cookie (cfp_block, 'x', closed_until);
|
3319 |
+
});
|
3320 |
+
}
|
3321 |
+
}
|
3322 |
+
} else {
|
3323 |
+
if (ai_check_data.hasOwnProperty ('G') && ai_check_data ['G'].hasOwnProperty ('cpt') && ai_check_data ['G'].hasOwnProperty ('ct')) {
|
3324 |
+
if (ai_cookie.hasOwnProperty ('G') && ai_cookie ['G'].hasOwnProperty ('ct')) {
|
3325 |
+
var date = new Date();
|
3326 |
+
var closed_for = ai_cookie ['G']['ct'] - Math.round (date.getTime() / 1000);
|
3327 |
+
if (closed_for <= 0) {
|
3328 |
+
if (ai_debug) console.log ('AI CLICKS GLOBAL set max clicks period (', ai_check_data ['G']['ct'], 'days =', ai_check_data ['G']['ct'] * 24 * 3600, 's)');
|
3329 |
+
|
3330 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
3331 |
+
|
3332 |
+
ai_set_cookie ('G', 'cpt', ai_check_data ['G']['cpt'] - 1);
|
3333 |
+
ai_set_cookie ('G', 'ct', Math.round (timestamp + ai_check_data ['G']['ct'] * 24 * 3600));
|
3334 |
+
}
|
3335 |
+
}
|
3336 |
+
} else {
|
3337 |
+
if (ai_cookie.hasOwnProperty ('G') && ai_cookie ['G'].hasOwnProperty ('cpt')) {
|
3338 |
+
if (ai_debug) console.log ('AI CLICKS GLOBAL removing cpt');
|
3339 |
+
|
3340 |
+
ai_set_cookie ('G', 'cpt', '');
|
3341 |
+
}
|
3342 |
+
if (ai_cookie.hasOwnProperty ('G') && ai_cookie ['G'].hasOwnProperty ('ct')) {
|
3343 |
+
if (ai_debug) console.log ('AI CLICKS GLOBAL removing ct');
|
3344 |
+
|
3345 |
+
ai_set_cookie ('G', 'ct', '');
|
3346 |
+
}
|
3347 |
+
}
|
3348 |
+
}
|
3349 |
+
}
|
3350 |
+
|
3351 |
+
|
3352 |
+
if (ai_debug) console.log ("AI CLICK: ", data, click_type);
|
3353 |
+
|
3354 |
+
if (ai_internal_tracking) {
|
3355 |
+
if (typeof ai_internal_tracking_no_clicks === 'undefined') {
|
3356 |
+
// ***
|
3357 |
+
// $.ajax ({
|
3358 |
+
// url: ai_ajax_url,
|
3359 |
+
// type: "post",
|
3360 |
+
// data: {
|
3361 |
+
// action: "ai_ajax",
|
3362 |
+
// ai_check: ai_data_id,
|
3363 |
+
// click: block,
|
3364 |
+
// version: code_version,
|
3365 |
+
// type: click_type,
|
3366 |
+
// },
|
3367 |
+
// async: true
|
3368 |
+
// }).done (function (data) {
|
3369 |
+
|
3370 |
+
var url_data = {
|
3371 |
+
action: "ai_ajax",
|
3372 |
+
ai_check: ai_data_id,
|
3373 |
+
click: block,
|
3374 |
+
version: code_version,
|
3375 |
+
type: click_type,
|
3376 |
+
};
|
3377 |
+
|
3378 |
+
var formBody = [];
|
3379 |
+
for (var property in url_data) {
|
3380 |
+
var encodedKey = encodeURIComponent (property);
|
3381 |
+
var encodedValue = encodeURIComponent (url_data [property]);
|
3382 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
3383 |
+
}
|
3384 |
+
formBody = formBody.join ("&");
|
3385 |
+
|
3386 |
+
async function ai_post_clicks () {
|
3387 |
+
const response = await fetch (ai_ajax_url, {
|
3388 |
+
method: 'POST',
|
3389 |
+
headers: {
|
3390 |
+
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
3391 |
+
},
|
3392 |
+
body: formBody
|
3393 |
+
});
|
3394 |
+
|
3395 |
+
const text = await response.text ();
|
3396 |
+
|
3397 |
+
return text;
|
3398 |
+
}
|
3399 |
+
|
3400 |
+
ai_post_clicks ().then (data => {
|
3401 |
+
|
3402 |
+
data = data.trim ();
|
3403 |
+
if (data != "") {
|
3404 |
+
var db_records = JSON.parse (data);
|
3405 |
+
|
3406 |
+
if (ai_debug) {
|
3407 |
+
console.log ("AI DB RECORDS: ", db_records);
|
3408 |
+
}
|
3409 |
+
|
3410 |
+
if (typeof db_records ['#'] != 'undefined' && db_records ['#'] == block) {
|
3411 |
+
// Reload cookie data
|
3412 |
+
ai_cookie = ai_load_cookie ();
|
3413 |
+
|
3414 |
+
var date = new Date();
|
3415 |
+
var closed_until = Math.round (date.getTime() / 1000) + 12 * 3600;
|
3416 |
+
|
3417 |
+
if (ai_debug) console.log ("AI SERVERSIDE LIMITED BLOCK:", block);
|
3418 |
+
|
3419 |
+
if (!ai_cookie.hasOwnProperty (block) || !ai_cookie [block].hasOwnProperty ('x')) {
|
3420 |
+
if (ai_debug) console.log ("AI SERVERSIDE LIMITED BLOCK:", block, ' not closed - closing for 12 hours');
|
3421 |
+
|
3422 |
+
ai_set_cookie (block, 'x', closed_until);
|
3423 |
+
}
|
3424 |
+
|
3425 |
+
// setTimeout (function() {$('span[data-ai-block=' + block + ']').closest ("div[data-ai]").remove ();}, 50);
|
3426 |
+
// ***
|
3427 |
+
setTimeout (function () {
|
3428 |
+
document.querySelectorAll ('span[data-ai-block="' + block + '"]').forEach ((el, index) => {
|
3429 |
+
var closest = el.closest ("div[data-ai]");
|
3430 |
+
if (closest) {
|
3431 |
+
closest.remove ();
|
3432 |
+
}
|
3433 |
+
});
|
3434 |
+
}, 50);
|
3435 |
+
}
|
3436 |
+
|
3437 |
+
if (ai_debug) {
|
3438 |
+
var db_record = db_records ['='];
|
3439 |
+
|
3440 |
+
if (typeof db_record != "undefined") {
|
3441 |
+
if (typeof db_record == "string")
|
3442 |
+
console.log ("AI CLICK " + block, code_version == 0 ? "" : "[" + code_version + "]", "(" + db_record + ")"); else
|
3443 |
+
console.log ("AI CLICK " + block, code_version == 0 ? "" : "[" + code_version + "]", "(Views: " + db_record [4] + ", Clicks: " + db_record [5] + (click_type == "" ? "" : ", " + click_type) + ")");
|
3444 |
+
}
|
3445 |
+
}
|
3446 |
+
} else if (ai_debug) console.log ("AI CLICK " + block, code_version == 0 ? "" : "[" + code_version + "]", "(NO DATA" + (click_type == "" ? "" : ", " + click_type) + ")");
|
3447 |
+
|
3448 |
+
if (ai_debug) console.log ('');
|
3449 |
+
});
|
3450 |
+
} else {
|
3451 |
+
if (ai_debug) console.log ("AI CLICK INTERNAL TRACKING DISABLED");
|
3452 |
+
}
|
3453 |
+
}
|
3454 |
+
|
3455 |
+
if (ai_external_tracking) {
|
3456 |
+
if (typeof ai_external_tracking_no_clicks === 'undefined') {
|
3457 |
+
var block_name = data [2];
|
3458 |
+
var code_version_name = data [3];
|
3459 |
+
var block_counter = data [4];
|
3460 |
+
|
3461 |
+
external_tracking ("click", block, block_name, block_counter, code_version, code_version_name, false);
|
3462 |
+
} else {
|
3463 |
+
if (ai_debug) console.log ("AI CLICK EXTERNAL TRACKING DISABLED");
|
3464 |
+
}
|
3465 |
+
}
|
3466 |
+
|
3467 |
+
if (typeof ai_click_action == 'function') {
|
3468 |
+
if (ai_debug) console.log ('AI CLICK ai_click_action (' + block + ') CALLED');
|
3469 |
+
|
3470 |
+
ai_click_action (block, block_name, code_version, code_version_name);
|
3471 |
+
}
|
3472 |
+
}
|
3473 |
+
}
|
3474 |
+
|
3475 |
+
ai_install_standard_click_trackers = function (block_wrapper) {
|
3476 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 3
|
3477 |
+
// var ai_debug = false;
|
3478 |
+
|
3479 |
+
if (typeof block_wrapper == 'undefined') {
|
3480 |
+
// ***
|
3481 |
+
// block_wrapper = $('body');
|
3482 |
+
block_wrapper = document.querySelector ('body');
|
3483 |
+
}
|
3484 |
+
|
3485 |
+
// var elements = $("div.ai-track[data-ai]:visible a", block_wrapper);
|
3486 |
+
// ***
|
3487 |
+
// var elements = $("div.ai-track[data-ai]:visible", block_wrapper);
|
3488 |
+
var elements = block_wrapper.querySelectorAll ("div.ai-track[data-ai]");
|
3489 |
+
|
3490 |
+
// ***
|
3491 |
+
// var filtered_elements = $();
|
3492 |
+
var filtered_elements = [];
|
3493 |
+
// ***
|
3494 |
+
// elements.each (function () {
|
3495 |
+
elements.forEach ((element, i) => {
|
3496 |
+
if (!!(element.offsetWidth || element.offsetHeight || element.getClientRects ().length)) {
|
3497 |
+
// ### Excludes element also when class is found in rotation option
|
3498 |
+
// var ai_lazy_loading = $(this).find ('div.ai-lazy');
|
3499 |
+
// var ai_manual_loading = $(this).find ('div.ai-manual');
|
3500 |
+
// var ai_manual_loading_list = $(this).find ('div.ai-list-manual');
|
3501 |
+
// var ai_manual_loading_auto = $(this).find ('div.ai-manual-auto');
|
3502 |
+
// if (ai_lazy_loading.length == 0 && ai_manual_loading.length == 0 && ai_manual_loading_list.length == 0 && ai_manual_loading_auto.length == 0) filtered_elements = filtered_elements.add ($(this));
|
3503 |
+
|
3504 |
+
// ***
|
3505 |
+
// if ($(this).find ('div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed').length == 0) filtered_elements = filtered_elements.add ($(this));
|
3506 |
+
if (!element.querySelectorAll ('div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed').length) filtered_elements.push (element);
|
3507 |
+
// ***
|
3508 |
+
}
|
3509 |
+
});
|
3510 |
+
|
3511 |
+
elements = filtered_elements;
|
3512 |
+
|
3513 |
+
|
3514 |
+
// Mark as tracked
|
3515 |
+
// ***
|
3516 |
+
// elements.removeClass ('ai-track');
|
3517 |
+
// ***
|
3518 |
+
// elements = elements.find ('a');
|
3519 |
+
var processed_elements = [];
|
3520 |
+
elements.forEach ((element, i) => {
|
3521 |
+
element.classList.remove ('ai-track');
|
3522 |
+
processed_elements.push.apply (processed_elements, element.querySelectorAll ('a'));
|
3523 |
+
});
|
3524 |
+
|
3525 |
+
// ***
|
3526 |
+
elements = processed_elements;
|
3527 |
+
|
3528 |
+
if (elements.length != 0) {
|
3529 |
+
if (ai_advanced_click_detection) {
|
3530 |
+
// ***
|
3531 |
+
// elements.click (function () {
|
3532 |
+
elements.forEach ((element, i) => {
|
3533 |
+
element.addEventListener ('click', () => {
|
3534 |
+
// ***
|
3535 |
+
// var wrapper = $(this).closest ("div[data-ai]");
|
3536 |
+
var wrapper = element.closest ("div[data-ai]");
|
3537 |
+
// ***
|
3538 |
+
// while (typeof wrapper.attr ("data-ai") != "undefined") {
|
3539 |
+
while (wrapper !== null && wrapper.hasAttribute ("data-ai")) {
|
3540 |
+
// ***
|
3541 |
+
// var data = JSON.parse (b64d (wrapper.attr ("data-ai")));
|
3542 |
+
var data = JSON.parse (b64d (wrapper.getAttribute ("data-ai")));
|
3543 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
3544 |
+
if (Number.isInteger (data [1])) {
|
3545 |
+
// ***
|
3546 |
+
// if (!wrapper.hasClass ("clicked")) {
|
3547 |
+
if (!wrapper.classList.contains ("clicked")) {
|
3548 |
+
// ***
|
3549 |
+
// wrapper.addClass ("clicked");
|
3550 |
+
wrapper.classList.add ("clicked");
|
3551 |
+
ai_click (data, "a.click");
|
3552 |
+
}
|
3553 |
+
}
|
3554 |
+
}
|
3555 |
+
// ***
|
3556 |
+
// wrapper = wrapper.parent ().closest ("div[data-ai]");
|
3557 |
+
wrapper = wrapper.parentElement.closest ("div[data-ai]");
|
3558 |
+
}
|
3559 |
+
});
|
3560 |
+
// ***
|
3561 |
+
});
|
3562 |
+
|
3563 |
+
if (ai_debug) {
|
3564 |
+
// ***
|
3565 |
+
// elements.each (function (){
|
3566 |
+
elements.forEach ((element, i) => {
|
3567 |
+
// ***
|
3568 |
+
// var wrapper = $(this).closest ("div[data-ai]");
|
3569 |
+
var wrapper = element.closest ("div[data-ai]");
|
3570 |
+
// ***
|
3571 |
+
// if (typeof wrapper.attr ("data-ai") != "undefined") {
|
3572 |
+
if (wrapper !== null && wrapper.hasAttribute ("data-ai")) {
|
3573 |
+
// ***
|
3574 |
+
// var data = JSON.parse (b64d (wrapper.data ("ai")));
|
3575 |
+
var data = JSON.parse (b64d (wrapper.dataset.ai));
|
3576 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
3577 |
+
if (Number.isInteger (data [1])) {
|
3578 |
+
// ***
|
3579 |
+
// if (!wrapper.hasClass ("clicked")) {
|
3580 |
+
if (!wrapper.classList.contains ("clicked")) {
|
3581 |
+
console.log ("AI STANDARD CLICK TRACKER for link installed on block", data [0]);
|
3582 |
+
} else console.log ("AI STANDARD CLICK TRACKER for link NOT installed on block", data [0], "- has class clicked");
|
3583 |
+
} else console.log ("AI STANDARD CLICK TRACKER for link NOT installed on block", data [0], "- version not set");
|
3584 |
+
|
3585 |
+
}
|
3586 |
+
}
|
3587 |
+
});
|
3588 |
+
}
|
3589 |
+
} else {
|
3590 |
+
// ***
|
3591 |
+
// elements.click (function () {
|
3592 |
+
elements.forEach ((element, i) => {
|
3593 |
+
element.addEventListener ('click', () => {
|
3594 |
+
// ***
|
3595 |
+
// var wrapper = $(this).closest ("div[data-ai]");
|
3596 |
+
var wrapper = element.closest ("div[data-ai]");
|
3597 |
+
// ***
|
3598 |
+
// while (typeof wrapper.attr ("data-ai") != "undefined") {
|
3599 |
+
while (wrapper !== null && wrapper.hasAttribute ("data-ai")) {
|
3600 |
+
// ***
|
3601 |
+
// var data = JSON.parse (b64d (wrapper.attr ("data-ai")));
|
3602 |
+
var data = JSON.parse (b64d (wrapper.getAttribute ("data-ai")));
|
3603 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
3604 |
+
if (Number.isInteger (data [1])) {
|
3605 |
+
ai_click (data, "a.click");
|
3606 |
+
clicked = true;
|
3607 |
+
}
|
3608 |
+
}
|
3609 |
+
// ***
|
3610 |
+
// wrapper = wrapper.parent ().closest ("div[data-ai]");
|
3611 |
+
wrapper = wrapper.parentElement.closest ("div[data-ai]");
|
3612 |
+
}
|
3613 |
+
});
|
3614 |
+
// ***
|
3615 |
+
});
|
3616 |
+
|
3617 |
+
if (ai_debug) {
|
3618 |
+
// ***
|
3619 |
+
// elements.each (function (){
|
3620 |
+
elements.forEach ((element, i) => {
|
3621 |
+
// ***
|
3622 |
+
// var wrapper = $(this).closest ("div[data-ai]");
|
3623 |
+
var wrapper = element.closest ("div[data-ai]");
|
3624 |
+
// ***
|
3625 |
+
// if (typeof wrapper.attr ("data-ai") != "undefined") {
|
3626 |
+
if (wrapper !== null && wrapper.hasAttribute ("data-ai")) {
|
3627 |
+
// ***
|
3628 |
+
// var data = JSON.parse (b64d (wrapper.attr ("data-ai")));
|
3629 |
+
var data = JSON.parse (b64d (wrapper.getAttribute ("data-ai")));
|
3630 |
+
|
3631 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
3632 |
+
if (Number.isInteger (data [1])) {
|
3633 |
+
console.log ("AI STANDARD CLICK TRACKER installed on block", data [0]);
|
3634 |
+
} else console.log ("AI STANDARD CLICK TRACKER NOT installed on block", data [0], "- version not set");
|
3635 |
+
|
3636 |
+
}
|
3637 |
+
}
|
3638 |
+
});
|
3639 |
+
}
|
3640 |
+
}
|
3641 |
+
}
|
3642 |
+
}
|
3643 |
+
|
3644 |
+
ai_install_click_trackers = function (block_wrapper) {
|
3645 |
+
|
3646 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 4
|
3647 |
+
// var ai_debug = false;
|
3648 |
+
|
3649 |
+
if (typeof block_wrapper == 'undefined') {
|
3650 |
+
// ***
|
3651 |
+
// block_wrapper = $('body');
|
3652 |
+
block_wrapper = document.querySelector ('body');
|
3653 |
+
if (ai_debug) console.log ("AI INSTALL CLICK TRACKERS");
|
3654 |
+
// ***
|
3655 |
+
// } else if (ai_debug) console.log ("AI INSTALL CLICK TRACKERS:", block_wrapper.prop ("tagName"), block_wrapper.attr ('class'));
|
3656 |
+
} else if (ai_debug) console.log ("AI INSTALL CLICK TRACKERS:", block_wrapper.tagName, block_wrapper.getAttribute ('class'));
|
3657 |
+
|
3658 |
+
|
3659 |
+
if (ai_advanced_click_detection) {
|
3660 |
+
// timed rotation options that may contain blocks for tracking (block shortcodes) - only currently active option is visible
|
3661 |
+
// ***
|
3662 |
+
// var elements = $("div.ai-track[data-ai]:visible, div.ai-rotate[data-info]:visible div.ai-track[data-ai]", block_wrapper);
|
3663 |
+
var elements = block_wrapper.querySelectorAll ("div.ai-track[data-ai], div.ai-rotate[data-info] div.ai-track[data-ai]");
|
3664 |
+
|
3665 |
+
var all_elements = [];
|
3666 |
+
elements.forEach ((element, i) => {
|
3667 |
+
// Install iframe click tracker only for visible blocks
|
3668 |
+
if (!!(element.offsetWidth || element.offsetHeight || element.getClientRects ().length)) {
|
3669 |
+
all_elements.push (element);
|
3670 |
+
}
|
3671 |
+
});
|
3672 |
+
|
3673 |
+
// ***
|
3674 |
+
// if (typeof block_wrapper.attr ("data-ai") != "undefined" && $(block_wrapper).hasClass ('ai-track') && $(block_wrapper).is (':visible')) {
|
3675 |
+
if (block_wrapper.hasAttribute ("data-ai") && block_wrapper.classList.contains ('ai-track') && !!(block_wrapper.offsetWidth || block_wrapper.offsetHeight || block_wrapper.getClientRects ().length)) {
|
3676 |
+
// ***
|
3677 |
+
// elements = elements.add (block_wrapper);
|
3678 |
+
all_elements.push (block_wrapper);
|
3679 |
+
}
|
3680 |
+
|
3681 |
+
// ***
|
3682 |
+
// var filtered_elements = $();
|
3683 |
+
var filtered_elements = [];
|
3684 |
+
// elements.each (function () {
|
3685 |
+
all_elements.forEach ((element, i) => {
|
3686 |
+
|
3687 |
+
// ### Excludes element also when class is found in rotation option
|
3688 |
+
// var ai_lazy_loading = $(this).find ('div.ai-lazy');
|
3689 |
+
// var ai_manual_loading = $(this).find ('div.ai-manual');
|
3690 |
+
// var ai_manual_loading_auto = $(this).find ('div.ai-manual-auto');
|
3691 |
+
// if (ai_lazy_loading.length == 0 && ai_manual_loading.length == 0 && ai_manual_loading_auto.length == 0) filtered_elements = filtered_elements.add ($(this));
|
3692 |
+
|
3693 |
+
// ***
|
3694 |
+
// if ($(this).find ('div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed').length == 0) filtered_elements = filtered_elements.add ($(this));
|
3695 |
+
if (!element.querySelectorAll ('div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed').length) filtered_elements.push (element);
|
3696 |
+
});
|
3697 |
+
|
3698 |
+
elements = filtered_elements;
|
3699 |
+
|
3700 |
+
// Mark as tracked - prevents ai_install_standard_click_trackers
|
3701 |
+
// ***
|
3702 |
+
// elements.removeClass ('ai-track');
|
3703 |
+
|
3704 |
+
// var processed_elements = [];
|
3705 |
+
// elements.forEach ((element, i) => {
|
3706 |
+
// element.classList.remove ('ai-track');
|
3707 |
+
// processed_elements.push (processed_elements);
|
3708 |
+
// });
|
3709 |
+
// elements = processed_elements;
|
3710 |
+
|
3711 |
+
// Will be marked in ai_install_standard_click_trackers
|
3712 |
+
|
3713 |
+
if (elements.length != 0) {
|
3714 |
+
// ***
|
3715 |
+
// elements.iframeTracker ({
|
3716 |
+
elements.forEach ((element, i) => {
|
3717 |
+
installIframeTracker ({
|
3718 |
+
|
3719 |
+
blurCallback: function(){
|
3720 |
+
if (this.ai_data != null && wrapper != null) {
|
3721 |
+
if (ai_debug) console.log ("AI blurCallback for block: " + this.ai_data [0]);
|
3722 |
+
// ***
|
3723 |
+
// if (!wrapper.hasClass ("clicked")) {
|
3724 |
+
if (!wrapper.classList.contains ("clicked")) {
|
3725 |
+
// ***
|
3726 |
+
// wrapper.addClass ("clicked");
|
3727 |
+
wrapper.classList.add ("clicked");
|
3728 |
+
ai_click (this.ai_data, "blurCallback");
|
3729 |
+
|
3730 |
+
// ***
|
3731 |
+
// var inner_wrapper = wrapper.find ("div[data-ai]:visible");
|
3732 |
+
var inner_wrapper = wrapper.querySelector ("div[data-ai]");
|
3733 |
+
// ***
|
3734 |
+
// while (typeof inner_wrapper.attr ("data-ai") != "undefined") {
|
3735 |
+
while (inner_wrapper != null && !!(inner_wrapper.offsetWidth || inner_wrapper.offsetHeight || inner_wrapper.getClientRects ().length) && inner_wrapper.hasAttribute ("data-ai")) {
|
3736 |
+
// ***
|
3737 |
+
// var data = JSON.parse (b64d (inner_wrapper.attr ("data-ai")));
|
3738 |
+
var data = JSON.parse (b64d (inner_wrapper.getAttribute ("data-ai")));
|
3739 |
+
if (typeof data !== "undefined" && data.constructor === Array && Number.isInteger (data [1])) {
|
3740 |
+
ai_click (data, "blurCallback INNER");
|
3741 |
+
}
|
3742 |
+
// ***
|
3743 |
+
// inner_wrapper = inner_wrapper.find ("div[data-ai]:visible");
|
3744 |
+
inner_wrapper = inner_wrapper.querySelector ("div[data-ai]");
|
3745 |
+
}
|
3746 |
+
}
|
3747 |
+
}
|
3748 |
+
},
|
3749 |
+
overCallback: function(element){
|
3750 |
+
// ***
|
3751 |
+
// var closest = $(element).closest ("div[data-ai]");
|
3752 |
+
var closest = element.closest ("div[data-ai]");
|
3753 |
+
// ***
|
3754 |
+
// if (typeof closest.attr ("data-ai") != "undefined") {
|
3755 |
+
if (closest.hasAttribute ("data-ai")) {
|
3756 |
+
// ***
|
3757 |
+
// var data = JSON.parse (b64d (closest.attr ("data-ai")));
|
3758 |
+
var data = JSON.parse (b64d (closest.getAttribute ("data-ai")));
|
3759 |
+
if (typeof data !== "undefined" && data.constructor === Array && Number.isInteger (data [1])) {
|
3760 |
+
wrapper = closest;
|
3761 |
+
this.ai_data = data;
|
3762 |
+
if (ai_debug) console.log ("AI overCallback for block: " + this.ai_data [0]);
|
3763 |
+
} else {
|
3764 |
+
// ***
|
3765 |
+
// if (wrapper != null) wrapper.removeClass ("clicked");
|
3766 |
+
if (wrapper != null) wrapper.classList.remove ("clicked");
|
3767 |
+
wrapper = null;
|
3768 |
+
this.ai_data = null;
|
3769 |
+
}
|
3770 |
+
}
|
3771 |
+
},
|
3772 |
+
outCallback: function (element){
|
3773 |
+
if (ai_debug && this.ai_data != null) console.log ("AI outCallback for block: " + this.ai_data [0]);
|
3774 |
+
// ***
|
3775 |
+
// if (wrapper != null) wrapper.removeClass ("clicked");
|
3776 |
+
if (wrapper != null) wrapper.classList.remove ("clicked");
|
3777 |
+
wrapper = null;
|
3778 |
+
this.ai_data = null;
|
3779 |
+
},
|
3780 |
+
focusCallback: function(element){
|
3781 |
+
if (this.ai_data != null && wrapper != null) {
|
3782 |
+
if (ai_debug) console.log ("AI focusCallback for block: " + this.ai_data [0]);
|
3783 |
+
// ***
|
3784 |
+
// if (!wrapper.hasClass ("clicked")) {
|
3785 |
+
if (!wrapper.classList.contains ("clicked")) {
|
3786 |
+
// ***
|
3787 |
+
// wrapper.addClass ("clicked");
|
3788 |
+
wrapper.classList.add ("clicked");
|
3789 |
+
ai_click (this.ai_data, "focusCallback");
|
3790 |
+
|
3791 |
+
// var inner_wrapper = wrapper.find ("div[data-ai]:visible");
|
3792 |
+
var inner_wrapper = wrapper.querySelector ("div[data-ai]");
|
3793 |
+
|
3794 |
+
// ***
|
3795 |
+
// while (typeof inner_wrapper.attr ("data-ai") != "undefined") {
|
3796 |
+
while (inner_wrapper != null && !!(inner_wrapper.offsetWidth || inner_wrapper.offsetHeight || inner_wrapper.getClientRects ().length) && inner_wrapper.hasAttribute ("data-ai")) {
|
3797 |
+
// ***
|
3798 |
+
// var data = JSON.parse (b64d (inner_wrapper.attr ("data-ai")));
|
3799 |
+
var data = JSON.parse (b64d (inner_wrapper.getAttribute ("data-ai")));
|
3800 |
+
if (typeof data !== "undefined" && data.constructor === Array && Number.isInteger (data [1])) {
|
3801 |
+
ai_click (data, "focusCallback INNER");
|
3802 |
+
}
|
3803 |
+
// ***
|
3804 |
+
// inner_wrapper = inner_wrapper.find ("div[data-ai]:visible");
|
3805 |
+
inner_wrapper = inner_wrapper.querySelector ("div[data-ai]");
|
3806 |
+
}
|
3807 |
+
}
|
3808 |
+
}
|
3809 |
+
},
|
3810 |
+
wrapper: null,
|
3811 |
+
ai_data: null,
|
3812 |
+
block: null,
|
3813 |
+
version: null
|
3814 |
+
// ***
|
3815 |
+
// });
|
3816 |
+
}
|
3817 |
+
, element
|
3818 |
+
);
|
3819 |
+
// ***
|
3820 |
+
});
|
3821 |
+
|
3822 |
+
if (ai_debug) {
|
3823 |
+
// ***
|
3824 |
+
// elements.each (function (){
|
3825 |
+
elements.forEach ((element, i) => {
|
3826 |
+
// ***
|
3827 |
+
// var closest = $(this).closest ("div[data-ai]");
|
3828 |
+
var closest = element.closest ("div[data-ai]");
|
3829 |
+
// ***
|
3830 |
+
// if (typeof closest.attr ("data-ai") != "undefined") {
|
3831 |
+
if (closest.hasAttribute ("data-ai")) {
|
3832 |
+
// ***
|
3833 |
+
// var data = JSON.parse (b64d (closest.attr ("data-ai")));
|
3834 |
+
var data = JSON.parse (b64d (closest.getAttribute ("data-ai")));
|
3835 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
3836 |
+
console.log ("AI ADVANCED CLICK TRACKER installed on block", data [0]);
|
3837 |
+
}
|
3838 |
+
}
|
3839 |
+
});
|
3840 |
+
}
|
3841 |
+
}
|
3842 |
+
}
|
3843 |
+
|
3844 |
+
|
3845 |
+
ai_install_standard_click_trackers (block_wrapper);
|
3846 |
+
}
|
3847 |
+
|
3848 |
+
var pageview_data = [];
|
3849 |
+
|
3850 |
+
ai_process_impressions = function (block_wrapper) {
|
3851 |
+
|
3852 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 5
|
3853 |
+
// var ai_debug = false;
|
3854 |
+
|
3855 |
+
if (typeof block_wrapper == 'undefined') {
|
3856 |
+
// ***
|
3857 |
+
// block_wrapper = $('body');
|
3858 |
+
block_wrapper = document.querySelector ('body');
|
3859 |
+
if (ai_debug) console.log ("AI PROCESS IMPRESSIONS");
|
3860 |
+
// ***
|
3861 |
+
// } else if (ai_debug) console.log ("AI PROCESS IMPRESSIONS:", block_wrapper.prop ("tagName"), block_wrapper.attr ('class'));
|
3862 |
+
} else if (ai_debug) console.log ("AI PROCESS IMPRESSIONS:", block_wrapper.tagName, block_wrapper.getAttribute ('class'));
|
3863 |
+
|
3864 |
+
var blocks = [];
|
3865 |
+
var versions = [];
|
3866 |
+
var block_names = [];
|
3867 |
+
var version_names = [];
|
3868 |
+
var block_counters = [];
|
3869 |
+
|
3870 |
+
if (pageview_data.length != 0) {
|
3871 |
+
if (ai_debug) console.log ('AI PROCESS IMPRESSIONS - SENDING ALSO PAGEVIEW DATA', pageview_data);
|
3872 |
+
|
3873 |
+
blocks.push (pageview_data [0]);
|
3874 |
+
versions.push (pageview_data [1]);
|
3875 |
+
block_names.push ('Pageviews');
|
3876 |
+
block_counters.push (0);
|
3877 |
+
version_names.push ('');
|
3878 |
+
}
|
3879 |
+
|
3880 |
+
// timed rotation options that may contain blocks for tracking (block shortcodes) - only currently active option is visible
|
3881 |
+
// ***
|
3882 |
+
// var blocks_for_tracking = $("div.ai-track[data-ai]:visible, div.ai-rotate[data-info]:visible div.ai-track[data-ai]", block_wrapper);
|
3883 |
+
var blocks_for_tracking = block_wrapper.querySelectorAll ("div.ai-track[data-ai], div.ai-rotate[data-info] div.ai-track[data-ai]");
|
3884 |
+
var visible_elements = [];
|
3885 |
+
blocks_for_tracking.forEach ((element, i) => {
|
3886 |
+
if (!!(element.offsetWidth || element.offsetHeight || element.getClientRects ().length)) {
|
3887 |
+
visible_elements.push (element);
|
3888 |
+
}
|
3889 |
+
});
|
3890 |
+
|
3891 |
+
// ***
|
3892 |
+
// if (typeof $(block_wrapper).attr ("data-ai") != "undefined" && $(block_wrapper).hasClass ('ai-track') && $(block_wrapper).is (':visible')) {
|
3893 |
+
if (block_wrapper !== null && block_wrapper.hasAttribute ("data-ai") && block_wrapper.classList.contains ('ai-track') && !!(block_wrapper.offsetWidth || block_wrapper.offsetHeight || block_wrapper.getClientRects ().length)) {
|
3894 |
+
visible_elements.push (block_wrapper);
|
3895 |
+
}
|
3896 |
+
blocks_for_tracking = visible_elements;;
|
3897 |
+
|
3898 |
+
// ***
|
3899 |
+
// if (ai_debug) console.log ("AI BLOCKS FOR TRACKING:", blocks_for_tracking.each (function () {return $(this).attr ('class')}).get ());
|
3900 |
+
if (ai_debug) {
|
3901 |
+
console.log ("AI BLOCKS FOR TRACKING:");
|
3902 |
+
blocks_for_tracking.forEach ((element, i) => {console.log (' ', element.getAttribute ('class'))});
|
3903 |
+
}
|
3904 |
+
|
3905 |
+
if (blocks_for_tracking.length != 0) {
|
3906 |
+
if (ai_debug) console.log ("");
|
3907 |
+
|
3908 |
+
// ***
|
3909 |
+
// $(blocks_for_tracking).each (function (){
|
3910 |
+
blocks_for_tracking.forEach ((element, i) => {
|
3911 |
+
|
3912 |
+
// ***
|
3913 |
+
// if (typeof $(this).attr ("data-ai") != "undefined") {
|
3914 |
+
if (element.hasAttribute ("data-ai")) {
|
3915 |
+
// ***
|
3916 |
+
// var data = JSON.parse (b64d ($(this).attr ("data-ai")));
|
3917 |
+
var data = JSON.parse (b64d (element.getAttribute ("data-ai")));
|
3918 |
+
|
3919 |
+
if (typeof data !== "undefined" && data.constructor === Array) {
|
3920 |
+
if (ai_debug) console.log ("AI TRACKING DATA:", data);
|
3921 |
+
|
3922 |
+
var timed_rotation_count = 0;
|
3923 |
+
// ***
|
3924 |
+
// var ai_rotation_info = $(this).find ('div.ai-rotate[data-info]');
|
3925 |
+
var ai_rotation_info = element.querySelectorAll ('div.ai-rotate[data-info]');
|
3926 |
+
if (ai_rotation_info.length == 1) {
|
3927 |
+
// ***
|
3928 |
+
// var block_rotation_info = JSON.parse (b64d (ai_rotation_info.data ('info')));
|
3929 |
+
var block_rotation_info = JSON.parse (b64d (ai_rotation_info [0].dataset.info));
|
3930 |
+
|
3931 |
+
if (ai_debug) console.log ("AI TIMED ROTATION DATA:", block_rotation_info);
|
3932 |
+
|
3933 |
+
timed_rotation_count = block_rotation_info [1];
|
3934 |
+
}
|
3935 |
+
|
3936 |
+
if (Number.isInteger (data [0]) && data [0] != 0) {
|
3937 |
+
if (Number.isInteger (data [1])) {
|
3938 |
+
|
3939 |
+
var adb_flag = 0;
|
3940 |
+
// Deprecated
|
3941 |
+
// ***
|
3942 |
+
// var no_tracking = $(this).hasClass ('ai-no-tracking');
|
3943 |
+
var no_tracking = element.classList.contains ('ai-no-tracking');
|
3944 |
+
|
3945 |
+
// ***
|
3946 |
+
// var ai_masking_data = jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME);
|
3947 |
+
var ai_masking_data = document.querySelector (b64d ("Ym9keQ==")).getAttribute (ai_adb_attribute);
|
3948 |
+
if (typeof ai_masking_data === "string") {
|
3949 |
+
var ai_masking = ai_masking_data == b64d ("bWFzaw==");
|
3950 |
+
}
|
3951 |
+
|
3952 |
+
if (typeof ai_masking_data === "string" && typeof ai_masking === "boolean") {
|
3953 |
+
// ***
|
3954 |
+
// var outer_height = $(this).outerHeight ();
|
3955 |
+
var outer_height = element.offsetHeight;
|
3956 |
+
|
3957 |
+
// ***
|
3958 |
+
// var ai_attributes = $(this).find ('.ai-attributes');
|
3959 |
+
var ai_attributes = element.querySelectorAll ('.ai-attributes');
|
3960 |
+
if (ai_attributes.length) {
|
3961 |
+
// ai_attributes.each (function (){
|
3962 |
+
// ***
|
3963 |
+
ai_attributes.forEach ((el, i) => {
|
3964 |
+
// ***
|
3965 |
+
// if (outer_height >= $(this).outerHeight ()) {
|
3966 |
+
if (outer_height >= element.offsetHeight) {
|
3967 |
+
// ***
|
3968 |
+
// outer_height -= $(this).outerHeight ();
|
3969 |
+
outer_height -= element.offsetHeight;
|
3970 |
+
}
|
3971 |
+
});
|
3972 |
+
}
|
3973 |
+
|
3974 |
+
// ***
|
3975 |
+
// var ai_code = $(this).find ('.ai-code');
|
3976 |
+
var ai_code = element.querySelectorAll ('.ai-code');
|
3977 |
+
outer_height = 0;
|
3978 |
+
if (ai_code.length) {
|
3979 |
+
// ***
|
3980 |
+
// ai_code.each (function (){
|
3981 |
+
ai_code.forEach ((element, i) => {
|
3982 |
+
// ***
|
3983 |
+
// outer_height += $(this).outerHeight ();
|
3984 |
+
outer_height += element.offsetHeight;
|
3985 |
+
});
|
3986 |
+
}
|
3987 |
+
|
3988 |
+
// no_tracking = $(this).hasClass ('ai-no-tracking');
|
3989 |
+
// ***
|
3990 |
+
// if (ai_debug) console.log ('AI ad blocking:', ai_masking, " outerHeight:", outer_height, 'no tracking:', no_tracking);
|
3991 |
+
if (ai_debug) console.log ('AI ad blocking:', ai_masking, " offsetHeight:", outer_height, 'no tracking:', no_tracking);
|
3992 |
+
if (ai_masking && outer_height === 0) {
|
3993 |
+
adb_flag = 0x80;
|
3994 |
+
}
|
3995 |
+
}
|
3996 |
+
|
3997 |
+
// var ai_lazy_loading = $(this).find ('div.ai-lazy');
|
3998 |
+
// var ai_manual_loading = $(this).find ('div.ai-manual');
|
3999 |
+
// var ai_manual_loading_list = $(this).find ('div.ai-list-manual');
|
4000 |
+
// var ai_manual_loading_auto = $(this).find ('div.ai-manual-auto');
|
4001 |
+
|
4002 |
+
// if (ai_lazy_loading.length != 0 || ai_manual_loading.length != 0 || ai_manual_loading_list.length != 0 || ai_manual_loading_auto.length != 0) {
|
4003 |
+
|
4004 |
+
// ***
|
4005 |
+
// if ($(this).find ('div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed').length != 0) {
|
4006 |
+
if (element.querySelectorAll ('div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed').length != 0) {
|
4007 |
+
no_tracking = true;
|
4008 |
+
|
4009 |
+
if (ai_debug) {
|
4010 |
+
// ***
|
4011 |
+
// if ($(this).find ('div.ai-lazy').length != 0) console.log ("AI TRACKING block", data [0], "is set for lazy loading");
|
4012 |
+
// if ($(this).find ('div.ai-manual').length != 0) console.log ("AI TRACKING block", data [0], "is set for manual loading");
|
4013 |
+
// if ($(this).find ('div.ai-list-manual').length != 0) console.log ("AI TRACKING block", data [0], "is set for manual loading AUTO list");
|
4014 |
+
// if ($(this).find ('div.ai-manual-auto').length != 0) console.log ("AI TRACKING block", data [0], "is set for manual loading AUTO");
|
4015 |
+
// if ($(this).find ('div.ai-delayed').length != 0) console.log ("AI TRACKING block", data [0], "is set for delayed loading");
|
4016 |
+
|
4017 |
+
if (element.querySelectorAll ('div.ai-lazy').length != 0) console.log ("AI TRACKING block", data [0], "is set for lazy loading");
|
4018 |
+
if (element.querySelectorAll ('div.ai-manual').length != 0) console.log ("AI TRACKING block", data [0], "is set for manual loading");
|
4019 |
+
if (element.querySelectorAll ('div.ai-list-manual').length != 0) console.log ("AI TRACKING block", data [0], "is set for manual loading AUTO list");
|
4020 |
+
if (element.querySelectorAll ('div.ai-manual-auto').length != 0) console.log ("AI TRACKING block", data [0], "is set for manual loading AUTO");
|
4021 |
+
if (element.querySelectorAll ('div.ai-delayed').length != 0) console.log ("AI TRACKING block", data [0], "is set for delayed loading");
|
4022 |
+
}
|
4023 |
+
}
|
4024 |
+
|
4025 |
+
if (!no_tracking) {
|
4026 |
+
if (timed_rotation_count == 0) {
|
4027 |
+
blocks.push (data [0]);
|
4028 |
+
versions.push (data [1] | adb_flag);
|
4029 |
+
block_names.push (data [2]);
|
4030 |
+
version_names.push (data [3]);
|
4031 |
+
block_counters.push (data [4]);
|
4032 |
+
} else {
|
4033 |
+
// Timed rotation
|
4034 |
+
for (var option = 1; option <= timed_rotation_count; option ++) {
|
4035 |
+
blocks.push (data [0]);
|
4036 |
+
versions.push (option | adb_flag);
|
4037 |
+
block_names.push (data [2]);
|
4038 |
+
version_names.push (data [3]);
|
4039 |
+
block_counters.push (data [4]);
|
4040 |
+
}
|
4041 |
+
}
|
4042 |
+
|
4043 |
+
} else if (ai_debug) console.log ("AI TRACKING block", data [0], "DISABLED");
|
4044 |
+
|
4045 |
+
// ***
|
4046 |
+
// } else if (ai_debug) console.log ("AI TRACKING block", data [0], "- version not set", $(this).find ('div.ai-lazy').length != 0 ? 'LAZY LOADING' : '', ($(this).find ('div.ai-manual').length + $(this).find ('div.ai-list-manual').length + $(this).find ('div.ai-manual-auto').length) != 0 ? 'MANUAL LOADING' : '');
|
4047 |
+
} else if (ai_debug) console.log ("AI TRACKING block", data [0], "- version not set", element.querySelectorAll ('div.ai-lazy').length != 0 ? 'LAZY LOADING' : '', (element.querySelectorAll ('div.ai-manual').length + element.querySelectorAll ('div.ai-list-manual').length + element.querySelectorAll ('div.ai-manual-auto').length) != 0 ? 'MANUAL LOADING' : '');
|
4048 |
+
} else if (ai_debug) console.log ("AI TRACKING DISABLED");
|
4049 |
+
}
|
4050 |
+
}
|
4051 |
+
});
|
4052 |
+
}
|
4053 |
+
|
4054 |
+
if (ai_debug) console.log ('AI CHECK IMPRESSIONS blocks', blocks);
|
4055 |
+
if (ai_debug) console.log ('AI CHECK IMPRESSIONS data', ai_check_data);
|
4056 |
+
|
4057 |
+
ai_cookie = ai_load_cookie ();
|
4058 |
+
|
4059 |
+
for (var cookie_block in ai_cookie) {
|
4060 |
+
|
4061 |
+
if (!blocks.includes (parseInt (cookie_block))) continue;
|
4062 |
+
|
4063 |
+
for (var cookie_block_property in ai_cookie [cookie_block]) {
|
4064 |
+
if (cookie_block_property == 'i') {
|
4065 |
+
if (ai_debug) console.log ('AI CHECK IMPRESSIONS block:', cookie_block);
|
4066 |
+
|
4067 |
+
var impressions = ai_cookie [cookie_block][cookie_block_property];
|
4068 |
+
if (impressions > 0) {
|
4069 |
+
if (ai_debug) console.log ('AI IMPRESSION, block', cookie_block, 'remaining', impressions - 1, 'impressions');
|
4070 |
+
|
4071 |
+
if (impressions == 1) {
|
4072 |
+
var date = new Date();
|
4073 |
+
var closed_until = Math.round (date.getTime() / 1000) + 7 * 24 * 3600;
|
4074 |
+
// // TEST
|
4075 |
+
// var closed_until = Math.round (date.getTime() / 1000) + 36;
|
4076 |
+
ai_set_cookie (cookie_block, 'i', - closed_until);
|
4077 |
+
} else ai_set_cookie (cookie_block, 'i', impressions - 1);
|
4078 |
+
}
|
4079 |
+
} else
|
4080 |
+
|
4081 |
+
if (cookie_block_property == 'ipt') {
|
4082 |
+
if (ai_debug) console.log ('AI CHECK IMPRESSIONS PER TIME PERIOD block:', cookie_block);
|
4083 |
+
|
4084 |
+
var impressions = ai_cookie [cookie_block][cookie_block_property];
|
4085 |
+
if (impressions > 0) {
|
4086 |
+
if (ai_debug) console.log ('AI IMPRESSIONS, block', cookie_block, 'remaining', impressions - 1, 'impressions per time period');
|
4087 |
+
|
4088 |
+
ai_set_cookie (cookie_block, 'ipt', impressions - 1);
|
4089 |
+
} else {
|
4090 |
+
if (ai_check_data.hasOwnProperty (cookie_block) && ai_check_data [cookie_block].hasOwnProperty ('ipt') && ai_check_data [cookie_block].hasOwnProperty ('it')) {
|
4091 |
+
if (ai_cookie.hasOwnProperty (cookie_block) && ai_cookie [cookie_block].hasOwnProperty ('it')) {
|
4092 |
+
var date = new Date();
|
4093 |
+
var closed_for = ai_cookie [cookie_block]['it'] - Math.round (date.getTime() / 1000);
|
4094 |
+
if (closed_for <= 0) {
|
4095 |
+
if (ai_debug) console.log ('AI IMPRESSIONS, block', cookie_block, 'set max impressions period (' + ai_check_data [cookie_block]['it'], 'days =', ai_check_data [cookie_block]['it'] * 24 * 3600, 's)');
|
4096 |
+
|
4097 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
4098 |
+
|
4099 |
+
ai_set_cookie (cookie_block, 'ipt', ai_check_data [cookie_block]['ipt']);
|
4100 |
+
ai_set_cookie (cookie_block, 'it', Math.round (timestamp + ai_check_data [cookie_block]['it'] * 24 * 3600));
|
4101 |
+
}
|
4102 |
+
}
|
4103 |
+
} else {
|
4104 |
+
if (ai_cookie.hasOwnProperty (cookie_block) && ai_cookie [cookie_block].hasOwnProperty ('ipt')) {
|
4105 |
+
if (ai_debug) console.log ('AI IMPRESSIONS, block', cookie_block, 'removing ipt');
|
4106 |
+
|
4107 |
+
ai_set_cookie (cookie_block, 'ipt', '');
|
4108 |
+
}
|
4109 |
+
if (ai_cookie.hasOwnProperty (cookie_block) && ai_cookie [cookie_block].hasOwnProperty ('it')) {
|
4110 |
+
if (ai_debug) console.log ('AI IMPRESSIONS, block', cookie_block, 'removing it');
|
4111 |
+
|
4112 |
+
ai_set_cookie (cookie_block, 'it', '');
|
4113 |
+
}
|
4114 |
+
}
|
4115 |
+
}
|
4116 |
+
}
|
4117 |
+
}
|
4118 |
+
}
|
4119 |
+
|
4120 |
+
if (blocks.length) {
|
4121 |
+
if (ai_debug) {
|
4122 |
+
console.log ("AI IMPRESSION blocks:", blocks);
|
4123 |
+
console.log (" versions:", versions);
|
4124 |
+
}
|
4125 |
+
|
4126 |
+
if (ai_internal_tracking) {
|
4127 |
+
if (typeof ai_internal_tracking_no_impressions === 'undefined') {
|
4128 |
+
|
4129 |
+
// Mark as sent
|
4130 |
+
pageview_data = [];
|
4131 |
+
|
4132 |
+
// ***
|
4133 |
+
// $.ajax ({
|
4134 |
+
// url: ai_ajax_url,
|
4135 |
+
// type: "post",
|
4136 |
+
// data: {
|
4137 |
+
// action: "ai_ajax",
|
4138 |
+
// ai_check: ai_data_id,
|
4139 |
+
// views: blocks,
|
4140 |
+
// versions: versions,
|
4141 |
+
// },
|
4142 |
+
// async: true
|
4143 |
+
// }).done (function (data) {
|
4144 |
+
|
4145 |
+
var url_data = {
|
4146 |
+
action: "ai_ajax",
|
4147 |
+
ai_check: ai_data_id,
|
4148 |
+
};
|
4149 |
+
|
4150 |
+
var formBody = [];
|
4151 |
+
for (var property in url_data) {
|
4152 |
+
var encodedKey = encodeURIComponent (property);
|
4153 |
+
var encodedValue = encodeURIComponent (url_data [property]);
|
4154 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
4155 |
+
}
|
4156 |
+
|
4157 |
+
for (var index in blocks) {
|
4158 |
+
var encodedKey = encodeURIComponent ('views[]');
|
4159 |
+
var encodedValue = encodeURIComponent (blocks [index]);
|
4160 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
4161 |
+
}
|
4162 |
+
|
4163 |
+
for (var index in versions) {
|
4164 |
+
var encodedKey = encodeURIComponent ('versions[]');
|
4165 |
+
var encodedValue = encodeURIComponent (versions [index]);
|
4166 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
4167 |
+
}
|
4168 |
+
|
4169 |
+
formBody = formBody.join ("&");
|
4170 |
+
|
4171 |
+
async function ai_post_views () {
|
4172 |
+
const response = await fetch (ai_ajax_url, {
|
4173 |
+
method: 'POST',
|
4174 |
+
headers: {
|
4175 |
+
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
4176 |
+
},
|
4177 |
+
body: formBody
|
4178 |
+
});
|
4179 |
+
|
4180 |
+
const text = await response.text ();
|
4181 |
+
return text;
|
4182 |
+
}
|
4183 |
+
|
4184 |
+
ai_post_views ().then (data => {
|
4185 |
+
|
4186 |
+
data = data.trim ();
|
4187 |
+
if (data != "") {
|
4188 |
+
var db_records = JSON.parse (data);
|
4189 |
+
|
4190 |
+
if (ai_debug) console.log ("AI DB RECORDS: ", db_records);
|
4191 |
+
|
4192 |
+
if (typeof db_records ['#'] != 'undefined') {
|
4193 |
+
// Reload cookie data
|
4194 |
+
ai_cookie = ai_load_cookie ();
|
4195 |
+
|
4196 |
+
var date = new Date();
|
4197 |
+
var closed_until = Math.round (date.getTime() / 1000) + 12 * 3600;
|
4198 |
+
|
4199 |
+
var blocks_to_remove = new Array();
|
4200 |
+
for (var limited_block_index in db_records ['#']) {
|
4201 |
+
if (ai_debug) console.log ("AI SERVERSIDE LIMITED BLOCK:", db_records ['#'][limited_block_index]);
|
4202 |
+
|
4203 |
+
// Not needed as they will remain closed from the next page load
|
4204 |
+
// blocks_to_remove.push (db_records ['#'][limited_block_index]);
|
4205 |
+
|
4206 |
+
if (!ai_cookie.hasOwnProperty (db_records ['#'][limited_block_index]) || !ai_cookie [db_records ['#'][limited_block_index]].hasOwnProperty ('x')) {
|
4207 |
+
if (ai_debug) console.log ("AI SERVERSIDE LIMITED BLOCK:", db_records ['#'][limited_block_index], ' not closed - closing for 12 hours');
|
4208 |
+
|
4209 |
+
ai_set_cookie (db_records ['#'][limited_block_index], 'x', closed_until);
|
4210 |
+
}
|
4211 |
+
}
|
4212 |
+
|
4213 |
+
setTimeout (function () {
|
4214 |
+
for (index = 0; index < blocks_to_remove.length; ++index) {
|
4215 |
+
// ***
|
4216 |
+
// $('span[data-ai-block=' + blocks_to_remove [index] + ']').closest ("div[data-ai]").remove ();
|
4217 |
+
document.querySelectorAll ('span[data-ai-block="' + blocks_to_remove [index] + '"]').forEach ((el, index) => {
|
4218 |
+
var closest = el.closest ("div[data-ai]");
|
4219 |
+
if (closest) {
|
4220 |
+
closest.remove ();
|
4221 |
+
}
|
4222 |
+
});
|
4223 |
+
}
|
4224 |
+
}, 50);
|
4225 |
+
}
|
4226 |
+
|
4227 |
+
if (ai_debug) console.log ('');
|
4228 |
+
}
|
4229 |
+
|
4230 |
+
});
|
4231 |
+
} else {
|
4232 |
+
if (ai_debug) console.log ("AI PROCESS IMPRESSIONS INTERNAL TRACKING DISABLED");
|
4233 |
+
}
|
4234 |
+
}
|
4235 |
+
|
4236 |
+
if (ai_external_tracking) {
|
4237 |
+
if (typeof ai_external_tracking_no_impressions === 'undefined') {
|
4238 |
+
for (var i = 0; i < blocks.length; i++) {
|
4239 |
+
// Skip pageview data
|
4240 |
+
if (blocks [i] != 0) {
|
4241 |
+
external_tracking ("impression", blocks [i], block_names [i], block_counters [i], versions [i], version_names [i], true);
|
4242 |
+
}
|
4243 |
+
}
|
4244 |
+
} else {
|
4245 |
+
if (ai_debug) console.log ("AI PROCESS IMPRESSIONS EXTERNAL TRACKING DISABLED");
|
4246 |
+
}
|
4247 |
+
}
|
4248 |
+
}
|
4249 |
+
}
|
4250 |
+
|
4251 |
+
function ai_process_pageview_checks () {
|
4252 |
+
|
4253 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 6
|
4254 |
+
// var ai_debug = false;
|
4255 |
+
|
4256 |
+
ai_check_data = {};
|
4257 |
+
|
4258 |
+
if (typeof ai_iframe != 'undefined') return;
|
4259 |
+
|
4260 |
+
if (ai_debug) console.log ('AI PROCESS PAGEVIEW CHECKS');
|
4261 |
+
|
4262 |
+
ai_cookie = ai_load_cookie ();
|
4263 |
+
|
4264 |
+
// ***
|
4265 |
+
// $('.ai-check-block').each (function () {
|
4266 |
+
document.querySelectorAll ('.ai-check-block').forEach ((element, i) => {
|
4267 |
+
|
4268 |
+
// ***
|
4269 |
+
// var block = $(this).data ('ai-block');
|
4270 |
+
// var delay_pv = $(this).data ('ai-delay-pv');
|
4271 |
+
// var every_pv = $(this).data ('ai-every-pv');
|
4272 |
+
|
4273 |
+
// var code_hash = $(this).data ('ai-hash');
|
4274 |
+
// var max_imp = $(this).data ('ai-max-imp');
|
4275 |
+
// var limit_imp_per_time = $(this).data ('ai-limit-imp-per-time');
|
4276 |
+
// var limit_imp_time = $(this).data ('ai-limit-imp-time');
|
4277 |
+
// var max_clicks = $(this).data ('ai-max-clicks');
|
4278 |
+
// var limit_clicks_per_time = $(this).data ('ai-limit-clicks-per-time');
|
4279 |
+
// var limit_clicks_time = $(this).data ('ai-limit-clicks-time');
|
4280 |
+
|
4281 |
+
// var global_limit_clicks_per_time = $(this).data ('ai-global-limit-clicks-per-time');
|
4282 |
+
// var global_limit_clicks_time = $(this).data ('ai-global-limit-clicks-time');
|
4283 |
+
|
4284 |
+
|
4285 |
+
var block = element.dataset.aiBlock;
|
4286 |
+
var delay_pv = element.dataset.aiDelayPv;
|
4287 |
+
var every_pv = element.dataset.aiEveryPv;
|
4288 |
+
|
4289 |
+
var code_hash = element.dataset.aiHash;
|
4290 |
+
var max_imp = element.dataset.aiMaxImp;
|
4291 |
+
var limit_imp_per_time = element.dataset.aiLimitImpPerTime;
|
4292 |
+
var limit_imp_time = element.dataset.aiLimitImpTime;
|
4293 |
+
var max_clicks = element.dataset.aiMaxClicks;
|
4294 |
+
var limit_clicks_per_time = element.dataset.aiLimitClicksPerTime;
|
4295 |
+
var limit_clicks_time = element.dataset.aiLimitClicksTime;
|
4296 |
+
|
4297 |
+
|
4298 |
+
var global_limit_clicks_per_time = element.dataset.aiGlobalLimitClicksPerTime;
|
4299 |
+
var global_limit_clicks_time = element.dataset.aiGlobalLimitClicksTime;
|
4300 |
+
|
4301 |
+
if (ai_debug) console.log ('AI CHECK INITIAL DATA, block:', block);
|
4302 |
+
|
4303 |
+
if (typeof delay_pv != 'undefined' && delay_pv > 0) {
|
4304 |
+
if (!ai_check_data.hasOwnProperty (block)) {
|
4305 |
+
ai_check_data [block] = {};
|
4306 |
+
}
|
4307 |
+
ai_check_data [block]['d'] = delay_pv;
|
4308 |
+
|
4309 |
+
var cookie_delay_pv = '';
|
4310 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
4311 |
+
if (ai_cookie [block].hasOwnProperty ('d')) {
|
4312 |
+
cookie_delay_pv = ai_cookie [block]['d'];
|
4313 |
+
}
|
4314 |
+
}
|
4315 |
+
|
4316 |
+
if (cookie_delay_pv === '') {
|
4317 |
+
if (ai_debug) console.log ('AI CHECK PAGEVIEWS, block:', block, 'delay:', delay_pv);
|
4318 |
+
|
4319 |
+
ai_set_cookie (block, 'd', delay_pv - 1);
|
4320 |
+
}
|
4321 |
+
}
|
4322 |
+
|
4323 |
+
if (typeof every_pv != 'undefined' && every_pv >= 2) {
|
4324 |
+
if (!ai_check_data.hasOwnProperty (block)) {
|
4325 |
+
ai_check_data [block] = {};
|
4326 |
+
}
|
4327 |
+
|
4328 |
+
if (typeof ai_delay_showing_pageviews === 'undefined' && (!ai_cookie.hasOwnProperty (block) || !ai_cookie [block].hasOwnProperty ('d'))) {
|
4329 |
+
// Set d to process e
|
4330 |
+
if (!ai_cookie.hasOwnProperty (block)) {
|
4331 |
+
ai_cookie [block] = {};
|
4332 |
+
}
|
4333 |
+
ai_cookie [block]['d'] = 0;
|
4334 |
+
}
|
4335 |
+
|
4336 |
+
ai_check_data [block]['e'] = every_pv;
|
4337 |
+
}
|
4338 |
+
|
4339 |
+
if (typeof max_imp != 'undefined' && max_imp > 0) {
|
4340 |
+
if (!ai_check_data.hasOwnProperty (block)) {
|
4341 |
+
ai_check_data [block] = {};
|
4342 |
+
}
|
4343 |
+
ai_check_data [block]['i'] = max_imp;
|
4344 |
+
ai_check_data [block]['h'] = code_hash;
|
4345 |
+
|
4346 |
+
var cookie_code_hash = '';
|
4347 |
+
var cookie_max_imp = '';
|
4348 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
4349 |
+
if (ai_cookie [block].hasOwnProperty ('i')) {
|
4350 |
+
cookie_max_imp = ai_cookie [block]['i'];
|
4351 |
+
}
|
4352 |
+
if (ai_cookie [block].hasOwnProperty ('h')) {
|
4353 |
+
cookie_code_hash = ai_cookie [block]['h'];
|
4354 |
+
}
|
4355 |
+
}
|
4356 |
+
|
4357 |
+
if (cookie_max_imp === '' || cookie_code_hash != code_hash) {
|
4358 |
+
if (ai_debug) console.log ('AI CHECK IMPRESSIONS, block:', block, 'max', max_imp, 'impressions', 'hash', code_hash);
|
4359 |
+
|
4360 |
+
ai_set_cookie (block, 'i', max_imp);
|
4361 |
+
ai_set_cookie (block, 'h', code_hash);
|
4362 |
+
}
|
4363 |
+
} else {
|
4364 |
+
if (ai_cookie.hasOwnProperty (block) && ai_cookie [block].hasOwnProperty ('i')) {
|
4365 |
+
if (ai_debug) console.log ('AI IMPRESSIONS, block', block, 'removing i');
|
4366 |
+
|
4367 |
+
ai_set_cookie (block, 'i', '');
|
4368 |
+
if (!ai_cookie [block].hasOwnProperty ('c') && !ai_cookie [block].hasOwnProperty ('x')) {
|
4369 |
+
ai_set_cookie (block, 'h', '');
|
4370 |
+
}
|
4371 |
+
}
|
4372 |
+
}
|
4373 |
+
|
4374 |
+
if (typeof limit_imp_per_time != 'undefined' && limit_imp_per_time > 0 && typeof limit_imp_time != 'undefined' && limit_imp_time > 0) {
|
4375 |
+
if (!ai_check_data.hasOwnProperty (block)) {
|
4376 |
+
ai_check_data [block] = {};
|
4377 |
+
}
|
4378 |
+
ai_check_data [block]['ipt'] = limit_imp_per_time;
|
4379 |
+
ai_check_data [block]['it'] = limit_imp_time;
|
4380 |
+
|
4381 |
+
var cookie_limit_imp_per_time = '';
|
4382 |
+
var cookie_limit_imp_time = '';
|
4383 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
4384 |
+
if (ai_cookie [block].hasOwnProperty ('ipt')) {
|
4385 |
+
cookie_limit_imp_per_time = ai_cookie [block]['ipt'];
|
4386 |
+
}
|
4387 |
+
if (ai_cookie [block].hasOwnProperty ('it')) {
|
4388 |
+
cookie_limit_imp_time = ai_cookie [block]['it'];
|
4389 |
+
}
|
4390 |
+
}
|
4391 |
+
|
4392 |
+
if (cookie_limit_imp_per_time === '' || cookie_limit_imp_time === '') {
|
4393 |
+
if (ai_debug) console.log ('AI CHECK IMPRESSIONS, block:', block, 'max', limit_imp_per_time, 'impresssions per', limit_imp_time, 'days (' + (limit_imp_time * 24 * 3600), 's)');
|
4394 |
+
|
4395 |
+
ai_set_cookie (block, 'ipt', limit_imp_per_time);
|
4396 |
+
|
4397 |
+
var date = new Date();
|
4398 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
4399 |
+
|
4400 |
+
ai_set_cookie (block, 'it', Math.round (timestamp + limit_imp_time * 24 * 3600));
|
4401 |
+
}
|
4402 |
+
if (cookie_limit_imp_time > 0) {
|
4403 |
+
var date = new Date();
|
4404 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
4405 |
+
|
4406 |
+
if (cookie_limit_imp_time <= timestamp) {
|
4407 |
+
if (ai_debug) console.log ('AI CHECK IMPRESSIONS, block:', block, 'reset max', limit_imp_per_time, 'impresssions per', limit_imp_time, 'days (' + (limit_imp_time * 24 * 3600), 's)');
|
4408 |
+
|
4409 |
+
ai_set_cookie (block, 'ipt', limit_imp_per_time);
|
4410 |
+
ai_set_cookie (block, 'it', Math.round (timestamp + limit_imp_time * 24 * 3600));
|
4411 |
+
}
|
4412 |
+
}
|
4413 |
+
} else {
|
4414 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
4415 |
+
if (ai_cookie [block].hasOwnProperty ('ipt')) ai_set_cookie (block, 'ipt', '');
|
4416 |
+
if (ai_cookie [block].hasOwnProperty ('it')) ai_set_cookie (block, 'it', '');
|
4417 |
+
}
|
4418 |
+
}
|
4419 |
+
|
4420 |
+
if (typeof max_clicks != 'undefined' && max_clicks > 0) {
|
4421 |
+
if (!ai_check_data.hasOwnProperty (block)) {
|
4422 |
+
ai_check_data [block] = {};
|
4423 |
+
}
|
4424 |
+
ai_check_data [block]['c'] = max_clicks;
|
4425 |
+
ai_check_data [block]['h'] = code_hash;
|
4426 |
+
|
4427 |
+
var cookie_code_hash = '';
|
4428 |
+
var cookie_max_clicks = '';
|
4429 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
4430 |
+
if (ai_cookie [block].hasOwnProperty ('c')) {
|
4431 |
+
cookie_max_clicks = ai_cookie [block]['c'];
|
4432 |
+
}
|
4433 |
+
if (ai_cookie [block].hasOwnProperty ('h')) {
|
4434 |
+
cookie_code_hash = ai_cookie [block]['h'];
|
4435 |
+
}
|
4436 |
+
}
|
4437 |
+
|
4438 |
+
if (cookie_max_clicks === '' || cookie_code_hash != code_hash) {
|
4439 |
+
if (ai_debug) console.log ('AI CHECK CLICKS, block:', block, 'max', max_clicks, 'clicks', 'hash', code_hash);
|
4440 |
+
|
4441 |
+
ai_set_cookie (block, 'c', max_clicks);
|
4442 |
+
ai_set_cookie (block, 'h', code_hash);
|
4443 |
+
}
|
4444 |
+
} else {
|
4445 |
+
if (ai_cookie.hasOwnProperty (block) && ai_cookie [block].hasOwnProperty ('c')) {
|
4446 |
+
if (ai_debug) console.log ('AI CLICKS, block', block, 'removing c');
|
4447 |
+
|
4448 |
+
ai_set_cookie (block, 'c', '');
|
4449 |
+
if (!ai_cookie [block].hasOwnProperty ('i') && !ai_cookie [block].hasOwnProperty ('x')) {
|
4450 |
+
ai_set_cookie (block, 'h', '');
|
4451 |
+
}
|
4452 |
+
}
|
4453 |
+
}
|
4454 |
+
|
4455 |
+
if (typeof limit_clicks_per_time != 'undefined' && limit_clicks_per_time > 0 && typeof limit_clicks_time != 'undefined' && limit_clicks_time > 0) {
|
4456 |
+
if (!ai_check_data.hasOwnProperty (block)) {
|
4457 |
+
ai_check_data [block] = {};
|
4458 |
+
}
|
4459 |
+
ai_check_data [block]['cpt'] = limit_clicks_per_time;
|
4460 |
+
ai_check_data [block]['ct'] = limit_clicks_time;
|
4461 |
+
|
4462 |
+
var cookie_limit_clicks_per_time = '';
|
4463 |
+
var cookie_limit_clicks_time = '';
|
4464 |
+
|
4465 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
4466 |
+
if (ai_cookie [block].hasOwnProperty ('cpt')) {
|
4467 |
+
cookie_limit_clicks_per_time = ai_cookie [block]['cpt'];
|
4468 |
+
}
|
4469 |
+
if (ai_cookie [block].hasOwnProperty ('ct')) {
|
4470 |
+
cookie_limit_clicks_time = ai_cookie [block]['ct'];
|
4471 |
+
}
|
4472 |
+
}
|
4473 |
+
|
4474 |
+
if (cookie_limit_clicks_per_time === '' || cookie_limit_clicks_time === '') {
|
4475 |
+
if (ai_debug) console.log ('AI CHECK CLICKS, block:', block, 'max', limit_clicks_per_time, 'clicks per', limit_clicks_time, 'days (' + (limit_clicks_time * 24 * 3600), 's)');
|
4476 |
+
|
4477 |
+
ai_set_cookie (block, 'cpt', limit_clicks_per_time);
|
4478 |
+
|
4479 |
+
var date = new Date();
|
4480 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
4481 |
+
|
4482 |
+
ai_set_cookie (block, 'ct', Math.round (timestamp + limit_clicks_time * 24 * 3600));
|
4483 |
+
}
|
4484 |
+
|
4485 |
+
if (cookie_limit_clicks_time > 0) {
|
4486 |
+
var date = new Date();
|
4487 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
4488 |
+
|
4489 |
+
if (cookie_limit_clicks_time <= timestamp) {
|
4490 |
+
if (ai_debug) console.log ('AI CHECK CLICKS, block:', block, 'reset max', limit_clicks_per_time, 'clicks per', limit_clicks_time, 'days (' + (limit_clicks_time * 24 * 3600), 's)');
|
4491 |
+
|
4492 |
+
ai_set_cookie (block, 'cpt', limit_clicks_per_time);
|
4493 |
+
ai_set_cookie (block, 'ct', Math.round (timestamp + limit_clicks_time * 24 * 3600));
|
4494 |
+
}
|
4495 |
+
}
|
4496 |
+
} else {
|
4497 |
+
if (ai_cookie.hasOwnProperty (block)) {
|
4498 |
+
if (ai_cookie [block].hasOwnProperty ('cpt')) ai_set_cookie (block, 'cpt', '');
|
4499 |
+
if (ai_cookie [block].hasOwnProperty ('ct')) ai_set_cookie (block, 'ct', '');
|
4500 |
+
}
|
4501 |
+
}
|
4502 |
+
|
4503 |
+
if (typeof global_limit_clicks_per_time != 'undefined' && global_limit_clicks_per_time > 0 && typeof global_limit_clicks_time != 'undefined' && global_limit_clicks_time > 0) {
|
4504 |
+
if (!ai_check_data.hasOwnProperty ('G')) {
|
4505 |
+
ai_check_data ['G'] = {};
|
4506 |
+
}
|
4507 |
+
ai_check_data ['G']['cpt'] = global_limit_clicks_per_time;
|
4508 |
+
ai_check_data ['G']['ct'] = global_limit_clicks_time;
|
4509 |
+
|
4510 |
+
var global_cookie_limit_clicks_per_time = '';
|
4511 |
+
var global_cookie_limit_clicks_time = '';
|
4512 |
+
|
4513 |
+
if (ai_cookie.hasOwnProperty ('G')) {
|
4514 |
+
if (ai_cookie ['G'].hasOwnProperty ('cpt')) {
|
4515 |
+
global_cookie_limit_clicks_per_time = ai_cookie ['G']['cpt'];
|
4516 |
+
}
|
4517 |
+
if (ai_cookie ['G'].hasOwnProperty ('ct')) {
|
4518 |
+
global_cookie_limit_clicks_time = ai_cookie ['G']['ct'];
|
4519 |
+
}
|
4520 |
+
}
|
4521 |
+
|
4522 |
+
if (global_cookie_limit_clicks_per_time === '' || global_cookie_limit_clicks_time === '') {
|
4523 |
+
if (ai_debug) console.log ('AI CHECK CLICKS GLOBAL: max', global_limit_clicks_per_time, 'clicks per', global_limit_clicks_time, 'days (' + (global_limit_clicks_time * 24 * 3600), 's)');
|
4524 |
+
|
4525 |
+
ai_set_cookie ('G', 'cpt', global_limit_clicks_per_time);
|
4526 |
+
|
4527 |
+
var date = new Date();
|
4528 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
4529 |
+
|
4530 |
+
ai_set_cookie ('G', 'ct', Math.round (timestamp + global_limit_clicks_time * 24 * 3600));
|
4531 |
+
}
|
4532 |
+
|
4533 |
+
if (global_cookie_limit_clicks_time > 0) {
|
4534 |
+
var date = new Date();
|
4535 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
4536 |
+
|
4537 |
+
if (global_cookie_limit_clicks_time <= timestamp) {
|
4538 |
+
if (ai_debug) console.log ('AI CHECK CLICKS GLOBAL: reset max', global_limit_clicks_per_time, 'clicks per', global_limit_clicks_time, 'days (' + (global_limit_clicks_time * 24 * 3600), 's)');
|
4539 |
+
|
4540 |
+
ai_set_cookie ('G', 'cpt', global_limit_clicks_per_time);
|
4541 |
+
ai_set_cookie ('G', 'ct', Math.round (timestamp + global_limit_clicks_time * 24 * 3600));
|
4542 |
+
}
|
4543 |
+
}
|
4544 |
+
} else {
|
4545 |
+
if (ai_cookie.hasOwnProperty ('G')) {
|
4546 |
+
if (ai_cookie ['G'].hasOwnProperty ('cpt')) ai_set_cookie ('G', 'cpt', '');
|
4547 |
+
if (ai_cookie ['G'].hasOwnProperty ('ct')) ai_set_cookie ('G', 'ct', '');
|
4548 |
+
}
|
4549 |
+
}
|
4550 |
+
});
|
4551 |
+
|
4552 |
+
// Remove check class so it's not processed again when tracking is called
|
4553 |
+
// ***
|
4554 |
+
// $('.ai-check-block'). removeClass ('ai-check-block');
|
4555 |
+
document.querySelectorAll ('.ai-check-block').forEach ((element, i) => {
|
4556 |
+
element.classList.remove ('ai-check-block');
|
4557 |
+
});
|
4558 |
+
|
4559 |
+
|
4560 |
+
if (ai_debug) console.log ('');
|
4561 |
+
if (ai_debug) console.log ('AI PROCESS CHECKS', ai_check_data);
|
4562 |
+
|
4563 |
+
|
4564 |
+
if (ai_debug) console.log ('AI CHECK PAGEVIEWS');
|
4565 |
+
|
4566 |
+
for (var cookie_block in ai_cookie) {
|
4567 |
+
for (var cookie_block_property in ai_cookie [cookie_block]) {
|
4568 |
+
if (cookie_block_property == 'd') {
|
4569 |
+
if (ai_debug) console.log ('AI CHECK PAGEVIEWS block:', cookie_block);
|
4570 |
+
|
4571 |
+
var delay = ai_cookie [cookie_block][cookie_block_property];
|
4572 |
+
if (delay > 0) {
|
4573 |
+
if (ai_debug) console.log ('AI PAGEVIEW, block', cookie_block, 'delayed for', delay - 1, 'pageviews');
|
4574 |
+
|
4575 |
+
ai_set_cookie (cookie_block, 'd', delay - 1);
|
4576 |
+
} else {
|
4577 |
+
if (ai_check_data.hasOwnProperty (cookie_block) && ai_check_data [cookie_block].hasOwnProperty ('e')) {
|
4578 |
+
if (ai_debug) console.log ('AI PAGEVIEW, block', cookie_block, 'show every', ai_check_data [cookie_block]['e'], 'pageviews, delayed for', ai_check_data [cookie_block]['e'] - 1, 'pageviews');
|
4579 |
+
|
4580 |
+
ai_set_cookie (cookie_block, 'd', ai_check_data [cookie_block]['e'] - 1);
|
4581 |
+
} else {
|
4582 |
+
if (!ai_check_data.hasOwnProperty (cookie_block) || !ai_check_data [cookie_block].hasOwnProperty ('d')) {
|
4583 |
+
if (ai_debug) console.log ('AI PAGEVIEW, block', cookie_block, 'removing d');
|
4584 |
+
|
4585 |
+
ai_set_cookie (cookie_block, 'd', '');
|
4586 |
+
}
|
4587 |
+
}
|
4588 |
+
}
|
4589 |
+
}
|
4590 |
+
}
|
4591 |
+
}
|
4592 |
+
}
|
4593 |
+
|
4594 |
+
function ai_log_impressions () {
|
4595 |
+
|
4596 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 7
|
4597 |
+
// var ai_debug = false;
|
4598 |
+
|
4599 |
+
if (ai_debug) console.log ('');
|
4600 |
+
if (ai_debug) console.log ('AI TRACKING');
|
4601 |
+
|
4602 |
+
Array.prototype.forEach.call (document.querySelectorAll ('[data-ai]'), function (block_wrapping_div) {
|
4603 |
+
var new_tracking_data = '';
|
4604 |
+
|
4605 |
+
if (ai_debug && block_wrapping_div.hasAttribute ('data-ai-1')) console.log ('AI TRACKING CHECKING BLOCK', block_wrapping_div.getAttribute ('class'));
|
4606 |
+
|
4607 |
+
for (var fallback_level = 1; fallback_level <= 9; fallback_level ++) {
|
4608 |
+
if (block_wrapping_div.hasAttribute ('data-ai-' + fallback_level)) {
|
4609 |
+
new_tracking_data = block_wrapping_div.getAttribute ('data-ai-' + fallback_level);
|
4610 |
+
|
4611 |
+
if (ai_debug) console.log (' FALLBACK LEVEL', fallback_level);
|
4612 |
+
} else break;
|
4613 |
+
}
|
4614 |
+
|
4615 |
+
if (new_tracking_data != '') {
|
4616 |
+
block_wrapping_div.setAttribute ('data-ai', new_tracking_data);
|
4617 |
+
}
|
4618 |
+
|
4619 |
+
if (ai_debug) console.log (' TRACKING DATA UPDATED TO', b64d (block_wrapping_div.getAttribute ('data-ai')));
|
4620 |
+
});
|
4621 |
+
|
4622 |
+
if (ai_track_pageviews) {
|
4623 |
+
var client_width = document.documentElement.clientWidth, inner_width = window.innerWidth;
|
4624 |
+
var viewport_width = client_width < inner_width ? inner_width : client_width;
|
4625 |
+
|
4626 |
+
var version = 0;
|
4627 |
+
var name = '?';
|
4628 |
+
// ***
|
4629 |
+
// $.each (ai_viewport_widths, function (index, width) {
|
4630 |
+
ai_viewport_widths.forEach ((width, index) => {
|
4631 |
+
if (viewport_width >= width) {
|
4632 |
+
version = ai_viewport_indexes [index];
|
4633 |
+
name = ai_viewport_names [index];
|
4634 |
+
return (false);
|
4635 |
+
}
|
4636 |
+
});
|
4637 |
+
|
4638 |
+
if (ai_debug) console.log ('AI TRACKING PAGEVIEW, viewport width:', viewport_width, '=>', name);
|
4639 |
+
|
4640 |
+
// ***
|
4641 |
+
// var ai_masking_data = jQuery(b64d ("Ym9keQ==")).attr (AI_ADB_ATTR_NAME);
|
4642 |
+
var ai_masking_data = document.querySelector (b64d ("Ym9keQ==")).getAttribute (ai_adb_attribute);
|
4643 |
+
if (typeof ai_masking_data === "string") {
|
4644 |
+
var ai_masking = ai_masking_data == b64d ("bWFzaw==");
|
4645 |
+
}
|
4646 |
+
|
4647 |
+
if (typeof ai_masking_data === "string" && typeof ai_masking === "boolean" && ai_masking) {
|
4648 |
+
if (ai_external_tracking) {
|
4649 |
+
external_tracking ("ad blocking", 0, ai_viewport_names [version - 1], 0, 0, '', true);
|
4650 |
+
}
|
4651 |
+
version |= 0x80;
|
4652 |
+
}
|
4653 |
+
|
4654 |
+
pageview_data = [0, version];
|
4655 |
+
}
|
4656 |
+
|
4657 |
+
ai_process_pageview_checks ();
|
4658 |
+
|
4659 |
+
ai_process_impressions ();
|
4660 |
+
|
4661 |
+
// Pageview data was not sent with block impressions
|
4662 |
+
if (pageview_data.length != 0) {
|
4663 |
+
if (ai_debug) console.log ('AI PROCESS IMPRESSIONS - SENDING PAGEVIEW DATA', pageview_data);
|
4664 |
+
|
4665 |
+
if (ai_internal_tracking) {
|
4666 |
+
// ***
|
4667 |
+
// $.ajax ({
|
4668 |
+
// url: ai_ajax_url,
|
4669 |
+
// type: "post",
|
4670 |
+
// data: {
|
4671 |
+
// action: "ai_ajax",
|
4672 |
+
// ai_check: ai_data_id,
|
4673 |
+
// views: [0],
|
4674 |
+
// versions: [version],
|
4675 |
+
// },
|
4676 |
+
// async: true
|
4677 |
+
// }).done (function (data) {
|
4678 |
+
|
4679 |
+
|
4680 |
+
|
4681 |
+
var url_data = {
|
4682 |
+
action: "ai_ajax",
|
4683 |
+
ai_check: ai_data_id,
|
4684 |
+
};
|
4685 |
+
|
4686 |
+
var formBody = [];
|
4687 |
+
for (var property in url_data) {
|
4688 |
+
var encodedKey = encodeURIComponent (property);
|
4689 |
+
var encodedValue = encodeURIComponent (url_data [property]);
|
4690 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
4691 |
+
}
|
4692 |
+
|
4693 |
+
var encodedKey = encodeURIComponent ('views[]');
|
4694 |
+
var encodedValue = encodeURIComponent (0);
|
4695 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
4696 |
+
|
4697 |
+
var encodedKey = encodeURIComponent ('versions[]');
|
4698 |
+
var encodedValue = encodeURIComponent (version);
|
4699 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
4700 |
+
|
4701 |
+
formBody = formBody.join ("&");
|
4702 |
+
|
4703 |
+
async function ai_post_pageview () {
|
4704 |
+
const response = await fetch (ai_ajax_url, {
|
4705 |
+
method: 'POST',
|
4706 |
+
headers: {
|
4707 |
+
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
4708 |
+
},
|
4709 |
+
body: formBody
|
4710 |
+
});
|
4711 |
+
|
4712 |
+
const text = await response.text ();
|
4713 |
+
return text;
|
4714 |
+
}
|
4715 |
+
|
4716 |
+
ai_post_pageview ().then (data => {
|
4717 |
+
|
4718 |
+
if (ai_debug) {
|
4719 |
+
data = data.trim ();
|
4720 |
+
if (data != "") {
|
4721 |
+
var db_records = JSON.parse (data);
|
4722 |
+
console.log ("AI DB RECORDS: ", db_records);
|
4723 |
+
}
|
4724 |
+
}
|
4725 |
+
});
|
4726 |
+
}
|
4727 |
+
}
|
4728 |
+
|
4729 |
+
ai_tracking_finished = true;
|
4730 |
+
}
|
4731 |
+
|
4732 |
+
// ***
|
4733 |
+
// jQuery (window).on ('load', function () {
|
4734 |
+
window.addEventListener ('load', (event) => {
|
4735 |
+
if (typeof ai_delay_tracking == 'undefined') {
|
4736 |
+
ai_delay_tracking = 0;
|
4737 |
+
}
|
4738 |
+
|
4739 |
+
setTimeout (ai_log_impressions, ai_delay_tracking + 1400);
|
4740 |
+
setTimeout (ai_install_click_trackers, ai_delay_tracking + 1500);
|
4741 |
+
});
|
4742 |
+
// ***
|
4743 |
+
//});
|
4744 |
+
}
|
4745 |
+
|
4746 |
+
ai_ready (ai_tracking);
|
4747 |
+
|
4748 |
+
}
|
4749 |
+
if (typeof ai_adsense_ad_names !== 'undefined') {
|
4750 |
+
|
4751 |
+
//var ai_adsense_ad_names = [];
|
4752 |
+
//var ai_preview_window = typeof ai_preview !== 'undefined';
|
4753 |
+
|
4754 |
+
function ai_process_adsense_ad (element) {
|
4755 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
4756 |
+
// var ai_debug = false;
|
4757 |
+
|
4758 |
+
// var adsense_container = jQuery(element);
|
4759 |
+
var adsense_container = element;
|
4760 |
+
|
4761 |
+
// var adsense_width = adsense_container.attr ('width');
|
4762 |
+
var adsense_width = adsense_container.getAttribute ('width');
|
4763 |
+
// var adsense_height = adsense_container.attr ('height');
|
4764 |
+
var adsense_height = adsense_container.getAttribute ('height');
|
4765 |
+
|
4766 |
+
// var adsense_iframe2 = adsense_container.contents().find ('iframe[allowtransparency]');
|
4767 |
+
// var url_parameters = getAllUrlParams (adsense_iframe2.attr ('src'))
|
4768 |
+
// var url_parameters = getAllUrlParams (adsense_container.attr ('src'))
|
4769 |
+
var url_parameters = getAllUrlParams (adsense_container.getAttribute ('src'))
|
4770 |
+
|
4771 |
+
if (typeof url_parameters ['client'] !== 'undefined') {
|
4772 |
+
var adsense_ad_client = url_parameters ['client'];
|
4773 |
+
var adsense_publisher_id = adsense_ad_client.replace ('ca-', '');
|
4774 |
+
var adsense_ad_slot = url_parameters ['slotname'];
|
4775 |
+
var adsense_index = url_parameters ['ifi'];
|
4776 |
+
|
4777 |
+
if (ai_debug) console.log ('AI ADSENSE', adsense_index, adsense_ad_client, adsense_ad_slot, url_parameters ['format'], url_parameters ['w'], url_parameters ['h']);
|
4778 |
+
|
4779 |
+
// var adsense_overlay = jQuery('<div class="ai-debug-ad-overlay"></div>');
|
4780 |
+
var adsense_overlay_class = 'ai-debug-ad-overlay';
|
4781 |
+
|
4782 |
+
var adsense_ad_info = '';
|
4783 |
+
if (typeof adsense_ad_slot !== 'undefined') {
|
4784 |
+
var adsense_ad_name = '';
|
4785 |
+
if (typeof ai_adsense_ad_names ['publisher_id'] !== 'undefined' &&
|
4786 |
+
ai_adsense_ad_names ['publisher_id'] == adsense_publisher_id &&
|
4787 |
+
typeof ai_adsense_ad_names [adsense_ad_slot] !== 'undefined') {
|
4788 |
+
adsense_ad_name = '<div class="ai-info ai-info-2">' + ai_adsense_ad_names [adsense_ad_slot] + '</div>';
|
4789 |
+
}
|
4790 |
+
adsense_ad_info = '<div class="ai-info ai-info-1">' + adsense_ad_slot + '</div>' + adsense_ad_name;
|
4791 |
+
} else {
|
4792 |
+
var adsense_auto_ads = adsense_container.closest ('div.google-auto-placed').length != 0;
|
4793 |
+
if (adsense_auto_ads) {
|
4794 |
+
// adsense_overlay.addClass ('ai-auto-ads');
|
4795 |
+
adsense_overlay_class += ' ai-auto-ads';
|
4796 |
+
|
4797 |
+
adsense_ad_info = '<div class="ai-info ai-info-1">Auto ads</div>';
|
4798 |
+
// } else adsense_overlay.addClass ('ai-no-slot');
|
4799 |
+
} else adsense_overlay_class += ' ai-no-slot';
|
4800 |
+
}
|
4801 |
+
|
4802 |
+
var adsense_overlay = '<div class="' + adsense_overlay_class + '"></div>';
|
4803 |
+
|
4804 |
+
// var adsense_info = jQuery('<div class="ai-debug-ad-info"><div class="ai-info ai-info-1">AdSense #' + adsense_index + '</div><div class="ai-info ai-info-2">' + adsense_width + 'x' + adsense_height + '</div>' + adsense_ad_info + '</div>');
|
4805 |
+
var adsense_info = '<div class="ai-debug-ad-info"><div class="ai-info ai-info-1">AdSense #' + adsense_index + '</div><div class="ai-info ai-info-2">' + adsense_width + 'x' + adsense_height + '</div>' + adsense_ad_info + '</div>';
|
4806 |
+
|
4807 |
+
// adsense_container.after (adsense_info);
|
4808 |
+
adsense_container.insertAdjacentHTML ('afterend', adsense_info);
|
4809 |
+
|
4810 |
+
if (!ai_preview_window) {
|
4811 |
+
// adsense_container.after (adsense_overlay);
|
4812 |
+
adsense_container.insertAdjacentHTML ('afterend', adsense_overlay);
|
4813 |
+
}
|
4814 |
+
}
|
4815 |
+
}
|
4816 |
+
|
4817 |
+
//function ai_process_adsense_ads () {
|
4818 |
+
//// jQuery('ins > ins > iframe[src*="google"]:visible').each (function () {
|
4819 |
+
// document.querySelectorAll ('ins iframe[src*="google"]').forEach ((el, index) => {
|
4820 |
+
// if (!!(el.offsetWidth || el.offsetHeight || el.getClientRects ().length)) {
|
4821 |
+
//// ai_process_adsense_ad (this);
|
4822 |
+
// ai_process_adsense_ad (el);
|
4823 |
+
// }
|
4824 |
+
// });
|
4825 |
+
//}
|
4826 |
+
|
4827 |
+
|
4828 |
+
//jQuery(document).ready(function($) {
|
4829 |
+
function ai_load_adsense_ad_units () {
|
4830 |
+
|
4831 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
4832 |
+
// var ai_debug = false;
|
4833 |
+
|
4834 |
+
// var ai_ajax_url = 'AI_AJAXURL';
|
4835 |
+
// var ai_nonce = 'AI_NONCE';
|
4836 |
+
// var adsense_data = {'ai': 1}; // dummy
|
4837 |
+
|
4838 |
+
// $.post (ai_ajax_url, {'action': 'ai_ajax', 'ai_check': ai_nonce, 'adsense-ad-units': adsense_data}
|
4839 |
+
// ).done (function (data) {
|
4840 |
+
|
4841 |
+
var data = {
|
4842 |
+
'action': "ai_ajax",
|
4843 |
+
'ai_check': ai_nonce,
|
4844 |
+
'adsense-ad-units[ai]': 1
|
4845 |
+
};
|
4846 |
+
|
4847 |
+
var formBody = [];
|
4848 |
+
for (var property in data) {
|
4849 |
+
var encodedKey = encodeURIComponent (property);
|
4850 |
+
var encodedValue = encodeURIComponent (data [property]);
|
4851 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
4852 |
+
}
|
4853 |
+
formBody = formBody.join ("&");
|
4854 |
+
|
4855 |
+
async function ai_load_adsense () {
|
4856 |
+
const response = await fetch (ai_ajax_url, {
|
4857 |
+
method: 'POST',
|
4858 |
+
headers: {
|
4859 |
+
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
4860 |
+
},
|
4861 |
+
body: formBody
|
4862 |
+
});
|
4863 |
+
|
4864 |
+
const text = await response.text ();
|
4865 |
+
|
4866 |
+
return text;
|
4867 |
+
}
|
4868 |
+
|
4869 |
+
ai_load_adsense ().then (data => {
|
4870 |
+
if (data != '') {
|
4871 |
+
try {
|
4872 |
+
ai_adsense_ad_names = JSON.parse (data);
|
4873 |
+
|
4874 |
+
if (ai_debug) console.log ('');
|
4875 |
+
if (ai_debug) console.log ("AI ADSENSE DATA:", Object.keys (ai_adsense_ad_names).length - 1, 'ad units');
|
4876 |
+
|
4877 |
+
} catch (error) {
|
4878 |
+
if (ai_debug) console.log ("AI ADSENSE DATA ERROR:", data);
|
4879 |
+
}
|
4880 |
+
}
|
4881 |
+
if (ai_debug) console.log ('AI ADSENSE DATA', 'END');
|
4882 |
+
// }).fail (function (xhr, status, error) {
|
4883 |
+
}).catch ((error) => {
|
4884 |
+
if (ai_debug) console.log ("AI ADSENSE DATA ERROR:", error.status, error.statusText);
|
4885 |
+
// }).always (function (data) {
|
4886 |
+
});
|
4887 |
+
|
4888 |
+
// $(window).on ('load', function () {
|
4889 |
+
// if (!ai_preview_window) setTimeout (function() {ai_process_adsense_ads (jQuery);}, 500);
|
4890 |
+
// });
|
4891 |
+
//});
|
4892 |
+
}
|
4893 |
+
|
4894 |
+
function ai_ready (fn) {
|
4895 |
+
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) {
|
4896 |
+
fn ();
|
4897 |
+
} else {
|
4898 |
+
document.addEventListener ('DOMContentLoaded', fn);
|
4899 |
+
}
|
4900 |
+
}
|
4901 |
+
|
4902 |
+
ai_ready (ai_load_adsense_ad_units);
|
4903 |
+
|
4904 |
+
if (!ai_preview_window) {
|
4905 |
+
const targetNode = document.querySelector ('body');
|
4906 |
+
const config = {attributes: false, childList: true, subtree: true};
|
4907 |
+
const ai_process_adsense_callback = function (mutationsList, observer) {
|
4908 |
+
// Use traditional 'for loops' for IE 11
|
4909 |
+
for (const mutation of mutationsList) {
|
4910 |
+
if (mutation.type === 'childList' &&
|
4911 |
+
mutation.addedNodes.length &&
|
4912 |
+
mutation.addedNodes [0].tagName == 'IFRAME' &&
|
4913 |
+
mutation.addedNodes [0].getAttribute ('width') != null &&
|
4914 |
+
mutation.addedNodes [0].getAttribute ('height') != null &&
|
4915 |
+
!!mutation.addedNodes [0].closest ('.adsbygoogle')) {
|
4916 |
+
ai_process_adsense_ad (mutation.addedNodes [0]);
|
4917 |
+
}
|
4918 |
+
}
|
4919 |
+
};
|
4920 |
+
|
4921 |
+
const observer = new MutationObserver (ai_process_adsense_callback);
|
4922 |
+
observer.observe (targetNode, config);
|
4923 |
+
}
|
4924 |
+
|
4925 |
+
|
4926 |
+
function getAllUrlParams (url) {
|
4927 |
+
|
4928 |
+
// get query string from url (optional) or window
|
4929 |
+
var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
|
4930 |
+
|
4931 |
+
// we'll store the parameters here
|
4932 |
+
var obj = {};
|
4933 |
+
|
4934 |
+
// if query string exists
|
4935 |
+
if (queryString) {
|
4936 |
+
|
4937 |
+
// stuff after # is not part of query string, so get rid of it
|
4938 |
+
queryString = queryString.split('#')[0];
|
4939 |
+
|
4940 |
+
// split our query string into its component parts
|
4941 |
+
var arr = queryString.split('&');
|
4942 |
+
|
4943 |
+
for (var i=0; i<arr.length; i++) {
|
4944 |
+
// separate the keys and the values
|
4945 |
+
var a = arr[i].split('=');
|
4946 |
+
|
4947 |
+
// in case params look like: list[]=thing1&list[]=thing2
|
4948 |
+
var paramNum = undefined;
|
4949 |
+
var paramName = a[0].replace(/\[\d*\]/, function(v) {
|
4950 |
+
paramNum = v.slice(1,-1);
|
4951 |
+
return '';
|
4952 |
+
});
|
4953 |
+
|
4954 |
+
// set parameter value (use 'true' if empty)
|
4955 |
+
// var paramValue = typeof(a[1])==='undefined' ? true : a[1];
|
4956 |
+
var paramValue = typeof(a[1])==='undefined' ? '' : a[1];
|
4957 |
+
|
4958 |
+
// (optional) keep case consistent
|
4959 |
+
paramName = paramName.toLowerCase();
|
4960 |
+
paramValue = paramValue.toLowerCase();
|
4961 |
+
|
4962 |
+
// if parameter name already exists
|
4963 |
+
if (obj[paramName]) {
|
4964 |
+
// convert value to array (if still string)
|
4965 |
+
if (typeof obj[paramName] === 'string') {
|
4966 |
+
obj[paramName] = [obj[paramName]];
|
4967 |
+
}
|
4968 |
+
// if no array index number specified...
|
4969 |
+
if (typeof paramNum === 'undefined') {
|
4970 |
+
// put the value on the end of the array
|
4971 |
+
obj[paramName].push(paramValue);
|
4972 |
+
}
|
4973 |
+
// if array index number specified...
|
4974 |
+
else {
|
4975 |
+
// put the value at that index number
|
4976 |
+
obj[paramName][paramNum] = paramValue;
|
4977 |
+
}
|
4978 |
+
}
|
4979 |
+
// if param name doesn't exist yet, set it
|
4980 |
+
else {
|
4981 |
+
obj[paramName] = paramValue;
|
4982 |
+
}
|
4983 |
+
}
|
4984 |
+
}
|
4985 |
+
|
4986 |
+
return obj;
|
4987 |
+
}
|
4988 |
+
|
4989 |
+
}
|
4990 |
+
if (typeof ai_adsense_ad_names !== 'undefined') {
|
4991 |
+
|
4992 |
+
//jQuery(window).on ('load', function () {
|
4993 |
+
window.addEventListener ('load', (event) => {
|
4994 |
+
setTimeout (function() {
|
4995 |
+
// var google_auto_placed = jQuery ('.google-auto-placed > ins');
|
4996 |
+
// google_auto_placed.before ('<section class=\"ai-debug-bar ai-debug-adsense ai-adsense-auto-ads\">' + ai_front.automatically_placed + '</section>');
|
4997 |
+
document.querySelectorAll ('.google-auto-placed > ins').forEach ((el, index) => {
|
4998 |
+
el.insertAdjacentHTML ('afterbegin', '<section class=\"ai-debug-bar ai-debug-adsense ai-adsense-auto-ads\">' + ai_front.automatically_placed + '</section>');
|
4999 |
+
});
|
5000 |
+
|
5001 |
+
}, 150);
|
5002 |
+
});
|
5003 |
+
|
5004 |
+
}
|
5005 |
+
//jQuery(document).ready(function($) {
|
5006 |
+
// ***
|
5007 |
+
function ai_check_close_buttons () {
|
5008 |
+
var ai_debug = typeof ai_debugging !== 'undefined';
|
5009 |
+
// var ai_debug = false;
|
5010 |
+
|
5011 |
+
function ai_process_close_button (element) {
|
5012 |
+
// var ai_close_button = $(element).find ('.ai-close-button.ai-close-unprocessed');
|
5013 |
+
// ***
|
5014 |
+
var ai_close_button = element.querySelector ('.ai-close-button.ai-close-unprocessed');
|
5015 |
+
|
5016 |
+
if (ai_close_button != null) {
|
5017 |
+
|
5018 |
+
|
5019 |
+
ai_close_button.addEventListener ('click', (event) => {
|
5020 |
+
ai_close_block (ai_close_button);
|
5021 |
+
});
|
5022 |
+
|
5023 |
+
|
5024 |
+
// if ($(element).outerHeight () !== 0) {
|
5025 |
+
// ***
|
5026 |
+
if (element.offsetHeight !== 0) {
|
5027 |
+
// if (!$(element).find ('.ai-parallax').length) {
|
5028 |
+
// ***
|
5029 |
+
if (element.querySelector ('.ai-parallax') == null) {
|
5030 |
+
// $(element).css ('width', '').addClass ('ai-close-fit');
|
5031 |
+
// ***
|
5032 |
+
element.style.width = '';
|
5033 |
+
element.classList.add ('ai-close-fit');
|
5034 |
+
}
|
5035 |
+
// $(element).find ('.ai-close-button').fadeIn (50);
|
5036 |
+
// ***
|
5037 |
+
ai_fade_in (element.querySelector ('.ai-close-button'), 50);
|
5038 |
+
|
5039 |
+
// if (ai_debug) console.log ('AI CLOSE BUTTON', $(element).attr ('class'));
|
5040 |
+
// ***
|
5041 |
+
if (ai_debug) console.log ('AI CLOSE BUTTON', element.hasAttribute ("class") ? element.getAttribute ('class') : '');
|
5042 |
+
} else {
|
5043 |
+
// if (ai_debug) console.log ('AI CLOSE BUTTON outerHeight 0', $(element).attr ('class'));
|
5044 |
+
// ***
|
5045 |
+
if (ai_debug) console.log ('AI CLOSE BUTTON outerHeight 0', element.hasAttribute ("class") ? element.getAttribute ('class') : '');
|
5046 |
+
|
5047 |
+
// var ai_close_button = $(element);
|
5048 |
+
// ***
|
5049 |
+
var ai_close_button = element;
|
5050 |
+
setTimeout (function() {
|
5051 |
+
if (ai_debug) console.log ('');
|
5052 |
+
|
5053 |
+
// if (ai_close_button.outerHeight () !== 0) {
|
5054 |
+
// ***
|
5055 |
+
if (ai_close_button.offsetHeight !== 0) {
|
5056 |
+
// if (!ai_close_button.find ('.ai-parallax').length) {
|
5057 |
+
// ***
|
5058 |
+
// if (!ai_close_button.find ('.ai-parallax').length) {
|
5059 |
+
// ***
|
5060 |
+
if (ai_close_button.querySelector ('.ai-parallax') == null) {
|
5061 |
+
// ***
|
5062 |
+
// ai_close_button.css ('width', '').addClass ('ai-close-fit');
|
5063 |
+
ai_close_button.style.width = '';
|
5064 |
+
ai_close_button.classList.add ('ai-close-fit');
|
5065 |
+
}
|
5066 |
+
// ai_close_button.find ('.ai-close-button').fadeIn (50);
|
5067 |
+
// ***
|
5068 |
+
ai_fade_in (ai_close_button.querySelector ('.ai-close-button'), 50);
|
5069 |
+
|
5070 |
+
// if (ai_debug) console.log ('AI DELAYED CLOSE BUTTON ', ai_close_button.attr ('class'));
|
5071 |
+
// ***
|
5072 |
+
if (ai_debug) console.log ('AI DELAYED CLOSE BUTTON ', ai_close_button.hasAttribute ("class") ? ai_close_button.getAttribute ('class') : '');
|
5073 |
+
// } else if (ai_debug) console.log ('AI DELAYED CLOSE BUTTON outerHeight 0', ai_close_button.attr ('class'));
|
5074 |
+
// ***
|
5075 |
+
} else if (ai_debug) console.log ('AI DELAYED CLOSE BUTTON outerHeight 0', ai_close_button.hasAttribute ("class") ? ai_close_button.getAttribute ('class') : '');
|
5076 |
+
}, 4000);
|
5077 |
+
}
|
5078 |
+
|
5079 |
+
|
5080 |
+
|
5081 |
+
if (typeof ai_preview === 'undefined') {
|
5082 |
+
// setTimeout (function() {
|
5083 |
+
|
5084 |
+
// var button = $(this);
|
5085 |
+
// ***
|
5086 |
+
var button = ai_close_button;
|
5087 |
+
// var timeout = button.data ('ai-close-timeout');
|
5088 |
+
// ***
|
5089 |
+
var timeout = button.dataset.aiCloseTimeout;
|
5090 |
+
|
5091 |
+
if (typeof timeout != 'undefined' && timeout > 0) {
|
5092 |
+
// if (ai_debug) console.log ('AI CLOSE TIME', timeout, 's,', typeof button.closest ('.ai-close').attr ('class') != 'undefined' ? button.closest ('.ai-close').attr ('class') : '');
|
5093 |
+
// ***
|
5094 |
+
if (ai_debug) console.log ('AI CLOSE TIME', timeout, 's,', button.closest ('.ai-close').hasAttribute ('class') ? button.closest ('.ai-close').getAttribute ('class') : '');
|
5095 |
+
|
5096 |
+
// Compensate for delayed timeout
|
5097 |
+
if (timeout > 2) timeout = timeout - 2; else timeout = 0;
|
5098 |
+
|
5099 |
+
setTimeout (function() {
|
5100 |
+
if (ai_debug) console.log ('');
|
5101 |
+
// if (ai_debug) console.log ('AI CLOSE TIMEOUT', typeof button.closest ('.ai-close').attr ('class') != 'undefined' ? button.closest ('.ai-close').attr ('class') : '');
|
5102 |
+
// ***
|
5103 |
+
if (ai_debug) console.log ('AI CLOSE TIMEOUT', button.closest ('.ai-close').hasAttribute ('class') ? button.closest ('.ai-close').getAttribute ('class') : '');
|
5104 |
+
|
5105 |
+
ai_close_block (button);
|
5106 |
+
}, timeout * 1000 + 1);
|
5107 |
+
}
|
5108 |
+
// }, 2000);
|
5109 |
+
}
|
5110 |
+
|
5111 |
+
|
5112 |
+
// $(ai_close_button).removeClass ('ai-close-unprocessed');
|
5113 |
+
// ***
|
5114 |
+
ai_close_button.classList.remove ('ai-close-unprocessed');
|
5115 |
+
}
|
5116 |
+
}
|
5117 |
+
|
5118 |
+
ai_close_block = function (button) {
|
5119 |
+
// var block_wrapper = $(button).closest ('.ai-close');
|
5120 |
+
// ***
|
5121 |
+
var block_wrapper = button.closest ('.ai-close');
|
5122 |
+
// var block = $(button).data ('ai-block');
|
5123 |
+
// ***
|
5124 |
+
var block = button.dataset.aiBlock;
|
5125 |
+
// if (typeof block_wrapper != 'undefined') {
|
5126 |
+
// ***
|
5127 |
+
if (block_wrapper != null) {
|
5128 |
+
// var hash = block_wrapper.find ('.ai-attributes [data-ai-hash]').data ('ai-hash');
|
5129 |
+
// ***
|
5130 |
+
if (block_wrapper.querySelector ('.ai-attributes [data-ai-hash]') != null && 'aiHash' in block_wrapper.querySelector ('.ai-attributes [data-ai-hash]').dataset) {
|
5131 |
+
var hash = block_wrapper.querySelector ('.ai-attributes [data-ai-hash]').dataset.aiHash;
|
5132 |
+
// var closed = $(button).data ('ai-closed-time');
|
5133 |
+
// if (typeof closed != 'undefined') {
|
5134 |
+
// ***
|
5135 |
+
if ('aiClosedTime'in button.dataset) {
|
5136 |
+
var closed = button.dataset.aiClosedTime;
|
5137 |
+
if (ai_debug) console.log ('AI CLOSED block', block, 'for', closed, 'days');
|
5138 |
+
|
5139 |
+
var date = new Date();
|
5140 |
+
var timestamp = Math.round (date.getTime() / 1000);
|
5141 |
+
|
5142 |
+
// TODO: stay closed for session
|
5143 |
+
ai_set_cookie (block, 'x', Math.round (timestamp + closed * 24 * 3600));
|
5144 |
+
ai_set_cookie (block, 'h', hash);
|
5145 |
+
}
|
5146 |
+
} else {
|
5147 |
+
var ai_cookie = ai_set_cookie (block, 'x', '');
|
5148 |
+
if (ai_cookie.hasOwnProperty (block) && !ai_cookie [block].hasOwnProperty ('i') && !ai_cookie [block].hasOwnProperty ('c')) {
|
5149 |
+
ai_set_cookie (block, 'h', '');
|
5150 |
+
}
|
5151 |
+
}
|
5152 |
+
|
5153 |
+
block_wrapper.remove ();
|
5154 |
+
} else {
|
5155 |
+
ai_set_cookie (block, 'x', '');
|
5156 |
+
if (ai_cookie.hasOwnProperty (block) && !ai_cookie [block].hasOwnProperty ('i') && !ai_cookie [block].hasOwnProperty ('c')) {
|
5157 |
+
ai_set_cookie (block, 'h', '');
|
5158 |
+
}
|
5159 |
+
}
|
5160 |
+
}
|
5161 |
+
|
5162 |
+
ai_install_close_buttons = function (element) {
|
5163 |
+
// if (ai_debug) console.log ('AI CLOSE BUTTONS INSTALL');
|
5164 |
+
|
5165 |
+
// setTimeout (function () {
|
5166 |
+
//// $('.ai-close-button.ai-close-unprocessed', element).click (function () {
|
5167 |
+
// // ***
|
5168 |
+
// element.querySelectorAll ('.ai-close-button.ai-close-unprocessed').forEach ((el, index) => {
|
5169 |
+
|
5170 |
+
// if (!el.classList.contains ('ai-close-event')) {
|
5171 |
+
// el.addEventListener ('click', (event) => {
|
5172 |
+
// ai_close_block (el);
|
5173 |
+
// });
|
5174 |
+
// }
|
5175 |
+
// el.classList.add ('ai-close-event');
|
5176 |
+
// });
|
5177 |
+
// }, 1800);
|
5178 |
+
|
5179 |
+
// if (typeof ai_preview === 'undefined') {
|
5180 |
+
// setTimeout (function() {
|
5181 |
+
//// $('.ai-close-button.ai-close-unprocessed', element).each (function () {
|
5182 |
+
// // ***
|
5183 |
+
// element.querySelectorAll ('.ai-close-button.ai-close-unprocessed').forEach ((el, index) => {
|
5184 |
+
|
5185 |
+
//// var button = $(this);
|
5186 |
+
// // ***
|
5187 |
+
// var button = el;
|
5188 |
+
//// var timeout = button.data ('ai-close-timeout');
|
5189 |
+
// // ***
|
5190 |
+
// var timeout = button.dataset.aiCloseTimeout;
|
5191 |
+
|
5192 |
+
// if (typeof timeout != 'undefined' && timeout > 0) {
|
5193 |
+
//// if (ai_debug) console.log ('AI CLOSE TIME', timeout, 's,', typeof button.closest ('.ai-close').attr ('class') != 'undefined' ? button.closest ('.ai-close').attr ('class') : '');
|
5194 |
+
// // ***
|
5195 |
+
// if (ai_debug) console.log ('AI CLOSE TIME', timeout, 's,', button.closest ('.ai-close').hasAttribute ('class') ? button.closest ('.ai-close').getAttribute ('class') : '');
|
5196 |
+
|
5197 |
+
// // Compensate for delayed timeout
|
5198 |
+
// if (timeout > 2) timeout = timeout - 2; else timeout = 0;
|
5199 |
+
|
5200 |
+
// setTimeout (function() {
|
5201 |
+
// if (ai_debug) console.log ('');
|
5202 |
+
//// if (ai_debug) console.log ('AI CLOSE TIMEOUT', typeof button.closest ('.ai-close').attr ('class') != 'undefined' ? button.closest ('.ai-close').attr ('class') : '');
|
5203 |
+
// // ***
|
5204 |
+
// if (ai_debug) console.log ('AI CLOSE TIMEOUT', button.closest ('.ai-close').hasAttribute ('class') ? button.closest ('.ai-close').getAttribute ('class') : '');
|
5205 |
+
|
5206 |
+
// ai_close_block (button);
|
5207 |
+
// }, timeout * 1000 + 1);
|
5208 |
+
// }
|
5209 |
+
// });
|
5210 |
+
// }, 2000);
|
5211 |
+
// }
|
5212 |
+
|
5213 |
+
setTimeout (function() {
|
5214 |
+
if (ai_debug) console.log ('');
|
5215 |
+
// if (ai_debug) console.log ('AI CLOSE BUTTON INSTALL', typeof $(element).attr ('class') != 'undefined' ? $(element).attr ('class') : '');
|
5216 |
+
// ***
|
5217 |
+
|
5218 |
+
if (ai_debug) console.log ('AI CLOSE BUTTON INSTALL', element instanceof Element && element.hasAttribute ('class') ? element.getAttribute ('class') : '');
|
5219 |
+
|
5220 |
+
// if ($(element).hasClass ('ai-close')) ai_process_close_button (element); else
|
5221 |
+
// ***
|
5222 |
+
if (element instanceof Element && element.classList.contains ('ai-close')) ai_process_close_button (element); else
|
5223 |
+
// $('.ai-close', element).each (function() {
|
5224 |
+
// ***
|
5225 |
+
element.querySelectorAll ('.ai-close').forEach ((el, index) => {
|
5226 |
+
// ai_process_close_button (this);
|
5227 |
+
// ***
|
5228 |
+
ai_process_close_button (el);
|
5229 |
+
});
|
5230 |
+
}, ai_close_button_delay);
|
5231 |
+
}
|
5232 |
+
|
5233 |
+
if (typeof ai_close_button_delay == 'undefined') {
|
5234 |
+
ai_close_button_delay = 2200;
|
5235 |
+
}
|
5236 |
+
|
5237 |
+
ai_install_close_buttons (document);
|
5238 |
+
//});
|
5239 |
+
// ***
|
5240 |
+
}
|
5241 |
+
|
5242 |
+
|
5243 |
+
function ai_fade_in (el, time) {
|
5244 |
+
el.style.display = 'block';
|
5245 |
+
el.style.opacity = 0;
|
5246 |
+
|
5247 |
+
var last = +new Date();
|
5248 |
+
var tick = function () {
|
5249 |
+
el.style.opacity = +el.style.opacity + (new Date() - last) / time;
|
5250 |
+
last = +new Date();
|
5251 |
+
|
5252 |
+
if (+el.style.opacity < 1) {
|
5253 |
+
(window.requestAnimationFrame && requestAnimationFrame (tick)) || setTimeout (tick, 16);
|
5254 |
+
}
|
5255 |
+
};
|
5256 |
+
|
5257 |
+
tick ();
|
5258 |
+
}
|
5259 |
+
|
5260 |
+
function ai_ready (fn) {
|
5261 |
+
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) {
|
5262 |
+
fn ();
|
5263 |
+
} else {
|
5264 |
+
document.addEventListener ('DOMContentLoaded', fn);
|
5265 |
+
}
|
5266 |
+
}
|
5267 |
+
|
5268 |
+
ai_ready (ai_check_close_buttons);
|
5269 |
+
if (typeof ai_filter != 'undefined') {
|
5270 |
+
|
5271 |
+
function prev (el, selector) {
|
5272 |
+
if (selector) {
|
5273 |
+
let previous = el.previousElementSibling;
|
5274 |
+
while (previous && !previous.matches (selector)) {
|
5275 |
+
previous = previous.previousElementSibling;
|
5276 |
+
}
|
5277 |
+
return previous;
|
5278 |
+
} else {
|
5279 |
+
return el.previousElementSibling;
|
5280 |
+
}
|
5281 |
+
}
|
5282 |
+
|
5283 |
+
//jQuery (function ($) {
|
5284 |
+
// ***
|
5285 |
+
// function ai_random_parameter () {
|
5286 |
+
// var current_time = new Date ().getTime ();
|
5287 |
+
// return '&ver=' + current_time + '-' + Math.round (Math.random () * 100000);
|
5288 |
+
// }
|
5289 |
+
function ai_random_parameter () {
|
5290 |
+
var current_time = new Date ().getTime ();
|
5291 |
+
return current_time + '-' + Math.round (Math.random () * 100000);
|
5292 |
+
}
|
5293 |
+
|
5294 |
+
function process_filter_hook_data (ai_filter_hook_blocks) {
|
5295 |
+
|
5296 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 1
|
5297 |
+
// var ai_debug = false;
|
5298 |
+
|
5299 |
+
// ai_filter_hook_blocks.removeClass ('ai-filter-check');
|
5300 |
+
// ***
|
5301 |
+
ai_filter_hook_blocks.forEach ((el, i) => {
|
5302 |
+
el.classList.remove ('ai-filter-check');
|
5303 |
+
});
|
5304 |
+
|
5305 |
+
var enable_block = false;
|
5306 |
+
|
5307 |
+
if (ai_debug) console.log ('');
|
5308 |
+
if (ai_debug) console.log ("AI FILTER HOOK DATA: " + ai_filter_hook_data);
|
5309 |
+
|
5310 |
+
if (ai_filter_hook_data == '') {
|
5311 |
+
if (ai_debug) console.log ('AI FILTER HOOK DATA EMPTY');
|
5312 |
+
return;
|
5313 |
+
}
|
5314 |
+
try {
|
5315 |
+
var filter_hook_data_array = JSON.parse (ai_filter_hook_data);
|
5316 |
+
|
5317 |
+
} catch (error) {
|
5318 |
+
if (ai_debug) console.log ('AI FILTER HOOK DATA JSON ERROR');
|
5319 |
+
return;
|
5320 |
+
}
|
5321 |
+
|
5322 |
+
// if (filter_hook_data_array != null) ai_filter_hook_blocks.each (function () {
|
5323 |
+
// ***
|
5324 |
+
if (filter_hook_data_array != null) ai_filter_hook_blocks.forEach ((el, index) => {
|
5325 |
+
|
5326 |
+
// var block_wrapping_div = $(this).closest ('div.AI_FUNCT_GET_BLOCK_CLASS_NAME');
|
5327 |
+
// ***
|
5328 |
+
var block_wrapping_div = el.closest ('div.' + ai_block_class_def);
|
5329 |
+
// var block = parseInt ($(this).data ('block'));
|
5330 |
+
// ***
|
5331 |
+
var block = parseInt (el.dataset.block);
|
5332 |
+
|
5333 |
+
// if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block_wrapping_div.attr ('class'));
|
5334 |
+
// ***
|
5335 |
+
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block_wrapping_div.hasAttribute ('class') ? block_wrapping_div.getAttribute ('class') : '');
|
5336 |
+
|
5337 |
+
enable_block = false;
|
5338 |
+
|
5339 |
+
if (typeof filter_hook_data_array !== 'undefined') {
|
5340 |
+
if (filter_hook_data_array.includes ('*')) {
|
5341 |
+
enable_block = true;
|
5342 |
+
if (filter_hook_data_array.includes (- block)) {
|
5343 |
+
enable_block = false;
|
5344 |
+
}
|
5345 |
+
}
|
5346 |
+
else if (filter_hook_data_array.includes (block)) enable_block = true;
|
5347 |
+
}
|
5348 |
+
|
5349 |
+
if (ai_debug) console.log ('AI FILTER HOOK BLOCK', block, enable_block ? 'ENABLED' : 'DISABLED');
|
5350 |
+
|
5351 |
+
// $(this).css ({"visibility": "", "position": "", "width": "", "height": "", "z-index": ""});
|
5352 |
+
// ***
|
5353 |
+
el.style.visibility = '';
|
5354 |
+
el.style.position = 'none';
|
5355 |
+
el.style.width = '';
|
5356 |
+
el.style.height = '';
|
5357 |
+
el.style.zIndex = '';
|
5358 |
+
|
5359 |
+
var comments = '';
|
5360 |
+
var comments_decoded = JSON.parse (ai_filter_hook_comments);
|
5361 |
+
if (typeof comments_decoded == 'string') {
|
5362 |
+
comments = comments_decoded;
|
5363 |
+
}
|
5364 |
+
else if (typeof comments_decoded == 'object') {
|
5365 |
+
comments = '';
|
5366 |
+
for (const [key, value] of Object.entries (comments_decoded)) {
|
5367 |
+
comments = comments + `${key}: ${value}\n`;
|
5368 |
+
}
|
5369 |
+
}
|
5370 |
+
else comments = ai_filter_hook_comments;
|
5371 |
+
|
5372 |
+
if (typeof ai_front != 'undefined') {
|
5373 |
+
// var debug_bar = $(this).prev ('.ai-debug-bar');
|
5374 |
+
// ***
|
5375 |
+
var debug_bar = prev (el, '.ai-debug-bar');
|
5376 |
+
if (debug_bar != null) {
|
5377 |
+
// debug_bar.find ('.ai-status').text (enable_block ? ai_front.visible : ai_front.hidden);
|
5378 |
+
// ***
|
5379 |
+
debug_bar.querySelectorAll ('.ai-status').forEach ((element, index) => {
|
5380 |
+
element.textContent = enable_block ? ai_front.visible : ai_front.hidden;
|
5381 |
+
});
|
5382 |
+
|
5383 |
+
// debug_bar.find ('.ai-filter-data').attr ('title', comments);
|
5384 |
+
// ***
|
5385 |
+
debug_bar.querySelectorAll ('.ai-filter-data').forEach ((element, index) => {
|
5386 |
+
element.setAttribute ('title', comments);
|
5387 |
+
});
|
5388 |
+
}
|
5389 |
+
}
|
5390 |
+
|
5391 |
+
if (!enable_block) {
|
5392 |
+
// $(this).hide (); // .ai-filter-check
|
5393 |
+
// ***
|
5394 |
+
el.style.display = 'none'; // .ai-filter-check
|
5395 |
+
|
5396 |
+
// if (!block_wrapping_div.find ('.ai-debug-block').length) {
|
5397 |
+
// ***
|
5398 |
+
if (!block_wrapping_div.querySelector ('.ai-debug-block') != null) {
|
5399 |
+
// block_wrapping_div.hide ();
|
5400 |
+
// ***
|
5401 |
+
block_wrapping_div.style.display = 'none'; // .ai-filter-check
|
5402 |
+
}
|
5403 |
+
|
5404 |
+
// block_wrapping_div.removeAttr ('data-ai');
|
5405 |
+
// ***
|
5406 |
+
block_wrapping_div.removeAttribute ('data-ai');
|
5407 |
+
|
5408 |
+
// if (block_wrapping_div.find ('.ai-debug-block')) {
|
5409 |
+
// ***
|
5410 |
+
if (block_wrapping_div.querySelector('.ai-debug-block') != null) {
|
5411 |
+
// block_wrapping_div.css ({"visibility": ""}).removeClass ('ai-close');
|
5412 |
+
// ***
|
5413 |
+
block_wrapping_div.style.visibility = '';
|
5414 |
+
block_wrapping_div.classList.remove ('ai-close');
|
5415 |
+
|
5416 |
+
// if (block_wrapping_div.hasClass ('ai-remove-position')) {
|
5417 |
+
// ***
|
5418 |
+
if (block_wrapping_div.classList.contains ('ai-remove-position')) {
|
5419 |
+
// block_wrapping_div.css ({"position": ""});
|
5420 |
+
block_wrapping_div.style.position = '';
|
5421 |
+
}
|
5422 |
+
|
5423 |
+
// In case client-side insert is used and lists will not be processed
|
5424 |
+
// if (typeof $(this).data ('code') != 'undefined') {
|
5425 |
+
// ***
|
5426 |
+
if ('code' in el.dataset) {
|
5427 |
+
// Remove ai-list-block to show debug info
|
5428 |
+
// block_wrapping_div.removeClass ('ai-list-block');
|
5429 |
+
// block_wrapping_div.removeClass ('ai-list-block-ip');
|
5430 |
+
// ***
|
5431 |
+
block_wrapping_div.classList.remove ('ai-list-block');
|
5432 |
+
block_wrapping_div.classList.remove ('ai-list-block-ip');
|
5433 |
+
|
5434 |
+
// Remove also 'NOT LOADED' bar if it is there
|
5435 |
+
// if (block_wrapping_div.prev ().hasClass ('ai-debug-info')) {
|
5436 |
+
// ***
|
5437 |
+
if (prev (block_wrapping_div) != null && prev (block_wrapping_div).classList.contains ('ai-debug-info')) {
|
5438 |
+
// block_wrapping_div.prev ().remove ();
|
5439 |
+
// ***
|
5440 |
+
prev (block_wrapping_div).remove ();
|
5441 |
+
}
|
5442 |
+
}
|
5443 |
+
|
5444 |
+
// } else block_wrapping_div.hide ();
|
5445 |
+
// ***
|
5446 |
+
} else block_wrapping_div.style.display = 'none';;
|
5447 |
+
} else {
|
5448 |
+
// block_wrapping_div.css ({"visibility": ""});
|
5449 |
+
// ***
|
5450 |
+
block_wrapping_div.style.visibility = '';
|
5451 |
+
|
5452 |
+
// if (block_wrapping_div.hasClass ('ai-remove-position')) {
|
5453 |
+
// ***
|
5454 |
+
if (block_wrapping_div.classList.contains ('ai-remove-position')) {
|
5455 |
+
// block_wrapping_div.css ({"position": ""});
|
5456 |
+
// ***
|
5457 |
+
block_wrapping_div.style.position = '';
|
5458 |
+
}
|
5459 |
+
|
5460 |
+
// if (typeof $(this).data ('code') != 'undefined') {
|
5461 |
+
// ***
|
5462 |
+
if ('code' in el.dataset) {
|
5463 |
+
// var block_code = b64d ($(this).data ('code'));
|
5464 |
+
var block_code = b64d (el.dataset.code);
|
5465 |
+
|
5466 |
+
var template = document.createElement ('div');
|
5467 |
+
template.innerHTML = block_code;
|
5468 |
+
|
5469 |
+
var range = document.createRange ();
|
5470 |
+
|
5471 |
+
var fragment_ok = true;
|
5472 |
+
try {
|
5473 |
+
var fragment = range.createContextualFragment (template.innerHTML);
|
5474 |
+
}
|
5475 |
+
catch (err) {
|
5476 |
+
var fragment_ok = false;
|
5477 |
+
if (ai_debug) console.log ('AI INSERT', 'range.createContextualFragment ERROR:', err.message);
|
5478 |
+
}
|
5479 |
+
|
5480 |
+
// if ($(this).closest ('head').length != 0) {
|
5481 |
+
// ***
|
5482 |
+
if (el.closest ('head') != null) {
|
5483 |
+
// $(this).after (block_code);
|
5484 |
+
// ***
|
5485 |
+
el.insertBefore (fragment, null);
|
5486 |
+
|
5487 |
+
// if (!ai_debug) $(this).remove ();
|
5488 |
+
// ***
|
5489 |
+
if (!ai_debug) el.remove ();
|
5490 |
+
// } else $(this).append (block_code);
|
5491 |
+
// ***
|
5492 |
+
} else el.parentNode.insertBefore (fragment, el.nextSibling);
|
5493 |
+
|
5494 |
+
// if (!ai_debug)
|
5495 |
+
// $(this).attr ('data-code', '');
|
5496 |
+
// ***
|
5497 |
+
el.setAttribute ('data-code', '');
|
5498 |
+
|
5499 |
+
// if (ai_debug) console.log ('AI INSERT CODE', $(block_wrapping_div).attr ('class'));
|
5500 |
+
// ***
|
5501 |
+
if (ai_debug) console.log ('AI INSERT CODE', block_wrapping_div.hasAttribute ('class') ? block_wrapping_div.getAttribute ('class') : '');
|
5502 |
+
if (ai_debug) console.log ('');
|
5503 |
+
|
5504 |
+
// ai_process_element (this);
|
5505 |
+
// ***
|
5506 |
+
ai_process_element (el);
|
5507 |
+
}
|
5508 |
+
}
|
5509 |
+
|
5510 |
+
// block_wrapping_div.removeClass ('ai-list-block-filter');
|
5511 |
+
block_wrapping_div.classList.remove ('ai-list-block-filter');
|
5512 |
+
});
|
5513 |
+
}
|
5514 |
+
|
5515 |
+
// ai_process_filter_hooks = function (ai_filter_hook_blocks) {
|
5516 |
+
// ***
|
5517 |
+
ai_process_filter_hooks = function (element) {
|
5518 |
+
|
5519 |
+
var ai_debug = typeof ai_debugging !== 'undefined'; // 2
|
5520 |
+
// var ai_debug = false;
|
5521 |
+
|
5522 |
+
if (element == null) {
|
5523 |
+
// ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
5524 |
+
// ***
|
5525 |
+
ai_filter_hook_blocks = document.querySelectorAll ("div.ai-filter-check, meta.ai-filter-check");
|
5526 |
+
} else {
|
5527 |
+
// ai_filter_hook_blocks = ai_filter_hook_blocks.filter ('.ai-filter-check');
|
5528 |
+
|
5529 |
+
// Temp fix for jQuery elements
|
5530 |
+
// ***
|
5531 |
+
if (window.jQuery && window.jQuery.fn && element instanceof jQuery && element.hasOwnProperty ('0')) {
|
5532 |
+
ai_filter_hook_blocks = element [0];
|
5533 |
+
} else
|
5534 |
+
|
5535 |
+
// ***
|
5536 |
+
ai_filter_hook_blocks = element.querySelectorAll ('.ai-filter-check');
|
5537 |
+
}
|
5538 |
+
|
5539 |
+
if (!ai_filter_hook_blocks.length) return;
|
5540 |
+
|
5541 |
+
if (ai_debug) console.log ("AI PROCESSING FILTER HOOK:", ai_filter_hook_blocks.length, "blocks");
|
5542 |
+
|
5543 |
+
if (typeof ai_filter_hook_data != 'undefined') {
|
5544 |
+
if (ai_debug) console.log ("SAVED FILTER HOOK DATA:", ai_filter_hook_data);
|
5545 |
+
process_filter_hook_data (ai_filter_hook_blocks);
|
5546 |
+
return;
|
5547 |
+
}
|
5548 |
+
|
5549 |
+
if (typeof ai_filter_hook_data_requested != 'undefined') {
|
5550 |
+
if (ai_debug) console.log ("FILTER HOOK DATA ALREADY REQUESTED, STILL WAITING...");
|
5551 |
+
return;
|
5552 |
+
}
|
5553 |
+
|
5554 |
+
var user_agent = window.navigator.userAgent;
|
5555 |
+
var language = navigator.language;
|
5556 |
+
|
5557 |
+
if (ai_debug) console.log ("REQUESTING FILTER HOOK DATA");
|
5558 |
+
if (ai_debug) console.log ("USER AGENT:", user_agent);
|
5559 |
+
if (ai_debug) console.log ("LANGUAGE:", language);
|
5560 |
+
|
5561 |
+
ai_filter_hook_data_requested = true;
|
5562 |
+
|
5563 |
+
// var page = site_url+"/wp-admin/admin-ajax.php?action=ai_ajax&filter-hook-data=all&ai_check=" + ai_data_id + '&http_user_agent=' + encodeURIComponent (user_agent) + '&http_accept_language=' + encodeURIComponent (language) + ai_random_parameter ();
|
5564 |
+
// $.get (page, function (filter_hook_data) {
|
5565 |
+
// ***
|
5566 |
+
var url_data = {
|
5567 |
+
action: "ai_ajax",
|
5568 |
+
'filter-hook-data': 'all',
|
5569 |
+
check: ai_data_id,
|
5570 |
+
http_user_agent: encodeURIComponent (user_agent),
|
5571 |
+
http_accept_language: encodeURIComponent (language),
|
5572 |
+
ver: ai_random_parameter ()
|
5573 |
+
};
|
5574 |
+
|
5575 |
+
var formBody = [];
|
5576 |
+
for (var property in url_data) {
|
5577 |
+
var encodedKey = encodeURIComponent (property);
|
5578 |
+
var encodedValue = encodeURIComponent (url_data [property]);
|
5579 |
+
formBody.push (encodedKey + "=" + encodedValue);
|
5580 |
+
}
|
5581 |
+
formBody = formBody.join ("&");
|
5582 |
+
|
5583 |
+
async function ai_filter_check () {
|
5584 |
+
const response = await fetch (ai_ajax_url + '?' + formBody, {
|
5585 |
+
method: 'GET',
|
5586 |
+
});
|
5587 |
+
|
5588 |
+
// if (!response.ok) {
|
5589 |
+
//// throw new Error(`HTTP error! status: ${response.status}`);
|
5590 |
+
// if (ai_debug) console.log ("Ajax call failed, Status: " + response.status + ", Error: " + response.statusText);
|
5591 |
+
// }
|
5592 |
+
|
5593 |
+
const text = await response.text ();
|
5594 |
+
|
5595 |
+
return text;
|
5596 |
+
}
|
5597 |
+
|
5598 |
+
ai_filter_check ().then (filter_hook_data => {
|
5599 |
+
|
5600 |
+
if (filter_hook_data == '') {
|
5601 |
+
var error_message = 'AI FILTER HOOK Ajax request returned empty data, filter hook checks not processed';
|
5602 |
+
console.error (error_message);
|
5603 |
+
|
5604 |
+
if (typeof ai_js_errors != 'undefined') {
|
5605 |
+
ai_js_errors.push ([error_message, page, 0]);
|
5606 |
+
}
|
5607 |
+
} else {
|
5608 |
+
try {
|
5609 |
+
var filter_hook_data_test = JSON.parse (filter_hook_data);
|
5610 |
+
} catch (error) {
|
5611 |
+
var error_message = 'AI FILTER HOOK Ajax call returned invalid data, filter hook checks not processed';
|
5612 |
+
console.error (error_message);
|
5613 |
+
|
5614 |
+
if (typeof ai_js_errors != 'undefined') {
|
5615 |
+
ai_js_errors.push ([error_message, page, 0]);
|
5616 |
+
}
|
5617 |
+
}
|
5618 |
+
}
|
5619 |
+
|
5620 |
+
ai_filter_hook_data = JSON.stringify (filter_hook_data_test ['blocks']);
|
5621 |
+
ai_filter_hook_comments = JSON.stringify (filter_hook_data_test ['comments']);
|
5622 |
+
|
5623 |
+
if (ai_debug) console.log ('');
|
5624 |
+
if (ai_debug) console.log ("AI FILTER HOOK RETURNED DATA:", ai_filter_hook_data);
|
5625 |
+
if (ai_debug) console.log ("AI FILTER HOOK RETURNED COMMENTS:", filter_hook_data_test ['comments']);
|
5626 |
+
|
5627 |
+
// Check blocks again - some blocks might get inserted after the filte hook data was requested
|
5628 |
+
// ai_filter_hook_blocks = $("div.ai-filter-check, meta.ai-filter-check");
|
5629 |
+
ai_filter_hook_blocks = document.querySelectorAll ("div.ai-filter-check, meta.ai-filter-check");
|
5630 |
+
|
5631 |
+
if (ai_debug) console.log ("AI FILTER HOOK BLOCKS:", ai_filter_hook_blocks.length);
|
5632 |
+
|
5633 |
+
process_filter_hook_data (ai_filter_hook_blocks);
|
5634 |
+
// }).fail (function(jqXHR, status, err) {
|
5635 |
+
// ***
|
5636 |
+
}).catch ((error) => {
|
5637 |
+
// if (ai_debug) console.log ("Ajax call failed, Status: " + status + ", Error: " + err);
|
5638 |
+
// ***
|
5639 |
+
if (ai_debug) console.error ("AI FILTER ERROR:", error);
|
5640 |
+
// $("div.ai-filter-check").each (function () {
|
5641 |
+
document.querySelectorAll ('div.ai-filter-check').forEach ((el, index) => {
|
5642 |
+
// $(this).css ({"display": "none", "visibility": "", "position": "", "width": "", "height": "", "z-index": ""}).removeClass ('ai-filter-check').hide ();
|
5643 |
+
el.style.display = 'none';
|
5644 |
+
el.style.visibility = '';
|
5645 |
+
el.style.position = '';
|
5646 |
+
el.style.width = '';
|
5647 |
+
el.style.height = '';
|
5648 |
+
el.style.zIndex = '';
|
5649 |
+
|
5650 |
+
el.classList.remove ('ai-filter-check');
|
5651 |
+
el.style.display = 'none';
|
5652 |
+
});
|
5653 |
+
});
|
5654 |
+
}
|
5655 |
+
|
5656 |
+
|
5657 |
+
// $(document).ready (function($) {
|
5658 |
+
// setTimeout (function () {ai_process_filter_hooks ()}, 3);
|
5659 |
+
// });
|
5660 |
+
// ***
|
5661 |
+
function ai_ready (fn) {
|
5662 |
+
if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) {
|
5663 |
+
fn ();
|
5664 |
+
} else {
|
5665 |
+
document.addEventListener ('DOMContentLoaded', fn);
|
5666 |
+
}
|
5667 |
+
}
|
5668 |
+
|
5669 |
+
function ai_check_filter_hooks () {
|
5670 |
+
setTimeout (function () {ai_process_filter_hooks ()}, 3);
|
5671 |
+
}
|
5672 |
+
|
5673 |
+
ai_ready (ai_check_filter_hooks);
|
5674 |
+
|
5675 |
+
//});
|
5676 |
+
// ***
|
5677 |
+
|
5678 |
+
function ai_process_element (element) {
|
5679 |
+
setTimeout (function() {
|
5680 |
+
if (typeof ai_process_rotations_in_element == 'function') {
|
5681 |
+
ai_process_rotations_in_element (element);
|
5682 |
+
}
|
5683 |
+
|
5684 |
+
if (typeof ai_process_lists == 'function') {
|
5685 |
+
// ***
|
5686 |
+
ai_process_lists (jQuery (".ai-list-data", element));
|
5687 |
+
}
|
5688 |
+
|
5689 |
+
if (typeof ai_process_ip_addresses == 'function') {
|
5690 |
+
// ***
|
5691 |
+
ai_process_ip_addresses (jQuery (".ai-ip-data", element));
|
5692 |
+
}
|
5693 |
+
|
5694 |
+
if (typeof ai_process_filter_hooks == 'function') {
|
5695 |
+
// ai_process_filter_hooks (jQuery (".ai-filter-check", element));
|
5696 |
+
// ***
|
5697 |
+
ai_process_filter_hooks (element);
|
5698 |
+
}
|
5699 |
+
|
5700 |
+
if (typeof ai_adb_process_blocks == 'function') {
|
5701 |
+
ai_adb_process_blocks (element);
|
5702 |
+
}
|
5703 |
+
|
5704 |
+
if (typeof ai_process_impressions == 'function' && ai_tracking_finished == true) {
|
5705 |
+
ai_process_impressions ();
|
5706 |
+
}
|
5707 |
+
if (typeof ai_install_click_trackers == 'function' && ai_tracking_finished == true) {
|
5708 |
+
ai_install_click_trackers ();
|
5709 |
+
}
|
5710 |
+
|
5711 |
+
if (typeof ai_install_close_buttons == 'function') {
|
5712 |
+
ai_install_close_buttons (document);
|
5713 |
+
}
|
5714 |
+
}, 5);
|
5715 |
+
}
|
5716 |
+
|
5717 |
+
}
|
5718 |
+
|
5719 |
+
/**
|
5720 |
+
* Copyright Marc J. Schmidt. See the LICENSE file at the top-level
|
5721 |
+
* directory of this distribution and at
|
5722 |
+
* https://github.com/marcj/css-element-queries/blob/master/LICENSE.
|
5723 |
+
*/
|
5724 |
+
;
|
5725 |
+
(function() {
|
5726 |
+
|
5727 |
+
/**
|
5728 |
+
* Class for dimension change detection.
|
5729 |
+
*
|
5730 |
+
* @param {Element|Element[]|Elements|jQuery} element
|
5731 |
+
* @param {Function} callback
|
5732 |
+
*
|
5733 |
+
* @constructor
|
5734 |
+
*/
|
5735 |
+
var ResizeSensor = function(element, callback) {
|
5736 |
+
/**
|
5737 |
+
*
|
5738 |
+
* @constructor
|
5739 |
+
*/
|
5740 |
+
function EventQueue() {
|
5741 |
+
this.q = [];
|
5742 |
+
this.add = function(ev) {
|
5743 |
+
this.q.push(ev);
|
5744 |
+
};
|
5745 |
+
|
5746 |
+
var i, j;
|
5747 |
+
this.call = function() {
|
5748 |
+
for (i = 0, j = this.q.length; i < j; i++) {
|
5749 |
+
this.q[i].call();
|
5750 |
+
}
|
5751 |
+
};
|
5752 |
+
}
|
5753 |
+
|
5754 |
+
/**
|
5755 |
+
* @param {HTMLElement} element
|
5756 |
+
* @param {String} prop
|
5757 |
+
* @returns {String|Number}
|
5758 |
+
*/
|
5759 |
+
function getComputedStyle(element, prop) {
|
5760 |
+
if (element.currentStyle) {
|
5761 |
+
return element.currentStyle[prop];
|
5762 |
+
} else if (window.getComputedStyle) {
|
5763 |
+
return window.getComputedStyle(element, null).getPropertyValue(prop);
|
5764 |
+
} else {
|
5765 |
+
return element.style[prop];
|
5766 |
+
}
|
5767 |
+
}
|
5768 |
+
|
5769 |
+
/**
|
5770 |
+
*
|
5771 |
+
* @param {HTMLElement} element
|
5772 |
+
* @param {Function} resized
|
5773 |
+
*/
|
5774 |
+
function attachResizeEvent(element, resized) {
|
5775 |
+
if (!element.resizedAttached) {
|
5776 |
+
element.resizedAttached = new EventQueue();
|
5777 |
+
element.resizedAttached.add(resized);
|
5778 |
+
} else if (element.resizedAttached) {
|
5779 |
+
element.resizedAttached.add(resized);
|
5780 |
+
return;
|
5781 |
+
}
|
5782 |
+
|
5783 |
+
element.resizeSensor = document.createElement('div');
|
5784 |
+
element.resizeSensor.className = 'resize-sensor';
|
5785 |
+
var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;';
|
5786 |
+
var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;';
|
5787 |
+
|
5788 |
+
element.resizeSensor.style.cssText = style;
|
5789 |
+
element.resizeSensor.innerHTML =
|
5790 |
+
'<div class="resize-sensor-expand" style="' + style + '">' +
|
5791 |
+
'<div style="' + styleChild + '"></div>' +
|
5792 |
+
'</div>' +
|
5793 |
+
'<div class="resize-sensor-shrink" style="' + style + '">' +
|
5794 |
+
'<div style="' + styleChild + ' width: 200%; height: 200%"></div>' +
|
5795 |
+
'</div>';
|
5796 |
+
element.appendChild(element.resizeSensor);
|
5797 |
+
|
5798 |
+
if (!{fixed: 1, absolute: 1}[getComputedStyle(element, 'position')]) {
|
5799 |
+
element.style.position = 'relative';
|
5800 |
+
}
|
5801 |
+
|
5802 |
+
var expand = element.resizeSensor.childNodes[0];
|
5803 |
+
var expandChild = expand.childNodes[0];
|
5804 |
+
var shrink = element.resizeSensor.childNodes[1];
|
5805 |
+
var shrinkChild = shrink.childNodes[0];
|
5806 |
+
|
5807 |
+
var lastWidth, lastHeight;
|
5808 |
+
|
5809 |
+
var reset = function() {
|
5810 |
+
expandChild.style.width = expand.offsetWidth + 10 + 'px';
|
5811 |
+
expandChild.style.height = expand.offsetHeight + 10 + 'px';
|
5812 |
+
expand.scrollLeft = expand.scrollWidth;
|
5813 |
+
expand.scrollTop = expand.scrollHeight;
|
5814 |
+
shrink.scrollLeft = shrink.scrollWidth;
|
5815 |
+
shrink.scrollTop = shrink.scrollHeight;
|
5816 |
+
lastWidth = element.offsetWidth;
|
5817 |
+
lastHeight = element.offsetHeight;
|
5818 |
+
};
|
5819 |
+
|
5820 |
+
reset();
|
5821 |
+
|
5822 |
+
var changed = function() {
|
5823 |
+
if (element.resizedAttached) {
|
5824 |
+
element.resizedAttached.call();
|
5825 |
+
}
|
5826 |
+
};
|
5827 |
+
|
5828 |
+
var addEvent = function(el, name, cb) {
|
5829 |
+
if (el.attachEvent) {
|
5830 |
+
el.attachEvent('on' + name, cb);
|
5831 |
+
} else {
|
5832 |
+
el.addEventListener(name, cb);
|
5833 |
+
}
|
5834 |
+
};
|
5835 |
+
|
5836 |
+
var onScroll = function() {
|
5837 |
+
if (element.offsetWidth != lastWidth || element.offsetHeight != lastHeight) {
|
5838 |
+
changed();
|
5839 |
+
}
|
5840 |
+
reset();
|
5841 |
+
};
|
5842 |
+
|
5843 |
+
addEvent(expand, 'scroll', onScroll);
|
5844 |
+
addEvent(shrink, 'scroll', onScroll);
|
5845 |
+
}
|
5846 |
+
|
5847 |
+
var elementType = Object.prototype.toString.call(element);
|
5848 |
+
var isCollectionTyped = ('[object Array]' === elementType
|
5849 |
+
|| ('[object NodeList]' === elementType)
|
5850 |
+
|| ('[object HTMLCollection]' === elementType)
|
5851 |
+
|| ('undefined' !== typeof jQuery && element instanceof jQuery) //jquery
|
5852 |
+
|| ('undefined' !== typeof Elements && element instanceof Elements) //mootools
|
5853 |
+
);
|
5854 |
+
|
5855 |
+
if (isCollectionTyped) {
|
5856 |
+
var i = 0, j = element.length;
|
5857 |
+
for (; i < j; i++) {
|
5858 |
+
attachResizeEvent(element[i], callback);
|
5859 |
+
}
|
5860 |
+
} else {
|
5861 |
+
attachResizeEvent(element, callback);
|
5862 |
+
}
|
5863 |
+
|
5864 |
+
this.detach = function() {
|
5865 |
+
if (isCollectionTyped) {
|
5866 |
+
var i = 0, j = element.length;
|
5867 |
+
for (; i < j; i++) {
|
5868 |
+
ResizeSensor.detach(element[i]);
|
5869 |
+
}
|
5870 |
+
} else {
|
5871 |
+
ResizeSensor.detach(element);
|
5872 |
+
}
|
5873 |
+
};
|
5874 |
+
};
|
5875 |
+
|
5876 |
+
ResizeSensor.detach = function(element) {
|
5877 |
+
if (element.resizeSensor) {
|
5878 |
+
element.removeChild(element.resizeSensor);
|
5879 |
+
delete element.resizeSensor;
|
5880 |
+
delete element.resizedAttached;
|
5881 |
+
}
|
5882 |
+
};
|
5883 |
+
|
5884 |
+
// make available to common module loader
|
5885 |
+
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
|
5886 |
+
module.exports = ResizeSensor;
|
5887 |
+
}
|
5888 |
+
else {
|
5889 |
+
window.ResizeSensor = ResizeSensor;
|
5890 |
+
}
|
5891 |
+
|
5892 |
+
})();
|
5893 |
+
|
5894 |
+
|
5895 |
+
/*!
|
5896 |
+
* Theia Sticky Sidebar v1.7.0
|
5897 |
+
* https://github.com/WeCodePixels/theia-sticky-sidebar
|
5898 |
+
*
|
5899 |
+
* Glues your website's sidebars, making them permanently visible while scrolling.
|
5900 |
+
*
|
5901 |
+
* Copyright 2013-2016 WeCodePixels and other contributors
|
5902 |
+
* Released under the MIT license
|
5903 |
+
*/
|
5904 |
+
;
|
5905 |
+
(function ($) {
|
5906 |
+
$.fn.theiaStickySidebar = function (options) {
|
5907 |
+
var defaults = {
|
5908 |
+
'containerSelector': '',
|
5909 |
+
'additionalMarginTop': 0,
|
5910 |
+
'additionalMarginBottom': 0,
|
5911 |
+
'updateSidebarHeight': true,
|
5912 |
+
'minWidth': 0,
|
5913 |
+
'disableOnResponsiveLayouts': true,
|
5914 |
+
'sidebarBehavior': 'modern',
|
5915 |
+
'defaultPosition': 'relative',
|
5916 |
+
'namespace': 'TSS'
|
5917 |
+
};
|
5918 |
+
options = $.extend(defaults, options);
|
5919 |
+
|
5920 |
+
// Validate options
|
5921 |
+
options.additionalMarginTop = parseInt(options.additionalMarginTop) || 0;
|
5922 |
+
options.additionalMarginBottom = parseInt(options.additionalMarginBottom) || 0;
|
5923 |
+
|
5924 |
+
tryInitOrHookIntoEvents(options, this);
|
5925 |
+
|
5926 |
+
// Try doing init, otherwise hook into window.resize and document.scroll and try again then.
|
5927 |
+
function tryInitOrHookIntoEvents(options, $that) {
|
5928 |
+
var success = tryInit(options, $that);
|
5929 |
+
|
5930 |
+
if (!success) {
|
5931 |
+
console.log('TSS: Body width smaller than options.minWidth. Init is delayed.');
|
5932 |
+
|
5933 |
+
$(document).on('scroll.' + options.namespace, function (options, $that) {
|
5934 |
+
return function (evt) {
|
5935 |
+
var success = tryInit(options, $that);
|
5936 |
+
|
5937 |
+
if (success) {
|
5938 |
+
$(this).unbind(evt);
|
5939 |
+
}
|
5940 |
+
};
|
5941 |
+
}(options, $that));
|
5942 |
+
$(window).on('resize.' + options.namespace, function (options, $that) {
|
5943 |
+
return function (evt) {
|
5944 |
+
var success = tryInit(options, $that);
|
5945 |
+
|
5946 |
+
if (success) {
|
5947 |
+
$(this).unbind(evt);
|
5948 |
+
}
|
5949 |
+
};
|
5950 |
+
}(options, $that))
|
5951 |
+
}
|
5952 |
+
}
|
5953 |
+
|
5954 |
+
// Try doing init if proper conditions are met.
|
5955 |
+
function tryInit(options, $that) {
|
5956 |
+
if (options.initialized === true) {
|
5957 |
+
return true;
|
5958 |
+
}
|
5959 |
+
|
5960 |
+
if ($('body').width() < options.minWidth) {
|
5961 |
+
return false;
|
5962 |
+
}
|
5963 |
+
|
5964 |
+
init(options, $that);
|
5965 |
+
|
5966 |
+
return true;
|
5967 |
+
}
|
5968 |
+
|
5969 |
+
// Init the sticky sidebar(s).
|
5970 |
+
function init(options, $that) {
|
5971 |
+
options.initialized = true;
|
5972 |
+
|
5973 |
+
// Add CSS
|
5974 |
+
var existingStylesheet = $('#theia-sticky-sidebar-stylesheet-' + options.namespace);
|
5975 |
+
if (existingStylesheet.length === 0) {
|
5976 |
+
$('head').append($('<style id="theia-sticky-sidebar-stylesheet-' + options.namespace + '">.theiaStickySidebar:after {content: ""; display: table; clear: both;}</style>'));
|
5977 |
+
}
|
5978 |
+
|
5979 |
+
$that.each(function () {
|
5980 |
+
var o = {};
|
5981 |
+
|
5982 |
+
o.sidebar = $(this);
|
5983 |
+
|
5984 |
+
// Save options
|
5985 |
+
o.options = options || {};
|
5986 |
+
|
5987 |
+
// Get container
|
5988 |
+
o.container = $(o.options.containerSelector);
|
5989 |
+
if (o.container.length == 0) {
|
5990 |
+
o.container = o.sidebar.parent();
|
5991 |
+
}
|
5992 |
+
|
5993 |
+
// Create sticky sidebar
|
5994 |
+
o.sidebar.parents().css('-webkit-transform', 'none'); // Fix for WebKit bug - https://code.google.com/p/chromium/issues/detail?id=20574
|
5995 |
+
o.sidebar.css({
|
5996 |
+
'position': o.options.defaultPosition,
|
5997 |
+
'overflow': 'visible',
|
5998 |
+
// The "box-sizing" must be set to "content-box" because we set a fixed height to this element when the sticky sidebar has a fixed position.
|
5999 |
+
'-webkit-box-sizing': 'border-box',
|
6000 |
+
'-moz-box-sizing': 'border-box',
|
6001 |
+
'box-sizing': 'border-box'
|
6002 |
+
});
|
6003 |
+
|
6004 |
+
// Get the sticky sidebar element. If none has been found, then create one.
|
6005 |
+
o.stickySidebar = o.sidebar.find('.theiaStickySidebar');
|
6006 |
+
if (o.stickySidebar.length == 0) {
|
6007 |
+
// Remove <script> tags, otherwise they will be run again when added to the stickySidebar.
|
6008 |
+
var javaScriptMIMETypes = /(?:text|application)\/(?:x-)?(?:javascript|ecmascript)/i;
|
6009 |
+
o.sidebar.find('script').filter(function (index, script) {
|
6010 |
+
return script.type.length === 0 || script.type.match(javaScriptMIMETypes);
|
6011 |
+
}).remove();
|
6012 |
+
|
6013 |
+
o.stickySidebar = $('<div>').addClass('theiaStickySidebar').append(o.sidebar.children());
|
6014 |
+
o.sidebar.append(o.stickySidebar);
|
6015 |
+
}
|
6016 |
+
|
6017 |
+
// Get existing top and bottom margins and paddings
|
6018 |
+
o.marginBottom = parseInt(o.sidebar.css('margin-bottom'));
|
6019 |
+
o.paddingTop = parseInt(o.sidebar.css('padding-top'));
|
6020 |
+
o.paddingBottom = parseInt(o.sidebar.css('padding-bottom'));
|
6021 |
+
|
6022 |
+
// Add a temporary padding rule to check for collapsable margins.
|
6023 |
+
var collapsedTopHeight = o.stickySidebar.offset().top;
|
6024 |
+
var collapsedBottomHeight = o.stickySidebar.outerHeight();
|
6025 |
+
o.stickySidebar.css('padding-top', 1);
|
6026 |
+
o.stickySidebar.css('padding-bottom', 1);
|
6027 |
+
collapsedTopHeight -= o.stickySidebar.offset().top;
|
6028 |
+
collapsedBottomHeight = o.stickySidebar.outerHeight() - collapsedBottomHeight - collapsedTopHeight;
|
6029 |
+
if (collapsedTopHeight == 0) {
|
6030 |
+
o.stickySidebar.css('padding-top', 0);
|
6031 |
+
o.stickySidebarPaddingTop = 0;
|
6032 |
+
}
|
6033 |
+
else {
|
6034 |
+
o.stickySidebarPaddingTop = 1;
|
6035 |
+
}
|
6036 |
+
|
6037 |
+
if (collapsedBottomHeight == 0) {
|
6038 |
+
o.stickySidebar.css('padding-bottom', 0);
|
6039 |
+
o.stickySidebarPaddingBottom = 0;
|
6040 |
+
}
|
6041 |
+
else {
|
6042 |
+
o.stickySidebarPaddingBottom = 1;
|
6043 |
+
}
|
6044 |
+
|
6045 |
+
// We use this to know whether the user is scrolling up or down.
|
6046 |
+
o.previousScrollTop = null;
|
6047 |
+
|
6048 |
+
// Scroll top (value) when the sidebar has fixed position.
|
6049 |
+
o.fixedScrollTop = 0;
|
6050 |
+
|
6051 |
+
// Set sidebar to default values.
|
6052 |
+
resetSidebar();
|
6053 |
+
|
6054 |
+
o.onScroll = function (o) {
|
6055 |
+
// Stop if the sidebar isn't visible.
|
6056 |
+
if (!o.stickySidebar.is(":visible")) {
|
6057 |
+
return;
|
6058 |
+
}
|
6059 |
+
|
6060 |
+
// Stop if the window is too small.
|
6061 |
+
if ($('body').width() < o.options.minWidth) {
|
6062 |
+
resetSidebar();
|
6063 |
+
return;
|
6064 |
+
}
|
6065 |
+
|
6066 |
+
// Stop if the sidebar width is larger than the container width (e.g. the theme is responsive and the sidebar is now below the content)
|
6067 |
+
if (o.options.disableOnResponsiveLayouts) {
|
6068 |
+
var sidebarWidth = o.sidebar.outerWidth(o.sidebar.css('float') == 'none');
|
6069 |
+
|
6070 |
+
if (sidebarWidth + 50 > o.container.width()) {
|
6071 |
+
resetSidebar();
|
6072 |
+
return;
|
6073 |
+
}
|
6074 |
+
}
|
6075 |
+
|
6076 |
+
var scrollTop = $(document).scrollTop();
|
6077 |
+
var position = 'static';
|
6078 |
+
|
6079 |
+
// If the user has scrolled down enough for the sidebar to be clipped at the top, then we can consider changing its position.
|
6080 |
+
if (scrollTop >= o.sidebar.offset().top + (o.paddingTop - o.options.additionalMarginTop)) {
|
6081 |
+
// The top and bottom offsets, used in various calculations.
|
6082 |
+
var offsetTop = o.paddingTop + options.additionalMarginTop;
|
6083 |
+
var offsetBottom = o.paddingBottom + o.marginBottom + options.additionalMarginBottom;
|
6084 |
+
|
6085 |
+
// All top and bottom positions are relative to the window, not to the parent elemnts.
|
6086 |
+
var containerTop = o.sidebar.offset().top;
|
6087 |
+
var containerBottom = o.sidebar.offset().top + getClearedHeight(o.container);
|
6088 |
+
|
6089 |
+
// The top and bottom offsets relative to the window screen top (zero) and bottom (window height).
|
6090 |
+
var windowOffsetTop = 0 + options.additionalMarginTop;
|
6091 |
+
var windowOffsetBottom;
|
6092 |
+
|
6093 |
+
var sidebarSmallerThanWindow = (o.stickySidebar.outerHeight() + offsetTop + offsetBottom) < $(window).height();
|
6094 |
+
if (sidebarSmallerThanWindow) {
|
6095 |
+
windowOffsetBottom = windowOffsetTop + o.stickySidebar.outerHeight();
|
6096 |
+
}
|
6097 |
+
else {
|
6098 |
+
windowOffsetBottom = $(window).height() - o.marginBottom - o.paddingBottom - options.additionalMarginBottom;
|
6099 |
+
}
|
6100 |
+
|
6101 |
+
var staticLimitTop = containerTop - scrollTop + o.paddingTop;
|
6102 |
+
var staticLimitBottom = containerBottom - scrollTop - o.paddingBottom - o.marginBottom;
|
6103 |
+
|
6104 |
+
var top = o.stickySidebar.offset().top - scrollTop;
|
6105 |
+
var scrollTopDiff = o.previousScrollTop - scrollTop;
|
6106 |
+
|
6107 |
+
// If the sidebar position is fixed, then it won't move up or down by itself. So, we manually adjust the top coordinate.
|
6108 |
+
if (o.stickySidebar.css('position') == 'fixed') {
|
6109 |
+
if (o.options.sidebarBehavior == 'modern') {
|
6110 |
+
top += scrollTopDiff;
|
6111 |
+
}
|
6112 |
+
}
|
6113 |
+
|
6114 |
+
if (o.options.sidebarBehavior == 'stick-to-top') {
|
6115 |
+
top = options.additionalMarginTop;
|
6116 |
+
}
|
6117 |
+
|
6118 |
+
if (o.options.sidebarBehavior == 'stick-to-bottom') {
|
6119 |
+
top = windowOffsetBottom - o.stickySidebar.outerHeight();
|
6120 |
+
}
|
6121 |
+
|
6122 |
+
if (scrollTopDiff > 0) { // If the user is scrolling up.
|
6123 |
+
top = Math.min(top, windowOffsetTop);
|
6124 |
+
}
|
6125 |
+
else { // If the user is scrolling down.
|
6126 |
+
top = Math.max(top, windowOffsetBottom - o.stickySidebar.outerHeight());
|
6127 |
+
}
|
6128 |
+
|
6129 |
+
top = Math.max(top, staticLimitTop);
|
6130 |
+
|
6131 |
+
top = Math.min(top, staticLimitBottom - o.stickySidebar.outerHeight());
|
6132 |
+
|
6133 |
+
// If the sidebar is the same height as the container, we won't use fixed positioning.
|
6134 |
+
var sidebarSameHeightAsContainer = o.container.height() == o.stickySidebar.outerHeight();
|
6135 |
+
|
6136 |
+
if (!sidebarSameHeightAsContainer && top == windowOffsetTop) {
|
6137 |
+
position = 'fixed';
|
6138 |
+
}
|
6139 |
+
else if (!sidebarSameHeightAsContainer && top == windowOffsetBottom - o.stickySidebar.outerHeight()) {
|
6140 |
+
position = 'fixed';
|
6141 |
+
}
|
6142 |
+
else if (scrollTop + top - o.sidebar.offset().top - o.paddingTop <= options.additionalMarginTop) {
|
6143 |
+
// Stuck to the top of the page. No special behavior.
|
6144 |
+
position = 'static';
|
6145 |
+
}
|
6146 |
+
else {
|
6147 |
+
// Stuck to the bottom of the page.
|
6148 |
+
position = 'absolute';
|
6149 |
+
}
|
6150 |
+
}
|
6151 |
+
|
6152 |
+
/*
|
6153 |
+
* Performance notice: It's OK to set these CSS values at each resize/scroll, even if they don't change.
|
6154 |
+
* It's way slower to first check if the values have changed.
|
6155 |
+
*/
|
6156 |
+
if (position == 'fixed') {
|
6157 |
+
var scrollLeft = $(document).scrollLeft();
|
6158 |
+
|
6159 |
+
o.stickySidebar.css({
|
6160 |
+
'position': 'fixed',
|
6161 |
+
'width': getWidthForObject(o.stickySidebar) + 'px',
|
6162 |
+
'transform': 'translateY(' + top + 'px)',
|
6163 |
+
'left': (o.sidebar.offset().left + parseInt(o.sidebar.css('padding-left')) - scrollLeft) + 'px',
|
6164 |
+
'top': '0px'
|
6165 |
+
});
|
6166 |
+
}
|
6167 |
+
else if (position == 'absolute') {
|
6168 |
+
var css = {};
|
6169 |
+
|
6170 |
+
if (o.stickySidebar.css('position') != 'absolute') {
|
6171 |
+
css.position = 'absolute';
|
6172 |
+
css.transform = 'translateY(' + (scrollTop + top - o.sidebar.offset().top - o.stickySidebarPaddingTop - o.stickySidebarPaddingBottom) + 'px)';
|
6173 |
+
css.top = '0px';
|
6174 |
+
}
|
6175 |
+
|
6176 |
+
css.width = getWidthForObject(o.stickySidebar) + 'px';
|
6177 |
+
css.left = '';
|
6178 |
+
|
6179 |
+
o.stickySidebar.css(css);
|
6180 |
+
}
|
6181 |
+
else if (position == 'static') {
|
6182 |
+
resetSidebar();
|
6183 |
+
}
|
6184 |
+
|
6185 |
+
if (position != 'static') {
|
6186 |
+
if (o.options.updateSidebarHeight == true) {
|
6187 |
+
o.sidebar.css({
|
6188 |
+
'min-height': o.stickySidebar.outerHeight() + o.stickySidebar.offset().top - o.sidebar.offset().top + o.paddingBottom
|
6189 |
+
});
|
6190 |
+
}
|
6191 |
+
}
|
6192 |
+
|
6193 |
+
o.previousScrollTop = scrollTop;
|
6194 |
+
};
|
6195 |
+
|
6196 |
+
// Initialize the sidebar's position.
|
6197 |
+
o.onScroll(o);
|
6198 |
+
|
6199 |
+
// Recalculate the sidebar's position on every scroll and resize.
|
6200 |
+
$(document).on('scroll.' + o.options.namespace, function (o) {
|
6201 |
+
return function () {
|
6202 |
+
o.onScroll(o);
|
6203 |
+
};
|
6204 |
+
}(o));
|
6205 |
+
$(window).on('resize.' + o.options.namespace, function (o) {
|
6206 |
+
return function () {
|
6207 |
+
o.stickySidebar.css({'position': 'static'});
|
6208 |
+
o.onScroll(o);
|
6209 |
+
};
|
6210 |
+
}(o));
|
6211 |
+
|
6212 |
+
// Recalculate the sidebar's position every time the sidebar changes its size.
|
6213 |
+
if (typeof ResizeSensor !== 'undefined') {
|
6214 |
+
new ResizeSensor(o.stickySidebar[0], function (o) {
|
6215 |
+
return function () {
|
6216 |
+
o.onScroll(o);
|
6217 |
+
};
|
6218 |
+
}(o));
|
6219 |
+
}
|
6220 |
+
|
6221 |
+
// Reset the sidebar to its default state
|
6222 |
+
function resetSidebar() {
|
6223 |
+
o.fixedScrollTop = 0;
|
6224 |
+
o.sidebar.css({
|
6225 |
+
'min-height': '1px'
|
6226 |
+
});
|
6227 |
+
o.stickySidebar.css({
|
6228 |
+
'position': 'static',
|
6229 |
+
'width': '',
|
6230 |
+
'transform': 'none'
|
6231 |
+
});
|
6232 |
+
}
|
6233 |
+
|
6234 |
+
// Get the height of a div as if its floated children were cleared. Note that this function fails if the floats are more than one level deep.
|
6235 |
+
function getClearedHeight(e) {
|
6236 |
+
var height = e.height();
|
6237 |
+
|
6238 |
+
e.children().each(function () {
|
6239 |
+
height = Math.max(height, $(this).height());
|
6240 |
+
});
|
6241 |
+
|
6242 |
+
return height;
|
6243 |
+
}
|
6244 |
+
});
|
6245 |
+
}
|
6246 |
+
|
6247 |
+
function getWidthForObject(object) {
|
6248 |
+
var width;
|
6249 |
+
|
6250 |
+
try {
|
6251 |
+
width = object[0].getBoundingClientRect().width;
|
6252 |
+
}
|
6253 |
+
catch (err) {
|
6254 |
+
}
|
6255 |
+
|
6256 |
+
if (typeof width === "undefined") {
|
6257 |
+
width = object.width();
|
6258 |
+
}
|
6259 |
+
|
6260 |
+
return width;
|
6261 |
+
}
|
6262 |
+
|
6263 |
+
return this;
|
6264 |
+
}
|
6265 |
+
})(jQuery);
|
6266 |
+
|
6267 |
+
var ai_functions = true; if (typeof ai_debugging !== 'undefined') console.log ('AI FUNCTIONS LOADED');
|
js/ai-functions.min.js
ADDED
@@ -0,0 +1,180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function b2a(a){var b,c=0,l=0,f="",g=[];if(!a)return a;do{var e=a.charCodeAt(c++);var h=a.charCodeAt(c++);var k=a.charCodeAt(c++);var d=e<<16|h<<8|k;e=63&d>>18;h=63&d>>12;k=63&d>>6;d&=63;g[l++]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(h)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(k)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(d)}while(c<
|
2 |
+
a.length);return f=g.join(""),b=a.length%3,(b?f.slice(0,b-3):f)+"===".slice(b||3)}function a2b(a){var b,c,l,f={},g=0,e=0,h="",k=String.fromCharCode,d=a.length;for(b=0;64>b;b++)f["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(b)]=b;for(c=0;d>c;c++)for(b=f[a.charAt(c)],g=(g<<6)+b,e+=6;8<=e;)((l=255&g>>>(e-=8))||d-2>c)&&(h+=k(l));return h}b64e=function(a){return btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,function(b,a){return String.fromCharCode("0x"+a)}))};
|
3 |
+
b64d=function(a){return decodeURIComponent(atob(a).split("").map(function(a){return"%"+("00"+a.charCodeAt(0).toString(16)).slice(-2)}).join(""))};
|
4 |
+
;!function(a,b){a(function(){"use strict";function a(a,b){return null!=a&&null!=b&&a.toLowerCase()===b.toLowerCase()}function c(a,b){var c,d,e=a.length;if(!e||!b)return!1;for(c=b.toLowerCase(),d=0;d<e;++d)if(c===a[d].toLowerCase())return!0;return!1}function d(a){for(var b in a)i.call(a,b)&&(a[b]=new RegExp(a[b],"i"))}function e(a){return(a||"").substr(0,500)}function f(a,b){this.ua=e(a),this._cache={},this.maxPhoneWidth=b||600}var g={};g.mobileDetectRules={phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",Pixel:"; \\bPixel\\b",HTC:"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",Nexus:"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",Dell:"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",Motorola:"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",Asus:"Asus.*Galaxy|PadFone.*Mobile",Xiaomi:"^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",GalapadTablet:"Android [0-9.]+; [a-z-]+; \\bG1\\b",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",iPadOS:"CPU OS 13",SailfishOS:"Sailfish",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW"},uas:{Chrome:"\\bCrMo\\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?",Dolfin:"\\bDolfin\\b",Opera:"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+",Skyfire:"Skyfire",Edge:"\\bEdgiOS\\b|Mobile Safari/[.0-9]* Edge",IE:"IEMobile|MSIEMobile",Firefox:"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",Safari:"Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",WeChat:"\\bMicroMessenger\\b",UCBrowser:"UC.*Browser|UCWEB",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon"},props:{Mobile:"Mobile/[VER]",Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",Edge:"Edge/[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","Trident/[0-9.]+;.*rv:[VER]"],NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]",Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]"],"Opera Mini":"Opera Mini/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",SailfishBrowser:"SailfishBrowser/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",Sailfish:"Sailfish [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]","Windows NT":"Windows NT [VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"]},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700"}},g.detectMobileBrowsers={fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,
|
5 |
+
shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,tabletPattern:/android|ipad|playbook|silk/i};var h,i=Object.prototype.hasOwnProperty;return g.FALLBACK_PHONE="UnknownPhone",g.FALLBACK_TABLET="UnknownTablet",g.FALLBACK_MOBILE="UnknownMobile",h="isArray"in Array?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},function(){var a,b,c,e,f,j,k=g.mobileDetectRules;for(a in k.props)if(i.call(k.props,a)){for(b=k.props[a],h(b)||(b=[b]),f=b.length,e=0;e<f;++e)c=b[e],j=c.indexOf("[VER]"),j>=0&&(c=c.substring(0,j)+"([\\w._\\+]+)"+c.substring(j+5)),b[e]=new RegExp(c,"i");k.props[a]=b}d(k.oss),d(k.phones),d(k.tablets),d(k.uas),d(k.utils),k.oss0={WindowsPhoneOS:k.oss.WindowsPhoneOS,WindowsMobileOS:k.oss.WindowsMobileOS}}(),g.findMatch=function(a,b){for(var c in a)if(i.call(a,c)&&a[c].test(b))return c;return null},g.findMatches=function(a,b){var c=[];for(var d in a)i.call(a,d)&&a[d].test(b)&&c.push(d);return c},g.getVersionStr=function(a,b){var c,d,e,f,h=g.mobileDetectRules.props;if(i.call(h,a))for(c=h[a],e=c.length,d=0;d<e;++d)if(f=c[d].exec(b),null!==f)return f[1];return null},g.getVersion=function(a,b){var c=g.getVersionStr(a,b);return c?g.prepareVersionNo(c):NaN},g.prepareVersionNo=function(a){var b;return b=a.split(/[a-z._ \/\-]/i),1===b.length&&(a=b[0]),b.length>1&&(a=b[0]+".",b.shift(),a+=b.join("")),Number(a)},g.isMobileFallback=function(a){return g.detectMobileBrowsers.fullPattern.test(a)||g.detectMobileBrowsers.shortPattern.test(a.substr(0,4))},g.isTabletFallback=function(a){return g.detectMobileBrowsers.tabletPattern.test(a)},g.prepareDetectionCache=function(a,c,d){if(a.mobile===b){var e,h,i;return(h=g.findMatch(g.mobileDetectRules.tablets,c))?(a.mobile=a.tablet=h,void(a.phone=null)):(e=g.findMatch(g.mobileDetectRules.phones,c))?(a.mobile=a.phone=e,void(a.tablet=null)):void(g.isMobileFallback(c)?(i=f.isPhoneSized(d),i===b?(a.mobile=g.FALLBACK_MOBILE,a.tablet=a.phone=null):i?(a.mobile=a.phone=g.FALLBACK_PHONE,a.tablet=null):(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null)):g.isTabletFallback(c)?(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null):a.mobile=a.tablet=a.phone=null)}},g.mobileGrade=function(a){var b=null!==a.mobile();return a.os("iOS")&&a.version("iPad")>=4.3||a.os("iOS")&&a.version("iPhone")>=3.1||a.os("iOS")&&a.version("iPod")>=3.1||a.version("Android")>2.1&&a.is("Webkit")||a.version("Windows Phone OS")>=7||a.is("BlackBerry")&&a.version("BlackBerry")>=6||a.match("Playbook.*Tablet")||a.version("webOS")>=1.4&&a.match("Palm|Pre|Pixi")||a.match("hp.*TouchPad")||a.is("Firefox")&&a.version("Firefox")>=12||a.is("Chrome")&&a.is("AndroidOS")&&a.version("Android")>=4||a.is("Skyfire")&&a.version("Skyfire")>=4.1&&a.is("AndroidOS")&&a.version("Android")>=2.3||a.is("Opera")&&a.version("Opera Mobi")>11&&a.is("AndroidOS")||a.is("MeeGoOS")||a.is("Tizen")||a.is("Dolfin")&&a.version("Bada")>=2||(a.is("UC Browser")||a.is("Dolfin"))&&a.version("Android")>=2.3||a.match("Kindle Fire")||a.is("Kindle")&&a.version("Kindle")>=3||a.is("AndroidOS")&&a.is("NookTablet")||a.version("Chrome")>=11&&!b||a.version("Safari")>=5&&!b||a.version("Firefox")>=4&&!b||a.version("MSIE")>=7&&!b||a.version("Opera")>=10&&!b?"A":a.os("iOS")&&a.version("iPad")<4.3||a.os("iOS")&&a.version("iPhone")<3.1||a.os("iOS")&&a.version("iPod")<3.1||a.is("Blackberry")&&a.version("BlackBerry")>=5&&a.version("BlackBerry")<6||a.version("Opera Mini")>=5&&a.version("Opera Mini")<=6.5&&(a.version("Android")>=2.3||a.is("iOS"))||a.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||a.version("Opera Mobi")>=11&&a.is("SymbianOS")?"B":(a.version("BlackBerry")<5||a.match("MSIEMobile|Windows CE.*Mobile")||a.version("Windows Mobile")<=5.2,"C")},g.detectOS=function(a){return g.findMatch(g.mobileDetectRules.oss0,a)||g.findMatch(g.mobileDetectRules.oss,a)},g.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height},f.prototype={constructor:f,mobile:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.mobile},phone:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.phone},tablet:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.tablet},userAgent:function(){return this._cache.userAgent===b&&(this._cache.userAgent=g.findMatch(g.mobileDetectRules.uas,this.ua)),this._cache.userAgent},userAgents:function(){return this._cache.userAgents===b&&(this._cache.userAgents=g.findMatches(g.mobileDetectRules.uas,this.ua)),this._cache.userAgents},os:function(){return this._cache.os===b&&(this._cache.os=g.detectOS(this.ua)),this._cache.os},version:function(a){return g.getVersion(a,this.ua)},versionStr:function(a){return g.getVersionStr(a,this.ua)},is:function(b){return c(this.userAgents(),b)||a(b,this.os())||a(b,this.phone())||a(b,this.tablet())||c(g.findMatches(g.mobileDetectRules.utils,this.ua),b)},match:function(a){return a instanceof RegExp||(a=new RegExp(a,"i")),a.test(this.ua)},isPhoneSized:function(a){return f.isPhoneSized(a||this.maxPhoneWidth)},mobileGrade:function(){return this._cache.grade===b&&(this._cache.grade=g.mobileGrade(this)),this._cache.grade}},"undefined"!=typeof window&&window.screen?f.isPhoneSized=function(a){return a<0?b:g.getDeviceSmallerSide()<=a}:f.isPhoneSized=function(){},f._impl=g,f.version="1.4.5 2021-03-13",f})}(function(a){if("undefined"!=typeof module&&module.exports)return function(a){module.exports=a()};if("function"==typeof define&&define.amd)return define;if("undefined"!=typeof window)return function(a){window.MobileDetect=a()};throw new Error("unknown environment")}());var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var d=0;return function(){return d<a.length?{done:!1,value:a[d++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var d="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return d?d.call(a):$jscomp.arrayIterator(a)};
|
6 |
+
ai_insert=function(a,d,m){if(-1!=d.indexOf(":eq("))if(window.jQuery&&window.jQuery.fn)var k=jQuery(d);else{console.error("AI INSERT USING jQuery QUERIES:",d,"- jQuery not found");return}else k=document.querySelectorAll(d);for(var u=0,y=k.length;u<y;u++){var e=k[u];selector_string=e.hasAttribute("id")?"#"+e.getAttribute("id"):e.hasAttribute("class")?"."+e.getAttribute("class").replace(RegExp(" ","g"),"."):"";var w=document.createElement("div");w.innerHTML=m;var n=w.getElementsByClassName("ai-selector-counter")[0];
|
7 |
+
null!=n&&(n.innerText=u+1);n=w.getElementsByClassName("ai-debug-name ai-main")[0];if(null!=n){var r=a.toUpperCase();"undefined"!=typeof ai_front&&("before"==a?r=ai_front.insertion_before:"after"==a?r=ai_front.insertion_after:"prepend"==a?r=ai_front.insertion_prepend:"append"==a?r=ai_front.insertion_append:"replace-content"==a?r=ai_front.insertion_replace_content:"replace-element"==a&&(r=ai_front.insertion_replace_element));-1==selector_string.indexOf(".ai-viewports")&&(n.innerText=r+" "+d+" ("+e.tagName.toLowerCase()+
|
8 |
+
selector_string+")")}n=document.createRange();try{var v=n.createContextualFragment(w.innerHTML)}catch(t){}"before"==a?e.parentNode.insertBefore(v,e):"after"==a?e.parentNode.insertBefore(v,e.nextSibling):"prepend"==a?e.insertBefore(v,e.firstChild):"append"==a?e.insertBefore(v,null):"replace-content"==a?(e.innerHTML="",e.insertBefore(v,null)):"replace-element"==a&&(e.parentNode.insertBefore(v,e),e.parentNode.removeChild(e))}};
|
9 |
+
ai_insert_code=function(a){function d(n,r){return null==n?!1:n.classList?n.classList.contains(r):-1<(" "+n.className+" ").indexOf(" "+r+" ")}function m(n,r){null!=n&&(n.classList?n.classList.add(r):n.className+=" "+r)}function k(n,r){null!=n&&(n.classList?n.classList.remove(r):n.className=n.className.replace(new RegExp("(^|\\b)"+r.split(" ").join("|")+"(\\b|$)","gi")," "))}if("undefined"!=typeof a){var u=!1;if(d(a,"no-visibility-check")||a.offsetWidth||a.offsetHeight||a.getClientRects().length){u=
|
10 |
+
a.getAttribute("data-code");var y=a.getAttribute("data-insertion-position"),e=a.getAttribute("data-selector");if(null!=u)if(null!=y&&null!=e){if(-1!=e.indexOf(":eq(")?window.jQuery&&window.jQuery.fn&&jQuery(e).length:document.querySelectorAll(e).length)ai_insert(y,e,b64d(u)),k(a,"ai-viewports")}else{y=document.createRange();try{var w=y.createContextualFragment(b64d(u))}catch(n){}a.parentNode.insertBefore(w,a.nextSibling);k(a,"ai-viewports")}u=!0}else w=a.previousElementSibling,d(w,"ai-debug-bar")&&
|
11 |
+
d(w,"ai-debug-script")&&(k(w,"ai-debug-script"),m(w,"ai-debug-viewport-invisible")),k(a,"ai-viewports");return u}};
|
12 |
+
ai_insert_list_code=function(a){var d=document.getElementsByClassName(a)[0];if("undefined"!=typeof d){var m=ai_insert_code(d),k=d.closest("div.AI_FUNCT_GET_BLOCK_CLASS_NAME");if(k){m||k.removeAttribute("data-ai");var u=k.querySelectorAll(".ai-debug-block");k&&u.length&&(k.classList.remove("ai-list-block"),k.classList.remove("ai-list-block-ip"),k.classList.remove("ai-list-block-filter"),k.style.visibility="",k.classList.contains("ai-remove-position")&&(k.style.position=""))}d.classList.remove(a);m&&
|
13 |
+
ai_process_elements()}};ai_insert_viewport_code=function(a){var d=document.getElementsByClassName(a)[0];if("undefined"!=typeof d){var m=ai_insert_code(d);d.classList.remove(a);m&&(a=d.closest("div.AI_FUNCT_GET_BLOCK_CLASS_NAME"),null!=a&&(m=d.getAttribute("style"),null!=m&&a.setAttribute("style",a.getAttribute("style")+" "+m)));setTimeout(function(){d.removeAttribute("style")},2);ai_process_elements()}};
|
14 |
+
ai_insert_adsense_fallback_codes=function(a){a.style.display="none";var d=a.closest(".ai-fallback-adsense"),m=d.nextElementSibling;m.getAttribute("data-code")?ai_insert_code(m)&&ai_process_elements():m.style.display="block";d.classList.contains("ai-empty-code")&&(a=a.closest(".AI_FUNCT_GET_BLOCK_CLASS_NAME").getElementsByClassName("code-block-label"),0!=a.length&&(a[0].style.display="none"))};
|
15 |
+
ai_insert_code_by_class=function(a){var d=document.getElementsByClassName(a)[0];"undefined"!=typeof d&&(ai_insert_code(d),d.classList.remove(a))};ai_insert_client_code=function(a,d){var m=document.getElementsByClassName(a)[0];if("undefined"!=typeof m){var k=m.getAttribute("data-code");null!=k&&ai_check_block()&&(m.setAttribute("data-code",k.substring(Math.floor(d/19))),ai_insert_code_by_class(a),m.remove())}};ai_process_elements_active=!1;
|
16 |
+
function ai_process_elements(){ai_process_elements_active||setTimeout(function(){ai_process_elements_active=!1;"function"==typeof ai_process_rotations&&ai_process_rotations();"function"==typeof ai_process_lists&&ai_process_lists(jQuery(".ai-list-data"));"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses(jQuery(".ai-ip-data"));"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks();"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks();"function"==typeof ai_process_impressions&&
|
17 |
+
1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)},5);ai_process_elements_active=!0}
|
18 |
+
var targetNode=document.querySelector("body"),config={attributes:!0,childList:!1,subtree:!0},ai_adsense_callback=function(a,d){for(var m=$jscomp.makeIterator(a),k=m.next();!k.done;k=m.next())k=k.value,"attributes"===k.type&&"data-ad-status"==k.attributeName&&"unfilled"==k.target.dataset.adStatus&&k.target.closest(".ai-fallback-adsense")&&ai_insert_adsense_fallback_codes(k.target)},observer=new MutationObserver(ai_adsense_callback);observer.observe(targetNode,config);
|
19 |
+
var Arrive=function(a,d,m){function k(t,c,f){e.addMethod(c,f,t.unbindEvent);e.addMethod(c,f,t.unbindEventWithSelectorOrCallback);e.addMethod(c,f,t.unbindEventWithSelectorAndCallback)}function u(t){t.arrive=r.bindEvent;k(r,t,"unbindArrive");t.leave=v.bindEvent;k(v,t,"unbindLeave")}if(a.MutationObserver&&"undefined"!==typeof HTMLElement){var y=0,e=function(){var t=HTMLElement.prototype.matches||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector;
|
20 |
+
return{matchesSelector:function(c,f){return c instanceof HTMLElement&&t.call(c,f)},addMethod:function(c,f,g){var b=c[f];c[f]=function(){if(g.length==arguments.length)return g.apply(this,arguments);if("function"==typeof b)return b.apply(this,arguments)}},callCallbacks:function(c,f){f&&f.options.onceOnly&&1==f.firedElems.length&&(c=[c[0]]);for(var g=0,b;b=c[g];g++)b&&b.callback&&b.callback.call(b.elem,b.elem);f&&f.options.onceOnly&&1==f.firedElems.length&&f.me.unbindEventWithSelectorAndCallback.call(f.target,
|
21 |
+
f.selector,f.callback)},checkChildNodesRecursively:function(c,f,g,b){for(var h=0,l;l=c[h];h++)g(l,f,b)&&b.push({callback:f.callback,elem:l}),0<l.childNodes.length&&e.checkChildNodesRecursively(l.childNodes,f,g,b)},mergeArrays:function(c,f){var g={},b;for(b in c)c.hasOwnProperty(b)&&(g[b]=c[b]);for(b in f)f.hasOwnProperty(b)&&(g[b]=f[b]);return g},toElementsArray:function(c){"undefined"===typeof c||"number"===typeof c.length&&c!==a||(c=[c]);return c}}}(),w=function(){var t=function(){this._eventsBucket=
|
22 |
+
[];this._beforeRemoving=this._beforeAdding=null};t.prototype.addEvent=function(c,f,g,b){c={target:c,selector:f,options:g,callback:b,firedElems:[]};this._beforeAdding&&this._beforeAdding(c);this._eventsBucket.push(c);return c};t.prototype.removeEvent=function(c){for(var f=this._eventsBucket.length-1,g;g=this._eventsBucket[f];f--)c(g)&&(this._beforeRemoving&&this._beforeRemoving(g),(g=this._eventsBucket.splice(f,1))&&g.length&&(g[0].callback=null))};t.prototype.beforeAdding=function(c){this._beforeAdding=
|
23 |
+
c};t.prototype.beforeRemoving=function(c){this._beforeRemoving=c};return t}(),n=function(t,c){var f=new w,g=this,b={fireOnAttributesModification:!1};f.beforeAdding(function(h){var l=h.target;if(l===a.document||l===a)l=document.getElementsByTagName("html")[0];var p=new MutationObserver(function(x){c.call(this,x,h)});var q=t(h.options);p.observe(l,q);h.observer=p;h.me=g});f.beforeRemoving(function(h){h.observer.disconnect()});this.bindEvent=function(h,l,p){l=e.mergeArrays(b,l);for(var q=e.toElementsArray(this),
|
24 |
+
x=0;x<q.length;x++)f.addEvent(q[x],h,l,p)};this.unbindEvent=function(){var h=e.toElementsArray(this);f.removeEvent(function(l){for(var p=0;p<h.length;p++)if(this===m||l.target===h[p])return!0;return!1})};this.unbindEventWithSelectorOrCallback=function(h){var l=e.toElementsArray(this);f.removeEvent("function"===typeof h?function(p){for(var q=0;q<l.length;q++)if((this===m||p.target===l[q])&&p.callback===h)return!0;return!1}:function(p){for(var q=0;q<l.length;q++)if((this===m||p.target===l[q])&&p.selector===
|
25 |
+
h)return!0;return!1})};this.unbindEventWithSelectorAndCallback=function(h,l){var p=e.toElementsArray(this);f.removeEvent(function(q){for(var x=0;x<p.length;x++)if((this===m||q.target===p[x])&&q.selector===h&&q.callback===l)return!0;return!1})};return this},r=new function(){function t(g,b,h){return e.matchesSelector(g,b.selector)&&(g._id===m&&(g._id=y++),-1==b.firedElems.indexOf(g._id))?(b.firedElems.push(g._id),!0):!1}var c={fireOnAttributesModification:!1,onceOnly:!1,existing:!1};r=new n(function(g){var b=
|
26 |
+
{attributes:!1,childList:!0,subtree:!0};g.fireOnAttributesModification&&(b.attributes=!0);return b},function(g,b){g.forEach(function(h){var l=h.addedNodes,p=h.target,q=[];null!==l&&0<l.length?e.checkChildNodesRecursively(l,b,t,q):"attributes"===h.type&&t(p,b,q)&&q.push({callback:b.callback,elem:p});e.callCallbacks(q,b)})});var f=r.bindEvent;r.bindEvent=function(g,b,h){"undefined"===typeof h?(h=b,b=c):b=e.mergeArrays(c,b);var l=e.toElementsArray(this);if(b.existing){for(var p=[],q=0;q<l.length;q++)for(var x=
|
27 |
+
l[q].querySelectorAll(g),z=0;z<x.length;z++)p.push({callback:h,elem:x[z]});if(b.onceOnly&&p.length)return h.call(p[0].elem,p[0].elem);setTimeout(e.callCallbacks,1,p)}f.call(this,g,b,h)};return r},v=new function(){function t(g,b){return e.matchesSelector(g,b.selector)}var c={};v=new n(function(){return{childList:!0,subtree:!0}},function(g,b){g.forEach(function(h){h=h.removedNodes;var l=[];null!==h&&0<h.length&&e.checkChildNodesRecursively(h,b,t,l);e.callCallbacks(l,b)})});var f=v.bindEvent;v.bindEvent=
|
28 |
+
function(g,b,h){"undefined"===typeof h?(h=b,b=c):b=e.mergeArrays(c,b);f.call(this,g,b,h)};return v};d&&u(d.fn);u(HTMLElement.prototype);u(NodeList.prototype);u(HTMLCollection.prototype);u(HTMLDocument.prototype);u(Window.prototype);d={};k(r,d,"unbindAllArrive");k(v,d,"unbindAllLeave");return d}}(window,"undefined"===typeof jQuery?null:jQuery,void 0);
|
29 |
+
if("undefined"!==typeof ai_block_class_def){var ai_set_cookie=function(a,c,d){var b=ai_load_cookie();if(""===d){if(b.hasOwnProperty(a)){delete b[a][c];a:{c=b[a];for(f in c)if(c.hasOwnProperty(f)){var f=!1;break a}f=!0}f&&delete b[a]}}else b.hasOwnProperty(a)||(b[a]={}),b[a][c]=d;0===Object.keys(b).length&&b.constructor===Object?AiCookies.remove("aiBLOCKS"):AiCookies.set("aiBLOCKS",b,{expires:365,path:"/"});return b},ai_get_cookie=function(a,c){var d="",b=ai_load_cookie();b.hasOwnProperty(a)&&b[a].hasOwnProperty(c)&&
|
30 |
+
(d=b[a][c]);return d},ai_load_cookie=function(){var a=AiCookies.getJSON("aiBLOCKS");null==a&&(a={});return a};(function(a){if("function"===typeof define&&define.amd){define(a);var c=!0}"object"===typeof exports&&(module.exports=a(),c=!0);if(!c){var d=window.Cookies,b=window.Cookies=a();b.noConflict=function(){window.Cookies=d;return b}}})(function(){function a(){for(var d=0,b={};d<arguments.length;d++){var f=arguments[d],e;for(e in f)b[e]=f[e]}return b}function c(d){function b(){}function f(h,k,g){if("undefined"!==
|
31 |
+
typeof document){g=a({path:"/",sameSite:"Lax"},b.defaults,g);"number"===typeof g.expires&&(g.expires=new Date(1*new Date+864E5*g.expires));g.expires=g.expires?g.expires.toUTCString():"";try{var l=JSON.stringify(k);/^[\{\[]/.test(l)&&(k=l)}catch(p){}k=d.write?d.write(k,h):encodeURIComponent(String(k)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent);h=encodeURIComponent(String(h)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);
|
32 |
+
l="";for(var n in g)g[n]&&(l+="; "+n,!0!==g[n]&&(l+="="+g[n].split(";")[0]));return document.cookie=h+"="+k+l}}function e(h,k){if("undefined"!==typeof document){for(var g={},l=document.cookie?document.cookie.split("; "):[],n=0;n<l.length;n++){var p=l[n].split("="),m=p.slice(1).join("=");k||'"'!==m.charAt(0)||(m=m.slice(1,-1));try{var q=p[0].replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent);m=(d.read||d)(m,q)||m.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent);if(k)try{m=JSON.parse(m)}catch(r){}g[q]=m;
|
33 |
+
if(h===q)break}catch(r){}}return h?g[h]:g}}b.set=f;b.get=function(h){return e(h,!1)};b.getJSON=function(h){return e(h,!0)};b.remove=function(h,k){f(h,"",a(k,{expires:-1}))};b.defaults={};b.withConverter=c;return b}return c(function(){})});AiCookies=Cookies.noConflict();ai_check_block=function(a){if(null==a)return!0;var c=AiCookies.getJSON("aiBLOCKS");ai_debug_cookie_status="";null==c&&(c={});"undefined"!==typeof ai_delay_showing_pageviews&&(c.hasOwnProperty(a)||(c[a]={}),c[a].hasOwnProperty("d")||
|
34 |
+
(c[a].d=ai_delay_showing_pageviews));if(c.hasOwnProperty(a)){for(var d in c[a]){if("x"==d){var b="",f=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in f.dataset&&(b=f.dataset.aiHash);f="";c[a].hasOwnProperty("h")&&(f=c[a].h);var e=new Date;e=c[a][d]-Math.round(e.getTime()/1E3);if(0<e&&f==b)return ai_debug_cookie_status=a="closed for "+e+" s = "+Math.round(1E4*e/3600/24)/1E4+" days",!1;ai_set_cookie(a,"x","");c[a].hasOwnProperty("i")||c[a].hasOwnProperty("c")||ai_set_cookie(a,
|
35 |
+
"h","")}else if("d"==d){if(0!=c[a][d])return ai_debug_cookie_status=a="delayed for "+c[a][d]+" pageviews",!1}else if("i"==d){b="";f=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in f.dataset&&(b=f.dataset.aiHash);f="";c[a].hasOwnProperty("h")&&(f=c[a].h);if(0==c[a][d]&&f==b)return ai_debug_cookie_status=a="max impressions reached",!1;if(0>c[a][d]&&f==b){e=new Date;e=-c[a][d]-Math.round(e.getTime()/1E3);if(0<e)return ai_debug_cookie_status=a="max imp. reached ("+Math.round(1E4*
|
36 |
+
e/24/3600)/1E4+" days = "+e+" s)",!1;ai_set_cookie(a,"i","");c[a].hasOwnProperty("c")||c[a].hasOwnProperty("x")||ai_set_cookie(a,"h","")}}if("ipt"==d&&0==c[a][d]&&(e=new Date,b=Math.round(e.getTime()/1E3),e=c[a].it-b,0<e))return ai_debug_cookie_status=a="max imp. per time reached ("+Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1;if("c"==d){b="";f=document.querySelectorAll('span[data-ai-block="'+a+'"]')[0];"aiHash"in f.dataset&&(b=f.dataset.aiHash);f="";c[a].hasOwnProperty("h")&&(f=c[a].h);if(0==
|
37 |
+
c[a][d]&&f==b)return ai_debug_cookie_status=a="max clicks reached",!1;if(0>c[a][d]&&f==b){e=new Date;e=-c[a][d]-Math.round(e.getTime()/1E3);if(0<e)return ai_debug_cookie_status=a="max clicks reached ("+Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1;ai_set_cookie(a,"c","");c[a].hasOwnProperty("i")||c[a].hasOwnProperty("x")||ai_set_cookie(a,"h","")}}if("cpt"==d&&0==c[a][d]&&(e=new Date,b=Math.round(e.getTime()/1E3),e=c[a].ct-b,0<e))return ai_debug_cookie_status=a="max clicks per time reached ("+
|
38 |
+
Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1}if(c.hasOwnProperty("G")&&c.G.hasOwnProperty("cpt")&&0==c.G.cpt&&(e=new Date,b=Math.round(e.getTime()/1E3),e=c.G.ct-b,0<e))return ai_debug_cookie_status=a="max global clicks per time reached ("+Math.round(1E4*e/24/3600)/1E4+" days = "+e+" s)",!1}ai_debug_cookie_status="OK";return!0};ai_check_and_insert_block=function(a,c){if(null==a)return!0;var d=document.getElementsByClassName(c);if(d.length){d=d[0];var b=d.closest("."+ai_block_class_def),f=ai_check_block(a);
|
39 |
+
!f&&0!=parseInt(d.getAttribute("limits-fallback"))&&d.hasAttribute("data-fallback-code")&&(d.setAttribute("data-code",d.getAttribute("data-fallback-code")),null!=b&&b.hasAttribute("data-ai")&&d.hasAttribute("fallback-tracking")&&d.hasAttribute("fallback_level")&&b.setAttribute("data-ai-"+d.getAttribute("fallback_level"),d.getAttribute("fallback-tracking")),f=!0);d.removeAttribute("data-selector");if(f)ai_insert_code(d),b&&(f=b.querySelectorAll(".ai-debug-block"),b&&f.length&&(b.classList.remove("ai-list-block"),
|
40 |
+
b.classList.remove("ai-list-block-ip"),b.classList.remove("ai-list-block-filter"),b.style.visibility="",b.classList.contains("ai-remove-position")&&(b.style.position="")));else{f=d.closest("div[data-ai]");if(null!=f&&"undefined"!=typeof f.getAttribute("data-ai")){var e=JSON.parse(b64d(f.getAttribute("data-ai")));"undefined"!==typeof e&&e.constructor===Array&&(e[1]="",f.setAttribute("data-ai",b64e(JSON.stringify(e))))}f=b.querySelectorAll(".ai-debug-block");b&&f.length&&(b.classList.remove("ai-list-block"),
|
41 |
+
b.classList.remove("ai-list-block-ip"),b.classList.remove("ai-list-block-filter"),b.style.visibility="",b.classList.contains("ai-remove-position")&&(b.style.position=""))}d.classList.remove(c)}d=document.querySelectorAll("."+c+"-dbg");b=0;for(f=d.length;b<f;b++)e=d[b],e.querySelector(".ai-status").textContent=ai_debug_cookie_status,e.querySelector(".ai-cookie-data").textContent=ai_get_cookie_text(a),e.classList.remove(c+"-dbg")};ai_get_cookie_text=function(a){var c=AiCookies.getJSON("aiBLOCKS");null==
|
42 |
+
c&&(c={});var d="";c.hasOwnProperty("G")&&(d="G["+JSON.stringify(c.G).replace(/"/g,"").replace("{","").replace("}","")+"] ");var b="";c.hasOwnProperty(a)&&(b=JSON.stringify(c[a]).replace(/"/g,"").replace("{","").replace("}",""));return d+b}};
|
43 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,e,f){if(a==Array.prototype||a==Object.prototype)return a;a[e]=f.value;return a};
|
44 |
+
$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<a.length;++e){var f=a[e];if(f&&f.Math==Math)return f}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};
|
45 |
+
$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,e){var f=$jscomp.propertyToPolyfillSymbol[e];if(null==f)return a[e];f=a[f];return void 0!==f?f:a[e]};$jscomp.polyfill=function(a,e,f,p){e&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,e,f,p):$jscomp.polyfillUnisolated(a,e,f,p))};
|
46 |
+
$jscomp.polyfillUnisolated=function(a,e,f,p){f=$jscomp.global;a=a.split(".");for(p=0;p<a.length-1;p++){var u=a[p];if(!(u in f))return;f=f[u]}a=a[a.length-1];p=f[a];e=e(p);e!=p&&null!=e&&$jscomp.defineProperty(f,a,{configurable:!0,writable:!0,value:e})};
|
47 |
+
$jscomp.polyfillIsolated=function(a,e,f,p){var u=a.split(".");a=1===u.length;p=u[0];p=!a&&p in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var x=0;x<u.length-1;x++){var c=u[x];if(!(c in p))return;p=p[c]}u=u[u.length-1];f=$jscomp.IS_SYMBOL_NATIVE&&"es6"===f?p[u]:null;e=e(f);null!=e&&(a?$jscomp.defineProperty($jscomp.polyfills,u,{configurable:!0,writable:!0,value:e}):e!==f&&(void 0===$jscomp.propertyToPolyfillSymbol[u]&&(f=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[u]=$jscomp.IS_SYMBOL_NATIVE?
|
48 |
+
$jscomp.global.Symbol(u):$jscomp.POLYFILL_PREFIX+f+"$"+u),$jscomp.defineProperty(p,$jscomp.propertyToPolyfillSymbol[u],{configurable:!0,writable:!0,value:e})))};$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},e={};try{return e.__proto__=a,e.a}catch(f){}return!1};
|
49 |
+
$jscomp.setPrototypeOf=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,e){a.__proto__=e;if(a.__proto__!==e)throw new TypeError(a+" is not extensible");return a}:null;$jscomp.arrayIteratorImpl=function(a){var e=0;return function(){return e<a.length?{done:!1,value:a[e++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};
|
50 |
+
$jscomp.makeIterator=function(a){var e="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return e?e.call(a):$jscomp.arrayIterator(a)};$jscomp.generator={};$jscomp.generator.ensureIteratorResultIsObject_=function(a){if(!(a instanceof Object))throw new TypeError("Iterator result "+a+" is not an object");};
|
51 |
+
$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null};$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};
|
52 |
+
$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(a){this.yieldResult=a};$jscomp.generator.Context.prototype.throw_=function(a){this.abruptCompletion_={exception:a,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype["return"]=function(a){this.abruptCompletion_={"return":a};this.nextAddress=this.finallyAddress_};
|
53 |
+
$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(a){this.abruptCompletion_={jumpTo:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(a,e){this.nextAddress=e;return{value:a}};$jscomp.generator.Context.prototype.yieldAll=function(a,e){var f=$jscomp.makeIterator(a),p=f.next();$jscomp.generator.ensureIteratorResultIsObject_(p);if(p.done)this.yieldResult=p.value,this.nextAddress=e;else return this.yieldAllIterator_=f,this.yield(p.value,e)};
|
54 |
+
$jscomp.generator.Context.prototype.jumpTo=function(a){this.nextAddress=a};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(a,e){this.catchAddress_=a;void 0!=e&&(this.finallyAddress_=e)};$jscomp.generator.Context.prototype.setFinallyBlock=function(a){this.catchAddress_=0;this.finallyAddress_=a||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(a,e){this.nextAddress=a;this.catchAddress_=e||0};
|
55 |
+
$jscomp.generator.Context.prototype.enterCatchBlock=function(a){this.catchAddress_=a||0;a=this.abruptCompletion_.exception;this.abruptCompletion_=null;return a};$jscomp.generator.Context.prototype.enterFinallyBlock=function(a,e,f){f?this.finallyContexts_[f]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=a||0;this.finallyAddress_=e||0};
|
56 |
+
$jscomp.generator.Context.prototype.leaveFinallyBlock=function(a,e){var f=this.finallyContexts_.splice(e||0)[0];if(f=this.abruptCompletion_=this.abruptCompletion_||f){if(f.isException)return this.jumpToErrorHandler_();void 0!=f.jumpTo&&this.finallyAddress_<f.jumpTo?(this.nextAddress=f.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=a};$jscomp.generator.Context.prototype.forIn=function(a){return new $jscomp.generator.Context.PropertyIterator(a)};
|
57 |
+
$jscomp.generator.Context.PropertyIterator=function(a){this.object_=a;this.properties_=[];for(var e in a)this.properties_.push(e);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};
|
58 |
+
$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};
|
59 |
+
$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var e=this.context_.yieldAllIterator_;if(e)return this.yieldAllStep_("return"in e?e["return"]:function(f){return{value:f,done:!0}},a,this.context_["return"]);this.context_["return"](a);return this.nextStep_()};
|
60 |
+
$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};
|
61 |
+
$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,e,f){try{var p=a.call(this.context_.yieldAllIterator_,e);$jscomp.generator.ensureIteratorResultIsObject_(p);if(!p.done)return this.context_.stop_(),p;var u=p.value}catch(x){return this.context_.yieldAllIterator_=null,this.context_.throw_(x),this.nextStep_()}this.context_.yieldAllIterator_=null;f.call(this.context_,u);return this.nextStep_()};
|
62 |
+
$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(e){this.context_.yieldResult=void 0,this.context_.throw_(e)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a["return"],done:!0}}return{value:void 0,done:!0}};
|
63 |
+
$jscomp.generator.Generator_=function(a){this.next=function(e){return a.next_(e)};this["throw"]=function(e){return a.throw_(e)};this["return"]=function(e){return a.return_(e)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,e){var f=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(e));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(f,a.prototype);return f};
|
64 |
+
$jscomp.asyncExecutePromiseGenerator=function(a){function e(p){return a.next(p)}function f(p){return a["throw"](p)}return new Promise(function(p,u){function x(c){c.done?p(c.value):Promise.resolve(c.value).then(e,f).then(x,u)}x(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};
|
65 |
+
if("undefined"!==typeof ai_internal_tracking){var ai_tracking=function(){function a(c,q,r,m,k,b,d){c=c.replace("[EVENT]",q);c=c.replace("[BLOCK_NUMBER]",r);c=c.replace("[BLOCK_NAME]",m);c=c.replace("[BLOCK_COUNTER]",k);c=c.replace("[VERSION_NUMBER]",b);c=c.replace("[VERSION_NAME]",d);c=c.replace("[BLOCK_VERSION_NUMBER]",r+(0==b?"":" - "+b));c=c.replace("[BLOCK_VERSION_NAME]",m+(""==d?"":" - "+d));return c=c.replace("[WP_USERNAME]",ai_external_tracking_username)}function e(c,q,r,m,k,b,d){var h=a(ai_external_tracking_category,
|
66 |
+
c,q,r,m,k,b),g=a(ai_external_tracking_action,c,q,r,m,k,b),t=a(ai_external_tracking_label,c,q,r,m,k,b);if("function"!=typeof ai_external_tracking_event||0!=ai_external_tracking_event({event:c,block:q,block_name:r,block_counter:m,version:k,version_name:b},h,g,t,d))"function"==typeof window.ga?(c="send","string"==typeof ai_ga_tracker_name?c=ai_ga_tracker_name+"."+c:(q=ga.getAll(),0!=q.length&&(q=q[0].get("name"),"t0"!=q&&(c=q+"."+c))),ga(c,"event",{eventCategory:h,eventAction:g,eventLabel:t,nonInteraction:d})):
|
67 |
+
"function"==typeof window.gtag?gtag("event","impression",{event_category:h,event_action:g,event_label:t,non_interaction:d}):"function"==typeof window.__gaTracker?__gaTracker("send","event",{eventCategory:h,eventAction:g,eventLabel:t,nonInteraction:d}):"object"==typeof _gaq&&_gaq.push(["_trackEvent",h,g,t,void 0,d]),"object"==typeof _paq&&_paq.push(["trackEvent",h,g,t])}function f(c,q){var r=c[0],m=c[1];if(Number.isInteger(m))if("undefined"==typeof ai_check_data&&"undefined"==typeof ai_check_data_timeout)ai_check_data_timeout=
|
68 |
+
!0,setTimeout(function(){f(c,q)},2500);else{ai_cookie=ai_load_cookie();for(var k in ai_cookie)if(parseInt(r)==parseInt(k))for(var b in ai_cookie[k])if("c"==b){var d=ai_cookie[k][b];if(0<d)if(ai_set_cookie(k,"c",d-1),1==d){d=document.querySelector('span[data-ai-block="'+r+'"]').dataset.aiCfpTime;var h=new Date;h=Math.round(h.getTime()/1E3);var g=h+604800;ai_set_cookie(k,"c",-g);setTimeout(function(){document.querySelectorAll('span[data-ai-block="'+r+'"]').forEach(function(l,v){var n=l.closest("div[data-ai]");
|
69 |
+
n&&n.remove()})},50)}else ai_set_cookie(k,"c",d-1)}else"cpt"==b&&(d=ai_cookie[k][b],0<d?(ai_set_cookie(k,"cpt",d-1),1==d&&(d=document.querySelector('span[data-ai-block="'+r+'"]').dataset.aiCfpTime,h=new Date,h=Math.round(h.getTime()/1E3),g=ai_cookie[k].ct,ai_set_cookie(k,"x",g),setTimeout(function(){document.querySelectorAll('span[data-ai-block="'+r+'"]').forEach(function(l,v){var n=l.closest("div[data-ai]");n&&n.remove()})},75),"undefined"!=typeof d&&(g=h+86400*d,ai_set_cookie(r,"x",g),document.querySelectorAll("span.ai-cfp").forEach(function(l,
|
70 |
+
v){var n=l.dataset.aiBlock;setTimeout(function(){var y=l.closest("div[data-ai]");y&&y.remove()},50);ai_set_cookie(n,"x",g)})))):ai_check_data.hasOwnProperty(k)&&ai_check_data[k].hasOwnProperty("cpt")&&ai_check_data[k].hasOwnProperty("ct")?ai_cookie.hasOwnProperty(k)&&ai_cookie[k].hasOwnProperty("ct")&&(h=new Date,d=ai_cookie[k].ct-Math.round(h.getTime()/1E3),0>=d&&(h=Math.round(h.getTime()/1E3),ai_set_cookie(k,"cpt",ai_check_data[k].cpt-1),ai_set_cookie(k,"ct",Math.round(h+86400*ai_check_data[k].ct)))):
|
71 |
+
(ai_cookie.hasOwnProperty(k)&&ai_cookie[k].hasOwnProperty("cpt")&&ai_set_cookie(k,"cpt",""),ai_cookie.hasOwnProperty(k)&&ai_cookie[k].hasOwnProperty("ct")&&ai_set_cookie(k,"ct","")));ai_cookie.hasOwnProperty("G")&&ai_cookie.G.hasOwnProperty("cpt")&&(d=ai_cookie.G.cpt,0<d?(ai_set_cookie("G","cpt",d-1),1==d&&(d=document.querySelector('span[data-ai-block="'+r+'"]').dataset.aiCfpTime,h=new Date,h=Math.round(h.getTime()/1E3),g=ai_cookie.G.ct,ai_set_cookie(r,"x",g),setTimeout(function(){document.querySelectorAll('span[data-ai-block="'+
|
72 |
+
r+'"]').forEach(function(l,v){var n=l.closest("div[data-ai]");n&&n.remove()})},75),"undefined"!=typeof d&&(g=h+86400*d,ai_set_cookie(r,"x",g),document.querySelectorAll("span.ai-cfp").forEach(function(l,v){var n=l.dataset.aiBlock;setTimeout(function(){l.closest("div[data-ai]").remove()},50);ai_set_cookie(n,"x",g)})))):ai_check_data.hasOwnProperty("G")&&ai_check_data.G.hasOwnProperty("cpt")&&ai_check_data.G.hasOwnProperty("ct")?ai_cookie.hasOwnProperty("G")&&ai_cookie.G.hasOwnProperty("ct")&&(h=new Date,
|
73 |
+
d=ai_cookie.G.ct-Math.round(h.getTime()/1E3),0>=d&&(h=Math.round(h.getTime()/1E3),ai_set_cookie("G","cpt",ai_check_data.G.cpt-1),ai_set_cookie("G","ct",Math.round(h+86400*ai_check_data.G.ct)))):(ai_cookie.hasOwnProperty("G")&&ai_cookie.G.hasOwnProperty("cpt")&&ai_set_cookie("G","cpt",""),ai_cookie.hasOwnProperty("G")&&ai_cookie.G.hasOwnProperty("ct")&&ai_set_cookie("G","ct","")));if(ai_internal_tracking&&"undefined"===typeof ai_internal_tracking_no_clicks){k={action:"ai_ajax",ai_check:ai_data_id,
|
74 |
+
click:r,version:m,type:q};var t=[],z;for(z in k)b=encodeURIComponent(z),d=encodeURIComponent(k[z]),t.push(b+"="+d);t=t.join("&");(function(){var l,v;return $jscomp.asyncExecutePromiseGeneratorProgram(function(n){if(1==n.nextAddress)return n.yield(fetch(ai_ajax_url,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:t}),2);if(3!=n.nextAddress)return l=n.yieldResult,n.yield(l.text(),3);v=n.yieldResult;return n["return"](v)})})().then(function(l){l=l.trim();
|
75 |
+
""!=l&&(l=JSON.parse(l),"undefined"!=typeof l["#"]&&l["#"]==r&&(ai_cookie=ai_load_cookie(),l=Math.round((new Date).getTime()/1E3)+43200,ai_cookie.hasOwnProperty(r)&&ai_cookie[r].hasOwnProperty("x")||ai_set_cookie(r,"x",l),setTimeout(function(){document.querySelectorAll('span[data-ai-block="'+r+'"]').forEach(function(v,n){var y=v.closest("div[data-ai]");y&&y.remove()})},50)))})}if(ai_external_tracking&&"undefined"===typeof ai_external_tracking_no_clicks){var w=c[2],A=c[3];e("click",r,w,c[4],m,A,!1)}"function"==
|
76 |
+
typeof ai_click_action&&ai_click_action(r,w,m,A)}}function p(){ai_check_data={};if("undefined"==typeof ai_iframe){ai_cookie=ai_load_cookie();document.querySelectorAll(".ai-check-block").forEach(function(m,k){var b=m.dataset.aiBlock,d=m.dataset.aiDelayPv,h=m.dataset.aiEveryPv,g=m.dataset.aiHash,t=m.dataset.aiMaxImp,z=m.dataset.aiLimitImpPerTime,w=m.dataset.aiLimitImpTime,A=m.dataset.aiMaxClicks,l=m.dataset.aiLimitClicksPerTime,v=m.dataset.aiLimitClicksTime,n=m.dataset.aiGlobalLimitClicksPerTime,y=
|
77 |
+
m.dataset.aiGlobalLimitClicksTime;if("undefined"!=typeof d&&0<d){ai_check_data.hasOwnProperty(b)||(ai_check_data[b]={});ai_check_data[b].d=d;var C="";ai_cookie.hasOwnProperty(b)&&ai_cookie[b].hasOwnProperty("d")&&(C=ai_cookie[b].d);""===C&&ai_set_cookie(b,"d",d-1)}"undefined"!=typeof h&&2<=h&&(ai_check_data.hasOwnProperty(b)||(ai_check_data[b]={}),"undefined"!==typeof ai_delay_showing_pageviews||ai_cookie.hasOwnProperty(b)&&ai_cookie[b].hasOwnProperty("d")||(ai_cookie.hasOwnProperty(b)||(ai_cookie[b]=
|
78 |
+
{}),ai_cookie[b].d=0),ai_check_data[b].e=h);if("undefined"!=typeof t&&0<t){if(ai_check_data.hasOwnProperty(b)||(ai_check_data[b]={}),ai_check_data[b].i=t,ai_check_data[b].h=g,h=d="",ai_cookie.hasOwnProperty(b)&&(ai_cookie[b].hasOwnProperty("i")&&(h=ai_cookie[b].i),ai_cookie[b].hasOwnProperty("h")&&(d=ai_cookie[b].h)),""===h||d!=g)ai_set_cookie(b,"i",t),ai_set_cookie(b,"h",g)}else ai_cookie.hasOwnProperty(b)&&ai_cookie[b].hasOwnProperty("i")&&(ai_set_cookie(b,"i",""),ai_cookie[b].hasOwnProperty("c")||
|
79 |
+
ai_cookie[b].hasOwnProperty("x")||ai_set_cookie(b,"h",""));if("undefined"!=typeof z&&0<z&&"undefined"!=typeof w&&0<w){ai_check_data.hasOwnProperty(b)||(ai_check_data[b]={});ai_check_data[b].ipt=z;ai_check_data[b].it=w;t=d="";ai_cookie.hasOwnProperty(b)&&(ai_cookie[b].hasOwnProperty("ipt")&&(d=ai_cookie[b].ipt),ai_cookie[b].hasOwnProperty("it")&&(t=ai_cookie[b].it));if(""===d||""===t)ai_set_cookie(b,"ipt",z),d=new Date,d=Math.round(d.getTime()/1E3),ai_set_cookie(b,"it",Math.round(d+86400*w));0<t&&
|
80 |
+
(d=new Date,d=Math.round(d.getTime()/1E3),t<=d&&(ai_set_cookie(b,"ipt",z),ai_set_cookie(b,"it",Math.round(d+86400*w))))}else ai_cookie.hasOwnProperty(b)&&(ai_cookie[b].hasOwnProperty("ipt")&&ai_set_cookie(b,"ipt",""),ai_cookie[b].hasOwnProperty("it")&&ai_set_cookie(b,"it",""));if("undefined"!=typeof A&&0<A){if(ai_check_data.hasOwnProperty(b)||(ai_check_data[b]={}),ai_check_data[b].c=A,ai_check_data[b].h=g,z=d="",ai_cookie.hasOwnProperty(b)&&(ai_cookie[b].hasOwnProperty("c")&&(z=ai_cookie[b].c),ai_cookie[b].hasOwnProperty("h")&&
|
81 |
+
(d=ai_cookie[b].h)),""===z||d!=g)ai_set_cookie(b,"c",A),ai_set_cookie(b,"h",g)}else ai_cookie.hasOwnProperty(b)&&ai_cookie[b].hasOwnProperty("c")&&(ai_set_cookie(b,"c",""),ai_cookie[b].hasOwnProperty("i")||ai_cookie[b].hasOwnProperty("x")||ai_set_cookie(b,"h",""));if("undefined"!=typeof l&&0<l&&"undefined"!=typeof v&&0<v){ai_check_data.hasOwnProperty(b)||(ai_check_data[b]={});ai_check_data[b].cpt=l;ai_check_data[b].ct=v;g=A="";ai_cookie.hasOwnProperty(b)&&(ai_cookie[b].hasOwnProperty("cpt")&&(A=ai_cookie[b].cpt),
|
82 |
+
ai_cookie[b].hasOwnProperty("ct")&&(g=ai_cookie[b].ct));if(""===A||""===g)ai_set_cookie(b,"cpt",l),d=new Date,d=Math.round(d.getTime()/1E3),ai_set_cookie(b,"ct",Math.round(d+86400*v));0<g&&(d=new Date,d=Math.round(d.getTime()/1E3),g<=d&&(ai_set_cookie(b,"cpt",l),ai_set_cookie(b,"ct",Math.round(d+86400*v))))}else ai_cookie.hasOwnProperty(b)&&(ai_cookie[b].hasOwnProperty("cpt")&&ai_set_cookie(b,"cpt",""),ai_cookie[b].hasOwnProperty("ct")&&ai_set_cookie(b,"ct",""));if("undefined"!=typeof n&&0<n&&"undefined"!=
|
83 |
+
typeof y&&0<y){ai_check_data.hasOwnProperty("G")||(ai_check_data.G={});ai_check_data.G.cpt=n;ai_check_data.G.ct=y;b=l="";ai_cookie.hasOwnProperty("G")&&(ai_cookie.G.hasOwnProperty("cpt")&&(l=ai_cookie.G.cpt),ai_cookie.G.hasOwnProperty("ct")&&(b=ai_cookie.G.ct));if(""===l||""===b)ai_set_cookie("G","cpt",n),d=new Date,d=Math.round(d.getTime()/1E3),ai_set_cookie("G","ct",Math.round(d+86400*y));0<b&&(d=new Date,d=Math.round(d.getTime()/1E3),b<=d&&(ai_set_cookie("G","cpt",n),ai_set_cookie("G","ct",Math.round(d+
|
84 |
+
86400*y))))}else ai_cookie.hasOwnProperty("G")&&(ai_cookie.G.hasOwnProperty("cpt")&&ai_set_cookie("G","cpt",""),ai_cookie.G.hasOwnProperty("ct")&&ai_set_cookie("G","ct",""))});document.querySelectorAll(".ai-check-block").forEach(function(m,k){m.classList.remove("ai-check-block")});for(var c in ai_cookie)for(var q in ai_cookie[c])if("d"==q){var r=ai_cookie[c][q];0<r?ai_set_cookie(c,"d",r-1):ai_check_data.hasOwnProperty(c)&&ai_check_data[c].hasOwnProperty("e")?ai_set_cookie(c,"d",ai_check_data[c].e-
|
85 |
+
1):ai_check_data.hasOwnProperty(c)&&ai_check_data[c].hasOwnProperty("d")||ai_set_cookie(c,"d","")}}}function u(){Array.prototype.forEach.call(document.querySelectorAll("[data-ai]"),function(h){for(var g="",t=1;9>=t;t++)if(h.hasAttribute("data-ai-"+t))g=h.getAttribute("data-ai-"+t);else break;""!=g&&h.setAttribute("data-ai",g)});if(ai_track_pageviews){var c=document.documentElement.clientWidth,q=window.innerWidth,r=c<q?q:c,m=0;ai_viewport_widths.forEach(function(h,g){if(r>=h)return m=ai_viewport_indexes[g],
|
86 |
+
!1});c=document.querySelector(b64d("Ym9keQ==")).getAttribute(ai_adb_attribute);if("string"===typeof c)var k=c==b64d("bWFzaw==");"string"===typeof c&&"boolean"===typeof k&&k&&(ai_external_tracking&&e("ad blocking",0,ai_viewport_names[m-1],0,0,"",!0),m|=128);x=[0,m]}p();ai_process_impressions();if(0!=x.length&&ai_internal_tracking){k={action:"ai_ajax",ai_check:ai_data_id};var b=[],d;for(d in k)c=encodeURIComponent(d),q=encodeURIComponent(k[d]),b.push(c+"="+q);c=encodeURIComponent("views[]");q=encodeURIComponent(0);
|
87 |
+
b.push(c+"="+q);c=encodeURIComponent("versions[]");q=encodeURIComponent(m);b.push(c+"="+q);b=b.join("&");(function(){var h,g;return $jscomp.asyncExecutePromiseGeneratorProgram(function(t){if(1==t.nextAddress)return t.yield(fetch(ai_ajax_url,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:b}),2);if(3!=t.nextAddress)return h=t.yieldResult,t.yield(h.text(),3);g=t.yieldResult;return t["return"](g)})})().then(function(h){})}ai_tracking_finished=!0}ai_debug_tracking&&
|
88 |
+
(ai_ajax_url+="?ai-debug-tracking=1");Number.isInteger=Number.isInteger||function(c){return"number"===typeof c&&isFinite(c)&&Math.floor(c)===c};ai_install_standard_click_trackers=function(c){"undefined"==typeof c&&(c=document.querySelector("body"));c=c.querySelectorAll("div.ai-track[data-ai]");var q=[];c.forEach(function(m,k){if(m.offsetWidth||m.offsetHeight||m.getClientRects().length)m.querySelectorAll("div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed").length||
|
89 |
+
q.push(m)});var r=[];q.forEach(function(m,k){m.classList.remove("ai-track");r.push.apply(r,m.querySelectorAll("a"))});c=r;0!=c.length&&(ai_advanced_click_detection?c.forEach(function(m,k){m.addEventListener("click",function(){for(var b=m.closest("div[data-ai]");null!==b&&b.hasAttribute("data-ai");){var d=JSON.parse(b64d(b.getAttribute("data-ai")));"undefined"!==typeof d&&d.constructor===Array&&Number.isInteger(d[1])&&!b.classList.contains("clicked")&&(b.classList.add("clicked"),f(d,"a.click"));b=
|
90 |
+
b.parentElement.closest("div[data-ai]")}})}):c.forEach(function(m,k){m.addEventListener("click",function(){for(var b=m.closest("div[data-ai]");null!==b&&b.hasAttribute("data-ai");){var d=JSON.parse(b64d(b.getAttribute("data-ai")));"undefined"!==typeof d&&d.constructor===Array&&Number.isInteger(d[1])&&(f(d,"a.click"),clicked=!0);b=b.parentElement.closest("div[data-ai]")}})}))};ai_install_click_trackers=function(c){"undefined"==typeof c&&(c=document.querySelector("body"));if(ai_advanced_click_detection){var q=
|
91 |
+
c.querySelectorAll("div.ai-track[data-ai], div.ai-rotate[data-info] div.ai-track[data-ai]"),r=[];q.forEach(function(k,b){(k.offsetWidth||k.offsetHeight||k.getClientRects().length)&&r.push(k)});c.hasAttribute("data-ai")&&c.classList.contains("ai-track")&&(c.offsetWidth||c.offsetHeight||c.getClientRects().length)&&r.push(c);var m=[];r.forEach(function(k,b){k.querySelectorAll("div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed").length||m.push(k)});q=m;0!=q.length&&q.forEach(function(k,
|
92 |
+
b){installIframeTracker({blurCallback:function(){if(null!=this.ai_data&&null!=wrapper&&!wrapper.classList.contains("clicked")){wrapper.classList.add("clicked");f(this.ai_data,"blurCallback");for(var d=wrapper.querySelector("div[data-ai]");null!=d&&(d.offsetWidth||d.offsetHeight||d.getClientRects().length)&&d.hasAttribute("data-ai");){var h=JSON.parse(b64d(d.getAttribute("data-ai")));"undefined"!==typeof h&&h.constructor===Array&&Number.isInteger(h[1])&&f(h,"blurCallback INNER");d=d.querySelector("div[data-ai]")}}},
|
93 |
+
overCallback:function(d){d=d.closest("div[data-ai]");if(d.hasAttribute("data-ai")){var h=JSON.parse(b64d(d.getAttribute("data-ai")));"undefined"!==typeof h&&h.constructor===Array&&Number.isInteger(h[1])?(wrapper=d,this.ai_data=h):(null!=wrapper&&wrapper.classList.remove("clicked"),this.ai_data=wrapper=null)}},outCallback:function(d){null!=wrapper&&wrapper.classList.remove("clicked");this.ai_data=wrapper=null},focusCallback:function(d){if(null!=this.ai_data&&null!=wrapper&&!wrapper.classList.contains("clicked"))for(wrapper.classList.add("clicked"),
|
94 |
+
f(this.ai_data,"focusCallback"),d=wrapper.querySelector("div[data-ai]");null!=d&&(d.offsetWidth||d.offsetHeight||d.getClientRects().length)&&d.hasAttribute("data-ai");){var h=JSON.parse(b64d(d.getAttribute("data-ai")));"undefined"!==typeof h&&h.constructor===Array&&Number.isInteger(h[1])&&f(h,"focusCallback INNER");d=d.querySelector("div[data-ai]")}},wrapper:null,ai_data:null,block:null,version:null},k)})}ai_install_standard_click_trackers(c)};var x=[];ai_process_impressions=function(c){"undefined"==
|
95 |
+
typeof c&&(c=document.querySelector("body"));var q=[],r=[],m=[],k=[],b=[];0!=x.length&&(q.push(x[0]),r.push(x[1]),m.push("Pageviews"),b.push(0),k.push(""));var d=c.querySelectorAll("div.ai-track[data-ai], div.ai-rotate[data-info] div.ai-track[data-ai]"),h=[];d.forEach(function(l,v){(l.offsetWidth||l.offsetHeight||l.getClientRects().length)&&h.push(l)});null!==c&&c.hasAttribute("data-ai")&&c.classList.contains("ai-track")&&(c.offsetWidth||c.offsetHeight||c.getClientRects().length)&&h.push(c);d=h;0!=
|
96 |
+
d.length&&d.forEach(function(l,v){if(l.hasAttribute("data-ai")){var n=JSON.parse(b64d(l.getAttribute("data-ai")));if("undefined"!==typeof n&&n.constructor===Array){var y=0,C=l.querySelectorAll("div.ai-rotate[data-info]");1==C.length&&(y=JSON.parse(b64d(C[0].dataset.info))[1]);if(Number.isInteger(n[0])&&0!=n[0]&&Number.isInteger(n[1])){C=0;var F=l.classList.contains("ai-no-tracking"),B=document.querySelector(b64d("Ym9keQ==")).getAttribute(ai_adb_attribute);if("string"===typeof B)var D=B==b64d("bWFzaw==");
|
97 |
+
if("string"===typeof B&&"boolean"===typeof D){var E=l.offsetHeight;B=l.querySelectorAll(".ai-attributes");B.length&&B.forEach(function(G,H){E>=l.offsetHeight&&(E-=l.offsetHeight)});B=l.querySelectorAll(".ai-code");E=0;B.length&&B.forEach(function(G,H){E+=G.offsetHeight});D&&0===E&&(C=128)}0!=l.querySelectorAll("div.ai-lazy, div.ai-manual, div.ai-list-manual, div.ai-manual-auto, div.ai-delayed").length&&(F=!0);if(!F)if(0==y)q.push(n[0]),r.push(n[1]|C),m.push(n[2]),k.push(n[3]),b.push(n[4]);else for(D=
|
98 |
+
1;D<=y;D++)q.push(n[0]),r.push(D|C),m.push(n[2]),k.push(n[3]),b.push(n[4])}}}});ai_cookie=ai_load_cookie();for(var g in ai_cookie)if(q.includes(parseInt(g)))for(var t in ai_cookie[g])"i"==t?(c=ai_cookie[g][t],0<c&&(1==c?(c=new Date,c=Math.round(c.getTime()/1E3)+604800,ai_set_cookie(g,"i",-c)):ai_set_cookie(g,"i",c-1))):"ipt"==t&&(c=ai_cookie[g][t],0<c?ai_set_cookie(g,"ipt",c-1):ai_check_data.hasOwnProperty(g)&&ai_check_data[g].hasOwnProperty("ipt")&&ai_check_data[g].hasOwnProperty("it")?ai_cookie.hasOwnProperty(g)&&
|
99 |
+
ai_cookie[g].hasOwnProperty("it")&&(c=new Date,0>=ai_cookie[g].it-Math.round(c.getTime()/1E3)&&(c=Math.round(c.getTime()/1E3),ai_set_cookie(g,"ipt",ai_check_data[g].ipt),ai_set_cookie(g,"it",Math.round(c+86400*ai_check_data[g].it)))):(ai_cookie.hasOwnProperty(g)&&ai_cookie[g].hasOwnProperty("ipt")&&ai_set_cookie(g,"ipt",""),ai_cookie.hasOwnProperty(g)&&ai_cookie[g].hasOwnProperty("it")&&ai_set_cookie(g,"it","")));if(q.length){if(ai_internal_tracking&&"undefined"===typeof ai_internal_tracking_no_impressions){x=
|
100 |
+
[];g={action:"ai_ajax",ai_check:ai_data_id};var z=[],w;for(w in g)t=encodeURIComponent(w),c=encodeURIComponent(g[w]),z.push(t+"="+c);for(var A in q)t=encodeURIComponent("views[]"),c=encodeURIComponent(q[A]),z.push(t+"="+c);for(A in r)t=encodeURIComponent("versions[]"),c=encodeURIComponent(r[A]),z.push(t+"="+c);z=z.join("&");(function(){var l,v;return $jscomp.asyncExecutePromiseGeneratorProgram(function(n){if(1==n.nextAddress)return n.yield(fetch(ai_ajax_url,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},
|
101 |
+
body:z}),2);if(3!=n.nextAddress)return l=n.yieldResult,n.yield(l.text(),3);v=n.yieldResult;return n["return"](v)})})().then(function(l){l=l.trim();if(""!=l&&(l=JSON.parse(l),"undefined"!=typeof l["#"])){ai_cookie=ai_load_cookie();var v=Math.round((new Date).getTime()/1E3)+43200,n=[],y;for(y in l["#"])ai_cookie.hasOwnProperty(l["#"][y])&&ai_cookie[l["#"][y]].hasOwnProperty("x")||ai_set_cookie(l["#"][y],"x",v);setTimeout(function(){for(A=0;A<n.length;++A)document.querySelectorAll('span[data-ai-block="'+
|
102 |
+
n[A]+'"]').forEach(function(C,F){var B=C.closest("div[data-ai]");B&&B.remove()})},50)}})}if(ai_external_tracking&&"undefined"===typeof ai_external_tracking_no_impressions)for(w=0;w<q.length;w++)0!=q[w]&&e("impression",q[w],m[w],b[w],r[w],k[w],!0)}};window.addEventListener("load",function(c){"undefined"==typeof ai_delay_tracking&&(ai_delay_tracking=0);setTimeout(u,ai_delay_tracking+1400);setTimeout(ai_install_click_trackers,ai_delay_tracking+1500)})},ai_init_IframeTracker=function(){ai_iframeTracker.init()},
|
103 |
+
ai_ready=function(a){"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?a():document.addEventListener("DOMContentLoaded",a)},ai_addEventListener=function(a,e,f,p){if(p){var u=function(x){x.target&&x.target.matches(p)&&f(x)};a.addEventListener(e,u);return u}a.addEventListener(e,f);return f},matchRuleShort=function(a,e){return(new RegExp("^"+e.split("*").map(function(f){return f.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")}).join(".*")+"$")).test(a)};
|
104 |
+
installIframeTracker=function(a,e){"function"==typeof a&&(a={blurCallback:a});if(null===a||!1===a)ai_iframeTracker.untrack(e);else if("object"==typeof a)ai_iframeTracker.track(e,a);else throw Error("Wrong handler type (must be an object, or null|false to untrack)");return this};var ai_mouseoverHander=function(a,e){e.data={handler:a};ai_iframeTracker.mouseoverListener(e)},ai_mouseoutHander=function(a,e){e.data={handler:a};ai_iframeTracker.mouseoutListener(e)};ai_iframeTracker={focusRetriever:null,
|
105 |
+
focusRetrieved:!1,handlersList:[],isIE8AndOlder:!1,init:function(){try{9>navigator.userAgent.match(RegExp("(msie) ([\\w.]+)","i"))[2]&&(this.isIE8AndOlder=!0)}catch(e){}window.focus();window.addEventListener("blur",function(e){ai_iframeTracker.windowLoseFocus(e)});var a=document.createElement("div");a.style="position:fixed; top:0; left:0; overflow:hidden;";a.innerHTML='<input style="position:absolute; left:-300px;" type="text" value="" id="focus_retriever" readonly="true" /><label for="focus_retriever"> </label>';
|
106 |
+
document.querySelector("body").append(a);this.focusRetriever=document.querySelector("#focus_retriever");this.focusRetrieved=!1;if(this.isIE8AndOlder){this.focusRetriever.blur(function(e){e.stopPropagation();e.preventDefault();ai_iframeTracker.windowLoseFocus(e)});document.querySelector("body").addEventListener("click",function(e){window.focus()});document.querySelector("form").addEventListener("click",function(e){e.stopPropagation()});try{ai_addEventListener(document.querySelector("body"),"click",
|
107 |
+
function(e){e.stopPropagation()},"form")}catch(e){console.log("[iframeTracker] error (exception: "+e.message+")")}}},track:function(a,e){e.target=a;ai_iframeTracker.handlersList.push(e);a.addEventListener("mouseover",ai_mouseoverHander.bind(event,e),!1);a.addEventListener("mouseout",ai_mouseoutHander.bind(event,e),!1)},untrack:function(a){if("function"!=typeof Array.prototype.filter)console.log("Your browser doesn't support Array filter, untrack disabled");else{a.forEach(function(u,x){u.removeEventListener("mouseover",
|
108 |
+
ai_mouseoverHander,!1);u.removeEventListener("mouseout",ai_mouseoutHander,!1)});var e=function(u){return null===u?!1:!0},f;for(f in this.handlersList){for(var p in this.handlersList[f].target)-1!==$.inArray(this.handlersList[f].target[p],a)&&(this.handlersList[f].target[p]=null);this.handlersList[f].target=this.handlersList[f].target.filter(e);0===this.handlersList[f].target.length&&(this.handlersList[f]=null)}this.handlersList=this.handlersList.filter(e)}},mouseoverListener:function(a){a.data.handler.over=
|
109 |
+
!0;ai_iframeTracker.retrieveFocus();try{a.data.handler.overCallback(a.data.handler.target,a)}catch(e){}},mouseoutListener:function(a){a.data.handler.over=!1;ai_iframeTracker.retrieveFocus();try{a.data.handler.outCallback(a.data.handler.target,a)}catch(e){}},retrieveFocus:function(){if(document.activeElement&&"IFRAME"===document.activeElement.tagName){var a=!0;if(document.activeElement.hasAttribute("id")&&"undefined"!==typeof ai_ignore_iframe_ids&&ai_ignore_iframe_ids.constructor===Array){var e=document.activeElement.id;
|
110 |
+
ai_ignore_iframe_ids.forEach(function(p){matchRuleShort(e,p)&&(a=!1)})}if(a&&document.activeElement.hasAttribute("class")&&"undefined"!==typeof ai_ignore_iframe_classes&&ai_ignore_iframe_classes.constructor===Array){var f=document.activeElement.className;ai_ignore_iframe_classes.forEach(function(p){matchRuleShort(f,p)&&(a=!1)})}a&&(ai_iframeTracker.focusRetriever.focus(),ai_iframeTracker.focusRetrieved=!0)}},windowLoseFocus:function(a){for(var e in this.handlersList)if(!0===this.handlersList[e].over)try{this.handlersList[e].blurCallback(a)}catch(f){}}};
|
111 |
+
ai_ready(ai_init_IframeTracker);ai_tracking_finished=!1;ai_ready(ai_tracking)};var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
|
112 |
+
$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,d){if(a==Array.prototype||a==Object.prototype)return a;a[b]=d.value;return a};
|
113 |
+
$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var d=a[b];if(d&&d.Math==Math)return d}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};
|
114 |
+
$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var d=$jscomp.propertyToPolyfillSymbol[b];if(null==d)return a[b];d=a[d];return void 0!==d?d:a[b]};$jscomp.polyfill=function(a,b,d,c){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,d,c):$jscomp.polyfillUnisolated(a,b,d,c))};
|
115 |
+
$jscomp.polyfillUnisolated=function(a,b,d,c){d=$jscomp.global;a=a.split(".");for(c=0;c<a.length-1;c++){var e=a[c];if(!(e in d))return;d=d[e]}a=a[a.length-1];c=d[a];b=b(c);b!=c&&null!=b&&$jscomp.defineProperty(d,a,{configurable:!0,writable:!0,value:b})};
|
116 |
+
$jscomp.polyfillIsolated=function(a,b,d,c){var e=a.split(".");a=1===e.length;c=e[0];c=!a&&c in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<e.length-1;f++){var g=e[f];if(!(g in c))return;c=c[g]}e=e[e.length-1];d=$jscomp.IS_SYMBOL_NATIVE&&"es6"===d?c[e]:null;b=b(d);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,e,{configurable:!0,writable:!0,value:b}):b!==d&&(void 0===$jscomp.propertyToPolyfillSymbol[e]&&(d=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?
|
117 |
+
$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+d+"$"+e),$jscomp.defineProperty(c,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(d){}return!1};
|
118 |
+
$jscomp.setPrototypeOf=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null;$jscomp.generator={};$jscomp.generator.ensureIteratorResultIsObject_=function(a){if(!(a instanceof Object))throw new TypeError("Iterator result "+a+" is not an object");};
|
119 |
+
$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null};$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};
|
120 |
+
$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(a){this.yieldResult=a};$jscomp.generator.Context.prototype.throw_=function(a){this.abruptCompletion_={exception:a,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype["return"]=function(a){this.abruptCompletion_={"return":a};this.nextAddress=this.finallyAddress_};
|
121 |
+
$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(a){this.abruptCompletion_={jumpTo:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(a,b){this.nextAddress=b;return{value:a}};$jscomp.generator.Context.prototype.yieldAll=function(a,b){var d=$jscomp.makeIterator(a),c=d.next();$jscomp.generator.ensureIteratorResultIsObject_(c);if(c.done)this.yieldResult=c.value,this.nextAddress=b;else return this.yieldAllIterator_=d,this.yield(c.value,b)};
|
122 |
+
$jscomp.generator.Context.prototype.jumpTo=function(a){this.nextAddress=a};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(a,b){this.catchAddress_=a;void 0!=b&&(this.finallyAddress_=b)};$jscomp.generator.Context.prototype.setFinallyBlock=function(a){this.catchAddress_=0;this.finallyAddress_=a||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(a,b){this.nextAddress=a;this.catchAddress_=b||0};
|
123 |
+
$jscomp.generator.Context.prototype.enterCatchBlock=function(a){this.catchAddress_=a||0;a=this.abruptCompletion_.exception;this.abruptCompletion_=null;return a};$jscomp.generator.Context.prototype.enterFinallyBlock=function(a,b,d){d?this.finallyContexts_[d]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=a||0;this.finallyAddress_=b||0};
|
124 |
+
$jscomp.generator.Context.prototype.leaveFinallyBlock=function(a,b){var d=this.finallyContexts_.splice(b||0)[0];if(d=this.abruptCompletion_=this.abruptCompletion_||d){if(d.isException)return this.jumpToErrorHandler_();void 0!=d.jumpTo&&this.finallyAddress_<d.jumpTo?(this.nextAddress=d.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=a};$jscomp.generator.Context.prototype.forIn=function(a){return new $jscomp.generator.Context.PropertyIterator(a)};
|
125 |
+
$jscomp.generator.Context.PropertyIterator=function(a){this.object_=a;this.properties_=[];for(var b in a)this.properties_.push(b);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};
|
126 |
+
$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};
|
127 |
+
$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_("return"in b?b["return"]:function(d){return{value:d,done:!0}},a,this.context_["return"]);this.context_["return"](a);return this.nextStep_()};
|
128 |
+
$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};
|
129 |
+
$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,d){try{var c=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(c);if(!c.done)return this.context_.stop_(),c;var e=c.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;d.call(this.context_,e);return this.nextStep_()};
|
130 |
+
$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a["return"],done:!0}}return{value:void 0,done:!0}};
|
131 |
+
$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this["throw"]=function(b){return a.throw_(b)};this["return"]=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){var d=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(d,a.prototype);return d};
|
132 |
+
$jscomp.asyncExecutePromiseGenerator=function(a){function b(c){return a.next(c)}function d(c){return a["throw"](c)}return new Promise(function(c,e){function f(g){g.done?c(g.value):Promise.resolve(g.value).then(b,d).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};
|
133 |
+
if("undefined"!==typeof ai_adsense_ad_names){var getAllUrlParams=function(a){var b=a?a.split("?")[1]:window.location.search.slice(1);a={};if(b){b=b.split("#")[0];b=b.split("&");for(var d=0;d<b.length;d++){var c=b[d].split("="),e=void 0,f=c[0].replace(/\[\d*\]/,function(g){e=g.slice(1,-1);return""});c="undefined"===typeof c[1]?"":c[1];f=f.toLowerCase();c=c.toLowerCase();a[f]?("string"===typeof a[f]&&(a[f]=[a[f]]),"undefined"===typeof e?a[f].push(c):a[f][e]=c):a[f]=c}}return a},ai_ready=function(a){"complete"===
|
134 |
+
document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?a():document.addEventListener("DOMContentLoaded",a)},ai_load_adsense_ad_units=function(){var a={action:"ai_ajax",ai_check:ai_nonce,"adsense-ad-units[ai]":1},b=[],d;for(d in a){var c=encodeURIComponent(d),e=encodeURIComponent(a[d]);b.push(c+"="+e)}b=b.join("&");(function(){var f,g;return $jscomp.asyncExecutePromiseGeneratorProgram(function(h){if(1==h.nextAddress)return h.yield(fetch(ai_ajax_url,{method:"POST",
|
135 |
+
headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:b}),2);if(3!=h.nextAddress)return f=h.yieldResult,h.yield(f.text(),3);g=h.yieldResult;return h["return"](g)})})().then(function(f){if(""!=f)try{ai_adsense_ad_names=JSON.parse(f)}catch(g){}})["catch"](function(f){})},ai_process_adsense_ad=function(a){var b=a.getAttribute("width"),d=a.getAttribute("height"),c=getAllUrlParams(a.getAttribute("src"));if("undefined"!==typeof c.client){var e=c.client.replace("ca-",""),f=c.slotname;
|
136 |
+
c=c.ifi;var g="ai-debug-ad-overlay",h="";"undefined"!==typeof f?(h="","undefined"!==typeof ai_adsense_ad_names.publisher_id&&ai_adsense_ad_names.publisher_id==e&&"undefined"!==typeof ai_adsense_ad_names[f]&&(h='<div class="ai-info ai-info-2">'+ai_adsense_ad_names[f]+"</div>"),h='<div class="ai-info ai-info-1">'+f+"</div>"+h):0!=a.closest("div.google-auto-placed").length?(g+=" ai-auto-ads",h='<div class="ai-info ai-info-1">Auto ads</div>'):g+=" ai-no-slot";e='<div class="'+g+'"></div>';a.insertAdjacentHTML("afterend",
|
137 |
+
'<div class="ai-debug-ad-info"><div class="ai-info ai-info-1">AdSense #'+c+'</div><div class="ai-info ai-info-2">'+b+"x"+d+"</div>"+h+"</div>");ai_preview_window||a.insertAdjacentHTML("afterend",e)}};ai_ready(ai_load_adsense_ad_units);if(!ai_preview_window){var targetNode=document.querySelector("body"),config={attributes:!1,childList:!0,subtree:!0},ai_process_adsense_callback=function(a,b){for(var d=$jscomp.makeIterator(a),c=d.next();!c.done;c=d.next())c=c.value,"childList"===c.type&&c.addedNodes.length&&
|
138 |
+
"IFRAME"==c.addedNodes[0].tagName&&null!=c.addedNodes[0].getAttribute("width")&&null!=c.addedNodes[0].getAttribute("height")&&c.addedNodes[0].closest(".adsbygoogle")&&ai_process_adsense_ad(c.addedNodes[0])},observer=new MutationObserver(ai_process_adsense_callback);observer.observe(targetNode,config)}};
|
139 |
+
"undefined"!==typeof ai_adsense_ad_names&&window.addEventListener("load",function(b){setTimeout(function(){document.querySelectorAll(".google-auto-placed > ins").forEach(function(a,c){a.insertAdjacentHTML("afterbegin",'<section class="ai-debug-bar ai-debug-adsense ai-adsense-auto-ads">'+ai_front.automatically_placed+"</section>")})},150)});
|
140 |
+
function ai_check_close_buttons(){function d(a){var b=a.querySelector(".ai-close-button.ai-close-unprocessed");if(null!=b){b.addEventListener("click",function(e){ai_close_block(b)});0!==a.offsetHeight?(null==a.querySelector(".ai-parallax")&&(a.style.width="",a.classList.add("ai-close-fit")),ai_fade_in(a.querySelector(".ai-close-button"),50)):(b=a,setTimeout(function(){0!==b.offsetHeight&&(null==b.querySelector(".ai-parallax")&&(b.style.width="",b.classList.add("ai-close-fit")),ai_fade_in(b.querySelector(".ai-close-button"),
|
141 |
+
50))},4E3));if("undefined"===typeof ai_preview){var c=b;a=c.dataset.aiCloseTimeout;"undefined"!=typeof a&&0<a&&setTimeout(function(){ai_close_block(c)},1E3*(2<a?a-2:0)+1)}b.classList.remove("ai-close-unprocessed")}}ai_close_block=function(a){var b=a.closest(".ai-close"),c=a.dataset.aiBlock;if(null!=b){if(null!=b.querySelector(".ai-attributes [data-ai-hash]")&&"aiHash"in b.querySelector(".ai-attributes [data-ai-hash]").dataset){var e=b.querySelector(".ai-attributes [data-ai-hash]").dataset.aiHash;
|
142 |
+
if("aiClosedTime"in a.dataset){a=a.dataset.aiClosedTime;var f=Math.round((new Date).getTime()/1E3);ai_set_cookie(c,"x",Math.round(f+86400*a));ai_set_cookie(c,"h",e)}}else e=ai_set_cookie(c,"x",""),!e.hasOwnProperty(c)||e[c].hasOwnProperty("i")||e[c].hasOwnProperty("c")||ai_set_cookie(c,"h","");b.remove()}else ai_set_cookie(c,"x",""),!e.hasOwnProperty(c)||e[c].hasOwnProperty("i")||e[c].hasOwnProperty("c")||ai_set_cookie(c,"h","")};ai_install_close_buttons=function(a){setTimeout(function(){a instanceof
|
143 |
+
Element&&a.classList.contains("ai-close")?d(a):a.querySelectorAll(".ai-close").forEach(function(b,c){d(b)})},ai_close_button_delay)};"undefined"==typeof ai_close_button_delay&&(ai_close_button_delay=2200);ai_install_close_buttons(document)}function ai_fade_in(d,a){d.style.display="block";d.style.opacity=0;var b=+new Date,c=function(){d.style.opacity=+d.style.opacity+(new Date-b)/a;b=+new Date;1>+d.style.opacity&&(window.requestAnimationFrame&&requestAnimationFrame(c)||setTimeout(c,16))};c()}
|
144 |
+
function ai_ready(d){"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?d():document.addEventListener("DOMContentLoaded",d)}ai_ready(ai_check_close_buttons);
|
145 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(a){return a.raw=a};$jscomp.createTemplateTagFirstArgWithRaw=function(a,b){a.raw=b;return a};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};
|
146 |
+
$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
|
147 |
+
$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};
|
148 |
+
$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};$jscomp.polyfill=function(a,b,c,d){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,d):$jscomp.polyfillUnisolated(a,b,c,d))};
|
149 |
+
$jscomp.polyfillUnisolated=function(a,b,c,d){c=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var g=a[d];if(!(g in c))return;c=c[g]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};
|
150 |
+
$jscomp.polyfillIsolated=function(a,b,c,d){var g=a.split(".");a=1===g.length;d=g[0];d=!a&&d in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var e=0;e<g.length-1;e++){var f=g[e];if(!(f in d))return;d=d[f]}g=g[g.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&"es6"===c?d[g]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,g,{configurable:!0,writable:!0,value:b}):b!==c&&(void 0===$jscomp.propertyToPolyfillSymbol[g]&&(c=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[g]=$jscomp.IS_SYMBOL_NATIVE?
|
151 |
+
$jscomp.global.Symbol(g):$jscomp.POLYFILL_PREFIX+c+"$"+g),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[g],{configurable:!0,writable:!0,value:b})))};$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};
|
152 |
+
$jscomp.setPrototypeOf=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null;$jscomp.generator={};$jscomp.generator.ensureIteratorResultIsObject_=function(a){if(!(a instanceof Object))throw new TypeError("Iterator result "+a+" is not an object");};
|
153 |
+
$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null};$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};
|
154 |
+
$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(a){this.yieldResult=a};$jscomp.generator.Context.prototype.throw_=function(a){this.abruptCompletion_={exception:a,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype["return"]=function(a){this.abruptCompletion_={"return":a};this.nextAddress=this.finallyAddress_};
|
155 |
+
$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(a){this.abruptCompletion_={jumpTo:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(a,b){this.nextAddress=b;return{value:a}};$jscomp.generator.Context.prototype.yieldAll=function(a,b){var c=$jscomp.makeIterator(a),d=c.next();$jscomp.generator.ensureIteratorResultIsObject_(d);if(d.done)this.yieldResult=d.value,this.nextAddress=b;else return this.yieldAllIterator_=c,this.yield(d.value,b)};
|
156 |
+
$jscomp.generator.Context.prototype.jumpTo=function(a){this.nextAddress=a};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(a,b){this.catchAddress_=a;void 0!=b&&(this.finallyAddress_=b)};$jscomp.generator.Context.prototype.setFinallyBlock=function(a){this.catchAddress_=0;this.finallyAddress_=a||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(a,b){this.nextAddress=a;this.catchAddress_=b||0};
|
157 |
+
$jscomp.generator.Context.prototype.enterCatchBlock=function(a){this.catchAddress_=a||0;a=this.abruptCompletion_.exception;this.abruptCompletion_=null;return a};$jscomp.generator.Context.prototype.enterFinallyBlock=function(a,b,c){c?this.finallyContexts_[c]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=a||0;this.finallyAddress_=b||0};
|
158 |
+
$jscomp.generator.Context.prototype.leaveFinallyBlock=function(a,b){var c=this.finallyContexts_.splice(b||0)[0];if(c=this.abruptCompletion_=this.abruptCompletion_||c){if(c.isException)return this.jumpToErrorHandler_();void 0!=c.jumpTo&&this.finallyAddress_<c.jumpTo?(this.nextAddress=c.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=a};$jscomp.generator.Context.prototype.forIn=function(a){return new $jscomp.generator.Context.PropertyIterator(a)};
|
159 |
+
$jscomp.generator.Context.PropertyIterator=function(a){this.object_=a;this.properties_=[];for(var b in a)this.properties_.push(b);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};
|
160 |
+
$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};
|
161 |
+
$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_("return"in b?b["return"]:function(c){return{value:c,done:!0}},a,this.context_["return"]);this.context_["return"](a);return this.nextStep_()};
|
162 |
+
$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};
|
163 |
+
$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var g=d.value}catch(e){return this.context_.yieldAllIterator_=null,this.context_.throw_(e),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,g);return this.nextStep_()};
|
164 |
+
$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a["return"],done:!0}}return{value:void 0,done:!0}};
|
165 |
+
$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this["throw"]=function(b){return a.throw_(b)};this["return"]=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){var c=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(c,a.prototype);return c};
|
166 |
+
$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a["throw"](d)}return new Promise(function(d,g){function e(f){f.done?d(f.value):Promise.resolve(f.value).then(b,c).then(e,g)}e(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};
|
167 |
+
if("undefined"!=typeof ai_filter){var ai_process_element=function(a){setTimeout(function(){"function"==typeof ai_process_rotations_in_element&&ai_process_rotations_in_element(a);"function"==typeof ai_process_lists&&ai_process_lists(jQuery(".ai-list-data",a));"function"==typeof ai_process_ip_addresses&&ai_process_ip_addresses(jQuery(".ai-ip-data",a));"function"==typeof ai_process_filter_hooks&&ai_process_filter_hooks(a);"function"==typeof ai_adb_process_blocks&&ai_adb_process_blocks(a);"function"==
|
168 |
+
typeof ai_process_impressions&&1==ai_tracking_finished&&ai_process_impressions();"function"==typeof ai_install_click_trackers&&1==ai_tracking_finished&&ai_install_click_trackers();"function"==typeof ai_install_close_buttons&&ai_install_close_buttons(document)},5)},ai_check_filter_hooks=function(){setTimeout(function(){ai_process_filter_hooks()},3)},ai_ready=function(a){"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?a():document.addEventListener("DOMContentLoaded",
|
169 |
+
a)},process_filter_hook_data=function(a){a.forEach(function(d,g){d.classList.remove("ai-filter-check")});var b=!1;if(""!=ai_filter_hook_data){try{var c=JSON.parse(ai_filter_hook_data)}catch(d){return}null!=c&&a.forEach(function(d,g){var e=d.closest("div."+ai_block_class_def),f=parseInt(d.dataset.block);b=!1;"undefined"!==typeof c&&(c.includes("*")?(b=!0,c.includes(-f)&&(b=!1)):c.includes(f)&&(b=!0));d.style.visibility="";d.style.position="none";d.style.width="";d.style.height="";var h=d.style.zIndex=
|
170 |
+
"";f=JSON.parse(ai_filter_hook_comments);if("string"==typeof f)h=f;else if("object"==typeof f){h="";f=$jscomp.makeIterator(Object.entries(f));for(var k=f.next();!k.done;k=f.next()){var l=$jscomp.makeIterator(k.value);k=l.next().value;l=l.next().value;h+=k+": "+l+"\n"}}else h=ai_filter_hook_comments;"undefined"!=typeof ai_front&&(f=prev(d,".ai-debug-bar"),null!=f&&(f.querySelectorAll(".ai-status").forEach(function(m,p){m.textContent=b?ai_front.visible:ai_front.hidden}),f.querySelectorAll(".ai-filter-data").forEach(function(m,
|
171 |
+
p){m.setAttribute("title",h)})));if(b){if(e.style.visibility="",e.classList.contains("ai-remove-position")&&(e.style.position=""),"code"in d.dataset){k=b64d(d.dataset.code);f=document.createElement("div");f.innerHTML=k;k=document.createRange();try{var n=k.createContextualFragment(f.innerHTML)}catch(m){}null!=d.closest("head")?(d.insertBefore(n,null),d.remove()):d.parentNode.insertBefore(n,d.nextSibling);d.setAttribute("data-code","");ai_process_element(d)}}else d.style.display="none",null!=!e.querySelector(".ai-debug-block")&&
|
172 |
+
(e.style.display="none"),e.removeAttribute("data-ai"),null!=e.querySelector(".ai-debug-block")?(e.style.visibility="",e.classList.remove("ai-close"),e.classList.contains("ai-remove-position")&&(e.style.position=""),"code"in d.dataset&&(e.classList.remove("ai-list-block"),e.classList.remove("ai-list-block-ip"),null!=prev(e)&&prev(e).classList.contains("ai-debug-info")&&prev(e).remove())):e.style.display="none";e.classList.remove("ai-list-block-filter")})}},ai_random_parameter=function(){return(new Date).getTime()+
|
173 |
+
"-"+Math.round(1E5*Math.random())},prev=function(a,b){if(b){for(var c=a.previousElementSibling;c&&!c.matches(b);)c=c.previousElementSibling;return c}return a.previousElementSibling};ai_process_filter_hooks=function(a){ai_filter_hook_blocks=null==a?document.querySelectorAll("div.ai-filter-check, meta.ai-filter-check"):window.jQuery&&window.jQuery.fn&&a instanceof jQuery&&a.hasOwnProperty("0")?a[0]:a.querySelectorAll(".ai-filter-check");if(ai_filter_hook_blocks.length)if("undefined"!=typeof ai_filter_hook_data)process_filter_hook_data(ai_filter_hook_blocks);
|
174 |
+
else if("undefined"==typeof ai_filter_hook_data_requested){a=window.navigator.userAgent;var b=navigator.language;ai_filter_hook_data_requested=!0;a={action:"ai_ajax","filter-hook-data":"all",check:ai_data_id,http_user_agent:encodeURIComponent(a),http_accept_language:encodeURIComponent(b),ver:ai_random_parameter()};var c=[],d;for(d in a){b=encodeURIComponent(d);var g=encodeURIComponent(a[d]);c.push(b+"="+g)}c=c.join("&");(function(){var e,f;return $jscomp.asyncExecutePromiseGeneratorProgram(function(h){if(1==
|
175 |
+
h.nextAddress)return h.yield(fetch(ai_ajax_url+"?"+c,{method:"GET"}),2);if(3!=h.nextAddress)return e=h.yieldResult,h.yield(e.text(),3);f=h.yieldResult;return h["return"](f)})})().then(function(e){if(""==e)e="AI FILTER HOOK Ajax request returned empty data, filter hook checks not processed",console.error(e),"undefined"!=typeof ai_js_errors&&ai_js_errors.push([e,page,0]);else try{var f=JSON.parse(e)}catch(h){e="AI FILTER HOOK Ajax call returned invalid data, filter hook checks not processed",console.error(e),
|
176 |
+
"undefined"!=typeof ai_js_errors&&ai_js_errors.push([e,page,0])}ai_filter_hook_data=JSON.stringify(f.blocks);ai_filter_hook_comments=JSON.stringify(f.comments);ai_filter_hook_blocks=document.querySelectorAll("div.ai-filter-check, meta.ai-filter-check");process_filter_hook_data(ai_filter_hook_blocks)})["catch"](function(e){document.querySelectorAll("div.ai-filter-check").forEach(function(f,h){f.style.display="none";f.style.visibility="";f.style.position="";f.style.width="";f.style.height="";f.style.zIndex=
|
177 |
+
"";f.classList.remove("ai-filter-check");f.style.display="none"})})}};ai_ready(ai_check_filter_hooks)};
|
178 |
+
!function(){var e=function(t,i){function s(){this.q=[],this.add=function(e){this.q.push(e)};var e,t;this.call=function(){for(e=0,t=this.q.length;e<t;e++)this.q[e].call()}}function o(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null).getPropertyValue(t):e.style[t]}function n(e,t){if(e.resizedAttached){if(e.resizedAttached)return void e.resizedAttached.add(t)}else e.resizedAttached=new s,e.resizedAttached.add(t);e.resizeSensor=document.createElement("div"),e.resizeSensor.className="resize-sensor";var i="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;",n="position: absolute; left: 0; top: 0; transition: 0s;";e.resizeSensor.style.cssText=i,e.resizeSensor.innerHTML='<div class="resize-sensor-expand" style="'+i+'"><div style="'+n+'"></div></div><div class="resize-sensor-shrink" style="'+i+'"><div style="'+n+' width: 200%; height: 200%"></div></div>',e.appendChild(e.resizeSensor),{fixed:1,absolute:1}[o(e,"position")]||(e.style.position="relative");var d,r,l=e.resizeSensor.childNodes[0],c=l.childNodes[0],h=e.resizeSensor.childNodes[1],a=(h.childNodes[0],function(){c.style.width=l.offsetWidth+10+"px",c.style.height=l.offsetHeight+10+"px",l.scrollLeft=l.scrollWidth,l.scrollTop=l.scrollHeight,h.scrollLeft=h.scrollWidth,h.scrollTop=h.scrollHeight,d=e.offsetWidth,r=e.offsetHeight});a();var f=function(){e.resizedAttached&&e.resizedAttached.call()},u=function(e,t,i){e.attachEvent?e.attachEvent("on"+t,i):e.addEventListener(t,i)},p=function(){e.offsetWidth==d&&e.offsetHeight==r||f(),a()};u(l,"scroll",p),u(h,"scroll",p)}var d=Object.prototype.toString.call(t),r="[object Array]"===d||"[object NodeList]"===d||"[object HTMLCollection]"===d||"undefined"!=typeof jQuery&&t instanceof jQuery||"undefined"!=typeof Elements&&t instanceof Elements;if(r)for(var l=0,c=t.length;l<c;l++)n(t[l],i);else n(t,i);this.detach=function(){if(r)for(var i=0,s=t.length;i<s;i++)e.detach(t[i]);else e.detach(t)}};e.detach=function(e){e.resizeSensor&&(e.removeChild(e.resizeSensor),delete e.resizeSensor,delete e.resizedAttached)},"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=e:window.ResizeSensor=e}();
|
179 |
+
!function(i){i.fn.theiaStickySidebar=function(t){function e(t,e){var a=o(t,e);a||(console.log("TSS: Body width smaller than options.minWidth. Init is delayed."),i(document).on("scroll."+t.namespace,function(t,e){return function(a){var n=o(t,e);n&&i(this).unbind(a)}}(t,e)),i(window).on("resize."+t.namespace,function(t,e){return function(a){var n=o(t,e);n&&i(this).unbind(a)}}(t,e)))}function o(t,e){return t.initialized===!0||!(i("body").width()<t.minWidth)&&(a(t,e),!0)}function a(t,e){t.initialized=!0;var o=i("#theia-sticky-sidebar-stylesheet-"+t.namespace);0===o.length&&i("head").append(i('<style id="theia-sticky-sidebar-stylesheet-'+t.namespace+'">.theiaStickySidebar:after {content: ""; display: table; clear: both;}</style>')),e.each(function(){function e(){a.fixedScrollTop=0,a.sidebar.css({"min-height":"1px"}),a.stickySidebar.css({position:"static",width:"",transform:"none"})}function o(t){var e=t.height();return t.children().each(function(){e=Math.max(e,i(this).height())}),e}var a={};if(a.sidebar=i(this),a.options=t||{},a.container=i(a.options.containerSelector),0==a.container.length&&(a.container=a.sidebar.parent()),a.sidebar.parents().css("-webkit-transform","none"),a.sidebar.css({position:a.options.defaultPosition,overflow:"visible","-webkit-box-sizing":"border-box","-moz-box-sizing":"border-box","box-sizing":"border-box"}),a.stickySidebar=a.sidebar.find(".theiaStickySidebar"),0==a.stickySidebar.length){var s=/(?:text|application)\/(?:x-)?(?:javascript|ecmascript)/i;a.sidebar.find("script").filter(function(i,t){return 0===t.type.length||t.type.match(s)}).remove(),a.stickySidebar=i("<div>").addClass("theiaStickySidebar").append(a.sidebar.children()),a.sidebar.append(a.stickySidebar)}a.marginBottom=parseInt(a.sidebar.css("margin-bottom")),a.paddingTop=parseInt(a.sidebar.css("padding-top")),a.paddingBottom=parseInt(a.sidebar.css("padding-bottom"));var r=a.stickySidebar.offset().top,d=a.stickySidebar.outerHeight();a.stickySidebar.css("padding-top",1),a.stickySidebar.css("padding-bottom",1),r-=a.stickySidebar.offset().top,d=a.stickySidebar.outerHeight()-d-r,0==r?(a.stickySidebar.css("padding-top",0),a.stickySidebarPaddingTop=0):a.stickySidebarPaddingTop=1,0==d?(a.stickySidebar.css("padding-bottom",0),a.stickySidebarPaddingBottom=0):a.stickySidebarPaddingBottom=1,a.previousScrollTop=null,a.fixedScrollTop=0,e(),a.onScroll=function(a){if(a.stickySidebar.is(":visible")){if(i("body").width()<a.options.minWidth)return void e();if(a.options.disableOnResponsiveLayouts){var s=a.sidebar.outerWidth("none"==a.sidebar.css("float"));if(s+50>a.container.width())return void e()}var r=i(document).scrollTop(),d="static";if(r>=a.sidebar.offset().top+(a.paddingTop-a.options.additionalMarginTop)){var c,p=a.paddingTop+t.additionalMarginTop,b=a.paddingBottom+a.marginBottom+t.additionalMarginBottom,l=a.sidebar.offset().top,f=a.sidebar.offset().top+o(a.container),h=0+t.additionalMarginTop,g=a.stickySidebar.outerHeight()+p+b<i(window).height();c=g?h+a.stickySidebar.outerHeight():i(window).height()-a.marginBottom-a.paddingBottom-t.additionalMarginBottom;var u=l-r+a.paddingTop,S=f-r-a.paddingBottom-a.marginBottom,y=a.stickySidebar.offset().top-r,m=a.previousScrollTop-r;"fixed"==a.stickySidebar.css("position")&&"modern"==a.options.sidebarBehavior&&(y+=m),"stick-to-top"==a.options.sidebarBehavior&&(y=t.additionalMarginTop),"stick-to-bottom"==a.options.sidebarBehavior&&(y=c-a.stickySidebar.outerHeight()),y=m>0?Math.min(y,h):Math.max(y,c-a.stickySidebar.outerHeight()),y=Math.max(y,u),y=Math.min(y,S-a.stickySidebar.outerHeight());var k=a.container.height()==a.stickySidebar.outerHeight();d=(k||y!=h)&&(k||y!=c-a.stickySidebar.outerHeight())?r+y-a.sidebar.offset().top-a.paddingTop<=t.additionalMarginTop?"static":"absolute":"fixed"}if("fixed"==d){var v=i(document).scrollLeft();a.stickySidebar.css({position:"fixed",width:n(a.stickySidebar)+"px",transform:"translateY("+y+"px)",left:a.sidebar.offset().left+parseInt(a.sidebar.css("padding-left"))-v+"px",top:"0px"})}else if("absolute"==d){var x={};"absolute"!=a.stickySidebar.css("position")&&(x.position="absolute",x.transform="translateY("+(r+y-a.sidebar.offset().top-a.stickySidebarPaddingTop-a.stickySidebarPaddingBottom)+"px)",x.top="0px"),x.width=n(a.stickySidebar)+"px",x.left="",a.stickySidebar.css(x)}else"static"==d&&e();"static"!=d&&1==a.options.updateSidebarHeight&&a.sidebar.css({"min-height":a.stickySidebar.outerHeight()+a.stickySidebar.offset().top-a.sidebar.offset().top+a.paddingBottom}),a.previousScrollTop=r}},a.onScroll(a),i(document).on("scroll."+a.options.namespace,function(i){return function(){i.onScroll(i)}}(a)),i(window).on("resize."+a.options.namespace,function(i){return function(){i.stickySidebar.css({position:"static"}),i.onScroll(i)}}(a)),"undefined"!=typeof ResizeSensor&&new ResizeSensor(a.stickySidebar[0],function(i){return function(){i.onScroll(i)}}(a))})}function n(i){var t;try{t=i[0].getBoundingClientRect().width}catch(i){}return"undefined"==typeof t&&(t=i.width()),t}var s={containerSelector:"",additionalMarginTop:0,additionalMarginBottom:0,updateSidebarHeight:!0,minWidth:0,disableOnResponsiveLayouts:!0,sidebarBehavior:"modern",defaultPosition:"relative",namespace:"TSS"};return t=i.extend(s,t),t.additionalMarginTop=parseInt(t.additionalMarginTop)||0,t.additionalMarginBottom=parseInt(t.additionalMarginBottom)||0,e(t,this),this}}(jQuery);
|
180 |
+
var ai_functions = true;
|
languages/ad-inserter-es_ES.mo
CHANGED
Binary file
|
languages/ad-inserter-es_ES.po
CHANGED
@@ -5,8 +5,8 @@ msgstr ""
|
|
5 |
"Project-Id-Version: Plugins - Ad Inserter – Ad Manager & AdSense "
|
6 |
"Ads - Stable (latest release)\n"
|
7 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ad-inserter\n"
|
8 |
-
"POT-Creation-Date:
|
9 |
-
"PO-Revision-Date: 2022-
|
10 |
"Last-Translator: Igor Funa <info@adinserter.pro>\n"
|
11 |
"Language-Team: Angelo Giammarresi - info@wocmultimedia.com\n"
|
12 |
"Language: es\n"
|
@@ -16,157 +16,157 @@ msgstr ""
|
|
16 |
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
17 |
"X-Generator: Poedit 3.0.1\n"
|
18 |
|
19 |
-
#: ad-inserter.php:
|
20 |
msgctxt "Menu item"
|
21 |
msgid "Debugging DEMO"
|
22 |
msgstr "Depurando DEMO"
|
23 |
|
24 |
-
#: ad-inserter.php:
|
25 |
msgctxt "Menu item"
|
26 |
msgid "Label Blocks"
|
27 |
msgstr "Bloques de etiqueta"
|
28 |
|
29 |
-
#: ad-inserter.php:
|
30 |
msgctxt "Menu item"
|
31 |
msgid "Show Positions"
|
32 |
msgstr "Mostrar posiciones"
|
33 |
|
34 |
-
#: ad-inserter.php:
|
35 |
msgctxt "Menu item"
|
36 |
msgid "Show HTML Tags"
|
37 |
msgstr "Mostrar etiquetas HTML"
|
38 |
|
39 |
-
#: ad-inserter.php:
|
40 |
msgctxt "Menu item"
|
41 |
msgid "Disable Insertion"
|
42 |
msgstr "Desactivar la inserción"
|
43 |
|
44 |
-
#: ad-inserter.php:
|
45 |
msgctxt "Menu item"
|
46 |
msgid "Ad Blocking Status"
|
47 |
msgstr "Estado del bloqueo de anuncios"
|
48 |
|
49 |
-
#: ad-inserter.php:
|
50 |
msgctxt "Menu item"
|
51 |
msgid "Simulate Ad Blocking"
|
52 |
msgstr "Simular el bloqueo de anuncios"
|
53 |
|
54 |
-
#: ad-inserter.php:
|
55 |
msgctxt "Menu item"
|
56 |
msgid "Log Processing"
|
57 |
msgstr "Procesamiento de registro"
|
58 |
|
59 |
-
#: ad-inserter.php:
|
60 |
msgctxt "Menu item"
|
61 |
msgid "Show Log"
|
62 |
msgstr "Mostrar el registro"
|
63 |
|
64 |
#. translators: Debugging position name Before HTML element
|
65 |
-
#: ad-inserter.php:
|
66 |
msgid "Before"
|
67 |
msgstr "Antes"
|
68 |
|
69 |
#. translators: Debugging position name After HTML element
|
70 |
-
#: ad-inserter.php:
|
71 |
msgid "After"
|
72 |
msgstr "Después"
|
73 |
|
74 |
#. translators: Debugging position name Prepend content of HTML element (before
|
75 |
#. the content of the HTML element)
|
76 |
-
#: ad-inserter.php:
|
77 |
msgid "Prepend content"
|
78 |
msgstr "Anexar contenido"
|
79 |
|
80 |
#. translators: Debugging position name Append content of HTML element (after
|
81 |
#. the content of the HTML element)
|
82 |
-
#: ad-inserter.php:
|
83 |
msgid "Append content"
|
84 |
msgstr "Contenido añadido"
|
85 |
|
86 |
#. translators: Debugging position name Replace content of HTML element
|
87 |
-
#: ad-inserter.php:
|
88 |
msgid "Replace content"
|
89 |
msgstr "Reemplazar contenido"
|
90 |
|
91 |
#. translators: Debugging position name Replace HTML element
|
92 |
-
#: ad-inserter.php:
|
93 |
msgid "Replace"
|
94 |
msgstr "Reemplazar"
|
95 |
|
96 |
#. translators: Debugging message when output buffering is enabled
|
97 |
-
#: ad-inserter.php:
|
98 |
msgid "OUTPUT BUFFERING"
|
99 |
msgstr "BUFFER DE SALIDA"
|
100 |
|
101 |
#. translators: Debugging position
|
102 |
-
#: ad-inserter.php:
|
103 |
msgid "Above Header"
|
104 |
msgstr "Arriba de la cabecera"
|
105 |
|
106 |
-
#: ad-inserter.php:
|
107 |
msgctxt "Menu item"
|
108 |
msgid "Log In"
|
109 |
msgstr "Acceder"
|
110 |
|
111 |
#. translators: %s: Ad Inserter
|
112 |
-
#: ad-inserter.php:
|
113 |
msgid "%s Settings"
|
114 |
msgstr "Ajustes de %s"
|
115 |
|
116 |
#. translators: AD BLOCKING DETECTED, PAGE VIEWS: n - NO ACTION
|
117 |
-
#: ad-inserter.php:
|
118 |
msgid "AD BLOCKING DETECTED, PAGE VIEWS"
|
119 |
msgstr "DETECTADO BLOQUEO DE ANUNCIO, VISTA DE PÁGINA"
|
120 |
|
121 |
-
#: ad-inserter.php:
|
122 |
msgid "NO ACTION"
|
123 |
msgstr "SIN ACCIÓN"
|
124 |
|
125 |
-
#: ad-inserter.php:
|
126 |
msgid "AD BLOCKING DETECTED, COOKIE DETECTED - NO ACTION"
|
127 |
msgstr "DETECTADO BLOQUEO DE ANUNCIO, DETECTADA COOKIE - SIN ACCIÓN"
|
128 |
|
129 |
-
#: ad-inserter.php:
|
130 |
msgid "AD BLOCKING DETECTED - ACTION"
|
131 |
msgstr "DETECTADO BLOQUEO DE ANUNCIO - ACCIÓN"
|
132 |
|
133 |
-
#: ad-inserter.php:
|
134 |
msgid "AD BLOCKING NOT DETECTED"
|
135 |
msgstr "BLOQUEO DE ANUNCIO NO DETECTADO"
|
136 |
|
137 |
-
#: ad-inserter.php:
|
138 |
msgid "AD BLOCKING DETECTION COOKIES DELETED"
|
139 |
msgstr "BORRADAS LAS COOKIES DE DETECCIÓN DE BLOQUEO DE ANUNCIO"
|
140 |
|
141 |
-
#: ad-inserter.php:
|
142 |
msgid "AD BLOCKING DETECTED - NO ACTION"
|
143 |
msgstr "BLOQUEO DE ANUNCIO DETECTADO - SIN ACCIÓN"
|
144 |
|
145 |
#. Translators: 1: number of blocks, 2: Ad Inserter
|
146 |
-
#: ad-inserter.php:
|
147 |
msgid "Hey, you are now using %1$s %2$s block."
|
148 |
msgid_plural "Hey, you are now using %1$s %2$s blocks."
|
149 |
msgstr[0] "Oye, estás usando ahora %1$s bloque de %2$s."
|
150 |
msgstr[1] "Oye, estás usando ahora %1$s bloques de %2$s."
|
151 |
|
152 |
-
#: ad-inserter.php:
|
153 |
msgid "Please help me to solve a problem first"
|
154 |
msgstr "Por favor, antes ayúdame a resolver un problema"
|
155 |
|
156 |
-
#: ad-inserter.php:
|
157 |
msgid "Maybe later"
|
158 |
msgstr "Quizás más tarde"
|
159 |
|
160 |
#. Translators: %s: Ad Inserter
|
161 |
-
#: ad-inserter.php:
|
162 |
msgid "Hey, you are using %s and I hope you're happy with it."
|
163 |
msgstr "Oye, estás usando %s y espero que estés contento con él."
|
164 |
|
165 |
-
#: ad-inserter.php:
|
166 |
msgid "OK, but please help me with the settings first"
|
167 |
msgstr "De acuerdo, pero primero ayúdame con los ajustes"
|
168 |
|
169 |
-
#: ad-inserter.php:
|
170 |
msgid ""
|
171 |
"Please take a moment to rate the plugin. When you rate it with 5 stars it's "
|
172 |
"like saying 'Thank you'. Somebody will be happy."
|
@@ -174,7 +174,7 @@ msgstr ""
|
|
174 |
"Por favor, tómate un momento para valorar el plugin. Cuando lo valoras con 5 "
|
175 |
"estrellas es como si dijeras «Gracias». Alguien estará feliz."
|
176 |
|
177 |
-
#: ad-inserter.php:
|
178 |
msgid ""
|
179 |
"Positive reviews are a great incentive to fix bugs and to add new features "
|
180 |
"for better monetization of your website."
|
@@ -182,29 +182,34 @@ msgstr ""
|
|
182 |
"Las críticas positivas son un gran incentivo para corregir errores y añadir "
|
183 |
"nuevas características para una mejor monetización de tu web."
|
184 |
|
185 |
-
#: ad-inserter.php:
|
186 |
msgid "Sure"
|
187 |
msgstr "Por supuesto"
|
188 |
|
189 |
#. translators: 1: AMPforWP Plugin Manager, 2: Ad Inserter
|
190 |
#. translators: 1: AMPforWP Plugin Manager, 2: Ad Inserter, 3, 4: HTML tags
|
191 |
-
#: ad-inserter.php:
|
192 |
msgid "Warning: %1$s %3$s disabled %4$s %2$s on AMP pages."
|
193 |
msgstr "Advertencia: %1$s %3$sha desactivado%4$s %2$s en las páginas AMP."
|
194 |
|
195 |
#. translators: 1: Ad Inserter, 2, 3: HTML tags
|
196 |
-
#: ad-inserter.php:
|
197 |
msgid "Warning: %1$s requires PHP 5.6 or newer. %2$s Please update! %3$s"
|
198 |
msgstr ""
|
199 |
"Advertencia: %1$s necesita PHP 5.6 o superior. %2$s Por favor, ¡actualiza! "
|
200 |
"%3$s"
|
201 |
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
203 |
msgctxt "Menu item"
|
204 |
msgid "Settings"
|
205 |
msgstr "Ajustes"
|
206 |
|
207 |
-
#: ad-inserter.php:
|
208 |
msgid ""
|
209 |
"Load settings page in safe mode to avoid collisions with other plugins or "
|
210 |
"theme"
|
@@ -212,78 +217,79 @@ msgstr ""
|
|
212 |
"Carga la página de ajustes en modo seguro para evitar colisiones con otros "
|
213 |
"plugins o temas"
|
214 |
|
215 |
-
#: ad-inserter.php:
|
216 |
msgid "Safe mode"
|
217 |
msgstr "Modo seguro"
|
218 |
|
219 |
#. translators: %s: Ad Inserter
|
220 |
-
#: ad-inserter.php:
|
221 |
msgctxt "Meta box name"
|
222 |
msgid "%s Individual Exceptions"
|
223 |
msgstr "Excepciones individuales de %s"
|
224 |
|
225 |
-
#: ad-inserter.php:
|
226 |
-
#: includes/preview.php:
|
227 |
-
#: includes/preview.php:
|
228 |
msgid "Block"
|
229 |
msgstr "Bloque"
|
230 |
|
231 |
-
#: ad-inserter.php:
|
|
|
232 |
msgid "Name"
|
233 |
msgstr "Nombre"
|
234 |
|
235 |
-
#: ad-inserter.php:
|
236 |
msgid "Default insertion"
|
237 |
msgstr "Inserción por defecto"
|
238 |
|
239 |
#. translators: For this post or page
|
240 |
-
#: ad-inserter.php:
|
241 |
msgctxt "Page"
|
242 |
msgid "For this"
|
243 |
msgstr "Para esta"
|
244 |
|
245 |
-
#: ad-inserter.php:
|
246 |
msgctxt "Post"
|
247 |
msgid "For this"
|
248 |
msgstr "Para esta"
|
249 |
|
250 |
-
#: ad-inserter.php:
|
251 |
msgctxt "Enabled/disabled on all"
|
252 |
msgid "pages"
|
253 |
msgstr "páginas"
|
254 |
|
255 |
-
#: ad-inserter.php:
|
256 |
msgctxt "Enabled/disabled on all"
|
257 |
msgid "posts"
|
258 |
msgstr "entradas"
|
259 |
|
260 |
-
#: ad-inserter.php:
|
261 |
msgid "Enabled"
|
262 |
msgstr "Activado"
|
263 |
|
264 |
#. translators: Menu items
|
265 |
-
#: ad-inserter.php:
|
266 |
-
#: includes/functions-check-now.php:
|
267 |
-
#: strings.php:16
|
268 |
msgid "Disabled"
|
269 |
msgstr "Desactivado"
|
270 |
|
271 |
-
#: ad-inserter.php:
|
272 |
msgid "No individual exceptions"
|
273 |
msgstr "Ninguna excepción individual"
|
274 |
|
275 |
#. translators: Not enabled for pages or posts
|
276 |
-
#: ad-inserter.php:
|
277 |
msgid "Not enabled for"
|
278 |
msgstr "No activado para"
|
279 |
|
280 |
#. translators: No individual exceptions enabled for pages or posts
|
281 |
-
#: ad-inserter.php:
|
282 |
msgid "No block has individual exceptions enabled"
|
283 |
msgstr "Ningún bloque tiene activadas excepciones individuales"
|
284 |
|
285 |
#. translators: 1: Ad Inserter Settings (page), 2: Tag / Archive pages
|
286 |
-
#: ad-inserter.php:
|
287 |
msgid ""
|
288 |
"Default insertion can be configured for each block on %1$s page - button "
|
289 |
"next to %2$s checkbox."
|
@@ -291,11 +297,11 @@ msgstr ""
|
|
291 |
"La inserción por defecto puede configurarse para cada bloque en la página de "
|
292 |
"%1$s - el botón junto a la casilla de verificación de %2$s."
|
293 |
|
294 |
-
#: ad-inserter.php:
|
295 |
msgid "Tag / Archive pages"
|
296 |
msgstr "Páginas de Archivo / Etiqueta"
|
297 |
|
298 |
-
#: ad-inserter.php:
|
299 |
msgid ""
|
300 |
"When individual exceptions for a block are enabled, a checkbox will be "
|
301 |
"listed here to change default insertion for this post or page."
|
@@ -304,7 +310,7 @@ msgstr ""
|
|
304 |
"listará una casilla de verificación para cambiar la inserción por defecto "
|
305 |
"para esta entrada o página."
|
306 |
|
307 |
-
#: ad-inserter.php:
|
308 |
msgid ""
|
309 |
"This way you can individually enable or disable blocks on specific posts or "
|
310 |
"pages."
|
@@ -312,61 +318,61 @@ msgstr ""
|
|
312 |
"De esta forma, puedes activar o desactivar individualmente los bloques en "
|
313 |
"entradas o páginas específicas."
|
314 |
|
315 |
-
#: ad-inserter.php:
|
316 |
msgid "For more information check page %s"
|
317 |
msgstr "Para más información comprueba la página %s"
|
318 |
|
319 |
#. translators: Ad Inserter Exceptions documentation page
|
320 |
-
#: ad-inserter.php:
|
321 |
msgid "Individual Exceptions"
|
322 |
msgstr "Excepciones individual"
|
323 |
|
324 |
-
#: ad-inserter.php:
|
325 |
msgid "STATIC PAGE"
|
326 |
msgstr "PÁGINA ESTÁTICA"
|
327 |
|
328 |
-
#: ad-inserter.php:
|
329 |
msgid "POST"
|
330 |
msgstr "ENTRADA"
|
331 |
|
332 |
-
#: ad-inserter.php:
|
333 |
msgid "HOMEPAGE"
|
334 |
msgstr "PÁGINA DE INICIO"
|
335 |
|
336 |
-
#: ad-inserter.php:
|
337 |
msgid "CATEGORY PAGE"
|
338 |
msgstr "Categoría de página"
|
339 |
|
340 |
-
#: ad-inserter.php:
|
341 |
msgid "SEARCH PAGE"
|
342 |
msgstr "PÁGINA DE BÚSQUEDA"
|
343 |
|
344 |
-
#: ad-inserter.php:
|
345 |
msgid "ARCHIVE PAGE"
|
346 |
msgstr "PÁGINA DE ARCHIVO"
|
347 |
|
348 |
-
#: ad-inserter.php:
|
349 |
msgid "ERROR 404 PAGE"
|
350 |
msgstr "PÁGINA DE ERROR 404"
|
351 |
|
352 |
-
#: ad-inserter.php:
|
353 |
msgid "AJAX CALL"
|
354 |
msgstr "LLAMADA AJAX"
|
355 |
|
356 |
-
#: ad-inserter.php:
|
357 |
msgid "UNKNOWN PAGE TYPE"
|
358 |
msgstr "TIPO DE PÁGINA DESCONOCIDA"
|
359 |
|
360 |
-
#: ad-inserter.php:
|
361 |
msgid "Click to delete ad blocking detection cokies"
|
362 |
msgstr "Haz clic para borrar las cokies de bloqueo de anuncios"
|
363 |
|
364 |
-
#: ad-inserter.php:
|
365 |
msgid "AD BLOCKING STATUS UNKNOWN"
|
366 |
msgstr "ESTADO DE BLOQUEO DE ANUNCIOS DESCONOCIDO"
|
367 |
|
368 |
#. translators: %s: AdSense Auto Ads
|
369 |
-
#: ad-inserter.php:
|
370 |
msgid ""
|
371 |
"Code for %s detected - Code will automatically insert AdSense ads at optimal "
|
372 |
"positions"
|
@@ -374,131 +380,135 @@ msgstr ""
|
|
374 |
"Código para %s detectado - El código insertará automáticamente los anuncios "
|
375 |
"de AdSense en las posiciones óptimas"
|
376 |
|
377 |
-
#: ad-inserter.php:
|
378 |
msgid "Code for insertion"
|
379 |
msgstr "Código de inserción"
|
380 |
|
381 |
-
#: ad-inserter.php:
|
382 |
msgid "character"
|
383 |
msgid_plural "characters"
|
384 |
msgstr[0] "carácter"
|
385 |
msgstr[1] "caracteres"
|
386 |
|
387 |
-
#: ad-inserter.php:
|
388 |
msgid "Header code"
|
389 |
msgstr "Código de cabecera"
|
390 |
|
391 |
-
#: ad-inserter.php:
|
392 |
msgctxt "Header code"
|
393 |
msgid "DISABLED"
|
394 |
msgstr "DESACTIVADA"
|
395 |
|
396 |
-
#: ad-inserter.php:
|
397 |
msgid "character inserted"
|
398 |
msgid_plural "characters inserted"
|
399 |
msgstr[0] "carácter insertado"
|
400 |
msgstr[1] "caracteres insertados"
|
401 |
|
402 |
-
#: ad-inserter.php:
|
403 |
-
msgid "Click to delete the
|
404 |
-
msgstr "Haz clic para
|
405 |
|
406 |
-
#: ad-inserter.php:
|
|
|
|
|
|
|
|
|
407 |
msgid "Footer code"
|
408 |
msgstr "Código del pie de página"
|
409 |
|
410 |
-
#: ad-inserter.php:
|
411 |
msgctxt "Footer code"
|
412 |
msgid "DISABLED"
|
413 |
msgstr "DESACTIVADO"
|
414 |
|
415 |
-
#: ad-inserter.php:
|
416 |
msgid "JAVASCRIPT NOT WORKING"
|
417 |
msgstr "JAVASCRIPT NO FUNCIONA"
|
418 |
|
419 |
-
#: ad-inserter.php:
|
420 |
msgid "NO JAVASCRIPT ERRORS"
|
421 |
msgstr "SIN ERRORES DE JAVASCRIPT"
|
422 |
|
423 |
-
#: ad-inserter.php:
|
424 |
msgid "JAVASCRIPT ERRORS"
|
425 |
msgstr "ERRORES DE JAVASCRIPT"
|
426 |
|
427 |
#. translators: block name (block with default settings)
|
428 |
-
#: ad-inserter.php:
|
429 |
msgctxt "Block name"
|
430 |
msgid "Default"
|
431 |
msgstr "Por defecto"
|
432 |
|
433 |
#. translators: %s: Ad Inserter
|
434 |
-
#: ad-inserter.php:
|
|
|
|
|
|
|
|
|
|
|
435 |
msgid "Error importing %s settings."
|
436 |
msgstr "Error importando los ajustes de %s."
|
437 |
|
438 |
-
#: ad-inserter.php:
|
439 |
msgid "Error importing settings for block"
|
440 |
msgid_plural "Error importing settings for blocks:"
|
441 |
msgstr[0] "Error al importar los ajustes para el bloque"
|
442 |
msgstr[1] "Error al importar los ajustes para los bloques:"
|
443 |
|
444 |
-
#: ad-inserter.php:
|
445 |
msgid "Settings saved."
|
446 |
msgstr "Ajustes guardados."
|
447 |
|
448 |
-
|
449 |
-
#: ad-inserter.php:7143
|
450 |
-
msgid "Invalid data received - %s settings not saved."
|
451 |
-
msgstr "Datos recibidos no válidos - no se han guardado los ajustes de %s."
|
452 |
-
|
453 |
-
#: ad-inserter.php:7242
|
454 |
msgid "Settings cleared."
|
455 |
msgstr "Ajustes borrados."
|
456 |
|
457 |
#. Translators: Post/Static page must have between X and Y words
|
458 |
-
#: ad-inserter.php:
|
459 |
-
#: settings.php:
|
460 |
msgid "word"
|
461 |
msgid_plural "words"
|
462 |
msgstr[0] "palabra"
|
463 |
msgstr[1] "palabras"
|
464 |
|
465 |
-
#: ad-inserter.php:
|
466 |
msgid "HTML TAGS REMOVED"
|
467 |
msgstr "ETIQUETA HTML ELIMINADA"
|
468 |
|
469 |
-
#: ad-inserter.php:
|
470 |
msgid "BEFORE COMMENTS"
|
471 |
msgstr "ANTES DE LOS COMENTARIOS"
|
472 |
|
473 |
-
#: ad-inserter.php:
|
474 |
msgid "AFTER COMMENTS"
|
475 |
msgstr "DESPUÉS DE LOS COMENTARIOS"
|
476 |
|
477 |
-
#: ad-inserter.php:
|
478 |
msgid "BETWEEN COMMENTS"
|
479 |
msgstr "ENTRE LOS COMENTARIOS"
|
480 |
|
481 |
-
#: ad-inserter.php:
|
482 |
msgctxt "category name"
|
483 |
msgid "Uncategorized"
|
484 |
msgstr "Sin categoría"
|
485 |
|
486 |
-
#: ad-inserter.php:
|
487 |
msgid "requires WordPress 4.6 or newer"
|
488 |
msgstr "requiere WordPress 4.6 o superior"
|
489 |
|
490 |
-
#: ad-inserter.php:
|
491 |
msgid "Please update!"
|
492 |
msgstr "¡Por favor, actualiza!"
|
493 |
|
494 |
#. translators: Opt-in message: Thank you for installing Ad Inserter (plugin
|
495 |
#. name with HTML tags will be added)
|
496 |
-
#: ad-inserter.php:
|
497 |
msgid "Thank you for installing"
|
498 |
msgstr "Gracias por instalar"
|
499 |
|
500 |
#. translators: Opt-in message: %s: HTML tags
|
501 |
-
#: ad-inserter.php:
|
502 |
msgid ""
|
503 |
"We would like to %s track its usage %s on your site. This is completely "
|
504 |
"optional and can be disabled at any time."
|
@@ -506,7 +516,7 @@ msgstr ""
|
|
506 |
"Nos gustaría hacer %s un seguimiento de uso %s en tu sitio. Es completamente "
|
507 |
"opcional y se puede desactivar en cualquier momento."
|
508 |
|
509 |
-
#: ad-inserter.php:
|
510 |
msgid ""
|
511 |
"We don't record any sensitive data, only information regarding the WordPress "
|
512 |
"environment and plugin usage, which will help us to make improvements to the "
|
@@ -517,7 +527,7 @@ msgstr ""
|
|
517 |
"plugin."
|
518 |
|
519 |
#. translators: Deactivation message: %s: HTML tags
|
520 |
-
#: ad-inserter.php:
|
521 |
msgid ""
|
522 |
"Looking for %s Documentation, %s %s Common Settings, %s %s Quick Start %s or "
|
523 |
"help for %s AdSense ads? %s The plugin doesn't work with your theme? %s Let "
|
@@ -528,50 +538,50 @@ msgstr ""
|
|
528 |
"Avísanos %s e intentaremos ayudarte."
|
529 |
|
530 |
#. translators: %s: Ad Inserter
|
531 |
-
#: ad-inserter.php:
|
532 |
msgid "%s block."
|
533 |
msgstr "%s bloque."
|
534 |
|
535 |
#. translators: widget title
|
536 |
-
#: ad-inserter.php:
|
537 |
msgid "Processing log"
|
538 |
msgstr "Registro de procesamiento"
|
539 |
|
540 |
#. translators: widget title
|
541 |
-
#: ad-inserter.php:
|
542 |
msgid "Dummy widget"
|
543 |
msgstr "Widget falso"
|
544 |
|
545 |
#. translators: widget title
|
546 |
-
#: ad-inserter.php:
|
547 |
msgid "Debugging tools"
|
548 |
msgstr "Herramientas de depuración"
|
549 |
|
550 |
#. translators: block status (widget title)
|
551 |
-
#: ad-inserter.php:
|
552 |
msgctxt "block"
|
553 |
msgid "PAUSED"
|
554 |
msgstr "EN PAUSA"
|
555 |
|
556 |
-
#: ad-inserter.php:
|
557 |
msgid "WIDGET DISABLED"
|
558 |
msgstr "WIDGET DESACTIVADO"
|
559 |
|
560 |
-
#: ad-inserter.php:
|
561 |
msgid "Unknown block"
|
562 |
msgstr "Bloque desconocido"
|
563 |
|
564 |
-
#: ad-inserter.php:
|
565 |
-
#: includes/functions.php:
|
566 |
msgid "Title"
|
567 |
msgstr "Título"
|
568 |
|
569 |
-
#: ad-inserter.php:
|
570 |
msgctxt "Widget"
|
571 |
msgid "Sticky"
|
572 |
msgstr "Fija"
|
573 |
|
574 |
-
#: ad-inserter.php:
|
575 |
msgid ""
|
576 |
"Ad Inserter can't be used while Ad Inserter Pro is active! To activate Ad "
|
577 |
"Inserter you need to first deactivate Ad Inserter Pro."
|
@@ -579,7 +589,7 @@ msgstr ""
|
|
579 |
"¡Ad Inserter no se puede utilizar mientras que Ad Inserter Pro esté activo! "
|
580 |
"Para activar Ad Inserter, primero debes desactivar Ad Inserter Pro."
|
581 |
|
582 |
-
#: ad-inserter.php:
|
583 |
msgid ""
|
584 |
"<strong>WARNING</strong>: Please note that saving settings in Ad Inserter "
|
585 |
"will clear all settings that are available only in the Pro version "
|
@@ -590,164 +600,189 @@ msgstr ""
|
|
590 |
"versión Pro (ajustes adicionales del bloque y del plugin)"
|
591 |
|
592 |
#. translators: %s: Ad Inserter
|
593 |
-
#: class.php:
|
594 |
msgid "PHP error in %s block"
|
595 |
msgstr "Error PHP en %s bloque"
|
596 |
|
597 |
-
#: class.php:
|
598 |
msgid "Counters"
|
599 |
msgstr "Contadores"
|
600 |
|
601 |
-
#: class.php:
|
602 |
msgid "Content"
|
603 |
msgstr "Contenido"
|
604 |
|
605 |
-
#: class.php:
|
606 |
msgid "Excerpt"
|
607 |
msgstr "Extracto"
|
608 |
|
609 |
-
#: class.php:
|
610 |
msgid "Before post"
|
611 |
msgstr "Antes de la entrada"
|
612 |
|
613 |
-
#: class.php:
|
614 |
msgid "After post"
|
615 |
msgstr "Después de la entrada"
|
616 |
|
617 |
-
#: class.php:
|
618 |
msgid "Between posts"
|
619 |
msgstr "Entre las entradas"
|
620 |
|
621 |
-
#: class.php:
|
622 |
msgid "Widget"
|
623 |
msgstr "Widget"
|
624 |
|
625 |
-
#: class.php:
|
626 |
msgid "PHP function call"
|
627 |
msgstr "Llamada de función PHP"
|
628 |
|
629 |
#. Translators: %s: custom hook name
|
630 |
-
#: class.php:
|
631 |
msgid "Custom hook %s call"
|
632 |
msgstr "Llamada del gancho personalizado %s"
|
633 |
|
634 |
-
#: class.php:
|
635 |
msgid "AJAX REQUEST"
|
636 |
msgstr "SOLICITUD DE AJAX"
|
637 |
|
638 |
-
#: class.php:
|
639 |
msgid "Ajax request for block in iframe"
|
640 |
msgstr "Ajax solicita bloque en iframe"
|
641 |
|
642 |
-
#: class.php:
|
643 |
msgid "Ajax request url, click to open it in a new tab"
|
644 |
msgstr "Ajax solicita una url, haga clic para abrirlo en una nueva pestaña"
|
645 |
|
646 |
-
#: class.php:
|
647 |
msgid "IN THE LOOP"
|
648 |
msgstr "EN EL BUCLE"
|
649 |
|
650 |
-
#: class.php:
|
651 |
msgid "YES"
|
652 |
msgstr "SÍ"
|
653 |
|
654 |
-
#: class.php:
|
655 |
msgid "NO"
|
656 |
msgstr "NO"
|
657 |
|
658 |
-
#: class.php:
|
659 |
msgid "BLOCK"
|
660 |
msgstr "BLOQUE"
|
661 |
|
662 |
-
#: class.php:
|
663 |
msgctxt "block or widget"
|
664 |
msgid "INSERTED BUT NOT VISIBLE"
|
665 |
msgstr "INSERTADO PERO NO VISIBLE"
|
666 |
|
667 |
-
#: class.php:
|
668 |
msgctxt "viewports"
|
669 |
msgid "ALL"
|
670 |
msgstr "TODOS"
|
671 |
|
672 |
-
#: class.php:
|
673 |
msgctxt "Block"
|
674 |
msgid "HIDDEN"
|
675 |
msgstr "OCULTO"
|
676 |
|
677 |
-
#: class.php:
|
678 |
msgctxt "Block"
|
679 |
msgid "VISIBLE"
|
680 |
msgstr "VISIBLE"
|
681 |
|
682 |
-
#: class.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
683 |
msgid "ACTIVE GROUPS"
|
684 |
msgstr "GRUPOS ACTIVOS"
|
685 |
|
686 |
-
#: class.php:
|
687 |
msgid "start='%s' end='%s' days='%s' type='%s'"
|
688 |
msgstr "start='%s' end='%s' days='%s' type='%s'"
|
689 |
|
690 |
-
#: class.php:
|
691 |
msgid "parameters='%s' type='%s'"
|
692 |
msgstr "parameters='%s' type='%s'"
|
693 |
|
|
|
|
|
|
|
|
|
|
|
694 |
#. translators: %s: list parameters and type
|
695 |
-
#: class.php:
|
696 |
msgid "referers='%s' type='%s'"
|
697 |
msgstr "referers='%s' type='%s'"
|
698 |
|
699 |
#. translators: %s: list parameters and type
|
700 |
-
#: class.php:
|
701 |
msgid "clients='%s' type='%s'"
|
702 |
msgstr "clientes='%s' tipo='%s'"
|
703 |
|
704 |
#. translators: %s: list parameters and type
|
705 |
-
#: class.php:
|
706 |
msgid "countries='%s' type='%s'"
|
707 |
msgstr "countries='%s' type='%s'"
|
708 |
|
709 |
#. translators: %s: list parameters and type
|
710 |
-
#: class.php:
|
711 |
msgid "ip addresses='%s' type='%s'"
|
712 |
msgstr "ip addresses='%s' type='%s'"
|
713 |
|
714 |
-
#: class.php:
|
715 |
msgid "viewport='%s' type='%s'"
|
716 |
msgstr "viewport='%s' type='%s'"
|
717 |
|
718 |
-
#: class.php:
|
|
|
|
|
|
|
|
|
|
|
719 |
msgid "BEFORE"
|
720 |
msgstr "ANTES"
|
721 |
|
722 |
-
#: class.php:
|
723 |
msgid "PREPEND CONTENT"
|
724 |
msgstr "ANEXAR CONTENIDO"
|
725 |
|
726 |
-
#: class.php:
|
727 |
msgid "APPEND CONTENT"
|
728 |
msgstr "ADJUNTAR CONTENIDO"
|
729 |
|
730 |
-
#: class.php:
|
731 |
msgid "REPLACE CONTENT"
|
732 |
msgstr "REEMPLAZAR EL CONTENIDO"
|
733 |
|
734 |
-
#: class.php:
|
735 |
msgid "REPLACE ELEMENT"
|
736 |
msgstr "REEMPLAZAR EL ELEMENTO"
|
737 |
|
738 |
-
#: class.php:
|
739 |
msgid "AFTER"
|
740 |
msgstr "DESPUÉS"
|
741 |
|
742 |
-
#: class.php:
|
743 |
msgid "Code"
|
744 |
msgstr "Código"
|
745 |
|
746 |
-
#: class.php:
|
747 |
msgid "for block"
|
748 |
msgstr "para el bloque"
|
749 |
|
750 |
-
#: class.php:
|
751 |
msgid ""
|
752 |
"ERROR: class DOMDocument not found. Your webhost needs to install the DOM "
|
753 |
"extension for PHP."
|
@@ -756,16 +791,16 @@ msgstr ""
|
|
756 |
"extensión DOM de PHP."
|
757 |
|
758 |
#: includes/editor.php:4 includes/placeholders.php:350
|
759 |
-
#: includes/preview.php:
|
760 |
msgid "Use"
|
761 |
msgstr "Usar"
|
762 |
|
763 |
-
#: includes/editor.php:5 includes/preview.php:
|
764 |
msgid "Reset"
|
765 |
msgstr "Restablecer"
|
766 |
|
767 |
#: includes/editor.php:6 includes/placeholders.php:352
|
768 |
-
#: includes/preview.php:
|
769 |
msgid "Cancel"
|
770 |
msgstr "Cancelar"
|
771 |
|
@@ -773,8 +808,8 @@ msgstr "Cancelar"
|
|
773 |
msgid "Visual Code Editor"
|
774 |
msgstr "Editor visual de código"
|
775 |
|
776 |
-
#: includes/editor.php:259 includes/preview-adb.php:
|
777 |
-
#: includes/preview.php:
|
778 |
msgid ""
|
779 |
"This page was not loaded properly. Please check browser, plugins and ad "
|
780 |
"blockers."
|
@@ -782,26 +817,26 @@ msgstr ""
|
|
782 |
"Esta página no se cargó correctamente. Comprueba el navegador, plugins y "
|
783 |
"bloqueadores de anuncios."
|
784 |
|
785 |
-
#: includes/editor.php:261 settings.php:
|
786 |
msgid "Error loading page"
|
787 |
msgstr "Error al cargar la página"
|
788 |
|
789 |
-
#: includes/editor.php:261 includes/preview-adb.php:
|
790 |
-
#: includes/preview.php:
|
791 |
msgid "PAGE BLOCKED"
|
792 |
msgstr "PÁGINA BLOQUEADA"
|
793 |
|
794 |
-
#: includes/functions-check-now.php:288 includes/functions.php:
|
795 |
msgid "%d of %d names shown"
|
796 |
msgstr "%d de %d nombres mostrados"
|
797 |
|
798 |
#. translators: %s: name filter
|
799 |
-
#: includes/functions-check-now.php:307 includes/functions.php:
|
800 |
msgid "No name matches filter"
|
801 |
msgstr "Ningún nombre coincide con el filtro"
|
802 |
|
803 |
#. translators: %s: Ad Inserter Pro
|
804 |
-
#: includes/functions-check-now.php:396 includes/functions.php:
|
805 |
msgid ""
|
806 |
"Import %s settings when saving - if checked, the encoded settings below will "
|
807 |
"be imported for all blocks and settings"
|
@@ -809,39 +844,39 @@ msgstr ""
|
|
809 |
"Importar la configuración de %s al guardar: si está marcado, los ajustes "
|
810 |
"codificados a continuación se importarán para todos los bloques y ajustes"
|
811 |
|
812 |
-
#: includes/functions-check-now.php:396
|
813 |
msgid "Import Settings for"
|
814 |
msgstr "Importar ajustes para"
|
815 |
|
816 |
-
#: includes/functions-check-now.php:400
|
817 |
msgid "Saved settings for"
|
818 |
msgstr "Ajustes guardados para"
|
819 |
|
820 |
-
#: includes/functions-check-now.php:420 includes/functions.php:
|
821 |
msgid "License Key"
|
822 |
msgstr "Clave de licencia"
|
823 |
|
824 |
-
#: includes/functions-check-now.php:423 includes/functions.php:
|
825 |
msgid "License Key for"
|
826 |
msgstr "Clave de licencia para"
|
827 |
|
828 |
-
#: includes/functions-check-now.php:425 includes/functions.php:
|
829 |
msgid "Open license page"
|
830 |
msgstr "Abrir página de licencia"
|
831 |
|
832 |
-
#: includes/functions-check-now.php:432 includes/functions.php:
|
833 |
msgid "Hide license key"
|
834 |
msgstr "Ocultar clave de licencia"
|
835 |
|
836 |
-
#: includes/functions-check-now.php:432 includes/functions.php:
|
837 |
msgid "Hide key"
|
838 |
msgstr "Ocultar clave"
|
839 |
|
840 |
-
#: includes/functions-check-now.php:447 includes/functions.php:
|
841 |
msgid "Main content element"
|
842 |
msgstr "Elemento de contenido principal"
|
843 |
|
844 |
-
#: includes/functions-check-now.php:450 includes/functions.php:
|
845 |
msgid ""
|
846 |
"Main content element (#id or .class) for 'Stick to the content' position. "
|
847 |
"Leave empty unless position is not properly calculated."
|
@@ -849,81 +884,81 @@ msgstr ""
|
|
849 |
"Elemento de contenido principal (#id o .class) para la posición «Cíñete al "
|
850 |
"contenido»."
|
851 |
|
852 |
-
#: includes/functions-check-now.php:451 includes/functions.php:
|
853 |
-
#: settings.php:
|
854 |
msgid "Open HTML element selector"
|
855 |
msgstr "Abrir selector de elemento HTML"
|
856 |
|
857 |
-
#: includes/functions-check-now.php:456 includes/functions.php:
|
858 |
msgid "Lazy loading offset"
|
859 |
msgstr "Compensación carga diferida"
|
860 |
|
861 |
-
#: includes/functions-check-now.php:459 includes/functions.php:
|
862 |
msgid "Offset of the block from the visible viewport when it should be loaded"
|
863 |
msgstr ""
|
864 |
"Desplazamiento del bloque desde la ventana gráfica visible cuando se debe "
|
865 |
"cargar"
|
866 |
|
867 |
-
#: includes/functions-check-now.php:470 includes/functions.php:
|
868 |
msgid "Export / Import Block Settings"
|
869 |
msgstr "Exportar / Importar los ajustes del bloque"
|
870 |
|
871 |
-
#: includes/functions-check-now.php:485 includes/functions.php:
|
872 |
msgid "Track impressions and clicks for this block"
|
873 |
msgstr "Seguimiento de impresiones y clics para este bloque"
|
874 |
|
875 |
-
#: includes/functions-check-now.php:485 includes/functions.php:
|
876 |
msgid " - global tracking disabled"
|
877 |
msgstr " - seguimiento global deshabilitado"
|
878 |
|
879 |
-
#: includes/functions-check-now.php:492 includes/functions.php:
|
880 |
-
#: includes/functions.php:
|
881 |
msgid "Generate PDF report"
|
882 |
msgstr "Generar informe en PDF"
|
883 |
|
884 |
-
#: includes/functions-check-now.php:497 includes/functions.php:
|
885 |
msgid "Open public report"
|
886 |
msgstr "Abrir informe público"
|
887 |
|
888 |
-
#: includes/functions-check-now.php:511 includes/functions.php:
|
889 |
msgid "Toggle Ad Blocking Statistics"
|
890 |
msgstr "Alternar estadísticas de bloqueo de anuncios"
|
891 |
|
892 |
-
#: includes/functions-check-now.php:519 includes/functions-check-now.php:
|
893 |
-
#: includes/functions.php:
|
894 |
msgid "Toggle Statistics"
|
895 |
msgstr "Alternar estadísticas"
|
896 |
|
897 |
-
#: includes/functions-check-now.php:528 includes/functions.php:
|
898 |
msgid "Pin list"
|
899 |
msgstr "Lista de pines"
|
900 |
|
901 |
#. translators: %s: Ad Inserter Pro
|
902 |
-
#: includes/functions-check-now.php:543 includes/functions.php:
|
903 |
msgid "%s license key is not set. Continue?"
|
904 |
msgstr "La clave de licencia %s no está configurada. ¿Seguir?"
|
905 |
|
906 |
#. translators: %s: Ad Inserter Pro
|
907 |
-
#: includes/functions-check-now.php:547 includes/functions.php:
|
908 |
msgid "Invalid %s license key. Continue?"
|
909 |
msgstr "La clave de licencia %s no válida. ¿Seguir?"
|
910 |
|
911 |
#. translators: %s: Ad Inserter Pro
|
912 |
-
#: includes/functions-check-now.php:551 includes/functions.php:
|
913 |
msgid "%s license overused. Continue?"
|
914 |
msgstr "Licencia de %s sobreutilizada. ¿Seguir?"
|
915 |
|
916 |
-
#: includes/functions-check-now.php:555 includes/functions.php:
|
917 |
-
#: settings.php:
|
918 |
msgid "Save Settings"
|
919 |
msgstr "Guardar ajustes"
|
920 |
|
921 |
-
#: includes/functions-check-now.php:615 includes/functions.php:
|
922 |
-
#: includes/preview.php:
|
923 |
msgid "Horizontal position"
|
924 |
msgstr "Posición horizontal"
|
925 |
|
926 |
-
#: includes/functions-check-now.php:638 includes/functions.php:
|
927 |
msgid ""
|
928 |
"Horizontal margin from the content or screen edge, empty means default value "
|
929 |
"from CSS"
|
@@ -931,12 +966,12 @@ msgstr ""
|
|
931 |
"Margen horizontal desde el contenido o el borde de la pantalla, vacío "
|
932 |
"significa valor por defecto de CSS"
|
933 |
|
934 |
-
#: includes/functions-check-now.php:646 includes/functions.php:
|
935 |
-
#: includes/preview.php:
|
936 |
msgid "Vertical position"
|
937 |
msgstr "Posición vertical"
|
938 |
|
939 |
-
#: includes/functions-check-now.php:661 includes/functions.php:
|
940 |
msgid ""
|
941 |
"Vertical margin from the top or bottom screen edge, empty means default "
|
942 |
"value from CSS"
|
@@ -944,16 +979,16 @@ msgstr ""
|
|
944 |
"Margen vertical desde el contenido o el borde de la pantalla, vacío "
|
945 |
"significa valor por defecto de CSS"
|
946 |
|
947 |
-
#: includes/functions-check-now.php:686 includes/functions.php:
|
948 |
-
#: includes/preview.php:
|
949 |
msgid "Animation"
|
950 |
msgstr "Animación"
|
951 |
|
952 |
-
#: includes/functions-check-now.php:704
|
953 |
msgid "Trigger"
|
954 |
msgstr "Activador"
|
955 |
|
956 |
-
#: includes/functions-check-now.php:713
|
957 |
msgid ""
|
958 |
"Trigger value: page scroll in %, page scroll in px or element with selector "
|
959 |
"(#id or .class) becomes visible"
|
@@ -961,53 +996,56 @@ msgstr ""
|
|
961 |
"Valor de activación: scroll de página en %, scroll de página en px o cuando "
|
962 |
"elemento con selector (#id o .class) se vuelve visible"
|
963 |
|
964 |
-
#: includes/functions-check-now.php:717 includes/functions.php:
|
|
|
965 |
msgid "Offset"
|
966 |
msgstr "Compensación"
|
967 |
|
968 |
-
#: includes/functions-check-now.php:717 includes/functions.php:
|
|
|
969 |
msgid "Offset of trigger element"
|
970 |
msgstr "Compensación del elemento activador"
|
971 |
|
972 |
-
#: includes/functions-check-now.php:721 includes/functions.php:
|
973 |
-
#: settings.php:
|
974 |
msgid "Delay"
|
975 |
msgstr "Retraso"
|
976 |
|
977 |
-
#: includes/functions-check-now.php:721 includes/functions.php:
|
978 |
msgid "Delay animation after trigger condition"
|
979 |
msgstr "Retraso de la animación después de la condición de disparo"
|
980 |
|
981 |
-
#: includes/functions-check-now.php:725
|
982 |
msgid "Trigger once"
|
983 |
msgstr "Activar una vez"
|
984 |
|
985 |
-
#: includes/functions-check-now.php:727
|
986 |
msgid "Trigger animation only once"
|
987 |
msgstr "Activa la animación solo una vez"
|
988 |
|
989 |
-
#: includes/functions-check-now.php:769 includes/functions-check-now.php:
|
990 |
-
#: includes/functions-check-now.php:
|
991 |
-
#: includes/functions.php:
|
992 |
msgid "Tracking is globally disabled"
|
993 |
msgstr "El seguimiento está deshabilitado globalmente"
|
994 |
|
995 |
-
#: includes/functions-check-now.php:773 includes/functions-check-now.php:
|
996 |
-
#: includes/functions-check-now.php:
|
997 |
-
#: includes/functions.php:
|
998 |
msgid "Tracking for this block is disabled"
|
999 |
msgstr "El seguimiento para este bloque está deshabilitado"
|
1000 |
|
1001 |
-
#: includes/functions-check-now.php:780 includes/functions.php:
|
1002 |
msgid "Double click to toggle controls in public reports"
|
1003 |
msgstr "Haz doble clic para alternar los controles en los informes públicos"
|
1004 |
|
1005 |
-
#: includes/functions-check-now.php:786 includes/functions.php:
|
1006 |
-
#:
|
|
|
1007 |
msgid "Loading..."
|
1008 |
msgstr "Cargando..."
|
1009 |
|
1010 |
-
#: includes/functions-check-now.php:807 includes/functions.php:
|
1011 |
msgid ""
|
1012 |
"Clear statistics data for the selected range - clear both dates to delete "
|
1013 |
"all data for this block"
|
@@ -1015,72 +1053,72 @@ msgstr ""
|
|
1015 |
"Borrar datos estadísticos para el rango seleccionado: borre ambas fechas "
|
1016 |
"para borrar todos los datos de este bloque"
|
1017 |
|
1018 |
-
#: includes/functions-check-now.php:811 includes/functions.php:
|
1019 |
msgid "Auto refresh data for the selected range every 60 seconds"
|
1020 |
msgstr ""
|
1021 |
"Actualización automática de datos para el rango seleccionado cada 60 segundos"
|
1022 |
|
1023 |
-
#: includes/functions-check-now.php:814 includes/functions-check-now.php:
|
1024 |
-
#: includes/functions.php:
|
1025 |
msgid "Load data for last month"
|
1026 |
msgstr "Cargar datos del último mes"
|
1027 |
|
1028 |
-
#: includes/functions-check-now.php:814 includes/functions-check-now.php:
|
1029 |
-
#: includes/functions.php:
|
1030 |
msgid "Last Month"
|
1031 |
msgstr "El mes pasado"
|
1032 |
|
1033 |
-
#: includes/functions-check-now.php:817 includes/functions-check-now.php:
|
1034 |
-
#: includes/functions.php:
|
1035 |
msgid "Load data for this month"
|
1036 |
msgstr "Cargar datos de este mes"
|
1037 |
|
1038 |
-
#: includes/functions-check-now.php:817 includes/functions-check-now.php:
|
1039 |
-
#: includes/functions.php:
|
1040 |
msgid "This Month"
|
1041 |
msgstr "Este mes"
|
1042 |
|
1043 |
-
#: includes/functions-check-now.php:820 includes/functions-check-now.php:
|
1044 |
-
#: includes/functions.php:
|
1045 |
msgid "Load data for this year"
|
1046 |
msgstr "Cargar datos de este año"
|
1047 |
|
1048 |
-
#: includes/functions-check-now.php:820 includes/functions-check-now.php:
|
1049 |
-
#: includes/functions.php:
|
1050 |
msgid "This Year"
|
1051 |
msgstr "Este año"
|
1052 |
|
1053 |
-
#: includes/functions-check-now.php:823 includes/functions-check-now.php:
|
1054 |
-
#: includes/functions.php:
|
1055 |
msgid "Load data for the last 15 days"
|
1056 |
msgstr "Cargar datos de los últimos 15 días"
|
1057 |
|
1058 |
-
#: includes/functions-check-now.php:826 includes/functions-check-now.php:
|
1059 |
-
#: includes/functions.php:
|
1060 |
msgid "Load data for the last 30 days"
|
1061 |
msgstr "Cargar datos de los últimos 30 días"
|
1062 |
|
1063 |
-
#: includes/functions-check-now.php:829 includes/functions-check-now.php:
|
1064 |
-
#: includes/functions.php:
|
1065 |
msgid "Load data for the last 90 days"
|
1066 |
msgstr "Cargar datos de los últimos 90 días"
|
1067 |
|
1068 |
-
#: includes/functions-check-now.php:832 includes/functions-check-now.php:
|
1069 |
-
#: includes/functions.php:
|
1070 |
msgid "Load data for the last 180 days"
|
1071 |
msgstr "Cargar datos de los últimos 180 días"
|
1072 |
|
1073 |
-
#: includes/functions-check-now.php:835 includes/functions-check-now.php:
|
1074 |
-
#: includes/functions.php:
|
1075 |
msgid "Load data for the last 365 days"
|
1076 |
msgstr "Cargar datos de los últimos 365 días"
|
1077 |
|
1078 |
-
#: includes/functions-check-now.php:845 includes/functions-check-now.php:
|
1079 |
-
#: includes/functions.php:
|
1080 |
msgid "Load data for the selected range"
|
1081 |
msgstr "Cargar datos para el rango seleccionado"
|
1082 |
|
1083 |
-
#: includes/functions-check-now.php:861 includes/functions.php:
|
1084 |
msgid ""
|
1085 |
"Import settings when saving - if checked, the encoded settings below will be "
|
1086 |
"imported for this block"
|
@@ -1088,11 +1126,11 @@ msgstr ""
|
|
1088 |
"Importar los ajustes al guardar: si está marcado, los ajustes codificados a "
|
1089 |
"continuación se importarán para este bloque"
|
1090 |
|
1091 |
-
#: includes/functions-check-now.php:861 includes/functions.php:
|
1092 |
msgid "Import settings for block"
|
1093 |
msgstr "Importar los ajustes para el bloque"
|
1094 |
|
1095 |
-
#: includes/functions-check-now.php:865 includes/functions.php:
|
1096 |
msgid ""
|
1097 |
"Import block name when saving - if checked and 'Import settings for block' "
|
1098 |
"is also checked, the name from encoded settings below will be imported for "
|
@@ -1102,41 +1140,41 @@ msgstr ""
|
|
1102 |
"marcado «Importar los ajustes para el bloque», el nombre de los ajustes "
|
1103 |
"codificados a continuación se importarán para este bloque"
|
1104 |
|
1105 |
-
#: includes/functions-check-now.php:865 includes/functions.php:
|
1106 |
msgid "Import block name"
|
1107 |
msgstr "Importar nombre de bloque"
|
1108 |
|
1109 |
-
#: includes/functions-check-now.php:869 includes/functions.php:
|
1110 |
msgid "Saved settings for block"
|
1111 |
msgstr "Ajustes guardados para el bloque"
|
1112 |
|
1113 |
-
#: includes/functions-check-now.php:882 includes/functions.php:
|
1114 |
msgid "Export / Import Ad Inserter Pro Settings"
|
1115 |
msgstr "Exportar / importar los ajustes de Ad Inserter Pro"
|
1116 |
|
1117 |
-
#: includes/functions-check-now.php:892 includes/functions.php:
|
1118 |
msgid "Are you sure you want to clear all statistics data for all blocks?"
|
1119 |
msgstr ""
|
1120 |
"¿Está seguro de que desea borrar todos los datos estadísticos de todos los "
|
1121 |
"bloques?"
|
1122 |
|
1123 |
-
#: includes/functions-check-now.php:894 includes/functions.php:
|
1124 |
msgid "Clear All Statistics Data"
|
1125 |
msgstr "Borrar todos los datos de estadísticas"
|
1126 |
|
1127 |
-
#: includes/functions-check-now.php:921 includes/functions.php:
|
1128 |
msgid "Toggle country/city editor"
|
1129 |
msgstr "Cambiar editor de país/ciudad"
|
1130 |
|
1131 |
-
#: includes/functions-check-now.php:927 includes/functions.php:
|
1132 |
msgid "IP Addresses"
|
1133 |
msgstr "Direcciones IP"
|
1134 |
|
1135 |
-
#: includes/functions-check-now.php:930 includes/functions.php:
|
1136 |
msgid "Toggle IP address editor"
|
1137 |
msgstr "Alternar editor de direcciones IP"
|
1138 |
|
1139 |
-
#: includes/functions-check-now.php:933 includes/functions.php:
|
1140 |
msgid ""
|
1141 |
"Comma separated IP addresses, you can also use partial IP addresses with * "
|
1142 |
"(ip-address-start*. *ip-address-pattern*, *ip-address-end)"
|
@@ -1145,51 +1183,51 @@ msgstr ""
|
|
1145 |
"parciales con * (dirección-ip-inicio*. *patrón-dirección-ip*, *dirección-ip-"
|
1146 |
"final)"
|
1147 |
|
1148 |
-
#: includes/functions-check-now.php:937
|
1149 |
msgid "Blacklist IP addresses"
|
1150 |
msgstr "Direcciones IP de la lista negra"
|
1151 |
|
1152 |
-
#: includes/functions-check-now.php:941
|
1153 |
msgid "Whitelist IP addresses"
|
1154 |
msgstr "Direcciones IP de la lista blanca"
|
1155 |
|
1156 |
-
#: includes/functions-check-now.php:952 includes/functions.php:
|
1157 |
msgid "Countries"
|
1158 |
msgstr "Países"
|
1159 |
|
1160 |
-
#: includes/functions-check-now.php:953 includes/functions.php:
|
1161 |
msgid "Cities"
|
1162 |
msgstr "Ciudades"
|
1163 |
|
1164 |
-
#: includes/functions-check-now.php:957 includes/functions-check-now.php:
|
1165 |
-
#: includes/functions.php:
|
1166 |
msgid "Toggle country editor"
|
1167 |
msgstr "Alternar editor de países"
|
1168 |
|
1169 |
-
#: includes/functions-check-now.php:960 includes/functions.php:
|
1170 |
msgid "Toggle city editor"
|
1171 |
msgstr "Alternar el editor de ciudades"
|
1172 |
|
1173 |
-
#: includes/functions-check-now.php:964 includes/functions-check-now.php:
|
1174 |
-
#: includes/functions.php:
|
1175 |
msgid "Comma separated country ISO Alpha-2 codes"
|
1176 |
msgstr "Códigos ISO Alpha-2 de países separados por comas"
|
1177 |
|
1178 |
-
#: includes/functions-check-now.php:968
|
1179 |
msgid "Blacklist countries"
|
1180 |
msgstr "Países de la lista negra"
|
1181 |
|
1182 |
-
#: includes/functions-check-now.php:972
|
1183 |
msgid "Whitelist countries"
|
1184 |
msgstr "Países de la lista blanca"
|
1185 |
|
1186 |
-
#: includes/functions-check-now.php:
|
1187 |
-
#: includes/functions.php:
|
1188 |
msgid "Enter license key"
|
1189 |
msgstr "Introduce la clave de licencia"
|
1190 |
|
1191 |
#. translators: %s: Ad Inserter Pro
|
1192 |
-
#: includes/functions-check-now.php:
|
1193 |
msgid ""
|
1194 |
"%s license key is not set. Plugin functionality is limited and updates are "
|
1195 |
"disabled."
|
@@ -1198,59 +1236,59 @@ msgstr ""
|
|
1198 |
"limitada y las actualizaciones están deshabilitadas."
|
1199 |
|
1200 |
#. translators: %s: Ad Inserter Pro
|
1201 |
-
#: includes/functions-check-now.php:
|
1202 |
msgid "Warning: %s plugin update server is not accessible"
|
1203 |
msgstr ""
|
1204 |
"Advertencia: el servidor de actualización del plugin %s no es accesible"
|
1205 |
|
1206 |
#. translators: updates are not available
|
1207 |
-
#: includes/functions-check-now.php:
|
1208 |
msgid "updates"
|
1209 |
msgstr "actualizaciones"
|
1210 |
|
1211 |
#. translators: updates are not available
|
1212 |
-
#: includes/functions-check-now.php:
|
1213 |
msgid "are not available"
|
1214 |
msgstr "no están disponible"
|
1215 |
|
1216 |
-
#: includes/functions-check-now.php:
|
1217 |
-
#: includes/functions.php:
|
1218 |
msgid "Check license key"
|
1219 |
msgstr "Comprueba la clave de licencia"
|
1220 |
|
1221 |
#. translators: %s: Ad Inserter Pro
|
1222 |
-
#: includes/functions-check-now.php:
|
1223 |
msgid "Invalid %s license key."
|
1224 |
msgstr "Clave de licencia %s no válida."
|
1225 |
|
1226 |
#. translators: %s: Ad Inserter Pro
|
1227 |
-
#: includes/functions-check-now.php:
|
1228 |
msgid "%s license expired. Plugin updates are disabled."
|
1229 |
msgstr ""
|
1230 |
"La licencia de %s expiró. Las actualizaciones de plugins están "
|
1231 |
"deshabilitadas."
|
1232 |
|
1233 |
-
#: includes/functions-check-now.php:
|
1234 |
msgid "Renew license"
|
1235 |
msgstr "Renovar licencia"
|
1236 |
|
1237 |
#. translators: %s: Ad Inserter Pro
|
1238 |
-
#: includes/functions-check-now.php:
|
1239 |
msgid "%s license overused. Plugin updates are disabled."
|
1240 |
msgstr ""
|
1241 |
"Licencia de %s sobreutilizada. Las actualizaciones de plugins están "
|
1242 |
"deshabilitadas."
|
1243 |
|
1244 |
-
#: includes/functions-check-now.php:
|
1245 |
msgid "Manage licenses"
|
1246 |
msgstr "Administrar licencias"
|
1247 |
|
1248 |
-
#: includes/functions-check-now.php:
|
1249 |
msgid "Upgrade license"
|
1250 |
msgstr "Actualizar licencia"
|
1251 |
|
1252 |
#. translators: 1, 2: HTML tags, 3: Ad Inserter Pro
|
1253 |
-
#: includes/functions-check-now.php:
|
1254 |
msgid ""
|
1255 |
"%1$s Warning: %2$s %3$s license key is not set. Plugin functionality is "
|
1256 |
"limited and updates are disabled."
|
@@ -1260,12 +1298,12 @@ msgstr ""
|
|
1260 |
"deshabilitadas."
|
1261 |
|
1262 |
#. translators: 1, 2,: HTML tags, 3: Ad Inserter Pro
|
1263 |
-
#: includes/functions-check-now.php:
|
1264 |
msgid "%1$s Warning: %2$s Invalid %3$s license key."
|
1265 |
msgstr "%1$s Advertencia: %2$s Clave de licencia %3$s no válida."
|
1266 |
|
1267 |
#. translators: 2, 3: HTML tags, 1: Ad Inserter Pro
|
1268 |
-
#: includes/functions-check-now.php:
|
1269 |
msgid ""
|
1270 |
"Hey, %1$s license has expired - plugin updates are now disabled. Please "
|
1271 |
"renew the license to enable updates. Check %2$s what you are missing. %3$s"
|
@@ -1275,7 +1313,7 @@ msgstr ""
|
|
1275 |
"actualizaciones. Comprueba %2$s lo que te falta. %3$s"
|
1276 |
|
1277 |
#. translators: 1, 3: HTML tags, 2: percentage
|
1278 |
-
#: includes/functions-check-now.php:
|
1279 |
msgid ""
|
1280 |
"During the license period and 30 days after the license has expired we offer "
|
1281 |
"%1$s %2$s discount on all license renewals and license upgrades. %3$s"
|
@@ -1284,24 +1322,24 @@ msgstr ""
|
|
1284 |
"caducado, ofrecemos %1$s %2$s de descuento en todas las renovaciones y "
|
1285 |
"actualizaciones de licencias. %3$s"
|
1286 |
|
1287 |
-
#: includes/functions-check-now.php:
|
1288 |
msgid "No, thank you."
|
1289 |
msgstr "No gracias."
|
1290 |
|
1291 |
-
#: includes/functions-check-now.php:
|
1292 |
msgid "Not now, maybe later."
|
1293 |
msgstr "Ahora no, tal vez luego."
|
1294 |
|
1295 |
-
#: includes/functions-check-now.php:
|
1296 |
msgid "Renew the licence"
|
1297 |
msgstr "Renovar la licencia"
|
1298 |
|
1299 |
-
#: includes/functions-check-now.php:
|
1300 |
msgid "Update license status"
|
1301 |
msgstr "Actualizar el estado de la licencia"
|
1302 |
|
1303 |
#. translators: 1, 2, 4, 5, 6, 7: HTML tags, 3: Ad Inserter Pro
|
1304 |
-
#: includes/functions-check-now.php:
|
1305 |
msgid ""
|
1306 |
"%1$s Warning: %2$s %3$s license overused. Plugin updates are disabled. %4$s "
|
1307 |
"Manage licenses %5$s — %6$s Upgrade license %7$s"
|
@@ -1311,108 +1349,109 @@ msgstr ""
|
|
1311 |
"Actualizar licencia %7$s"
|
1312 |
|
1313 |
#. Translators: %s: HTML tag
|
1314 |
-
#: includes/functions-check-now.php:
|
1315 |
msgid "Warning: %s MaxMind IP geolocation database not found."
|
1316 |
msgstr ""
|
1317 |
"Advertencia: No se encontró la base de datos de geolocalización IP %s "
|
1318 |
"MaxMind."
|
1319 |
|
1320 |
-
#: includes/functions-check-now.php:
|
1321 |
msgid "Geolocation"
|
1322 |
msgstr "Geolocalización"
|
1323 |
|
1324 |
-
#: includes/functions-check-now.php:
|
1325 |
-
#: settings.php:
|
1326 |
msgid "Exceptions"
|
1327 |
msgstr "Excepciones"
|
1328 |
|
1329 |
-
#: includes/functions-check-now.php:
|
1330 |
msgid "Multisite"
|
1331 |
msgstr "Multisitio"
|
1332 |
|
1333 |
-
#: includes/functions-check-now.php:
|
1334 |
-
#: settings.php:
|
1335 |
msgid "Tracking"
|
1336 |
msgstr "Seguimiento"
|
1337 |
|
1338 |
#. translators: %d: days, hours, minutes
|
1339 |
-
#: includes/functions-check-now.php:
|
1340 |
msgid "Scheduled in %d days %d hours %d minutes"
|
1341 |
msgstr "Programado en %d días %d horas %d minutos"
|
1342 |
|
1343 |
#. translators: %s: HTML dash separator, %d: days, hours, minutes, — is
|
1344 |
#. HTML code for long dash separator
|
1345 |
-
#: includes/functions-check-now.php:
|
1346 |
msgid "Active %s expires in %d days %d hours %d minutes"
|
1347 |
msgstr "El %s activo vence en %d días %d horas %d minutos"
|
1348 |
|
1349 |
-
#: includes/functions-check-now.php:
|
1350 |
msgid "Expired"
|
1351 |
msgstr "Caducado"
|
1352 |
|
1353 |
-
#: includes/functions-check-now.php:
|
1354 |
-
#: settings.php:
|
1355 |
msgid "and"
|
1356 |
msgstr "y"
|
1357 |
|
1358 |
-
#: includes/functions-check-now.php:
|
1359 |
msgid "fallback"
|
1360 |
msgstr "respaldo"
|
1361 |
|
1362 |
-
#: includes/functions-check-now.php:
|
1363 |
msgid "Block to be used when scheduling expires"
|
1364 |
msgstr "Bloque que se usará cuando caduca la programación"
|
1365 |
|
1366 |
-
#: includes/functions-check-now.php:
|
1367 |
msgid "Load in iframe"
|
1368 |
msgstr "Cargar en iframe"
|
1369 |
|
1370 |
-
#: includes/functions-check-now.php:
|
1371 |
-
#: includes/placeholders.php:387 settings.php:
|
1372 |
msgid "Width"
|
1373 |
msgstr "Ancho"
|
1374 |
|
1375 |
-
#: includes/functions-check-now.php:
|
1376 |
msgid "iframe width, empty means full width (100%)"
|
1377 |
msgstr "ancho del iframe, vacío significa ancho completo (100%)"
|
1378 |
|
1379 |
-
#: includes/functions-check-now.php:
|
1380 |
-
#: includes/placeholders.php:382 settings.php:
|
1381 |
msgid "Height"
|
1382 |
msgstr "Altura"
|
1383 |
|
1384 |
-
#: includes/functions-check-now.php:
|
1385 |
msgid "iframe height, empty means adjust it to iframe content height"
|
1386 |
msgstr ""
|
1387 |
"altura del iframe, vacío significa ajustarlo a la altura del contenido del "
|
1388 |
"iframe"
|
1389 |
|
1390 |
-
#: includes/functions-check-now.php:
|
1391 |
msgid "Ad label in iframe"
|
1392 |
msgstr "Etiqueta de anuncio en iframe"
|
1393 |
|
1394 |
-
#: includes/functions-check-now.php:
|
1395 |
msgid "Preview iframe code"
|
1396 |
msgstr "Vista previa del código de iframe"
|
1397 |
|
1398 |
-
#: includes/functions-check-now.php:
|
1399 |
-
#: includes/preview.php:
|
1400 |
msgid "Preview"
|
1401 |
msgstr "Vista previa"
|
1402 |
|
1403 |
-
#: includes/functions-check-now.php:
|
1404 |
-
#: settings.php:
|
1405 |
msgid "Limits"
|
1406 |
msgstr "Límites"
|
1407 |
|
1408 |
-
#: includes/functions-check-now.php:
|
1409 |
-
#: includes/functions-check-now.php:
|
1410 |
-
#: includes/functions.php:
|
|
|
1411 |
msgid "Ad Blocking"
|
1412 |
msgstr "Bloqueo de anuncios"
|
1413 |
|
1414 |
#. translators: 1, 2 and 3, 4: HTML tags
|
1415 |
-
#: includes/functions-check-now.php:
|
1416 |
msgid ""
|
1417 |
"%1$s WARNING: %2$s %3$s No wrapping %4$s style has no wrapping code needed "
|
1418 |
"for tracking!"
|
@@ -1422,7 +1461,7 @@ msgstr ""
|
|
1422 |
|
1423 |
#. translators: 1, 2, 4, 5: HTML tags, 3: Scroll with the content, 6: Above
|
1424 |
#. header
|
1425 |
-
#: includes/functions-check-now.php:
|
1426 |
msgid ""
|
1427 |
"%1$s WARNING: %2$s vertical position %3$s needs %4$s Output buffering %5$s "
|
1428 |
"enabled and automatic insertion %6$s!"
|
@@ -1430,23 +1469,23 @@ msgstr ""
|
|
1430 |
"%1$s Advertencia: %2$s posición vertical %3$s necesita %4$s Búfer de salida "
|
1431 |
"%5$s habilitado e inserción automática %6$s!"
|
1432 |
|
1433 |
-
#: includes/functions-check-now.php:
|
1434 |
msgid "Click fraud protection is globally disabled"
|
1435 |
msgstr "La protección contra el fraude de clics está deshabilitada globalmente"
|
1436 |
|
1437 |
-
#: includes/functions-check-now.php:
|
1438 |
msgid "Max clicks per time period are not defined"
|
1439 |
msgstr "Los clics máximos por período de tiempo no están definidos"
|
1440 |
|
1441 |
#. Translators: Max n impressions
|
1442 |
-
#: includes/functions-check-now.php:
|
1443 |
msgid "General limits"
|
1444 |
msgstr "Límites generales"
|
1445 |
|
1446 |
#. Translators: Max n impressions per x days
|
1447 |
-
#: includes/functions-check-now.php:
|
1448 |
-
#: includes/functions-check-now.php:
|
1449 |
-
#: includes/functions.php:
|
1450 |
msgid "Current value"
|
1451 |
msgstr "Valor actual"
|
1452 |
|
@@ -1458,18 +1497,18 @@ msgstr "Valor actual"
|
|
1458 |
#. Translators: Max n impressions per x days
|
1459 |
#. Translators: Max n clicks
|
1460 |
#. Translators: Max n clicks per x days
|
1461 |
-
#: includes/functions-check-now.php:
|
1462 |
-
#: includes/functions-check-now.php:
|
1463 |
-
#: includes/functions-check-now.php:
|
1464 |
-
#: includes/functions-check-now.php:
|
1465 |
-
#: includes/functions.php:
|
1466 |
-
#: includes/functions.php:
|
1467 |
-
#: includes/functions.php:
|
1468 |
-
#: includes/functions.php:
|
1469 |
msgid "Max"
|
1470 |
msgstr "Máx"
|
1471 |
|
1472 |
-
#: includes/functions-check-now.php:
|
1473 |
msgid ""
|
1474 |
"Maximum number of impressions for this block. Empty means no general "
|
1475 |
"impression limit."
|
@@ -1481,16 +1520,16 @@ msgstr ""
|
|
1481 |
#. Translators: Max n impressions per x days
|
1482 |
#. Translators: Max n impressions
|
1483 |
#. Translators: Max n impressions per x days
|
1484 |
-
#: includes/functions-check-now.php:
|
1485 |
-
#: includes/functions-check-now.php:
|
1486 |
-
#: includes/functions.php:
|
1487 |
-
#: includes/functions.php:
|
1488 |
msgid "impression"
|
1489 |
msgid_plural "impressions"
|
1490 |
msgstr[0] "impresión"
|
1491 |
msgstr[1] "impresiones"
|
1492 |
|
1493 |
-
#: includes/functions-check-now.php:
|
1494 |
msgid ""
|
1495 |
"Maximum number of impressions per time period. Empty means no time limit."
|
1496 |
msgstr ""
|
@@ -1501,15 +1540,16 @@ msgstr ""
|
|
1501 |
#. Translators: Max n clicks per x days
|
1502 |
#. Translators: Max n impressions per x days
|
1503 |
#. Translators: Max n clicks per x days
|
1504 |
-
#: includes/functions-check-now.php:
|
1505 |
-
#: includes/functions-check-now.php:
|
1506 |
-
#: includes/functions.php:
|
1507 |
-
#: includes/functions.php:
|
|
|
1508 |
msgid "per"
|
1509 |
msgstr "por"
|
1510 |
|
1511 |
-
#: includes/functions-check-now.php:
|
1512 |
-
#: includes/functions.php:
|
1513 |
msgid "Time period in days. Empty means no time limit."
|
1514 |
msgstr ""
|
1515 |
"Período de tiempo en días. Vacío significa que no hay limite de tiempo."
|
@@ -1519,20 +1559,20 @@ msgstr ""
|
|
1519 |
#. Translators: Max n impressions per x days
|
1520 |
#. Translators: Max n clicks per x days
|
1521 |
#. Translators: Don't show for x days
|
1522 |
-
#: includes/functions-check-now.php:
|
1523 |
-
#: includes/functions-check-now.php:
|
1524 |
-
#: includes/functions-check-now.php:
|
1525 |
-
#: includes/functions.php:
|
1526 |
-
#: includes/functions.php:
|
1527 |
-
#: includes/functions.php:
|
1528 |
-
#:
|
1529 |
-
#: strings.php:223
|
1530 |
msgid "day"
|
1531 |
msgid_plural "days"
|
1532 |
msgstr[0] "día"
|
1533 |
msgstr[1] "días"
|
1534 |
|
1535 |
-
#: includes/functions-check-now.php:
|
1536 |
msgid ""
|
1537 |
"Maximum number of clicks on this block. Empty means no general click limit."
|
1538 |
msgstr ""
|
@@ -1543,28 +1583,29 @@ msgstr ""
|
|
1543 |
#. Translators: Max n clicks per x days
|
1544 |
#. Translators: Max n clicks
|
1545 |
#. Translators: Max n clicks per x days
|
1546 |
-
#: includes/functions-check-now.php:
|
1547 |
-
#: includes/functions-check-now.php:
|
1548 |
-
#: includes/functions-check-now.php:
|
1549 |
-
#: includes/functions.php:
|
1550 |
-
#: includes/functions.php:
|
|
|
1551 |
msgid "click"
|
1552 |
msgid_plural "clicks"
|
1553 |
msgstr[0] "clic"
|
1554 |
msgstr[1] "clics"
|
1555 |
|
1556 |
-
#: includes/functions-check-now.php:
|
1557 |
msgid "Maximum number of clicks per time period. Empty means no time limit."
|
1558 |
msgstr ""
|
1559 |
"Máximo número de clics por período de tiempo. Vacío significa que no hay "
|
1560 |
"limite de tiempo."
|
1561 |
|
1562 |
-
#: includes/functions-check-now.php:
|
1563 |
msgid "Individual visitor limits"
|
1564 |
msgstr "Límites de visitantes individuales"
|
1565 |
|
1566 |
-
#: includes/functions-check-now.php:
|
1567 |
-
#: includes/functions.php:
|
1568 |
msgid ""
|
1569 |
"When specified number of clicks on this block for a visitor will be reached "
|
1570 |
"in the specified time period, all blocks that have click fraud protection "
|
@@ -1577,11 +1618,11 @@ msgstr ""
|
|
1577 |
"visitante durante el período de tiempo definido en la configuración general "
|
1578 |
"del plugin."
|
1579 |
|
1580 |
-
#: includes/functions-check-now.php:
|
1581 |
msgid "Trigger click fraud protection"
|
1582 |
msgstr "Cambiar la protección contra el fraude de clics"
|
1583 |
|
1584 |
-
#: includes/functions-check-now.php:
|
1585 |
msgid ""
|
1586 |
"Maximum number of impressions of this block for each visitor. Empty means no "
|
1587 |
"impression limit."
|
@@ -1589,7 +1630,7 @@ msgstr ""
|
|
1589 |
"Número máximo de impresiones de este bloque para cada visitante. Vacío "
|
1590 |
"significa que no hay límite de impresiones."
|
1591 |
|
1592 |
-
#: includes/functions-check-now.php:
|
1593 |
msgid ""
|
1594 |
"Maximum number of impressions per time period for each visitor. Empty means "
|
1595 |
"no impression limit per time period for visitors."
|
@@ -1598,8 +1639,9 @@ msgstr ""
|
|
1598 |
"Vacío significa que no hay límite de impresiones por período de tiempo para "
|
1599 |
"los visitantes."
|
1600 |
|
1601 |
-
#: includes/functions-check-now.php:
|
1602 |
-
#: includes/functions.php:
|
|
|
1603 |
msgid ""
|
1604 |
"Time period in days. Use decimal value (with decimal point) for shorter "
|
1605 |
"periods. Empty means no time limit."
|
@@ -1607,7 +1649,7 @@ msgstr ""
|
|
1607 |
"Periodo de tiempo en días. Use valor decimal (con punto decimal) para "
|
1608 |
"períodos más cortos. Vacío significa que no hay límite de tiempo."
|
1609 |
|
1610 |
-
#: includes/functions-check-now.php:
|
1611 |
msgid ""
|
1612 |
"Maximum number of clicks on this block for each visitor. Empty means no "
|
1613 |
"click limit."
|
@@ -1615,7 +1657,8 @@ msgstr ""
|
|
1615 |
"Número máximo de clics en este bloque para cada visitante. Vacío significa "
|
1616 |
"que no hay límite."
|
1617 |
|
1618 |
-
#: includes/functions-check-now.php:
|
|
|
1619 |
msgid ""
|
1620 |
"Maximum number of clicks per time period for each visitor. Empty means no "
|
1621 |
"click limit per time period for visitors."
|
@@ -1624,33 +1667,33 @@ msgstr ""
|
|
1624 |
"significa que no hay límite de clics por período de tiempo para los "
|
1625 |
"visitantes."
|
1626 |
|
1627 |
-
#: includes/functions-check-now.php:
|
1628 |
msgid "When ad blocking is detected"
|
1629 |
msgstr "Cuando se detecta bloqueo de anuncios"
|
1630 |
|
1631 |
-
#: includes/functions-check-now.php:
|
1632 |
msgid "replacement"
|
1633 |
msgstr "reemplazo"
|
1634 |
|
1635 |
-
#: includes/functions-check-now.php:
|
1636 |
msgid "Block to be shown when ad blocking is detected"
|
1637 |
msgstr "Bloque que se muestra cuando se detecta el bloqueo de anuncios"
|
1638 |
|
1639 |
-
#: includes/functions-check-now.php:
|
1640 |
msgctxt "replacement"
|
1641 |
msgid "None"
|
1642 |
msgstr "Ninguno"
|
1643 |
|
1644 |
-
#: includes/functions-check-now.php:
|
1645 |
-
#: includes/functions.php:
|
1646 |
msgid "Close button"
|
1647 |
msgstr "Botón cerrar"
|
1648 |
|
1649 |
-
#: includes/functions-check-now.php:
|
1650 |
msgid "Auto close after"
|
1651 |
msgstr "Cierre automático después"
|
1652 |
|
1653 |
-
#: includes/functions-check-now.php:
|
1654 |
msgid ""
|
1655 |
"Time in seconds in which the ad will automatically close. Leave empty to "
|
1656 |
"disable auto closing."
|
@@ -1659,11 +1702,11 @@ msgstr ""
|
|
1659 |
"vacío para deshabilitar el cierre automático."
|
1660 |
|
1661 |
#. Translators: Don't show for x days
|
1662 |
-
#: includes/functions-check-now.php:
|
1663 |
msgid "Don't show for"
|
1664 |
msgstr "No se presente durante"
|
1665 |
|
1666 |
-
#: includes/functions-check-now.php:
|
1667 |
msgid ""
|
1668 |
"Time in days in which closed ad will not be shown again. Use decimal value "
|
1669 |
"(with decimal point) for shorter time period or leave empty to show it again "
|
@@ -1674,11 +1717,12 @@ msgstr ""
|
|
1674 |
"déjalo en blanco para mostrarlo nuevamente en la recarga de la página."
|
1675 |
|
1676 |
#. Translators: Delay showing for x pageviews
|
1677 |
-
#: includes/functions-check-now.php:
|
|
|
1678 |
msgid "Delay showing for"
|
1679 |
msgstr "Retraso para mostrar"
|
1680 |
|
1681 |
-
#: includes/functions-check-now.php:
|
1682 |
msgid ""
|
1683 |
"Number of pageviews before the code is inserted (and ad displayed). Leave "
|
1684 |
"empty to insert the code for the first pageview."
|
@@ -1689,21 +1733,21 @@ msgstr ""
|
|
1689 |
|
1690 |
#. Translators: Delay showing for x pageviews
|
1691 |
#. Translators: Show every x pageviews
|
1692 |
-
#: includes/functions-check-now.php:
|
1693 |
-
#: includes/functions.php:
|
1694 |
msgid "pageview"
|
1695 |
msgid_plural "pageviews"
|
1696 |
msgstr[0] "página vista"
|
1697 |
msgstr[1] "páginas vistas"
|
1698 |
|
1699 |
#. Translators: Show every x pageviews
|
1700 |
-
#: includes/functions-check-now.php:
|
1701 |
msgid "Show every"
|
1702 |
msgid_plural "Show every"
|
1703 |
msgstr[0] "Mostrar cada"
|
1704 |
msgstr[1] "Mostrar cada"
|
1705 |
|
1706 |
-
#: includes/functions-check-now.php:
|
1707 |
msgid ""
|
1708 |
"Number of pageviews to insert the code again. Leave empty to insert the code "
|
1709 |
"for every pageview."
|
@@ -1711,28 +1755,29 @@ msgstr ""
|
|
1711 |
"Número de páginas vistas para volver a insertar el código. Déjalo en blanco "
|
1712 |
"para insertar el código para cada página vista."
|
1713 |
|
1714 |
-
#: includes/functions-check-now.php:
|
|
|
1715 |
msgid "Lazy loading"
|
1716 |
msgstr "Carga diferida"
|
1717 |
|
1718 |
#. Translators: %s MaxMind
|
1719 |
-
#: includes/functions-check-now.php:
|
1720 |
msgid "This product includes GeoLite2 data created by %s"
|
1721 |
msgstr "Este producto incluye datos GeoLite2 creados por %s"
|
1722 |
|
1723 |
-
#: includes/functions-check-now.php:
|
1724 |
msgid "IP geolocation database"
|
1725 |
msgstr "Base de datos de geolocalización IP"
|
1726 |
|
1727 |
-
#: includes/functions-check-now.php:
|
1728 |
msgid "Select IP geolocation database."
|
1729 |
msgstr "Selecciona la base de datos de geolocalización de IP."
|
1730 |
|
1731 |
-
#: includes/functions-check-now.php:
|
1732 |
msgid "Automatic database updates"
|
1733 |
msgstr "Actualizaciones automáticas de bases de datos"
|
1734 |
|
1735 |
-
#: includes/functions-check-now.php:
|
1736 |
msgid ""
|
1737 |
"Automatically download and update free GeoLite2 IP geolocation database by "
|
1738 |
"MaxMind"
|
@@ -1740,11 +1785,11 @@ msgstr ""
|
|
1740 |
"Descargue y actualice automáticamente la base de datos de geolocalización IP "
|
1741 |
"GeoLite2 gratuita de MaxMind"
|
1742 |
|
1743 |
-
#: includes/functions-check-now.php:
|
1744 |
msgid "Database"
|
1745 |
msgstr "Base de datos"
|
1746 |
|
1747 |
-
#: includes/functions-check-now.php:
|
1748 |
msgid ""
|
1749 |
"Absolute path starting with '/' or relative path to the MaxMind database file"
|
1750 |
msgstr ""
|
@@ -1752,15 +1797,15 @@ msgstr ""
|
|
1752 |
"datos MaxMind"
|
1753 |
|
1754 |
#. translators: %d: group number
|
1755 |
-
#: includes/functions-check-now.php:
|
1756 |
msgid "Group %d"
|
1757 |
msgstr "Grupo %d"
|
1758 |
|
1759 |
-
#: includes/functions-check-now.php:
|
1760 |
msgid "countries"
|
1761 |
msgstr "países"
|
1762 |
|
1763 |
-
#: includes/functions-check-now.php:
|
1764 |
msgid ""
|
1765 |
"Enable impression and click tracking. You also need to enable tracking for "
|
1766 |
"each block you want to track."
|
@@ -1768,34 +1813,34 @@ msgstr ""
|
|
1768 |
"Habilita el seguimiento de impresiones y clics. También debe habilitar el "
|
1769 |
"seguimiento para cada bloque que desee rastrear."
|
1770 |
|
1771 |
-
#: includes/functions-check-now.php:
|
1772 |
msgid "Generate report"
|
1773 |
msgstr "Generar informe"
|
1774 |
|
1775 |
-
#: includes/functions-check-now.php:
|
1776 |
msgid "Impression and Click Tracking"
|
1777 |
msgstr "Seguimiento de impresiones y clics"
|
1778 |
|
1779 |
-
#: includes/functions-check-now.php:
|
1780 |
-
#: settings.php:
|
1781 |
msgctxt "ad blocking detection"
|
1782 |
msgid "NOT ENABLED"
|
1783 |
msgstr "NO ACTIVADO"
|
1784 |
|
1785 |
-
#: includes/functions-check-now.php:
|
1786 |
msgid "Internal"
|
1787 |
msgstr "Interno"
|
1788 |
|
1789 |
-
#: includes/functions-check-now.php:
|
1790 |
msgid "Track impressions and clicks with internal tracking and statistics"
|
1791 |
msgstr ""
|
1792 |
"Seguimiento de impresiones y clics con seguimiento interno y estadísticas"
|
1793 |
|
1794 |
-
#: includes/functions-check-now.php:
|
1795 |
msgid "External"
|
1796 |
msgstr "Externo"
|
1797 |
|
1798 |
-
#: includes/functions-check-now.php:
|
1799 |
msgid ""
|
1800 |
"Track impressions and clicks with Google Analytics or Matomo (needs tracking "
|
1801 |
"code installed)"
|
@@ -1803,29 +1848,29 @@ msgstr ""
|
|
1803 |
"Seguimiento de impresiones y clics con Google Analytics o Matomo (necesita "
|
1804 |
"un código de seguimiento instalado)"
|
1805 |
|
1806 |
-
#: includes/functions-check-now.php:
|
1807 |
msgid "Track Pageviews"
|
1808 |
msgstr "Seguimiento de páginas vistas"
|
1809 |
|
1810 |
-
#: includes/functions-check-now.php:
|
1811 |
msgid "Track Pageviews by Device (as configured for viewports)"
|
1812 |
msgstr ""
|
1813 |
"Seguimiento de páginas vistas por dispositivo (según la configuración de las "
|
1814 |
"ventanas gráficas)"
|
1815 |
|
1816 |
-
#: includes/functions-check-now.php:
|
1817 |
msgid "Track for Logged in Users"
|
1818 |
msgstr "Seguimiento de usuarios conectados"
|
1819 |
|
1820 |
-
#: includes/functions-check-now.php:
|
1821 |
msgid "Track impressions and clicks from logged in users"
|
1822 |
msgstr "Seguimiento de impresiones y clics de usuarios conectados"
|
1823 |
|
1824 |
-
#: includes/functions-check-now.php:
|
1825 |
msgid "Click Detection"
|
1826 |
msgstr "Detección de clics"
|
1827 |
|
1828 |
-
#: includes/functions-check-now.php:
|
1829 |
msgid ""
|
1830 |
"Standard method detects clicks only on banners with links, Advanced method "
|
1831 |
"can detect clicks on any kind of ads, but it is slightly less accurate"
|
@@ -1834,21 +1879,21 @@ msgstr ""
|
|
1834 |
"avanzado puede detectar clics en cualquier tipo de anuncios, pero es un poco "
|
1835 |
"menos preciso"
|
1836 |
|
1837 |
-
#: includes/functions-check-now.php:
|
1838 |
msgid "Click fraud protection"
|
1839 |
msgstr "Haz clic en protección contra el fraude"
|
1840 |
|
1841 |
-
#: includes/functions-check-now.php:
|
1842 |
msgid "Globally enable click fraud protection for selected blocks."
|
1843 |
msgstr ""
|
1844 |
"Habilite globalmente la protección contra fraude de clics para bloques "
|
1845 |
"seleccionados."
|
1846 |
|
1847 |
-
#: includes/functions-check-now.php:
|
1848 |
msgid "Protection time"
|
1849 |
msgstr "Tiempo de protección"
|
1850 |
|
1851 |
-
#: includes/functions-check-now.php:
|
1852 |
msgid ""
|
1853 |
"Time period in days in which blocks with enabled click fraud protection will "
|
1854 |
"be hidden. Use decimal value (with decimal point) for shorter periods."
|
@@ -1857,11 +1902,11 @@ msgstr ""
|
|
1857 |
"contra fraude de clics habilitada. Use valor decimal (con punto decimal) "
|
1858 |
"para períodos más cortos."
|
1859 |
|
1860 |
-
#: includes/functions-check-now.php:
|
1861 |
msgid "Report header image"
|
1862 |
msgstr "Imagen de cabecera del informe"
|
1863 |
|
1864 |
-
#: includes/functions-check-now.php:
|
1865 |
msgid ""
|
1866 |
"Image or logo to be displayed in the header of the statistins report. "
|
1867 |
"Absolute path starting with '/' or relative path to the image file. Clear to "
|
@@ -1871,16 +1916,16 @@ msgstr ""
|
|
1871 |
"estadísticas. Ruta absoluta que comienza con «/» o ruta relativa al archivo "
|
1872 |
"de imagen. Borrar para restablecer la imagen predeterminada."
|
1873 |
|
1874 |
-
#: includes/functions-check-now.php:
|
1875 |
-
#: strings.php:
|
1876 |
msgid "Select or upload header image"
|
1877 |
msgstr "Seleccionar o subir una imagen de cabecera"
|
1878 |
|
1879 |
-
#: includes/functions-check-now.php:
|
1880 |
msgid "Report header title"
|
1881 |
msgstr "Título de la cabecera del informe"
|
1882 |
|
1883 |
-
#: includes/functions-check-now.php:
|
1884 |
msgid ""
|
1885 |
"Title to be displayed in the header of the statistics report. Text or HTML "
|
1886 |
"code, clear to reset to default text."
|
@@ -1888,11 +1933,11 @@ msgstr ""
|
|
1888 |
"Título que se mostrará en la cabecera del informe de estadísticas. Texto o "
|
1889 |
"código HTML, desactívelo para restablecer el texto predeterminado."
|
1890 |
|
1891 |
-
#: includes/functions-check-now.php:
|
1892 |
msgid "Report header description"
|
1893 |
msgstr "Descripción de la cabecera del informe"
|
1894 |
|
1895 |
-
#: includes/functions-check-now.php:
|
1896 |
msgid ""
|
1897 |
"Description to be displayed in the header of the statistics report. Text or "
|
1898 |
"HTML code, clear to reset to default text."
|
@@ -1900,11 +1945,11 @@ msgstr ""
|
|
1900 |
"Descripción que se mostrará en la cabecera del informe de estadísticas. "
|
1901 |
"Texto o código HTML, desactívelo para restablecer el texto predeterminado."
|
1902 |
|
1903 |
-
#: includes/functions-check-now.php:
|
1904 |
msgid "Report footer"
|
1905 |
msgstr "Pie de pagina del informe"
|
1906 |
|
1907 |
-
#: includes/functions-check-now.php:
|
1908 |
msgid ""
|
1909 |
"Text to be displayed in the footer of the statistics report. Clear to reset "
|
1910 |
"to default text."
|
@@ -1912,120 +1957,121 @@ msgstr ""
|
|
1912 |
"Texto que se mostrará en el pie de página del informe de estadísticas. "
|
1913 |
"Borrar para restablecer el texto predeterminado."
|
1914 |
|
1915 |
-
#: includes/functions-check-now.php:
|
1916 |
msgid "Public report key"
|
1917 |
msgstr "Clave de informe público"
|
1918 |
|
1919 |
-
#: includes/functions-check-now.php:
|
1920 |
msgid "String to generate unique report IDs. Clear to reset to default value."
|
1921 |
msgstr ""
|
1922 |
"Cadena para generar ID de informes únicos. Borre para restablecer el valor "
|
1923 |
"predeterminado."
|
1924 |
|
1925 |
-
#: includes/functions-check-now.php:
|
1926 |
msgid "Are you sure you want to clear all exceptions for block"
|
1927 |
msgstr "Seguro que desea borrar todas las excepciones para el bloque"
|
1928 |
|
1929 |
-
#: includes/functions-check-now.php:
|
1930 |
msgid "Clear all exceptions for block"
|
1931 |
msgstr "Borrar todas las excepciones para el bloque"
|
1932 |
|
1933 |
-
#: includes/functions-check-now.php:
|
1934 |
msgid "Are you sure you want to clear all exceptions?"
|
1935 |
msgstr "¿Seguro que quieres borrar todas las excepciones?"
|
1936 |
|
1937 |
-
#: includes/functions-check-now.php:
|
1938 |
msgid "Clear all exceptions for all blocks"
|
1939 |
msgstr "Borrar todas las excepciones para todos los bloques"
|
1940 |
|
1941 |
-
#: includes/functions-check-now.php:
|
1942 |
-
#: settings.php:
|
1943 |
msgid "Type"
|
1944 |
msgstr "Tipo"
|
1945 |
|
1946 |
-
#: includes/functions-check-now.php:
|
|
|
1947 |
msgid "View"
|
1948 |
msgstr "Ver"
|
1949 |
|
1950 |
-
#: includes/functions-check-now.php:
|
1951 |
-
#: includes/functions-check-now.php:
|
1952 |
-
#: includes/functions.php:
|
1953 |
-
#: includes/placeholders.php:351 includes/preview.php:
|
1954 |
-
#: settings.php:
|
1955 |
msgid "Edit"
|
1956 |
msgstr "Editar"
|
1957 |
|
1958 |
-
#: includes/functions-check-now.php:
|
1959 |
msgid "Are you sure you want to clear all exceptions for"
|
1960 |
msgstr "Seguro que quieres vaciar todas las excepciones para"
|
1961 |
|
1962 |
-
#: includes/functions-check-now.php:
|
1963 |
msgid "Clear all exceptions for"
|
1964 |
msgstr "Vaciar todas las excepciones para"
|
1965 |
|
1966 |
-
#: includes/functions-check-now.php:
|
1967 |
msgid "No exceptions"
|
1968 |
msgstr "Sin excepciones"
|
1969 |
|
1970 |
#. translators: %s: Ad Inserter Pro
|
1971 |
-
#: includes/functions-check-now.php:
|
1972 |
msgid "%s options for network blogs"
|
1973 |
msgstr "%s opciones para blogs de red"
|
1974 |
|
1975 |
#. translators: %s: Ad Inserter Pro
|
1976 |
-
#: includes/functions-check-now.php:
|
1977 |
msgid "Enable %s widgets for sub-sites"
|
1978 |
msgstr "Habilitar widgets %s para subsitios"
|
1979 |
|
1980 |
-
#: includes/functions-check-now.php:
|
1981 |
msgid "Widgets"
|
1982 |
msgstr "Widget"
|
1983 |
|
1984 |
-
#: includes/functions-check-now.php:
|
1985 |
msgid "Enable PHP code processing for sub-sites"
|
1986 |
msgstr "Habilitar procesamiento de código PHP por los subsitios"
|
1987 |
|
1988 |
-
#: includes/functions-check-now.php:
|
1989 |
msgid "PHP Processing"
|
1990 |
msgstr "Procesamiento PHP"
|
1991 |
|
1992 |
#. translators: %s: Ad Inserter Pro
|
1993 |
-
#: includes/functions-check-now.php:
|
1994 |
msgid "Enable %s block exceptions in post/page editor for sub-sites"
|
1995 |
msgstr ""
|
1996 |
"Habilitar las excepciones de bloque %s en el editor de entradas/páginas para "
|
1997 |
"subsitios"
|
1998 |
|
1999 |
-
#: includes/functions-check-now.php:
|
2000 |
msgid "Post/Page exceptions"
|
2001 |
msgstr "Excepciones de entradas/páginas"
|
2002 |
|
2003 |
#. translators: %s: Ad Inserter Pro
|
2004 |
-
#: includes/functions-check-now.php:
|
2005 |
msgid "Enable %s settings page for sub-sites"
|
2006 |
msgstr "Habilitar la página de ajustes %s para subsitios"
|
2007 |
|
2008 |
-
#: includes/functions-check-now.php:
|
2009 |
msgid "Settings page"
|
2010 |
msgstr "Página de ajustes"
|
2011 |
|
2012 |
#. translators: %s: Ad Inserter Pro
|
2013 |
-
#: includes/functions-check-now.php:
|
2014 |
msgid "Enable %s settings of main site to be used for all blogs"
|
2015 |
msgstr ""
|
2016 |
"Habilitar la página de los ajustes %s del sitio principal para que se use en "
|
2017 |
"todos los blogs"
|
2018 |
|
2019 |
-
#: includes/functions-check-now.php:
|
2020 |
msgid "Main site settings used for all blogs"
|
2021 |
msgstr "Configuración del sitio principal utilizada para todos los blogs"
|
2022 |
|
2023 |
-
#: includes/functions-check-now.php:
|
2024 |
-
#: settings.php:
|
2025 |
msgid "Ad Blocking Detection"
|
2026 |
msgstr "Detección de bloqueo de anuncios"
|
2027 |
|
2028 |
-
#: includes/functions-check-now.php:
|
2029 |
msgid ""
|
2030 |
"Standard method is reliable but should be used only if Advanced method does "
|
2031 |
"not work. Advanced method recreates files used for detection with random "
|
@@ -2037,219 +2083,306 @@ msgstr ""
|
|
2037 |
"detección con nombres aleatorios; sin embargo, es posible que no funcione si "
|
2038 |
"los scripts de la carpeta de carga no son de acceso público"
|
2039 |
|
2040 |
-
#: includes/functions-check-now.php:
|
2041 |
-
#: includes/functions-check-now.php:
|
2042 |
-
#: includes/functions.php:
|
2043 |
msgid "AD BLOCKING"
|
2044 |
msgstr "BLOQUEO DE ANUNCIOS"
|
2045 |
|
2046 |
-
#: includes/functions-check-now.php:
|
2047 |
-
#: includes/functions-check-now.php:
|
2048 |
-
#: includes/functions.php:
|
2049 |
-
#: includes/functions.php:
|
2050 |
msgid "BLOCK INSERTED BUT NOT VISIBLE"
|
2051 |
msgstr "BLOQUE INSERTADO PERO NO VISIBLE"
|
2052 |
|
2053 |
-
#: includes/functions-check-now.php:
|
2054 |
-
#: includes/functions-check-now.php:
|
2055 |
-
#: includes/functions.php:
|
2056 |
msgid "NO AD BLOCKING"
|
2057 |
msgstr "SIN BLOQUEO DE ANUNCIOS"
|
2058 |
|
2059 |
-
#: includes/functions-check-now.php:
|
2060 |
-
#: includes/functions.php:
|
2061 |
msgid "AD BLOCKING REPLACEMENT"
|
2062 |
msgstr "REEMPLAZO DEL BLOQUEO DE ANUNCIOS"
|
2063 |
|
2064 |
-
#: includes/functions-check-now.php:
|
2065 |
-
#: includes/functions.php:
|
2066 |
msgid "Pageviews"
|
2067 |
msgstr "Páginas vistas"
|
2068 |
|
2069 |
-
#: includes/functions-check-now.php:
|
|
|
2070 |
msgctxt "Version"
|
2071 |
msgid "Unknown"
|
2072 |
msgstr "Desconocida"
|
2073 |
|
2074 |
-
#: includes/functions-check-now.php:
|
|
|
2075 |
msgctxt "Times"
|
2076 |
msgid "DISPLAYED"
|
2077 |
msgstr "VISUALIZADO"
|
2078 |
|
2079 |
-
#: includes/functions-check-now.php:
|
|
|
2080 |
msgid "No version"
|
2081 |
msgstr "Sin versión"
|
2082 |
|
2083 |
-
#: includes/functions-check-now.php:
|
|
|
2084 |
msgctxt "Times"
|
2085 |
msgid "BLOCKED"
|
2086 |
msgstr "BLOQUEADO"
|
2087 |
|
2088 |
-
#: includes/functions-check-now.php:
|
2089 |
msgid "Impressions"
|
2090 |
msgstr "Impresiones"
|
2091 |
|
2092 |
-
#: includes/functions-check-now.php:
|
2093 |
-
#: includes/functions-check-now.php:
|
2094 |
-
#: includes/functions.php:
|
2095 |
msgid "Clicks"
|
2096 |
msgstr "Clics"
|
2097 |
|
2098 |
-
#: includes/functions-check-now.php:
|
2099 |
msgid "events"
|
2100 |
msgstr "eventos"
|
2101 |
|
2102 |
-
#: includes/functions-check-now.php:
|
2103 |
msgid "Ad Blocking Share"
|
2104 |
msgstr "Compartir bloque de anuncios"
|
2105 |
|
2106 |
#. translators: CTR as Click Through Rate
|
2107 |
-
#: includes/functions-check-now.php:
|
2108 |
-
#: includes/functions.php:
|
2109 |
msgid "CTR"
|
2110 |
msgstr "CTR"
|
2111 |
|
2112 |
-
#: includes/functions-check-now.php:
|
2113 |
msgid "pageviews"
|
2114 |
msgid_plural "pageviews"
|
2115 |
msgstr[0] "página vista"
|
2116 |
msgstr[1] "páginas vistas"
|
2117 |
|
2118 |
-
#: includes/functions-check-now.php:
|
2119 |
msgid "impressions"
|
2120 |
msgid_plural "impressions"
|
2121 |
msgstr[0] "impresión"
|
2122 |
msgstr[1] "impresiones"
|
2123 |
|
2124 |
-
#: includes/functions-check-now.php:
|
2125 |
msgid "event"
|
2126 |
msgid_plural "events"
|
2127 |
msgstr[0] "evento"
|
2128 |
msgstr[1] "eventos"
|
2129 |
|
2130 |
-
#: includes/functions-check-now.php:
|
2131 |
msgctxt "Pageviews / Impressions"
|
2132 |
msgid "Average"
|
2133 |
msgstr "Promedio"
|
2134 |
|
2135 |
-
#: includes/functions-check-now.php:
|
2136 |
msgctxt "Ad Blocking / Clicks"
|
2137 |
msgid "Average"
|
2138 |
msgstr "Promedio"
|
2139 |
|
2140 |
-
#: includes/functions-check-now.php:
|
2141 |
msgctxt "Ad Blocking Share / CTR"
|
2142 |
msgid "Average"
|
2143 |
msgstr "Promedio"
|
2144 |
|
2145 |
#. Translators: %s: Ad Inserter Pro
|
2146 |
-
#: includes/functions-check-now.php:
|
2147 |
-
#: includes/functions-check-now.php:
|
2148 |
-
#: includes/functions.php:
|
2149 |
msgid "%s Report"
|
2150 |
msgstr "Informe de %s"
|
2151 |
|
2152 |
-
#: includes/functions-check-now.php:
|
2153 |
msgid "for last month"
|
2154 |
msgstr "del último mes"
|
2155 |
|
2156 |
-
#: includes/functions-check-now.php:
|
2157 |
msgid "for this month"
|
2158 |
msgstr "de este mes"
|
2159 |
|
2160 |
-
#: includes/functions-check-now.php:
|
2161 |
msgid "for this year"
|
2162 |
msgstr "para este año"
|
2163 |
|
2164 |
-
#: includes/functions-check-now.php:
|
2165 |
msgid "for the last 15 days"
|
2166 |
msgstr "de los últimos 15 días"
|
2167 |
|
2168 |
-
#: includes/functions-check-now.php:
|
2169 |
msgid "for the last 30 days"
|
2170 |
msgstr "de los últimos 30 días"
|
2171 |
|
2172 |
-
#: includes/functions-check-now.php:
|
2173 |
msgid "for the last 90 days"
|
2174 |
msgstr "de los últimos 90 días"
|
2175 |
|
2176 |
-
#: includes/functions-check-now.php:
|
2177 |
msgid "for the last 180 days"
|
2178 |
msgstr "de los últimos 180 días"
|
2179 |
|
2180 |
-
#: includes/functions-check-now.php:
|
2181 |
msgid "for the last 365 days"
|
2182 |
msgstr "de los últimos 365 días"
|
2183 |
|
2184 |
-
#: includes/functions.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2185 |
msgid "Generate CSV report"
|
2186 |
msgstr "Generar informe CSV"
|
2187 |
|
2188 |
#. translators: %s: Ad Inserter Pro
|
2189 |
-
#: includes/functions.php:
|
2190 |
msgid "Invalid %s version. Continue?"
|
2191 |
msgstr "Version de %s no valida. ¿Seguir?"
|
2192 |
|
2193 |
-
#: includes/functions.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2194 |
msgid "Background"
|
2195 |
msgstr "Fondo"
|
2196 |
|
2197 |
#. translators: %s HTML body tag
|
2198 |
-
#: includes/functions.php:
|
2199 |
msgid "Set %s background"
|
2200 |
msgstr "Establecer %s fondo"
|
2201 |
|
2202 |
-
#: includes/functions.php:
|
2203 |
msgid "Image to be used for the background"
|
2204 |
msgstr "Imagen que se utilizará como fondo"
|
2205 |
|
2206 |
-
#: includes/functions.php:
|
2207 |
msgid "Color"
|
2208 |
msgstr "Color"
|
2209 |
|
2210 |
-
#: includes/functions.php:
|
2211 |
msgid "Color to be used for the background"
|
2212 |
msgstr "Color a usar para el fondo"
|
2213 |
|
2214 |
-
#: includes/functions.php:
|
2215 |
msgid "Image size"
|
2216 |
msgstr "Tamaño de la imagen"
|
2217 |
|
2218 |
-
#: includes/functions.php:
|
2219 |
msgid "Repeat"
|
2220 |
msgstr "Repetir"
|
2221 |
|
2222 |
-
#: includes/functions.php:
|
2223 |
msgid "Select image"
|
2224 |
msgstr "Seleccionar imagen"
|
2225 |
|
2226 |
-
#: includes/functions.php:
|
2227 |
-
|
2228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2229 |
msgid "Click to select black or white list"
|
2230 |
msgstr "Haz clic para seleccionar la lista blanca o la negra"
|
2231 |
|
2232 |
#. translators: %s: Ad Inserter Pro
|
2233 |
-
#: includes/functions.php:
|
2234 |
msgid "Invalid %s version."
|
2235 |
msgstr "Version de %s no valida."
|
2236 |
|
2237 |
-
#: includes/functions.php:
|
2238 |
msgid "Check license"
|
2239 |
msgstr "Comprueba la licencia"
|
2240 |
|
2241 |
-
#: includes/functions.php:
|
2242 |
msgid "License"
|
2243 |
msgstr "Licencia"
|
2244 |
|
2245 |
#. translators: 1, 2, 4, 5: HTML tags, 3: Ad Inserter Pro
|
2246 |
-
#: includes/functions.php:
|
2247 |
msgid "%1$s Warning: %2$s Wrong %3$s version. %4$s Check license %5$s"
|
2248 |
msgstr ""
|
2249 |
"%1$s Advertencia: %2$s Versión %3$s incorrecta. %4$s Verificar licencia %5$s"
|
2250 |
|
2251 |
#. Translators: %s: HTML tags
|
2252 |
-
#: includes/functions.php:
|
2253 |
msgid ""
|
2254 |
"Warning: %s MaxMind license key not set. Please %s sign up for a GeoLite2 "
|
2255 |
"account %s and create license key."
|
@@ -2257,60 +2390,228 @@ msgstr ""
|
|
2257 |
"Advertencia: La clave de licencia %s MaxMind no está configurada. %s "
|
2258 |
"regístrarse para obtener una cuenta GeoLite2 %s y crea una clave de licencia."
|
2259 |
|
2260 |
-
#: includes/functions.php:
|
2261 |
msgid "Start date"
|
2262 |
msgstr "Fecha de inicio"
|
2263 |
|
2264 |
-
#: includes/functions.php:
|
2265 |
msgid "Enter date in format yyyy-mm-dd"
|
2266 |
msgstr "Ingrese la fecha en formato aaaa-mm-dd"
|
2267 |
|
2268 |
-
#: includes/functions.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
2269 |
msgid "Start time"
|
2270 |
msgstr "Hora de inicio"
|
2271 |
|
2272 |
-
#: includes/functions.php:
|
2273 |
msgid "Enter time in format hh:mm:ss, empty means 00:00:00"
|
2274 |
msgstr "Ingresa la hora en formato hh: mm: ss, vacío significa 00:00:00"
|
2275 |
|
2276 |
-
#: includes/functions.php:
|
2277 |
msgid "End date"
|
2278 |
msgstr "Fecha final"
|
2279 |
|
2280 |
-
#: includes/functions.php:
|
2281 |
msgid "End time"
|
2282 |
msgstr "Hora final"
|
2283 |
|
2284 |
-
#: includes/functions.php:
|
2285 |
msgid "Select wanted days in week"
|
2286 |
msgstr "Seleccione los días deseados de la semana"
|
2287 |
|
2288 |
-
#: includes/functions.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2289 |
msgid "Ad blocking detection is disabled"
|
2290 |
msgstr "La detección de bloqueo de anuncios está deshabilitada"
|
2291 |
|
2292 |
-
#: includes/functions.php:
|
2293 |
-
msgid "
|
2294 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2295 |
|
2296 |
-
#: includes/functions.php:
|
|
|
|
|
|
|
|
|
2297 |
msgid "Manual loading"
|
2298 |
msgstr "Carga manual"
|
2299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2300 |
#. Translators: %s HTML tags
|
2301 |
-
#: includes/functions.php:
|
2302 |
msgid "Create and manage %s MaxMind license key %s"
|
2303 |
msgstr "Crear y administrar la clave de licencia %s MaxMind %s"
|
2304 |
|
2305 |
-
#: includes/functions.php:
|
2306 |
msgid "MaxMind license key"
|
2307 |
msgstr "Clave de licencia MaxMind"
|
2308 |
|
2309 |
-
#: includes/functions.php:
|
2310 |
msgid "Enter license key obtained from MaxMind"
|
2311 |
msgstr "Ingresa clave de licencia obtenida de MaxMind"
|
2312 |
|
2313 |
-
#: includes/functions.php:
|
2314 |
msgid ""
|
2315 |
"Image or logo to be displayed in the header of the statistics report. "
|
2316 |
"Absolute path starting with '/' or relative path to the image file. Clear to "
|
@@ -2320,11 +2621,11 @@ msgstr ""
|
|
2320 |
"estadísticas. Ruta absoluta que comienza con «/» o ruta relativa al archivo "
|
2321 |
"de imagen. Borrar para restablecer la imagen predeterminada."
|
2322 |
|
2323 |
-
#: includes/functions.php:
|
2324 |
msgid "Event category"
|
2325 |
msgstr "Categoría de evento"
|
2326 |
|
2327 |
-
#: includes/functions.php:
|
2328 |
msgid ""
|
2329 |
"Category name used for external tracking events. You can use tags to get the "
|
2330 |
"event, the number or the name of the block that caused the event."
|
@@ -2333,11 +2634,11 @@ msgstr ""
|
|
2333 |
"usar etiquetas para obtener el evento, el número o el nombre del bloque que "
|
2334 |
"causó el evento."
|
2335 |
|
2336 |
-
#: includes/functions.php:
|
2337 |
msgid "Event action"
|
2338 |
msgstr "Acción evento"
|
2339 |
|
2340 |
-
#: includes/functions.php:
|
2341 |
msgid ""
|
2342 |
"Action name used for external tracking events. You can use tags to get the "
|
2343 |
"event, the number or the name of the block that caused the event."
|
@@ -2346,11 +2647,11 @@ msgstr ""
|
|
2346 |
"etiquetas para obtener el evento, el número o el nombre del bloque que causó "
|
2347 |
"el evento."
|
2348 |
|
2349 |
-
#: includes/functions.php:
|
2350 |
msgid "Event label"
|
2351 |
msgstr "Etiqueta de evento"
|
2352 |
|
2353 |
-
#: includes/functions.php:
|
2354 |
msgid ""
|
2355 |
"Label name used for external tracking events. You can use tags to get the "
|
2356 |
"event, the number or the name of the block that caused the event."
|
@@ -2359,23 +2660,67 @@ msgstr ""
|
|
2359 |
"etiquetas para obtener el evento, el número o el nombre del bloque que causó "
|
2360 |
"el evento."
|
2361 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2362 |
#. translators: %s: Ad Inserter Pro
|
2363 |
-
#: includes/functions.php:
|
2364 |
msgid "Show link to %s settings page for each site on the Sites page"
|
2365 |
msgstr ""
|
2366 |
"Mostrar enlace a la página de configuración de %s para cada sitio en la "
|
2367 |
"página Sitios"
|
2368 |
|
2369 |
#. translators: %s: Ad Inserter Pro
|
2370 |
-
#: includes/functions.php:
|
2371 |
msgid "Show link to %s on the Sites page"
|
2372 |
msgstr "Mostrar enlace a %s en la página Sitios"
|
2373 |
|
2374 |
-
#: includes/functions.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2375 |
msgid "Date"
|
2376 |
msgstr "Fecha"
|
2377 |
|
2378 |
-
#: includes/functions.php:
|
2379 |
msgid "File %s missing."
|
2380 |
msgstr "Falta el archivo %s."
|
2381 |
|
@@ -2403,11 +2748,11 @@ msgstr "Cerrar el editor de marcador de posición"
|
|
2403 |
msgid "Placeholder"
|
2404 |
msgstr "Marcador de posición"
|
2405 |
|
2406 |
-
#: includes/placeholders.php:361 settings.php:
|
2407 |
msgid "Size"
|
2408 |
msgstr "Tamaño"
|
2409 |
|
2410 |
-
#: includes/placeholders.php:377 includes/preview.php:
|
2411 |
msgid "Background color"
|
2412 |
msgstr "Color de fondo"
|
2413 |
|
@@ -2500,7 +2845,7 @@ msgstr "Añadir párrafo falso"
|
|
2500 |
msgid "Remove dummy paragraph"
|
2501 |
msgstr "Eliminar el párrafo falso"
|
2502 |
|
2503 |
-
#: includes/preview-adb.php:6 includes/preview.php:
|
2504 |
msgid "Use current settings"
|
2505 |
msgstr "Usar los ajustes actuales"
|
2506 |
|
@@ -2527,7 +2872,7 @@ msgctxt "Button"
|
|
2527 |
msgid "Default"
|
2528 |
msgstr "Por defecto"
|
2529 |
|
2530 |
-
#: includes/preview-adb.php:9 includes/preview.php:
|
2531 |
msgid "Close preview window"
|
2532 |
msgstr "Cerrar la ventana de vista previa"
|
2533 |
|
@@ -2536,71 +2881,71 @@ msgctxt "Button "
|
|
2536 |
msgid "Cancel"
|
2537 |
msgstr "Cancelar"
|
2538 |
|
2539 |
-
#: includes/preview-adb.php:
|
2540 |
msgid "Ad Blocking Detected Message Preview"
|
2541 |
msgstr "Vista previa del mensaje de bloqueo de anuncio detectado"
|
2542 |
|
2543 |
-
#: includes/preview-adb.php:
|
2544 |
msgid "Message CSS"
|
2545 |
msgstr "Mensaje CSS"
|
2546 |
|
2547 |
-
#: includes/preview-adb.php:
|
2548 |
msgid "Overlay CSS"
|
2549 |
msgstr "Superposición CSS"
|
2550 |
|
2551 |
-
#: includes/preview.php:
|
2552 |
msgid "Sticky Code Preview"
|
2553 |
msgstr "Vista previa del código fija"
|
2554 |
|
2555 |
-
#: includes/preview.php:
|
2556 |
msgid "Code Preview"
|
2557 |
msgstr "Vista previa de código"
|
2558 |
|
2559 |
-
#: includes/preview.php:
|
2560 |
msgid "Highlight inserted code"
|
2561 |
msgstr "Código insertado destacado"
|
2562 |
|
2563 |
-
#: includes/preview.php:
|
2564 |
msgid "Highlight"
|
2565 |
msgstr "Destacado"
|
2566 |
|
2567 |
-
#: includes/preview.php:
|
2568 |
msgid "Reset to block settings"
|
2569 |
msgstr "Restablecer los ajustes del bloque"
|
2570 |
|
2571 |
-
#: includes/preview.php:
|
2572 |
msgid "AdSense ad unit"
|
2573 |
msgstr "Unidad de anuncios de AdSense"
|
2574 |
|
2575 |
-
#: includes/preview.php:
|
2576 |
msgid "wrapping div"
|
2577 |
msgstr "envoltura div"
|
2578 |
|
2579 |
-
#: includes/preview.php:
|
2580 |
msgid "background"
|
2581 |
msgstr "fondo"
|
2582 |
|
2583 |
-
#: includes/preview.php:
|
2584 |
msgid "Alignment"
|
2585 |
msgstr "Alineación"
|
2586 |
|
2587 |
-
#: includes/preview.php:
|
2588 |
msgid "Repeat image"
|
2589 |
msgstr "Repetir la imagen"
|
2590 |
|
2591 |
-
#: includes/preview.php:
|
2592 |
msgid "Horizontal margin"
|
2593 |
msgstr "Margen horizontal"
|
2594 |
|
2595 |
-
#: includes/preview.php:
|
2596 |
msgid "Vertical margin"
|
2597 |
msgstr "Márgen vertical"
|
2598 |
|
2599 |
-
#: includes/preview.php:
|
2600 |
msgid "Animate"
|
2601 |
msgstr "Animar"
|
2602 |
|
2603 |
-
#: includes/preview.php:
|
2604 |
msgid ""
|
2605 |
"This is a preview of the code between dummy paragraphs. Here you can test "
|
2606 |
"various block alignments, visually edit margin and padding values of the "
|
@@ -2617,7 +2962,7 @@ msgstr ""
|
|
2617 |
"código, mientras que el botón Restablecer restaura todos los valores a los "
|
2618 |
"del bloque actual."
|
2619 |
|
2620 |
-
#: includes/preview.php:
|
2621 |
msgid ""
|
2622 |
"This is a preview of the saved block between dummy paragraphs. It shows the "
|
2623 |
"code with the alignment and style as it is set for this block. Highlight "
|
@@ -2628,7 +2973,7 @@ msgstr ""
|
|
2628 |
"para este bloque. El botón de resaltar resalta el fondo, envolviendo el "
|
2629 |
"margen de división y el área de código."
|
2630 |
|
2631 |
-
#: includes/preview.php:
|
2632 |
msgid ""
|
2633 |
"This is a preview of AdSense ad block between dummy paragraphs. AdSense ad "
|
2634 |
"code was loaded from your AdSense account. The ad block is displayed on a "
|
@@ -2641,7 +2986,7 @@ msgstr ""
|
|
2641 |
"puede estar en blanco (sin anuncios). Haz clic en el botón Resaltar para "
|
2642 |
"resaltar el bloque de anuncios."
|
2643 |
|
2644 |
-
#: includes/preview.php:
|
2645 |
msgid ""
|
2646 |
"You can resize the window (and refresh the page to reload ads) to check "
|
2647 |
"display with different screen widths.\n"
|
@@ -2654,7 +2999,7 @@ msgstr ""
|
|
2654 |
"Una vez que estés satisfecho con la alineación, haz clic en el botón «Usar» "
|
2655 |
"y la configuración se copiará en el bloque activo."
|
2656 |
|
2657 |
-
#: includes/preview.php:
|
2658 |
msgid ""
|
2659 |
"Please note that the code, block name, alignment and style are taken from "
|
2660 |
"the current block settings (may not be saved).\n"
|
@@ -2668,9 +3013,9 @@ msgstr ""
|
|
2668 |
"margen y el relleno no se pueden establecer. Sin embargo, puedes utilizar tu "
|
2669 |
"propio código HTML para el bloque."
|
2670 |
|
2671 |
-
#: includes/preview.php:
|
2672 |
-
#: includes/preview.php:
|
2673 |
-
#: includes/preview.php:
|
2674 |
msgid ""
|
2675 |
"Ad Inserter can be configured to insert any code anywhere on the page. Each "
|
2676 |
"code with it's settings is called a block.\n"
|
@@ -2695,9 +3040,9 @@ msgstr ""
|
|
2695 |
"número violeta significa que el bloque está usando inserción automática y "
|
2696 |
"manual."
|
2697 |
|
2698 |
-
#: includes/preview.php:
|
2699 |
-
#: includes/preview.php:
|
2700 |
-
#: includes/preview.php:
|
2701 |
msgid ""
|
2702 |
"Few very important things you need to know in order to insert code and "
|
2703 |
"display some ad:\n"
|
@@ -2721,7 +3066,7 @@ msgstr ""
|
|
2721 |
"blanco predeterminado a menos que estés utilizando excepciones individuales "
|
2722 |
"de entradas/página."
|
2723 |
|
2724 |
-
#: includes/preview.php:
|
2725 |
msgid ""
|
2726 |
"This is a preview of the code for sticky ads. Here you can test various "
|
2727 |
"horizontal and vertical alignments, close button locations, visually edit "
|
@@ -2737,11 +3082,7 @@ msgstr ""
|
|
2737 |
"botón Resaltar resalta el fondo, el margen y el área de código, mientras que "
|
2738 |
"el botón Restablecer restaura todos los valores a los del bloque actual."
|
2739 |
|
2740 |
-
#: includes/version-check.php:
|
2741 |
-
msgid "The latest PHP version: "
|
2742 |
-
msgstr "La última versión de PHP: "
|
2743 |
-
|
2744 |
-
#: includes/version-check.php:33
|
2745 |
msgid ""
|
2746 |
"Warning: Ad Inserter Pro plugin is outdated - it has not been tested with "
|
2747 |
"WordPress version"
|
@@ -2749,49 +3090,53 @@ msgstr ""
|
|
2749 |
"Advertencia: el plugin Ad Inserter Pro está desactualizado; no se ha probado "
|
2750 |
"con la versión de WordPress"
|
2751 |
|
2752 |
-
#: settings.php:
|
2753 |
msgid ""
|
2754 |
"Warning: only exceptions for %d posts cleared, %d posts still have exceptions"
|
2755 |
msgstr ""
|
2756 |
"Advertencia: sólo hay excepciones para %d entradas vaciadas, %d entradas "
|
2757 |
"todavía tienen excepciones"
|
2758 |
|
2759 |
-
|
|
|
2760 |
msgid ""
|
2761 |
-
"
|
2762 |
-
"
|
2763 |
msgstr ""
|
2764 |
-
"
|
2765 |
-
"
|
2766 |
-
"los ajustes."
|
2767 |
|
2768 |
-
#: settings.php:
|
2769 |
msgid "Online documentation"
|
2770 |
msgstr "Documentación en línea"
|
2771 |
|
2772 |
-
#: settings.php:
|
|
|
|
|
|
|
|
|
2773 |
msgid "Show AdSense ad units"
|
2774 |
msgstr "Mostrar los bloques de anuncios de AdSense"
|
2775 |
|
2776 |
-
#: settings.php:
|
2777 |
msgid "Edit ads.txt file"
|
2778 |
msgstr "Editar fichero ads.txt"
|
2779 |
|
2780 |
-
#: settings.php:
|
2781 |
msgid "Check theme for available positions for automatic insertion"
|
2782 |
msgstr ""
|
2783 |
"Comprueba en el tema las posiciones disponibles para inserción automática"
|
2784 |
|
2785 |
-
#: settings.php:
|
2786 |
msgid "List all blocks"
|
2787 |
msgstr "Listar todos los bloques"
|
2788 |
|
2789 |
-
#: settings.php:
|
2790 |
msgid "Loaded plugin JavaScript file version"
|
2791 |
msgstr "Versión de archivo JavaScript del plugin cargado"
|
2792 |
|
2793 |
#. translators: %s: HTML tags
|
2794 |
-
#: settings.php:
|
2795 |
msgid ""
|
2796 |
"Wrong or %s missing version parameter %s of the JavaScript file, probably "
|
2797 |
"due to inappropriate caching."
|
@@ -2799,7 +3144,7 @@ msgstr ""
|
|
2799 |
"Error o %s falta el parámetro de versión %s del archivo JavaScript, "
|
2800 |
"probablemente debido a un almacenamiento en caché inapropiado."
|
2801 |
|
2802 |
-
#: settings.php:
|
2803 |
msgid ""
|
2804 |
"Missing version parameter of the JavaScript file, probably due to "
|
2805 |
"inappropriate caching."
|
@@ -2807,7 +3152,7 @@ msgstr ""
|
|
2807 |
"Falta el parámetro versión del archivo JavaScript, probablemente debido a un "
|
2808 |
"almacenamiento en caché inapropiado."
|
2809 |
|
2810 |
-
#: settings.php:
|
2811 |
msgid ""
|
2812 |
"Incompatible (old) JavaScript file loaded, probably due to inappropriate "
|
2813 |
"caching."
|
@@ -2815,7 +3160,7 @@ msgstr ""
|
|
2815 |
"Archivo JavaScript incompatible (antiguo) cargado, probablemente debido a un "
|
2816 |
"almacenamiento en caché inapropiado."
|
2817 |
|
2818 |
-
#: settings.php:
|
2819 |
msgid ""
|
2820 |
"Please delete browser's cache and all other caches used and then reload this "
|
2821 |
"page."
|
@@ -2823,12 +3168,12 @@ msgstr ""
|
|
2823 |
"Por favor, vacía la caché del navegador y todas las demás cachés usadas y "
|
2824 |
"luego recarga esta página."
|
2825 |
|
2826 |
-
#: settings.php:
|
2827 |
msgid "Loaded plugin CSS file version"
|
2828 |
msgstr "Versión de archivo CSS del plugin cargado"
|
2829 |
|
2830 |
#. translators: %s: HTML tags
|
2831 |
-
#: settings.php:
|
2832 |
msgid ""
|
2833 |
"Wrong or %s missing version parameter %s of the CSS file, probably due to "
|
2834 |
"inappropriate caching."
|
@@ -2836,7 +3181,7 @@ msgstr ""
|
|
2836 |
"Error o falta %s el parámetro de versión %s del archivo CSS, probablemente "
|
2837 |
"debido a un almacenamiento en caché inapropiado."
|
2838 |
|
2839 |
-
#: settings.php:
|
2840 |
msgid ""
|
2841 |
"Missing version parameter of the CSS file, probably due to inappropriate "
|
2842 |
"caching."
|
@@ -2844,41 +3189,41 @@ msgstr ""
|
|
2844 |
"Falta el parámetro versión del archivo CSS, probablemente debido a un "
|
2845 |
"almacenamiento en caché inapropiado."
|
2846 |
|
2847 |
-
#: settings.php:
|
2848 |
msgid ""
|
2849 |
"Incompatible (old) CSS file loaded, probably due to inappropriate caching."
|
2850 |
msgstr ""
|
2851 |
"Archivo CSS incompatible (antiguo) cargado, probablemente debido a un "
|
2852 |
"almacenamiento en caché inapropiado."
|
2853 |
|
2854 |
-
#: settings.php:
|
2855 |
msgid "WARNING"
|
2856 |
msgstr "ADVERTENCIA"
|
2857 |
|
2858 |
#. translators: %s: HTML tags
|
2859 |
-
#: settings.php:
|
2860 |
msgid "Page may %s not be loaded properly. %s"
|
2861 |
msgstr "La página puede %s no estar correctamente cargada. %s"
|
2862 |
|
2863 |
-
#: settings.php:
|
2864 |
msgid ""
|
2865 |
"Check ad blocking software that may block CSS, JavaScript or image files."
|
2866 |
msgstr ""
|
2867 |
"Comprueba el software de bloqueo de anuncios que puede bloquear CSS, "
|
2868 |
"JavaScript o archivos de imagen."
|
2869 |
|
2870 |
-
#: settings.php:
|
2871 |
msgid "SAFE MODE"
|
2872 |
msgstr "MODO SEGURO"
|
2873 |
|
2874 |
#. translators: %s: HTML tags
|
2875 |
-
#: settings.php:
|
2876 |
msgid "Page is loaded in %s safe mode. %s Not all scripts are loaded."
|
2877 |
msgstr ""
|
2878 |
"La página está cargada en %s modo seguro. %s No todos los scripts se han "
|
2879 |
"cargado."
|
2880 |
|
2881 |
-
#: settings.php:
|
2882 |
msgid ""
|
2883 |
"To disable debugging functions and to enable insertions go to tab [*] / tab "
|
2884 |
"Debugging"
|
@@ -2886,23 +3231,23 @@ msgstr ""
|
|
2886 |
"Para desactivar las funciones de depuración y activar las inserciones, ve a "
|
2887 |
"la pestaña [*] / pestaña Depuración"
|
2888 |
|
2889 |
-
#: settings.php:
|
2890 |
msgid "Debugging functions enabled - some code is not inserted"
|
2891 |
msgstr "Funciones de depuración activadas - algún código no está insertado"
|
2892 |
|
2893 |
-
#: settings.php:
|
2894 |
msgid "Group name"
|
2895 |
msgstr "Nombre del grupo"
|
2896 |
|
2897 |
-
#: settings.php:
|
2898 |
msgid "Option name"
|
2899 |
msgstr "Nombre de opción"
|
2900 |
|
2901 |
-
#: settings.php:
|
2902 |
msgid "Share"
|
2903 |
msgstr "Compartir"
|
2904 |
|
2905 |
-
#: settings.php:
|
2906 |
msgid ""
|
2907 |
"Option share in percents - 0 means option is disabled, if share for one "
|
2908 |
"option is not defined it will be calculated automatically. Leave all share "
|
@@ -2913,11 +3258,19 @@ msgstr ""
|
|
2913 |
"automáticamente. Deja todos los campos en blanco para repartir "
|
2914 |
"equitativamente."
|
2915 |
|
2916 |
-
#: settings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2917 |
msgid "Time"
|
2918 |
msgstr "Hora"
|
2919 |
|
2920 |
-
#: settings.php:
|
2921 |
msgid ""
|
2922 |
"Option time in seconds - 0 means option is disabled and will be skipped. "
|
2923 |
"Leave all time fields empty for no timed rotation."
|
@@ -2926,161 +3279,161 @@ msgstr ""
|
|
2926 |
"desactivada y se omitirá. Deja todos los campos de tiempo vacíos para dejar "
|
2927 |
"la rotación sin programar."
|
2928 |
|
2929 |
-
#: settings.php:
|
2930 |
msgid "General Settings"
|
2931 |
msgstr "Configuración general"
|
2932 |
|
2933 |
-
#: settings.php:
|
2934 |
msgid "Toggle Syntax Highlighting / Simple editor for mobile devices"
|
2935 |
msgstr "Alternar resaltado de sintaxis/Editor simple para dispositivos móviles"
|
2936 |
|
2937 |
-
#: settings.php:
|
2938 |
msgid "Toggle tools"
|
2939 |
msgstr "Alternar herramientas"
|
2940 |
|
2941 |
-
#: settings.php:
|
2942 |
msgid "Process PHP code in block"
|
2943 |
msgstr "Procesar código PHP en bloque"
|
2944 |
|
2945 |
-
#: settings.php:
|
2946 |
msgid "Disable insertion of this block"
|
2947 |
msgstr "Desactivar la inserción de este bloque"
|
2948 |
|
2949 |
-
#: settings.php:
|
2950 |
msgid "Toggle code generator"
|
2951 |
msgstr "Alternar generador de código"
|
2952 |
|
2953 |
-
#: settings.php:
|
2954 |
msgid "Toggle rotation editor"
|
2955 |
msgstr "Alternar editor de rotación"
|
2956 |
|
2957 |
-
#: settings.php:
|
2958 |
msgid "Open visual HTML editor"
|
2959 |
msgstr "Abrir el editor HTML visual"
|
2960 |
|
2961 |
-
#: settings.php:
|
2962 |
msgid "Clear block"
|
2963 |
msgstr "Vaciar bloque"
|
2964 |
|
2965 |
-
#: settings.php:
|
2966 |
msgid "Copy block"
|
2967 |
msgstr "Copiar bloque"
|
2968 |
|
2969 |
-
#: settings.php:
|
2970 |
msgid "Paste name"
|
2971 |
msgstr "Pegar nombre"
|
2972 |
|
2973 |
-
#: settings.php:
|
2974 |
msgid "Paste code"
|
2975 |
msgstr "Pegar código"
|
2976 |
|
2977 |
-
#: settings.php:
|
2978 |
msgid "Paste settings"
|
2979 |
msgstr "Pegar ajustes"
|
2980 |
|
2981 |
-
#: settings.php:
|
2982 |
msgid "Paste block (name, code and settings)"
|
2983 |
msgstr "Pegar bloque (nombre, código y ajustes)"
|
2984 |
|
2985 |
-
#: settings.php:
|
2986 |
msgid "Rotation groups"
|
2987 |
msgstr "Grupos de rotación"
|
2988 |
|
2989 |
-
#: settings.php:
|
2990 |
msgid "Remove option"
|
2991 |
msgstr "Eliminar opción"
|
2992 |
|
2993 |
-
#: settings.php:
|
2994 |
msgid "Add option"
|
2995 |
msgstr "Agrega una opcion"
|
2996 |
|
2997 |
-
#: settings.php:
|
2998 |
msgid "Import code"
|
2999 |
msgstr "Importar código"
|
3000 |
|
3001 |
-
#: settings.php:
|
3002 |
msgid "Generate code"
|
3003 |
msgstr "Generar código"
|
3004 |
|
3005 |
-
#: settings.php:
|
3006 |
msgid "Banner"
|
3007 |
msgstr "Banner"
|
3008 |
|
3009 |
-
#: settings.php:
|
3010 |
msgid "Image"
|
3011 |
msgstr "Imagen"
|
3012 |
|
3013 |
-
#: settings.php:
|
3014 |
-
msgid "
|
3015 |
-
msgstr "
|
3016 |
-
|
3017 |
-
#: settings.php:929
|
3018 |
-
msgid "Open link in a new tab"
|
3019 |
-
msgstr "Abrir enlace en una pestaña nueva"
|
3020 |
|
3021 |
-
#: settings.php:
|
3022 |
msgid "Select Image"
|
3023 |
msgstr "Elegir imagen"
|
3024 |
|
3025 |
-
#: settings.php:
|
3026 |
msgid "Select Placeholder"
|
3027 |
msgstr "Seleccionar marcador de posición"
|
3028 |
|
3029 |
-
#: settings.php:
|
3030 |
msgid "Comment"
|
3031 |
msgstr "Comentar"
|
3032 |
|
3033 |
-
#: settings.php:
|
3034 |
msgctxt "AdSense"
|
3035 |
msgid "Publisher ID"
|
3036 |
msgstr "ID del editor"
|
3037 |
|
3038 |
-
#: settings.php:
|
3039 |
msgctxt "AdSense"
|
3040 |
msgid "Ad Slot ID"
|
3041 |
msgstr "ID de espacio publicitario"
|
3042 |
|
3043 |
-
#: settings.php:
|
3044 |
msgid "Ad Type"
|
3045 |
msgstr "Tipo de anuncio"
|
3046 |
|
3047 |
-
#: settings.php:
|
3048 |
msgid "AMP Ad"
|
3049 |
msgstr "Anuncio AMP"
|
3050 |
|
3051 |
-
#: settings.php:
|
|
|
|
|
|
|
|
|
3052 |
msgid "Show ad units from your AdSense account"
|
3053 |
msgstr "Mostrar unidades de anuncios desde tu cuenta de AdSense"
|
3054 |
|
3055 |
-
#: settings.php:
|
3056 |
msgid "AdSense ad units"
|
3057 |
msgstr "Bloques de anuncios de AdSense"
|
3058 |
|
3059 |
-
#: settings.php:
|
3060 |
msgctxt "AdSense"
|
3061 |
msgid "Layout"
|
3062 |
msgstr "Disposición"
|
3063 |
|
3064 |
-
#: settings.php:
|
3065 |
msgctxt "AdSense"
|
3066 |
msgid "Layout Key"
|
3067 |
msgstr "Clave de diseño"
|
3068 |
|
3069 |
-
#: settings.php:
|
3070 |
msgid "Full width"
|
3071 |
msgstr "Ancho completo"
|
3072 |
|
3073 |
-
#: settings.php:
|
3074 |
msgctxt "Full width"
|
3075 |
msgid "Enabled"
|
3076 |
msgstr "Activado"
|
3077 |
|
3078 |
-
#: settings.php:
|
3079 |
msgctxt "Full width"
|
3080 |
msgid "Disabled"
|
3081 |
msgstr "Desactivado"
|
3082 |
|
3083 |
-
#: settings.php:
|
3084 |
msgid ""
|
3085 |
"White/Black-list Category, Tag, Taxonomy, Post ID, Url, Url parameter, "
|
3086 |
"Cookie or Referer (domain)"
|
@@ -3088,29 +3441,29 @@ msgstr ""
|
|
3088 |
"Lista Blanca/Negra de categoría, etiqueta, taxonomía, ID de entrada, url, "
|
3089 |
"parámetro de url, cookie o referido"
|
3090 |
|
3091 |
-
#: settings.php:
|
3092 |
msgid "Lists"
|
3093 |
msgstr "Listas"
|
3094 |
|
3095 |
-
#: settings.php:
|
3096 |
msgid "Widget, Shortcode and PHP function call"
|
3097 |
msgstr "Widget, shortcode y llamada de función PHP"
|
3098 |
|
3099 |
-
#: settings.php:
|
3100 |
msgid "Manual"
|
3101 |
msgstr "Manualmente"
|
3102 |
|
3103 |
-
#: settings.php:
|
3104 |
msgid "Client/Server-side Device Detection (Desktop, Tablet, Phone,...)"
|
3105 |
msgstr ""
|
3106 |
"Detectado dispositivo del lado del cliente/servidor (escritorio, tableta, "
|
3107 |
"teléfono,...)"
|
3108 |
|
3109 |
-
#: settings.php:
|
3110 |
msgid "Devices"
|
3111 |
msgstr "Dispositivos"
|
3112 |
|
3113 |
-
#: settings.php:
|
3114 |
msgid ""
|
3115 |
"Check for user status, Limit insertions (error 404 page, Ajax requests, RSS "
|
3116 |
"feeds), Filter, Scheduling, General tag"
|
@@ -3118,15 +3471,15 @@ msgstr ""
|
|
3118 |
"Comprueba el estado del usuario, limita las inserciones (página de error "
|
3119 |
"404, solicitudes Ajax, feeds RSS), filtro, programación, etiqueta general"
|
3120 |
|
3121 |
-
#: settings.php:
|
3122 |
msgid "Misc"
|
3123 |
msgstr "Varios"
|
3124 |
|
3125 |
-
#: settings.php:
|
3126 |
msgid "Preview code and alignment"
|
3127 |
msgstr "Código de vista previa y alineación"
|
3128 |
|
3129 |
-
#: settings.php:
|
3130 |
msgid ""
|
3131 |
"Rotation editor active - rotation code not generated! Make sure no rotation "
|
3132 |
"editor is active before saving settings."
|
@@ -3134,15 +3487,15 @@ msgstr ""
|
|
3134 |
"Editor de rotación activo - ¡Código de rotación no generado! Asegúrate de "
|
3135 |
"que no hay ningún editor de rotación activo antes de guardar los ajustes."
|
3136 |
|
3137 |
-
#: settings.php:
|
3138 |
msgid "Enable insertion on posts"
|
3139 |
msgstr "Activar la inserción en las entradas"
|
3140 |
|
3141 |
-
#: settings.php:
|
3142 |
msgid "Posts"
|
3143 |
msgstr "Entradas"
|
3144 |
|
3145 |
-
#: settings.php:
|
3146 |
msgid ""
|
3147 |
"Enable insertion on homepage: latest posts (including on sub-pages), static "
|
3148 |
"page or theme homepage (available positions may depend on hooks used by the "
|
@@ -3152,47 +3505,47 @@ msgstr ""
|
|
3152 |
"las subpáginas), la página estática o la página inicio del tema (las "
|
3153 |
"posiciones disponibles pueden depender de los ganchos utilizados por el tema)"
|
3154 |
|
3155 |
-
#: settings.php:
|
3156 |
msgid "Homepage"
|
3157 |
msgstr "Página de inicio"
|
3158 |
|
3159 |
-
#: settings.php:
|
3160 |
msgid "Enable insertion on category blog pages (including sub-pages)"
|
3161 |
msgstr ""
|
3162 |
"Activar la inserción en páginas de categoría del blog (incluidas las "
|
3163 |
"subpáginas)"
|
3164 |
|
3165 |
-
#: settings.php:
|
3166 |
msgid "Category pages"
|
3167 |
msgstr "Páginas de categoría"
|
3168 |
|
3169 |
-
#: settings.php:
|
3170 |
msgid "Enable insertion on static pages"
|
3171 |
msgstr "Activar la inserción en páginas estáticas"
|
3172 |
|
3173 |
-
#: settings.php:
|
3174 |
msgid "Static pages"
|
3175 |
msgstr "Páginas estáticas"
|
3176 |
|
3177 |
-
#: settings.php:
|
3178 |
msgid "Enable insertion on search blog pages"
|
3179 |
m
|
5 |
"Project-Id-Version: Plugins - Ad Inserter – Ad Manager & AdSense "
|
6 |
"Ads - Stable (latest release)\n"
|
7 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ad-inserter\n"
|
8 |
+
"POT-Creation-Date: 2022-10-11 19:34:22+00:00\n"
|
9 |
+
"PO-Revision-Date: 2022-10-15 10:30+0200\n"
|
10 |
"Last-Translator: Igor Funa <info@adinserter.pro>\n"
|
11 |
"Language-Team: Angelo Giammarresi - info@wocmultimedia.com\n"
|
12 |
"Language: es\n"
|
16 |
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
17 |
"X-Generator: Poedit 3.0.1\n"
|
18 |
|
19 |
+
#: ad-inserter.php:366
|
20 |
msgctxt "Menu item"
|
21 |
msgid "Debugging DEMO"
|
22 |
msgstr "Depurando DEMO"
|
23 |
|
24 |
+
#: ad-inserter.php:382
|
25 |
msgctxt "Menu item"
|
26 |
msgid "Label Blocks"
|
27 |
msgstr "Bloques de etiqueta"
|
28 |
|
29 |
+
#: ad-inserter.php:389
|
30 |
msgctxt "Menu item"
|
31 |
msgid "Show Positions"
|
32 |
msgstr "Mostrar posiciones"
|
33 |
|
34 |
+
#: ad-inserter.php:475
|
35 |
msgctxt "Menu item"
|
36 |
msgid "Show HTML Tags"
|
37 |
msgstr "Mostrar etiquetas HTML"
|
38 |
|
39 |
+
#: ad-inserter.php:482
|
40 |
msgctxt "Menu item"
|
41 |
msgid "Disable Insertion"
|
42 |
msgstr "Desactivar la inserción"
|
43 |
|
44 |
+
#: ad-inserter.php:491
|
45 |
msgctxt "Menu item"
|
46 |
msgid "Ad Blocking Status"
|
47 |
msgstr "Estado del bloqueo de anuncios"
|
48 |
|
49 |
+
#: ad-inserter.php:498
|
50 |
msgctxt "Menu item"
|
51 |
msgid "Simulate Ad Blocking"
|
52 |
msgstr "Simular el bloqueo de anuncios"
|
53 |
|
54 |
+
#: ad-inserter.php:509
|
55 |
msgctxt "Menu item"
|
56 |
msgid "Log Processing"
|
57 |
msgstr "Procesamiento de registro"
|
58 |
|
59 |
+
#: ad-inserter.php:516
|
60 |
msgctxt "Menu item"
|
61 |
msgid "Show Log"
|
62 |
msgstr "Mostrar el registro"
|
63 |
|
64 |
#. translators: Debugging position name Before HTML element
|
65 |
+
#: ad-inserter.php:1188
|
66 |
msgid "Before"
|
67 |
msgstr "Antes"
|
68 |
|
69 |
#. translators: Debugging position name After HTML element
|
70 |
+
#: ad-inserter.php:1193
|
71 |
msgid "After"
|
72 |
msgstr "Después"
|
73 |
|
74 |
#. translators: Debugging position name Prepend content of HTML element (before
|
75 |
#. the content of the HTML element)
|
76 |
+
#: ad-inserter.php:1198 strings.php:104
|
77 |
msgid "Prepend content"
|
78 |
msgstr "Anexar contenido"
|
79 |
|
80 |
#. translators: Debugging position name Append content of HTML element (after
|
81 |
#. the content of the HTML element)
|
82 |
+
#: ad-inserter.php:1203 strings.php:105
|
83 |
msgid "Append content"
|
84 |
msgstr "Contenido añadido"
|
85 |
|
86 |
#. translators: Debugging position name Replace content of HTML element
|
87 |
+
#: ad-inserter.php:1208 strings.php:106
|
88 |
msgid "Replace content"
|
89 |
msgstr "Reemplazar contenido"
|
90 |
|
91 |
#. translators: Debugging position name Replace HTML element
|
92 |
+
#: ad-inserter.php:1213 strings.php:171
|
93 |
msgid "Replace"
|
94 |
msgstr "Reemplazar"
|
95 |
|
96 |
#. translators: Debugging message when output buffering is enabled
|
97 |
+
#: ad-inserter.php:1260
|
98 |
msgid "OUTPUT BUFFERING"
|
99 |
msgstr "BUFFER DE SALIDA"
|
100 |
|
101 |
#. translators: Debugging position
|
102 |
+
#: ad-inserter.php:1264
|
103 |
msgid "Above Header"
|
104 |
msgstr "Arriba de la cabecera"
|
105 |
|
106 |
+
#: ad-inserter.php:1572
|
107 |
msgctxt "Menu item"
|
108 |
msgid "Log In"
|
109 |
msgstr "Acceder"
|
110 |
|
111 |
#. translators: %s: Ad Inserter
|
112 |
+
#: ad-inserter.php:1946 ad-inserter.php:3476
|
113 |
msgid "%s Settings"
|
114 |
msgstr "Ajustes de %s"
|
115 |
|
116 |
#. translators: AD BLOCKING DETECTED, PAGE VIEWS: n - NO ACTION
|
117 |
+
#: ad-inserter.php:2738
|
118 |
msgid "AD BLOCKING DETECTED, PAGE VIEWS"
|
119 |
msgstr "DETECTADO BLOQUEO DE ANUNCIO, VISTA DE PÁGINA"
|
120 |
|
121 |
+
#: ad-inserter.php:2738
|
122 |
msgid "NO ACTION"
|
123 |
msgstr "SIN ACCIÓN"
|
124 |
|
125 |
+
#: ad-inserter.php:2739
|
126 |
msgid "AD BLOCKING DETECTED, COOKIE DETECTED - NO ACTION"
|
127 |
msgstr "DETECTADO BLOQUEO DE ANUNCIO, DETECTADA COOKIE - SIN ACCIÓN"
|
128 |
|
129 |
+
#: ad-inserter.php:2740
|
130 |
msgid "AD BLOCKING DETECTED - ACTION"
|
131 |
msgstr "DETECTADO BLOQUEO DE ANUNCIO - ACCIÓN"
|
132 |
|
133 |
+
#: ad-inserter.php:2741
|
134 |
msgid "AD BLOCKING NOT DETECTED"
|
135 |
msgstr "BLOQUEO DE ANUNCIO NO DETECTADO"
|
136 |
|
137 |
+
#: ad-inserter.php:2742
|
138 |
msgid "AD BLOCKING DETECTION COOKIES DELETED"
|
139 |
msgstr "BORRADAS LAS COOKIES DE DETECCIÓN DE BLOQUEO DE ANUNCIO"
|
140 |
|
141 |
+
#: ad-inserter.php:2743
|
142 |
msgid "AD BLOCKING DETECTED - NO ACTION"
|
143 |
msgstr "BLOQUEO DE ANUNCIO DETECTADO - SIN ACCIÓN"
|
144 |
|
145 |
#. Translators: 1: number of blocks, 2: Ad Inserter
|
146 |
+
#: ad-inserter.php:3164
|
147 |
msgid "Hey, you are now using %1$s %2$s block."
|
148 |
msgid_plural "Hey, you are now using %1$s %2$s blocks."
|
149 |
msgstr[0] "Oye, estás usando ahora %1$s bloque de %2$s."
|
150 |
msgstr[1] "Oye, estás usando ahora %1$s bloques de %2$s."
|
151 |
|
152 |
+
#: ad-inserter.php:3167
|
153 |
msgid "Please help me to solve a problem first"
|
154 |
msgstr "Por favor, antes ayúdame a resolver un problema"
|
155 |
|
156 |
+
#: ad-inserter.php:3171
|
157 |
msgid "Maybe later"
|
158 |
msgstr "Quizás más tarde"
|
159 |
|
160 |
#. Translators: %s: Ad Inserter
|
161 |
+
#: ad-inserter.php:3176
|
162 |
msgid "Hey, you are using %s and I hope you're happy with it."
|
163 |
msgstr "Oye, estás usando %s y espero que estés contento con él."
|
164 |
|
165 |
+
#: ad-inserter.php:3179
|
166 |
msgid "OK, but please help me with the settings first"
|
167 |
msgstr "De acuerdo, pero primero ayúdame con los ajustes"
|
168 |
|
169 |
+
#: ad-inserter.php:3192
|
170 |
msgid ""
|
171 |
"Please take a moment to rate the plugin. When you rate it with 5 stars it's "
|
172 |
"like saying 'Thank you'. Somebody will be happy."
|
174 |
"Por favor, tómate un momento para valorar el plugin. Cuando lo valoras con 5 "
|
175 |
"estrellas es como si dijeras «Gracias». Alguien estará feliz."
|
176 |
|
177 |
+
#: ad-inserter.php:3194
|
178 |
msgid ""
|
179 |
"Positive reviews are a great incentive to fix bugs and to add new features "
|
180 |
"for better monetization of your website."
|
182 |
"Las críticas positivas son un gran incentivo para corregir errores y añadir "
|
183 |
"nuevas características para una mejor monetización de tu web."
|
184 |
|
185 |
+
#: ad-inserter.php:3200
|
186 |
msgid "Sure"
|
187 |
msgstr "Por supuesto"
|
188 |
|
189 |
#. translators: 1: AMPforWP Plugin Manager, 2: Ad Inserter
|
190 |
#. translators: 1: AMPforWP Plugin Manager, 2: Ad Inserter, 3, 4: HTML tags
|
191 |
+
#: ad-inserter.php:3217 ad-inserter.php:3259
|
192 |
msgid "Warning: %1$s %3$s disabled %4$s %2$s on AMP pages."
|
193 |
msgstr "Advertencia: %1$s %3$sha desactivado%4$s %2$s en las páginas AMP."
|
194 |
|
195 |
#. translators: 1: Ad Inserter, 2, 3: HTML tags
|
196 |
+
#: ad-inserter.php:3224
|
197 |
msgid "Warning: %1$s requires PHP 5.6 or newer. %2$s Please update! %3$s"
|
198 |
msgstr ""
|
199 |
"Advertencia: %1$s necesita PHP 5.6 o superior. %2$s Por favor, ¡actualiza! "
|
200 |
"%3$s"
|
201 |
|
202 |
+
#. translators: 1: Ad Inserter, 2, 3: HTML tags
|
203 |
+
#: ad-inserter.php:3231
|
204 |
+
msgid "Error: plugin settings corrupt"
|
205 |
+
msgstr "Error: Los ajustes del plugin están corruptos"
|
206 |
+
|
207 |
+
#: ad-inserter.php:3241
|
208 |
msgctxt "Menu item"
|
209 |
msgid "Settings"
|
210 |
msgstr "Ajustes"
|
211 |
|
212 |
+
#: ad-inserter.php:3273
|
213 |
msgid ""
|
214 |
"Load settings page in safe mode to avoid collisions with other plugins or "
|
215 |
"theme"
|
217 |
"Carga la página de ajustes en modo seguro para evitar colisiones con otros "
|
218 |
"plugins o temas"
|
219 |
|
220 |
+
#: ad-inserter.php:3273
|
221 |
msgid "Safe mode"
|
222 |
msgstr "Modo seguro"
|
223 |
|
224 |
#. translators: %s: Ad Inserter
|
225 |
+
#: ad-inserter.php:3368
|
226 |
msgctxt "Meta box name"
|
227 |
msgid "%s Individual Exceptions"
|
228 |
msgstr "Excepciones individuales de %s"
|
229 |
|
230 |
+
#: ad-inserter.php:3397 ad-inserter.php:12081 class.php:2605
|
231 |
+
#: includes/preview.php:2421 includes/preview.php:2466
|
232 |
+
#: includes/preview.php:2503 settings.php:4646 strings.php:3
|
233 |
msgid "Block"
|
234 |
msgstr "Bloque"
|
235 |
|
236 |
+
#: ad-inserter.php:3398 includes/functions.php:4840 settings.php:4647
|
237 |
+
#: settings.php:4737
|
238 |
msgid "Name"
|
239 |
msgstr "Nombre"
|
240 |
|
241 |
+
#: ad-inserter.php:3401 settings.php:1335
|
242 |
msgid "Default insertion"
|
243 |
msgstr "Inserción por defecto"
|
244 |
|
245 |
#. translators: For this post or page
|
246 |
+
#: ad-inserter.php:3404
|
247 |
msgctxt "Page"
|
248 |
msgid "For this"
|
249 |
msgstr "Para esta"
|
250 |
|
251 |
+
#: ad-inserter.php:3405
|
252 |
msgctxt "Post"
|
253 |
msgid "For this"
|
254 |
msgstr "Para esta"
|
255 |
|
256 |
+
#: ad-inserter.php:3417
|
257 |
msgctxt "Enabled/disabled on all"
|
258 |
msgid "pages"
|
259 |
msgstr "páginas"
|
260 |
|
261 |
+
#: ad-inserter.php:3420
|
262 |
msgctxt "Enabled/disabled on all"
|
263 |
msgid "posts"
|
264 |
msgstr "entradas"
|
265 |
|
266 |
+
#: ad-inserter.php:3437 ad-inserter.php:3449 strings.php:177
|
267 |
msgid "Enabled"
|
268 |
msgstr "Activado"
|
269 |
|
270 |
#. translators: Menu items
|
271 |
+
#: ad-inserter.php:3437 ad-inserter.php:3449
|
272 |
+
#: includes/functions-check-now.php:2402 includes/functions.php:3118
|
273 |
+
#: includes/functions.php:3481 strings.php:16
|
274 |
msgid "Disabled"
|
275 |
msgstr "Desactivado"
|
276 |
|
277 |
+
#: ad-inserter.php:3439
|
278 |
msgid "No individual exceptions"
|
279 |
msgstr "Ninguna excepción individual"
|
280 |
|
281 |
#. translators: Not enabled for pages or posts
|
282 |
+
#: ad-inserter.php:3441
|
283 |
msgid "Not enabled for"
|
284 |
msgstr "No activado para"
|
285 |
|
286 |
#. translators: No individual exceptions enabled for pages or posts
|
287 |
+
#: ad-inserter.php:3469
|
288 |
msgid "No block has individual exceptions enabled"
|
289 |
msgstr "Ningún bloque tiene activadas excepciones individuales"
|
290 |
|
291 |
#. translators: 1: Ad Inserter Settings (page), 2: Tag / Archive pages
|
292 |
+
#: ad-inserter.php:3474
|
293 |
msgid ""
|
294 |
"Default insertion can be configured for each block on %1$s page - button "
|
295 |
"next to %2$s checkbox."
|
297 |
"La inserción por defecto puede configurarse para cada bloque en la página de "
|
298 |
"%1$s - el botón junto a la casilla de verificación de %2$s."
|
299 |
|
300 |
+
#: ad-inserter.php:3477 settings.php:1313
|
301 |
msgid "Tag / Archive pages"
|
302 |
msgstr "Páginas de Archivo / Etiqueta"
|
303 |
|
304 |
+
#: ad-inserter.php:3479
|
305 |
msgid ""
|
306 |
"When individual exceptions for a block are enabled, a checkbox will be "
|
307 |
"listed here to change default insertion for this post or page."
|
310 |
"listará una casilla de verificación para cambiar la inserción por defecto "
|
311 |
"para esta entrada o página."
|
312 |
|
313 |
+
#: ad-inserter.php:3480
|
314 |
msgid ""
|
315 |
"This way you can individually enable or disable blocks on specific posts or "
|
316 |
"pages."
|
318 |
"De esta forma, puedes activar o desactivar individualmente los bloques en "
|
319 |
"entradas o páginas específicas."
|
320 |
|
321 |
+
#: ad-inserter.php:3482
|
322 |
msgid "For more information check page %s"
|
323 |
msgstr "Para más información comprueba la página %s"
|
324 |
|
325 |
#. translators: Ad Inserter Exceptions documentation page
|
326 |
+
#: ad-inserter.php:3484
|
327 |
msgid "Individual Exceptions"
|
328 |
msgstr "Excepciones individual"
|
329 |
|
330 |
+
#: ad-inserter.php:3530
|
331 |
msgid "STATIC PAGE"
|
332 |
msgstr "PÁGINA ESTÁTICA"
|
333 |
|
334 |
+
#: ad-inserter.php:3533
|
335 |
msgid "POST"
|
336 |
msgstr "ENTRADA"
|
337 |
|
338 |
+
#: ad-inserter.php:3536
|
339 |
msgid "HOMEPAGE"
|
340 |
msgstr "PÁGINA DE INICIO"
|
341 |
|
342 |
+
#: ad-inserter.php:3539
|
343 |
msgid "CATEGORY PAGE"
|
344 |
msgstr "Categoría de página"
|
345 |
|
346 |
+
#: ad-inserter.php:3542
|
347 |
msgid "SEARCH PAGE"
|
348 |
msgstr "PÁGINA DE BÚSQUEDA"
|
349 |
|
350 |
+
#: ad-inserter.php:3545
|
351 |
msgid "ARCHIVE PAGE"
|
352 |
msgstr "PÁGINA DE ARCHIVO"
|
353 |
|
354 |
+
#: ad-inserter.php:3548
|
355 |
msgid "ERROR 404 PAGE"
|
356 |
msgstr "PÁGINA DE ERROR 404"
|
357 |
|
358 |
+
#: ad-inserter.php:3551
|
359 |
msgid "AJAX CALL"
|
360 |
msgstr "LLAMADA AJAX"
|
361 |
|
362 |
+
#: ad-inserter.php:3554
|
363 |
msgid "UNKNOWN PAGE TYPE"
|
364 |
msgstr "TIPO DE PÁGINA DESCONOCIDA"
|
365 |
|
366 |
+
#: ad-inserter.php:3571
|
367 |
msgid "Click to delete ad blocking detection cokies"
|
368 |
msgstr "Haz clic para borrar las cokies de bloqueo de anuncios"
|
369 |
|
370 |
+
#: ad-inserter.php:3572
|
371 |
msgid "AD BLOCKING STATUS UNKNOWN"
|
372 |
msgstr "ESTADO DE BLOQUEO DE ANUNCIOS DESCONOCIDO"
|
373 |
|
374 |
#. translators: %s: AdSense Auto Ads
|
375 |
+
#: ad-inserter.php:3601
|
376 |
msgid ""
|
377 |
"Code for %s detected - Code will automatically insert AdSense ads at optimal "
|
378 |
"positions"
|
380 |
"Código para %s detectado - El código insertará automáticamente los anuncios "
|
381 |
"de AdSense en las posiciones óptimas"
|
382 |
|
383 |
+
#: ad-inserter.php:3748
|
384 |
msgid "Code for insertion"
|
385 |
msgstr "Código de inserción"
|
386 |
|
387 |
+
#: ad-inserter.php:3748
|
388 |
msgid "character"
|
389 |
msgid_plural "characters"
|
390 |
msgstr[0] "carácter"
|
391 |
msgstr[1] "caracteres"
|
392 |
|
393 |
+
#: ad-inserter.php:3770
|
394 |
msgid "Header code"
|
395 |
msgstr "Código de cabecera"
|
396 |
|
397 |
+
#: ad-inserter.php:3770
|
398 |
msgctxt "Header code"
|
399 |
msgid "DISABLED"
|
400 |
msgstr "DESACTIVADA"
|
401 |
|
402 |
+
#: ad-inserter.php:3770 ad-inserter.php:4041
|
403 |
msgid "character inserted"
|
404 |
msgid_plural "characters inserted"
|
405 |
msgstr[0] "carácter insertado"
|
406 |
msgstr[1] "caracteres insertados"
|
407 |
|
408 |
+
#: ad-inserter.php:3790
|
409 |
+
msgid "Click to delete the cookie for the consents"
|
410 |
+
msgstr "Haz clic para borrar la cookie para los consentimientos"
|
411 |
|
412 |
+
#: ad-inserter.php:3795 ad-inserter.php:4050
|
413 |
+
msgid "UNFILTERED HTML DISABLED"
|
414 |
+
msgstr "DESACTIVADO EL HTML SIN FILTRAR"
|
415 |
+
|
416 |
+
#: ad-inserter.php:4041
|
417 |
msgid "Footer code"
|
418 |
msgstr "Código del pie de página"
|
419 |
|
420 |
+
#: ad-inserter.php:4041
|
421 |
msgctxt "Footer code"
|
422 |
msgid "DISABLED"
|
423 |
msgstr "DESACTIVADO"
|
424 |
|
425 |
+
#: ad-inserter.php:4055
|
426 |
msgid "JAVASCRIPT NOT WORKING"
|
427 |
msgstr "JAVASCRIPT NO FUNCIONA"
|
428 |
|
429 |
+
#: ad-inserter.php:4055
|
430 |
msgid "NO JAVASCRIPT ERRORS"
|
431 |
msgstr "SIN ERRORES DE JAVASCRIPT"
|
432 |
|
433 |
+
#: ad-inserter.php:4055
|
434 |
msgid "JAVASCRIPT ERRORS"
|
435 |
msgstr "ERRORES DE JAVASCRIPT"
|
436 |
|
437 |
#. translators: block name (block with default settings)
|
438 |
+
#: ad-inserter.php:7011
|
439 |
msgctxt "Block name"
|
440 |
msgid "Default"
|
441 |
msgstr "Por defecto"
|
442 |
|
443 |
#. translators: %s: Ad Inserter
|
444 |
+
#: ad-inserter.php:7460 ad-inserter.php:7777
|
445 |
+
msgid "Invalid data received - %s settings not saved."
|
446 |
+
msgstr "Datos recibidos no válidos - no se han guardado los ajustes de %s."
|
447 |
+
|
448 |
+
#. translators: %s: Ad Inserter
|
449 |
+
#: ad-inserter.php:7751
|
450 |
msgid "Error importing %s settings."
|
451 |
msgstr "Error importando los ajustes de %s."
|
452 |
|
453 |
+
#: ad-inserter.php:7752
|
454 |
msgid "Error importing settings for block"
|
455 |
msgid_plural "Error importing settings for blocks:"
|
456 |
msgstr[0] "Error al importar los ajustes para el bloque"
|
457 |
msgstr[1] "Error al importar los ajustes para los bloques:"
|
458 |
|
459 |
+
#: ad-inserter.php:7775
|
460 |
msgid "Settings saved."
|
461 |
msgstr "Ajustes guardados."
|
462 |
|
463 |
+
#: ad-inserter.php:7797
|
|
|
|
|
|
|
|
|
|
|
464 |
msgid "Settings cleared."
|
465 |
msgstr "Ajustes borrados."
|
466 |
|
467 |
#. Translators: Post/Static page must have between X and Y words
|
468 |
+
#: ad-inserter.php:8181 ad-inserter.php:8183 ad-inserter.php:8206
|
469 |
+
#: settings.php:2365
|
470 |
msgid "word"
|
471 |
msgid_plural "words"
|
472 |
msgstr[0] "palabra"
|
473 |
msgstr[1] "palabras"
|
474 |
|
475 |
+
#: ad-inserter.php:8220 ad-inserter.php:8347
|
476 |
msgid "HTML TAGS REMOVED"
|
477 |
msgstr "ETIQUETA HTML ELIMINADA"
|
478 |
|
479 |
+
#: ad-inserter.php:8426
|
480 |
msgid "BEFORE COMMENTS"
|
481 |
msgstr "ANTES DE LOS COMENTARIOS"
|
482 |
|
483 |
+
#: ad-inserter.php:8551
|
484 |
msgid "AFTER COMMENTS"
|
485 |
msgstr "DESPUÉS DE LOS COMENTARIOS"
|
486 |
|
487 |
+
#: ad-inserter.php:8628
|
488 |
msgid "BETWEEN COMMENTS"
|
489 |
msgstr "ENTRE LOS COMENTARIOS"
|
490 |
|
491 |
+
#: ad-inserter.php:11301 ad-inserter.php:11402
|
492 |
msgctxt "category name"
|
493 |
msgid "Uncategorized"
|
494 |
msgstr "Sin categoría"
|
495 |
|
496 |
+
#: ad-inserter.php:11672
|
497 |
msgid "requires WordPress 4.6 or newer"
|
498 |
msgstr "requiere WordPress 4.6 o superior"
|
499 |
|
500 |
+
#: ad-inserter.php:11672
|
501 |
msgid "Please update!"
|
502 |
msgstr "¡Por favor, actualiza!"
|
503 |
|
504 |
#. translators: Opt-in message: Thank you for installing Ad Inserter (plugin
|
505 |
#. name with HTML tags will be added)
|
506 |
+
#: ad-inserter.php:11949
|
507 |
msgid "Thank you for installing"
|
508 |
msgstr "Gracias por instalar"
|
509 |
|
510 |
#. translators: Opt-in message: %s: HTML tags
|
511 |
+
#: ad-inserter.php:11951
|
512 |
msgid ""
|
513 |
"We would like to %s track its usage %s on your site. This is completely "
|
514 |
"optional and can be disabled at any time."
|
516 |
"Nos gustaría hacer %s un seguimiento de uso %s en tu sitio. Es completamente "
|
517 |
"opcional y se puede desactivar en cualquier momento."
|
518 |
|
519 |
+
#: ad-inserter.php:11953
|
520 |
msgid ""
|
521 |
"We don't record any sensitive data, only information regarding the WordPress "
|
522 |
"environment and plugin usage, which will help us to make improvements to the "
|
527 |
"plugin."
|
528 |
|
529 |
#. translators: Deactivation message: %s: HTML tags
|
530 |
+
#: ad-inserter.php:11993
|
531 |
msgid ""
|
532 |
"Looking for %s Documentation, %s %s Common Settings, %s %s Quick Start %s or "
|
533 |
"help for %s AdSense ads? %s The plugin doesn't work with your theme? %s Let "
|
538 |
"Avísanos %s e intentaremos ayudarte."
|
539 |
|
540 |
#. translators: %s: Ad Inserter
|
541 |
+
#: ad-inserter.php:12039
|
542 |
msgid "%s block."
|
543 |
msgstr "%s bloque."
|
544 |
|
545 |
#. translators: widget title
|
546 |
+
#: ad-inserter.php:12055 ad-inserter.php:12090
|
547 |
msgid "Processing log"
|
548 |
msgstr "Registro de procesamiento"
|
549 |
|
550 |
#. translators: widget title
|
551 |
+
#: ad-inserter.php:12057 ad-inserter.php:12091
|
552 |
msgid "Dummy widget"
|
553 |
msgstr "Widget falso"
|
554 |
|
555 |
#. translators: widget title
|
556 |
+
#: ad-inserter.php:12059 ad-inserter.php:12089
|
557 |
msgid "Debugging tools"
|
558 |
msgstr "Herramientas de depuración"
|
559 |
|
560 |
#. translators: block status (widget title)
|
561 |
+
#: ad-inserter.php:12066
|
562 |
msgctxt "block"
|
563 |
msgid "PAUSED"
|
564 |
msgstr "EN PAUSA"
|
565 |
|
566 |
+
#: ad-inserter.php:12067
|
567 |
msgid "WIDGET DISABLED"
|
568 |
msgstr "WIDGET DESACTIVADO"
|
569 |
|
570 |
+
#: ad-inserter.php:12068
|
571 |
msgid "Unknown block"
|
572 |
msgstr "Bloque desconocido"
|
573 |
|
574 |
+
#: ad-inserter.php:12076 includes/functions-check-now.php:3262
|
575 |
+
#: includes/functions.php:5319 settings.php:1365
|
576 |
msgid "Title"
|
577 |
msgstr "Título"
|
578 |
|
579 |
+
#: ad-inserter.php:12098
|
580 |
msgctxt "Widget"
|
581 |
msgid "Sticky"
|
582 |
msgstr "Fija"
|
583 |
|
584 |
+
#: ad-inserter.php:12149
|
585 |
msgid ""
|
586 |
"Ad Inserter can't be used while Ad Inserter Pro is active! To activate Ad "
|
587 |
"Inserter you need to first deactivate Ad Inserter Pro."
|
589 |
"¡Ad Inserter no se puede utilizar mientras que Ad Inserter Pro esté activo! "
|
590 |
"Para activar Ad Inserter, primero debes desactivar Ad Inserter Pro."
|
591 |
|
592 |
+
#: ad-inserter.php:12150
|
593 |
msgid ""
|
594 |
"<strong>WARNING</strong>: Please note that saving settings in Ad Inserter "
|
595 |
"will clear all settings that are available only in the Pro version "
|
600 |
"versión Pro (ajustes adicionales del bloque y del plugin)"
|
601 |
|
602 |
#. translators: %s: Ad Inserter
|
603 |
+
#: class.php:647 class.php:656 class.php:659
|
604 |
msgid "PHP error in %s block"
|
605 |
msgstr "Error PHP en %s bloque"
|
606 |
|
607 |
+
#: class.php:2555
|
608 |
msgid "Counters"
|
609 |
msgstr "Contadores"
|
610 |
|
611 |
+
#: class.php:2559
|
612 |
msgid "Content"
|
613 |
msgstr "Contenido"
|
614 |
|
615 |
+
#: class.php:2564
|
616 |
msgid "Excerpt"
|
617 |
msgstr "Extracto"
|
618 |
|
619 |
+
#: class.php:2569 strings.php:17
|
620 |
msgid "Before post"
|
621 |
msgstr "Antes de la entrada"
|
622 |
|
623 |
+
#: class.php:2574 strings.php:18
|
624 |
msgid "After post"
|
625 |
msgstr "Después de la entrada"
|
626 |
|
627 |
+
#: class.php:2579 strings.php:25
|
628 |
msgid "Between posts"
|
629 |
msgstr "Entre las entradas"
|
630 |
|
631 |
+
#: class.php:2584 settings.php:2099 settings.php:4664
|
632 |
msgid "Widget"
|
633 |
msgstr "Widget"
|
634 |
|
635 |
+
#: class.php:2589 settings.php:4662
|
636 |
msgid "PHP function call"
|
637 |
msgstr "Llamada de función PHP"
|
638 |
|
639 |
#. Translators: %s: custom hook name
|
640 |
+
#: class.php:2599
|
641 |
msgid "Custom hook %s call"
|
642 |
msgstr "Llamada del gancho personalizado %s"
|
643 |
|
644 |
+
#: class.php:2637
|
645 |
msgid "AJAX REQUEST"
|
646 |
msgstr "SOLICITUD DE AJAX"
|
647 |
|
648 |
+
#: class.php:2640
|
649 |
msgid "Ajax request for block in iframe"
|
650 |
msgstr "Ajax solicita bloque en iframe"
|
651 |
|
652 |
+
#: class.php:2677
|
653 |
msgid "Ajax request url, click to open it in a new tab"
|
654 |
msgstr "Ajax solicita una url, haga clic para abrirlo en una nueva pestaña"
|
655 |
|
656 |
+
#: class.php:2680
|
657 |
msgid "IN THE LOOP"
|
658 |
msgstr "EN EL BUCLE"
|
659 |
|
660 |
+
#: class.php:2680
|
661 |
msgid "YES"
|
662 |
msgstr "SÍ"
|
663 |
|
664 |
+
#: class.php:2680
|
665 |
msgid "NO"
|
666 |
msgstr "NO"
|
667 |
|
668 |
+
#: class.php:2715
|
669 |
msgid "BLOCK"
|
670 |
msgstr "BLOQUE"
|
671 |
|
672 |
+
#: class.php:2715
|
673 |
msgctxt "block or widget"
|
674 |
msgid "INSERTED BUT NOT VISIBLE"
|
675 |
msgstr "INSERTADO PERO NO VISIBLE"
|
676 |
|
677 |
+
#: class.php:2939
|
678 |
msgctxt "viewports"
|
679 |
msgid "ALL"
|
680 |
msgstr "TODOS"
|
681 |
|
682 |
+
#: class.php:2976 class.php:3017 class.php:4796 strings.php:283
|
683 |
msgctxt "Block"
|
684 |
msgid "HIDDEN"
|
685 |
msgstr "OCULTO"
|
686 |
|
687 |
+
#: class.php:3024 class.php:4799 strings.php:282
|
688 |
msgctxt "Block"
|
689 |
msgid "VISIBLE"
|
690 |
msgstr "VISIBLE"
|
691 |
|
692 |
+
#: class.php:3092
|
693 |
+
msgctxt "fallback"
|
694 |
+
msgid "INACTIVE"
|
695 |
+
msgstr "INACTIVO"
|
696 |
+
|
697 |
+
#: class.php:3093
|
698 |
+
msgctxt "fallback"
|
699 |
+
msgid "ACTIVE"
|
700 |
+
msgstr "ACTIVO"
|
701 |
+
|
702 |
+
#: class.php:3115
|
703 |
+
msgctxt "Block"
|
704 |
+
msgid "FALLBACK CODE"
|
705 |
+
msgstr "CÓDIGO DE RESPALDO"
|
706 |
+
|
707 |
+
#: class.php:3862 class.php:3961
|
708 |
msgid "ACTIVE GROUPS"
|
709 |
msgstr "GRUPOS ACTIVOS"
|
710 |
|
711 |
+
#: class.php:4468
|
712 |
msgid "start='%s' end='%s' days='%s' type='%s'"
|
713 |
msgstr "start='%s' end='%s' days='%s' type='%s'"
|
714 |
|
715 |
+
#: class.php:4476
|
716 |
msgid "parameters='%s' type='%s'"
|
717 |
msgstr "parameters='%s' type='%s'"
|
718 |
|
719 |
+
#: class.php:4478
|
720 |
+
#| msgid "countries='%s' type='%s'"
|
721 |
+
msgid "cookies='%s' type='%s'"
|
722 |
+
msgstr "cookies='%s' type='%s'"
|
723 |
+
|
724 |
#. translators: %s: list parameters and type
|
725 |
+
#: class.php:4480
|
726 |
msgid "referers='%s' type='%s'"
|
727 |
msgstr "referers='%s' type='%s'"
|
728 |
|
729 |
#. translators: %s: list parameters and type
|
730 |
+
#: class.php:4482
|
731 |
msgid "clients='%s' type='%s'"
|
732 |
msgstr "clientes='%s' tipo='%s'"
|
733 |
|
734 |
#. translators: %s: list parameters and type
|
735 |
+
#: class.php:4678
|
736 |
msgid "countries='%s' type='%s'"
|
737 |
msgstr "countries='%s' type='%s'"
|
738 |
|
739 |
#. translators: %s: list parameters and type
|
740 |
+
#: class.php:4680
|
741 |
msgid "ip addresses='%s' type='%s'"
|
742 |
msgstr "ip addresses='%s' type='%s'"
|
743 |
|
744 |
+
#: class.php:4796 class.php:4799
|
745 |
msgid "viewport='%s' type='%s'"
|
746 |
msgstr "viewport='%s' type='%s'"
|
747 |
|
748 |
+
#: class.php:4934 strings.php:284
|
749 |
+
msgctxt "alternative block"
|
750 |
+
msgid "FALLBACK"
|
751 |
+
msgstr "RESPALDO"
|
752 |
+
|
753 |
+
#: class.php:5588 strings.php:276
|
754 |
msgid "BEFORE"
|
755 |
msgstr "ANTES"
|
756 |
|
757 |
+
#: class.php:5596 strings.php:278
|
758 |
msgid "PREPEND CONTENT"
|
759 |
msgstr "ANEXAR CONTENIDO"
|
760 |
|
761 |
+
#: class.php:5600 strings.php:279
|
762 |
msgid "APPEND CONTENT"
|
763 |
msgstr "ADJUNTAR CONTENIDO"
|
764 |
|
765 |
+
#: class.php:5604 strings.php:280
|
766 |
msgid "REPLACE CONTENT"
|
767 |
msgstr "REEMPLAZAR EL CONTENIDO"
|
768 |
|
769 |
+
#: class.php:5608 strings.php:281
|
770 |
msgid "REPLACE ELEMENT"
|
771 |
msgstr "REEMPLAZAR EL ELEMENTO"
|
772 |
|
773 |
+
#: class.php:5619 strings.php:277
|
774 |
msgid "AFTER"
|
775 |
msgstr "DESPUÉS"
|
776 |
|
777 |
+
#: class.php:5688 includes/preview.php:2466 includes/preview.php:2503
|
778 |
msgid "Code"
|
779 |
msgstr "Código"
|
780 |
|
781 |
+
#: class.php:5691
|
782 |
msgid "for block"
|
783 |
msgstr "para el bloque"
|
784 |
|
785 |
+
#: class.php:9980
|
786 |
msgid ""
|
787 |
"ERROR: class DOMDocument not found. Your webhost needs to install the DOM "
|
788 |
"extension for PHP."
|
791 |
"extensión DOM de PHP."
|
792 |
|
793 |
#: includes/editor.php:4 includes/placeholders.php:350
|
794 |
+
#: includes/preview.php:2407 strings.php:289
|
795 |
msgid "Use"
|
796 |
msgstr "Usar"
|
797 |
|
798 |
+
#: includes/editor.php:5 includes/preview.php:2408
|
799 |
msgid "Reset"
|
800 |
msgstr "Restablecer"
|
801 |
|
802 |
#: includes/editor.php:6 includes/placeholders.php:352
|
803 |
+
#: includes/preview.php:2410 settings.php:3978 strings.php:230 strings.php:288
|
804 |
msgid "Cancel"
|
805 |
msgstr "Cancelar"
|
806 |
|
808 |
msgid "Visual Code Editor"
|
809 |
msgstr "Editor visual de código"
|
810 |
|
811 |
+
#: includes/editor.php:259 includes/preview-adb.php:301
|
812 |
+
#: includes/preview.php:2397
|
813 |
msgid ""
|
814 |
"This page was not loaded properly. Please check browser, plugins and ad "
|
815 |
"blockers."
|
817 |
"Esta página no se cargó correctamente. Comprueba el navegador, plugins y "
|
818 |
"bloqueadores de anuncios."
|
819 |
|
820 |
+
#: includes/editor.php:261 settings.php:331
|
821 |
msgid "Error loading page"
|
822 |
msgstr "Error al cargar la página"
|
823 |
|
824 |
+
#: includes/editor.php:261 includes/preview-adb.php:303
|
825 |
+
#: includes/preview.php:2399
|
826 |
msgid "PAGE BLOCKED"
|
827 |
msgstr "PÁGINA BLOQUEADA"
|
828 |
|
829 |
+
#: includes/functions-check-now.php:288 includes/functions.php:326
|
830 |
msgid "%d of %d names shown"
|
831 |
msgstr "%d de %d nombres mostrados"
|
832 |
|
833 |
#. translators: %s: name filter
|
834 |
+
#: includes/functions-check-now.php:307 includes/functions.php:345
|
835 |
msgid "No name matches filter"
|
836 |
msgstr "Ningún nombre coincide con el filtro"
|
837 |
|
838 |
#. translators: %s: Ad Inserter Pro
|
839 |
+
#: includes/functions-check-now.php:396 includes/functions.php:439
|
840 |
msgid ""
|
841 |
"Import %s settings when saving - if checked, the encoded settings below will "
|
842 |
"be imported for all blocks and settings"
|
844 |
"Importar la configuración de %s al guardar: si está marcado, los ajustes "
|
845 |
"codificados a continuación se importarán para todos los bloques y ajustes"
|
846 |
|
847 |
+
#: includes/functions-check-now.php:396
|
848 |
msgid "Import Settings for"
|
849 |
msgstr "Importar ajustes para"
|
850 |
|
851 |
+
#: includes/functions-check-now.php:400
|
852 |
msgid "Saved settings for"
|
853 |
msgstr "Ajustes guardados para"
|
854 |
|
855 |
+
#: includes/functions-check-now.php:420 includes/functions.php:474
|
856 |
msgid "License Key"
|
857 |
msgstr "Clave de licencia"
|
858 |
|
859 |
+
#: includes/functions-check-now.php:423 includes/functions.php:477
|
860 |
msgid "License Key for"
|
861 |
msgstr "Clave de licencia para"
|
862 |
|
863 |
+
#: includes/functions-check-now.php:425 includes/functions.php:479
|
864 |
msgid "Open license page"
|
865 |
msgstr "Abrir página de licencia"
|
866 |
|
867 |
+
#: includes/functions-check-now.php:432 includes/functions.php:486
|
868 |
msgid "Hide license key"
|
869 |
msgstr "Ocultar clave de licencia"
|
870 |
|
871 |
+
#: includes/functions-check-now.php:432 includes/functions.php:486
|
872 |
msgid "Hide key"
|
873 |
msgstr "Ocultar clave"
|
874 |
|
875 |
+
#: includes/functions-check-now.php:447 includes/functions.php:503
|
876 |
msgid "Main content element"
|
877 |
msgstr "Elemento de contenido principal"
|
878 |
|
879 |
+
#: includes/functions-check-now.php:450 includes/functions.php:506
|
880 |
msgid ""
|
881 |
"Main content element (#id or .class) for 'Stick to the content' position. "
|
882 |
"Leave empty unless position is not properly calculated."
|
884 |
"Elemento de contenido principal (#id o .class) para la posición «Cíñete al "
|
885 |
"contenido»."
|
886 |
|
887 |
+
#: includes/functions-check-now.php:451 includes/functions.php:507
|
888 |
+
#: settings.php:1522 settings.php:1562 settings.php:3105
|
889 |
msgid "Open HTML element selector"
|
890 |
msgstr "Abrir selector de elemento HTML"
|
891 |
|
892 |
+
#: includes/functions-check-now.php:456 includes/functions.php:512
|
893 |
msgid "Lazy loading offset"
|
894 |
msgstr "Compensación carga diferida"
|
895 |
|
896 |
+
#: includes/functions-check-now.php:459 includes/functions.php:515
|
897 |
msgid "Offset of the block from the visible viewport when it should be loaded"
|
898 |
msgstr ""
|
899 |
"Desplazamiento del bloque desde la ventana gráfica visible cuando se debe "
|
900 |
"cargar"
|
901 |
|
902 |
+
#: includes/functions-check-now.php:470 includes/functions.php:583
|
903 |
msgid "Export / Import Block Settings"
|
904 |
msgstr "Exportar / Importar los ajustes del bloque"
|
905 |
|
906 |
+
#: includes/functions-check-now.php:485 includes/functions.php:600
|
907 |
msgid "Track impressions and clicks for this block"
|
908 |
msgstr "Seguimiento de impresiones y clics para este bloque"
|
909 |
|
910 |
+
#: includes/functions-check-now.php:485 includes/functions.php:600
|
911 |
msgid " - global tracking disabled"
|
912 |
msgstr " - seguimiento global deshabilitado"
|
913 |
|
914 |
+
#: includes/functions-check-now.php:492 includes/functions.php:608
|
915 |
+
#: includes/functions.php:5012
|
916 |
msgid "Generate PDF report"
|
917 |
msgstr "Generar informe en PDF"
|
918 |
|
919 |
+
#: includes/functions-check-now.php:497 includes/functions.php:622
|
920 |
msgid "Open public report"
|
921 |
msgstr "Abrir informe público"
|
922 |
|
923 |
+
#: includes/functions-check-now.php:511 includes/functions.php:636
|
924 |
msgid "Toggle Ad Blocking Statistics"
|
925 |
msgstr "Alternar estadísticas de bloqueo de anuncios"
|
926 |
|
927 |
+
#: includes/functions-check-now.php:519 includes/functions-check-now.php:3036
|
928 |
+
#: includes/functions.php:644 includes/functions.php:4993
|
929 |
msgid "Toggle Statistics"
|
930 |
msgstr "Alternar estadísticas"
|
931 |
|
932 |
+
#: includes/functions-check-now.php:528 includes/functions.php:653
|
933 |
msgid "Pin list"
|
934 |
msgstr "Lista de pines"
|
935 |
|
936 |
#. translators: %s: Ad Inserter Pro
|
937 |
+
#: includes/functions-check-now.php:543 includes/functions.php:676
|
938 |
msgid "%s license key is not set. Continue?"
|
939 |
msgstr "La clave de licencia %s no está configurada. ¿Seguir?"
|
940 |
|
941 |
#. translators: %s: Ad Inserter Pro
|
942 |
+
#: includes/functions-check-now.php:547 includes/functions.php:680
|
943 |
msgid "Invalid %s license key. Continue?"
|
944 |
msgstr "La clave de licencia %s no válida. ¿Seguir?"
|
945 |
|
946 |
#. translators: %s: Ad Inserter Pro
|
947 |
+
#: includes/functions-check-now.php:551 includes/functions.php:684
|
948 |
msgid "%s license overused. Continue?"
|
949 |
msgstr "Licencia de %s sobreutilizada. ¿Seguir?"
|
950 |
|
951 |
+
#: includes/functions-check-now.php:555 includes/functions.php:694
|
952 |
+
#: settings.php:1270 settings.php:2488
|
953 |
msgid "Save Settings"
|
954 |
msgstr "Guardar ajustes"
|
955 |
|
956 |
+
#: includes/functions-check-now.php:615 includes/functions.php:762
|
957 |
+
#: includes/preview.php:2598
|
958 |
msgid "Horizontal position"
|
959 |
msgstr "Posición horizontal"
|
960 |
|
961 |
+
#: includes/functions-check-now.php:638 includes/functions.php:787
|
962 |
msgid ""
|
963 |
"Horizontal margin from the content or screen edge, empty means default value "
|
964 |
"from CSS"
|
966 |
"Margen horizontal desde el contenido o el borde de la pantalla, vacío "
|
967 |
"significa valor por defecto de CSS"
|
968 |
|
969 |
+
#: includes/functions-check-now.php:646 includes/functions.php:795
|
970 |
+
#: includes/preview.php:2658
|
971 |
msgid "Vertical position"
|
972 |
msgstr "Posición vertical"
|
973 |
|
974 |
+
#: includes/functions-check-now.php:661 includes/functions.php:810
|
975 |
msgid ""
|
976 |
"Vertical margin from the top or bottom screen edge, empty means default "
|
977 |
"value from CSS"
|
979 |
"Margen vertical desde el contenido o el borde de la pantalla, vacío "
|
980 |
"significa valor por defecto de CSS"
|
981 |
|
982 |
+
#: includes/functions-check-now.php:686 includes/functions.php:841
|
983 |
+
#: includes/preview.php:2713
|
984 |
msgid "Animation"
|
985 |
msgstr "Animación"
|
986 |
|
987 |
+
#: includes/functions-check-now.php:704
|
988 |
msgid "Trigger"
|
989 |
msgstr "Activador"
|
990 |
|
991 |
+
#: includes/functions-check-now.php:713
|
992 |
msgid ""
|
993 |
"Trigger value: page scroll in %, page scroll in px or element with selector "
|
994 |
"(#id or .class) becomes visible"
|
996 |
"Valor de activación: scroll de página en %, scroll de página en px o cuando "
|
997 |
"elemento con selector (#id o .class) se vuelve visible"
|
998 |
|
999 |
+
#: includes/functions-check-now.php:717 includes/functions.php:876
|
1000 |
+
#: includes/functions.php:903
|
1001 |
msgid "Offset"
|
1002 |
msgstr "Compensación"
|
1003 |
|
1004 |
+
#: includes/functions-check-now.php:717 includes/functions.php:876
|
1005 |
+
#: includes/functions.php:903
|
1006 |
msgid "Offset of trigger element"
|
1007 |
msgstr "Compensación del elemento activador"
|
1008 |
|
1009 |
+
#: includes/functions-check-now.php:721 includes/functions.php:880
|
1010 |
+
#: includes/functions.php:907 settings.php:1577
|
1011 |
msgid "Delay"
|
1012 |
msgstr "Retraso"
|
1013 |
|
1014 |
+
#: includes/functions-check-now.php:721 includes/functions.php:880
|
1015 |
msgid "Delay animation after trigger condition"
|
1016 |
msgstr "Retraso de la animación después de la condición de disparo"
|
1017 |
|
1018 |
+
#: includes/functions-check-now.php:725
|
1019 |
msgid "Trigger once"
|
1020 |
msgstr "Activar una vez"
|
1021 |
|
1022 |
+
#: includes/functions-check-now.php:727
|
1023 |
msgid "Trigger animation only once"
|
1024 |
msgstr "Activa la animación solo una vez"
|
1025 |
|
1026 |
+
#: includes/functions-check-now.php:769 includes/functions-check-now.php:2529
|
1027 |
+
#: includes/functions-check-now.php:2546 includes/functions.php:1060
|
1028 |
+
#: includes/functions.php:3270 includes/functions.php:3286
|
1029 |
msgid "Tracking is globally disabled"
|
1030 |
msgstr "El seguimiento está deshabilitado globalmente"
|
1031 |
|
1032 |
+
#: includes/functions-check-now.php:773 includes/functions-check-now.php:2533
|
1033 |
+
#: includes/functions-check-now.php:2550 includes/functions.php:1064
|
1034 |
+
#: includes/functions.php:3274 includes/functions.php:3290
|
1035 |
msgid "Tracking for this block is disabled"
|
1036 |
msgstr "El seguimiento para este bloque está deshabilitado"
|
1037 |
|
1038 |
+
#: includes/functions-check-now.php:780 includes/functions.php:1071
|
1039 |
msgid "Double click to toggle controls in public reports"
|
1040 |
msgstr "Haz doble clic para alternar los controles en los informes públicos"
|
1041 |
|
1042 |
+
#: includes/functions-check-now.php:786 includes/functions.php:1077
|
1043 |
+
#: includes/functions.php:4544 settings.php:3898 settings.php:3934
|
1044 |
+
#: settings.php:3995 strings.php:244
|
1045 |
msgid "Loading..."
|
1046 |
msgstr "Cargando..."
|
1047 |
|
1048 |
+
#: includes/functions-check-now.php:807 includes/functions.php:1098
|
1049 |
msgid ""
|
1050 |
"Clear statistics data for the selected range - clear both dates to delete "
|
1051 |
"all data for this block"
|
1053 |
"Borrar datos estadísticos para el rango seleccionado: borre ambas fechas "
|
1054 |
"para borrar todos los datos de este bloque"
|
1055 |
|
1056 |
+
#: includes/functions-check-now.php:811 includes/functions.php:1102
|
1057 |
msgid "Auto refresh data for the selected range every 60 seconds"
|
1058 |
msgstr ""
|
1059 |
"Actualización automática de datos para el rango seleccionado cada 60 segundos"
|
1060 |
|
1061 |
+
#: includes/functions-check-now.php:814 includes/functions-check-now.php:5390
|
1062 |
+
#: includes/functions.php:1105 includes/functions.php:8594
|
1063 |
msgid "Load data for last month"
|
1064 |
msgstr "Cargar datos del último mes"
|
1065 |
|
1066 |
+
#: includes/functions-check-now.php:814 includes/functions-check-now.php:5390
|
1067 |
+
#: includes/functions.php:1105 includes/functions.php:8594
|
1068 |
msgid "Last Month"
|
1069 |
msgstr "El mes pasado"
|
1070 |
|
1071 |
+
#: includes/functions-check-now.php:817 includes/functions-check-now.php:5393
|
1072 |
+
#: includes/functions.php:1108 includes/functions.php:8597
|
1073 |
msgid "Load data for this month"
|
1074 |
msgstr "Cargar datos de este mes"
|
1075 |
|
1076 |
+
#: includes/functions-check-now.php:817 includes/functions-check-now.php:5393
|
1077 |
+
#: includes/functions.php:1108 includes/functions.php:8597
|
1078 |
msgid "This Month"
|
1079 |
msgstr "Este mes"
|
1080 |
|
1081 |
+
#: includes/functions-check-now.php:820 includes/functions-check-now.php:5396
|
1082 |
+
#: includes/functions.php:1111 includes/functions.php:8600
|
1083 |
msgid "Load data for this year"
|
1084 |
msgstr "Cargar datos de este año"
|
1085 |
|
1086 |
+
#: includes/functions-check-now.php:820 includes/functions-check-now.php:5396
|
1087 |
+
#: includes/functions.php:1111 includes/functions.php:8600
|
1088 |
msgid "This Year"
|
1089 |
msgstr "Este año"
|
1090 |
|
1091 |
+
#: includes/functions-check-now.php:823 includes/functions-check-now.php:5399
|
1092 |
+
#: includes/functions.php:1114 includes/functions.php:8603
|
1093 |
msgid "Load data for the last 15 days"
|
1094 |
msgstr "Cargar datos de los últimos 15 días"
|
1095 |
|
1096 |
+
#: includes/functions-check-now.php:826 includes/functions-check-now.php:5402
|
1097 |
+
#: includes/functions.php:1117 includes/functions.php:8606
|
1098 |
msgid "Load data for the last 30 days"
|
1099 |
msgstr "Cargar datos de los últimos 30 días"
|
1100 |
|
1101 |
+
#: includes/functions-check-now.php:829 includes/functions-check-now.php:5405
|
1102 |
+
#: includes/functions.php:1120 includes/functions.php:8609
|
1103 |
msgid "Load data for the last 90 days"
|
1104 |
msgstr "Cargar datos de los últimos 90 días"
|
1105 |
|
1106 |
+
#: includes/functions-check-now.php:832 includes/functions-check-now.php:5408
|
1107 |
+
#: includes/functions.php:1123 includes/functions.php:8612
|
1108 |
msgid "Load data for the last 180 days"
|
1109 |
msgstr "Cargar datos de los últimos 180 días"
|
1110 |
|
1111 |
+
#: includes/functions-check-now.php:835 includes/functions-check-now.php:5411
|
1112 |
+
#: includes/functions.php:1126 includes/functions.php:8615
|
1113 |
msgid "Load data for the last 365 days"
|
1114 |
msgstr "Cargar datos de los últimos 365 días"
|
1115 |
|
1116 |
+
#: includes/functions-check-now.php:845 includes/functions-check-now.php:5421
|
1117 |
+
#: includes/functions.php:1136 includes/functions.php:8625
|
1118 |
msgid "Load data for the selected range"
|
1119 |
msgstr "Cargar datos para el rango seleccionado"
|
1120 |
|
1121 |
+
#: includes/functions-check-now.php:861 includes/functions.php:1153
|
1122 |
msgid ""
|
1123 |
"Import settings when saving - if checked, the encoded settings below will be "
|
1124 |
"imported for this block"
|
1126 |
"Importar los ajustes al guardar: si está marcado, los ajustes codificados a "
|
1127 |
"continuación se importarán para este bloque"
|
1128 |
|
1129 |
+
#: includes/functions-check-now.php:861 includes/functions.php:1153
|
1130 |
msgid "Import settings for block"
|
1131 |
msgstr "Importar los ajustes para el bloque"
|
1132 |
|
1133 |
+
#: includes/functions-check-now.php:865 includes/functions.php:1157
|
1134 |
msgid ""
|
1135 |
"Import block name when saving - if checked and 'Import settings for block' "
|
1136 |
"is also checked, the name from encoded settings below will be imported for "
|
1140 |
"marcado «Importar los ajustes para el bloque», el nombre de los ajustes "
|
1141 |
"codificados a continuación se importarán para este bloque"
|
1142 |
|
1143 |
+
#: includes/functions-check-now.php:865 includes/functions.php:1157
|
1144 |
msgid "Import block name"
|
1145 |
msgstr "Importar nombre de bloque"
|
1146 |
|
1147 |
+
#: includes/functions-check-now.php:869 includes/functions.php:1161
|
1148 |
msgid "Saved settings for block"
|
1149 |
msgstr "Ajustes guardados para el bloque"
|
1150 |
|
1151 |
+
#: includes/functions-check-now.php:882 includes/functions.php:1176
|
1152 |
msgid "Export / Import Ad Inserter Pro Settings"
|
1153 |
msgstr "Exportar / importar los ajustes de Ad Inserter Pro"
|
1154 |
|
1155 |
+
#: includes/functions-check-now.php:892 includes/functions.php:1195
|
1156 |
msgid "Are you sure you want to clear all statistics data for all blocks?"
|
1157 |
msgstr ""
|
1158 |
"¿Está seguro de que desea borrar todos los datos estadísticos de todos los "
|
1159 |
"bloques?"
|
1160 |
|
1161 |
+
#: includes/functions-check-now.php:894 includes/functions.php:1197
|
1162 |
msgid "Clear All Statistics Data"
|
1163 |
msgstr "Borrar todos los datos de estadísticas"
|
1164 |
|
1165 |
+
#: includes/functions-check-now.php:921 includes/functions.php:1231
|
1166 |
msgid "Toggle country/city editor"
|
1167 |
msgstr "Cambiar editor de país/ciudad"
|
1168 |
|
1169 |
+
#: includes/functions-check-now.php:927 includes/functions.php:1237
|
1170 |
msgid "IP Addresses"
|
1171 |
msgstr "Direcciones IP"
|
1172 |
|
1173 |
+
#: includes/functions-check-now.php:930 includes/functions.php:1240
|
1174 |
msgid "Toggle IP address editor"
|
1175 |
msgstr "Alternar editor de direcciones IP"
|
1176 |
|
1177 |
+
#: includes/functions-check-now.php:933 includes/functions.php:1243
|
1178 |
msgid ""
|
1179 |
"Comma separated IP addresses, you can also use partial IP addresses with * "
|
1180 |
"(ip-address-start*. *ip-address-pattern*, *ip-address-end)"
|
1183 |
"parciales con * (dirección-ip-inicio*. *patrón-dirección-ip*, *dirección-ip-"
|
1184 |
"final)"
|
1185 |
|
1186 |
+
#: includes/functions-check-now.php:937
|
1187 |
msgid "Blacklist IP addresses"
|
1188 |
msgstr "Direcciones IP de la lista negra"
|
1189 |
|
1190 |
+
#: includes/functions-check-now.php:941
|
1191 |
msgid "Whitelist IP addresses"
|
1192 |
msgstr "Direcciones IP de la lista blanca"
|
1193 |
|
1194 |
+
#: includes/functions-check-now.php:952 includes/functions.php:1259
|
1195 |
msgid "Countries"
|
1196 |
msgstr "Países"
|
1197 |
|
1198 |
+
#: includes/functions-check-now.php:953 includes/functions.php:1260
|
1199 |
msgid "Cities"
|
1200 |
msgstr "Ciudades"
|
1201 |
|
1202 |
+
#: includes/functions-check-now.php:957 includes/functions-check-now.php:3001
|
1203 |
+
#: includes/functions.php:1264 includes/functions.php:4958
|
1204 |
msgid "Toggle country editor"
|
1205 |
msgstr "Alternar editor de países"
|
1206 |
|
1207 |
+
#: includes/functions-check-now.php:960 includes/functions.php:1267
|
1208 |
msgid "Toggle city editor"
|
1209 |
msgstr "Alternar el editor de ciudades"
|
1210 |
|
1211 |
+
#: includes/functions-check-now.php:964 includes/functions-check-now.php:3004
|
1212 |
+
#: includes/functions.php:1271 includes/functions.php:4961
|
1213 |
msgid "Comma separated country ISO Alpha-2 codes"
|
1214 |
msgstr "Códigos ISO Alpha-2 de países separados por comas"
|
1215 |
|
1216 |
+
#: includes/functions-check-now.php:968
|
1217 |
msgid "Blacklist countries"
|
1218 |
msgstr "Países de la lista negra"
|
1219 |
|
1220 |
+
#: includes/functions-check-now.php:972
|
1221 |
msgid "Whitelist countries"
|
1222 |
msgstr "Países de la lista blanca"
|
1223 |
|
1224 |
+
#: includes/functions-check-now.php:1383 includes/functions-check-now.php:1682
|
1225 |
+
#: includes/functions.php:1851 includes/functions.php:2186
|
1226 |
msgid "Enter license key"
|
1227 |
msgstr "Introduce la clave de licencia"
|
1228 |
|
1229 |
#. translators: %s: Ad Inserter Pro
|
1230 |
+
#: includes/functions-check-now.php:1389 includes/functions.php:1857
|
1231 |
msgid ""
|
1232 |
"%s license key is not set. Plugin functionality is limited and updates are "
|
1233 |
"disabled."
|
1236 |
"limitada y las actualizaciones están deshabilitadas."
|
1237 |
|
1238 |
#. translators: %s: Ad Inserter Pro
|
1239 |
+
#: includes/functions-check-now.php:1403 includes/functions.php:1871
|
1240 |
msgid "Warning: %s plugin update server is not accessible"
|
1241 |
msgstr ""
|
1242 |
"Advertencia: el servidor de actualización del plugin %s no es accesible"
|
1243 |
|
1244 |
#. translators: updates are not available
|
1245 |
+
#: includes/functions-check-now.php:1405 includes/functions.php:1873
|
1246 |
msgid "updates"
|
1247 |
msgstr "actualizaciones"
|
1248 |
|
1249 |
#. translators: updates are not available
|
1250 |
+
#: includes/functions-check-now.php:1407 includes/functions.php:1875
|
1251 |
msgid "are not available"
|
1252 |
msgstr "no están disponible"
|
1253 |
|
1254 |
+
#: includes/functions-check-now.php:1412 includes/functions-check-now.php:1691
|
1255 |
+
#: includes/functions.php:1880 includes/functions.php:2195
|
1256 |
msgid "Check license key"
|
1257 |
msgstr "Comprueba la clave de licencia"
|
1258 |
|
1259 |
#. translators: %s: Ad Inserter Pro
|
1260 |
+
#: includes/functions-check-now.php:1418 includes/functions.php:1886
|
1261 |
msgid "Invalid %s license key."
|
1262 |
msgstr "Clave de licencia %s no válida."
|
1263 |
|
1264 |
#. translators: %s: Ad Inserter Pro
|
1265 |
+
#: includes/functions-check-now.php:1427 includes/functions.php:1895
|
1266 |
msgid "%s license expired. Plugin updates are disabled."
|
1267 |
msgstr ""
|
1268 |
"La licencia de %s expiró. Las actualizaciones de plugins están "
|
1269 |
"deshabilitadas."
|
1270 |
|
1271 |
+
#: includes/functions-check-now.php:1428 includes/functions.php:1896
|
1272 |
msgid "Renew license"
|
1273 |
msgstr "Renovar licencia"
|
1274 |
|
1275 |
#. translators: %s: Ad Inserter Pro
|
1276 |
+
#: includes/functions-check-now.php:1436 includes/functions.php:1904
|
1277 |
msgid "%s license overused. Plugin updates are disabled."
|
1278 |
msgstr ""
|
1279 |
"Licencia de %s sobreutilizada. Las actualizaciones de plugins están "
|
1280 |
"deshabilitadas."
|
1281 |
|
1282 |
+
#: includes/functions-check-now.php:1437 includes/functions.php:1905
|
1283 |
msgid "Manage licenses"
|
1284 |
msgstr "Administrar licencias"
|
1285 |
|
1286 |
+
#: includes/functions-check-now.php:1437 includes/functions.php:1905
|
1287 |
msgid "Upgrade license"
|
1288 |
msgstr "Actualizar licencia"
|
1289 |
|
1290 |
#. translators: 1, 2: HTML tags, 3: Ad Inserter Pro
|
1291 |
+
#: includes/functions-check-now.php:1684 includes/functions.php:2188
|
1292 |
msgid ""
|
1293 |
"%1$s Warning: %2$s %3$s license key is not set. Plugin functionality is "
|
1294 |
"limited and updates are disabled."
|
1298 |
"deshabilitadas."
|
1299 |
|
1300 |
#. translators: 1, 2,: HTML tags, 3: Ad Inserter Pro
|
1301 |
+
#: includes/functions-check-now.php:1693 includes/functions.php:2197
|
1302 |
msgid "%1$s Warning: %2$s Invalid %3$s license key."
|
1303 |
msgstr "%1$s Advertencia: %2$s Clave de licencia %3$s no válida."
|
1304 |
|
1305 |
#. translators: 2, 3: HTML tags, 1: Ad Inserter Pro
|
1306 |
+
#: includes/functions-check-now.php:1709 includes/functions.php:2213
|
1307 |
msgid ""
|
1308 |
"Hey, %1$s license has expired - plugin updates are now disabled. Please "
|
1309 |
"renew the license to enable updates. Check %2$s what you are missing. %3$s"
|
1313 |
"actualizaciones. Comprueba %2$s lo que te falta. %3$s"
|
1314 |
|
1315 |
#. translators: 1, 3: HTML tags, 2: percentage
|
1316 |
+
#: includes/functions-check-now.php:1716 includes/functions.php:2220
|
1317 |
msgid ""
|
1318 |
"During the license period and 30 days after the license has expired we offer "
|
1319 |
"%1$s %2$s discount on all license renewals and license upgrades. %3$s"
|
1322 |
"caducado, ofrecemos %1$s %2$s de descuento en todas las renovaciones y "
|
1323 |
"actualizaciones de licencias. %3$s"
|
1324 |
|
1325 |
+
#: includes/functions-check-now.php:1726 includes/functions.php:2230
|
1326 |
msgid "No, thank you."
|
1327 |
msgstr "No gracias."
|
1328 |
|
1329 |
+
#: includes/functions-check-now.php:1729 includes/functions.php:2233
|
1330 |
msgid "Not now, maybe later."
|
1331 |
msgstr "Ahora no, tal vez luego."
|
1332 |
|
1333 |
+
#: includes/functions-check-now.php:1743 includes/functions.php:2247
|
1334 |
msgid "Renew the licence"
|
1335 |
msgstr "Renovar la licencia"
|
1336 |
|
1337 |
+
#: includes/functions-check-now.php:1745 includes/functions.php:2249
|
1338 |
msgid "Update license status"
|
1339 |
msgstr "Actualizar el estado de la licencia"
|
1340 |
|
1341 |
#. translators: 1, 2, 4, 5, 6, 7: HTML tags, 3: Ad Inserter Pro
|
1342 |
+
#: includes/functions-check-now.php:1756 includes/functions.php:2262
|
1343 |
msgid ""
|
1344 |
"%1$s Warning: %2$s %3$s license overused. Plugin updates are disabled. %4$s "
|
1345 |
"Manage licenses %5$s — %6$s Upgrade license %7$s"
|
1349 |
"Actualizar licencia %7$s"
|
1350 |
|
1351 |
#. Translators: %s: HTML tag
|
1352 |
+
#: includes/functions-check-now.php:1778 includes/functions.php:2322
|
1353 |
msgid "Warning: %s MaxMind IP geolocation database not found."
|
1354 |
msgstr ""
|
1355 |
"Advertencia: No se encontró la base de datos de geolocalización IP %s "
|
1356 |
"MaxMind."
|
1357 |
|
1358 |
+
#: includes/functions-check-now.php:2331 includes/functions.php:3047
|
1359 |
msgid "Geolocation"
|
1360 |
msgstr "Geolocalización"
|
1361 |
|
1362 |
+
#: includes/functions-check-now.php:2335 includes/functions.php:3051
|
1363 |
+
#: settings.php:4651
|
1364 |
msgid "Exceptions"
|
1365 |
msgstr "Excepciones"
|
1366 |
|
1367 |
+
#: includes/functions-check-now.php:2340 includes/functions.php:3056
|
1368 |
msgid "Multisite"
|
1369 |
msgstr "Multisitio"
|
1370 |
|
1371 |
+
#: includes/functions-check-now.php:2345 includes/functions.php:3061
|
1372 |
+
#: settings.php:4657
|
1373 |
msgid "Tracking"
|
1374 |
msgstr "Seguimiento"
|
1375 |
|
1376 |
#. translators: %d: days, hours, minutes
|
1377 |
+
#: includes/functions-check-now.php:2376 includes/functions.php:3095
|
1378 |
msgid "Scheduled in %d days %d hours %d minutes"
|
1379 |
msgstr "Programado en %d días %d horas %d minutos"
|
1380 |
|
1381 |
#. translators: %s: HTML dash separator, %d: days, hours, minutes, — is
|
1382 |
#. HTML code for long dash separator
|
1383 |
+
#: includes/functions-check-now.php:2385 includes/functions.php:3104
|
1384 |
msgid "Active %s expires in %d days %d hours %d minutes"
|
1385 |
msgstr "El %s activo vence en %d días %d horas %d minutos"
|
1386 |
|
1387 |
+
#: includes/functions-check-now.php:2389 includes/functions.php:3108
|
1388 |
msgid "Expired"
|
1389 |
msgstr "Caducado"
|
1390 |
|
1391 |
+
#: includes/functions-check-now.php:2397 includes/functions.php:3134
|
1392 |
+
#: settings.php:1632 settings.php:1647 settings.php:1769 settings.php:2363
|
1393 |
msgid "and"
|
1394 |
msgstr "y"
|
1395 |
|
1396 |
+
#: includes/functions-check-now.php:2400 includes/functions.php:3116
|
1397 |
msgid "fallback"
|
1398 |
msgstr "respaldo"
|
1399 |
|
1400 |
+
#: includes/functions-check-now.php:2401 includes/functions.php:3117
|
1401 |
msgid "Block to be used when scheduling expires"
|
1402 |
msgstr "Bloque que se usará cuando caduca la programación"
|
1403 |
|
1404 |
+
#: includes/functions-check-now.php:2426 includes/functions.php:3156
|
1405 |
msgid "Load in iframe"
|
1406 |
msgstr "Cargar en iframe"
|
1407 |
|
1408 |
+
#: includes/functions-check-now.php:2430 includes/functions.php:3160
|
1409 |
+
#: includes/placeholders.php:387 settings.php:1230 settings.php:2390
|
1410 |
msgid "Width"
|
1411 |
msgstr "Ancho"
|
1412 |
|
1413 |
+
#: includes/functions-check-now.php:2431 includes/functions.php:3161
|
1414 |
msgid "iframe width, empty means full width (100%)"
|
1415 |
msgstr "ancho del iframe, vacío significa ancho completo (100%)"
|
1416 |
|
1417 |
+
#: includes/functions-check-now.php:2437 includes/functions.php:3167
|
1418 |
+
#: includes/placeholders.php:382 settings.php:1236 settings.php:2394
|
1419 |
msgid "Height"
|
1420 |
msgstr "Altura"
|
1421 |
|
1422 |
+
#: includes/functions-check-now.php:2438 includes/functions.php:3168
|
1423 |
msgid "iframe height, empty means adjust it to iframe content height"
|
1424 |
msgstr ""
|
1425 |
"altura del iframe, vacío significa ajustarlo a la altura del contenido del "
|
1426 |
"iframe"
|
1427 |
|
1428 |
+
#: includes/functions-check-now.php:2445 includes/functions.php:3175
|
1429 |
msgid "Ad label in iframe"
|
1430 |
msgstr "Etiqueta de anuncio en iframe"
|
1431 |
|
1432 |
+
#: includes/functions-check-now.php:2450 includes/functions.php:3180
|
1433 |
msgid "Preview iframe code"
|
1434 |
msgstr "Vista previa del código de iframe"
|
1435 |
|
1436 |
+
#: includes/functions-check-now.php:2450 includes/functions.php:3180
|
1437 |
+
#: includes/preview.php:2419 settings.php:1265 settings.php:3178
|
1438 |
msgid "Preview"
|
1439 |
msgstr "Vista previa"
|
1440 |
|
1441 |
+
#: includes/functions-check-now.php:2464 includes/functions.php:3196
|
1442 |
+
#: settings.php:4658
|
1443 |
msgid "Limits"
|
1444 |
msgstr "Límites"
|
1445 |
|
1446 |
+
#: includes/functions-check-now.php:2469 includes/functions-check-now.php:4367
|
1447 |
+
#: includes/functions-check-now.php:4430 includes/functions.php:3201
|
1448 |
+
#: includes/functions.php:7001 includes/functions.php:7022
|
1449 |
+
#: includes/functions.php:7086 settings.php:2539
|
1450 |
msgid "Ad Blocking"
|
1451 |
msgstr "Bloqueo de anuncios"
|
1452 |
|
1453 |
#. translators: 1, 2 and 3, 4: HTML tags
|
1454 |
+
#: includes/functions-check-now.php:2478 includes/functions.php:3212
|
1455 |
msgid ""
|
1456 |
"%1$s WARNING: %2$s %3$s No wrapping %4$s style has no wrapping code needed "
|
1457 |
"for tracking!"
|
1461 |
|
1462 |
#. translators: 1, 2, 4, 5: HTML tags, 3: Scroll with the content, 6: Above
|
1463 |
#. header
|
1464 |
+
#: includes/functions-check-now.php:2487 includes/functions.php:3221
|
1465 |
msgid ""
|
1466 |
"%1$s WARNING: %2$s vertical position %3$s needs %4$s Output buffering %5$s "
|
1467 |
"enabled and automatic insertion %6$s!"
|
1469 |
"%1$s Advertencia: %2$s posición vertical %3$s necesita %4$s Búfer de salida "
|
1470 |
"%5$s habilitado e inserción automática %6$s!"
|
1471 |
|
1472 |
+
#: includes/functions-check-now.php:2554 includes/functions.php:3294
|
1473 |
msgid "Click fraud protection is globally disabled"
|
1474 |
msgstr "La protección contra el fraude de clics está deshabilitada globalmente"
|
1475 |
|
1476 |
+
#: includes/functions-check-now.php:2558
|
1477 |
msgid "Max clicks per time period are not defined"
|
1478 |
msgstr "Los clics máximos por período de tiempo no están definidos"
|
1479 |
|
1480 |
#. Translators: Max n impressions
|
1481 |
+
#: includes/functions-check-now.php:2572 includes/functions.php:3308
|
1482 |
msgid "General limits"
|
1483 |
msgstr "Límites generales"
|
1484 |
|
1485 |
#. Translators: Max n impressions per x days
|
1486 |
+
#: includes/functions-check-now.php:2578 includes/functions-check-now.php:2590
|
1487 |
+
#: includes/functions-check-now.php:2675 includes/functions.php:3314
|
1488 |
+
#: includes/functions.php:3326 includes/functions.php:3411
|
1489 |
msgid "Current value"
|
1490 |
msgstr "Valor actual"
|
1491 |
|
1497 |
#. Translators: Max n impressions per x days
|
1498 |
#. Translators: Max n clicks
|
1499 |
#. Translators: Max n clicks per x days
|
1500 |
+
#: includes/functions-check-now.php:2597 includes/functions-check-now.php:2607
|
1501 |
+
#: includes/functions-check-now.php:2626 includes/functions-check-now.php:2636
|
1502 |
+
#: includes/functions-check-now.php:2682 includes/functions-check-now.php:2691
|
1503 |
+
#: includes/functions-check-now.php:2709 includes/functions-check-now.php:2718
|
1504 |
+
#: includes/functions.php:3333 includes/functions.php:3343
|
1505 |
+
#: includes/functions.php:3362 includes/functions.php:3372
|
1506 |
+
#: includes/functions.php:3418 includes/functions.php:3427
|
1507 |
+
#: includes/functions.php:3445 includes/functions.php:3454 settings.php:2275
|
1508 |
msgid "Max"
|
1509 |
msgstr "Máx"
|
1510 |
|
1511 |
+
#: includes/functions-check-now.php:2598 includes/functions.php:3334
|
1512 |
msgid ""
|
1513 |
"Maximum number of impressions for this block. Empty means no general "
|
1514 |
"impression limit."
|
1520 |
#. Translators: Max n impressions per x days
|
1521 |
#. Translators: Max n impressions
|
1522 |
#. Translators: Max n impressions per x days
|
1523 |
+
#: includes/functions-check-now.php:2600 includes/functions-check-now.php:2610
|
1524 |
+
#: includes/functions-check-now.php:2685 includes/functions-check-now.php:2694
|
1525 |
+
#: includes/functions.php:3336 includes/functions.php:3346
|
1526 |
+
#: includes/functions.php:3421 includes/functions.php:3430
|
1527 |
msgid "impression"
|
1528 |
msgid_plural "impressions"
|
1529 |
msgstr[0] "impresión"
|
1530 |
msgstr[1] "impresiones"
|
1531 |
|
1532 |
+
#: includes/functions-check-now.php:2608 includes/functions.php:3344
|
1533 |
msgid ""
|
1534 |
"Maximum number of impressions per time period. Empty means no time limit."
|
1535 |
msgstr ""
|
1540 |
#. Translators: Max n clicks per x days
|
1541 |
#. Translators: Max n impressions per x days
|
1542 |
#. Translators: Max n clicks per x days
|
1543 |
+
#: includes/functions-check-now.php:2614 includes/functions-check-now.php:2643
|
1544 |
+
#: includes/functions-check-now.php:2698 includes/functions-check-now.php:2725
|
1545 |
+
#: includes/functions.php:3350 includes/functions.php:3379
|
1546 |
+
#: includes/functions.php:3434 includes/functions.php:3461
|
1547 |
+
#: includes/functions.php:5228
|
1548 |
msgid "per"
|
1549 |
msgstr "por"
|
1550 |
|
1551 |
+
#: includes/functions-check-now.php:2615 includes/functions-check-now.php:2644
|
1552 |
+
#: includes/functions.php:3351 includes/functions.php:3380
|
1553 |
msgid "Time period in days. Empty means no time limit."
|
1554 |
msgstr ""
|
1555 |
"Período de tiempo en días. Vacío significa que no hay limite de tiempo."
|
1559 |
#. Translators: Max n impressions per x days
|
1560 |
#. Translators: Max n clicks per x days
|
1561 |
#. Translators: Don't show for x days
|
1562 |
+
#: includes/functions-check-now.php:2617 includes/functions-check-now.php:2646
|
1563 |
+
#: includes/functions-check-now.php:2701 includes/functions-check-now.php:2728
|
1564 |
+
#: includes/functions-check-now.php:2834 includes/functions-check-now.php:3162
|
1565 |
+
#: includes/functions.php:3353 includes/functions.php:3382
|
1566 |
+
#: includes/functions.php:3437 includes/functions.php:3464
|
1567 |
+
#: includes/functions.php:3596 includes/functions.php:5231
|
1568 |
+
#: includes/functions.php:5241 strings.php:220 strings.php:221 strings.php:222
|
1569 |
+
#: strings.php:223 strings.php:224 strings.php:225
|
1570 |
msgid "day"
|
1571 |
msgid_plural "days"
|
1572 |
msgstr[0] "día"
|
1573 |
msgstr[1] "días"
|
1574 |
|
1575 |
+
#: includes/functions-check-now.php:2627 includes/functions.php:3363
|
1576 |
msgid ""
|
1577 |
"Maximum number of clicks on this block. Empty means no general click limit."
|
1578 |
msgstr ""
|
1583 |
#. Translators: Max n clicks per x days
|
1584 |
#. Translators: Max n clicks
|
1585 |
#. Translators: Max n clicks per x days
|
1586 |
+
#: includes/functions-check-now.php:2629 includes/functions-check-now.php:2639
|
1587 |
+
#: includes/functions-check-now.php:2712 includes/functions-check-now.php:2721
|
1588 |
+
#: includes/functions-check-now.php:4578 includes/functions.php:3365
|
1589 |
+
#: includes/functions.php:3375 includes/functions.php:3448
|
1590 |
+
#: includes/functions.php:3457 includes/functions.php:5228
|
1591 |
+
#: includes/functions.php:7325
|
1592 |
msgid "click"
|
1593 |
msgid_plural "clicks"
|
1594 |
msgstr[0] "clic"
|
1595 |
msgstr[1] "clics"
|
1596 |
|
1597 |
+
#: includes/functions-check-now.php:2637 includes/functions.php:3373
|
1598 |
msgid "Maximum number of clicks per time period. Empty means no time limit."
|
1599 |
msgstr ""
|
1600 |
"Máximo número de clics por período de tiempo. Vacío significa que no hay "
|
1601 |
"limite de tiempo."
|
1602 |
|
1603 |
+
#: includes/functions-check-now.php:2662 includes/functions.php:3398
|
1604 |
msgid "Individual visitor limits"
|
1605 |
msgstr "Límites de visitantes individuales"
|
1606 |
|
1607 |
+
#: includes/functions-check-now.php:2666 includes/functions-check-now.php:2668
|
1608 |
+
#: includes/functions.php:3402 includes/functions.php:3404
|
1609 |
msgid ""
|
1610 |
"When specified number of clicks on this block for a visitor will be reached "
|
1611 |
"in the specified time period, all blocks that have click fraud protection "
|
1618 |
"visitante durante el período de tiempo definido en la configuración general "
|
1619 |
"del plugin."
|
1620 |
|
1621 |
+
#: includes/functions-check-now.php:2668 includes/functions.php:3404
|
1622 |
msgid "Trigger click fraud protection"
|
1623 |
msgstr "Cambiar la protección contra el fraude de clics"
|
1624 |
|
1625 |
+
#: includes/functions-check-now.php:2683 includes/functions.php:3419
|
1626 |
msgid ""
|
1627 |
"Maximum number of impressions of this block for each visitor. Empty means no "
|
1628 |
"impression limit."
|
1630 |
"Número máximo de impresiones de este bloque para cada visitante. Vacío "
|
1631 |
"significa que no hay límite de impresiones."
|
1632 |
|
1633 |
+
#: includes/functions-check-now.php:2692 includes/functions.php:3428
|
1634 |
msgid ""
|
1635 |
"Maximum number of impressions per time period for each visitor. Empty means "
|
1636 |
"no impression limit per time period for visitors."
|
1639 |
"Vacío significa que no hay límite de impresiones por período de tiempo para "
|
1640 |
"los visitantes."
|
1641 |
|
1642 |
+
#: includes/functions-check-now.php:2699 includes/functions-check-now.php:2726
|
1643 |
+
#: includes/functions.php:3435 includes/functions.php:3462
|
1644 |
+
#: includes/functions.php:5231
|
1645 |
msgid ""
|
1646 |
"Time period in days. Use decimal value (with decimal point) for shorter "
|
1647 |
"periods. Empty means no time limit."
|
1649 |
"Periodo de tiempo en días. Use valor decimal (con punto decimal) para "
|
1650 |
"períodos más cortos. Vacío significa que no hay límite de tiempo."
|
1651 |
|
1652 |
+
#: includes/functions-check-now.php:2710 includes/functions.php:3446
|
1653 |
msgid ""
|
1654 |
"Maximum number of clicks on this block for each visitor. Empty means no "
|
1655 |
"click limit."
|
1657 |
"Número máximo de clics en este bloque para cada visitante. Vacío significa "
|
1658 |
"que no hay límite."
|
1659 |
|
1660 |
+
#: includes/functions-check-now.php:2719 includes/functions.php:3455
|
1661 |
+
#: includes/functions.php:5228
|
1662 |
msgid ""
|
1663 |
"Maximum number of clicks per time period for each visitor. Empty means no "
|
1664 |
"click limit per time period for visitors."
|
1667 |
"significa que no hay límite de clics por período de tiempo para los "
|
1668 |
"visitantes."
|
1669 |
|
1670 |
+
#: includes/functions-check-now.php:2745 includes/functions.php:3505
|
1671 |
msgid "When ad blocking is detected"
|
1672 |
msgstr "Cuando se detecta bloqueo de anuncios"
|
1673 |
|
1674 |
+
#: includes/functions-check-now.php:2754 includes/functions.php:3514
|
1675 |
msgid "replacement"
|
1676 |
msgstr "reemplazo"
|
1677 |
|
1678 |
+
#: includes/functions-check-now.php:2755 includes/functions.php:3515
|
1679 |
msgid "Block to be shown when ad blocking is detected"
|
1680 |
msgstr "Bloque que se muestra cuando se detecta el bloqueo de anuncios"
|
1681 |
|
1682 |
+
#: includes/functions-check-now.php:2756 includes/functions.php:3516
|
1683 |
msgctxt "replacement"
|
1684 |
msgid "None"
|
1685 |
msgstr "Ninguno"
|
1686 |
|
1687 |
+
#: includes/functions-check-now.php:2773 includes/functions-check-now.php:5613
|
1688 |
+
#: includes/functions.php:3533 includes/functions.php:8839
|
1689 |
msgid "Close button"
|
1690 |
msgstr "Botón cerrar"
|
1691 |
|
1692 |
+
#: includes/functions-check-now.php:2825 includes/functions.php:3587
|
1693 |
msgid "Auto close after"
|
1694 |
msgstr "Cierre automático después"
|
1695 |
|
1696 |
+
#: includes/functions-check-now.php:2826 includes/functions.php:3588
|
1697 |
msgid ""
|
1698 |
"Time in seconds in which the ad will automatically close. Leave empty to "
|
1699 |
"disable auto closing."
|
1702 |
"vacío para deshabilitar el cierre automático."
|
1703 |
|
1704 |
#. Translators: Don't show for x days
|
1705 |
+
#: includes/functions-check-now.php:2831 includes/functions.php:3593
|
1706 |
msgid "Don't show for"
|
1707 |
msgstr "No se presente durante"
|
1708 |
|
1709 |
+
#: includes/functions-check-now.php:2832 includes/functions.php:3594
|
1710 |
msgid ""
|
1711 |
"Time in days in which closed ad will not be shown again. Use decimal value "
|
1712 |
"(with decimal point) for shorter time period or leave empty to show it again "
|
1717 |
"déjalo en blanco para mostrarlo nuevamente en la recarga de la página."
|
1718 |
|
1719 |
#. Translators: Delay showing for x pageviews
|
1720 |
+
#: includes/functions-check-now.php:2852 includes/functions.php:3616
|
1721 |
+
#: includes/functions.php:3622
|
1722 |
msgid "Delay showing for"
|
1723 |
msgstr "Retraso para mostrar"
|
1724 |
|
1725 |
+
#: includes/functions-check-now.php:2853 includes/functions.php:3623
|
1726 |
msgid ""
|
1727 |
"Number of pageviews before the code is inserted (and ad displayed). Leave "
|
1728 |
"empty to insert the code for the first pageview."
|
1733 |
|
1734 |
#. Translators: Delay showing for x pageviews
|
1735 |
#. Translators: Show every x pageviews
|
1736 |
+
#: includes/functions-check-now.php:2855 includes/functions-check-now.php:2862
|
1737 |
+
#: includes/functions.php:3625 includes/functions.php:3632
|
1738 |
msgid "pageview"
|
1739 |
msgid_plural "pageviews"
|
1740 |
msgstr[0] "página vista"
|
1741 |
msgstr[1] "páginas vistas"
|
1742 |
|
1743 |
#. Translators: Show every x pageviews
|
1744 |
+
#: includes/functions-check-now.php:2859 includes/functions.php:3629
|
1745 |
msgid "Show every"
|
1746 |
msgid_plural "Show every"
|
1747 |
msgstr[0] "Mostrar cada"
|
1748 |
msgstr[1] "Mostrar cada"
|
1749 |
|
1750 |
+
#: includes/functions-check-now.php:2860 includes/functions.php:3630
|
1751 |
msgid ""
|
1752 |
"Number of pageviews to insert the code again. Leave empty to insert the code "
|
1753 |
"for every pageview."
|
1755 |
"Número de páginas vistas para volver a insertar el código. Déjalo en blanco "
|
1756 |
"para insertar el código para cada página vista."
|
1757 |
|
1758 |
+
#: includes/functions-check-now.php:2879 includes/functions.php:3667
|
1759 |
+
#: settings.php:994
|
1760 |
msgid "Lazy loading"
|
1761 |
msgstr "Carga diferida"
|
1762 |
|
1763 |
#. Translators: %s MaxMind
|
1764 |
+
#: includes/functions-check-now.php:2936 includes/functions.php:4882
|
1765 |
msgid "This product includes GeoLite2 data created by %s"
|
1766 |
msgstr "Este producto incluye datos GeoLite2 creados por %s"
|
1767 |
|
1768 |
+
#: includes/functions-check-now.php:2947 includes/functions.php:4895
|
1769 |
msgid "IP geolocation database"
|
1770 |
msgstr "Base de datos de geolocalización IP"
|
1771 |
|
1772 |
+
#: includes/functions-check-now.php:2950 includes/functions.php:4898
|
1773 |
msgid "Select IP geolocation database."
|
1774 |
msgstr "Selecciona la base de datos de geolocalización de IP."
|
1775 |
|
1776 |
+
#: includes/functions-check-now.php:2961 includes/functions.php:4909
|
1777 |
msgid "Automatic database updates"
|
1778 |
msgstr "Actualizaciones automáticas de bases de datos"
|
1779 |
|
1780 |
+
#: includes/functions-check-now.php:2964 includes/functions.php:4912
|
1781 |
msgid ""
|
1782 |
"Automatically download and update free GeoLite2 IP geolocation database by "
|
1783 |
"MaxMind"
|
1785 |
"Descargue y actualice automáticamente la base de datos de geolocalización IP "
|
1786 |
"GeoLite2 gratuita de MaxMind"
|
1787 |
|
1788 |
+
#: includes/functions-check-now.php:2972 includes/functions.php:4929
|
1789 |
msgid "Database"
|
1790 |
msgstr "Base de datos"
|
1791 |
|
1792 |
+
#: includes/functions-check-now.php:2975 includes/functions.php:4932
|
1793 |
msgid ""
|
1794 |
"Absolute path starting with '/' or relative path to the MaxMind database file"
|
1795 |
msgstr ""
|
1797 |
"datos MaxMind"
|
1798 |
|
1799 |
#. translators: %d: group number
|
1800 |
+
#: includes/functions-check-now.php:2993 includes/functions.php:4950
|
1801 |
msgid "Group %d"
|
1802 |
msgstr "Grupo %d"
|
1803 |
|
1804 |
+
#: includes/functions-check-now.php:2999 includes/functions.php:4956
|
1805 |
msgid "countries"
|
1806 |
msgstr "países"
|
1807 |
|
1808 |
+
#: includes/functions-check-now.php:3044 includes/functions.php:5001
|
1809 |
msgid ""
|
1810 |
"Enable impression and click tracking. You also need to enable tracking for "
|
1811 |
"each block you want to track."
|
1813 |
"Habilita el seguimiento de impresiones y clics. También debe habilitar el "
|
1814 |
"seguimiento para cada bloque que desee rastrear."
|
1815 |
|
1816 |
+
#: includes/functions-check-now.php:3051
|
1817 |
msgid "Generate report"
|
1818 |
msgstr "Generar informe"
|
1819 |
|
1820 |
+
#: includes/functions-check-now.php:3059 includes/functions.php:5020
|
1821 |
msgid "Impression and Click Tracking"
|
1822 |
msgstr "Seguimiento de impresiones y clics"
|
1823 |
|
1824 |
+
#: includes/functions-check-now.php:3060 includes/functions.php:5021
|
1825 |
+
#: settings.php:3039
|
1826 |
msgctxt "ad blocking detection"
|
1827 |
msgid "NOT ENABLED"
|
1828 |
msgstr "NO ACTIVADO"
|
1829 |
|
1830 |
+
#: includes/functions-check-now.php:3076 includes/functions.php:5037
|
1831 |
msgid "Internal"
|
1832 |
msgstr "Interno"
|
1833 |
|
1834 |
+
#: includes/functions-check-now.php:3080 includes/functions.php:5041
|
1835 |
msgid "Track impressions and clicks with internal tracking and statistics"
|
1836 |
msgstr ""
|
1837 |
"Seguimiento de impresiones y clics con seguimiento interno y estadísticas"
|
1838 |
|
1839 |
+
#: includes/functions-check-now.php:3085 includes/functions.php:5046
|
1840 |
msgid "External"
|
1841 |
msgstr "Externo"
|
1842 |
|
1843 |
+
#: includes/functions-check-now.php:3089 includes/functions.php:5050
|
1844 |
msgid ""
|
1845 |
"Track impressions and clicks with Google Analytics or Matomo (needs tracking "
|
1846 |
"code installed)"
|
1848 |
"Seguimiento de impresiones y clics con Google Analytics o Matomo (necesita "
|
1849 |
"un código de seguimiento instalado)"
|
1850 |
|
1851 |
+
#: includes/functions-check-now.php:3094 includes/functions.php:5055
|
1852 |
msgid "Track Pageviews"
|
1853 |
msgstr "Seguimiento de páginas vistas"
|
1854 |
|
1855 |
+
#: includes/functions-check-now.php:3100 includes/functions.php:5061
|
1856 |
msgid "Track Pageviews by Device (as configured for viewports)"
|
1857 |
msgstr ""
|
1858 |
"Seguimiento de páginas vistas por dispositivo (según la configuración de las "
|
1859 |
"ventanas gráficas)"
|
1860 |
|
1861 |
+
#: includes/functions-check-now.php:3110 includes/functions.php:5071
|
1862 |
msgid "Track for Logged in Users"
|
1863 |
msgstr "Seguimiento de usuarios conectados"
|
1864 |
|
1865 |
+
#: includes/functions-check-now.php:3116 includes/functions.php:5077
|
1866 |
msgid "Track impressions and clicks from logged in users"
|
1867 |
msgstr "Seguimiento de impresiones y clics de usuarios conectados"
|
1868 |
|
1869 |
+
#: includes/functions-check-now.php:3126 includes/functions.php:5087
|
1870 |
msgid "Click Detection"
|
1871 |
msgstr "Detección de clics"
|
1872 |
|
1873 |
+
#: includes/functions-check-now.php:3132 includes/functions.php:5093
|
1874 |
msgid ""
|
1875 |
"Standard method detects clicks only on banners with links, Advanced method "
|
1876 |
"can detect clicks on any kind of ads, but it is slightly less accurate"
|
1879 |
"avanzado puede detectar clics en cualquier tipo de anuncios, pero es un poco "
|
1880 |
"menos preciso"
|
1881 |
|
1882 |
+
#: includes/functions-check-now.php:3151 includes/functions.php:5214
|
1883 |
msgid "Click fraud protection"
|
1884 |
msgstr "Haz clic en protección contra el fraude"
|
1885 |
|
1886 |
+
#: includes/functions-check-now.php:3155 includes/functions.php:5218
|
1887 |
msgid "Globally enable click fraud protection for selected blocks."
|
1888 |
msgstr ""
|
1889 |
"Habilite globalmente la protección contra fraude de clics para bloques "
|
1890 |
"seleccionados."
|
1891 |
|
1892 |
+
#: includes/functions-check-now.php:3161 includes/functions.php:5238
|
1893 |
msgid "Protection time"
|
1894 |
msgstr "Tiempo de protección"
|
1895 |
|
1896 |
+
#: includes/functions-check-now.php:3162 includes/functions.php:5241
|
1897 |
msgid ""
|
1898 |
"Time period in days in which blocks with enabled click fraud protection will "
|
1899 |
"be hidden. Use decimal value (with decimal point) for shorter periods."
|
1902 |
"contra fraude de clics habilitada. Use valor decimal (con punto decimal) "
|
1903 |
"para períodos más cortos."
|
1904 |
|
1905 |
+
#: includes/functions-check-now.php:3181 includes/functions.php:5121
|
1906 |
msgid "Report header image"
|
1907 |
msgstr "Imagen de cabecera del informe"
|
1908 |
|
1909 |
+
#: includes/functions-check-now.php:3184
|
1910 |
msgid ""
|
1911 |
"Image or logo to be displayed in the header of the statistins report. "
|
1912 |
"Absolute path starting with '/' or relative path to the image file. Clear to "
|
1916 |
"estadísticas. Ruta absoluta que comienza con «/» o ruta relativa al archivo "
|
1917 |
"de imagen. Borrar para restablecer la imagen predeterminada."
|
1918 |
|
1919 |
+
#: includes/functions-check-now.php:3185 includes/functions.php:5125
|
1920 |
+
#: strings.php:256
|
1921 |
msgid "Select or upload header image"
|
1922 |
msgstr "Seleccionar o subir una imagen de cabecera"
|
1923 |
|
1924 |
+
#: includes/functions-check-now.php:3190 includes/functions.php:5130
|
1925 |
msgid "Report header title"
|
1926 |
msgstr "Título de la cabecera del informe"
|
1927 |
|
1928 |
+
#: includes/functions-check-now.php:3193 includes/functions.php:5133
|
1929 |
msgid ""
|
1930 |
"Title to be displayed in the header of the statistics report. Text or HTML "
|
1931 |
"code, clear to reset to default text."
|
1933 |
"Título que se mostrará en la cabecera del informe de estadísticas. Texto o "
|
1934 |
"código HTML, desactívelo para restablecer el texto predeterminado."
|
1935 |
|
1936 |
+
#: includes/functions-check-now.php:3198 includes/functions.php:5138
|
1937 |
msgid "Report header description"
|
1938 |
msgstr "Descripción de la cabecera del informe"
|
1939 |
|
1940 |
+
#: includes/functions-check-now.php:3201 includes/functions.php:5141
|
1941 |
msgid ""
|
1942 |
"Description to be displayed in the header of the statistics report. Text or "
|
1943 |
"HTML code, clear to reset to default text."
|
1945 |
"Descripción que se mostrará en la cabecera del informe de estadísticas. "
|
1946 |
"Texto o código HTML, desactívelo para restablecer el texto predeterminado."
|
1947 |
|
1948 |
+
#: includes/functions-check-now.php:3206 includes/functions.php:5146
|
1949 |
msgid "Report footer"
|
1950 |
msgstr "Pie de pagina del informe"
|
1951 |
|
1952 |
+
#: includes/functions-check-now.php:3209 includes/functions.php:5149
|
1953 |
msgid ""
|
1954 |
"Text to be displayed in the footer of the statistics report. Clear to reset "
|
1955 |
"to default text."
|
1957 |
"Texto que se mostrará en el pie de página del informe de estadísticas. "
|
1958 |
"Borrar para restablecer el texto predeterminado."
|
1959 |
|
1960 |
+
#: includes/functions-check-now.php:3214 includes/functions.php:5154
|
1961 |
msgid "Public report key"
|
1962 |
msgstr "Clave de informe público"
|
1963 |
|
1964 |
+
#: includes/functions-check-now.php:3217 includes/functions.php:5157
|
1965 |
msgid "String to generate unique report IDs. Clear to reset to default value."
|
1966 |
msgstr ""
|
1967 |
"Cadena para generar ID de informes únicos. Borre para restablecer el valor "
|
1968 |
"predeterminado."
|
1969 |
|
1970 |
+
#: includes/functions-check-now.php:3249 includes/functions.php:5298
|
1971 |
msgid "Are you sure you want to clear all exceptions for block"
|
1972 |
msgstr "Seguro que desea borrar todas las excepciones para el bloque"
|
1973 |
|
1974 |
+
#: includes/functions-check-now.php:3250 includes/functions.php:5299
|
1975 |
msgid "Clear all exceptions for block"
|
1976 |
msgstr "Borrar todas las excepciones para el bloque"
|
1977 |
|
1978 |
+
#: includes/functions-check-now.php:3257 includes/functions.php:5312
|
1979 |
msgid "Are you sure you want to clear all exceptions?"
|
1980 |
msgstr "¿Seguro que quieres borrar todas las excepciones?"
|
1981 |
|
1982 |
+
#: includes/functions-check-now.php:3257 includes/functions.php:5312
|
1983 |
msgid "Clear all exceptions for all blocks"
|
1984 |
msgstr "Borrar todas las excepciones para todos los bloques"
|
1985 |
|
1986 |
+
#: includes/functions-check-now.php:3262 includes/functions.php:5319
|
1987 |
+
#: settings.php:4229 settings.php:4739
|
1988 |
msgid "Type"
|
1989 |
msgstr "Tipo"
|
1990 |
|
1991 |
+
#: includes/functions-check-now.php:3280 includes/functions.php:5338
|
1992 |
+
#: includes/functions.php:5339
|
1993 |
msgid "View"
|
1994 |
msgstr "Ver"
|
1995 |
|
1996 |
+
#: includes/functions-check-now.php:3281 includes/functions-check-now.php:3288
|
1997 |
+
#: includes/functions-check-now.php:3292 includes/functions.php:5340
|
1998 |
+
#: includes/functions.php:5354 includes/functions.php:5358
|
1999 |
+
#: includes/placeholders.php:351 includes/preview.php:2801 settings.php:1508
|
2000 |
+
#: settings.php:3984
|
2001 |
msgid "Edit"
|
2002 |
msgstr "Editar"
|
2003 |
|
2004 |
+
#: includes/functions-check-now.php:3311 includes/functions.php:5386
|
2005 |
msgid "Are you sure you want to clear all exceptions for"
|
2006 |
msgstr "Seguro que quieres vaciar todas las excepciones para"
|
2007 |
|
2008 |
+
#: includes/functions-check-now.php:3312 includes/functions.php:5387
|
2009 |
msgid "Clear all exceptions for"
|
2010 |
msgstr "Vaciar todas las excepciones para"
|
2011 |
|
2012 |
+
#: includes/functions-check-now.php:3325 includes/functions.php:5403
|
2013 |
msgid "No exceptions"
|
2014 |
msgstr "Sin excepciones"
|
2015 |
|
2016 |
#. translators: %s: Ad Inserter Pro
|
2017 |
+
#: includes/functions-check-now.php:3336 includes/functions.php:5414
|
2018 |
msgid "%s options for network blogs"
|
2019 |
msgstr "%s opciones para blogs de red"
|
2020 |
|
2021 |
#. translators: %s: Ad Inserter Pro
|
2022 |
+
#: includes/functions-check-now.php:3341 includes/functions.php:5419
|
2023 |
msgid "Enable %s widgets for sub-sites"
|
2024 |
msgstr "Habilitar widgets %s para subsitios"
|
2025 |
|
2026 |
+
#: includes/functions-check-now.php:3341 includes/functions.php:5419
|
2027 |
msgid "Widgets"
|
2028 |
msgstr "Widget"
|
2029 |
|
2030 |
+
#: includes/functions-check-now.php:3346 includes/functions.php:5424
|
2031 |
msgid "Enable PHP code processing for sub-sites"
|
2032 |
msgstr "Habilitar procesamiento de código PHP por los subsitios"
|
2033 |
|
2034 |
+
#: includes/functions-check-now.php:3346 includes/functions.php:5424
|
2035 |
msgid "PHP Processing"
|
2036 |
msgstr "Procesamiento PHP"
|
2037 |
|
2038 |
#. translators: %s: Ad Inserter Pro
|
2039 |
+
#: includes/functions-check-now.php:3351 includes/functions.php:5429
|
2040 |
msgid "Enable %s block exceptions in post/page editor for sub-sites"
|
2041 |
msgstr ""
|
2042 |
"Habilitar las excepciones de bloque %s en el editor de entradas/páginas para "
|
2043 |
"subsitios"
|
2044 |
|
2045 |
+
#: includes/functions-check-now.php:3351 includes/functions.php:5429
|
2046 |
msgid "Post/Page exceptions"
|
2047 |
msgstr "Excepciones de entradas/páginas"
|
2048 |
|
2049 |
#. translators: %s: Ad Inserter Pro
|
2050 |
+
#: includes/functions-check-now.php:3356 includes/functions.php:5434
|
2051 |
msgid "Enable %s settings page for sub-sites"
|
2052 |
msgstr "Habilitar la página de ajustes %s para subsitios"
|
2053 |
|
2054 |
+
#: includes/functions-check-now.php:3356 includes/functions.php:5434
|
2055 |
msgid "Settings page"
|
2056 |
msgstr "Página de ajustes"
|
2057 |
|
2058 |
#. translators: %s: Ad Inserter Pro
|
2059 |
+
#: includes/functions-check-now.php:3361 includes/functions.php:5439
|
2060 |
msgid "Enable %s settings of main site to be used for all blogs"
|
2061 |
msgstr ""
|
2062 |
"Habilitar la página de los ajustes %s del sitio principal para que se use en "
|
2063 |
"todos los blogs"
|
2064 |
|
2065 |
+
#: includes/functions-check-now.php:3361 includes/functions.php:5439
|
2066 |
msgid "Main site settings used for all blogs"
|
2067 |
msgstr "Configuración del sitio principal utilizada para todos los blogs"
|
2068 |
|
2069 |
+
#: includes/functions-check-now.php:3372 includes/functions.php:5457
|
2070 |
+
#: settings.php:3038
|
2071 |
msgid "Ad Blocking Detection"
|
2072 |
msgstr "Detección de bloqueo de anuncios"
|
2073 |
|
2074 |
+
#: includes/functions-check-now.php:3378 includes/functions.php:5463
|
2075 |
msgid ""
|
2076 |
"Standard method is reliable but should be used only if Advanced method does "
|
2077 |
"not work. Advanced method recreates files used for detection with random "
|
2083 |
"detección con nombres aleatorios; sin embargo, es posible que no funcione si "
|
2084 |
"los scripts de la carpeta de carga no son de acceso público"
|
2085 |
|
2086 |
+
#: includes/functions-check-now.php:4030 includes/functions-check-now.php:4120
|
2087 |
+
#: includes/functions-check-now.php:4140 includes/functions.php:6603
|
2088 |
+
#: includes/functions.php:6713 includes/functions.php:6738
|
2089 |
msgid "AD BLOCKING"
|
2090 |
msgstr "BLOQUEO DE ANUNCIOS"
|
2091 |
|
2092 |
+
#: includes/functions-check-now.php:4031 includes/functions-check-now.php:4071
|
2093 |
+
#: includes/functions-check-now.php:4114 includes/functions-check-now.php:4141
|
2094 |
+
#: includes/functions.php:6604 includes/functions.php:6647
|
2095 |
+
#: includes/functions.php:6707 includes/functions.php:6739
|
2096 |
msgid "BLOCK INSERTED BUT NOT VISIBLE"
|
2097 |
msgstr "BLOQUE INSERTADO PERO NO VISIBLE"
|
2098 |
|
2099 |
+
#: includes/functions-check-now.php:4034 includes/functions-check-now.php:4113
|
2100 |
+
#: includes/functions-check-now.php:4147 includes/functions.php:6607
|
2101 |
+
#: includes/functions.php:6706 includes/functions.php:6745
|
2102 |
msgid "NO AD BLOCKING"
|
2103 |
msgstr "SIN BLOQUEO DE ANUNCIOS"
|
2104 |
|
2105 |
+
#: includes/functions-check-now.php:4070 includes/functions-check-now.php:4077
|
2106 |
+
#: includes/functions.php:6646 includes/functions.php:6653
|
2107 |
msgid "AD BLOCKING REPLACEMENT"
|
2108 |
msgstr "REEMPLAZO DEL BLOQUEO DE ANUNCIOS"
|
2109 |
|
2110 |
+
#: includes/functions-check-now.php:4220 includes/functions-check-now.php:4429
|
2111 |
+
#: includes/functions.php:6833 includes/functions.php:7085
|
2112 |
msgid "Pageviews"
|
2113 |
msgstr "Páginas vistas"
|
2114 |
|
2115 |
+
#: includes/functions-check-now.php:4366 includes/functions.php:7000
|
2116 |
+
#: includes/functions.php:7021
|
2117 |
msgctxt "Version"
|
2118 |
msgid "Unknown"
|
2119 |
msgstr "Desconocida"
|
2120 |
|
2121 |
+
#: includes/functions-check-now.php:4366 includes/functions.php:7000
|
2122 |
+
#: includes/functions.php:7021
|
2123 |
msgctxt "Times"
|
2124 |
msgid "DISPLAYED"
|
2125 |
msgstr "VISUALIZADO"
|
2126 |
|
2127 |
+
#: includes/functions-check-now.php:4366 includes/functions.php:7000
|
2128 |
+
#: includes/functions.php:7021
|
2129 |
msgid "No version"
|
2130 |
msgstr "Sin versión"
|
2131 |
|
2132 |
+
#: includes/functions-check-now.php:4367 includes/functions.php:7001
|
2133 |
+
#: includes/functions.php:7022 includes/functions.php:7026
|
2134 |
msgctxt "Times"
|
2135 |
msgid "BLOCKED"
|
2136 |
msgstr "BLOQUEADO"
|
2137 |
|
2138 |
+
#: includes/functions-check-now.php:4429 includes/functions.php:7085
|
2139 |
msgid "Impressions"
|
2140 |
msgstr "Impresiones"
|
2141 |
|
2142 |
+
#: includes/functions-check-now.php:4430 includes/functions-check-now.php:4431
|
2143 |
+
#: includes/functions-check-now.php:4486 includes/functions.php:7086
|
2144 |
+
#: includes/functions.php:7087 includes/functions.php:7302
|
2145 |
msgid "Clicks"
|
2146 |
msgstr "Clics"
|
2147 |
|
2148 |
+
#: includes/functions-check-now.php:4431 includes/functions.php:7087
|
2149 |
msgid "events"
|
2150 |
msgstr "eventos"
|
2151 |
|
2152 |
+
#: includes/functions-check-now.php:4432 includes/functions.php:7088
|
2153 |
msgid "Ad Blocking Share"
|
2154 |
msgstr "Compartir bloque de anuncios"
|
2155 |
|
2156 |
#. translators: CTR as Click Through Rate
|
2157 |
+
#: includes/functions-check-now.php:4432 includes/functions-check-now.php:4492
|
2158 |
+
#: includes/functions.php:7088 includes/functions.php:7308
|
2159 |
msgid "CTR"
|
2160 |
msgstr "CTR"
|
2161 |
|
2162 |
+
#: includes/functions-check-now.php:4574 includes/functions.php:7321
|
2163 |
msgid "pageviews"
|
2164 |
msgid_plural "pageviews"
|
2165 |
msgstr[0] "página vista"
|
2166 |
msgstr[1] "páginas vistas"
|
2167 |
|
2168 |
+
#: includes/functions-check-now.php:4574 includes/functions.php:7321
|
2169 |
msgid "impressions"
|
2170 |
msgid_plural "impressions"
|
2171 |
msgstr[0] "impresión"
|
2172 |
msgstr[1] "impresiones"
|
2173 |
|
2174 |
+
#: includes/functions-check-now.php:4578 includes/functions.php:7325
|
2175 |
msgid "event"
|
2176 |
msgid_plural "events"
|
2177 |
msgstr[0] "evento"
|
2178 |
msgstr[1] "eventos"
|
2179 |
|
2180 |
+
#: includes/functions-check-now.php:4673 includes/functions.php:7420
|
2181 |
msgctxt "Pageviews / Impressions"
|
2182 |
msgid "Average"
|
2183 |
msgstr "Promedio"
|
2184 |
|
2185 |
+
#: includes/functions-check-now.php:4694 includes/functions.php:7441
|
2186 |
msgctxt "Ad Blocking / Clicks"
|
2187 |
msgid "Average"
|
2188 |
msgstr "Promedio"
|
2189 |
|
2190 |
+
#: includes/functions-check-now.php:4718 includes/functions.php:7465
|
2191 |
msgctxt "Ad Blocking Share / CTR"
|
2192 |
msgid "Average"
|
2193 |
msgstr "Promedio"
|
2194 |
|
2195 |
#. Translators: %s: Ad Inserter Pro
|
2196 |
+
#: includes/functions-check-now.php:4900 includes/functions-check-now.php:4992
|
2197 |
+
#: includes/functions-check-now.php:5335 includes/functions.php:7775
|
2198 |
+
#: includes/functions.php:7870 includes/functions.php:8539 strings.php:205
|
2199 |
msgid "%s Report"
|
2200 |
msgstr "Informe de %s"
|
2201 |
|
2202 |
+
#: includes/functions-check-now.php:5241 includes/functions.php:8444
|
2203 |
msgid "for last month"
|
2204 |
msgstr "del último mes"
|
2205 |
|
2206 |
+
#: includes/functions-check-now.php:5246 includes/functions.php:8449
|
2207 |
msgid "for this month"
|
2208 |
msgstr "de este mes"
|
2209 |
|
2210 |
+
#: includes/functions-check-now.php:5251 includes/functions.php:8454
|
2211 |
msgid "for this year"
|
2212 |
msgstr "para este año"
|
2213 |
|
2214 |
+
#: includes/functions-check-now.php:5256 includes/functions.php:8459
|
2215 |
msgid "for the last 15 days"
|
2216 |
msgstr "de los últimos 15 días"
|
2217 |
|
2218 |
+
#: includes/functions-check-now.php:5261 includes/functions.php:8464
|
2219 |
msgid "for the last 30 days"
|
2220 |
msgstr "de los últimos 30 días"
|
2221 |
|
2222 |
+
#: includes/functions-check-now.php:5266 includes/functions.php:8469
|
2223 |
msgid "for the last 90 days"
|
2224 |
msgstr "de los últimos 90 días"
|
2225 |
|
2226 |
+
#: includes/functions-check-now.php:5271 includes/functions.php:8474
|
2227 |
msgid "for the last 180 days"
|
2228 |
msgstr "de los últimos 180 días"
|
2229 |
|
2230 |
+
#: includes/functions-check-now.php:5276 includes/functions.php:8479
|
2231 |
msgid "for the last 365 days"
|
2232 |
msgstr "de los últimos 365 días"
|
2233 |
|
2234 |
+
#: includes/functions.php:439
|
2235 |
+
msgid "Import plugin settings"
|
2236 |
+
msgstr "Importa los ajustes del plugin"
|
2237 |
+
|
2238 |
+
#: includes/functions.php:447
|
2239 |
+
msgid "Load settings from a file"
|
2240 |
+
msgstr "Carga los ajustes de un archivo"
|
2241 |
+
|
2242 |
+
#: includes/functions.php:450
|
2243 |
+
msgid "Save settings to a file"
|
2244 |
+
msgstr "Guarda los ajustes en un archivo"
|
2245 |
+
|
2246 |
+
#. translators: Enter reCAPTCHA v3 key
|
2247 |
+
#: includes/functions.php:543 includes/functions.php:551
|
2248 |
+
msgid "Enter"
|
2249 |
+
msgstr "Introducir"
|
2250 |
+
|
2251 |
+
#: includes/functions.php:556
|
2252 |
+
msgid "Score threshold"
|
2253 |
+
msgstr "Umbral de puntuación"
|
2254 |
+
|
2255 |
+
#: includes/functions.php:559
|
2256 |
+
msgid ""
|
2257 |
+
"reCAPTCHA v3 score threshold for valid traffic (0 to 1, 0.0 is very likely a "
|
2258 |
+
"bot, 1.0 is very likely a good interaction)"
|
2259 |
+
msgstr ""
|
2260 |
+
"Umbral de puntuación de reCAPTCHA v3 para el tráfico válido (de 0 a 1, 0,0 "
|
2261 |
+
"es muy probable que sea un bot, 1,0 es muy probable que sea una buena "
|
2262 |
+
"interacción)"
|
2263 |
+
|
2264 |
+
#: includes/functions.php:615 includes/functions.php:5008
|
2265 |
msgid "Generate CSV report"
|
2266 |
msgstr "Generar informe CSV"
|
2267 |
|
2268 |
#. translators: %s: Ad Inserter Pro
|
2269 |
+
#: includes/functions.php:688
|
2270 |
msgid "Invalid %s version. Continue?"
|
2271 |
msgstr "Version de %s no valida. ¿Seguir?"
|
2272 |
|
2273 |
+
#: includes/functions.php:860
|
2274 |
+
msgid "Show"
|
2275 |
+
msgstr "Mostrar"
|
2276 |
+
|
2277 |
+
#: includes/functions.php:872 includes/functions.php:899
|
2278 |
+
msgid ""
|
2279 |
+
"Trigger value: page scroll in %, page scroll in px or element with selector "
|
2280 |
+
"(#id or .class) scrolls in or out of screen"
|
2281 |
+
msgstr ""
|
2282 |
+
"Valor de activación: scroll de página en %, scroll de página en px o cuando "
|
2283 |
+
"elemento con selector (#id o .class) se desplaza dentro o fuera de la "
|
2284 |
+
"pantalla"
|
2285 |
+
|
2286 |
+
#: includes/functions.php:886
|
2287 |
+
msgid "Hide"
|
2288 |
+
msgstr "Oculta"
|
2289 |
+
|
2290 |
+
#: includes/functions.php:917 includes/preview.php:2731
|
2291 |
msgid "Background"
|
2292 |
msgstr "Fondo"
|
2293 |
|
2294 |
#. translators: %s HTML body tag
|
2295 |
+
#: includes/functions.php:924
|
2296 |
msgid "Set %s background"
|
2297 |
msgstr "Establecer %s fondo"
|
2298 |
|
2299 |
+
#: includes/functions.php:937 includes/functions.php:996
|
2300 |
msgid "Image to be used for the background"
|
2301 |
msgstr "Imagen que se utilizará como fondo"
|
2302 |
|
2303 |
+
#: includes/functions.php:942
|
2304 |
msgid "Color"
|
2305 |
msgstr "Color"
|
2306 |
|
2307 |
+
#: includes/functions.php:943 includes/preview.php:2550
|
2308 |
msgid "Color to be used for the background"
|
2309 |
msgstr "Color a usar para el fondo"
|
2310 |
|
2311 |
+
#: includes/functions.php:946 includes/preview.php:2555
|
2312 |
msgid "Image size"
|
2313 |
msgstr "Tamaño de la imagen"
|
2314 |
|
2315 |
+
#: includes/functions.php:956
|
2316 |
msgid "Repeat"
|
2317 |
msgstr "Repetir"
|
2318 |
|
2319 |
+
#: includes/functions.php:969
|
2320 |
msgid "Select image"
|
2321 |
msgstr "Seleccionar imagen"
|
2322 |
|
2323 |
+
#: includes/functions.php:996
|
2324 |
+
msgid "Parallax background"
|
2325 |
+
msgstr "Fondo con efecto parallax"
|
2326 |
+
|
2327 |
+
#: includes/functions.php:999
|
2328 |
+
msgid "Select background image"
|
2329 |
+
msgstr "Selecciona una imagen de fondo"
|
2330 |
+
|
2331 |
+
#: includes/functions.php:1003
|
2332 |
+
msgid "Shift"
|
2333 |
+
msgstr "Desplazamiento"
|
2334 |
+
|
2335 |
+
#: includes/functions.php:1004
|
2336 |
+
msgid ""
|
2337 |
+
"Background image shift in pixels when the block scrolls from top to bottom, "
|
2338 |
+
"empty means no shift"
|
2339 |
+
msgstr ""
|
2340 |
+
"Desplazamiento de la imagen de fondo en píxeles cuando el bloque se desplaza "
|
2341 |
+
"de arriba a abajo, vacío significa que no hay desplazamiento"
|
2342 |
+
|
2343 |
+
#: includes/functions.php:1012 settings.php:1000
|
2344 |
+
msgid "Link"
|
2345 |
+
msgstr "Enlace"
|
2346 |
+
|
2347 |
+
#: includes/functions.php:1012
|
2348 |
+
msgid "The destination page when the background is clicked"
|
2349 |
+
msgstr "La página de destino cuando se hace clic en el fondo"
|
2350 |
+
|
2351 |
+
#: includes/functions.php:1014 settings.php:1011
|
2352 |
+
msgid "Open link in a new tab"
|
2353 |
+
msgstr "Abrir enlace en una pestaña nueva"
|
2354 |
+
|
2355 |
+
#: includes/functions.php:1017
|
2356 |
+
msgid "New tab"
|
2357 |
+
msgstr "Nueva pestaña"
|
2358 |
+
|
2359 |
+
#: includes/functions.php:1248 includes/functions.php:1276 settings.php:1895
|
2360 |
+
#: settings.php:1918 settings.php:1941 settings.php:1964 settings.php:1987
|
2361 |
+
#: settings.php:2010 settings.php:2033 settings.php:2055 settings.php:2077
|
2362 |
msgid "Click to select black or white list"
|
2363 |
msgstr "Haz clic para seleccionar la lista blanca o la negra"
|
2364 |
|
2365 |
#. translators: %s: Ad Inserter Pro
|
2366 |
+
#: includes/functions.php:1913
|
2367 |
msgid "Invalid %s version."
|
2368 |
msgstr "Version de %s no valida."
|
2369 |
|
2370 |
+
#: includes/functions.php:1914
|
2371 |
msgid "Check license"
|
2372 |
msgstr "Comprueba la licencia"
|
2373 |
|
2374 |
+
#: includes/functions.php:1929
|
2375 |
msgid "License"
|
2376 |
msgstr "Licencia"
|
2377 |
|
2378 |
#. translators: 1, 2, 4, 5: HTML tags, 3: Ad Inserter Pro
|
2379 |
+
#: includes/functions.php:2274
|
2380 |
msgid "%1$s Warning: %2$s Wrong %3$s version. %4$s Check license %5$s"
|
2381 |
msgstr ""
|
2382 |
"%1$s Advertencia: %2$s Versión %3$s incorrecta. %4$s Verificar licencia %5$s"
|
2383 |
|
2384 |
#. Translators: %s: HTML tags
|
2385 |
+
#: includes/functions.php:2327
|
2386 |
msgid ""
|
2387 |
"Warning: %s MaxMind license key not set. Please %s sign up for a GeoLite2 "
|
2388 |
"account %s and create license key."
|
2390 |
"Advertencia: La clave de licencia %s MaxMind no está configurada. %s "
|
2391 |
"regístrarse para obtener una cuenta GeoLite2 %s y crea una clave de licencia."
|
2392 |
|
2393 |
+
#: includes/functions.php:3132
|
2394 |
msgid "Start date"
|
2395 |
msgstr "Fecha de inicio"
|
2396 |
|
2397 |
+
#: includes/functions.php:3132
|
2398 |
msgid "Enter date in format yyyy-mm-dd"
|
2399 |
msgstr "Ingrese la fecha en formato aaaa-mm-dd"
|
2400 |
|
2401 |
+
#: includes/functions.php:3132
|
2402 |
+
msgid "empty means every day as defined by hours and days in week"
|
2403 |
+
msgstr ""
|
2404 |
+
"vacío significa todos los días definidos por las horas y los días de la "
|
2405 |
+
"semana"
|
2406 |
+
|
2407 |
+
#: includes/functions.php:3133
|
2408 |
msgid "Start time"
|
2409 |
msgstr "Hora de inicio"
|
2410 |
|
2411 |
+
#: includes/functions.php:3133
|
2412 |
msgid "Enter time in format hh:mm:ss, empty means 00:00:00"
|
2413 |
msgstr "Ingresa la hora en formato hh: mm: ss, vacío significa 00:00:00"
|
2414 |
|
2415 |
+
#: includes/functions.php:3135
|
2416 |
msgid "End date"
|
2417 |
msgstr "Fecha final"
|
2418 |
|
2419 |
+
#: includes/functions.php:3136
|
2420 |
msgid "End time"
|
2421 |
msgstr "Hora final"
|
2422 |
|
2423 |
+
#: includes/functions.php:3139
|
2424 |
msgid "Select wanted days in week"
|
2425 |
msgstr "Seleccione los días deseados de la semana"
|
2426 |
|
2427 |
+
#: includes/functions.php:3479
|
2428 |
+
msgid "Fallback"
|
2429 |
+
msgstr "Respaldo"
|
2430 |
+
|
2431 |
+
#: includes/functions.php:3480
|
2432 |
+
msgid "Block to be used when a limit is reached"
|
2433 |
+
msgstr "Bloque a utilizar cuando se alcanza un límite"
|
2434 |
+
|
2435 |
+
#: includes/functions.php:3504
|
2436 |
msgid "Ad blocking detection is disabled"
|
2437 |
msgstr "La detección de bloqueo de anuncios está deshabilitada"
|
2438 |
|
2439 |
+
#: includes/functions.php:3617
|
2440 |
+
msgid ""
|
2441 |
+
"Time in ms before the code is inserted (and ad displayed). Leave empty to "
|
2442 |
+
"insert the code without any additional delay."
|
2443 |
+
msgstr ""
|
2444 |
+
"Tiempo en ms antes de que se inserte el código (y se muestre el anuncio). "
|
2445 |
+
"Déjalo vacío para insertar el código sin ningún retraso adicional."
|
2446 |
+
|
2447 |
+
#: includes/functions.php:3656
|
2448 |
+
msgid "Check reCAPTCHA score"
|
2449 |
+
msgstr "Comprobar la puntuación de reCAPTCHA"
|
2450 |
|
2451 |
+
#: includes/functions.php:3662
|
2452 |
+
msgid "Wait for user interaction"
|
2453 |
+
msgstr "Espera a la interacción del usuario"
|
2454 |
+
|
2455 |
+
#: includes/functions.php:3670
|
2456 |
msgid "Manual loading"
|
2457 |
msgstr "Carga manual"
|
2458 |
|
2459 |
+
#: includes/functions.php:3689
|
2460 |
+
msgid "Protected"
|
2461 |
+
msgstr "Protegido"
|
2462 |
+
|
2463 |
+
#: includes/functions.php:3782
|
2464 |
+
msgid "IP address blocked"
|
2465 |
+
msgid_plural "IP addresses blocked"
|
2466 |
+
msgstr[0] "Dirección IP bloqueada"
|
2467 |
+
msgstr[1] "Direcciones IP bloqueadas"
|
2468 |
+
|
2469 |
+
#: includes/functions.php:3785 includes/functions.php:3834
|
2470 |
+
msgid "No IP address blocked"
|
2471 |
+
msgstr "Ninguna dirección IP bloqueada"
|
2472 |
+
|
2473 |
+
#: includes/functions.php:3847
|
2474 |
+
msgid "Blocked IP address"
|
2475 |
+
msgstr "Direcciones IP bloqueadas"
|
2476 |
+
|
2477 |
+
#: includes/functions.php:3847
|
2478 |
+
msgid "Country"
|
2479 |
+
msgstr "País"
|
2480 |
+
|
2481 |
+
#: includes/functions.php:3847
|
2482 |
+
msgid "Time to expiration"
|
2483 |
+
msgstr "Tiempo hasta el vencimiento"
|
2484 |
+
|
2485 |
+
#: includes/functions.php:3849 strings.php:227
|
2486 |
+
msgid "Delete"
|
2487 |
+
msgstr "Borrar"
|
2488 |
+
|
2489 |
+
#: includes/functions.php:3864
|
2490 |
+
msgid "Delete IP address"
|
2491 |
+
msgstr "Borra la dirección IP"
|
2492 |
+
|
2493 |
+
#: includes/functions.php:4016
|
2494 |
+
msgid "Toggle plugin settings"
|
2495 |
+
msgstr "Cambiar los ajustes del plugin"
|
2496 |
+
|
2497 |
+
#: includes/functions.php:4429
|
2498 |
+
msgid "CONNECTED"
|
2499 |
+
msgstr "CONECTADO"
|
2500 |
+
|
2501 |
+
#: includes/functions.php:4430
|
2502 |
+
msgid "Disconnect website"
|
2503 |
+
msgstr "Desconecta la web"
|
2504 |
+
|
2505 |
+
#: includes/functions.php:4446
|
2506 |
+
msgid "MANAGED BY"
|
2507 |
+
msgstr "GESTIONADO POR"
|
2508 |
+
|
2509 |
+
#: includes/functions.php:4467
|
2510 |
+
msgid "Remote management"
|
2511 |
+
msgstr "Gestión remota"
|
2512 |
+
|
2513 |
+
#: includes/functions.php:4471
|
2514 |
+
msgid "Allow to connect and manage plugin settings"
|
2515 |
+
msgstr "Permite conectarse y gestionar los ajustes del plugin"
|
2516 |
+
|
2517 |
+
#: includes/functions.php:4473
|
2518 |
+
msgid "String to allow plugin management. Clear to reset to default value."
|
2519 |
+
msgstr ""
|
2520 |
+
"Cadena para permitir la gestión del plugin. Borra para restablecer el valor "
|
2521 |
+
"por defecto."
|
2522 |
+
|
2523 |
+
#: includes/functions.php:4481
|
2524 |
+
msgid "Check remote IP address"
|
2525 |
+
msgstr "Comprobar la dirección IP remota"
|
2526 |
+
|
2527 |
+
#: includes/functions.php:4485
|
2528 |
+
msgid "Check IP address of remote management website"
|
2529 |
+
msgstr "Comprobar la dirección IP para la gestión remota de la web"
|
2530 |
+
|
2531 |
+
#: includes/functions.php:4487
|
2532 |
+
msgid "Allowed IP addresses of remote management websites"
|
2533 |
+
msgstr "Direcciones IP permitidas para la gestión remota de las webs"
|
2534 |
+
|
2535 |
+
#. Translators: %s: Ad Inserter Pro
|
2536 |
+
#: includes/functions.php:4510
|
2537 |
+
msgid "Manage %s on other websites"
|
2538 |
+
msgstr "Gestiona %s en otras webs"
|
2539 |
+
|
2540 |
+
#: includes/functions.php:4525
|
2541 |
+
msgid "Add website"
|
2542 |
+
msgstr "Añade web"
|
2543 |
+
|
2544 |
+
#: includes/functions.php:4529
|
2545 |
+
msgid "Rearrange website order"
|
2546 |
+
msgstr "Reorganiza el orden de la web"
|
2547 |
+
|
2548 |
+
#: includes/functions.php:4533
|
2549 |
+
msgid "Cancel changes"
|
2550 |
+
msgstr "Cancelar cambios"
|
2551 |
+
|
2552 |
+
#: includes/functions.php:4537
|
2553 |
+
msgid "Save changes"
|
2554 |
+
msgstr "Guardar cambios"
|
2555 |
+
|
2556 |
+
#: includes/functions.php:4657 includes/functions.php:4660
|
2557 |
+
#: includes/functions.php:4663 includes/functions.php:4668
|
2558 |
+
msgid "Invalid data received from"
|
2559 |
+
msgstr "Datos no válidos recibidos de"
|
2560 |
+
|
2561 |
+
#: includes/functions.php:4667 includes/functions.php:4671
|
2562 |
+
msgid "Error connecting to"
|
2563 |
+
msgstr "Error de conexión con"
|
2564 |
+
|
2565 |
+
#: includes/functions.php:4667
|
2566 |
+
msgid "No data received"
|
2567 |
+
msgstr "Ningún dato recibido"
|
2568 |
+
|
2569 |
+
#: includes/functions.php:4712
|
2570 |
+
msgid "Error saving websites"
|
2571 |
+
msgstr "Error guardando las webs"
|
2572 |
+
|
2573 |
+
#: includes/functions.php:4752
|
2574 |
+
msgid "Can't connect to itself"
|
2575 |
+
msgstr "No puedes conectarte a ti mismo"
|
2576 |
+
|
2577 |
+
#: includes/functions.php:4803
|
2578 |
+
msgid "Connect website"
|
2579 |
+
msgstr "Conecta la web"
|
2580 |
+
|
2581 |
+
#: includes/functions.php:4807
|
2582 |
+
msgid "Delete website"
|
2583 |
+
msgstr "Borra la web"
|
2584 |
+
|
2585 |
+
#: includes/functions.php:4823
|
2586 |
+
msgid "Key"
|
2587 |
+
msgstr "Clave"
|
2588 |
+
|
2589 |
+
#: includes/functions.php:4841
|
2590 |
+
msgid "Address"
|
2591 |
+
msgstr "Dirección"
|
2592 |
+
|
2593 |
+
#: includes/functions.php:4854
|
2594 |
+
msgid "No website configured"
|
2595 |
+
msgstr "Ninguna web configurada"
|
2596 |
+
|
2597 |
+
#: includes/functions.php:4855
|
2598 |
+
msgid "No website matches search keywords"
|
2599 |
+
msgstr "No hay webs que coincidan con las palabras clave de búsqueda"
|
2600 |
+
|
2601 |
#. Translators: %s HTML tags
|
2602 |
+
#: includes/functions.php:4884
|
2603 |
msgid "Create and manage %s MaxMind license key %s"
|
2604 |
msgstr "Crear y administrar la clave de licencia %s MaxMind %s"
|
2605 |
|
2606 |
+
#: includes/functions.php:4920
|
2607 |
msgid "MaxMind license key"
|
2608 |
msgstr "Clave de licencia MaxMind"
|
2609 |
|
2610 |
+
#: includes/functions.php:4923
|
2611 |
msgid "Enter license key obtained from MaxMind"
|
2612 |
msgstr "Ingresa clave de licencia obtenida de MaxMind"
|
2613 |
|
2614 |
+
#: includes/functions.php:5124
|
2615 |
msgid ""
|
2616 |
"Image or logo to be displayed in the header of the statistics report. "
|
2617 |
"Absolute path starting with '/' or relative path to the image file. Clear to "
|
2621 |
"estadísticas. Ruta absoluta que comienza con «/» o ruta relativa al archivo "
|
2622 |
"de imagen. Borrar para restablecer la imagen predeterminada."
|
2623 |
|
2624 |
+
#: includes/functions.php:5172
|
2625 |
msgid "Event category"
|
2626 |
msgstr "Categoría de evento"
|
2627 |
|
2628 |
+
#: includes/functions.php:5175
|
2629 |
msgid ""
|
2630 |
"Category name used for external tracking events. You can use tags to get the "
|
2631 |
"event, the number or the name of the block that caused the event."
|
2634 |
"usar etiquetas para obtener el evento, el número o el nombre del bloque que "
|
2635 |
"causó el evento."
|
2636 |
|
2637 |
+
#: includes/functions.php:5180
|
2638 |
msgid "Event action"
|
2639 |
msgstr "Acción evento"
|
2640 |
|
2641 |
+
#: includes/functions.php:5183
|
2642 |
msgid ""
|
2643 |
"Action name used for external tracking events. You can use tags to get the "
|
2644 |
"event, the number or the name of the block that caused the event."
|
2647 |
"etiquetas para obtener el evento, el número o el nombre del bloque que causó "
|
2648 |
"el evento."
|
2649 |
|
2650 |
+
#: includes/functions.php:5188
|
2651 |
msgid "Event label"
|
2652 |
msgstr "Etiqueta de evento"
|
2653 |
|
2654 |
+
#: includes/functions.php:5191
|
2655 |
msgid ""
|
2656 |
"Label name used for external tracking events. You can use tags to get the "
|
2657 |
"event, the number or the name of the block that caused the event."
|
2660 |
"etiquetas para obtener el evento, el número o el nombre del bloque que causó "
|
2661 |
"el evento."
|
2662 |
|
2663 |
+
#: includes/functions.php:5224
|
2664 |
+
msgid "Global visitor limits"
|
2665 |
+
msgstr "Límites globales de visitantes"
|
2666 |
+
|
2667 |
+
#: includes/functions.php:5247
|
2668 |
+
msgid "Block IP address"
|
2669 |
+
msgstr "Bloquea dirección IP"
|
2670 |
+
|
2671 |
+
#: includes/functions.php:5252
|
2672 |
+
msgid "Block visitor's IP address when protection is activated"
|
2673 |
+
msgstr ""
|
2674 |
+
"Bloquea la dirección IP del visitante cuando la protección está activada"
|
2675 |
+
|
2676 |
+
#: includes/functions.php:5254
|
2677 |
+
msgid "Click to show blocked IP addresses"
|
2678 |
+
msgstr "Haz clic para mostrar las direcciones IP bloqueadas"
|
2679 |
+
|
2680 |
#. translators: %s: Ad Inserter Pro
|
2681 |
+
#: includes/functions.php:5444
|
2682 |
msgid "Show link to %s settings page for each site on the Sites page"
|
2683 |
msgstr ""
|
2684 |
"Mostrar enlace a la página de configuración de %s para cada sitio en la "
|
2685 |
"página Sitios"
|
2686 |
|
2687 |
#. translators: %s: Ad Inserter Pro
|
2688 |
+
#: includes/functions.php:5444
|
2689 |
msgid "Show link to %s on the Sites page"
|
2690 |
msgstr "Mostrar enlace a %s en la página Sitios"
|
2691 |
|
2692 |
+
#: includes/functions.php:5486 settings.php:3354
|
2693 |
+
msgid ""
|
2694 |
+
"Enable Debugger widget and code insertion debugging (blocks, positions, "
|
2695 |
+
"tags, processing) by url parameters for non-logged in users. Enable this "
|
2696 |
+
"option to allow other users to see Debugger widget, labeled blocks and "
|
2697 |
+
"positions in order to help you to diagnose problems. For logged in "
|
2698 |
+
"administrators debugging is always enabled."
|
2699 |
+
msgstr ""
|
2700 |
+
"Habilitar el widget de depuración y la depuración inserción de código "
|
2701 |
+
"(bloques, posiciones, etiquetas, procesamiento) por parámetros de url para "
|
2702 |
+
"usuarios que no estén conectados. Habilita esta opción para permitir a otros "
|
2703 |
+
"usuarios ver el widget depurador, los bloques etiquetados y las posiciones "
|
2704 |
+
"para ayudarle a diagnosticar problemas. Para los administradores que han "
|
2705 |
+
"iniciado sesión, la depuración siempre está habilitada."
|
2706 |
+
|
2707 |
+
#: includes/functions.php:5488 settings.php:3356
|
2708 |
+
msgid "Remote debugging"
|
2709 |
+
msgstr "Depuración remota"
|
2710 |
+
|
2711 |
+
#: includes/functions.php:6852
|
2712 |
+
msgid "All statistics data for block %s deleted"
|
2713 |
+
msgstr "Todos los datos estadísticos del bloque %s borrados"
|
2714 |
+
|
2715 |
+
#: includes/functions.php:6856
|
2716 |
+
msgid "Statistics data between %s and %s deleted"
|
2717 |
+
msgstr "Datos estadísticos entre %s y %s borrados"
|
2718 |
+
|
2719 |
+
#: includes/functions.php:7187
|
2720 |
msgid "Date"
|
2721 |
msgstr "Fecha"
|
2722 |
|
2723 |
+
#: includes/functions.php:7621 includes/functions.php:7632
|
2724 |
msgid "File %s missing."
|
2725 |
msgstr "Falta el archivo %s."
|
2726 |
|
2748 |
msgid "Placeholder"
|
2749 |
msgstr "Marcador de posición"
|
2750 |
|
2751 |
+
#: includes/placeholders.php:361 settings.php:1067 settings.php:4740
|
2752 |
msgid "Size"
|
2753 |
msgstr "Tamaño"
|
2754 |
|
2755 |
+
#: includes/placeholders.php:377 includes/preview.php:2547 settings.php:2399
|
2756 |
msgid "Background color"
|
2757 |
msgstr "Color de fondo"
|
2758 |
|
2845 |
msgid "Remove dummy paragraph"
|
2846 |
msgstr "Eliminar el párrafo falso"
|
2847 |
|
2848 |
+
#: includes/preview-adb.php:6 includes/preview.php:2407
|
2849 |
msgid "Use current settings"
|
2850 |
msgstr "Usar los ajustes actuales"
|
2851 |
|
2872 |
msgid "Default"
|
2873 |
msgstr "Por defecto"
|
2874 |
|
2875 |
+
#: includes/preview-adb.php:9 includes/preview.php:2410
|
2876 |
msgid "Close preview window"
|
2877 |
msgstr "Cerrar la ventana de vista previa"
|
2878 |
|
2881 |
msgid "Cancel"
|
2882 |
msgstr "Cancelar"
|
2883 |
|
2884 |
+
#: includes/preview-adb.php:60
|
2885 |
msgid "Ad Blocking Detected Message Preview"
|
2886 |
msgstr "Vista previa del mensaje de bloqueo de anuncio detectado"
|
2887 |
|
2888 |
+
#: includes/preview-adb.php:360 settings.php:3191
|
2889 |
msgid "Message CSS"
|
2890 |
msgstr "Mensaje CSS"
|
2891 |
|
2892 |
+
#: includes/preview-adb.php:365 settings.php:3199
|
2893 |
msgid "Overlay CSS"
|
2894 |
msgstr "Superposición CSS"
|
2895 |
|
2896 |
+
#: includes/preview.php:283
|
2897 |
msgid "Sticky Code Preview"
|
2898 |
msgstr "Vista previa del código fija"
|
2899 |
|
2900 |
+
#: includes/preview.php:283
|
2901 |
msgid "Code Preview"
|
2902 |
msgstr "Vista previa de código"
|
2903 |
|
2904 |
+
#: includes/preview.php:2405
|
2905 |
msgid "Highlight inserted code"
|
2906 |
msgstr "Código insertado destacado"
|
2907 |
|
2908 |
+
#: includes/preview.php:2405
|
2909 |
msgid "Highlight"
|
2910 |
msgstr "Destacado"
|
2911 |
|
2912 |
+
#: includes/preview.php:2408
|
2913 |
msgid "Reset to block settings"
|
2914 |
msgstr "Restablecer los ajustes del bloque"
|
2915 |
|
2916 |
+
#: includes/preview.php:2423
|
2917 |
msgid "AdSense ad unit"
|
2918 |
msgstr "Unidad de anuncios de AdSense"
|
2919 |
|
2920 |
+
#: includes/preview.php:2492
|
2921 |
msgid "wrapping div"
|
2922 |
msgstr "envoltura div"
|
2923 |
|
2924 |
+
#: includes/preview.php:2497 includes/preview.php:2504
|
2925 |
msgid "background"
|
2926 |
msgstr "fondo"
|
2927 |
|
2928 |
+
#: includes/preview.php:2531 includes/preview.php:2743 settings.php:1469
|
2929 |
msgid "Alignment"
|
2930 |
msgstr "Alineación"
|
2931 |
|
2932 |
+
#: includes/preview.php:2568
|
2933 |
msgid "Repeat image"
|
2934 |
msgstr "Repetir la imagen"
|
2935 |
|
2936 |
+
#: includes/preview.php:2650
|
2937 |
msgid "Horizontal margin"
|
2938 |
msgstr "Margen horizontal"
|
2939 |
|
2940 |
+
#: includes/preview.php:2702
|
2941 |
msgid "Vertical margin"
|
2942 |
msgstr "Márgen vertical"
|
2943 |
|
2944 |
+
#: includes/preview.php:2726
|
2945 |
msgid "Animate"
|
2946 |
msgstr "Animar"
|
2947 |
|
2948 |
+
#: includes/preview.php:2810
|
2949 |
msgid ""
|
2950 |
"This is a preview of the code between dummy paragraphs. Here you can test "
|
2951 |
"various block alignments, visually edit margin and padding values of the "
|
2962 |
"código, mientras que el botón Restablecer restaura todos los valores a los "
|
2963 |
"del bloque actual."
|
2964 |
|
2965 |
+
#: includes/preview.php:2813
|
2966 |
msgid ""
|
2967 |
"This is a preview of the saved block between dummy paragraphs. It shows the "
|
2968 |
"code with the alignment and style as it is set for this block. Highlight "
|
2973 |
"para este bloque. El botón de resaltar resalta el fondo, envolviendo el "
|
2974 |
"margen de división y el área de código."
|
2975 |
|
2976 |
+
#: includes/preview.php:2815
|
2977 |
msgid ""
|
2978 |
"This is a preview of AdSense ad block between dummy paragraphs. AdSense ad "
|
2979 |
"code was loaded from your AdSense account. The ad block is displayed on a "
|
2986 |
"puede estar en blanco (sin anuncios). Haz clic en el botón Resaltar para "
|
2987 |
"resaltar el bloque de anuncios."
|
2988 |
|
2989 |
+
#: includes/preview.php:2821
|
2990 |
msgid ""
|
2991 |
"You can resize the window (and refresh the page to reload ads) to check "
|
2992 |
"display with different screen widths.\n"
|
2999 |
"Una vez que estés satisfecho con la alineación, haz clic en el botón «Usar» "
|
3000 |
"y la configuración se copiará en el bloque activo."
|
3001 |
|
3002 |
+
#: includes/preview.php:2823
|
3003 |
msgid ""
|
3004 |
"Please note that the code, block name, alignment and style are taken from "
|
3005 |
"the current block settings (may not be saved).\n"
|
3013 |
"margen y el relleno no se pueden establecer. Sin embargo, puedes utilizar tu "
|
3014 |
"propio código HTML para el bloque."
|
3015 |
|
3016 |
+
#: includes/preview.php:2828 includes/preview.php:2842
|
3017 |
+
#: includes/preview.php:2852 includes/preview.php:2862
|
3018 |
+
#: includes/preview.php:2872
|
3019 |
msgid ""
|
3020 |
"Ad Inserter can be configured to insert any code anywhere on the page. Each "
|
3021 |
"code with it's settings is called a block.\n"
|
3040 |
"número violeta significa que el bloque está usando inserción automática y "
|
3041 |
"manual."
|
3042 |
|
3043 |
+
#: includes/preview.php:2833 includes/preview.php:2847
|
3044 |
+
#: includes/preview.php:2857 includes/preview.php:2867
|
3045 |
+
#: includes/preview.php:2877
|
3046 |
msgid ""
|
3047 |
"Few very important things you need to know in order to insert code and "
|
3048 |
"display some ad:\n"
|
3066 |
"blanco predeterminado a menos que estés utilizando excepciones individuales "
|
3067 |
"de entradas/página."
|
3068 |
|
3069 |
+
#: includes/preview.php:2839
|
3070 |
msgid ""
|
3071 |
"This is a preview of the code for sticky ads. Here you can test various "
|
3072 |
"horizontal and vertical alignments, close button locations, visually edit "
|
3082 |
"botón Resaltar resalta el fondo, el margen y el área de código, mientras que "
|
3083 |
"el botón Restablecer restaura todos los valores a los del bloque actual."
|
3084 |
|
3085 |
+
#: includes/version-check.php:36
|
|
|
|
|
|
|
|
|
3086 |
msgid ""
|
3087 |
"Warning: Ad Inserter Pro plugin is outdated - it has not been tested with "
|
3088 |
"WordPress version"
|
3090 |
"Advertencia: el plugin Ad Inserter Pro está desactualizado; no se ha probado "
|
3091 |
"con la versión de WordPress"
|
3092 |
|
3093 |
+
#: settings.php:173 settings.php:176
|
3094 |
msgid ""
|
3095 |
"Warning: only exceptions for %d posts cleared, %d posts still have exceptions"
|
3096 |
msgstr ""
|
3097 |
"Advertencia: sólo hay excepciones para %d entradas vaciadas, %d entradas "
|
3098 |
"todavía tienen excepciones"
|
3099 |
|
3100 |
+
#. translators: %s: HTML link code
|
3101 |
+
#: settings.php:183
|
3102 |
msgid ""
|
3103 |
+
"Warning: %s Unfiltered HTML %s is disabled for this website - most ad codes "
|
3104 |
+
"can't be used"
|
3105 |
msgstr ""
|
3106 |
+
"Advertencia: El %s HTML sin filtrar %s está desactivado en este sitio - No "
|
3107 |
+
"se pueden usar la mayoría de los códigos de anuncios"
|
|
|
3108 |
|
3109 |
+
#: settings.php:278
|
3110 |
msgid "Online documentation"
|
3111 |
msgstr "Documentación en línea"
|
3112 |
|
3113 |
+
#: settings.php:281
|
3114 |
+
msgid "Support Forum"
|
3115 |
+
msgstr "Foro de soporte"
|
3116 |
+
|
3117 |
+
#: settings.php:286 settings.php:885 settings.php:2505
|
3118 |
msgid "Show AdSense ad units"
|
3119 |
msgstr "Mostrar los bloques de anuncios de AdSense"
|
3120 |
|
3121 |
+
#: settings.php:295
|
3122 |
msgid "Edit ads.txt file"
|
3123 |
msgstr "Editar fichero ads.txt"
|
3124 |
|
3125 |
+
#: settings.php:298 settings.php:1295
|
3126 |
msgid "Check theme for available positions for automatic insertion"
|
3127 |
msgstr ""
|
3128 |
"Comprueba en el tema las posiciones disponibles para inserción automática"
|
3129 |
|
3130 |
+
#: settings.php:302
|
3131 |
msgid "List all blocks"
|
3132 |
msgstr "Listar todos los bloques"
|
3133 |
|
3134 |
+
#: settings.php:309
|
3135 |
msgid "Loaded plugin JavaScript file version"
|
3136 |
msgstr "Versión de archivo JavaScript del plugin cargado"
|
3137 |
|
3138 |
#. translators: %s: HTML tags
|
3139 |
+
#: settings.php:311
|
3140 |
msgid ""
|
3141 |
"Wrong or %s missing version parameter %s of the JavaScript file, probably "
|
3142 |
"due to inappropriate caching."
|
3144 |
"Error o %s falta el parámetro de versión %s del archivo JavaScript, "
|
3145 |
"probablemente debido a un almacenamiento en caché inapropiado."
|
3146 |
|
3147 |
+
#: settings.php:312
|
3148 |
msgid ""
|
3149 |
"Missing version parameter of the JavaScript file, probably due to "
|
3150 |
"inappropriate caching."
|
3152 |
"Falta el parámetro versión del archivo JavaScript, probablemente debido a un "
|
3153 |
"almacenamiento en caché inapropiado."
|
3154 |
|
3155 |
+
#: settings.php:313
|
3156 |
msgid ""
|
3157 |
"Incompatible (old) JavaScript file loaded, probably due to inappropriate "
|
3158 |
"caching."
|
3160 |
"Archivo JavaScript incompatible (antiguo) cargado, probablemente debido a un "
|
3161 |
"almacenamiento en caché inapropiado."
|
3162 |
|
3163 |
+
#: settings.php:314 settings.php:325
|
3164 |
msgid ""
|
3165 |
"Please delete browser's cache and all other caches used and then reload this "
|
3166 |
"page."
|
3168 |
"Por favor, vacía la caché del navegador y todas las demás cachés usadas y "
|
3169 |
"luego recarga esta página."
|
3170 |
|
3171 |
+
#: settings.php:320
|
3172 |
msgid "Loaded plugin CSS file version"
|
3173 |
msgstr "Versión de archivo CSS del plugin cargado"
|
3174 |
|
3175 |
#. translators: %s: HTML tags
|
3176 |
+
#: settings.php:322
|
3177 |
msgid ""
|
3178 |
"Wrong or %s missing version parameter %s of the CSS file, probably due to "
|
3179 |
"inappropriate caching."
|
3181 |
"Error o falta %s el parámetro de versión %s del archivo CSS, probablemente "
|
3182 |
"debido a un almacenamiento en caché inapropiado."
|
3183 |
|
3184 |
+
#: settings.php:323
|
3185 |
msgid ""
|
3186 |
"Missing version parameter of the CSS file, probably due to inappropriate "
|
3187 |
"caching."
|
3189 |
"Falta el parámetro versión del archivo CSS, probablemente debido a un "
|
3190 |
"almacenamiento en caché inapropiado."
|
3191 |
|
3192 |
+
#: settings.php:324
|
3193 |
msgid ""
|
3194 |
"Incompatible (old) CSS file loaded, probably due to inappropriate caching."
|
3195 |
msgstr ""
|
3196 |
"Archivo CSS incompatible (antiguo) cargado, probablemente debido a un "
|
3197 |
"almacenamiento en caché inapropiado."
|
3198 |
|
3199 |
+
#: settings.php:331 settings.php:357
|
3200 |
msgid "WARNING"
|
3201 |
msgstr "ADVERTENCIA"
|
3202 |
|
3203 |
#. translators: %s: HTML tags
|
3204 |
+
#: settings.php:333
|
3205 |
msgid "Page may %s not be loaded properly. %s"
|
3206 |
msgstr "La página puede %s no estar correctamente cargada. %s"
|
3207 |
|
3208 |
+
#: settings.php:334
|
3209 |
msgid ""
|
3210 |
"Check ad blocking software that may block CSS, JavaScript or image files."
|
3211 |
msgstr ""
|
3212 |
"Comprueba el software de bloqueo de anuncios que puede bloquear CSS, "
|
3213 |
"JavaScript o archivos de imagen."
|
3214 |
|
3215 |
+
#: settings.php:343
|
3216 |
msgid "SAFE MODE"
|
3217 |
msgstr "MODO SEGURO"
|
3218 |
|
3219 |
#. translators: %s: HTML tags
|
3220 |
+
#: settings.php:345
|
3221 |
msgid "Page is loaded in %s safe mode. %s Not all scripts are loaded."
|
3222 |
msgstr ""
|
3223 |
"La página está cargada en %s modo seguro. %s No todos los scripts se han "
|
3224 |
"cargado."
|
3225 |
|
3226 |
+
#: settings.php:357
|
3227 |
msgid ""
|
3228 |
"To disable debugging functions and to enable insertions go to tab [*] / tab "
|
3229 |
"Debugging"
|
3231 |
"Para desactivar las funciones de depuración y activar las inserciones, ve a "
|
3232 |
"la pestaña [*] / pestaña Depuración"
|
3233 |
|
3234 |
+
#: settings.php:359
|
3235 |
msgid "Debugging functions enabled - some code is not inserted"
|
3236 |
msgstr "Funciones de depuración activadas - algún código no está insertado"
|
3237 |
|
3238 |
+
#: settings.php:376
|
3239 |
msgid "Group name"
|
3240 |
msgstr "Nombre del grupo"
|
3241 |
|
3242 |
+
#: settings.php:377
|
3243 |
msgid "Option name"
|
3244 |
msgstr "Nombre de opción"
|
3245 |
|
3246 |
+
#: settings.php:383
|
3247 |
msgid "Share"
|
3248 |
msgstr "Compartir"
|
3249 |
|
3250 |
+
#: settings.php:386
|
3251 |
msgid ""
|
3252 |
"Option share in percents - 0 means option is disabled, if share for one "
|
3253 |
"option is not defined it will be calculated automatically. Leave all share "
|
3258 |
"automáticamente. Deja todos los campos en blanco para repartir "
|
3259 |
"equitativamente."
|
3260 |
|
3261 |
+
#: settings.php:389 settings.php:2232 settings.php:4653
|
3262 |
+
msgid "Scheduling"
|
3263 |
+
msgstr "Programando"
|
3264 |
+
|
3265 |
+
#: settings.php:392
|
3266 |
+
msgid "Scheduling parameters"
|
3267 |
+
msgstr "Parámetros de programación"
|
3268 |
+
|
3269 |
+
#: settings.php:395
|
3270 |
msgid "Time"
|
3271 |
msgstr "Hora"
|
3272 |
|
3273 |
+
#: settings.php:398
|
3274 |
msgid ""
|
3275 |
"Option time in seconds - 0 means option is disabled and will be skipped. "
|
3276 |
"Leave all time fields empty for no timed rotation."
|
3279 |
"desactivada y se omitirá. Deja todos los campos de tiempo vacíos para dejar "
|
3280 |
"la rotación sin programar."
|
3281 |
|
3282 |
+
#: settings.php:569
|
3283 |
msgid "General Settings"
|
3284 |
msgstr "Configuración general"
|
3285 |
|
3286 |
+
#: settings.php:833 settings.php:2887 settings.php:2956 settings.php:3169
|
3287 |
msgid "Toggle Syntax Highlighting / Simple editor for mobile devices"
|
3288 |
msgstr "Alternar resaltado de sintaxis/Editor simple para dispositivos móviles"
|
3289 |
|
3290 |
+
#: settings.php:840
|
3291 |
msgid "Toggle tools"
|
3292 |
msgstr "Alternar herramientas"
|
3293 |
|
3294 |
+
#: settings.php:848
|
3295 |
msgid "Process PHP code in block"
|
3296 |
msgstr "Procesar código PHP en bloque"
|
3297 |
|
3298 |
+
#: settings.php:855
|
3299 |
msgid "Disable insertion of this block"
|
3300 |
msgstr "Desactivar la inserción de este bloque"
|
3301 |
|
3302 |
+
#: settings.php:867
|
3303 |
msgid "Toggle code generator"
|
3304 |
msgstr "Alternar generador de código"
|
3305 |
|
3306 |
+
#: settings.php:871
|
3307 |
msgid "Toggle rotation editor"
|
3308 |
msgstr "Alternar editor de rotación"
|
3309 |
|
3310 |
+
#: settings.php:875
|
3311 |
msgid "Open visual HTML editor"
|
3312 |
msgstr "Abrir el editor HTML visual"
|
3313 |
|
3314 |
+
#: settings.php:894
|
3315 |
msgid "Clear block"
|
3316 |
msgstr "Vaciar bloque"
|
3317 |
|
3318 |
+
#: settings.php:899 settings.php:4605
|
3319 |
msgid "Copy block"
|
3320 |
msgstr "Copiar bloque"
|
3321 |
|
3322 |
+
#: settings.php:903
|
3323 |
msgid "Paste name"
|
3324 |
msgstr "Pegar nombre"
|
3325 |
|
3326 |
+
#: settings.php:907
|
3327 |
msgid "Paste code"
|
3328 |
msgstr "Pegar código"
|
3329 |
|
3330 |
+
#: settings.php:911
|
3331 |
msgid "Paste settings"
|
3332 |
msgstr "Pegar ajustes"
|
3333 |
|
3334 |
+
#: settings.php:915
|
3335 |
msgid "Paste block (name, code and settings)"
|
3336 |
msgstr "Pegar bloque (nombre, código y ajustes)"
|
3337 |
|
3338 |
+
#: settings.php:934
|
3339 |
msgid "Rotation groups"
|
3340 |
msgstr "Grupos de rotación"
|
3341 |
|
3342 |
+
#: settings.php:938
|
3343 |
msgid "Remove option"
|
3344 |
msgstr "Eliminar opción"
|
3345 |
|
3346 |
+
#: settings.php:942
|
3347 |
msgid "Add option"
|
3348 |
msgstr "Agrega una opcion"
|
3349 |
|
3350 |
+
#: settings.php:957
|
3351 |
msgid "Import code"
|
3352 |
msgstr "Importar código"
|
3353 |
|
3354 |
+
#: settings.php:961
|
3355 |
msgid "Generate code"
|
3356 |
msgstr "Generar código"
|
3357 |
|
3358 |
+
#: settings.php:966
|
3359 |
msgid "Banner"
|
3360 |
msgstr "Banner"
|
3361 |
|
3362 |
+
#: settings.php:978
|
3363 |
msgid "Image"
|
3364 |
msgstr "Imagen"
|
3365 |
|
3366 |
+
#: settings.php:986
|
3367 |
+
msgid "Alt text"
|
3368 |
+
msgstr "Texto «alt»"
|
|
|
|
|
|
|
|
|
3369 |
|
3370 |
+
#: settings.php:1014
|
3371 |
msgid "Select Image"
|
3372 |
msgstr "Elegir imagen"
|
3373 |
|
3374 |
+
#: settings.php:1015
|
3375 |
msgid "Select Placeholder"
|
3376 |
msgstr "Seleccionar marcador de posición"
|
3377 |
|
3378 |
+
#: settings.php:1027
|
3379 |
msgid "Comment"
|
3380 |
msgstr "Comentar"
|
3381 |
|
3382 |
+
#: settings.php:1036
|
3383 |
msgctxt "AdSense"
|
3384 |
msgid "Publisher ID"
|
3385 |
msgstr "ID del editor"
|
3386 |
|
3387 |
+
#: settings.php:1045
|
3388 |
msgctxt "AdSense"
|
3389 |
msgid "Ad Slot ID"
|
3390 |
msgstr "ID de espacio publicitario"
|
3391 |
|
3392 |
+
#: settings.php:1054
|
3393 |
msgid "Ad Type"
|
3394 |
msgstr "Tipo de anuncio"
|
3395 |
|
3396 |
+
#: settings.php:1079 settings.php:1221
|
3397 |
msgid "AMP Ad"
|
3398 |
msgstr "Anuncio AMP"
|
3399 |
|
3400 |
+
#: settings.php:1093 settings.php:1243
|
3401 |
+
msgid "Block on consent"
|
3402 |
+
msgstr "Bloque en el consentimiento"
|
3403 |
+
|
3404 |
+
#: settings.php:1104
|
3405 |
msgid "Show ad units from your AdSense account"
|
3406 |
msgstr "Mostrar unidades de anuncios desde tu cuenta de AdSense"
|
3407 |
|
3408 |
+
#: settings.php:1104
|
3409 |
msgid "AdSense ad units"
|
3410 |
msgstr "Bloques de anuncios de AdSense"
|
3411 |
|
3412 |
+
#: settings.php:1121
|
3413 |
msgctxt "AdSense"
|
3414 |
msgid "Layout"
|
3415 |
msgstr "Disposición"
|
3416 |
|
3417 |
+
#: settings.php:1130
|
3418 |
msgctxt "AdSense"
|
3419 |
msgid "Layout Key"
|
3420 |
msgstr "Clave de diseño"
|
3421 |
|
3422 |
+
#: settings.php:1140
|
3423 |
msgid "Full width"
|
3424 |
msgstr "Ancho completo"
|
3425 |
|
3426 |
+
#: settings.php:1142
|
3427 |
msgctxt "Full width"
|
3428 |
msgid "Enabled"
|
3429 |
msgstr "Activado"
|
3430 |
|
3431 |
+
#: settings.php:1143
|
3432 |
msgctxt "Full width"
|
3433 |
msgid "Disabled"
|
3434 |
msgstr "Desactivado"
|
3435 |
|
3436 |
+
#: settings.php:1261
|
3437 |
msgid ""
|
3438 |
"White/Black-list Category, Tag, Taxonomy, Post ID, Url, Url parameter, "
|
3439 |
"Cookie or Referer (domain)"
|
3441 |
"Lista Blanca/Negra de categoría, etiqueta, taxonomía, ID de entrada, url, "
|
3442 |
"parámetro de url, cookie o referido"
|
3443 |
|
3444 |
+
#: settings.php:1261
|
3445 |
msgid "Lists"
|
3446 |
msgstr "Listas"
|
3447 |
|
3448 |
+
#: settings.php:1262
|
3449 |
msgid "Widget, Shortcode and PHP function call"
|
3450 |
msgstr "Widget, shortcode y llamada de función PHP"
|
3451 |
|
3452 |
+
#: settings.php:1262
|
3453 |
msgid "Manual"
|
3454 |
msgstr "Manualmente"
|
3455 |
|
3456 |
+
#: settings.php:1263
|
3457 |
msgid "Client/Server-side Device Detection (Desktop, Tablet, Phone,...)"
|
3458 |
msgstr ""
|
3459 |
"Detectado dispositivo del lado del cliente/servidor (escritorio, tableta, "
|
3460 |
"teléfono,...)"
|
3461 |
|
3462 |
+
#: settings.php:1263
|
3463 |
msgid "Devices"
|
3464 |
msgstr "Dispositivos"
|
3465 |
|
3466 |
+
#: settings.php:1264
|
3467 |
msgid ""
|
3468 |
"Check for user status, Limit insertions (error 404 page, Ajax requests, RSS "
|
3469 |
"feeds), Filter, Scheduling, General tag"
|
3471 |
"Comprueba el estado del usuario, limita las inserciones (página de error "
|
3472 |
"404, solicitudes Ajax, feeds RSS), filtro, programación, etiqueta general"
|
3473 |
|
3474 |
+
#: settings.php:1264
|
3475 |
msgid "Misc"
|
3476 |
msgstr "Varios"
|
3477 |
|
3478 |
+
#: settings.php:1265
|
3479 |
msgid "Preview code and alignment"
|
3480 |
msgstr "Código de vista previa y alineación"
|
3481 |
|
3482 |
+
#: settings.php:1268 settings.php:2486
|
3483 |
msgid ""
|
3484 |
"Rotation editor active - rotation code not generated! Make sure no rotation "
|
3485 |
"editor is active before saving settings."
|
3487 |
"Editor de rotación activo - ¡Código de rotación no generado! Asegúrate de "
|
3488 |
"que no hay ningún editor de rotación activo antes de guardar los ajustes."
|
3489 |
|
3490 |
+
#: settings.php:1281 settings.php:1282
|
3491 |
msgid "Enable insertion on posts"
|
3492 |
msgstr "Activar la inserción en las entradas"
|
3493 |
|
3494 |
+
#: settings.php:1282 settings.php:3777
|
3495 |
msgid "Posts"
|
3496 |
msgstr "Entradas"
|
3497 |
|
3498 |
+
#: settings.php:1286 settings.php:1287
|
3499 |
msgid ""
|
3500 |
"Enable insertion on homepage: latest posts (including on sub-pages), static "
|
3501 |
"page or theme homepage (available positions may depend on hooks used by the "
|
3505 |
"las subpáginas), la página estática o la página inicio del tema (las "
|
3506 |
"posiciones disponibles pueden depender de los ganchos utilizados por el tema)"
|
3507 |
|
3508 |
+
#: settings.php:1287 settings.php:3779
|
3509 |
msgid "Homepage"
|
3510 |
msgstr "Página de inicio"
|
3511 |
|
3512 |
+
#: settings.php:1291 settings.php:1292
|
3513 |
msgid "Enable insertion on category blog pages (including sub-pages)"
|
3514 |
msgstr ""
|
3515 |
"Activar la inserción en páginas de categoría del blog (incluidas las "
|
3516 |
"subpáginas)"
|
3517 |
|
3518 |
+
#: settings.php:1292 settings.php:3780
|
3519 |
msgid "Category pages"
|
3520 |
msgstr "Páginas de categoría"
|
3521 |
|
3522 |
+
#: settings.php:1302 settings.php:1303
|
3523 |
msgid "Enable insertion on static pages"
|
3524 |
msgstr "Activar la inserción en páginas estáticas"
|
3525 |
|
3526 |
+
#: settings.php:1303 settings.php:3778
|
3527 |
msgid "Static pages"
|
3528 |
msgstr "Páginas estáticas"
|
3529 |
|
3530 |
+
#: settings.php:1307 settings.php:1308
|
3531 |
msgid "Enable insertion on search blog pages"
|
3532 |
m
|