VII WERMELINGER-FEST
Encontro da Família Wermelinger
Pesqueiro Portal do Vale — Duas Barras, RJ
26 de julho de 2009
' + t('search_error') + '
'; }); }
function setStatus(msg, loading) { $status.textContent = msg || ''; $status.classList.toggle('is-loading', !!loading); }
function t(key) { var lang = window.WM_CURRENT_LANG || 'pt'; var dict = (window.WM_I18N && window.WM_I18N[lang]) || {}; return dict[key] !== undefined ? dict[key] : key; }
function buildLunrQuery(raw) { var tokens = raw.split(/\s+/).filter(Boolean); return tokens.map(function (t) { var clean = t.replace(/[+\-^~*"():]/g, ''); if (!clean) return ''; return clean + '* ' + clean + '~1'; }).filter(Boolean).join(' '); }
function performSearch(query) { var hasQuery = query && query.length >= CONFIG.minQueryLength; var hasFilter = $filterY.value || $filterL.value; if (!hasQuery && !hasFilter) { $results.innerHTML = ''; setStatus('', false); $wrapper.classList.remove('has-query'); return; } $wrapper.classList.add('has-query'); ensureIndex().then(function () { if (!state.isReady) return; var hits = []; if (hasQuery) { try { var lunrQuery = buildLunrQuery(query); var raw = state.idx.search(lunrQuery); hits = raw.map(function (r) { var doc = state.docs.find(function (d) { return d.id === r.ref; }); return doc ? { doc: doc, score: r.score } : null; }).filter(Boolean); } catch (e) { var qLow = removeDiacritics(query).toLowerCase(); hits = state.docs.filter(function (d) { return removeDiacritics(d.title + ' ' + d.content).toLowerCase().indexOf(qLow) !== -1; }).map(function (d) { return { doc: d, score: 1 }; }); } } else { hits = state.docs.map(function (d) { return { doc: d, score: 0 }; }); } hits = hits.filter(function (h) { if ($filterY.value && h.doc.year !== $filterY.value) return false; if ($filterL.value && h.doc.labels.indexOf($filterL.value) === -1) return false; return true; }); renderResults(hits, query); }); }
function renderResults(hits, query) { if (hits.length === 0) { $results.innerHTML = '' + t('search_no_results') + '
'; setStatus('', false); return; } var top = hits.slice(0, CONFIG.maxResults); var html = top.map(function (h) { var d = h.doc; var snippet = makeSnippet(d.content, query || '', CONFIG.snippetLength); var labelHtml = d.labels.length ? d.labels.slice(0, 2).join(' \u00b7 ') : ''; var metaParts = []; if (d.year) metaParts.push(d.year); if (labelHtml) metaParts.push(labelHtml); return '' + highlight(d.title, query) + '
' + (metaParts.length ? '' : '') + '' + highlight(snippet, query) + '
'; }).join(''); if (hits.length > CONFIG.maxResults && query) { html += '' + t('search_view_all_prefix') + ' ' + hits.length + ' ' + t('search_view_all_suffix') + '
'; } $results.innerHTML = html; setStatus(hits.length + ' ' + (hits.length === 1 ? t('search_result_singular') : t('search_results_suffix')), false); }
// Hook chamado quando idioma muda
window.wmSearchOnLangChange = function (newLang) {
// Atualiza o option default dos selects
if ($filterY && $filterY.options[0]) $filterY.options[0].textContent = t('search_filter_year_all');
if ($filterL && $filterL.options[0]) $filterL.options[0].textContent = t('search_filter_label_all');
// Re-renderiza resultados se houver
if ($input && ($input.value.trim() || $filterY.value || $filterL.value)) { performSearch($input.value.trim()); }
};
var debouncedSearch = debounce(function () { performSearch($input.value.trim()); }, CONFIG.debounceMs);
$input.addEventListener('input', debouncedSearch);
$input.addEventListener('focus', function () { ensureIndex(); });
$clear.addEventListener('click', function () { $input.value = ''; $filterY.value = ''; $filterL.value = ''; performSearch(''); $input.focus(); });
$filterY.addEventListener('change', function () { performSearch($input.value.trim()); });
$filterL.addEventListener('change', function () { performSearch($input.value.trim()); });
$input.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); var q = $input.value.trim(); if (q.length >= CONFIG.minQueryLength) { window.location.href = CONFIG.searchPagePath + encodeURIComponent(q); } } if (e.key === 'Escape') { $input.value = ''; performSearch(''); } });
})();
//]]>