1// source --> https://hrtlesvos.com/wp-content/plugins/translatepress-business/add-ons-pro/automatic-language-detection/assets/js/trp-language-cookie.js?ver=1.0.9 2/** 3 * Sets proper language cookie 4 * 5 * Sends ajax request to get browser and IP language. 6 * Sets cookie with current language. 7 * Changes cookie when clicking a link pointed to another language. 8 * 9 */ 10function TRP_IN_Determine_Language(){ 11 var _this = this; 12 var trpCookie = null; 13 var trpHelper = null; 14 15 this.get_lang_from_url = function ( url ) { 16 // we remove http or https 17 // if the user links to a http link but the abs_home_url is https, we're serving the https one so we don't brake cookies if he doesn't have proper redirects 18 var lang = url.replace( /^(http|https):\/\//g, ''); 19 var abs_home = trp_language_cookie_data[ 'abs_home' ].replace( /^(http|https):\/\//g, ''); 20 21 // we have removed the home path from our URL. We're adding a / in case it's the homepage of one of the languages 22 // removing / from the front so it's easier for understanding explode() 23 lang = trpHelper.ltrim( trpHelper.trailingslashit( lang.replace(abs_home, '') ),'/' ); 24 25 // We now have to see if the first part of the string is actually a language slug 26 var lang_array = lang.split("/"); 27 if( lang_array.length < 2 ){ 28 return trp_language_cookie_data['default_language']; 29 } 30 // The language code is the first non-empty item in this array depending on abs_home slashes 31 for ( var i = 0; i < lang_array.length; i++ ){ 32 if ( lang_array[i] != undefined && lang_array[i] != '' ) { 33 lang = lang_array[i]; 34 break; 35 } 36 } 37 // the lang slug != actual lang. So we need to do array_search so we don't end up with en instead of en_US 38 if( trpHelper.in_array( lang, trp_language_cookie_data['url_slugs']) ){ 39 return trpHelper.array_search(lang, trp_language_cookie_data['url_slugs'] ); 40 } else { 41 return trp_language_cookie_data['default_language']; 42 } 43 44 }; 45 46 this.get_current_dom_language = function(){ 47 var html_language_document = document.getElementById("tp-language"); 48 var html_language; 49 if ( html_language_document ){ 50 if ( jQuery('#tp-language').attr('data-tp-language') ){ 51 html_language = jQuery( '#tp-language' ).attr( 'data-tp-language' ); 52 }else if (jQuery('#tp-language').attr('lang') ){ 53 html_language = jQuery( '#tp-language' ).attr( 'lang' ); 54 } 55 } else { 56 html_language = jQuery('html').attr('lang'); 57 html_language = html_language.split("-").join("_"); 58 } 59 60 if ( !trpHelper.in_array( html_language, trp_language_cookie_data['publish_languages'] ) ){ 61 html_language = "error_determining_language"; 62 } 63 64 return html_language; 65 }; 66 67 68 this.ajax_get_needed_language = function() { 69 jQuery.ajax({ 70 url: trp_language_cookie_data['trp_ald_ajax_url'], 71 type: 'post', 72 dataType: 'json', 73 data: { 74 action: 'trp_ald_get_needed_language', 75 detection_method: trp_language_cookie_data['detection_method'], 76 popup_option: trp_language_cookie_data['popup_option'], 77 popup_textarea: trp_language_cookie_data['popup_textarea'], 78 popup_type: trp_language_cookie_data['popup_type'], 79 popup_textarea_change_button: trp_language_cookie_data['popup_textarea_change_button'], 80 popup_textarea_close_button: trp_language_cookie_data['popup_textarea_close_button'], 81 publish_languages: trp_language_cookie_data['publish_languages'], 82 iso_codes: trp_language_cookie_data['iso_codes'], 83 english_name: trp_language_cookie_data['english_name'], 84 default_language: trp_language_cookie_data['default_language'] 85 }, 86 success: function( response ) { 87 if ( response ) { 88 _this.redirect_if_needed( response ); 89 }else{ 90 _this.redirect_if_needed( _this.get_current_dom_language() ); 91 } 92 93 }, 94 error: function( errorThrown ){ 95 // make current language the needed language 96 _this.redirect_if_needed( _this.get_current_dom_language() ); 97 } 98 }); 99 }; 100 101 this.activate_popup = function( response, url_to_redirect ){ 102 103 _this.make_ls_clickable(); 104 _this.ls_make_default_language_preselected( response ); 105 106 var text_popup = document.getElementById("trp_ald_popup_text"); 107 var popup = document.getElementById("trp_ald_modal_container"); 108 var close = document.getElementById("trp_ald_x_button"); 109 110 var popup_change_button = document.getElementById("trp_ald_popup_change_language"); 111 var popup_close_button_text = document.getElementById("trp_ald_x_button_textarea"); 112 var close_popup = document.getElementById("trp_ald_x_button_and_textarea"); 113 114 popup.style.display= 'block'; 115 116 var no_text_popup_select_current_language = document.getElementById('trp_ald_popup_current_language'); 117 118 var replace_suggested_language_text = trp_language_cookie_data['popup_textarea'].replace("{{suggested_language}}", trp_language_cookie_data['english_name'][response]); 119 120 text_popup.innerHTML = replace_suggested_language_text; 121 122 popup_change_button.innerHTML = trp_language_cookie_data['popup_textarea_change_button']; 123 124 popup_close_button_text.innerHTML = trp_language_cookie_data['popup_textarea_close_button']; 125 126 close.title = trp_language_cookie_data['popup_textarea_close_button']; 127 popup_close_button_text.title = trp_language_cookie_data['popup_textarea_close_button']; 128 129 close_popup.onclick = function(){ 130 popup.style.display = 'none';
131 trpCookie.setCookie( trp_language_cookie_data['cookie_name'], _this.get_current_dom_language(), trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path'] ); 132 133 } 134 135 _this.ls_select_language(); 136 137 popup_change_button.onclick = function(){ 138 var selected_language = no_text_popup_select_current_language.getAttribute('data-trp-ald-selected-language'); 139 trpCookie.setCookie( trp_language_cookie_data['cookie_name'], selected_language, trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path'] ); 140 141 142 } 143 144 } 145 146 this.activate_hello_bar = function (response, url_to_redirect){ 147 148 var no_text_popup = document.getElementById("trp_ald_no_text_popup_template"); 149 150 var clone = no_text_popup.content.cloneNode(true); 151 152 var close_button = clone.getElementById('trp_close'); 153 var no_text_popup_text = clone.getElementById('trp_ald_no_text_popup_text'); 154 155 var button_change_language_no_text_popup = clone.getElementById('trp_ald_no_text_popup_change_language'); 156 157 var no_text_popup_select_current_language = clone.getElementById('trp_ald_popup_current_language'); 158 var no_text_popup_x_textarea = clone.getElementById('trp_ald_no_text_popup_x_button_textarea'); 159 var no_text_popup_duplicate_x_button = clone.getElementById('trp_ald_no_text_popup_x_button'); 160 161 var div = document.createElement('div'); 162 163 var replace_suggested_language_text = trp_language_cookie_data['popup_textarea'].replace("{{suggested_language}}", trp_language_cookie_data['english_name'][response]); 164 165 no_text_popup_text.innerHTML = replace_suggested_language_text; 166 167 button_change_language_no_text_popup.innerHTML = trp_language_cookie_data['popup_textarea_change_button']; 168 169 170 button_change_language_no_text_popup.onclick = function() { 171 var selected_language = no_text_popup_select_current_language.getAttribute( 'data-trp-ald-selected-language' ); 172 trpCookie.setCookie( trp_language_cookie_data[ 'cookie_name' ], selected_language, trp_language_cookie_data[ 'cookie_age' ], trp_language_cookie_data[ 'cookie_path' ] ); 173 } 174 175 no_text_popup_x_textarea.innerHTML = trp_language_cookie_data['popup_textarea_close_button']; 176 177 no_text_popup_x_textarea.title = trp_language_cookie_data['popup_textarea_close_button']; 178 close_button.title = trp_language_cookie_data['popup_textarea_close_button']; 179 no_text_popup_duplicate_x_button.title = trp_language_cookie_data['popup_textarea_close_button']; 180 181 div.appendChild(clone); 182 //html.insertBefore(clone, html.firstChild); 183 184 document.body.insertAdjacentElement('afterbegin', div); 185 //document.body.appendChild(clone); 186 187 close_button.onclick = function (){ 188 trpCookie.setCookie( trp_language_cookie_data['cookie_name'], _this.get_current_dom_language(), trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path'] ); 189 document.body.removeChild(div); 190 } 191 192 no_text_popup_duplicate_x_button.onclick = function (){ 193 trpCookie.setCookie( trp_language_cookie_data['cookie_name'], _this.get_current_dom_language(), trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path'] ); 194 document.body.removeChild(div); 195 } 196 197 no_text_popup_x_textarea.onclick = function (){ 198 trpCookie.setCookie( trp_language_cookie_data['cookie_name'], _this.get_current_dom_language(), trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path'] ); 199 document.body.removeChild(div); 200 } 201 202 _this.make_ls_clickable(); 203 _this.ls_select_language(); 204 _this.ls_make_default_language_preselected( response ); 205 206 } 207 208 this.make_ls_clickable = function (){ 209 jQuery('.trp_ald_ls_container .trp-ls-shortcode-current-language').click(function () { 210 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-current-language' ).addClass('trp-ls-clicked');
211 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-language' ).addClass('trp-ls-clicked'); 212 }); 213 214 jQuery('.trp_ald_ls_container .trp-ls-shortcode-language').click(function () { 215 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-current-language' ).removeClass('trp-ls-clicked'); 216 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-language' ).removeClass('trp-ls-clicked'); 217 }); 218 219 220 jQuery(document).keyup(function(e) { 221 if (e.key === "Escape") { 222 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-current-language' ).removeClass('trp-ls-clicked'); 223 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-language' ).removeClass('trp-ls-clicked'); 224 } 225 }); 226 227 jQuery(document).on("click", function(event){ 228 if(!jQuery(event.target).closest(".trp_ald_ls_container .trp-ls-shortcode-current-language").length){ 229 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-current-language' ).removeClass('trp-ls-clicked'); 230 jQuery( '.trp_ald_ls_container .trp-ls-shortcode-language' ).removeClass('trp-ls-clicked'); 231 } 232 }); 233 } 234 235 this.ls_select_language = function(){ 236 237 // todo 238 var no_text_current_language = document.querySelector('.trp-ls-shortcode-current-language'); 239 var no_text_popup_select_current_language = document.querySelector('.trp-ls-shortcode-current-language'); 240 var popup_change_button = document.getElementById("trp_ald_popup_change_language"); 241 var button_change_language_no_text_popup = document.getElementById('trp_ald_no_text_popup_change_language'); 242 jQuery('.trp-ald-popup-select').click(function ( item ) { 243 no_text_current_language.innerHTML = item.target.innerHTML; 244 no_text_current_language.setAttribute('data-trp-ald-selected-language', item.target.getAttribute('data-trp-ald-selected-language')); 245 var selected_language = no_text_popup_select_current_language.getAttribute('data-trp-ald-selected-language'); 246 _this.set_language_href(selected_language,popup_change_button,button_change_language_no_text_popup); 247 }); 248 } 249 250 this.ls_make_default_language_preselected = function( response ){ 251 252 var no_text_current_language = document.querySelector('[special-selector = "trp_ald_popup_current_language"]'); 253 var all_languages = document.querySelectorAll('.trp_ald_ls_container .trp-ald-popup-select'); 254 var popup_change_button = document.getElementById("trp_ald_popup_change_language"); 255 var button_change_language_no_text_popup = document.getElementById('trp_ald_no_text_popup_change_language'); 256 for ( var i = 0; i< all_languages.length; i++){ 257 if (all_languages[i].id === response){ 258 no_text_current_language.innerHTML = all_languages[i].innerHTML; 259 no_text_current_language.setAttribute('data-trp-ald-selected-language', response); 260 no_text_current_language.setAttribute('id', response); 261 var selected_language = no_text_current_language.getAttribute('data-trp-ald-selected-language'); 262 _this.set_language_href(selected_language, popup_change_button, button_change_language_no_text_popup); 263 break; 264 } 265 } 266 } 267 268 this.set_language_href = function ( selected_language, popup_change_button, button_change_language_no_text_popup ){ 269 if( popup_change_button !== null ){ 270 popup_change_button.href = _this.get_url_for_lang(selected_language); 271 } 272 if( button_change_language_no_text_popup !== null ){ 273 button_change_language_no_text_popup.href = _this.get_url_for_lang(selected_language); 274 } 275 } 276 277 this.get_url_for_lang = function( language ){ 278 279 for( i in trp_language_cookie_data['language_urls'] ){ 280 if( i === language ) { 281 return trp_language_cookie_data['language_urls'][i]; 282 } 283 } 284 return false; 285 }; 286 287 this.is_valid_url = function ( url ) { 288 if ( typeof url === 'undefined' || url === '' ){ 289 return false;
290 } 291 var starting_characters = ['#','?', 'javascript']; 292 for (var i = 0; i < starting_characters.length; i++ ){ 293 if ( url.substring(0, starting_characters[i].length) === starting_characters[i]){ 294 return false; 295 } 296 } 297 return true; 298 }; 299 300 this.replace_underscore_with_dash = function (var_replace){ 301 var_replace = var_replace.toLowerCase(); 302 var_replace = var_replace.split("_").join("-"); 303 304 return var_replace; 305 } 306 307 this.is_same_language_code = function (var1, var2){ 308 var1 = _this.replace_underscore_with_dash(var1); 309 var2 = _this.replace_underscore_with_dash(var2); 310 311 if( var1 == var2 || var1 == "error_determining_language" || var2 == "error_determining_language" ){ 312 return true; 313 } 314 return false; 315 } 316 317 this.is_login_url = function( url ){ 318 if( url.includes( "wp-login.php" )){ 319 return true; 320 } 321 return false; 322 } 323 324 this.add_event_handlers = function(){ 325 jQuery('body').on('click', 'a', function(e) { 326 327 var clicked_url = jQuery(this).attr("href"); 328 if ( _this.is_valid_url( clicked_url ) && !_this.is_login_url( clicked_url )) { 329 var clicked_language = _this.get_lang_from_url(clicked_url); 330 var trp_current_language = trpCookie.getCookie(trp_language_cookie_data['cookie_name']); 331 332 if (!(_this.is_same_language_code(trp_current_language, clicked_language))) { 333 trpCookie.setCookie(trp_language_cookie_data['cookie_name'], clicked_language, trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path']); 334 } 335 } 336 }); 337 }; 338 339 this.redirect_if_needed = function( needed_language ){ 340 trpCookie.setCookie( trp_language_cookie_data['cookie_name'], needed_language, trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path'] ); 341 _this.add_event_handlers(); 342 343 if (!(_this.is_same_language_code(_this.get_current_dom_language(), needed_language))){ 344 url_to_redirect = _this.get_url_for_lang( needed_language ); 345 346 if(url_to_redirect != 'undefined' && url_to_redirect!= false) { 347 // redirect to needed language 348 if(trp_language_cookie_data['popup_type'] == 'normal_popup' && trp_language_cookie_data['popup_option'] == 'popup'){ 349 _this.activate_popup( needed_language, url_to_redirect ); 350 }else{ 351 if(trp_language_cookie_data['popup_type'] == 'hello_bar' && trp_language_cookie_data['popup_option'] == 'popup'){ 352 _this.activate_hello_bar(needed_language, url_to_redirect); 353 }else { 354 window.location.replace( url_to_redirect ); 355 } 356 } 357 } 358 } 359 }; 360 361 this.initialize = function (){ 362 trpCookie = new TRP_IN_Cookie(); 363 trpHelper = new TRP_IN_Helper(); 364 if ( ! trpCookie.areCookiesEnabled() ){ 365 _this.add_event_handlers(); 366 return; 367 } 368 369 var language_from_cookie = trpCookie.getCookie( trp_language_cookie_data['cookie_name'] ); 370 if ( language_from_cookie && trpHelper.in_array( language_from_cookie, trp_language_cookie_data['publish_languages'] ) ) { 371 // if cookie is set, redirect if needed 372 _this.redirect_if_needed( language_from_cookie ); 373 }else{ 374 // if cookie is not set, send request to find out language and then redirect if needed 375 _this.ajax_get_needed_language(); 376 } 377 }; 378 379 _this.initialize(); 380} 381 382/** 383 * String manipulation functions 384 */ 385function TRP_IN_Helper(){ 386 387 this.trailingslashit = function ( string ){ 388 string = string.replace(/\/+$/,''); 389 string = string + '/'; 390 return string; 391 }; 392 393 this.ltrim = function ( string ) { 394 var trimmed = string.replace(/^\s+/g, ''); 395 return trimmed; 396 }; 397 398 this.in_array = function (needle, haystack) { 399 for(var i in haystack ) { 400 if(haystack[i] == needle) { 401 return true; 402 } 403 } 404 return false;
405 }; 406 407 this.array_search = function(val, array) { 408 if(typeof(array) === 'array' || typeof(array) === 'object') { 409 var rekey; 410 for(var i in array) { 411 if(array[i] == val) { 412 rekey = i; 413 break; 414 } 415 } 416 return rekey; 417 } 418 }; 419 420 /** 421 * Update url with query string. 422 * 423 */ 424 this.update_query_string = function(key, value, url) { 425 if (!url) url = window.location.href; 426 var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"), 427 hash; 428 429 if (re.test(url)) { 430 if (typeof value !== 'undefined' && value !== null) 431 return url.replace(re, '$1' + key + "=" + value + '$2$3'); 432 else { 433 hash = url.split('#'); 434 url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, ''); 435 if (typeof hash[1] !== 'undefined' && hash[1] !== null) 436 url += '#' + hash[1]; 437 return url; 438 } 439 } 440 else { 441 if (typeof value !== 'undefined' && value !== null ) { 442 var separator = url.indexOf('?') !== -1 ? '&' : '?'; 443 hash = url.split('#'); 444 url = hash[0] + separator + key + '=' + value; 445 if (typeof hash[1] !== 'undefined' && hash[1] !== null) 446 url += '#' + hash[1]; 447 return url; 448 } 449 else 450 return url; 451 } 452 }; 453} 454 455/** 456 * Manipulate cookie: set/get/erase 457 */ 458function TRP_IN_Cookie() { 459 this.setCookie = function(cname,cvalue,exdays,cpath){ 460 var d = new Date(); 461 d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 462 var expires = "expires="+d.toUTCString(); 463 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=" + cpath + ";SameSite=Lax"; 464 }; 465 466 this.getCookie = function(cname) { 467 var name = cname + "="; 468 var ca = document.cookie.split(';'); 469 for(var i = 0; i < ca.length; i++) { 470 var c = ca[i]; 471 while (c.charAt(0) == ' ') { 472 c = c.substring(1); 473 } 474 if (c.indexOf(name) == 0) { 475 return c.substring(name.length, c.length); 476 } 477 } 478 return ""; 479 }; 480 481 this.eraseCookie = function(name) { 482 document.cookie = name+'=; Max-Age=-99999999;'; 483 }; 484 485 this.areCookiesEnabled = function(){ 486 if (navigator.cookieEnabled) return true; 487 488 // set and read cookie 489 document.cookie = "cookietest=1"; 490 var ret = document.cookie.indexOf("cookietest=") != -1; 491 492 // delete cookie 493 document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT"; 494 495 return ret; 496 } 497} 498 499 500jQuery( function() { 501 trpDetermineLanguage = new TRP_IN_Determine_Language(); 502});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.