PageSourceSearch

https://www.happinessplay.es/assets/analytics.js?v=20260918g

js happinessplay.es collected 2026-10-10 01:05:24 UTC 8,791 bytes, 155 lines download raw bytes

1/* Happiness Play: hechos del recorrido, nunca el contenido personal de la rueda. */
2(function (w, d) {
3  'use strict';
4  if (w.HPAnalytics) return;
5  var ID = 'G-6Z83LNJY0D';
6  var host = (w.location.hostname || '').toLowerCase();
7  var production = /^(www\.)?happinessplay\.(es|com|fr)$/.test(host);
8  var lang = /\.fr$/.test(host) ? 'fr' : /\.com$/.test(host) ? 'en' : 'es';
9  var path = w.location.pathname;
10  var stages = {'/registro-felicidad.html':'registration', '/acceso.html':'login',
11    '/rueda-de-la-vida.html':'wheel', '/que-quiero-en-mi-vida.html':'conditions',
12    '/que-quiero-cambiar.html':'changes', '/resumen.html':'summary',
13    '/informe-bienestar-personal.html':'report', '/mi-cuenta.html':'account',
14    '/evolucion.html':'evolution', '/mi-futuro.html':'future', '/embed/rueda.html':'embed',
15    '/tu-rueda-de-la-vida.html':'preview', '/your-wheel-of-life.html':'preview', '/votre-roue-de-la-vie.html':'preview'};
16  var stage = stages[path] || 'public';
17  var privatePage = ['wheel','conditions','changes','summary','report','account','evolution','future'].indexOf(stage) >= 0;
18  // De donde viene quien llega con `?desde=` (la rueda incrustada en un articulo o en otra web, y el
19  // alta o el acceso a los que manda): el nombre de la web o del articulo, nunca nada de la persona.
20  // Sin `desde` no se manda el parametro. En GA4 es la dimension de evento `hp_origen`.
21  var origin = '';
22  try { var od = new URL(w.location.href).searchParams.get('desde') || ''; if (/^[a-z0-9_-]{1,40}$/.test(od)) origin = od; } catch (_) {}
23  function common() {
24    var c = {hp_idioma:lang, hp_seccion:privatePage ? 'portal' : 'web', hp_paso:stage};
25    if (origin) c.hp_origen = origin;
26    return c;
27  }
28  var enabled = production && !/^(1|yes)$/i.test(String(w.navigator.doNotTrack || '')) && !w.navigator.globalPrivacyControl;
29  try {
30    if (new URL(w.location.href).searchParams.get('hp_qa') === '1') {
31      enabled = false; w.sessionStorage.setItem('hp_analytics_qa', '1');
32    }
33    if (w.sessionStorage.getItem('hp_analytics_qa') === '1') enabled = false;
34  } catch (_) {}
35  var started = false, once = {};
36  var events = ['sign_up','login','registration_start','registration_submit','registration_error',
37    'confirmation_resent','wheel_saved','condition_added','change_added','report_viewed',
38    'flow_error','cta_click','guide_completed','reseller_que_paga','se_da_de_alta_un_resellers','venta_realizada',
39    'wheel_drawn'];
40  var outcomes = ['ok','required_fields','terms_required','network','server','delivery_pending',
41    'already_registered','email_not_accepted','pending_confirmation','invalid_credentials'];
42  var targets = ['registration','login','wheel','conditions','changes','report','summary','home'];
43  w.dataLayer = w.dataLayer || [];
44  function gtag() { w.dataLayer.push(arguments); }
45  function cleanURL(value, campaigns) {
46    if (!value) return '';
47    try {
48      var u = new URL(value, w.location.origin);
49      if (!/^https?:$/.test(u.protocol)) return '';
50      var safePath = /[%@]/.test(u.pathname) ? '/' : u.pathname;
51      var safe = new URL(u.origin + safePath);
52      if (campaigns) ['utm_source','utm_medium','utm_campaign','utm_content'].forEach(function (key) {
53        var value = u.searchParams.get(key) || '';
54        if (/^[a-z][a-z0-9_-]{0,63}$/i.test(value)) safe.searchParams.set(key, value);
55      });
56      return safe.toString();
57    } catch (_) { return ''; }
58  }
59  function emit(name, params) {
60    try {
61      if (!enabled || !started || events.indexOf(name) < 0) return;
62      params = params || {};
63      var safe = common();
64      if (outcomes.indexOf(params.hp_resultado) >= 0) safe.hp_resultado = params.hp_resultado;
65      if (targets.indexOf(params.hp_destino) >= 0) safe.hp_destino = params.hp_destino;
66      if (params.method === 'email') safe.method = 'email';
67      gtag('event', name, safe);
68    } catch (_) { /* La analitica nunca impide usar el producto. */ }
69  }
70  function begin(user, resolvedLang) {
71    try {
72    if (user && user.is && Number(user.is.SUPERADMIN) === 1) enabled = false;
73    if (['es','en','fr'].indexOf(resolvedLang) >= 0) lang = resolvedLang;
74    if (!enabled || started) return;
75    started = true;
76    w.gtag = gtag;
77    gtag('js', new Date());
78    gtag('set', 'linker', {domains:['happinessplay.es','happinessplay.com','happinessplay.fr']});
79    var pagina = common();
80    pagina.page_location = cleanURL(w.location.href, !privatePage);
81    pagina.page_referrer = cleanURL(d.referrer || '', false);
82    pagina.page_title = 'Happiness Play | ' + stage;
83    var config = common();
84    config.send_page_view = false; config.allow_google_signals = false; config.allow_ad_personalization_signals = false;
85    config.page_location = pagina.page_location; config.page_referrer = pagina.page_referrer; config.page_title = pagina.page_title;
86    gtag('config', ID, config);
87    gtag('event', 'page_view', pagina);
88    var script = d.createElement('script');
89    script.async = true; script.src = 'https://www.googletagmanager.com/gtag/js?id=' + ID;
90    d.head.appendChild(script);
91    // El acceso navega inmediatamente. Se entrega en el destino autenticado,
92    // no en el documento que desaparece antes de cargar gtag. Solo una fecha,
93    // nunca un identificador de usuario; caduca a los cinco minutos.
94    if (privatePage && user && Number(user.logged) === 1) {
95      var pendingLogin = Number(w.sessionStorage.getItem('hp_analytics_login'));
96      w.sessionStorage.removeItem('hp_analytics_login');
97      if (pendingLogin > 0 && Date.now() - pendingLogin >= 0 && Date.now() - pendingLogin < 300000) {
98        emit('login', {method:'email',hp_resultado:'ok'});
99      }
100    }
101    } catch (_) { enabled = false; }
102  }
103  function result(operation, data) {
104    try {
105      if (!data || typeof data !== 'object' || (typeof data.errno !== 'number' && typeof data.errno !== 'string')) return;
106      var tracked = ['createuserstep1','dologin','createuserwheel','adduserfactor','adduserchange','setonboarding'];
107      if (tracked.indexOf(operation) < 0) return;
108      if (data.errno !== 0 && data.errno !== '0') {
109        var codes = {CONFIRMATION_DELIVERY_PENDING:'delivery_pending', EMAIL_ALREADY_REGISTERED:'already_registered',
110          EMAIL_NOT_ACCEPTED:'email_not_accepted', EMAIL_DOMAIN_UNKNOWN:'email_not_accepted', SIGNUP_FAILED:'server'};
111        emit(operation === 'createuserstep1' ? 'registration_error' : 'flow_error',
112          {hp_resultado:codes[data.code] || 'server'});
113        return;
114      }
115      if (operation === 'createuserstep1') {
116        if (data.code === 'ACCOUNT_CREATED' && Number(data.data) > 0) emit('sign_up', {method:'email',hp_resultado:'ok'});
117        else if (data.code === 'CONFIRMATION_RESENT') emit('confirmation_resent', {hp_resultado:'ok'});
118      } else if (operation === 'dologin') {
119        if (data.data && Number(data.data.logged) === 1) {
120          if (enabled) {
121            try { w.sessionStorage.setItem('hp_analytics_login', String(Date.now())); }
122            catch (_) { emit('login', {method:'email',hp_resultado:'ok'}); }
123          }
124        }
125        else emit('flow_error', {hp_resultado:data.data && Number(data.data.pendiente_confirmacion) === 1 ? 'pending_confirmation' : 'invalid_credentials'});
126      } else if (operation === 'createuserwheel') emit('wheel_saved', {hp_resultado:'ok'});
127      else if (operation === 'adduserfactor') emit('condition_added', {hp_resultado:'ok'});
128      else if (operation === 'adduserchange' && data.data && Number(data.data.id_usuario_cambio) > 0) emit('change_added', {hp_resultado:'ok'});
129    } catch (_) {}
130  }
131  w.HPAnalytics = {event:emit, result:result, ready:begin};
132  w.hpEvento = emit;
133  if (!privatePage) begin();
134  d.addEventListener('click', function (event) {
135    var link = event.target && event.target.closest && event.target.closest('a[href]');
136    if (!link) return;
137    try {
138      var u = new URL(link.href, w.location.origin);
139      if (!/^(www\.)?happinessplay\.(es|com|fr)$/.test(u.hostname)) return;
140      var target = stages[u.pathname] || (u.pathname === '/' ? 'home' : '');
141      if (targets.indexOf(target) >= 0) emit('cta_click', {hp_destino:target});
142    } catch (_) {}
143  }, true);
144  if (stage === 'registration') {
145    d.addEventListener('focusin', function (event) {
146      if (!once.registration && event.target && event.target.closest && event.target.closest('form')) {
147        once.registration = true; emit('registration_start');
148      }
149    }, true);
150    d.addEventListener('invalid', function () {
151      if (!once.invalid) { once.invalid = true; emit('registration_error', {hp_resultado:'required_fields'}); }
152    }, true);
153    d.addEventListener('submit', function () { once.invalid = false; emit('registration_submit'); }, true);
154  }
155})(window, document);

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.