PageSourceSearch

https://cdn4.hola.org/www/hola/pub/config.1.260.3.js?ver=1.260.3

js hola.org collected 2026-10-01 12:59:53 UTC 13,693 bytes, 404 lines download raw bytes

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.