PageSourceSearch

https://netlusa.com.br/wp-content/plugins/netlusa-comentarios-verificados/assets/netlusa-cv.js?ver=1.2.7

js netlusa.com.br collected 2026-09-25 00:44:00 UTC 6,406 bytes, 165 lines download raw bytes

1(function () {
2  'use strict';
3
4  function post(data) {
5    var body = new URLSearchParams(data);
6    return fetch(NetlusaCV.ajaxUrl, {
7      method: 'POST',
8      credentials: 'same-origin',
9      headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
10      body: body.toString()
11    }).then(function (response) {
12      return response.json().then(function (json) {
13        if (!response.ok || !json.success) {
14          var error = new Error(json && json.data && json.data.message ? json.data.message : 'Falha na solicitação.');
15          error.data = json && json.data ? json.data : {};
16          throw error;
17        }
18        return json.data;
19      });
20    });
21  }
22
23  function feedback(message, error) {
24    var el = document.querySelector('[data-netlusa-feedback]');
25    if (!el) return;
26    el.textContent = message || '';
27    el.classList.toggle('is-error', !!error);
28  }
29
30  function setupGoogleLogin() {
31    if (!window.google || !google.accounts || !google.accounts.id || !NetlusaCV.googleClientId) {
32      return;
33    }
34    google.accounts.id.initialize({
35      client_id: NetlusaCV.googleClientId,
36      callback: function (response) {
37        feedback('Confirmando sua conta...', false);
38        post({
39          action: 'netlusa_cv_google_login',
40          nonce: NetlusaCV.nonce,
41          credential: response.credential || ''
42        }).then(function () {
43          window.location.reload();
44        }).catch(function (error) {
45          feedback(error.message || NetlusaCV.loginError, true);
46        });
47      }
48    });
49    document.querySelectorAll('[data-netlusa-google-login]').forEach(function (holder) {
50      holder.innerHTML = '';
51      google.accounts.id.renderButton(holder, {theme: 'outline', size: 'large', text: 'continue_with', width: 280});
52    });
53  }
54
55  function claimSupporterIfAvailable() {
56    if (!NetlusaCV.loggedIn || !NetlusaCV.rrmBridge) return;
57    if (!window.isRRMMember && !document.documentElement.classList.contains('netlusa-rrm-member')) return;
58    var key = 'netlusa_cv_rrm_claimed';
59    var last = parseInt(sessionStorage.getItem(key) || '0', 10);
60    if (Date.now() - last < 3600000) return;
61    sessionStorage.setItem(key, String(Date.now()));
62    post({action: 'netlusa_cv_rrm_confirm', nonce: NetlusaCV.nonce}).then(function () {
63      if (!document.querySelector('.netlusa-cv-badge')) window.location.reload();
64    }).catch(function () {});
65  }
66
67  function updateCountdowns() {
68    document.querySelectorAll('[data-netlusa-countdown]').forEach(function (el) {
69      var target = parseInt(el.getAttribute('data-netlusa-countdown'), 10) * 1000;
70      var diff = Math.max(0, target - Date.now());
71      if (!diff) {
72        window.location.reload();
73        return;
74      }
75      var hours = Math.floor(diff / 3600000);
76      var minutes = Math.ceil((diff % 3600000) / 60000);
77      el.textContent = hours > 0 ? hours + 'h ' + String(minutes).padStart(2, '0') + 'min' : minutes + 'min';
78    });
79  }
80
81  function clearReactionFeedback(box) {
82    var holder = box.querySelector('[data-netlusa-reaction-feedback]');
83    if (!holder) return;
84    var message = holder.querySelector('[data-netlusa-reaction-message]');
85    var supportButton = holder.querySelector('[data-netlusa-reaction-support]');
86    var fallback = holder.querySelector('[data-netlusa-support-fallback]');
87    if (message) message.textContent = '';
88    if (supportButton) supportButton.hidden = true;
89    if (fallback) fallback.remove();
90    holder.classList.remove('is-visible');
91  }
92
93  function reactionFeedback(box, error) {
94    var holder = box.querySelector('[data-netlusa-reaction-feedback]');
95    if (!holder) return;
96    clearReactionFeedback(box);
97    var message = holder.querySelector('[data-netlusa-reaction-message]');
98    if (message) message.textContent = error.message || 'Não foi possível registrar a reação.';
99    holder.classList.add('is-visible');
100
101    var showSupport = !(error.data && error.data.showSupport === false);
102    var supportUrl = error.data && error.data.supportUrl ? error.data.supportUrl : NetlusaCV.supportUrl;
103    var supportButton = holder.querySelector('[data-netlusa-reaction-support]');
104    if (!showSupport) {
105      if (supportButton) supportButton.hidden = true;
106      return;
107    }
108    if (supportButton && NetlusaCV.rrmBridge) {
109      supportButton.hidden = false;
110    } else if (supportUrl) {
111      var link = document.createElement('a');
112      link.href = supportUrl;
113      link.setAttribute('data-netlusa-support-fallback', '');
114      link.textContent = ' Apoie o NETLUSA';
115      holder.appendChild(link);
116    }
117  }
118
119  document.addEventListener('click', function (event) {
120    var logoutButton = event.target.closest('[data-netlusa-logout]');
121    if (logoutButton) {
122      event.preventDefault();
123      logoutButton.disabled = true;
124      post({action: 'netlusa_cv_logout', nonce: NetlusaCV.nonce}).then(function () {
125        window.location.reload();
126      }).catch(function () {
127        logoutButton.disabled = false;
128      });
129      return;
130    }
131
132    var reactionButton = event.target.closest('[data-netlusa-react]');
133    if (reactionButton) {
134      event.preventDefault();
135      var box = reactionButton.closest('[data-netlusa-reaction-box]');
136      reactionButton.disabled = true;
137      clearReactionFeedback(box);
138      post({
139        action: 'netlusa_cv_react',
140        nonce: NetlusaCV.nonce,
141        commentId: reactionButton.getAttribute('data-comment-id')
142      }).then(function (data) {
143        reactionButton.classList.toggle('is-reacted', !!data.reacted);
144        reactionButton.setAttribute('aria-pressed', data.reacted ? 'true' : 'false');
145        var action = reactionButton.querySelector('[data-netlusa-reaction-action]');
146        var count = box.querySelector('[data-netlusa-reaction-count]');
147        if (action) action.textContent = data.reacted ? 'Curtido' : 'Curtir';
148        if (count) count.textContent = data.countLabel;
149      }).catch(function (error) {
150        reactionFeedback(box, error);
151      }).finally(function () {
152        reactionButton.disabled = false;
153      });
154    }
155  });
156
157  document.addEventListener('DOMContentLoaded', function () {
158    setupGoogleLogin();
159    updateCountdowns();
160    setInterval(updateCountdowns, 30000);
161    claimSupporterIfAvailable();
162    setTimeout(claimSupporterIfAvailable, 1200);
163    setTimeout(claimSupporterIfAvailable, 3000);
164  });
165}());

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.