134 lines
4.1 KiB
HTML
134 lines
4.1 KiB
HTML
<!doctype html>
|
|
<html lang="en" id="html-theme">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
%sveltekit.head%
|
|
<!-- Polyfill BlobBuilder ANTES de qualquer código JavaScript -->
|
|
<!-- IMPORTANTE: Este script DEVE ser executado antes de qualquer módulo JavaScript -->
|
|
<script>
|
|
// Executar IMEDIATAMENTE, de forma síncrona e bloqueante
|
|
// Não usar IIFE assíncrona, executar direto no escopo global
|
|
(function () {
|
|
'use strict';
|
|
|
|
// Implementar BlobBuilder usando Blob moderno
|
|
function BlobBuilderPolyfill() {
|
|
if (!(this instanceof BlobBuilderPolyfill)) {
|
|
return new BlobBuilderPolyfill();
|
|
}
|
|
this.parts = [];
|
|
}
|
|
|
|
BlobBuilderPolyfill.prototype.append = function (data) {
|
|
if (data instanceof Blob) {
|
|
this.parts.push(data);
|
|
} else if (typeof data === 'string') {
|
|
this.parts.push(data);
|
|
} else {
|
|
this.parts.push(new Blob([data]));
|
|
}
|
|
};
|
|
|
|
BlobBuilderPolyfill.prototype.getBlob = function (contentType) {
|
|
return new Blob(this.parts, contentType ? { type: contentType } : undefined);
|
|
};
|
|
|
|
// Função para aplicar o polyfill em todos os contextos possíveis
|
|
function aplicarPolyfillBlobBuilder() {
|
|
// Aplicar no window (se disponível)
|
|
if (typeof window !== 'undefined') {
|
|
if (!window.BlobBuilder) {
|
|
window.BlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!window.WebKitBlobBuilder) {
|
|
window.WebKitBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!window.MozBlobBuilder) {
|
|
window.MozBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!window.MSBlobBuilder) {
|
|
window.MSBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
}
|
|
|
|
// Aplicar no globalThis (se disponível)
|
|
if (typeof globalThis !== 'undefined') {
|
|
if (!globalThis.BlobBuilder) {
|
|
globalThis.BlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!globalThis.WebKitBlobBuilder) {
|
|
globalThis.WebKitBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!globalThis.MozBlobBuilder) {
|
|
globalThis.MozBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
}
|
|
|
|
// Aplicar no self (para workers)
|
|
if (typeof self !== 'undefined') {
|
|
if (!self.BlobBuilder) {
|
|
self.BlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!self.WebKitBlobBuilder) {
|
|
self.WebKitBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!self.MozBlobBuilder) {
|
|
self.MozBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
}
|
|
|
|
// Aplicar no global (Node.js)
|
|
if (typeof global !== 'undefined') {
|
|
if (!global.BlobBuilder) {
|
|
global.BlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!global.WebKitBlobBuilder) {
|
|
global.WebKitBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
if (!global.MozBlobBuilder) {
|
|
global.MozBlobBuilder = BlobBuilderPolyfill;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Aplicar imediatamente
|
|
aplicarPolyfillBlobBuilder();
|
|
|
|
// Aplicar também quando o DOM estiver pronto (caso window não esteja disponível ainda)
|
|
if (typeof document !== 'undefined' && document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', aplicarPolyfillBlobBuilder, { once: true });
|
|
}
|
|
|
|
// Log apenas se console está disponível
|
|
if (typeof console !== 'undefined' && console.log) {
|
|
console.log('✅ Polyfill BlobBuilder adicionado globalmente (via app.html)');
|
|
}
|
|
})();
|
|
|
|
// Aplicar tema padrão imediatamente se não houver tema definido
|
|
(function () {
|
|
if (typeof document !== 'undefined') {
|
|
var html = document.documentElement;
|
|
if (html && !html.getAttribute('data-theme')) {
|
|
var tema = null;
|
|
try {
|
|
// theme-change usa por padrão a chave "theme"
|
|
tema = localStorage.getItem('theme');
|
|
} catch (e) {
|
|
tema = null;
|
|
}
|
|
|
|
// Fallback para o tema padrão se não houver persistência
|
|
html.setAttribute('data-theme', tema || 'aqua');
|
|
}
|
|
}
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body data-sveltekit-preload-data="hover">
|
|
<div style="display: contents">%sveltekit.body%</div>
|
|
</body>
|
|
</html>
|