feat: implement theme customization and user preferences
- Added support for user-selected themes, allowing users to customize the appearance of the application. - Introduced a new `temaPreferido` field in the user schema to store the preferred theme. - Updated various components to apply the selected theme dynamically based on user preferences. - Enhanced the UI to include a theme selection interface, enabling users to preview and save their theme choices. - Implemented a polyfill for BlobBuilder to ensure compatibility across browsers, improving the functionality of the application.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-theme="aqua">
|
||||
<html lang="en" id="html-theme">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||
@@ -10,43 +10,112 @@
|
||||
<script>
|
||||
// Executar IMEDIATAMENTE, de forma síncrona e bloqueante
|
||||
// Não usar IIFE assíncrona, executar direto no escopo global
|
||||
if (typeof window !== 'undefined') {
|
||||
// Verificar se já foi adicionado
|
||||
if (!window.__blobBuilderPolyfillAdded) {
|
||||
// Implementar BlobBuilder usando Blob moderno
|
||||
function BlobBuilder() {
|
||||
this.parts = [];
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Implementar BlobBuilder usando Blob moderno
|
||||
function BlobBuilderPolyfill() {
|
||||
if (!(this instanceof BlobBuilderPolyfill)) {
|
||||
return new BlobBuilderPolyfill();
|
||||
}
|
||||
BlobBuilder.prototype.append = function(data) {
|
||||
this.parts = [];
|
||||
}
|
||||
|
||||
BlobBuilderPolyfill.prototype.append = function(data) {
|
||||
if (data instanceof Blob) {
|
||||
this.parts.push(data);
|
||||
};
|
||||
BlobBuilder.prototype.getBlob = function(contentType) {
|
||||
return new Blob(this.parts, contentType ? { type: contentType } : undefined);
|
||||
};
|
||||
|
||||
// Adicionar em TODOS os locais possíveis, SEM verificação
|
||||
// (sobrescrever se necessário para garantir que esteja disponível)
|
||||
window.BlobBuilder = BlobBuilder;
|
||||
window.WebKitBlobBuilder = BlobBuilder;
|
||||
window.MozBlobBuilder = BlobBuilder;
|
||||
window.MSBlobBuilder = BlobBuilder;
|
||||
|
||||
// Adicionar no globalThis também
|
||||
if (typeof globalThis !== 'undefined') {
|
||||
globalThis.BlobBuilder = BlobBuilder;
|
||||
globalThis.WebKitBlobBuilder = BlobBuilder;
|
||||
globalThis.MozBlobBuilder = BlobBuilder;
|
||||
} 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;
|
||||
}
|
||||
}
|
||||
|
||||
// Marcar como adicionado
|
||||
window.__blobBuilderPolyfillAdded = true;
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
// Log apenas se console está disponível
|
||||
if (console && console.log) {
|
||||
console.log('✅ Polyfill BlobBuilder adicionado globalmente (via app.html)');
|
||||
// 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.getAttribute('data-theme')) {
|
||||
html.setAttribute('data-theme', 'aqua');
|
||||
}
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover">
|
||||
|
||||
Reference in New Issue
Block a user