1// LICENSE_CODE ZON 2'use strict'; /*jslint browser:true*/ 3// jshint ignore:start 4(function(){ 5// LICENSE_CODE ZON 6'use strict'; /*jslint browser:true*/ 7var inc_config = (function(){ 8var E = {}; 9// Web Workers have no window object 10var has_window = typeof window=='object'; 11var ua = /[( ]MSIE ([789]|10).\d[);]/.exec(navigator.userAgent||''); 12var default_callbacks = { 13 after_init: function(){ 14 define('virt_jquery_all', ['jquery', '/util/jquery_ajax_ie.js'], 15 function(j){ return j; }); 16 }, 17}; 18if (has_window) 19 window.hola_config = E; 20define('/www/util/pub/inc_config.js', E); 21function get_cookie(name){ 22 var match = document.cookie.match(new RegExp(name+'=([^;]*)')); 23 if (match && match[1]) 24 return match[1]; 25} 26E.get_config = function(params, callbacks){ 27 var _E = {config: config}; 28 if (Object.assign) 29 callbacks = Object.assign({}, default_callbacks, callbacks); 30 else 31 { 32 var _callbacks = {}; 33 for (var dprop in default_callbacks) 34 { 35 if (default_callbacks.hasOwnProperty(dprop)) 36 _callbacks[dprop] = default_callbacks[dprop]; 37 } 38 for (var prop in callbacks) 39 { 40 if (callbacks.hasOwnProperty(prop)) 41 _callbacks[prop] = callbacks[prop]; 42 } 43 callbacks = _callbacks; 44 } 45 for (var param in params) 46 _E.config[param] = params[param]; 47 var es6_require; 48 // jshint ignore:start 49 es6_require = ["regenerator-runtime"]; 50 // jshint ignore:end 51 _E.init = function(opt, dependencies, setup){ 52 opt = opt||{}; 53 if (_E.inited) 54 return void console.error('Config already initialized'); 55 _E.inited = true; 56 _E.ver = _E.config.ver = opt.ver; 57 _E.cdn_path = _E.config.cdn_path = opt.cdn_path; 58 if (callbacks.before_init) 59 callbacks.before_init(_E.config, opt); 60 require.config(_E.config); 61 if (callbacks.after_init) 62 callbacks.after_init(_E.config, opt);
63 require(['/util/es6_shim.js'], function(){ 64 es6_require = es6_require.filter(function(k){ 65 return _E.config.paths[k]; }); 66 if (Array.isArray(es6_require) && es6_require.length) 67 require(es6_require, function(){}); 68 if (Array.isArray(dependencies) && typeof setup=='function') 69 require(dependencies, setup); 70 }); 71 }; 72 _E.url2md5 = function(url){ 73 // jshint ignore:start 74 if (_E.config.paths && _E.config.paths[url]) 75 return _E.config.paths[url]; 76 77 return '//cdn4.hola.org'+url+'?ver=1.260.3'; 78 79 // jshint ignore:end 80 }; 81 _E.get_hola_extension_info = get_hola_extension_info; 82 _E.set_hola_extension_info = set_hola_extension_info; 83 _E.init_angular_config = function(mod){ 84 if (_E.inited_angular) 85 return; 86 mod.factory('$exceptionHandler', ['$log', function($log){ 87 var sent = []; 88 return function(err, cause){ 89 $log.error(err, cause); 90 var info = err.message+(cause ? '\n'+cause : ''); 91 if (err.name=='TypeError' && !sent.includes(info)) 92 { 93 sent.push(info); 94 E.perr({id: 'www_uncaught_error', info: info, 95 bt: err.stack}); 96 } 97 }; 98 }]); 99 // ie 9 and below do not support CORS 100 if (ua && ua.length && ua[1]<10) 101 return; 102 mod.factory('md5_cache_factory', function(){ 103 return { 104 request: function(config){ 105 config.url = _E.url2md5(config.url); 106 return config; 107 } 108 }; 109 }).config(['$httpProvider', function($httpProvider){ 110 $httpProvider.interceptors.push('md5_cache_factory'); 111 }]).directive('md5Src', function(){ 112 return { 113 restrict: 'A', priority: 99, 114 link: function(scope, element, attr){ 115 attr.$observe('md5Src', function(url){ 116 element.attr('src', _E.url2md5(url)); 117 }); 118 }, 119 }; 120 }); 121 _E.inited_angular = true; 122 }; 123 return _E; 124}; 125 126var config = { 127 baseUrl: '/', urlArgs: '', paths: {}, shim: {}, map: {}, 128 config: { 129 text: { 130 // requirejs text plugin will use <script> and not xhr when 131 // trying to load html from another domain. we force always 132 // to use xhr for loading html files 133 useXhr: function(url, protocol, hostname, port){ 134 return true; }, 135 createXhr: get_create_xhr(), 136 }, 137 }, 138}; 139var login_config = {url_prefix: ''}; 140if (has_window) 141 window.login_config = login_config; 142define('login_config', login_config); 143E.inject = function(static_conf, config, skip_cdn){ 144 var cmap = config.map = config.map||{}; 145 for (var key in static_conf) 146 { 147 var cfg = static_conf[key]; 148 if (cfg.map && !cmap[key]) 149 cmap[key] = cfg.map; 150 if (!config.paths[key]) 151 config.paths[key] = get_static_path(cfg, skip_cdn); 152 if (!config.shim[key] && cfg.shim) 153 config.shim[key] = cfg.shim; 154 } 155}; 156function get_static_path(data, skip_cdn){ 157 if (typeof data.file!='string') 158 throw '"local" should exist for alt_cdn cases'; 159 var cdn = data.link+data.remote; 160 if (cdn && !skip_cdn) 161 return [cdn, data.file]; 162 return data.file; 163} 164function get_create_xhr(){ 165 if (has_window && window.XDomainRequest && +ua[1]<10) 166 { 167 // IE doesn't support CORS, use XDomainRequest instead 168 return function(){ 169 var xdr = new window.XDomainRequest(); 170 xdr.onload = function(){ 171 xdr.readyState = 4; 172 xdr.status = 200; 173 if (xdr.onreadystatechange) 174 xdr.onreadystatechange(); 175 }; 176 xdr.onerror = function(){ 177 xdr.readyState = 4; 178 xdr.status = 500; 179 if (xdr.onreadystatechange) 180 xdr.onreadystatechange(); 181 }; 182 // request will be aborted if onprogress missing 183 xdr.onprogress = function(){}; 184 return xdr; 185 }; 186 } 187} 188function uri_comp(s){ 189 return encodeURIComponent(s).replace(/%20/g, '+'); } 190function qs(param, opt){ 191 var uri = ''; 192 if (!param) 193 return uri; 194 opt = opt||{}; 195 var _uri_comp = opt.space_plus ? uri_comp : encodeURIComponent; 196 for (var i in param) 197 { 198 var val = param[i]; 199 if (val===null||val===undefined) 200 continue; 201 uri += (!uri ? '' : '&')+_uri_comp(i)+'='+_uri_comp(val); 202 } 203 return uri; 204} 205function get_conf(){ 206 return has_window && window.conf || defaults.conf; } 207function raw_perr(opt){ 208 try { 209 var url = get_conf().url_perr+'/perr'; 210 var xhr = new XMLHttpRequest(); 211 xhr.open('POST', url+'?'+qs(opt, {space_plus: true})); 212 xhr.send(null); 213 } catch(e){ console.error('raw_perr failed '+e.stack); } 214}
215function get_hola_extension_info(){ 216 if (window.hola_extension_info) 217 return window.hola_extension_info; 218 try { 219 var a; 220 if (a = document.documentElement.getAttribute('hola_extension_info')) 221 return JSON.parse(a); 222 } catch(e){} 223} 224 225function set_hola_extension_info(data){ 226 if (data==null) 227 { 228 document.documentElement.removeAttribute('hola_extension_info'); 229 delete window.hola_extension_info; 230 return; 231 } 232 window.hola_extension_info = data; 233 try { 234 document.documentElement.setAttribute('hola_extension_info', 235 JSON.stringify(data||'')); 236 } catch(e){} 237} 238function perr_prepare(opt){ 239 var build = build_info(); 240 var query = {}; 241 try { 242 var search = window.location.search; 243 if (search) 244 search = search.slice(1); 245 var parts = search.split('&'); 246 for(var i=0; i < parts.length; i++) 247 { 248 var param = parts[i].split('='); 249 if (param[0]=='qid') 250 { 251 Object.assign(query, 252 JSON.parse(atob(decodeURIComponent(param[1])))); 253 } 254 else 255 query[param[0]] = param[1]; 256 } 257 } catch(err){} 258 /* XXX antonp: better to do deep copy of opt before changing it */ 259 try { 260 opt.uuid = opt.uuid || has_window && 261 ((get_hola_extension_info()||{}).uuid || 262 localStorage.getItem('uuid')) || query.uuid; 263 } catch(err){ console.error('perr failed '+err.stack); } 264 opt.cid = opt.cid || has_window && window.hola_svc_info && 265 window.hola_svc_info.cid; 266 opt.ver = build.version; 267 opt.browser = opt.browser||E.browser(); 268 opt.build = opt.build||build_str(); 269 if (!opt.info) 270 opt.info = {}; 271 if (query.ref) 272 opt.info.ref = query.ref; 273 opt.info = typeof opt.info=='object' ? JSON.stringify(opt.info) : opt.info; 274 return opt; 275} 276/* XXX antonp: sync pre_loader.js <-> util.js (need to rm code duplication) */ 277function build_info(){ 278 var zconf = has_window && window.zon_config || defaults.zon_config; 279 var hopt_version = window.hola_opt && window.hola_opt.version; 280 var info = {version: hopt_version || zconf.ZON_VERSION}; 281 info.makeflags = zconf.CONFIG_MAKEFLAGS; 282 if (chrome) 283 info.product_type = get_conf().type; 284 info.id = chrome ? chrome.runtime&&chrome.runtime.id : 285 'jid1-4P0kohSJxU1qGg@jetpack'; 286 info.browser = E.browser(); 287 info.browser_build = has_window && window.conf && window.conf.browser.name; 288 info.platform = navigator.platform; 289 info.user_agent = navigator.userAgent; 290 info.url = location.href; 291 info.referrer = document.referrer; 292 info.h_visitor_id = get_cookie('h_visitor_id'); 293 info.www_visitor_id = get_cookie('h_visitor_id'); 294 if (has_window && window.is_tpopup) 295 info.is_tpopup = window.is_tpopup; 296 return info; 297} 298/* XXX antonp: sync pre_loader.js <-> util.js (need to rm code duplication) */ 299function build_str(){ 300 var info = build_info(), s = ''; 301 for (var f in info) 302 s += (s ? '\n' : '')+f+': '+info[f]; 303 return s; 304} 305E.perr = function perr(opt){ 306 return raw_perr(perr_prepare(opt)); }; 307var chrome = has_window && window.chrome; 308var chrome_details = chrome && chrome.app && chrome.app.getDetails && 309 chrome.app.getDetails(); 310var perr_url = 'perr.hola.org'; 311var ccgi_url = 'client.hola.org'; 312var defaults = { 313 conf: {url_ccgi: 'https://'+ccgi_url+'/client_cgi', 314 url_perr: 'https://'+perr_url+'/client_cgi', type: 'unknown', 315 browser: {firefox: !chrome}}, 316 zon_config: {CONFIG_MAKEFLAGS: '', 317 ZON_VERSION: chrome_details ? chrome_details.version : '0.0.0'} 318}; 319/* XXX antonp: sync pre_loader.js <-> util.js (need to rm code duplication) */ 320var check_opera = /\bOPR\b\/(\d+)/i; 321E.browser = function(){ 322 var conf = get_conf(); 323 var ua = navigator.userAgent; 324 var opera = check_opera.exec(ua); 325 return conf.browser.firefox ? 'firefox' : 326 conf.browser.opera||(opera && !!opera[1]) ? 'opera' : 'chrome'; 327}; 328function get_host(s){ 329 if (typeof s!='string') 330 return; 331 var a = s.match(/\/\/([^\/]*)\//); 332 return a && a[1]; 333} 334function try_fallback(mods){ 335 var paths = require.s.contexts._.config.paths; 336 var new_paths = {}; 337 for (var i=0; i<mods.length; i++) 338 { 339 var m = mods[i], p = paths[m]; 340 p = Array.isArray(p) ? p[0] : p; 341 var host = get_host(p); 342 if (!host || host=='hola.org') // if already had a fallback 343 return false;
344 new_paths[m] = p.replace(host, 'hola.org'); 345 } 346 for (var key in new_paths) 347 require.undef(key); 348 require.config({paths: new_paths}); 349 require(mods, function(){}); 350 return true; 351} 352require.onError = function(err){ 353 var mods = err.requireModules||[], _mods = mods.join(' '); 354 var id = 'www_require_err'; 355 var paths = require.s.contexts._.config.paths, mods_paths = {}; 356 mods.forEach(function(m){ mods_paths[m] = paths[m]; }); 357 var fallback = err.fallback || try_fallback(mods); 358 if (!fallback) 359 id += '_fin'; 360 console.error('require fatal error, modules: '+_mods+'\n'+err.stack); 361 err.require_handled = true; 362 var perr_sent = require.perr_sent||(require.perr_sent = []); 363 // sent perr only once for each error 364 if (perr_sent.indexOf(id)<0) 365 { 366 var stack = err.stack; 367 delete err.stack; 368 var fh = mods.map(function(m){ return require.toUrl(m); }).join('\n'); 369 E.perr({id: id, info: {err: _mods||(''+err), location: location.href, 370 error: err, paths: mods_paths, fallback: fallback}, bt: stack, 371 filehead: fh}); 372 perr_sent.push(id); 373 } 374 if (!fallback) 375 throw err; 376}; 377return E; })(); 378 379// inc_config is var 380var E = inc_config.get_config({ 381 map: {}, 382 383 paths: {}, 384 385}, {}); 386E.perr_url = 'perr.hola.org'; 387E.ccgi_url = 'client.hola.org'; 388E.cdn_url = '//cdn4.hola.org'; 389E.backend_url = 'https://'+location.host; 390if (typeof window!='undefined') 391 window.pub_config = E; 392try { 393 var perr_id = location.pathname.slice(1).split('/').slice(0,3) 394 .filter(Boolean); 395 if (perr_id[0]=='access') 396 perr_id = [perr_id[0]]; 397 else if (!perr_id.length) 398 perr_id = ['homepage']; 399 perr_id = perr_id.join('_').toLowerCase().replace(/[^A-Za-z0-9_]/ig, '_'); 400 window.hola_config.perr({id: 'www_'+perr_id+'_loading', info: {}}); 401} catch(e){} 402return E; 403})(); 404// jshint ignore:end
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.