PageSourceSearch

https://travelbase.eu/app/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=497000

js travelbase.eu collected 2026-09-24 10:28:01 UTC 3,373 bytes, 124 lines download raw bytes

1/*globals icl_vars, wpml_xdomain_data */
2
3var WPMLCore = WPMLCore || {};
4
5WPMLCore.XdomainData = function() {
6	this.links = document.querySelectorAll('.' + wpml_xdomain_data.css_selector + ' a');
7
8	var self = this;
9
10	for(var i = 0; i < this.links.length; i++) {
11		this.links[i].addEventListener('click', function(e) {
12			var link = self.getClosestLink(e.target);
13			var currentUrl = window.location.href;
14			var targetUrl = link.getAttribute('href');
15
16			if ('#' !== targetUrl && currentUrl !== targetUrl) {
17				e.preventDefault();
18				self.onLinkClick(link);
19			}
20		});
21	}
22};
23
24WPMLCore.XdomainData.prototype = {
25	getClosestLink: function(maybeLink) {
26		var tagName = maybeLink.nodeName.toLowerCase();
27		if(tagName === 'a') {
28			return maybeLink;
29		}
30
31		return this.getClosestLink(maybeLink.parentNode);
32	},
33
34	onLinkClick: function(link) {
35		var self = this;
36		var originalUrl = link.getAttribute('href');
37		// Filter out xdomain_data if already in the url
38		originalUrl = originalUrl.replace(/&xdomain_data(=[^&]*)?(?=&|$)|xdomain_data(=[^&]*)?(&|$)/, '');
39		originalUrl = originalUrl.replace(/\?$/, '');
40
41		var data = {
42			action:        'switching_language',
43			from_language: wpml_xdomain_data.current_language,
44			_nonce:        wpml_xdomain_data._nonce,
45		};
46		var params = [];
47		for(var prop in data) {
48			if(typeof data[prop] !== 'undefined') {
49				params.push(encodeURIComponent(prop) + '=' + encodeURIComponent(data[prop]));
50			}
51		}
52		params = params.join('&', params);
53
54		/** @namespace icl_vars.current_language */
55		var req = new XMLHttpRequest();
56		req.open("POST", wpml_xdomain_data.ajax_url);
57		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
58		req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
59		req.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');
60
61		req.onload = function() {
62			const response = JSON.parse(req.response);
63			self.onSuccess(response, originalUrl);
64		};
65		req.onerror = function() {
66			location.href = originalUrl;
67		};
68
69		req.send(params);
70	},
71
72	onSuccess: function(response, originalUrl) {
73		var argsGlue;
74		var url;
75		var hash;
76		var urlSplit;
77		var xdomain;
78		var form;
79
80		if (response.data.xdomain_data) {
81			if (response.success) {
82				if ('post' === response.data.method) {
83
84					// POST
85					form = document.createElement('form');
86					form.setAttribute('method', 'post');
87					form.setAttribute('action', originalUrl);
88					xdomain = document.createElement('input');
89					xdomain.setAttribute('type', 'hidden');
90					xdomain.setAttribute('name', 'xdomain_data');
91					xdomain.setAttribute('value', response.data.xdomain_data);
92
93					form.appendChild(xdomain);
94					document.body.appendChild(form);
95
96					form.submit();
97
98				} else {
99					// GET
100					urlSplit = originalUrl.split('#');
101					hash = '';
102					if (1 < urlSplit.length) {
103						hash = '#' + urlSplit[1];
104					}
105					url = urlSplit[0];
106					if (url.indexOf('?') === -1) {argsGlue = '?';} else {argsGlue = '&';}
107					/** @namespace response.data.xdomain_data */
108					url = originalUrl + argsGlue + 'xdomain_data=' + response.data.xdomain_data + hash;
109					location.href = url;
110				}
111
112			} else {
113				url = originalUrl;
114				location.href = url;
115			}
116		} else {
117			location.href = originalUrl;
118		}
119	},
120};
121
122document.addEventListener('DOMContentLoaded', function() {
123	var xd = new WPMLCore.XdomainData();
124});

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.