"use strict"; import Tablesort from 'tablesort'; import CarouselAd from '@burguillosinfo/carousel-ad' window.Tablesort = require('tablesort'); require('tablesort/src/sorts/tablesort.number'); let fakeSearchInput let searchMobile document.addEventListener("DOMContentLoaded", function () { const menu_expand = document.querySelector('a.menu-expand'); const mobile_foldable = document.querySelector('nav.mobile-foldable'); const transparentFullscreenHide = document.querySelector('div.transparent-fullscreen-hide'); const contentsWithoutMenu = document.querySelector('div.contents-without-menu') const tables = document.querySelectorAll('table') fillFarmaciaGuardia(); new CarouselAd().run() addEasterEggAnimation() if (menu_expand !== null && mobile_foldable !== null && transparentFullscreenHide !== null && contentsWithoutMenu !== null) { mobile_foldable.toggleAttribute('aria-hidden') if (mobile_foldable.getAttribute('aria-hidden') !== null) { mobile_foldable.setAttribute('aria-hidden', true); } transparentFullscreenHide.addEventListener('click', () => { mobile_foldable.classList.remove('show'); transparentFullscreenHide.classList.remove('show'); menu_expand.classList.remove('active'); contentsWithoutMenu.removeAttribute('aria-hidden') mobile_foldable.setAttribute('aria-hidden', true) }); menu_expand.addEventListener('click', () => { menu_expand.classList.toggle('active'); mobile_foldable.classList.toggle('show'); transparentFullscreenHide.classList.toggle('show'); contentsWithoutMenu.toggleAttribute('aria-hidden') if (contentsWithoutMenu.getAttribute('aria-hidden') !== null) { contentsWithoutMenu.setAttribute('aria-hidden', true); } mobile_foldable.toggleAttribute('aria-hidden') if (mobile_foldable.getAttribute('aria-hidden') !== null) { mobile_foldable.setAttribute('aria-hidden', true); } }); } for (const table of tables) { const header = table.querySelector('tr'); if (header !== null) { header.setAttribute('data-sort-method', 'none') for (const th of header.querySelectorAll('th')) { if (th.getAttribute('data-sort-method') == null) { th.setAttribute('data-sort-method', 'thead') } } } new Tablesort(table) } if (window !== undefined && window.Android !== undefined) { executeAndroidExclusiveCode(Android) } searchMobile = document.querySelector('nav.mobile-shortcuts div.search') if (searchMobile !== null) { fakeSearchInput = searchMobile.querySelector('input') addListenersSearch() } }, false); function fillFarmaciaGuardia() { const farmaciaName = document.querySelector('#farmacia-name'); const farmaciaAddress = document.querySelector('#farmacia-address'); if (farmaciaName !== null || farmaciaAddress !== null) { const port = _port() const url = new URL(window.location.protocol + "//" + window.location.hostname + port + '/farmacia-guardia.json'); fetch(url).then(async (res) => { const farmacia = await res.json() if (farmaciaName !== null) { farmaciaName.innerText = farmacia.name; farmaciaAddress.innerText = farmacia.address; } }) } } function addListenersSearch() { const searchInPage = document.querySelector('div.search-in-page') if (searchMobile !== null) { const searchIcon = searchMobile.querySelector('a.search-icon') searchIcon.addEventListener('click', (e) => { const searchOverlay = document.querySelector('div.search-overlay'); const searchInput = searchOverlay.querySelector('div.search input'); searchInput.value = fakeSearchInput.value; onSearchChange(e) onFakeSearchClick(e) return true; }) fakeSearchInput.addEventListener('keyup', (e) => { if (searchInPage === null) { return; } if (fakeSearchInput.value === "") { searchInPage.classList.remove('active') } else { searchInPage.classList.add('active') } if (e.keyCode !== 13) { return false; } const searchOverlay = document.querySelector('div.search-overlay'); const searchInput = searchOverlay.querySelector('div.search input'); searchInput.value = fakeSearchInput.value; onSearchChange(e) onFakeSearchClick(e) return true; }); } const nextResult = searchInPage.querySelector('a.down'); const prevResult = searchInPage.querySelector('a.up'); window.addEventListener("keydown", (e) => { if (e.key.toLowerCase() === "f" && e.ctrlKey) { openAllDetails() } }); window.addEventListener("blur", (e) => { openAllDetails() }) if (nextResult !== null && prevResult !== null) { nextResult.addEventListener('click', () => { searchInWebsite(fakeSearchInput.value, true); }); prevResult.addEventListener('click', () => { searchInWebsite(fakeSearchInput.value, false); }); } const exitSearch = document.querySelector('a.exit-search') const searchOverlay = document.querySelector('div.search-overlay'); const searchInput = searchOverlay.querySelector('div.search input'); fakeSearchInput.value = searchInput.value; exitSearch.addEventListener('click', onExitSearch) const search = document.querySelector('div.search-overlay div.search input'); if (search !== null) { search.addEventListener('change', onSearchChange); } const searchIconDesktop = document.querySelector('nav.desktop a.search-icon'); if (searchIconDesktop !== null) { searchIconDesktop.addEventListener('click', (e) => { onFakeSearchClick(e) }) } } function searchInWebsite(value, isToBottom) { window.find(value, false, !isToBottom, true) const selection = window.getSelection() openAllDetails() if (selection.anchorNode === null) { const pageContents = document.querySelector('div.page-contents'); pageContents.focus() searchInWebsite(value, isToBottom) } const anchorNode = selection.anchorNode.parentNode if (anchorNode.tagName !== null && anchorNode.tagName === "INPUT") { const pageContents = document.querySelector('div.page-contents'); pageContents.focus() searchInWebsite(value, isToBottom) } if (anchorNode !== null) { const pageContents = document.querySelector('div.page-contents'); const offsetTop = _getOffsetTopWithNParent(anchorNode, pageContents); pageContents.scroll(0, offsetTop - 150) } } function openAllDetails() { for (const detail of document.querySelectorAll('details')) { detail.open = true } } function _getOffsetTopWithNParent(element, nParent, _carry = 0) { if (element === null) { return null; } if (element === nParent) { return _carry; } _carry += element.offsetTop return _getOffsetTopWithNParent(element.offsetParent, nParent, _carry) } function _port() { let port = window.location.port; if (port !== '') { port = ':' + port } return port; } function onSearchChange() { const search = document.querySelector('div.search-overlay div.search input'); const searchResults = document.querySelector('div.search-overlay div.search-results'); if (search === null || searchResults === null) { return; } const query = search.value; fakeSearchInput.value = search.value const port = _port() const url = new URL(window.location.protocol + "//" + window.location.hostname + port + '/search.json'); url.searchParams.set('q', query); fetch(url).then(async (res) => { const json = await res.json() if (!json.ok) { noResults(searchResults); return } console.log(json.searchObjects.length) if (json.searchObjects.length < 1) { noResults(searchResults); return; } showResults(searchResults, json.searchObjects); }) search.focus() } function showResults(searchResults, searchObjects) { searchResults.innerHTML = ""; for (let searchObject of searchObjects) { const searchResultContainer = document.createElement('div') searchResultContainer.classList.add('search-result') const rowTitleUrlImageDiv = document.createElement('div'); rowTitleUrlImageDiv.classList.add('row-title-url-image'); const columnTitleUrl = document.createElement('div'); columnTitleUrl.classList.add('column-title-url'); const img = document.createElement('img') const title = document.createElement('b') const url = document.createElement('a') const content = document.createElement('p') title.innerText = searchObject.title let port = window.location.port; if (port !== '') { port = ':' + port } if (searchObject.url.match(/^\//)) { searchObject.url = window.location.protocol + "//" + window.location.hostname + port + searchObject.url } let urlImage = searchObject.urlImage; if (urlImage !== null && urlImage.match(/^\//)) { urlImage = window.location.protocol + "//" + window.location.hostname + port + urlImage } if (urlImage !== null) { img.alt = "" img.src = urlImage } url.href = searchObject.url url.innerText = searchObject.url content.innerText = searchObject.content if (urlImage !== null) { rowTitleUrlImageDiv.appendChild(img) } columnTitleUrl.appendChild(title); columnTitleUrl.appendChild(document.createElement('br')) columnTitleUrl.appendChild(url) rowTitleUrlImageDiv.appendChild(columnTitleUrl) searchResultContainer.appendChild(rowTitleUrlImageDiv) searchResultContainer.appendChild(content) searchResults.appendChild(searchResultContainer) } } function noResults(searchResults) { searchResults.innerHTML = "" const p = document.createElement('p') p.innerText = 'No se han encontrado resultados.' searchResults.appendChild(p) } function onExitSearch() { const searchOverlay = document.querySelector('div.search-overlay'); if (searchOverlay !== null) { searchOverlay.classList.toggle('active'); } } function onFakeSearchClick(e) { e.preventDefault(); const searchOverlay = document.querySelector('div.search-overlay'); if (searchOverlay === null) { return } searchOverlay.classList.toggle('active'); const search = searchOverlay.querySelector('div.search input'); if (search !== null) { search.focus() } return false; } function absoluteToHost(imageUrl) { if (imageUrl.match(/^\//)) { imageUrl = window.location.protocol + "//" + window.location.host + imageUrl } return imageUrl.replace(/\?.*$/, ''); } function addListenerOpenInBrowserButton(android) { const openInBrowserLink = document.querySelector('a.open-in-browser') if (openInBrowserLink === null) { return } openInBrowserLink.addEventListener('click', () => { android.openInBrowser(window.location.href) }) } function executeAndroidExclusiveCode(android) { document.querySelectorAll('*.android').forEach((element) => { element.classList.remove('android') }) document.querySelectorAll('*.no-android-app').forEach((element) => { element.style.display = 'none'; }) addListenerOpenInBrowserButton(android) const pinToHomeUrl = document.querySelector('a.pin-to-home') if (pinToHomeUrl === null) { return; } pinToHomeUrl.addEventListener('click', () => { const url = new URL(window.location.href) const pathandQuery = url.pathname + url.search; const label = (url.pathname.replace(/^.*\//g, '') .replace(/(?:^|-)\w/g, function(character) { return character.toUpperCase() }) .replace(/-/g, ' ')) + ' - Burguillos.info'; const firstImg = document.querySelector('div.description img'); let iconUrl; if (firstImg !== null) { if (!firstImg.src.match(/\.svg(?:\?|$)/)) { iconUrl = absoluteToHost(firstImg.src); } } if (iconUrl === undefined) { const imagePreview = document.querySelector('meta[name="image"]'); iconUrl = absoluteToHost(imagePreview.content); } android.pinPage(pathandQuery, label, iconUrl) }) } function addEasterEggAnimation() { const logoContainer = document.querySelector('div.burguillos-logo-container') if (logoContainer === null) { return; } logoContainer.addEventListener('click', () => { logoContainer.classList.toggle('active') }) }