{"id":455,"date":"2025-05-06T16:44:54","date_gmt":"2025-05-06T16:44:54","guid":{"rendered":"https:\/\/eu4health.cruzvermelha.pt\/noticias\/"},"modified":"2025-05-20T12:57:48","modified_gmt":"2025-05-20T12:57:48","slug":"news","status":"publish","type":"page","link":"https:\/\/eu4health.cruzvermelha.pt\/en\/news\/","title":{"rendered":"News"},"content":{"rendered":"\n<section class=\"news-list\" id=\"\">\n    <div class=\"news-list__wrapper\">\n        <div class=\"news-list__header\">\n            <h2 class=\"news-list__title\">Project news<\/h2>\n        <\/div>\n\n        <div id=\"news-loader\" class=\"loader\" style=\"display: none;\"><\/div>\n\n        <div class=\"news-list__container\" id=\"news-list\"><\/div>\n    <\/div>\n\n    <div id=\"pagination-wrapper\" style=\"display: none;\">\n        <div id=\"listing-posts-pagination\" class=\"news-list__pagination\"><\/div>\n    <\/div>\n    \n    <script>\n    document.addEventListener('DOMContentLoaded', function() {\n        let currentPageGlobal = 1;\n        let totalPages;\n\n        function showLoader() {\n            document.getElementById('news-loader').style.display = 'block';\n            document.getElementById('news-list').style.display = 'none';\n        }\n\n        function hideLoader() {\n            document.getElementById('news-loader').style.display = 'none';\n            document.getElementById('news-list').style.display = 'flex';\n        }\n\n        function fetchPosts() {\n            showLoader();\n            const newsList = document.getElementById('news-list');\n            newsList.innerHTML = '';\n\n            fetch('\/wp-json\/cruz_vermelha\/v1\/blog', {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application\/json',\n                },\n                body: JSON.stringify({\n                    per_page: 6,\n                    page: currentPageGlobal,\n                    lang: 'en'\n                }),\n            })\n            .then(response => response.json())\n            .then(data => {\n                const posts = data.data.posts;\n                totalPages = data.data.pagination.total_pages;\n\n                posts.forEach(post => {\n                    const postElement = document.createElement('div');\n                    postElement.className = 'news-list__card';\n\n                    postElement.innerHTML = `\n                        <div class=\"news-list__card-left\">\n                            <h3 class=\"news-list__card-title\">\n                                <a href=\"${post.link}\" target=\"${post.has_external_link ? '_blank' : '_self'}\">${post.title}<\/a>\n                            <\/h3>\n                            <p class=\"news-list__card-date\">${post.post_date}<\/p>\n                        <\/div>\n                        <div class=\"news-list__card-right\">\n                            <p class=\"news-list__card-excerpt\">${post.excerpt || 'No excerpt available.'}<\/p>\n                            <a href=\"${post.link}\" target=\"${post.has_external_link ? '_blank' : '_self'}\" class=\"btn-primary news-list__card-link\">Read Article<\/a>\n                        <\/div>\n                    `;\n\n                    newsList.appendChild(postElement);\n                });\n\n                updatePagination(currentPageGlobal, totalPages, totalPages);\n                hideLoader();\n            })\n            .catch(error => {\n                console.error('API Error:', error);\n                hideLoader();\n            });\n        }\n\n        function updatePagination(currentPage, lastPage, totalPages) {\n            const paginationWrapper = document.getElementById('pagination-wrapper');\n            const paginationContainer = document.getElementById('listing-posts-pagination');\n            \n            if (!paginationContainer || totalPages <= 1) {\n                paginationWrapper.style.display = 'none';\n                return;\n            }\n\n            paginationWrapper.style.display = 'block';\n            paginationContainer.innerHTML = '';\n\n            function createPageButton(page) {\n                const pageButton = document.createElement('button');\n                pageButton.classList.add('news-list__pagination-number');\n                pageButton.textContent = page;\n                if (page === currentPage) {\n                    pageButton.classList.add('active');\n                    pageButton.disabled = true;\n                }\n                pageButton.onclick = () => {\n                    currentPageGlobal = page;\n                    fetchPosts();\n                    scrollToTop();\n                };\n                return pageButton;\n            }\n\n            function createEllipsis() {\n                const ellipsis = document.createElement('span');\n                ellipsis.classList.add('news-list__pagination-number');\n                ellipsis.textContent = '...';\n                return ellipsis;\n            }\n\n            function scrollToTop() {\n                const newsListSection = document.querySelector('.news-list');\n                if (newsListSection) {\n                    newsListSection.scrollIntoView({ behavior: 'smooth' });\n                }\n            }\n\n            const prevButton = document.createElement('button');\n            prevButton.classList.add('news-list__pagination-btn');\n            prevButton.setAttribute('data-direction', 'prev');\n            prevButton.innerHTML = `<svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path d=\"M13.4943 26L15.6818 23.8409L6.67614 14.8352H30V11.7102H6.67614L15.6818 2.73295L13.4943 0.545455L0.767045 13.2727L13.4943 26Z\" fill=\"#F8F6F4\"\/>\n            <\/svg>`;\n            \n            if (currentPage <= 1) {\n                prevButton.disabled = true;\n            }\n\n            const numbersContainer = document.createElement('div');\n            numbersContainer.classList.add('news-list__pagination-numbers');\n\n            numbersContainer.appendChild(createPageButton(1));\n\n            if (totalPages > 1) {\n                let startPage = Math.max(2, currentPage - 1);\n                let endPage = Math.min(totalPages - 1, currentPage + 1);\n\n                if (currentPage === 1) {\n                    endPage = Math.min(3, totalPages - 1);\n                } else if (currentPage === totalPages) {\n                    startPage = Math.max(totalPages - 2, 2);\n                }\n\n                if (startPage > 2) {\n                    numbersContainer.appendChild(createEllipsis());\n                }\n\n                for (let page = startPage; page <= endPage; page++) {\n                    numbersContainer.appendChild(createPageButton(page));\n                }\n\n                if (endPage < totalPages - 1) {\n                    numbersContainer.appendChild(createEllipsis());\n                }\n\n                numbersContainer.appendChild(createPageButton(totalPages));\n            }\n\n            const nextButton = document.createElement('button');\n            nextButton.classList.add('news-list__pagination-btn');\n            nextButton.setAttribute('data-direction', 'next');\n            nextButton.innerHTML = `<svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path d=\"M16.5057 26L14.3182 23.8409L23.3239 14.8352H0V11.7102H23.3239L14.3182 2.73295L16.5057 0.545455L29.233 13.2727L16.5057 26Z\" fill=\"#F8F6F4\"\/>\n            <\/svg>`;\n\n            if (currentPage >= totalPages) {\n                nextButton.disabled = true;\n            }\n\n            prevButton.onclick = () => {\n                if (currentPage > 1) {\n                    currentPageGlobal--;\n                    fetchPosts();\n                    scrollToTop();\n                }\n            };\n\n            nextButton.onclick = () => {\n                if (currentPage < totalPages) {\n                    currentPageGlobal++;\n                    fetchPosts();\n                    scrollToTop();\n                }\n            };\n\n            paginationContainer.appendChild(prevButton);\n            paginationContainer.appendChild(numbersContainer);\n            paginationContainer.appendChild(nextButton);\n        }\n\n        function formatDate(dateString) {\n            const date = new Date(dateString);\n            const day = date.getDate().toString().padStart(2, '0');\n            const months = ['Janeiro', 'Fevereiro', 'Mar\u00e7o', 'Abril', 'Maio', 'Junho', \n                        'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'];\n            const month = months[date.getMonth()];\n            const year = date.getFullYear();\n            return `${day} ${month} ${year}`;\n        }\n\n        fetchPosts();\n    });\n<\/script>\n<\/section>\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":847,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"banner-template.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-455","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/pages\/455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/comments?post=455"}],"version-history":[{"count":2,"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/pages\/455\/revisions"}],"predecessor-version":[{"id":502,"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/pages\/455\/revisions\/502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/media\/847"}],"wp:attachment":[{"href":"https:\/\/eu4health.cruzvermelha.pt\/en\/wp-json\/wp\/v2\/media?parent=455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}