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>
<title>Dicionário de Dados - TOTVS</title> .release-notes-wrapper {
<style>
* {font-family: Arial, sans-serif;
marginpadding: 020px;
}
padding: 0;.header {
box-sizingbackground: border-box#667eea;
}
color: white;
bodypadding: {15px;
fontborder-familyradius: 'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif5px;
margin-bottom: 15px;
}
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);.metadata {
min-heightbackground: 100vh#f4f5f7;
padding: 20px10px;
}
border-radius: 5px;
.release-notes-container {margin-bottom: 15px;
}
max-width: 1600px;</style>
</head>
<body>
<div class="release-notes-wrapper">
margin: 0 auto;
<div class="header">
background: white;<h1 id="page-title">Release Notes</h1>
</div>
border-radius: 16px;
<div class="metadata">
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); <strong>Versão:</strong> <span id="version-display">-</span>
</div>
overflow: hidden;
<div id="widget-container"></div>
}</div>
<script>
.header(function() {
background: linear-gradient(135deg, #0A2333 0%, #004D80 50%, #007BFF 100%);
// Mapeamento de versões para Document IDs do Google Docs
color: white;
// ATUALIZE ESTE MAPEAMENTO com os IDs reais dos seus documentos
padding: 40px 50px;
const versionToDocId = position: relative;{
overflow: hidden;
'12.1.2511.2': '1gLo16QDT99iGdaoKyFHBW1n5jF-gt-awBjnSQrBZa3c',
}
'12.1.2511.1': 'DOCUMENT_ID_AQUI',
.header::before {
content'12.1.2507.9': 'DOCUMENT_ID_AQUI';,
position: absolute;
// Adicione mais mapeamentos aqui
top: -50%;
};
right: -10%;
// Função para obter versão width:da 800px;página
height: 800px; function getPageVersion() {
background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
// Tenta múltiplas formas
border-radius: 50%;
const selectors = }[
.header::after {
'h1#title-text',
content: '';
'.page-title',
position: absolute;
bottom: -30%;
'h1',
left: -5%;
'[data-page-title]'
width: 600px;
height: 600px];
background: radial-gradient(circle, rgba(255,255,255,0.08) 0%, transparent 70%);
border-radius: 50%;
for (const selector of selectors) }{
.header-content {
const element = document.querySelector(selector);
position: relative;
z-index: 1;
if (element) {
display: flex;
let version align-items: center= element.textContent.trim();
gap: 30px;
}
// Limpar prefixos
.totvs-logo {
display: flex;
version = version.replace(/^Release Notes\s*[-:]?\s*/i, '').trim();
align-items: center;
if (version gap: 15px;&& /^\d+\.\d+\.\d+/.test(version)) {
flex-shrink: 0;
}
return version;
.totvs-icon {
width: 60px;}
height: 60px;
}
background: white;
}
border-radius: 12px;
display: flex;
align-items // Fallback: center;
URL
const urlParams = justify-content: centernew URLSearchParams(window.location.search);
box-shadow: 0 8px 20pxreturn rgba(0, 0, 0, 0.3)urlParams.get('title') || null;
transition:}
transform 0.3s ease;
}
// Obter versão
.totvs-icon:hover {
const version transform: scale(1.05) rotate(5deg= getPageVersion();
}
.totvs-icon svgif (!version) {
width: 38px;
document.getElementById('widget-container').innerHTML =
height: 38px;
}
'<p style="color: red;">❌ Versão
não identificada. Certifique-se de que o título da .totvs-text {
página contém a versão.</p>';
font-size: 32pxreturn;
font-weight: 700;}
letter-spacing: 3px;
text-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
// Atualizar display
document.getElementById('version-display').textContent = }version;
.header-title {
flex: 1document.getElementById('page-title').textContent = `Release Notes - ${version}`;
margin-left: 30px;
padding-left: 30px;
// Obter Document ID
border-left: 3px solid rgba(255, 255, 255, 0.4)const docId = versionToDocId[version];
}
.header h1if (!docId) {
margin: 0;
document.getElementById('widget-container').innerHTML =
font-size: 36px;
font-weight`<p style="color: 600orange;
">⚠️ Documento não encontrado para versão ${version}.
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
Adicione o mapeamento no line-height: 1.2código HTML.</p>`;
}
return;
.header-subtitle {}
margin-top: 8px;
// Construir font-size: 16px;
URL do Google Doc
const opacity: 0.9;
googleDocUrl = `https://docs.google.com/document/d/${docId}/edit?usp=sharing`;
font-weight: 300;
}
// Criar Widget Connector
(para modo de edição)
.info-bar {
const widgetCode background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
padding: 25px 50px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 25px;
border-bottom: 2px solid #dee2e6;
}
.info-card {
display: flex;
align-items: center;
gap: 12px;
background: white;
padding: 15px 20px;
border-radius: 10px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
transition: all 0.3s ease;
}
.info-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
}
.info-icon {
font-size: 24px;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #007BFF 0%, #0052CC 100%);
color: white;
border-radius: 8px;
flex-shrink: 0;
}
.info-content {
flex: 1;
}
.info-label {
font-size: 12px;
color: #6c757d;
text-transform: uppercase;
letter-spacing: 0.5px;
font-weight: 600;
margin-bottom: 4px;
}
.info-value {
font-size: 16px;
color: #0A2333;
font-weight: 600;
}
.action-bar {
padding: 25px 50px;
background: #ffffff;
border-bottom: 1px solid #e9ecef;
display: flex;
align-items: center;
gap: 15px;
}
.btn-primary {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 14px 28px;
background: linear-gradient(135deg, #007BFF 0%, #0052CC 100%);
color: white;
text-decoration: none;
border-radius: 10px;
font-weight: 600;
font-size: 15px;
transition: all 0.3s ease;
box-shadow: 0 4px 15px rgba(0, 123, 255, 0.3);
border: none;
cursor: pointer;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 6px 25px rgba(0, 123, 255, 0.4);
background: linear-gradient(135deg, #0052CC 0%, #003d99 100%);
}
.btn-primary:active {
transform: translateY(0);
}
.btn-icon {
font-size: 18px;
}
.widget-container {
margin: 0;
border: none;
border-radius: 0;
overflow: hidden;
min-height: 800px;
background: #ffffff;
position: relative;
}
.loading {
text-align: center;
padding: 80px 20px;
color: #6c757d;
font-size: 18px;
}
.loading::before {
content: '';
display: block;
width: 60px;
height: 60px;
margin: 0 auto 30px;
border: 5px solid #e9ecef;
border-top-color: #007BFF;
border-right-color: #007BFF;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.alert {
margin: 30px 50px;
padding: 25px 30px;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
line-height: 1.6;
}
.alert-error {
background: linear-gradient(135deg, #fee 0%, #fcc 100%);
color: #721c24;
border-left: 5px solid #dc3545;
}
.alert-warning {
background: linear-gradient(135deg, #fff3cd 0%, #ffe69c 100%);
color: #856404;
border-left: 5px solid #ffc107;
}
.alert-icon {
font-size: 24px;
margin-right: 12px;
vertical-align: middle;
}
#widget-placeholder {
padding: 0;
}
#widget-placeholder iframe {
border-radius: 0;
box-shadow: none;
display: block;
}
/* Instruções para símbolos - comentário no HTML */
.symbol-help {
display: none; /* Oculto por padrão, pode ser ativado para debug */
}
@media (max-width: 768px) {
body {
padding: 10px;
}
.header {
padding: 25px 20px;
}
.header-content {
flex-direction: column;
align-items: flex-start;
gap: 20px;
}
.header-title {
margin-left: 0;
padding-left: 0;
border-left: none;
border-top: 3px solid rgba(255, 255, 255, 0.4);
padding-top: 20px;
margin-top: 20px;
}
.header h1 {
font-size: 28px;
}
.totvs-text {
font-size: 24px;
}
.info-bar {
padding: 20px;
grid-template-columns: 1fr;
}
.action-bar {
padding: 20px;
flex-direction: column;
align-items: stretch;
}
.btn-primary {
width: 100%;
justify-content: center;
}
.alert {
margin: 20px;
padding: 20px;
}
}
</style>
<!--
===================================================================
COMO INSERIR SÍMBOLOS MANUALMENTE NO HTML
===================================================================
1. EMOJIS UNICODE (Mais fácil):
- Copie e cole diretamente: 📄 📁 📚 ✅ ❌ ⚠️ 🔄 💡
- Ou use códigos HTML: 📄 📁 📚 ✔ ✘ ⚠ ↻ 💡
2. ENTIDADES HTML:
- © = ©
- ® = ®
- ™ = ™
- = espaço não quebrável
- & = &
- < = <
- > = >
3. CÓDIGOS UNICODE (hexadecimal):
- 📄 = 📄
- 📁 = 📁
- 📚 = 📚
- ✅ = ✅
- ❌ = ❌
- ⚠ = ⚠️
- 🔄 = 🔄
- 💡 = 💡
4. FONT AWESOME (se disponível):
- <i class="fa fa-file"></i> = ícone de arquivo
- <i class="fa fa-folder"></i> = ícone de pasta
- <i class="fa fa-book"></i> = ícone de livro
5. SVG CUSTOMIZADO (mais controle):
- Veja exemplo do logo TOTVS no código
EXEMPLOS DE USO:
- Em texto: <span>📄 Documento</span>
- Em botões: <a href="#">📄 Abrir</a>
- Em JavaScript: document.innerHTML = '📄 Carregando...';
FERRAMENTAS ÚTEIS:
- https://emojipedia.org/ (buscar emojis)
- https://unicode-table.com/ (tabela Unicode completa)
- Windows: Win + . (abre seletor de emojis)
- Mac: Cmd + Ctrl + Espaço (abre seletor de emojis)
===================================================================
-->
</head>
<body>
<div class="release-notes-container">
<div class="header">
<div class="header-content">
<div class="totvs-logo">
<div class="totvs-icon">
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<polygon points="50,10 90,30 90,70 50,90 10,70 10,30"
fill="#007BFF"
stroke="#0052CC"
stroke-width="2"/>
<path d="M 30 50 L 50 30 L 70 50 L 50 70 Z"
fill="white"
opacity="0.9"/>
</svg>
</div>
<div class="totvs-text">TOTVS</div>
</div>
<div class="header-title">
<h1 id="page-title">Dicionário de Dados</h1>
<div class="header-subtitle">Documentação técnica e referência de versões</div>
</div>
</div>
</div>
<div class="info-bar">
<div class="info-card">
<div class="info-icon">📋</div>
<div class="info-content">
<div class="info-label">Versão</div>
<div class="info-value" id="version">Carregando...</div>
</div>
</div>
<div class="info-card">
<div class="info-icon">🕒</div>
<div class="info-content">
<div class="info-label">Última Atualização</div>
<div class="info-value" id="last-update">-</div>
</div>
</div>
<div class="info-card">
<div class="info-icon">📊</div>
<div class="info-content">
<div class="info-label">Status</div>
<div class="info-value" id="status">Ativo</div>
</div>
</div>
</div>
<div class="action-bar" id="links-container">
<!-- Links serão inseridos aqui -->
</div>
<div class="widget-container">
<div id="loading" class="loading">
Carregando documento...
</div>
<div id="error" class="alert alert-error" style="display: none;"></div>
<div id="warning" class="alert alert-warning" style="display: none;"></div>
<div id="widget-placeholder"></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 extractVersionFromTitle() {
let version = null;
const versionPattern = /(\d+\.\d+\.\d+(?:\.\d+)?)/;
// Método 1: Título da página (Confluence)
const pageTitle = document.querySelector('h1#title-text, .page-title, h1, [data-page-title]');
if (pageTitle) {
const titleText = pageTitle.textContent.trim();
const match = titleText.match(versionPattern);
if (match) {
version = match[1];
}
}
// Método 2: Meta tags
if (!version) {
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) {
version = match[1];
}
}
}
// Método 3: document.title
if (!version) {
const match = document.title.match(versionPattern);
if (match) {
version = match[1];
}
}
// Método 4: URL (fallback)
if (!version) {
const urlParams = new URLSearchParams(window.location.search);
const titleParam = urlParams.get('title');
if (titleParam) {
const match = decodeURIComponent(titleParam).match(versionPattern);
if (match) {
version = match[1];
}
}
}
return version;
}
// Função principal
function init() {
const version = extractVersionFromTitle();
if (!version) {
document.getElementById('error').style.display = 'block';
document.getElementById('error').innerHTML =
'<span class="alert-icon">❌</span><strong>Versão não identificada</strong><br>' +
'Certifique-se de que o título da página contém a versão no formato: "Dicionário de Dados 12.1.2503.14"';
document.getElementById('loading').style.display = 'none';
return;
}
// Atualizar interface
document.getElementById('version').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) {
showWarning(version);
return;
}
loadDocument(docId, version);
}
function showWarning(version) {
document.getElementById('warning').style.display = 'block';
document.getElementById('warning').innerHTML =
`<span class="alert-icon">⚠️</span><strong>Documento não encontrado para versão ${version}</strong><br>` +
`O documento pode ainda não ter sido criado no Google Drive ou o mapeamento precisa ser atualizado.<br><br>` +
`Para adicionar este documento ao mapeamento:<br>` +
`1. Certifique-se de que existe um Google Doc ou arquivo .txt com o nome "${version}" ou "${version}.txt" na pasta<br>` +
`2. Execute o script: <code>python generate_complete_mapping_with_txt.py</code><br>` +
`3. Atualize o objeto <code>versionToDocId</code> neste HTML com o novo Document ID`;
document.getElementById('loading').style.display = 'none';
}
function loadDocument(docId, version) {
// Construir URLs (funciona para Google Docs e arquivos .txt)
const googleDocUrl = `https://docs.google.com/document/d/${docId}/edit?usp=sharing`;
const previewUrl = `https://docs.google.com/document/d/${docId}/preview`;
// Criar botão de ação
const linksContainer = document.getElementById('links-container');
linksContainer.innerHTML = `
<a href="${googleDocUrl}" target="_blank" class="btn-primary">
<span class="btn-icon">📄</span>
<span>Abrir no Google Docs</span>
</a>
`;
// Criar Widget Connector ou iframe
const placeholder = document.getElementById('widget-placeholder');
// Verificar se está em modo de edição do Confluence
const isEditMode = window.location.href.includes('editpage.action') ||
window.location.href.includes('edit');
if (isEditMode) {
// 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>`;
placeholder.innerHTML = `
<div class="alert alert-warning" style="margin: 30px 50px;">
<span class="alert-icon">📋</span>
<strong>Código do Widget Connector:</strong>
<pre style="background: white; padding: 15px; border-radius: 8px; overflow-x: auto; font-size: 13px; margin-top: 15px; border: 1px solid #dee2e6;">${widgetCode}</pre>
<p style="margin-top: 15px; font-size: 14px;">
<span class="alert-icon">💡</span>
<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');
= `
<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>
`;
iframe.src = previewUrl;
// Se estiver em visualização, usar iframe
iframe.width = '100%';
const iframe = document.createElement('iframe');
iframe.heightsrc = '800';
googleDocUrl.replace('/edit', '/preview');
iframe.style.borderwidth = 'none100%';
iframe.style.borderRadiusheight = '0800';
iframe.style.allowborder = 'fullscreennone';
iframe.title = `Dicionário de Dados ${version}`iframe.style.borderRadius = '5px';
// Inserir widget
const container = placeholderdocument.appendChild(iframegetElementById('widget-container');
}
// Verificar se está em modo de edição (Confluence)
document.getElementById('loading').style.display = 'none';if (window.location.href.includes('editpage.action')) {
}
// Modo de edição: mostrar código do macro
// Executar quando a página carregar
if (document.readyState === 'loading') {
container.innerHTML = `<pre>${widgetCode}</pre><p>Cole o código acima no editor do Confluence usando o macro Widget Connector.</p>`;
} else {
document.addEventListener('DOMContentLoaded', init);
// Modo de }visualização: elseusar {iframe
initcontainer.appendChild(iframe);
}
})();
</script>
</body>
</html>
|
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas