1/** 2 * Sets proper language cookie 3 * 4 * Sends ajax request to get browser and IP language. 5 * Sets cookie with current language. 6 * Changes cookie when clicking a link pointed to another language. 7 * 8 */ 9function TRP_IN_Determine_Language(){ 10 var _this = this; 11 var trpCookie = null; 12 var trpHelper = null; 13 14 this.get_lang_from_url = function ( url ) { 15 // we remove http or https 16 // 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 17 var lang = url.replace( /^(http|https):\/\//g, ''); 18 var abs_home = trp_language_cookie_data[ 'abs_home' ].replace( /^(http|https):\/\//g, ''); 19 20 // we have removed the home path from our URL. We're adding a / in case it's the homepage of one of the languages 21 // removing / from the front so it's easier for understanding explode() 22 lang = trpHelper.ltrim( trpHelper.trailingslashit( lang.replace(abs_home, '') ),'/' ); 23 24 // We now have to see if the first part of the string is actually a language slug 25 var lang_array = lang.split("/"); 26 if( lang_array.length < 2 ){ 27 return trp_language_cookie_data['default_language']; 28 } 29 // The language code is the first non-empty item in this array depending on abs_home slashes 30 for ( var i = 0; i < lang_array.length; i++ ){ 31 if ( lang_array[i] != undefined && lang_array[i] != '' ) { 32 lang = lang_array[i]; 33 break; 34 } 35 } 36 // the lang slug != actual lang. So we need to do array_search so we don't end up with en instead of en_US 37 if( trpHelper.in_array( lang, trp_language_cookie_data['url_slugs']) ){ 38 return trpHelper.array_search(lang, trp_language_cookie_data['url_slugs'] ); 39 } else { 40 return trp_language_cookie_data['default_language']; 41 } 42 43 }; 44 45 this.get_current_dom_language = function(){ 46 var html_language_document = document.getElementById("tp-language"); 47 var html_language; 48 if ( html_language_document ){ 49 if ( jQuery('#tp-language').attr('data-tp-language') ){ 50 html_language = jQuery( '#tp-language' ).attr( 'data-tp-language' ); 51 }else if (jQuery('#tp-language').attr('lang') ){ 52 html_language = jQuery( '#tp-language' ).attr( 'lang' ); 53 } 54 } else { 55 html_language = jQuery('html').attr('lang'); 56 html_language = html_language.split("-").join("_"); 57 } 58 59 if ( !trpHelper.in_array( html_language, trp_language_cookie_data['publish_languages'] ) ){ 60 html_language = "error_determining_language"; 61 } 62 63 return html_language; 64 }; 65 66 67 this.ajax_get_needed_language = function() { 68 jQuery.ajax({ 69 url: trp_language_cookie_data['trp_ald_ajax_url'], 70 type: 'post', 71 dataType: 'json', 72 data: { 73 action: 'trp_ald_get_needed_language', 74 detection_method: trp_language_cookie_data['detection_method'], 75 popup_option: trp_language_cookie_data['popup_option'], 76 popup_textarea: trp_language_cookie_data['popup_textarea'], 77 popup_type: trp_language_cookie_data['popup_type'], 78 popup_textarea_change_button: trp_language_cookie_data['popup_textarea_change_button'], 79 popup_textarea_close_button: trp_language_cookie_data['popup_textarea_close_button'], 80 publish_languages: trp_language_cookie_data['publish_languages'], 81 iso_codes: trp_language_cookie_data['iso_codes'], 82 english_name: trp_language_cookie_data['english_name'], 83 default_language: trp_language_cookie_data['default_language'], 84 is_iphone_user_check: trp_language_cookie_data['is_iphone_user_check'] 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 var no_text_current_language = document.querySelector('.trp_ald_ls_container .trp-ls-shortcode-current-language'); 238 var no_text_popup_select_current_language = document.querySelector('.trp_ald_ls_container .trp-ls-shortcode-current-language'); 239 var popup_change_button = document.getElementById("trp_ald_popup_change_language"); 240 var button_change_language_no_text_popup = document.getElementById('trp_ald_no_text_popup_change_language'); 241 jQuery('.trp-ald-popup-select').click(function ( item ) { 242 no_text_current_language.innerHTML = item.target.innerHTML; 243 no_text_current_language.setAttribute('data-trp-ald-selected-language', item.target.getAttribute('data-trp-ald-selected-language')); 244 var selected_language = no_text_popup_select_current_language.getAttribute('data-trp-ald-selected-language'); 245 _this.set_language_href(selected_language,popup_change_button,button_change_language_no_text_popup); 246 }); 247 } 248 249 this.ls_make_default_language_preselected = function( response ){ 250 251 var no_text_current_language = document.querySelector('[special-selector = "trp_ald_popup_current_language"]'); 252 var all_languages = document.querySelectorAll('.trp_ald_ls_container .trp-ald-popup-select'); 253 var popup_change_button = document.getElementById("trp_ald_popup_change_language"); 254 var button_change_language_no_text_popup = document.getElementById('trp_ald_no_text_popup_change_language'); 255 for ( var i = 0; i< all_languages.length; i++){ 256 if (all_languages[i].id === response){ 257 no_text_current_language.innerHTML = all_languages[i].innerHTML; 258 no_text_current_language.setAttribute('data-trp-ald-selected-language', response); 259 no_text_current_language.setAttribute('id', response); 260 var selected_language = no_text_current_language.getAttribute('data-trp-ald-selected-language'); 261 _this.set_language_href(selected_language, popup_change_button, button_change_language_no_text_popup); 262 break; 263 } 264 } 265 } 266 267 this.set_language_href = function ( selected_language, popup_change_button, button_change_language_no_text_popup ){ 268 if( popup_change_button !== null ){ 269 popup_change_button.href = _this.get_url_for_lang(selected_language); 270 } 271 if( button_change_language_no_text_popup !== null ){ 272 button_change_language_no_text_popup.href = _this.get_url_for_lang(selected_language); 273 } 274 } 275 276 this.decode_HTML_entities = function(str) { 277 let txt = new DOMParser().parseFromString(str, "text/html"); 278 return txt.documentElement.textContent; 279 } 280 281 this.get_url_for_lang = function( language ){ 282 283 for( i in trp_language_cookie_data['language_urls'] ){ 284 if( i === language ) { 285 let url_for_language = _this.decode_HTML_entities(trp_language_cookie_data['language_urls'][i]); 286 287 return url_for_language; 288 } 289 } 290 return false;
291 }; 292 293 this.is_valid_url = function ( url ) { 294 if ( typeof url === 'undefined' || url === '' ){ 295 return false; 296 } 297 var starting_characters = ['#','?', 'javascript']; 298 for (var i = 0; i < starting_characters.length; i++ ){ 299 if ( url.substring(0, starting_characters[i].length) === starting_characters[i]){ 300 return false; 301 } 302 } 303 return true; 304 }; 305 306 this.replace_underscore_with_dash = function (var_replace){ 307 var_replace = var_replace.toLowerCase(); 308 var_replace = var_replace.split("_").join("-"); 309 310 return var_replace; 311 } 312 313 this.is_same_language_code = function (var1, var2){ 314 var1 = _this.replace_underscore_with_dash(var1); 315 var2 = _this.replace_underscore_with_dash(var2); 316 317 if( var1 == var2 || var1 == "error_determining_language" || var2 == "error_determining_language" ){ 318 return true; 319 } 320 return false; 321 } 322 323 this.is_login_url = function( url ){ 324 if( url.includes( "wp-login.php" )){ 325 return true; 326 } 327 return false; 328 } 329 330 this.add_event_handlers = function(){ 331 jQuery('body').on('click', 'a', function(e) { 332 333 var clicked_url = jQuery(this).attr("href"); 334 if ( _this.is_valid_url( clicked_url ) && !_this.is_login_url( clicked_url )) { 335 var clicked_language = _this.get_lang_from_url(clicked_url); 336 var trp_current_language = trpCookie.getCookie(trp_language_cookie_data['cookie_name']); 337 338 if (!(_this.is_same_language_code(trp_current_language, clicked_language))) { 339 trpCookie.setCookie(trp_language_cookie_data['cookie_name'], clicked_language, trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path']); 340 } 341 } 342 }); 343 }; 344 345 this.check_if_iphone_user = function (){ 346 347 if( trp_language_cookie_data['is_iphone_user_check'] == false ){ 348 return false; 349 }else{ 350 if( /iPhone/g.test(navigator.userAgent) ){ 351 return true; 352 }else{ 353 return false; 354 } 355 } 356 }; 357 358 this.redirect_if_needed = function( needed_language ){ 359 trpCookie.setCookie( trp_language_cookie_data['cookie_name'], needed_language, trp_language_cookie_data['cookie_age'], trp_language_cookie_data['cookie_path'] ); 360 _this.add_event_handlers(); 361 362 if (!(_this.is_same_language_code(_this.get_current_dom_language(), needed_language)) && _this.check_if_iphone_user() == false ){ 363 url_to_redirect = _this.get_url_for_lang( needed_language ); 364 365 if(url_to_redirect != 'undefined' && url_to_redirect!= false ) { 366 // redirect to needed language 367 if(trp_language_cookie_data['popup_type'] == 'normal_popup' && trp_language_cookie_data['popup_option'] == 'popup'){ 368 _this.activate_popup( needed_language, url_to_redirect ); 369 }else{ 370 if(trp_language_cookie_data['popup_type'] == 'hello_bar' && trp_language_cookie_data['popup_option'] == 'popup'){ 371 _this.activate_hello_bar(needed_language, url_to_redirect); 372 }else { 373 window.location.replace( url_to_redirect ); 374 } 375 } 376 } 377 } 378 }; 379 380 this.initialize = function (){ 381 trpCookie = new TRP_IN_Cookie(); 382 trpHelper = new TRP_IN_Helper(); 383 if ( ! trpCookie.areCookiesEnabled() ){ 384 _this.add_event_handlers(); 385 return; 386 } 387 388 var language_from_cookie = trpCookie.getCookie( trp_language_cookie_data['cookie_name'] ); 389 if ( language_from_cookie && trpHelper.in_array( language_from_cookie, trp_language_cookie_data['publish_languages'] ) ) { 390 // if cookie is set, redirect if needed 391 _this.redirect_if_needed( language_from_cookie ); 392 }else{ 393 // if cookie is not set, send request to find out language and then redirect if needed 394 _this.ajax_get_needed_language(); 395 } 396 }; 397 398 _this.initialize(); 399} 400 401/** 402 * String manipulation functions 403 */ 404function TRP_IN_Helper(){ 405 406 this.trailingslashit = function ( string ){
407 string = string.replace(/\/+$/,''); 408 string = string + '/'; 409 return string; 410 }; 411 412 this.ltrim = function ( string ) { 413 var trimmed = string.replace(/^\s+/g, ''); 414 return trimmed; 415 }; 416 417 this.in_array = function (needle, haystack) { 418 for(var i in haystack ) { 419 if(haystack[i] == needle) { 420 return true; 421 } 422 } 423 return false; 424 }; 425 426 this.array_search = function(val, array) { 427 if(typeof(array) === 'array' || typeof(array) === 'object') { 428 var rekey; 429 for(var i in array) { 430 if(array[i] == val) { 431 rekey = i; 432 break; 433 } 434 } 435 return rekey; 436 } 437 }; 438 439 /** 440 * Update url with query string. 441 * 442 */ 443 this.update_query_string = function(key, value, url) { 444 if (!url) url = window.location.href; 445 var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"), 446 hash; 447 448 if (re.test(url)) { 449 if (typeof value !== 'undefined' && value !== null) 450 return url.replace(re, '$1' + key + "=" + value + '$2$3'); 451 else { 452 hash = url.split('#'); 453 url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, ''); 454 if (typeof hash[1] !== 'undefined' && hash[1] !== null) 455 url += '#' + hash[1]; 456 return url; 457 } 458 } 459 else { 460 if (typeof value !== 'undefined' && value !== null ) { 461 var separator = url.indexOf('?') !== -1 ? '&' : '?'; 462 hash = url.split('#'); 463 url = hash[0] + separator + key + '=' + value; 464 if (typeof hash[1] !== 'undefined' && hash[1] !== null) 465 url += '#' + hash[1]; 466 return url; 467 } 468 else 469 return url; 470 } 471 }; 472} 473 474/** 475 * Manipulate cookie: set/get/erase 476 */ 477function TRP_IN_Cookie() { 478 this.setCookie = function(cname,cvalue,exdays,cpath){ 479 var d = new Date(); 480 d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 481 var expires = "expires="+d.toUTCString(); 482 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=" + cpath + ";SameSite=Lax"; 483 }; 484 485 this.getCookie = function(cname) { 486 var name = cname + "="; 487 var ca = document.cookie.split(';'); 488 for(var i = 0; i < ca.length; i++) { 489 var c = ca[i]; 490 while (c.charAt(0) == ' ') { 491 c = c.substring(1); 492 } 493 if (c.indexOf(name) == 0) { 494 return c.substring(name.length, c.length); 495 } 496 } 497 return ""; 498 }; 499 500 this.eraseCookie = function(name) { 501 document.cookie = name+'=; Max-Age=-99999999;'; 502 }; 503 504 this.areCookiesEnabled = function(){ 505 if (navigator.cookieEnabled) return true; 506 507 // set and read cookie 508 document.cookie = "cookietest=1"; 509 var ret = document.cookie.indexOf("cookietest=") != -1; 510 511 // delete cookie 512 document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT"; 513 514 return ret; 515 } 516} 517 518 519jQuery( function() { 520 trpDetermineLanguage = new TRP_IN_Determine_Language(); 521});
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.