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