Histórico da Página
| HTML |
|---|
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Arial, sans-serif; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); min-height: 100vh; padding: 20px; } .release-notes-wrapper { max-width: 1400px; margin: 0 auto; background: white; border-radius: 12px; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15); overflow: hidden; } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px 40px; border-radius: 0; margin-bottom: 0; position: relative; overflow: hidden; } .header::before { content: ''; position: absolute; top: -50%; right: -10%; width: 500px; height: 500px; background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%); border-radius: 50%; } .header h1 { margin: 0; font-size: 32px; font-weight: 600; } .metadata { background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); padding: 20px 40px; border-bottom: 1px solid #dee2e6; display: flex; align-items: center; gap: 30px; flex-wrap: wrap; } .metadata-item { display: flex; align-items: center; gap: 10px; } .metadata-item strong { color: #495057; font-weight: 600; } .metadata-item span { color: #0A2333; background: white; padding: 6px 14px; border-radius: 6px; font-weight: 600; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); } #widget-container { padding: 0; min-height: 700px; background: #ffffff; } .message-box { padding: 40px; text-align: center; background: linear-gradient(135deg, #fff3cd 0%, #ffe69c 100%); margin: 30px; border-radius: 10px; border-left: 5px solid #ffc107; box-shadow: 0 4px 12px rgba(255, 193, 7, 0.2); } .message-box.error { background: linear-gradient(135deg, #fee 0%, #fcc 100%); border-left-color: #dc3545; box-shadow: 0 4px 12px rgba(220, 53, 69, 0.2); } .message-box h2 { color: #856404; margin-bottom: 15px; font-size: 24px; } .message-box.error h2 { color: #721c24; } .message-box p { color: #856404; font-size: 16px; line-height: 1.6; } .message-box.error p { color: #721c24; } .message-icon { font-size: 48px; margin-bottom: 15px; display: block; } iframe { border: none; width: 100%; height: 800px; display: block; } .loading { text-align: center; padding: 60px 20px; color: #6c757d; font-size: 18px; } .loading::before { content: ''; display: block; width: 50px; height: 50px; margin: 0 auto 20px; border: 4px solid #e9ecef; border-top-color: #667eea; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @media (max-width: 768px) { body { padding: 10px; } .header { padding: 20px; } .header h1 { font-size: 24px; } .metadata { padding: 15px 20px; flex-direction: column; align-items: flex-start; } } </style> </head> <body> <div class="release-notes-wrapper"> <div class="header"> <h1 id="page-title">Dicionário de Dados</h1> </div> <div class="metadata"> <div class="metadata-item"> <strong>Versão:</strong> <span id="version-display">Carregando...</span> </div> <div class="metadata-item"> <strong>Última atualização:</strong> <span id="last-update">-</span> </div> </div> <div id="widget-container"> <div class="loading">Carregando documento...</div> </div> </div> <script> (function() { // Mapeamento de versões para Document IDs do Google Docs e arquivos .txt // Gerado automaticamente a partir da pasta: 141aJRhZeYZca4QCBnou6-00WzRLkBYbs // Data: 2025-12-16 // Total: 62 versões (2 Google Docs + 60 arquivos .txt - todos funcionando!) const versionToDocId = { // Google Docs (2) '12.1.2503.14': '13QaSU_lP1_haWnOYl7UjPvsKfi3AaPdKwciYHrceEt4', '12.1.2511.2': '1gLo16QDT99iGdaoKyFHBW1n5jF-gt-awBjnSQrBZa3c', // Arquivos .txt (60) - funcionando diretamente no Widget Connector '12.1.2503': '1BRsJyHOHQNOEpAfIm5ndOn6z_0gffbaF', '12.1.2503.15': '12ejZuDikegyaH2n16n2Hpas1Z3VEjc5e', '12.1.2503.16': '15BkT50wXw7kJccfw4iRB-LVGQyTzQVf1', '12.1.2503.17': '1L4FUKbDjnAs29rK0ymfMgRVJPPVtzYdW', '12.1.2503.18': '1LNSFua5jsEw9m2D4X7lBVsbk6qXsG3cm', '12.1.2507': '1pT42y90cnf2UY2gK5k035jEFVkIs7s-n', '12.1.2507.1': '1lo7KiRJGWYJFfH-Xqv-dvNcRoIy6ecj3', '12.1.2507.2': '1xe9L8cCurcXIw5tzxe4H9KNzFgpIObA1', '12.1.2507.3': '1P9jEM2cgtUkyfdK5bsKlSvFCk_SqpMqU', '12.1.2507.4': '12Qk7mEnEe2iIsE-nFUUGOmbt_t8rwjn-', '12.1.2507.5': '1ljgI7Re2mT3yv7TgnZLOZv_n0vzzJTxF', '12.1.2507.6': '1lwblHVXZUKF8qgdajVB2Va41fxpJkZ9X', '12.1.2507.7': '1LWO9GFD8iO6HQEJn_wBybP1EdZ2AZSsD', '12.1.2507.8': '1bhB3Pig68EAvmXGoUptLYnJPEnGW4fVr', '12.1.2507.9': '1shjpLbeGfQmrV6DMtm4EuIvqdhHTuEIy', '12.1.2507.10': '1wU40XkkEMRqw4Ieanf5QrkBz8SwqISzj', '12.1.2507.11': '1goM3M1WCXvtdx46fY7ZmeeDtwpnvbld5', '12.1.2507.12': '15r-G5LdQpPn9gcktkpYVPQS1exs6Io8t', '12.1.2507.13': '1xVHx0mjDewGUVwIGR8GWqTMqX1R_Cj21', '12.1.2507.14': '1uFblMZhJaYPFrGKtFCC9bAa-2xxtXmi_', '12.1.2507.15': '1vNN6ONnbq1ApNJy6uzGW_hZ27HvhW7Dd', '12.1.2507.16': '1g27jhn6ZEliSZhAJ7Co9FUFLtNBfqVHH', '12.1.2507.17': '1LkwBvxVy_oykf3gEAwlf2eRn0NMiMnL1', '12.1.2507.18': '1he66XmpG6YhgKlxtMv3xik6KccuMKLeS', '12.1.2511': '1gPiO2P_mF0wpLX-2g5oFBqi4QS630wKM', '12.1.2511.1': '1yv4EZZKrfPgI-RWggMfBANtx6dL8owhA', '12.1.2511.3': '14Zd-Npn6VGioc1wsokDL4vfPRVzhb-AY', '12.1.2511.4': '1VjoqjmjqCokx4Kv5QDTDa9wZsF1QwICY', '12.1.2511.5': '1evpMFJmgDUFX__dC6W83LZqKQXjmy88s', '12.1.2511.6': '1_e3AgOsc9Oqy-JoZhus-zyU-961karvw', '12.1.2511.7': '19TKZ4fYof03H0pdzldQnV7_ZYjxowkNr', '12.1.2511.8': '12ivR5sJUwVwcRJr0Q_aHBT_y4JwlnTd4', '12.1.2511.9': '1Exio4F5z2lo6HnEnLpkDquuu8HUiD3C-', '12.1.2511.10': '1NRs4aZct5OVmSiXDPgMmUw9iFURlC6Od', '12.1.2511.11': '1AAOtpmIahaHaYYUtUFL3OJGJ07dTKLU_', '12.1.2511.12': '1c19qwsUQdWb_H58qcamAQ6Fz9Bwg78Bs', '12.1.2511.13': '1CS-VXZJLzPSBjov0r4JVAcTPE5daaE4M', '12.1.2511.14': '1dei-4_gijuPsGzSQKZpIh9DMCYJ2pw8j', '12.1.2511.15': '1qDv9Zm_0CJiKl6iJBzxVxwFCoHNZBky4', '12.1.2511.16': '1H51vcp3ierWZE0XB1QEtzUnm0J-0uEVp', '12.1.2511.17': '1OwFzjD6j4_OlDi9x7f5xqqoBo_eKY1rd', '12.1.2511.18': '1iaMmEP6yDzHR4oTM_SjM2obkaUz1zrBA', '12.1.2603.1': '19iieXcJNDoIM8lp09Zd-faD22AWepfTC', '12.1.2603.2': '1DFR1cWRUVm3PsPQsVbuJySIjxMIy085L', '12.1.2603.3': '1PLCl8hhtuvnW8Q9WDug9NH9F_qO-CUoq', '12.1.2603.4': '1qFmELYGulpQizNrXFBCpHdcLOSC5LrsZ', '12.1.2603.5': '1Q8ZSMOooNeSgmfdEucEsRO6P8z370enZ', '12.1.2603.6': '1P5-nq151raX-NhYufnTRrZMZyeAKsSp2', '12.1.2603.7': '1VfNdP7lRvi37ZKSOzX1KyEp6dK_t0I-N', '12.1.2603.8': '1pxJPuMKfOWXrkwS7zzmm_3i_GerA44Zi', '12.1.2603.9': '1evoXM_3WvL4SGVkwB8EYgwXuD6E4Asmw', '12.1.2603.10': '18tytubaH1oywQoWyAycMM-qMq_347CHb', '12.1.2603.11': '1ORyeFI8qYQynt20Ud66XLKewYQoVdLA6', '12.1.2603.12': '1gDfH7fyZSUGl90ikqO3yXsZGm_EXC4PW', '12.1.2607.1': '1ruRPs4fBJrKpLoECMGh0X5Ca4Bc_hfPb', '12.1.2607.2': '1njYTB38Ts6_dAZKvkqdvdQcPx99HTRml', '12.1.2607.3': '1uQR-2_JLet0Cyo7K6XaClDaXqxBu7udV', '12.1.2607.4': '1G41yiKUzoWgIrbQATlhYntb73FSH9U76', '12.1.2607.5': '1_BfY0poM0AeAFy39vK-XZmBhEafIzzBf', '12.1.2607.6': '1cm7WuMWrQYjGDdeMdmdAqIFX5ugROaHY', }; // Função para extrair versão do título "Dicionário de Dados 12.1.2503.14" function getPageVersion() { const versionPattern = /(\d+\.\d+\.\d+(?:\.\d+)?)/; // Método 1: Título da página (Confluence) const selectors = [ 'h1#title-text', '.page-title', 'h1', '[data-page-title]' ]; for (const selector of selectors) { const element = document.querySelector(selector); if (element) { const text = element.textContent.trim(); const match = text.match(versionPattern); if (match) { return match[1]; } } } // Método 2: Meta tags const metaTitle = document.querySelector('meta[property="og:title"], meta[name="title"]'); if (metaTitle) { const titleText = metaTitle.getAttribute('content') || ''; const match = titleText.match(versionPattern); if (match) { return match[1]; } } // Método 3: document.title const titleMatch = document.title.match(versionPattern); if (titleMatch) { return titleMatch[1]; } // Método 4: URL (fallback) const urlParams = new URLSearchParams(window.location.search); const titleParam = urlParams.get('title'); if (titleParam) { const match = decodeURIComponent(titleParam).match(versionPattern); if (match) { return match[1]; } } return null; } // Obter versão const version = getPageVersion(); const container = document.getElementById('widget-container'); if (!version) { container.innerHTML = ` <div class="message-box error"> <span class="message-icon">❌</span> <h2>Versão não identificada</h2> <p>Certifique-se de que o título da página contém a versão no formato:<br> <strong>"Dicionário de Dados 12.1.2503.14"</strong></p> </div> `; return; } // Atualizar display document.getElementById('version-display').textContent = version; document.getElementById('page-title').textContent = `Dicionário de Dados ${version}`; document.getElementById('last-update').textContent = new Date().toLocaleString('pt-BR'); // Obter Document ID const docId = versionToDocId[version]; if (!docId) { container.innerHTML = ` <div class="message-box"> <span class="message-icon">📋</span> <h2>Release Notes ainda não foi expedido para essa versão</h2> <p>O Release Notes para a versão <strong>${version}</strong> ainda não foi expedido.<br> Aguarde a expedição ou verifique se a versão está correta.</p> </div> `; return; } // Construir URL do Google Doc const googleDocUrl = `https://docs.google.com/document/d/${docId}/edit?usp=sharing`; const previewUrl = `https://docs.google.com/document/d/${docId}/preview`; // Verificar se está em modo de edição (Confluence) if (window.location.href.includes('editpage.action') || window.location.href.includes('edit')) { // Modo de edição: mostrar código do macro Widget Connector const widgetCode = `<ac:structured-macro ac:name="widget" ac:schema-version="1"> <ac:parameter ac:name="url">${googleDocUrl}</ac:parameter> <ac:parameter ac:name="width">100%</ac:parameter> <ac:parameter ac:name="height">800</ac:parameter> </ac:structured-macro>`; container.innerHTML = ` <div style="padding: 30px 40px;"> <div style="background: #f4f5f7; padding: 20px; border-radius: 8px; margin-bottom: 15px;"> <h3 style="margin-bottom: 15px; color: #495057;">📋 Código do Widget Connector:</h3> <pre style="background: white; padding: 15px; border-radius: 5px; overflow-x: auto; font-size: 13px; border: 1px solid #dee2e6;">${widgetCode}</pre> </div> <p style="color: #6c757d; font-size: 14px;"> 💡 <strong>Instruções:</strong> Copie o código acima e cole no editor do Confluence usando o macro "Widget Connector". </p> </div> `; } else { // Modo de visualização: usar iframe const iframe = document.createElement('iframe'); iframe.src = previewUrl; iframe.width = '100%'; iframe.height = '800'; iframe.allow = 'fullscreen'; iframe.title = `Dicionário de Dados ${version}`; container.innerHTML = ''; container.appendChild(iframe); } })(); </script> </body> </html> |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas