PageSourceSearch

https://uisek.edu.ec/wp-content/plugins/super-progressive-web-apps/public/js/register-sw.js?ver=2.2.39

js uisek.edu.ec collected 2026-09-24 10:10:39 UTC 34,401 bytes, 869 lines download raw bytes

1if ('serviceWorker' in navigator) {
2	window.addEventListener('load', function() {
3	  navigator.serviceWorker.register(superpwa_sw.url)
4	  .then(function(registration) { console.log('SuperPWA service worker ready'); 
5		  if(registration.active)
6		  {
7			  registration.update(); 
8		  }
9		  if(typeof firebase !='undefined' && typeof pushnotification_load_messaging =='function'){
10			  const messaging = firebase.messaging();
11			  messaging.useServiceWorker(registration);
12			  pushnotification_load_messaging();
13		  }
14		  subOnlineOfflineIndicator();
15	  })
16	  .catch(function(error) { console.log('Registration failed with ' + error); });
17  
18	  /****************** Start : Online/Offline Indicator ******************/
19  
20	  // Variables & default values
21	  const snackbarTimeToHide = 5000; // 5s
22	  let isOffline = false,
23		  snackbarTimeoutHide = null,
24		  goOfflineMsg = superpwa_sw.offline_message_txt,
25		  backOnlineMsg = superpwa_sw.online_message_txt;
26  
27	  /**
28	  * Subscribe to online offline indicator
29	  */
30	  function subOnlineOfflineIndicator() {
31		  injectSnackbarHtml();
32		  injectSnackbarCss();
33		  runOnlineOfflineIndicator();
34	  }
35  
36	  /**
37	   * Inject html of snackbar
38	   */
39	  function injectSnackbarHtml() {
40		if (document.querySelector('.snackbar')) return;
41		
42		  const container = document.createElement('div');
43		  container.className = 'snackbar';
44  
45		  const parag = document.createElement('p');
46		  parag.id = 'snackbar-msg';
47		  container.appendChild(parag);
48  
49		  const button = document.createElement('button');
50		  button.type = 'button';
51		  button.className = 'snackbar-close';
52		  button.setAttribute('aria-label', 'Close ×');
53		  button.addEventListener('click', hideSnackbar);
54		  button.innerHTML = '×';
55  
56		  container.appendChild(button);
57  
58		  document.body.appendChild(container);
59  
60		  window.addEventListener('online', runOnlineOfflineIndicator);
61		  window.addEventListener('offline', runOnlineOfflineIndicator);
62  
63		  window.addEventListener('fetch',() => console.log("fetch"));
64  
65		  // Clean snackbarTimeToHide varibale when user hover on the snackbar to prevent hide it
66		  container.addEventListener('mouseover', function () {
67			  if (snackbarTimeoutHide !== null)
68				  clearTimeout(snackbarTimeoutHide);
69		  });
70  
71		  // Call setTimeout and set snackbarTimeToHide variable to hide snackbar
72		  container.addEventListener('mouseout', function () {
73			  if (snackbarTimeoutHide !== null)
74				  snackbarTimeoutHide = setTimeout(hideSnackbar, snackbarTimeToHide / 2);
75		  });
76	  }
77  
78	  /**
79	   * Inject style css of snackbar
80	   */
81	  function injectSnackbarCss() {
82		  const css = `body.snackbar--show .snackbar {
83			  -webkit-transform: translateY(0);
84			  transform: translateY(0); 
85		  }
86		  .snackbar {
87			  box-sizing: border-box;
88			  background-color: #121213;
89			  color: #fff;
90			  padding: 10px 55px 10px 10px;
91			  position: fixed;
92			  z-index: 9999999999999999;
93			  left: 15px;
94			  bottom: 15px;
95			  border-radius: 5px 8px 8px 5px;
96			  max-width: 90%;
97			  min-height: 48px;
98			  line-height: 28px;
99			  font-size: 16px;
100			  -webkit-transform: translateY(150%);
101			  transform: translateY(150%);
102			  will-change: transform;
103			  -webkit-transition: -webkit-transform 200ms ease-in-out;
104			  -webkit-transition-delay: 0s;
105					  transition-delay: 0s;
106			  -webkit-transition: -webkit-transform 200ms ease-in-out false;
107			  transition: -webkit-transform 200ms ease-in-out false;
108			  transition: transform 200ms ease-in-out false;
109			  transition: transform 200ms ease-in-out false, -webkit-transform 200ms ease-in-out false; 
110		  }
111		  .snackbar p {
112			  margin: 0;
113			  color: #fff;
114			  text-align: center; 
115		  }
116		  .snackbar .snackbar-close {
117			  position: absolute;
118			  top: 0;
119			  right: 0;
120			  width: 45px;
121			  height: 100%;
122			  padding: 0;
123			  background: #2a2a2a;
124			  border: none;
125			  font-size: 28px;
126			  font-weight: normal;
127			  border-radius: 0 5px 5px 0;
128			  color: #FFF;
129			  font-family: Arial, Helvetica, sans-serif;
130		  }
131		  .snackbar .snackbar-close:hover,
132		  .snackbar .snackbar-close:focus {
133			  background: #3f3f3f;
134		  }
135		  .snackbar a {
136			  color: #FFF;
137			  font-weight: bold;
138			  text-decoration: underline; 
139		  }`;
140			  
141		  const head = document.head || document.getElementsByTagName('head')[0];
142		  const style = document.createElement('style');
143  
144		  style.type = 'text/css';
145		  if (style.styleSheet) {
146			  // This is required for IE8 and below.
147			  style.styleSheet.cssText = css;
148		  } else {
149			  style.appendChild(document.createTextNode(css));
150		  }
151  
152		  head.appendChild(style);
153	  }
154  
155	  /**
156	   * Show the state of the mode of connectivity to the user :  back onLine | go offLine
157	   */
158	  function runOnlineOfflineIndicator() {
159		  if (navigator.onLine) {
160			  if (isOffline === true) {
161				  showSnackbar(backOnlineMsg);
162			  }
163			  isOffline = false;
164		  } else {
165			  if (superpwa_sw.offline_message == 1) {
166				  showSnackbar(goOfflineMsg);
167				  isOffline = true;
168			  }
169		  }
170	  }
171  
172	  /**
173	   * Show with the given message in the snackbar
174	   * @param {String} msg 
175	   */
176	  function showSnackbar(msg) {
177		  document.getElementById('snackbar-msg').innerHTML = msg;
178		  document.body.classList.add('snackbar--show');
179  
180		  clearTimeout(snackbarTimeoutHide);
181		  snackbarTimeoutHide = setTimeout(hideSnackbar, snackbarTimeToHide);
182	  }
183  
184	  /**
185	  * Hide snackbar
186	  */
187	  function hideSnackbar() {
188		  document.body.classList.remove('snackbar--show');
189	  }
190  
191	  /****************** End : Online/Offline Indicator ******************/
192  
193	  var deferredPrompt;
194	  window.addEventListener('beforeinstallprompt', function(e){
195		  deferredPrompt = e;
196		  if(deferredPrompt != null || deferredPrompt != undefined){
197			  if(superpwa_sw.disable_addtohome==1){
198				  deferredPrompt.preventDefault();
199			  }
200  
201			  var a2hsBanner = document.getElementsByClassName("superpwa-sticky-banner");
202			  if(a2hsBanner.length){
203				  deferredPrompt.preventDefault();
204				  //Disable on desktop
205				  if(superpwa_sw.enableOnDesktop!=1 && !window.mobileCheck()){return ;}
206				  if(typeof super_check_bar_closed_or_not == 'function' && !super_check_bar_closed_or_not()){return ;}
207				  for (var i = 0; i < a2hsBanner.length; i++) {
208					  var showbanner = a2hsBanner[i].getAttribute("data-show");
209					  a2hsBanner[i].style.display="flex";
210				  }
211			  }
212			  document.cookie = "hidecta=no";
213		  }
214	  })
215  
216  window.addEventListener('appinstalled', function(evt){
217		  var a2hsBanner = document.getElementsByClassName("superpwa-sticky-banner");
218		  if(a2hsBanner.length){
219			  for (var i = 0; i < a2hsBanner.length; i++) {
220				  var showbanner = a2hsBanner[i].getAttribute("data-show");
221						  document.cookie = "hidecta=yes";
222					  a2hsBanner[i].style.display="none";
223				  }
224			  }
225	  });
226	  
227	  var a2hsviaClass = document.getElementsByClassName("superpwa-add-via-class");
228	  if(a2hsviaClass !== null){
229		  for (var i = 0; i < a2hsviaClass.length; i++) {
230			a2hsviaClass[i].addEventListener("click", addToHome); 
231		}
232	  }
233  
234	  function addToHome(){
235		  if(!deferredPrompt){return ;}
236		  deferredPrompt.prompt(); 
237		  deferredPrompt.userChoice.then(function(choiceResult) {
238			  if (choiceResult.outcome === "accepted") {
239				  var a2hsBanner = document.getElementsByClassName("superpwa-sticky-banner");
240				  if(a2hsBanner){
241					  for (var i = 0; i < a2hsBanner.length; i++) {
242						  var showbanner = a2hsBanner[i].getAttribute("data-show");
243						  a2hsBanner[i].style.display="none";
244					  }
245				  }//a2hsBanner if
246				  console.log("User accepted the prompt");
247			  }else{
248				  console.log("User dismissed the prompt");
249			  }
250			  deferredPrompt = null;
251		  });
252	  } // function closed addToHome
253  
254  
255	});
256  }
257  window.mobileCheck = function() {
258		let check = false;
259		(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check 
259= true;})(navigator.userAgent||navigator.vendor||window.opera);
260		return check;
261	  };
262  
263	  window.addEventListener('load', function() {
264		   let manifest_name = superpwa_sw.manifest_name ?? 'superpwa-manifest.json';
265		  var manifestLink = document.querySelectorAll("link[rel='manifest']");
266			  if(manifestLink.length > 1){
267				  for (var i = 0; i < manifestLink.length; i++) {
268					  var href = manifestLink[i].getAttribute("href");
269					  if(href.indexOf(manifest_name) == -1){
270						  manifestLink[i].remove();
271					  }
272				  }
273			  }
274			  // fix for href="#" in Ios safari standalone
275			  var ua = window.navigator.userAgent;
276			  var iOS = ua.match(/iPad/i) || ua.match(/iPhone/i);
277			  var webkit = ua.match(/WebKit/i);
278			  var iOSSafari = iOS && webkit && !ua.match(/CriOS/i);
279  
280			  if(iOSSafari && (window.matchMedia('(display-mode: standalone)').matches)){
281			  setTimeout(function(){
282				  const anchor_fix = document.querySelectorAll("a[href='#']");
283				  if(anchor_fix.length > 1){
284					  for (var i = 0; i < anchor_fix.length; i++) {
285						  anchor_fix[i].setAttribute("href","javascript:void(0);");
286					  }
287				  }
288			  },600);
289		  }
290  
291	  });
292  
293	  document.addEventListener('DOMContentLoaded', function () {
294		  if (typeof pnScriptSetting !== 'undefined' && pnScriptSetting.superpwa_apk_only !== undefined && pnScriptSetting.superpwa_apk_only == 1) {
295			  const reffer = document.referrer; 
296			  if (reffer && reffer.includes('android-app://')) {
297				  sessionStorage.setItem('superpwa_mode', 'apk');
298			  }
299		  }
300	  });
301	  
302  
303	  if (superpwa_sw.offline_form_addon_active) {
304		  navigator.serviceWorker.ready.then(function (registration) {
305			  return registration.sync.register('superpwa_form_sendFormData')
306		  }).then(function () {
307			  console.log('sync event registered');
308		  }).catch(function () {
309			  console.log('sync registration failed')
310		  });
311		  
312		  
313	  
314		  function superpwa_formSubmitOptions(event) {
315			  var finalData = {};
316			  var inputElements = document.querySelectorAll('input, textarea, select');/*closest('form')*/
317			  for (let elem of inputElements) {
318				  if (elem.getAttribute('type') == 'radio') {
319		  
320					  let chk_name_radio = elem.getAttribute('name');
321		  
322					  var parent_div = elem.closest('.frm_opt_container')
323		  
324					  if (parent_div.getAttribute('aria-required') == 'true') {
325		  
326						  let chk_value = parent_div.querySelectorAll('input[name=\"' + chk_name_radio + '\"]:checked');
327		  
328						  if (chk_value.length == 0) {
329		  
330							  event.preventDefault();
331		  
332							  event.stopPropagation();
333		  
334							  alert('Please fill all mandatory fields');
335		  
336							  return;
337						  }
338					  }
339				  }
340		  
341		  
342				  if (!elem.value && ((elem.getAttribute('aria-required') == 'true' || elem.getAttribute('required')) && elem.offsetParent !== null)) {
343					  event.preventDefault();
344					  event.stopPropagation();
345					  alert('Please fill all mandatory fields');
346					  return;
347				  }
348				  var name = elem.getAttribute('name');
349				  if (name) {
350					  //name=name.replace(/[\[']/g, '_').replace(/[\]']/g, '');
351					  if (elem.getAttribute('type') == 'checkbox') {
352						  if (elem.checked) {
353							  finalData[name] = elem.value;
354						  }
355					  } else if (elem.getAttribute('type') == 'radio') {
356						  if (elem.checked) {
357							  finalData[name] = elem.value;
358						  }
359					  } else {
360						  finalData[name] = elem.value;
361					  }
362				  }
363			  }
364		  
365		  
366			  if (JSON.stringify(finalData) !== '{}') {
367				  var allData = {
368					  'form_data': finalData,
369					  'action': 'form_submit_data'
370				  };
371				  /* send data in serviceWorker */
372				  navigator.serviceWorker.ready.then((registration) => {
373					  registration.active.postMessage(allData);
374					  event.stopPropagation();
375				  });
376			  } else {
377				  event.preventDefault();
378				  event.stopPropagation();
379				  alert('Error occured during form submission, please try again');
380				  return;
381			  }
382		  }
383		  
384		  function handleGravityMultistep(btn_type, event) {
385			  let target_parent = event.parentNode.parentNode;
386			  let go_next = false;
387			  if (btn_type == 'previous') {
388				  target_parent.style.display = 'none';
389				  let prev_id = target_parent.previousElementSibling.id;
390				  let source_page = document.querySelector('input[name^=\"gform_source_page_number_\"]');
391				  let target_page = document.querySelector('input[name^=\"gform_target_page_number_\"]');
392				  source_page.value = parseInt(source_page.value) - 1;
393				  target_page.value = parseInt(target_page.value) - 1;
394				  if (prev_id) {
395					  document.getElementById(prev_id).style.display = 'block';
396				  }
397			  } else {
398				  let inputs = target_parent.querySelectorAll('input, textarea, select');
399				  for (let elem of inputs) {
400					  let req_flag = elem.getAttribute('aria-required');
401					  if (req_flag == 'true' && (elem.getAttribute('type') == 'checkbox' || elem.getAttribute('type') == 'radio')) {
402						  let chk_name = elem.getAttribute('name');
403						  let chk_value = target_parent.querySelectorAll('input[name=\"' + chk_name + '\"]:checked');
404						  if (!chk_value.length) {
405							  go_next = false;
406							  break;
407						  } else {
408							  go_next = true;
409						  }
410					  } else {
411						  if (!elem.value) {
412							  go_next = false;
413							  break;
414						  } else {
415							  go_next = true;
416						  }
417					  }
418				  }
419				  if (go_next == true) {
420					  target_parent.style.display = 'none';
421					  let next_id = target_parent.nextElementSibling.id;
422					  let source_page = document.querySelector('input[name^=\"gform_source_page_number_\"]');
423					  let target_page = document.querySelector('input[name^=\"gform_target_page_number_\"]');
424					  let gform_wrapper = document.querySelector('.gform_wrapper');
425					  let total_page = gform_wrapper.getAttribute('id').split('_')[2];
426					  source_page.value = parseInt(source_page.value) + 1;
427					  if (target_page < total_page) { target_page.value = parseInt(target_page.value) + 1; }
428					  else { target_page.value = 0; }
429					  if (next_id) {
430						  document.getElementById(next_id).style.display = 'block';
431					  }
432				  } else {
433					  alert('Please fill correct values in all mandatory fields');
434				  }
435			  }
436		  }
437		  
438		  window.addEventListener('online', (e) => { updateOnlineStatus(e) });
439		  
440		  function updateOnlineStatus(event) {
441			  setTimeout(window.location.reload(),3000);
442		  }
443		  window.onload = function (event) {
444			  console.log('Page Load');
445			  if (!navigator.onLine) {
446				  updateOfflineStatus(event);
447				  superpwapro_woo_xtheme_compat();
448			  }
449			  window.addEventListener('offline', (e) => {
450				  updateOfflineStatus(e);
451				  superpwapro_woo_xtheme_compat();
452				  reRenderPage();
453			  });
454			  fallbackForIosSync();
455			  var our_db;
456			  function fallbackForIosSync() {
457				  var isSyncSupported = ('serviceWorker' in navigator && 'SyncManager' in window);
458				  if (!isSyncSupported && navigator.onLine) {
459					  var indexedDBOpenRequest = indexedDB.open('superpwaForm', 2);
460					  indexedDBOpenRequest.onerror = function (error) {
461						  console.error('IndexedDB error:', error)
462					  }
463					  indexedDBOpenRequest.onupgradeneeded = function () {
464						  if (!this.result.objectStoreNames.contains('post_requests')) {
465							  this.result.createObjectStore('post_requests', { autoIncrement: true, keyPath: 'id' })
466						  }
467					  }
468					  indexedDBOpenRequest.onsuccess = function () {
469						  our_db = this.result;
470						  sendPostToServerAjax();
471					  }
472				  }
473			  }
474		  
475			  function reRenderPage() {
476				  var condition = navigator.onLine ? 'online' : 'offline';
477				  if (condition == 'offline') {
478					  var formElement = document.querySelector('form[method=\"post\"]');
479					  if (formElement && (formElement.classList.contains('frm-fluent-form') || formElement.querySelector('.frm_dropzone'))) {
480						  // window.location.reload();
481					  }
482				  }
483			  }
484		  
485			  function updateOfflineStatus(event) {
486				  var condition = navigator.onLine ? 'online' : 'offline';
487				  if (condition == 'offline') {
488					  setTimeout(() => {
489						  var formElement = document.querySelectorAll('form[method=\"post\"]');
490						  if (formElement && formElement.length > 0) {
491							  for (var i = 0; i < formElement.length; i++) {
492								  // Fluent Form Compatibility
493		  
494								  if (formElement[i].hasAttribute('data-form_instance') && formElement[i].classList.contains('frm-fluent-form')) {
495									  var class_to_remove = formElement[i].getAttribute('data-form_instance');
496									  formElement[i].classList.remove(class_to_remove)
497								  }
498		  
499								  // Fix for Formidable form not adding data due to anti-spam javascript
500		  
501								  if (formElement[i].hasAttribute('data-token')) {
502									  const antispamInput = document.createElement('input');
503									  antispamInput.type = 'hidden';
504									  antispamInput.value = formElement[i].getAttribute('data-token');
505									  antispamInput.name = 'antispam_token';
506									  formElement[i].appendChild(antispamInput);
507								  }
508		  
509								  if (formElement[i].querySelector('button[type=\"submit\"]')) { let ourEle = formElement[i].querySelector('button[type=\"submit\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); }
510		  
511								  if (formElement[i].querySelector('button[type=\"button\"]')) { let ourEle = formElement[i].querySelector('button[type=\"button\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); }
512		  
513								  if (formElement[i].querySelector('input[type=\"submit\"]')) { let ourEle = formElement[i].querySelector('input[type=\"submit\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); }
514		  
515								  formElement[i].addEventListener('submit', superpwa_formSubmitOptions, true);
516							  }
517
518						  }
519		  
520						  //For Formidable Form ajax upload field
521						  var inputs = document.getElementsByTagName('input');
522						  if (inputs && inputs.length) {
523							  for (var i = 0; i < inputs.length; i++) {
524								  if (inputs[i].type.toLowerCase() == 'file') {
525									  if (document.querySelector('.dz-error-message')) {
526										  document.querySelector('.dz-error-message').remove();
527										  setTimeout(
528											  function () {
529												  document.querySelector('.dz-error-message').innerHTML = '';
530											  },
531											  500);
532									  }
533								  }
534							  }
535						  }
536		  
537						  // Fix for Formidable Ajax uploads
538		  
539						  var frm_dropzone_attrs = document.querySelectorAll('.frm_dropzone');
540						  if (frm_dropzone_attrs && frm_dropzone_attrs.length > 0) {
541							  frm_dropzone_attrs.forEach(ele => {
542								  var container_id = ele.id;
543								  container_id = container_id.match(/\d+/);
544								  const upload_input_parent = ele.closest('.frm_form_field');
545								  var upload_input = upload_input_parent.querySelector('.dz-hidden-input');
546								  if (upload_input) {
547									  upload_input.setAttribute("data-containerid", container_id);
548								  }
549							  });
550						  }
551		  
552						  var frm_dropzone_ele = document.querySelectorAll('.dz-hidden-input');
553						  if (frm_dropzone_ele && frm_dropzone_ele.length > 0) {
554							  frm_dropzone_ele.forEach(ele => {
555								  ele.addEventListener('change', (function (e) {
556									  if (e.target.files[0] || e.target) {
557										  var formElement = document.querySelector('form[method="post"]');
558										  var field_id = e.target.getAttribute("data-containerid");
559										  var field_id_label = 'file' + field_id;
560										  var object1 = {};
561										  object1['action'] = 'frm_submit_dropzone';
562										  object1['field_id'] = field_id;
563										  object1['form_id'] = document.querySelector('[name="form_id"]').value;
564										  object1['nonce'] = frm_js.nonce;
565										  object1['antispam_token'] = formElement.getAttribute('data-token');
566										  object1[field_id_label] = e.target.files[0];
567										  saveAddlAjaxSubmits(frm_js.ajax_url, object1);
568									  }
569								  }));
570							  });
571						  }
572		  
573		  
574		  
575						  // For Gravity Form multistep form
576						  let gform_next_buttons = document.querySelectorAll('.gform_next_button');
577						  let gform_previous_button = document.querySelectorAll('.gform_previous_button');
578						  if (gform_next_buttons.length > 0) {
579							  gform_next_buttons.forEach(button => {
580								  button.setAttribute('onclick', 'handleGravityMultistep("next",this)');
581								  button.setAttribute('onkeypress', 'handleGravityMultistep("next",this)');
582								  button.setAttribute('type', 'button');
583							  });
584						  }
585						  if (gform_previous_button.length > 0) {
586							  gform_previous_button.forEach(button => {
587								  button.setAttribute('onclick', 'handleGravityMultistep(\"previous\",this)');
588								  button.setAttribute('onkeypress', 'handleGravityMultistep(\"previous\",this)');
589								  button.setAttribute('type', 'button');
590							  });
591						  }
592					  }, 500);
593				  }
594			  }
595		  
596			  function sendPostToServerAjax() {
597				  var savedRequests = [];
598				  var objStore = getObjectStore('ajax_requests');
599				  if (!!objStore) {
600					  var req = getObjectStore('ajax_requests').openCursor() // FOLDERNAME is 'ajax_requests'
601					  req.onsuccess = async function (event) {
602						  var cursor = event.target.result
603						  if (cursor) {
604							  // Keep moving the cursor forward and collecting saved requests.
605							  savedRequests.push(cursor.value)
606							  cursor.continue()
607						  } else {
608							  if (savedRequests && savedRequests.length) {
609								  for (let savedRequest of savedRequests) {
610									  var formData = new FormData();
611									  for (const [key, value] of Object.entries(savedRequest.payload)) {
612										  formData.append(key, value);
613									  }
614									  var requestUrl = savedRequest.url
615									  var payload = JSON.stringify(savedRequest.payload)
616									  var method = savedRequest.method
617									  /*request to forms*/
618									  var headers = {
619										  'Accept': 'application/json, text/javascript, */*; q=0.01',
620									  } // if you have any other headers put them here
621									  fetch(superpwa_sw.ajax_url+'?action=superpwa_form_store_send', {
622										  headers: headers,
623										  method: method,
624										  body: formData
625									  }).then(function (response) {
626										  if (response.status < 400) {
627											  // If sending the POST request was successful, then remove it from the IndexedDB.
628											  getObjectStore('ajax_requests', 'readwrite').delete(savedRequest.id);
629											  return response.json();
630										  }
631										  return false;
632									  }).then(function (response) {
633										  if (response) {
634											  sendPostToServer([response[0], savedRequest.payload.field_id]);
635											  console.log('Form Submitted with ajax fields : success');
636										  } else {
637											  sendPostToServer();
638											  console.log('Form Submitted without ajax fields : ajax fields present but their saving failed to db');
639										  }
640									  });
641								  }
642							  } else {
643								  sendPostToServer();
644								  console.log('Form Submitted without ajax fields : no values present in ajax_requests object');
645							  }
646						  }
647					  }
648					  req.onerror = function (error) {
649						  sendPostToServer();
650					  }
651				  } else {
652					  sendPostToServer();
653				  }
654			  }
655		  
656			  function sendPostToServer(ajax_params = null) {
657				  var savedRequests = [];
658				  var objStore = getObjectStore('post_requests');
659				  if (!!objStore) {
660					  var req = getObjectStore('post_requests').openCursor();
661					  req.onsuccess = async function (event) {
662						  var cursor = event.target.result;
663						  if (cursor) {
664							  // Keep moving the cursor forward and collecting saved requests.
665							  savedRequests.push(cursor.value);
666							  cursor.continue();
667						  } else {
668							  // Process each saved request.
669							  for (let savedRequest of savedRequests) {
670								  var formData = new FormData();
671								  for (const [key, value] of Object.entries(savedRequest.payload)) {
672									  formData.append(key, value);
673								  }
674								  if (ajax_params && ajax_params.length && ajax_params[0]) {
675									  formData.set('item_meta[' + ajax_params[1] + ']', ajax_params[0]);
676								  }
677								  var requestUrl = savedRequest.url;
678								  var method = savedRequest.method;
679								  /* Request to admin-ajax.php */
680								  var headers = {
681									  'Accept': 'application/json, text/javascript, */*; q=0.01',
682									  // Add any other headers here if needed
683								  };
684								  try {
685									  const response = await fetch(requestUrl, {
686										  headers: headers,
687										  method: method,
688										  body: formData
689									  });
690									  console.log('server response', response);
691									  if (response.status < 400) {
692										  // If sending the POST request was successful, then remove it from the IndexedDB.
693										  try {
694											  var forDataSave = {};
695											  formData.forEach(function (value, key) {
696												  forDataSave[key] = value;
697											  });
698											  var forDataSaveJson = JSON.stringify(forDataSave);
699											  const response = await fetch(superpwa_sw.ajax_url+'?action=superpwa_form_store_send', {
700												  headers: headers,
701												  method: method,
702												  body: forDataSaveJson,
703											  });
704											  console.log('saved request', savedRequest);
705											  if (response.status < 400) {
706												  // If successful, remove the request from IndexedDB.
707												  await getObjectStore('post_requests', 'readwrite').delete(savedRequest.id);
708											  }
709										  } catch (error) {
710											  console.error('Send to Server failed:', error);
711											  throw error;
712										  }
713									  } else {
714										  console.error('Server responded with an error:', response.status);
715										  // Handle the error as needed
716									  }
717								  } catch (error) {
718									  console.error('Send to Server failed:', error);
719									  // Handle the error as needed
720									  throw error; // Rethrow the error if necessary
721								  }
722							  }
723						  }
724					  };
725				  }
726			  }
727		  
728			  function getObjectStore(storeName, mode) {
729				  if (!our_db) { return null; }
730				  // retrieve our object store
731				  return our_db.transaction(storeName, mode).objectStore(storeName)
732			  }
733		  
734			  function saveAddlAjaxSubmits(submit_url, obj) {
735				  /*send data in serviceWorker*/
736				  var indexedDBOpenRequest = indexedDB.open('superpwaForm', 2);
737				  indexedDBOpenRequest.onerror = (event) => {
738					  console.error('a post form request has been not added to IndexedDB');
739				  };
740				  indexedDBOpenRequest.onupgradeneeded = (event) => {
741					  const db = event.target.result;
742					  if (!db.objectStoreNames.contains('ajax_requests')) {
743						  db.createObjectStore('ajax_requests', { autoIncrement: true, keyPath: 'id' });
744					  }
745				  }
746				  indexedDBOpenRequest.onsuccess = (event) => {
747					  const db = event.target.result;
748					  var request = db.transaction('ajax_requests', 'readwrite').objectStore('ajax_requests').add({
749						  url: submit_url,
750						  payload: obj,
751						  method: 'POST'
752					  })
753					  request.onsuccess = function (event) {
754						  console.log('a post form request has been added to indexedb')
755					  }
756					  request.onerror = function (error) {
757						  console.error(error)
758					  }
759				  }
760			  }
761  
762			  function superpwapro_woo_xtheme_compat(){
763				  if(document.querySelector('.add_to_cart_button')){
764					  document.addEventListener("click", function (event) {
765						  if (event.target.closest(".add_to_cart_button")) {
766							  event.preventDefault();
767							  event.stopPropagation();
768							  const button = event.target.closest(".add_to_cart_button");
769							  const parentele = button.parentNode;
770							  const qty_wrapper = parentele.querySelector(".quantity-wrapper");
771							  const qty = qty_wrapper.querySelector(".qty");
772							  qty.value = 1;
773							  if(qty_wrapper){
774								  qty_wrapper.classList.add('is-added');
775							  }
776							  
777							  const addToCartUrl = location.href+'?wc-ajax=add_to_cart';
778							  var object_payload = {};
779							  object_payload['product_name'] =  button.getAttribute("data-product_name");
780							  object_payload['success_message'] =  button.getAttribute("data-success_message");
781							  object_payload['product_sku'] =  button.getAttribute("data-product_sku");
782							  object_payload['product_id'] =  button.getAttribute("data-product_id");
783							  object_payload['quantity'] =  1;
784							  saveAddlAjaxSubmits(addToCartUrl, object_payload);
785							
786						  }
787					  });
788				  }else{
789					  console.log('add_to_cart_button not found');
790				  }
791		  
792				  if(document.querySelector('.quantity-wrapper .minus')){
793					  document.addEventListener('click', function (event) {
794						  if (event.target.closest('.quantity-wrapper .minus')) {
795							  event.preventDefault();
796							  event.stopPropagation();
797					  
798							  const minus = event.target.closest('.quantity-wrapper .minus');
799							  const minus_parent = minus.parentNode.parentNode.parentNode;
800							  const button = minus_parent.querySelector('.add_to_cart_button');
801							  const qty_wrapper = minus_parent.querySelector('.quantity-wrapper');
802							  const qty_input = minus_parent.querySelector('.quantity-wrapper .qty');
803							  const product_id = button.getAttribute('data-product_id');
804							  
805							  //qty_input.value = qty_input.value < 2 ? 0 : parseInt(qty_input.value) - 1;
806							  
807							  if(qty_input.value == 0){
808								  qty_wrapper.classList.remove('is-added');
809							  }
810							    setTimeout(
811								function () {
812									qty_wrapper.querySelectorAll('.blockUI').forEach(el => el.remove());
813								},
814								5000);
815
816							  const addToCartUrl = '/wp-admin/admin-ajax.php';
817							  var object_payload = {};
818							  object_payload['action'] =  'etheme_update_cart_item_quantity_by_id';
819							  object_payload['item_id'] =  product_id;
820							  object_payload['qty'] =  qty_input.value;
821					  		saveAddlAjaxSubmits(addToCartUrl, object_payload);
822							  
823						  }
824					  });
825		  
826				  }
827		  
828				  if(document.querySelector('.quantity-wrapper .plus')){
829					  document.addEventListener('click', function (event) {
830						  if (event.target.closest('.quantity-wrapper .plus')) {
831							  event.preventDefault();
832							  event.stopPropagation();
833					  
834							  const plus = event.target.closest('.quantity-wrapper .plus');
835							  
836							  const plus_parent  =plus.parentNode.parentNode.parentNode;
837							  const button = plus_parent.querySelector('.add_to_cart_button');
838							  const qty_wrapper = plus_parent.querySelector('.quantity-wrapper');
839							  const qty_input = plus_parent.querySelector('.quantity-wrapper .qty');
840							  const product_id = button.getAttribute('data-product_id');
841							  
842							  //qty_input.value = parseInt(qty_input.value) + 1;
843							 
844							  setTimeout(
845								function () {
846									qty_wrapper.querySelectorAll('.blockUI').forEach(el => el.remove());
847								},
848								5000);
849							  qty_wrapper.classList.add('is-added');
850							  
851							  const addToCartUrl = '/wp-admin/admin-ajax.php';
852							  var object_payload = {};
853							  object_payload['action'] =  'etheme_update_cart_item_quantity_by_id';
854							  object_payload['item_id'] =  product_id;
855							  object_payload['qty'] =  qty_input.value;
856					  
857		  					saveAddlAjaxSubmits(addToCartUrl, object_payload);
858							  
859						  }
860					  });
861				  }
862			  }
863  
864  
865		  }
866  
867		  
868	  }
869  

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.