1/*globals wpml_browser_redirect_params, jQuery, ajaxurl, window */ 2 3/** @namespace wpml_browser_redirect_params.pageLanguage */ 4/** @namespace wpml_browser_redirect_params.expiration */ 5/** @namespace wpml_browser_redirect_params.languageUrls */ 6/** @namespace navigator.browserLanguage */ 7 8var WPMLBrowserRedirect = function () { 9 "use strict"; 10 11 var self = this; 12 13 self.getExpirationDate = function () { 14 var date = new Date(); 15 var currentTime = date.getTime(); 16 date.setTime(currentTime + (wpml_browser_redirect_params.cookie.expiration * 60 * 60 * 1000)); 17 return date; 18 }; 19 20 self.getRedirectUrl = function (browserLanguage) { 21 var redirectUrl = false; 22 var languageUrls = wpml_browser_redirect_params.languageUrls; 23 var languageFirstPart = browserLanguage.substr(0, 2); 24 var languageLastPart = browserLanguage.substr(3, 2); 25 26 if (languageUrls[browserLanguage] === undefined) { 27 if (languageUrls[languageLastPart] !== undefined) { 28 redirectUrl = languageUrls[languageLastPart]; 29 } else if (languageUrls[languageFirstPart] !== undefined) { 30 redirectUrl = languageUrls[languageFirstPart]; 31 } 32 } else { 33 redirectUrl = languageUrls[browserLanguage]; 34 } 35 if ( window.location.href === redirectUrl ) { 36 return false; 37 } else { 38 return redirectUrl; 39 } 40 }; 41 42 self.init = function () { 43 44 if (self.cookiesAreEnabled() && !self.cookieExists()) { 45 self.getBrowserLanguage(function (browserLanguages) { 46 var redirectUrl; 47 var pageLanguage; 48 var browserLanguage; 49 50 pageLanguage = wpml_browser_redirect_params.pageLanguage.toLowerCase(); 51 52 var browserLanguagesLength = browserLanguages.length; 53 for (var i = 0; i < browserLanguagesLength; i++) { 54 browserLanguage = browserLanguages[i]; 55 56 if ( pageLanguage === browserLanguage || self.referrerBelongsToSiteURLs()) { 57 self.setCookie(browserLanguage); 58 break; 59 } else { 60 redirectUrl = self.getRedirectUrl(browserLanguage); 61 if (false !== redirectUrl) { 62 self.setCookie(browserLanguage); 63 window.location = redirectUrl; 64 break; 65 } 66 } 67 } 68 69 }); 70 } 71 }; 72 73 self.cookieExists = function () { 74 var cookieParams = wpml_browser_redirect_params.cookie; 75 var cookieName = cookieParams.name; 76 return jQuery.cookie(cookieName); 77 }; 78 79 self.referrerBelongsToSiteURLs = function () { 80 for(var languageCode in wpml_browser_redirect_params.languageUrls) { 81 if ( document.referrer === wpml_browser_redirect_params.languageUrls[languageCode]) { 82 return true; 83 } 84 } 85 return false; 86 }; 87 88 self.setCookie = function (browserLanguage) { 89 var cookieOptions; 90 var cookieParams = wpml_browser_redirect_params.cookie; 91 var cookieName = cookieParams.name; 92 var path = '/'; 93 var domain = ''; 94 95 if (cookieParams.path) { 96 path = cookieParams.path; 97 } 98 99 if (cookieParams.domain) { 100 domain = cookieParams.domain; 101 } 102 103 cookieOptions = { 104 expires: self.getExpirationDate(), 105 path: path, 106 domain: domain 107 }; 108 jQuery.cookie(cookieName, browserLanguage, cookieOptions); 109 }; 110 111 self.getBrowserLanguage = function (success) { 112 var browserLanguages = []; 113 114 if (navigator.languages) { 115 browserLanguages = navigator.languages; 116 } 117 if (0 === browserLanguages.length && (navigator.language || navigator.userLanguage)) { 118 browserLanguages.push(navigator.language || navigator.userLanguage); 119 } 120 if (0 === browserLanguages.length && (navigator.browserLanguage || navigator.systemLanguage)) { 121 browserLanguages.push(navigator.browserLanguage || navigator.systemLanguage); 122 } 123 124 if (0 === browserLanguages.length) { 125 jQuery.ajax({ 126 data: { 127 icl_ajx_action: 'get_browser_language' 128 }, 129 success: function (response) { 130 if (response.success) { 131 browserLanguages = response.data; 132 if (success && "function" === typeof success) { 133 browserLanguages = browserLanguages.join('|').toLowerCase().split('|'); 134 success(browserLanguages); 135 } 136 } 137 } 138 }); 139 } else { 140 browserLanguages = browserLanguages.join('|').toLowerCase().split('|'); 141 success(browserLanguages); 142 } 143 }; 144 145 self.cookiesAreEnabled = function () { 146 var result = (undefined !== jQuery.cookie); 147 if (result) { 148 jQuery.cookie('wpml_browser_redirect_test', 1); 149 result = '1' === jQuery.cookie('wpml_browser_redirect_test'); 150 jQuery.cookie('wpml_browser_redirect_test', 0); 151 } 152 return result; 153 }; 154}; 155 156jQuery(document).ready(function () { 157 "use strict"; 158 159 var wpmlBrowserRedirect = new WPMLBrowserRedirect(); 160 wpmlBrowserRedirect.init(); 161
vendor: 3 bytes, line 162
162});
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.