1<html lang="pt" class="ng-scope"> 2 <head> 3 <base href="/"> 4 <meta charset="utf-8" /> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 6 <!-- Cache-Control via meta como "cinto + suspensórios" (backup ao header 7 nginx). Impede que browsers cachem o index.html localmente â se o 8 header HTTP falhar (ex.: proxies intermédios, in-app browsers do 9 Instagram/Facebook), isto ainda ajuda a forçar revalidação. --> 10 <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 11 <meta http-equiv="Pragma" content="no-cache" /> 12 <meta http-equiv="Expires" content="0" /> 13 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" /> 14 <title>EasyTicket â Plataforma de Gestão de Eventos</title> 15 <meta name="description" content="A EasyTicket é uma plataforma completa de gestão de eventos: bilhética, lugares, credenciação, operação e gestão de pessoas." /> 16 <meta property="og:type" content="website" /> 17 <meta property="og:title" content="EasyTicket â Plataforma de Gestão de Eventos" /> 18 <meta property="og:description" content="Plataforma completa de gestão de eventos: bilhética, lugares, credenciação, operação e gestão de pessoas." /> 19 <meta property="twitter:card" content="summary_large_image" /> 20 <meta property="twitter:title" content="EasyTicket â Plataforma de Gestão de Eventos" /> 21 <meta property="twitter:description" content="Plataforma completa de gestão de eventos: bilhética, lugares, credenciação, operação e gestão de pessoas." /> 22 23 <link rel="stylesheet" href="css/angular-spinkit.min.css" /> 24 <link rel="stylesheet" href="css/animate.min.css"/> 25 <link rel="stylesheet" href="css/textAngular.css"/> 26 <link rel="stylesheet" href="css/angular-material.min.css"/> 27 <link rel="stylesheet" href="css/owfont-regular.min.css"/> 28 <link rel="stylesheet" href="css/rm-datepicker.css"/> 29 <link rel="stylesheet" href="css/md-data-table.css"/> 30 <link rel="stylesheet" href="css/slick.css" /> 31 <link rel="stylesheet" href="css/slick-theme.css"> 32 <link href="https://fonts.googleapis.com/css?family=Dosis:300,400,500,600,700" rel="stylesheet"> 33 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/quill/1.3.4/quill.snow.css" /> 34 <link rel="stylesheet" href="css/mdColorPicker.css"> 35 <!-- OpenStreetMap / Leaflet (mapa de eventos) --> 36 <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" crossorigin="anonymous"> 37 38 39 40
40<script src="js/jquery-2.1.4.min.js"></script>
40 41
41<script src="js/slick.min.js"></script>
41 42
42<script src="js/angular/angular.min.js"></script>
42 43
43<script src="js/angular/angular-ui-router.min.js"></script>
43 44
44<script src="js/sweetalert.min.js"></script>
44 45
45<script src="js/ng-long-press-min.js"></script>
45 46
46<script> 47 // Web-safe: only load cordova.js when running inside Cordova (file:// or known UA). 48 // On Apache with SPA rewrites, requesting /cordova.js returns HTML and breaks parsing. 49 (function () { 50 try { 51 var ua = (navigator.userAgent || ''); 52 var isCordovaEnv = (location.protocol === 'file:' || location.protocol === 'cdvfile:' || 53 /Cordova|cordova|PhoneGap|Ionic/i.test(ua)); 54 if (!isCordovaEnv) return; 55 var s = document.createElement('script'); 56 s.setAttribute('type', 'text/javascript'); 57 s.setAttribute('charset', 'utf-8'); 58 s.src = 'cordova.js'; 59 document.head.appendChild(s); 60 } catch (e) {} 61 })(); 62 </script>
62 63
63<script src="js/tinycolor.js"></script>
63 64
64<script src="js/mdColorPicker.js"></script>
64 65 </head> 66
66<script> 67 angular.element(document).ready(function () { 68 // In browser, cordova.js is absent. We still want the app to run without crashes 69 // from plugin calls (analytics, brightness, StatusBar, etc.). 70 var isRealCordova = !!(window.cordova && window.cordova.require); 71 if (!isRealCordova) { 72 // IMPORTANT: do NOT set cordova.require in browser, or we would wait for deviceready. 73 window.cordova = window.cordova || {}; 74 window.cordova.plugins = window.cordova.plugins || {}; 75 window.cordova.plugins.firebase = window.cordova.plugins.firebase || {}; 76 window.cordova.plugins.firebase.analytics = window.cordova.plugins.firebase.analytics || { 77 setCurrentScreen: function () {} 78 }; 79 window.cordova.plugins.brightness = window.cordova.plugins.brightness || { 80 setBrightness: function () {}, 81 getBrightness: function (cb) { if (cb) { cb(1); } }, 82 setKeepScreenOn: function () {} 83 }; 84 window.StatusBar = window.StatusBar || { 85 backgroundColorByHexString: function () {}, 86 hide: function () {}, 87 show: function () {} 88 }; 89 } 90 91 if (isRealCordova) { 92 console.log("Running in Cordova, will bootstrap AngularJS once 'deviceready' event fires."); 93 document.addEventListener('deviceready', function () { 94 console.log("Deviceready event has fired, bootstrapping AngularJS."); 95 angular.bootstrap(document.body, ['app']); 96 window.ET_ANGULAR_BOOTSTRAPPED = true; 97 }, false); 98 } else { 99 console.log("Running in browser, bootstrapping AngularJS now."); 100 angular.bootstrap(document.body, ['app']); 101 window.ET_ANGULAR_BOOTSTRAPPED = true; 102 } 103 }); 104 </script>
104 105 <body ng-cloak ng-controller="AppController" style="height: 100%;" class="ng-scope"> 106 <!-- Fail-safe para utilizadores com index.html antigo em cache cujo 107 bootstrap do Angular possa estar a falhar. Se, passados 15s, ainda 108 não vemos sinal de a app ter arrancado, mostramos um overlay com a 109 opção de forçar atualização (limpa caches, unregistra SW e faz 110 reload hard). Isto é CRÃTICO para os ~20% de utilizadores que 111 continuam a servir JS velho (vistos no access log). --> 112 <div id="et_boot_failsafe" style="display:none;position:fixed;inset:0;background:#fff;z-index:999999;padding:40px 20px;text-align:center;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;"> 113 <div style="max-width:480px;margin:60px auto;"> 114 <div style="font-size:48px;margin-bottom:16px;">â ï¸</div> 115 <h2 style="margin:0 0 12px;font-size:20px;color:#111;">A página está a demorar a abrir</h2> 116 <p style="color:#555;margin:0 0 20px;line-height:1.5;">Pode estar a usar uma versão desatualizada guardada no teu telemóvel. Carrega no botão abaixo para forçar a atualização.</p> 117 <button id="et_boot_failsafe_btn" style="background:#8ed974;color:#111;border:none;padding:14px 24px;border-radius:8px;font-size:15px;font-weight:600;cursor:pointer;">Forçar atualização</button> 118 <p style="color:#999;margin:16px 0 0;font-size:12px;">Se continuar a não abrir, fecha e reabre a app/browser.</p> 119 </div> 120 </div> 121
121<script> 122 window.ET_APP_BUILD = '20260906podio14'; 123 (function () { 124 var failsafeShown = false; 125 var disableBootFailsafe = /^\/submissao\/|^\/submisao\/|^\/rever\/|\/podio\/?|\/classificacoes\/?|\/premios\/?|\/selecao\/?/.test(window.location.pathname || ''); 126 function clearVolatileClientState() { 127 try { 128 if (window.localStorage) { 129 [ 130 'cart', 131 'redirect', 132 'redirectparams', 133 'authTabsPref' 134 ].forEach(function (k) { try { localStorage.removeItem(k); } catch (e) {} }); 135 } 136 } catch (e) {} 137 try { 138 if (window.sessionStorage) sessionStorage.clear(); 139 } catch (e) {} 140 try { 141 if (window.caches && caches.keys) { 142 caches.keys().then(function (keys) { 143 keys.forEach(function (k) { try { caches.delete(k); } catch (e) {} }); 144 }); 145 } 146 } catch (e) {} 147 } 148 try { 149 var currentBuild = window.ET_APP_BUILD || ''; 150 var previousBuild = window.localStorage ? localStorage.getItem('et_app_build') : currentBuild; 151 if (window.localStorage && currentBuild && previousBuild !== currentBuild) { 152 localStorage.setItem('et_app_build', currentBuild); 153 clearVolatileClientState(); 154 if (previousBuild) { 155 var buildUrl = new URL(location.href); 156 if (buildUrl.searchParams.get('_build') !== currentBuild) { 157 buildUrl.searchParams.set('_build', currentBuild); 158 location.replace(buildUrl.toString()); 159 } 160 } 161 } 162 } catch (e) {} 163 function showFailsafe() { 164 if (disableBootFailsafe) return; 165 try { 166 if (window.ET_ANGULAR_BOOTSTRAPPED) return; 167 if (window.angular && angular.element && angular.element(document.body).injector()) return; 168 } catch (eBoot) {} 169 if (failsafeShown) return; 170 failsafeShown = true; 171 var el = document.getElementById('et_boot_failsafe'); 172 if (el) el.style.display = 'block'; 173 } 174 function hideFailsafeIfBooted() { 175 try { 176 if (!window.ET_ANGULAR_BOOTSTRAPPED && !(window.angular && angular.element && angular.element(document.body).injector())) return; 177 var el = document.getElementById('et_boot_failsafe'); 178 if (el) el.style.display = 'none'; 179 failsafeShown = false; 180 } catch (eHide) {} 181 } 182 function hardReload() { 183 try { 184 if (window.localStorage) { 185 var keepDark = localStorage.getItem('darkMode'); 186 var keepLang = localStorage.getItem('lang'); 187 localStorage.clear(); 188 if (keepDark !== null) localStorage.setItem('darkMode', keepDark); 189 if (keepLang !== null) localStorage.setItem('lang', keepLang); 190 } 191 } catch (e) {} 192 clearVolatileClientState(); 193 try { 194 if ('serviceWorker' in navigator && navigator.serviceWorker.getRegistrations) { 195 navigator.serviceWorker.getRegistrations().then(function (regs) {
196 regs.forEach(function (r) { try { r.unregister(); } catch (e) {} }); 197 }); 198 } 199 } catch (e) {} 200 // Query string única para contornar cache do proxy/browser 201 try { 202 var u = new URL(location.href); 203 u.searchParams.set('_r', Date.now()); 204 location.replace(u.toString()); 205 } catch (e) { 206 try { location.reload(true); } catch (e2) { location.reload(); } 207 } 208 } 209 var btn = document.getElementById('et_boot_failsafe_btn'); 210 if (btn) btn.addEventListener('click', hardReload); 211 // Se ao fim de 15s ainda não há conteúdo renderizado no <ui-view>, 212 // assume-se que o bootstrap falhou e mostra-se o fail-safe. 213 setTimeout(function () { 214 if (disableBootFailsafe) return; 215 try { 216 var view = document.querySelector('ui-view'); 217 // "Renderizou" = tem filhos não-vazios além do próprio comentário do ui-view. 218 var rendered = view && view.children && view.children.length > 0; 219 // Se o Angular não bootstrapped, também não tem a classe ng-scope no body do evento real 220 if (!rendered && !window.ET_ANGULAR_BOOTSTRAPPED) showFailsafe(); 221 } catch (e) { showFailsafe(); } 222 }, 15000); 223 setTimeout(hideFailsafeIfBooted, 15100); 224 setTimeout(hideFailsafeIfBooted, 18000); 225 })(); 226 </script>
226 227 <div> 228 <ui-view class="ui_view_mob"></ui-view> 229 </div> 230
230<script src="template/mundial_tiro/i18n.js?v=20260901clf10"></script>
230 231
231<script src="template/mundial_tiro/formulario_i18n.js?v=20260827lic3"></script>
231 232
232<script src="js/et-oauth-ui.js?v=20260915sso3"></script>
232 233
233<script src="js/app.js?v=20260924login"></script>
233 234
234<script src="js/controllers.js?v=20260924login2"></script>
234 235
235<script src="js/services.js?v=20260419a"></script>
235 236
236<script src="js/filters.js?v=20260419a"></script>
236 237
237<script src="js/directives.js?v=20260830pg1"></script>
237 238
238<script src="js/ng-pinch-zoom.js"></script>
238 239
239<script src="js/angular/angular-slick.min.js"></script>
239 240
240<script src="js/angular/deviceGyroscope.js"></script>
240 241
241<script src="js/angular/angular-material.min.js"></script>
241 242
242<script src="js/angular/angular-aria.js"></script>
242 243
243<script src="js/angular/ui-load.js"></script>
243 244
244<script src="js/angular/textAngular-rangy.min.js"></script>
244 245
245<script src="js/angular/textAngular-sanitize.min.js"></script>
245 246
246<script src="js/angular/textAngular.min.js"></script>
246 247
247<script src="js/angular/angular-animate.min.js"></script>
247 248
248<script src="js/angular/angular-resource.min.js"></script>
248 249
249<script src="js/angular/masks.js"></script>
249 250
250<script src="js/angular/angular-spinkit.min.js"></script>
250 251
251<script src="js/angular/ng-cordova.min.js"></script>
251 252
252<script src="js/angular/angular-translate.min.js"></script>
252 253
253<script src="js/angular/angular-translate-loader-static-files.min.js"></script>
253 254
254<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-translate-handler-log/1.1.0/angular-translate-handler-log.min.js" integrity="sha512-NMiA1pbUd9x8tUeY/GkD84Dz2eSqjguTW+pWEWRhcTW3ncqNVwoHyZ5C2f5OvBqRnBxDY5sJaALnzOKoWZxVYA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
254 255
255<script src="js/angular/angular-sanitize.js"></script>
255 256
256<script src="js/angular/angular-messages.js"></script>
256 257
257<script src="js/angular/ng-map.min.js"></script>
257 258
258<script src="https://unpkg.com/[email protected]/dist/leaflet.js" crossorigin="anonymous"></script>
258 259
259<script src="js/angular/ng-file-upload-shim.min.js"></script>
259 260
260<script src="js/angular/ng-file-upload.min.js"></script>
260 261
261<script src="js/angular/satellizer.min.js"></script>
261 262
262<script src="js/humanize-duration.js"></script>
262 263
263<script src="js/moment-with-locales.min.js"></script>
263 264
264<script src="js/angular-moment.min.js"></script>
264 265
265<script src="js/angular/angular-timer.min.js"></script>
265 266
266<script src="js/angular/angular-locale_pt-pt.js"></script>
266 267
267<script src="js/angular/rm-datepicker.js"></script>
267 268
268<script src="js/socket.io.min.js"></script>
268 269
269<script src="js/angular/socket.js"></script>
269 270
270<script src="js/all.min.js"></script>
270 271
271<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/signature_pad.umd.min.js"></script>
271 272
272<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-i18n/1.6.10/angular-locale_pt-pt.min.js"></script>
272 273
273<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
273 274
274<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
274 275 276 </body> 277</html>
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.