<div style="max-width:1200px; margin:0 auto; padding:16px; font-family: Arial, Helvetica, sans-serif; background:#ffffff;">
<div style="border:1px solid #dfe1e6; border-radius:8px; overflow:hidden;">
<div style="background:#0052CC; color:#fff; padding:14px 16px;">
<div style="display:flex; align-items:center; gap:12px;">
<img id="totvs-logo" alt="TOTVS"
style="display:none; height:28px; width:auto; background:#ffffff; border-radius:6px; padding:4px; border:1px solid rgba(255,255,255,0.35);" />
<div id="page-title" style="font-size:18px; font-weight:700;">Dicionário de Dados</div>
</div>
</div>
<div style="background:#f4f5f7; border-top:1px solid #dfe1e6; padding:12px 16px; display:flex; gap:12px; align-items:center; flex-wrap:wrap;">
<div style="display:flex; gap:8px; align-items:center;">
<div style="font-weight:700; color:#172b4d;">Versão:</div>
<div id="version-display" style="background:#fff; border:1px solid #dfe1e6; border-radius:6px; padding:4px 10px; font-weight:700; color:#172b4d;">-</div>
</div>
<div style="display:flex; gap:8px; align-items:center;">
<div style="font-weight:700; color:#172b4d;">Atualizado:</div>
<div id="last-update" style="background:#fff; border:1px solid #dfe1e6; border-radius:6px; padding:4px 10px; color:#172b4d;">-</div>
</div>
<a id="doc-link" href="#" target="_blank"
style="display:none; margin-left:auto; text-decoration:none; background:#ffffff; color:#0052CC; border:1px solid #0052CC; border-radius:6px; padding:6px 10px; font-weight:700;">
Abrir no GitHub
</a>
</div>
<div id="widget-container" style="min-height:520px; background:#ffffff;">
<div style="padding:18px; color:#6b778c;">Carregando documento...</div>
</div>
</div>
</div>
<script>
(function() {
const GITHUB_OWNER = 'Juansimeoni';
const GITHUB_REPO = 'ReleaseDatasul';
const GITHUB_BRANCH = 'main';
const GITHUB_PATH_PREFIX = '';
const GITHUB_RAW_BASE = 'https://raw.githubusercontent.com/' + GITHUB_OWNER + '/' + GITHUB_REPO + '/' + GITHUB_BRANCH + '/';
const GITHUB_BLOB_BASE = 'https://github.com/' + GITHUB_OWNER + '/' + GITHUB_REPO + '/blob/' + GITHUB_BRANCH + '/';
const GITHUB_API_BASE = 'https://api.github.com/repos/' + GITHUB_OWNER + '/' + GITHUB_REPO + '/';
function buildRepoPath(version) {
const filename = version + '.txt';
return GITHUB_PATH_PREFIX ? (GITHUB_PATH_PREFIX + '/' + filename) : filename;
}
function setLastUpdateText(text) {
const el = document.getElementById('last-update');
if (el) el.textContent = text || '-';
}
function formatDatePtBr(value) {
try {
const d = new Date(value);
if (isNaN(d.getTime())) return null;
return d.toLocaleString('pt-BR');
} catch (e) {
return null;
}
}
function tryFetchCommitDate(pathInRepo) {
const url = GITHUB_API_BASE + 'commits?path=' + encodeURIComponent(pathInRepo) +
'&sha=' + encodeURIComponent(GITHUB_BRANCH) + '&per_page=1';
return fetch(url, { cache: 'no-store' })
.then(function(resp) { if (!resp.ok) return null; return resp.json(); })
.then(function(arr) {
if (!arr || !arr.length) return null;
const c = arr[0] || {};
const commit = c.commit || {};
const committer = commit.committer || {};
const author = commit.author || {};
return committer.date || author.date || null;
})
.catch(function() { return null; });
}
function getPageVersion() {
const versionPattern = /(\d+\.\d+\.\d+(?:\.\d+)?)/;
const pageTitleElement = document.querySelector('h1#title-text, .page-title, h1, [data-page-title]');
if (pageTitleElement) {
const titleText = (pageTitleElement.textContent || '').trim();
const match = titleText.match(versionPattern);
if (match) return match[1];
}
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];
}
const titleMatch = (document.title || '').match(versionPattern);
if (titleMatch) return titleMatch[1];
return null;
}
function getPageId() {
try {
const qs = new URLSearchParams(window.location.search);
const fromQuery = qs.get('pageId');
if (fromQuery) return String(fromQuery);
} catch (e) {}
try {
if (window.AJS && AJS.params && AJS.params.pageId) return String(AJS.params.pageId);
} catch (e) {}
return null;
}
function setTotvsLogo() {
const logoEl = document.getElementById('totvs-logo');
if (!logoEl) return;
const pageId = getPageId();
const filename = 'totvs logo.jpg';
const encodedName = encodeURIComponent(filename);
const candidates = [];
if (pageId) {
candidates.push('/download/thumbnails/' + pageId + '/' + encodedName + '?api=v2');
candidates.push('/download/attachments/' + pageId + '/' + encodedName);
}
candidates.push('/download/attachments/649987902/' + encodedName);
let idx = 0;
function tryNext() {
if (idx >= candidates.length) return;
const url = candidates[idx++];
const probe = new Image();
probe.onload = function() { logoEl.src = url; logoEl.style.display = 'inline-block'; };
probe.onerror = function() { tryNext(); };
probe.src = url;
}
tryNext();
}
setTotvsLogo();
const container = document.getElementById('widget-container');
const docLink = document.getElementById('doc-link');
function renderNotAvailable() {
container.innerHTML =
'<div style="padding:18px; border-left:4px solid #FFAB00; background:#FFFAE6; color:#172b4d;">' +
'<div style="font-weight:700;">Esse documento ainda não está disponível no momento.</div>' +
'</div>';
}
function getVersionOverrideFromQuery() {
try {
const qs = new URLSearchParams(window.location.search);
const v = qs.get('version') || qs.get('versao');
if (v && /^\d+\.\d+\.\d+(?:\.\d+)?$/.test(v)) return v;
} catch (e) {}
return null;
}
const versionResolved = getVersionOverrideFromQuery() || getPageVersion();
if (!versionResolved) {
container.innerHTML =
'<div style="padding:18px; border-left:4px solid #DE350B; background:#FFEBE6; color:#172b4d;">' +
'<div style="font-weight:700; margin-bottom:6px;">Versão não identificada</div>' +
'<div>Coloque a versão no título da página, ex: <b>Dicionário de Dados 12.1.2503.14</b></div>' +
'</div>';
return;
}
const vEl = document.getElementById('version-display');
const tEl = document.getElementById('page-title');
if (vEl) vEl.textContent = versionResolved;
if (tEl) tEl.textContent = 'Dicionário de Dados ' + versionResolved;
setLastUpdateText(new Date().toLocaleString('pt-BR'));
const pathInRepo = buildRepoPath(versionResolved);
const rawUrl = GITHUB_RAW_BASE + pathInRepo;
const blobUrl = GITHUB_BLOB_BASE + pathInRepo;
docLink.href = blobUrl;
docLink.style.display = 'inline-block';
container.innerHTML = '<div style="padding:18px; color:#6b778c;">Carregando conteúdo do GitHub...</div>';
fetch(rawUrl, { cache: 'no-store' })
.then(function(resp) {
if (!resp.ok) return { ok: false, text: '', lastModified: null };
const lm = resp.headers ? resp.headers.get('last-modified') : null;
return resp.text().then(function(t) { return { ok: true, text: t, lastModified: lm }; });
})
.then(function(res) {
const txt = ((res && res.text) ? res.text : '').trim();
if (!txt) { renderNotAvailable(); return; }
const lm = res && res.lastModified ? formatDatePtBr(res.lastModified) : null;
if (lm) setLastUpdateText(lm);
tryFetchCommitDate(pathInRepo).then(function(commitIso) {
const formatted = commitIso ? formatDatePtBr(commitIso) : null;
if (formatted) setLastUpdateText(formatted);
});
const pre = document.createElement('pre');
pre.style.whiteSpace = 'pre-wrap';
pre.style.margin = '0';
pre.style.padding = '16px';
pre.style.borderTop = '1px solid #dfe1e6';
pre.style.fontFamily = 'Consolas, Menlo, Monaco, "Courier New", monospace';
pre.textContent = txt;
container.innerHTML = '';
container.appendChild(pre);
})
.catch(function() {
renderNotAvailable();
});
})();
</script> |