PageSourceSearch

https://www.fbcv.es/wp-content/plugins/translatepress-business/add…/assets/js/trp-language-cookie.js?ver=1.1.1

js fbcv.es collected 2026-09-24 17:49:46 UTC 22,110 bytes, 521 lines download raw bytes

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.