{"id":115791,"date":"2024-02-13T14:43:18","date_gmt":"2024-02-13T12:43:18","guid":{"rendered":"https:\/\/eu4moldova.eu\/opportunities-new\/"},"modified":"2024-03-12T18:10:06","modified_gmt":"2024-03-12T16:10:06","slug":"opportunities","status":"publish","type":"page","link":"https:\/\/eu4moldova.eu\/ru\/opportunities\/","title":{"rendered":"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438"},"content":{"rendered":"<div>\n<h2>OPPORTUNITIES<\/h2>\n<\/div>\n<div>\n<div class=\"container-box\">\n<div class=\"filter-box\">\n<div class=\"topics-box\">\n<h2>\u0422\u0435\u043c\u044b<\/h2>\n<div class=\"loader-container topics_loader\">\n<div class=\"loader\"><\/div>\n<\/p><\/div>\n<ul id=\"topicList\">\n            <\/ul>\n<\/p><\/div>\n<div class=\"divide-items\"><\/div>\n<div class=\"type-box\">\n<h2>\u0422\u0438\u043f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/h2>\n<ul>\n<li><input type=\"checkbox\" id=\"1953\"><label for=\"1953\">\u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/label><\/li>\n<li><input type=\"checkbox\" id=\"1949\"><label for=\"1949\">\u0422\u0440\u0435\u043d\u0438\u043d\u0433\u0438 \u0438 \u043a\u0443\u0440\u0441\u044b<\/label><\/li>\n<li><input type=\"checkbox\" id=\"1955\"><label for=\"1955\">\u0421\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438<\/label><\/li>\n<li><input type=\"checkbox\" id=\"1950\"><label for=\"1950\">\u041c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f<\/label><\/li>\n<li><input type=\"checkbox\" id=\"2018\"><label for=\"2018\">\u0413\u0440\u0430\u043d\u0442\u044b<\/label><\/li>\n<\/ul><\/div>\n<\/p><\/div>\n<p>    <!--    \n\n<div class=\"news_loader\">--><br \/>\n    <!--        \n\n<div class=\"loader_n\"><\/div>\n\n--><br \/>\n    <!--    <\/div>\n\n--><\/p>\n<div class=\"news-container\">\n<div class=\"news-box\">\n        <\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"pagination-container\">\n<div class=\"pagination\"><\/div>\n<\/div>\n<style>\n    @import url(\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@200;400;500;600;700;800&family=Roboto:wght@400;500;700;900&display=swap\");<\/p>\n<p>    .container-box {\n        display: flex;\n        margin-top: 30px;\n        position: relative;\n    }<\/p>\n<p>    .filter-box {\n        flex-basis: 16%;\n    }<\/p>\n<p>    .news-container {\n        flex-basis: 84%;\n        margin-top: 30px;\n        padding-left: 30px;\n    }<\/p>\n<p>    .news-container a {\n        text-decoration: none;\n    }<\/p>\n<p>    .topics-box h2 {\n        font-size: 20px;\n        color: #003398;\n        font-family: \"Poppins\", sans-serif;\n        margin: 0;\n    }<\/p>\n<p>    .topics-box ul {\n        display: flex;\n        flex-wrap: wrap;\n        margin-top: 10px;\n        margin-bottom: 32px;\n        padding: 0;\n    }<\/p>\n<p>    .topics-box ul li {\n        text-wrap: nowrap;\n        border: 1px solid #817d7d;\n        border-radius: 25px;\n        padding: 10px 25px;\n        line-height: normal;\n        margin-right: 5px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        font-size: 12px;\n        font-weight: 400;\n        font-family: \"Poppins\", sans-serif;\n        margin-top: 5px !important;\n        cursor: pointer;\n    }<\/p>\n<p>    .type-box ul {\n        list-style-type: none;\n        padding: 0;\n        margin-top: 10px;\n    }<\/p>\n<p>    .type-box li {\n        display: flex;\n        align-items: center;\n        margin-bottom: 5px;\n    }<\/p>\n<p>    .topics-box ul .active {\n        border-color: #0d359a;\n        color: white;\n        font-weight: 500;\n        background-color: #0d359a;\n    }<\/p>\n<p>    .type-box input[type=\"checkbox\"] {\n        margin-right: 10px;\n        margin-bottom: 5px;\n    }<\/p>\n<p>    .type-box h2 {\n        color: #003398;\n        font-size: 20px;\n        font-family: \"Poppins\", sans-serif;\n        margin-top: 32px;\n    }<\/p>\n<p>    .type-box ul li {\n        font-family: \"Poppins\", sans-serif;\n        font-size: 17px;\n        color: #000000;\n    }<\/p>\n<p>    .news-box {\n        display: flex;\n        margin-bottom: 35px;\n    }<\/p>\n<p>    .news-box .news-img {\n        border-radius: 5px;\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n    }<\/p>\n<p>    .news-box .image-layout {\n        min-width: 290px;\n        max-width: 290px;\n        height: 171px;\n        margin-right: 20px;\n    }<\/p>\n<p>    .news-box .content p {\n        margin: 0;\n    }<\/p>\n<p>    .news-box .content .date {\n        font-family: \"Roboto\", sans-serif;\n        font-size: 9px;\n        color: #817d7d;\n        padding-bottom: 10px;\n        font-weight: 800;\n    }<\/p>\n<p>    .news-box .content .title {\n        font-family: \"Roboto\", sans-serif;\n        font-size: 25px;\n        line-height: 32px;\n        color: #413e3e;\n        padding-bottom: 10px;\n        font-weight: 800;\n    }<\/p>\n<p>    .news-box .content .description {\n        font-family: \"Roboto\", sans-serif;\n        font-size: 17px;\n        line-height: normal;\n        color: #413e3e;\n        padding-bottom: 20px;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        display: -webkit-box;\n        -webkit-box-orient: vertical;\n        -webkit-line-clamp: 3;\n        max-height: 40px;\n    }<\/p>\n<p>    .news-box .content {\n        display: flex;\n        flex-direction: column;\n        justify-content: space-between;\n    }<\/p>\n<p>    .news-box .content a {\n        font-family: \"Roboto\", sans-serif;\n        font-size: 17px;\n        line-height: normal;\n        color: #8C8888;\n        text-decoration: none;\n        display: flex;\n        align-items: center;\n    }<\/p>\n<p>    .news-box .content a img {\n        margin-left: 20px;\n    }<\/p>\n<p>    .pagination-container {\n        display: flex;\n    }<\/p>\n<p>    .pagination {\n        flex-basis: 83%;\n        margin-top: 30px;\n        padding-left: 30px;\n        display: flex;\n        margin-left: auto;\n    }<\/p>\n<p>    .pagination .page {\n        margin-right: 5px;\n        cursor: pointer;\n        font-family: \"Poppins\", sans-serif;\n        font-weight: 400;\n        font-size: 20px;\n        line-height: 30px;\n        color: #817d7d;\n    }<\/p>\n<p>    .pagination .active {\n        color: #000000 !important;\n        border-bottom: 1px solid black;\n    }<\/p>\n<p>    .divide-items {\n        width: 100%;\n        height: 1px;\n        background: #F1F1F1;\n    }<\/p>\n<p>    .topics_loader {\n        display: none;\n    }<\/p>\n<p>    \/*.news_loader {*\/\n    \/*    display: none;*\/\n    \/*    position: absolute;*\/\n    \/*    top: 50%;*\/\n    \/*    left: 50%;*\/\n    \/*    transform: translate(-50%, -50%);*\/\n    \/*}*\/<\/p>\n<p>    \/*.news_loader .loader_n {*\/\n    \/*    width: 40px;*\/\n    \/*    height: 40px;*\/\n    \/*    border: 6px solid #f3f3f3;*\/\n    \/*    border-top: 6px solid #003398;*\/\n    \/*    border-radius: 50%;*\/\n    \/*    animation: spin 1s linear infinite;*\/\n    \/*    margin: auto;*\/\n    \/*}*\/<\/p>\n<p>    .loader {\n        border: 4px solid #f3f3f3;\n        border-top: 4px solid #003398;\n        border-radius: 50%;\n        width: 20px;\n        height: 20px;\n        animation: spin 1s linear infinite;\n        margin: auto;\n    }<\/p>\n<p>    @keyframes spin {\n        0% {\n            transform: rotate(0deg);\n        }\n        100% {\n            transform: rotate(360deg);\n        }\n    }<\/p>\n<p>    @media screen and (max-width: 1024px) {\n        .container-box {\n            display: grid;\n        }<\/p>\n<p>        .news-container {\n            margin: 0;\n            padding: 0;\n        }<\/p>\n<p>        .pagination {\n            margin: 0;\n            padding: 0;\n        }\n    }<\/p>\n<p>    @media screen and (max-width: 768px) {\n        .news-box .image-layout {\n            min-width: 230px;\n            max-width: 230px;\n            height: 150px;\n            margin-right: 10px;\n        }<\/p>\n<p>        .news-box .content .title {\n            font-size: 13px;\n            line-height: normal;\n        }<\/p>\n<p>        .news-box .content .description {\n            font-size: 11px;\n            max-height: 20px;\n        }<\/p>\n<p>        .news-box .content a {\n            font-size: 11px;\n            margin-top: 10px;\n        }<\/p>\n<p>        .pagination .page {\n            font-size: 13px;\n        }<\/p>\n<p>        .topics-box ul li {\n            padding: 5px 15px;\n        }<\/p>\n<p>        .news-box .image-layout {\n            margin-bottom: 10px;\n        }\n    }<\/p>\n<p>    @media screen and (max-width: 500px) {\n        .news-box {\n            display: grid;\n        }<\/p>\n<p>        .news-box .image-layout {\n            min-width: 100%;\n            max-width: 100%;\n            height: 240px;\n            margin-right: 10px;\n        }<\/p>\n<p>        .container-box {\n            margin-top: 20px;\n        }<\/p>\n<p>        .topics-box h2 {\n            font-size: 15px;\n        }<\/p>\n<p>        .type-box h2 {\n            font-size: 15px;\n            margin-bottom: 10px;\n            margin-top: 20px;\n        }<\/p>\n<p>        .topics-box ul {\n            margin-bottom: 20px;\n        }<\/p>\n<p>        .type-box ul li {\n            font-size: 12px;\n        }<\/p>\n<p>        .type-box input[type=\"checkbox\"] {\n            margin-bottom: 3px;\n        }\n    }<\/p>\n<p>    \/* Skeleton Loader Styles *\/\n    .skeleton {\n        background-color: #eee;\n        border-radius: 4px;\n        margin: 8px 0;\n        animation: shimmer 1.5s infinite linear;\n    }<\/p>\n<p>    .skeleton-img, .skeleton-title, .skeleton-description, .skeleton-see-more {\n        height: 20px;\n        background-color: #eee;\n        animation: shimmer 1.5s infinite linear;\n    }<\/p>\n<p>    .skeleton-img {\n        width: 100%;\n        max-width: 290px;\n        height: 171px;\n        margin-right: 20px;\n        border-radius: 5px;\n    }<\/p>\n<p>    .skeleton-title {\n        width: 70%;\n        height: 25px;\n    }<\/p>\n<p>    .skeleton-description {\n        width: 90%;\n        height: 20px;\n    }<\/p>\n<p>    .skeleton-see-more {\n        width: 80px;\n        height: 20px;\n        border-radius: 10px;\n    }<\/p>\n<p>    @keyframes shimmer {\n        0% {\n            background-color: #e0e0e0;\n        }\n        50% {\n            background-color: #c0c0c0;\n        }\n        100% {\n            background-color: #e0e0e0;\n        }\n    }<\/p>\n<p>    \/* Mobile adjustments *\/\n    @media screen and (max-width: 768px) {\n        .skeleton-img {\n            max-width: 100%; \/* Full width on mobile *\/\n            height: 150px; \/* Adjust height as needed *\/\n            margin-right: 0;\n            margin-bottom: 10px;\n        }<\/p>\n<p>        .skeleton-content {\n            width: 100%; \/* Full width for content *\/\n            padding: 0 15px; \/* Add some padding *\/\n        }<\/p>\n<p>        .skeleton-title, .skeleton-description, .skeleton-see-more {\n            width: 90%; \/* Adjust width for smaller screens *\/\n        }\n    }<\/p>\n<\/style>\n<p><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/axios\/dist\/axios.min.js\"><\/script><br \/>\n<script>\n    let currentPage = 1;\n    let langOp = 'ru'\n    const perPage = 10;\n    const apiUrl = \"https:\/\/eu4moldova.eu\/wp-json\/wp\/v2\/posts\";\n    let totalPosts;\n    let totalPages;\n    let queryParams = new URLSearchParams(window.location.search);\n    const topics_loader = document.querySelector('.topics_loader');\n    \/\/ const news_loader = document.querySelector('.news_loader');\n    \/\/ Capture the 'topics' parameter from the URL and split it into an array\n    let topicsParam = queryParams.get('topics');\n    let topicIds = topicsParam ? topicsParam.split(',') : [];<\/p>\n<p>    \/\/GET TOPICS\n    function getTopics() {\n        axios\n            .get(`https:\/\/eu4moldova.eu\/wp-json\/wp\/v2\/topics?per_page=100&lang=${langOp}&_fields=name,id`)\n            .then((response) => {\n                topics_loader.style.display = 'none';\n                const topics = response.data;\n                const topicList = document.getElementById(\"topicList\");\n                topics.forEach((topic) => {\n                    const listItem = document.createElement(\"li\");\n                    listItem.textContent = topic.name;\n                    listItem.dataset.topicId = topic.id; \/\/ Store topic ID in a data attribute for easy access\n                    \/\/ Mark the topic as active if it matches any of the IDs in the topicIds array\n                    if (topicIds.includes(topic.id.toString())) {\n                        listItem.classList.add(\"active\");\n                    }<\/p>\n<p>                    listItem.addEventListener(\"click\", function () {\n                        const topicId = this.dataset.topicId;\n                        let selectedTopics = queryParams.get(\"topics\") ? queryParams.get(\"topics\").split(',') : [];\n                        const topicIndex = selectedTopics.indexOf(topicId);<\/p>\n<p>                        \/\/ Toggle topic selection\n                        if (topicIndex > -1) {\n                            \/\/ Topic is already selected, remove it\n                            selectedTopics.splice(topicIndex, 1);\n                            this.classList.remove(\"active\");\n                        } else {\n                            \/\/ Topic is not selected, add it\n                            selectedTopics.push(topicId);\n                            this.classList.add(\"active\");\n                        }<\/p>\n<p>                        \/\/ Update URL parameters\n                        if (selectedTopics.length > 0) {\n                            queryParams.set(\"topics\", selectedTopics.join(','));\n                        } else {\n                            queryParams.delete(\"topics\");\n                        }\n                        queryParams.set(\"page\", 1);\n                        history.replaceState(null, null, \"?\" + queryParams.toString());\n                        clearPosts();\n                        fetchData(1);\n                    });\n                    topicList.appendChild(listItem);\n                });\n            })\n            .catch((error) => {\n                console.error(\"Error fetching topics:\", error);\n            });<\/p>\n<p>        topics_loader.style.display = 'flex';\n    }<\/p>\n<p>    \/\/GET POSTS\n    function fetchData(page) {\n        renderSkeletons(); \/\/ Display skeletons before fetching data\n        let url;\n        const params = new URLSearchParams(window.location.search);\n        const topics = params.get('topics');\n        const pag = params.get('page');\n        const categories = params.get('categories')<\/p>\n<p>        if (topics) {\n            url = `${apiUrl}?categories=${categories ? categories : 6}&topics=${topics}&per_page=${perPage}&page=${pag ? pag : page}&_embed&lang=${langOp}&_fields=title,excerpt,acf.event_end_date,link,_links.wp:featuredmedia,_embedded.wp:featuredmedia`;\n        } else {\n            url = `${apiUrl}?categories=${categories ? categories : 6}&per_page=${perPage}&page=${pag ? pag : page}&_embed&lang=${langOp}&_fields=title,excerpt,acf.event_end_date,link,_links.wp:featuredmedia,_embedded.wp:featuredmedia`;\n        }<\/p>\n<p>        axios\n            .get(url)\n            .then((response) => {\n                \/\/ news_loader.style.display = 'none';\n                renderPosts(response.data);\n                totalPosts = response.headers[\"x-wp-total\"];\n                totalPages = Math.ceil(totalPosts \/ perPage);\n                renderPagination();\n            })\n            .catch((error) => {\n                console.error(\"Error fetching data:\", error);\n            });\n        \/\/ news_loader.style.display = 'flex';\n    }<\/p>\n<p>    function renderPagination() {\n        const paginationContainer = document.querySelector(\".pagination\");\n        paginationContainer.innerHTML = \"\";\n        const queryParams = new URLSearchParams(window.location.search);\n        const currentPage = Number(queryParams.get(\"page\")) || 1;\n        const visiblePages = 5;\n        const halfVisiblePages = Math.floor(visiblePages \/ 2);\n        let startPage = Math.max(1, currentPage - halfVisiblePages);\n        let endPage = Math.min(startPage + visiblePages - 1, totalPages);<\/p>\n<p>        if (endPage - startPage + 1 < visiblePages) {\n            if (currentPage > totalPages \/ 2) {\n                startPage = Math.max(1, totalPages - visiblePages + 1);\n            } else {\n                startPage = Math.max(1, endPage - visiblePages + 1);\n            }\n        }<\/p>\n<p>        if (startPage > 1) {\n            const firstPage = document.createElement(\"div\");\n            firstPage.classList.add(\"page\");\n            firstPage.textContent = \"1\";\n            firstPage.addEventListener(\"click\", () => {\n                queryParams.set(\"page\", 1);\n                history.replaceState(null, null, \"?\" + queryParams.toString());\n                fetchData(1);\n            });\n            paginationContainer.appendChild(firstPage);<\/p>\n<p>            if (startPage > 2) {\n                const prevEllipsis = document.createElement(\"div\");\n                prevEllipsis.textContent = \"...\";\n                prevEllipsis.classList.add(\"ellipsis\");\n                paginationContainer.appendChild(prevEllipsis);\n            }\n        }<\/p>\n<p>        for (let i = startPage; i <= endPage; i++) {\n            const pageLink = document.createElement(\"div\");\n            pageLink.classList.add(\"page\");\n            pageLink.textContent = i;\n            if (i === currentPage) {\n                pageLink.classList.add(\"active\");\n            }\n            pageLink.addEventListener(\"click\", () => {\n                clearPosts();\n                queryParams.set(\"page\", i);\n                history.replaceState(null, null, \"?\" + queryParams.toString());\n                fetchData(i);\n                document.body.scrollTop = 0; \/\/ For Safari\n                document.documentElement.scrollTop = 0; \/\/ For Chrome, Firefox, IE and Opera\n            });\n            paginationContainer.appendChild(pageLink);\n        }<\/p>\n<p>        if (endPage < totalPages) {\n            if (endPage < totalPages - 1) {\n                const nextEllipsis = document.createElement(\"div\");\n                nextEllipsis.textContent = \"...\";\n                nextEllipsis.classList.add(\"ellipsis\");\n                paginationContainer.appendChild(nextEllipsis);\n            }\n\n            const lastPage = document.createElement(\"div\");\n            lastPage.classList.add(\"page\");\n            lastPage.textContent = totalPages;\n            lastPage.addEventListener(\"click\", () => {\n                queryParams.set(\"page\", totalPages);\n                history.replaceState(null, null, \"?\" + queryParams.toString());\n                fetchData(totalPages);\n            });\n            paginationContainer.appendChild(lastPage);\n        }\n    }<\/p>\n<p>    function renderPosts(posts) {\n        const newsContainer = document.querySelector(\".news-container\");<\/p>\n<p>        newsContainer.innerHTML = \"\";<\/p>\n<p>        posts.forEach((post) => {\n            const newsBox = document.createElement(\"div\");\n            newsBox.classList.add(\"news-box\");<\/p>\n<p>            const imageLayout = document.createElement(\"div\");\n            imageLayout.classList.add(\"image-layout\");<\/p>\n<p>            const imgElement = document.createElement(\"img\");\n            imgElement.classList.add(\"news-img\");\n            imgElement.src = post._embedded[\"wp:featuredmedia\"] ? post._embedded[\"wp:featuredmedia\"][0]?.source_url : '';\n            imgElement.alt = \"\";<\/p>\n<p>            imageLayout.appendChild(imgElement);\n            newsBox.appendChild(imageLayout);<\/p>\n<p>            const content = document.createElement(\"div\");\n            content.classList.add(\"content\");<\/p>\n<p>            const layoutDiv = document.createElement(\"div\");\n            layoutDiv.classList.add(\"layout\");<\/p>\n<p>            if (post.acf.event_end_date) {\n                const dateParagraph = document.createElement(\"p\");\n                dateParagraph.classList.add(\"date\");\n                let event_end_date = post.acf.event_end_date;\n                let end_date;\n                let dateObj = new Date(event_end_date.replace(\/(\\d{4})(\\d{2})(\\d{2})\/, '$1-$2-$3'));\n                let options = {month: 'long', day: 'numeric', year: 'numeric'};\n                end_date = '\u041a\u0420\u0410\u0419\u041d\u0418\u0419 \u0421\u0420\u041e\u041a \u041f\u041e\u0414\u0410\u0427\u0418 \u0417\u0410\u042f\u0412\u041a\u0418: ' + dateObj.toLocaleDateString('ru-RU', options).toUpperCase();\n                dateParagraph.textContent = end_date;\n                layoutDiv.appendChild(dateParagraph);\n            }<\/p>\n<p>            const titleParagraph = document.createElement(\"p\");\n            titleParagraph.classList.add(\"title\");\n            const tempD = document.createElement(\"div\");\n            tempD.innerHTML = post.title.rendered;\n            titleParagraph.textContent = tempD.textContent;<\/p>\n<p>            const descriptionParagraph = document.createElement(\"p\");\n            descriptionParagraph.classList.add(\"description\");\n            const tempDiv = document.createElement(\"div\");\n            tempDiv.innerHTML = post.excerpt.rendered;\n            descriptionParagraph.textContent = tempDiv.textContent;\n            document.body.appendChild(descriptionParagraph);<\/p>\n<p>            const seeMoreLink = document.createElement(\"a\");\n            seeMoreLink.href = post.link;\n            seeMoreLink.textContent = \"\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435\";<\/p>\n<p>            const imgIcon = document.createElement(\"img\");\n            imgIcon.src =\n                \"https:\/\/eu4moldova.eu\/wp-content\/uploads\/2024\/02\/Line-24.svg\";\n            imgIcon.alt = \"\";<\/p>\n<p>            seeMoreLink.appendChild(imgIcon);\n            layoutDiv.appendChild(titleParagraph);\n            layoutDiv.appendChild(descriptionParagraph);\n            content.appendChild(layoutDiv);\n            content.appendChild(seeMoreLink);\n            newsBox.appendChild(content);<\/p>\n<p>            const postLink = document.createElement(\"a\");\n            postLink.href = post.link;\n            postLink.appendChild(newsBox);\n            newsContainer.appendChild(postLink);\n        });\n    }<\/p>\n<p>    const checkboxes = document.querySelectorAll('.type-box input[type=\"checkbox\"]');\n    const categoryId6 = '6';<\/p>\n<p>    function getPostsByCheckboxCategory() {\n        const selectedCategories = Array.from(checkboxes)\n            .filter(checkbox => checkbox.checked && checkbox.id !== categoryId6)\n            .map(checkbox => checkbox.id);\n        \/\/ if (!selectedCategories.includes(categoryId6)) {\n        \/\/     selectedCategories.push(categoryId6);\n        \/\/ }\n        clearPosts();\n        const categoriesParam = selectedCategories.join(',');\n        queryParams.set(\"categories\", categoriesParam);\n        queryParams.set(\"page\", 1);\n        history.replaceState(null, null, \"?\" + queryParams.toString());\n        fetchData(1);\n    }<\/p>\n<p>    checkboxes.forEach(checkbox => {\n        checkbox.addEventListener('change', getPostsByCheckboxCategory);\n    });<\/p>\n<p>    document.addEventListener('DOMContentLoaded', function () {\n        const categoriesParam = queryParams.get('categories');\n        if (categoriesParam) {\n            const categoryIds = categoriesParam.split(',');\n            categoryIds.forEach(id => {\n                const checkbox = document.getElementById(id);\n                if (checkbox) {\n                    checkbox.checked = true;\n                }\n            });\n        }\n    });<\/p>\n<p>    function renderSkeletons(count = 5) {\n        const newsContainer = document.querySelector(\".news-container\");\n        newsContainer.innerHTML = \"\"; \/\/ Clear the news container<\/p>\n<p>        for (let i = 0; i < count; i++) {\n            const skeletonWrapper = document.createElement(\"div\");\n            skeletonWrapper.classList.add(\"news-box\");\n            skeletonWrapper.style.display = \"flex\";\n            skeletonWrapper.style.alignItems = \"flex-start\";\n\n            const skeletonImage = document.createElement(\"div\");\n            skeletonImage.classList.add(\"skeleton-img\");\n            skeletonWrapper.appendChild(skeletonImage);\n\n            const skeletonContent = document.createElement(\"div\");\n            skeletonContent.style.flexGrow = \"1\";\n\n            const skeletonTitle = document.createElement(\"div\");\n            skeletonTitle.classList.add(\"skeleton\", \"skeleton-title\");\n            skeletonContent.appendChild(skeletonTitle);\n\n            const skeletonDescription = document.createElement(\"div\");\n            skeletonDescription.classList.add(\"skeleton\", \"skeleton-description\");\n            skeletonContent.appendChild(skeletonDescription);\n\n            const skeletonSeeMore = document.createElement(\"div\");\n            skeletonSeeMore.classList.add(\"skeleton\", \"skeleton-see-more\");\n            skeletonContent.appendChild(skeletonSeeMore);\n\n            skeletonWrapper.appendChild(skeletonContent);\n            newsContainer.appendChild(skeletonWrapper);\n        }\n    }\n\n    function clearPosts() {\n        renderSkeletons(5); \/\/ Optionally pass the number of skeletons you want to render\n\n        const postsContainer = document.querySelector(\".news-container\");\n        postsContainer.innerHTML = \"\";\n    }\n\n    getTopics();\n    fetchData(currentPage);\n\n<\/script><\/p>\n<\/div>\n<p><!--more--><br \/>\n<!-- {\"type\":\"layout\",\"children\":[{\"type\":\"section\",\"props\":{\"css\":\".el-section {\\n    padding-left: 35px;\\n    padding-right: 35px;\\n}\\n@media screen and (min-width: 1930px) {\\n.el-section {\\n    max-width: 1660px;\\n    margin-left: auto;\\n    margin-right:  auto;\\n}\\n}\\n\\n@media screen and (max-width: 768px) {\\n.el-section {\\n    padding-left: 0;\\n    padding-right: 0;\\n}\\n}\",\"image_position\":\"center-center\",\"padding\":\"none\",\"style\":\"default\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"expand\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"headline\",\"props\":{\"content\":\"\n\n<h2>OPPORTUNITIES<\\\/h2>\",\"css\":\".el-element h2 {\\n    margin-top: 30px;\\n\\tmargin-bottom: 0;\\n    font-size: 40px;\\n    font-family: 'Roboto', sans-serif;\\n    color: #000000;\\n    font-weight: 800;\\n}\\n@media screen and (max-width: 1024px) {\\n    .el-element h2 {\\n    \\tmargin-top: 15px;\\n        font-size: 16px;\\n    }\\n}\",\"title_element\":\"div\"}}]}]}]},{\"type\":\"section\",\"props\":{\"css\":\".el-section {\\n    padding-left: 35px;\\n    padding-right: 35px;\\n}\\n\\n@media screen and (min-width: 1930px) {\\n.el-section {\\n    max-width: 1660px;\\n    margin-left: auto;\\n    margin-right:  auto;\\n}\\n}\\n@media screen and (max-width: 768px) {\\n.el-section {\\n    padding-left: 0;\\n    padding-right: 0;\\n}\\n}\",\"image_position\":\"center-center\",\"padding\":\"none\",\"style\":\"default\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"expand\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"html\",\"props\":{\"content\":\"\n\n<div class=\\\"container-box\\\">\\n    \n\n<div class=\\\"filter-box\\\">\\n        \n\n<div class=\\\"topics-box\\\">\\n            \n\n<h2>\\u0422\\u0435\\u043c\\u044b<\\\/h2>\\n            \n\n<div class=\\\"loader-container topics_loader\\\">\\n                \n\n<div class=\\\"loader\\\"><\\\/div>\\n            <\\\/div>\\n            \n\n<ul id=\\\"topicList\\\">\\n            <\\\/ul>\\n        <\\\/div>\\n        \n\n<div class=\\\"divide-items\\\"><\\\/div>\\n        \n\n<div class=\\\"type-box\\\">\\n            \n\n<h2>\\u0422\\u0438\\u043f \\u0432\\u043e\\u0437\\u043c\\u043e\\u0436\\u043d\\u043e\\u0441\\u0442\\u0438<\\\/h2>\\n            \n\n<ul>\\n                \n\n<li><input type=\\\"checkbox\\\" id=\\\"1953\\\"><label for=\\\"1953\\\">\\u0414\\u0440\\u0443\\u0433\\u0438\\u0435 \\u0432\\u043e\\u0437\\u043c\\u043e\\u0436\\u043d\\u043e\\u0441\\u0442\\u0438<\\\/label><\\\/li>\\n                \n\n<li><input type=\\\"checkbox\\\" id=\\\"1949\\\"><label for=\\\"1949\\\">\\u0422\\u0440\\u0435\\u043d\\u0438\\u043d\\u0433\\u0438 \\u0438 \\u043a\\u0443\\u0440\\u0441\\u044b<\\\/label><\\\/li>\\n                \n\n<li><input type=\\\"checkbox\\\" id=\\\"1955\\\"><label for=\\\"1955\\\">\\u0421\\u0442\\u0430\\u0436\\u0438\\u0440\\u043e\\u0432\\u043a\\u0438<\\\/label><\\\/li>\\n                \n\n<li><input type=\\\"checkbox\\\" id=\\\"1950\\\"><label for=\\\"1950\\\">\\u041c\\u0435\\u0440\\u043e\\u043f\\u0440\\u0438\\u044f\\u0442\\u0438\\u044f<\\\/label><\\\/li>\\n                \n\n<li><input type=\\\"checkbox\\\" id=\\\"2018\\\"><label for=\\\"2018\\\">\\u0413\\u0440\\u0430\\u043d\\u0442\\u044b<\\\/label><\\\/li>\\n\\n            <\\\/ul>\\n        <\\\/div>\\n    <\\\/div>\\n    <!--    \n\n<div class=\\\"news_loader\\\">-->\\n    <!--        \n\n<div class=\\\"loader_n\\\"><\\\/div>-->\\n    <!--    <\\\/div>-->\\n    <\/p>\n<div class=\\\"news-container\\\">\\n        <\/p>\n<div class=\\\"news-box\\\">\\n        <\\\/div>\\n    <\\\/div>\\n\\n<\\\/div>\\n<\/p>\n<div class=\\\"pagination-container\\\">\\n    <\/p>\n<div class=\\\"pagination\\\"><\\\/div>\\n<\\\/div>\\n\\n<\/p>\n<style>\\n    @import url(\\\"https:\\\/\\\/fonts.googleapis.com\\\/css2?family=Poppins:wght@200;400;500;600;700;800&family=Roboto:wght@400;500;700;900&display=swap\\\");\\n\\n\\n    .container-box {\\n        display: flex;\\n        margin-top: 30px;\\n        position: relative;\\n    }\\n\\n    .filter-box {\\n        flex-basis: 16%;\\n    }\\n\\n    .news-container {\\n        flex-basis: 84%;\\n        margin-top: 30px;\\n        padding-left: 30px;\\n    }\\n\\n    .news-container a {\\n        text-decoration: none;\\n    }\\n\\n    .topics-box h2 {\\n        font-size: 20px;\\n        color: #003398;\\n        font-family: \\\"Poppins\\\", sans-serif;\\n        margin: 0;\\n    }\\n\\n    .topics-box ul {\\n        display: flex;\\n        flex-wrap: wrap;\\n        margin-top: 10px;\\n        margin-bottom: 32px;\\n        padding: 0;\\n    }\\n\\n    .topics-box ul li {\\n        text-wrap: nowrap;\\n        border: 1px solid #817d7d;\\n        border-radius: 25px;\\n        padding: 10px 25px;\\n        line-height: normal;\\n        margin-right: 5px;\\n        display: flex;\\n        align-items: center;\\n        justify-content: center;\\n        font-size: 12px;\\n        font-weight: 400;\\n        font-family: \\\"Poppins\\\", sans-serif;\\n        margin-top: 5px !important;\\n        cursor: pointer;\\n    }\\n\\n    .type-box ul {\\n        list-style-type: none;\\n        padding: 0;\\n        margin-top: 10px;\\n    }\\n\\n    .type-box li {\\n        display: flex;\\n        align-items: center;\\n        margin-bottom: 5px;\\n    }\\n\\n    .topics-box ul .active {\\n        border-color: #0d359a;\\n        color: white;\\n        font-weight: 500;\\n        background-color: #0d359a;\\n    }\\n\\n    .type-box input[type=\\\"checkbox\\\"] {\\n        margin-right: 10px;\\n        margin-bottom: 5px;\\n    }\\n\\n    .type-box h2 {\\n        color: #003398;\\n        font-size: 20px;\\n        font-family: \\\"Poppins\\\", sans-serif;\\n        margin-top: 32px;\\n    }\\n\\n    .type-box ul li {\\n        font-family: \\\"Poppins\\\", sans-serif;\\n        font-size: 17px;\\n        color: #000000;\\n    }\\n\\n    .news-box {\\n        display: flex;\\n        margin-bottom: 35px;\\n    }\\n\\n    .news-box .news-img {\\n        border-radius: 5px;\\n        width: 100%;\\n        height: 100%;\\n        object-fit: cover;\\n    }\\n\\n    .news-box .image-layout {\\n        min-width: 290px;\\n        max-width: 290px;\\n        height: 171px;\\n        margin-right: 20px;\\n    }\\n\\n    .news-box .content p {\\n        margin: 0;\\n    }\\n\\n    .news-box .content .date {\\n        font-family: \\\"Roboto\\\", sans-serif;\\n        font-size: 9px;\\n        color: #817d7d;\\n        padding-bottom: 10px;\\n        font-weight: 800;\\n    }\\n\\n    .news-box .content .title {\\n        font-family: \\\"Roboto\\\", sans-serif;\\n        font-size: 25px;\\n        line-height: 32px;\\n        color: #413e3e;\\n        padding-bottom: 10px;\\n        font-weight: 800;\\n    }\\n\\n    .news-box .content .description {\\n        font-family: \\\"Roboto\\\", sans-serif;\\n        font-size: 17px;\\n        line-height: normal;\\n        color: #413e3e;\\n        padding-bottom: 20px;\\n        overflow: hidden;\\n        text-overflow: ellipsis;\\n        display: -webkit-box;\\n        -webkit-box-orient: vertical;\\n        -webkit-line-clamp: 3;\\n        max-height: 40px;\\n    }\\n\\n    .news-box .content {\\n        display: flex;\\n        flex-direction: column;\\n        justify-content: space-between;\\n    }\\n\\n    .news-box .content a {\\n        font-family: \\\"Roboto\\\", sans-serif;\\n        font-size: 17px;\\n        line-height: normal;\\n        color: #8C8888;\\n        text-decoration: none;\\n        display: flex;\\n        align-items: center;\\n    }\\n\\n    .news-box .content a img {\\n        margin-left: 20px;\\n    }\\n\\n    .pagination-container {\\n        display: flex;\\n    }\\n\\n    .pagination {\\n        flex-basis: 83%;\\n        margin-top: 30px;\\n        padding-left: 30px;\\n        display: flex;\\n        margin-left: auto;\\n    }\\n\\n    .pagination .page {\\n        margin-right: 5px;\\n        cursor: pointer;\\n        font-family: \\\"Poppins\\\", sans-serif;\\n        font-weight: 400;\\n        font-size: 20px;\\n        line-height: 30px;\\n        color: #817d7d;\\n    }\\n\\n    .pagination .active {\\n        color: #000000 !important;\\n        border-bottom: 1px solid black;\\n    }\\n\\n    .divide-items {\\n        width: 100%;\\n        height: 1px;\\n        background: #F1F1F1;\\n    }\\n\\n    .topics_loader {\\n        display: none;\\n    }\\n\\n    \\\/*.news_loader {*\\\/\\n    \\\/*    display: none;*\\\/\\n    \\\/*    position: absolute;*\\\/\\n    \\\/*    top: 50%;*\\\/\\n    \\\/*    left: 50%;*\\\/\\n    \\\/*    transform: translate(-50%, -50%);*\\\/\\n    \\\/*}*\\\/\\n\\n    \\\/*.news_loader .loader_n {*\\\/\\n    \\\/*    width: 40px;*\\\/\\n    \\\/*    height: 40px;*\\\/\\n    \\\/*    border: 6px solid #f3f3f3;*\\\/\\n    \\\/*    border-top: 6px solid #003398;*\\\/\\n    \\\/*    border-radius: 50%;*\\\/\\n    \\\/*    animation: spin 1s linear infinite;*\\\/\\n    \\\/*    margin: auto;*\\\/\\n    \\\/*}*\\\/\\n\\n    .loader {\\n        border: 4px solid #f3f3f3;\\n        border-top: 4px solid #003398;\\n        border-radius: 50%;\\n        width: 20px;\\n        height: 20px;\\n        animation: spin 1s linear infinite;\\n        margin: auto;\\n    }\\n\\n    @keyframes spin {\\n        0% {\\n            transform: rotate(0deg);\\n        }\\n        100% {\\n            transform: rotate(360deg);\\n        }\\n    }\\n\\n    @media screen and (max-width: 1024px) {\\n        .container-box {\\n            display: grid;\\n        }\\n\\n        .news-container {\\n            margin: 0;\\n            padding: 0;\\n        }\\n\\n        .pagination {\\n            margin: 0;\\n            padding: 0;\\n        }\\n    }\\n\\n    @media screen and (max-width: 768px) {\\n        .news-box .image-layout {\\n            min-width: 230px;\\n            max-width: 230px;\\n            height: 150px;\\n            margin-right: 10px;\\n        }\\n\\n        .news-box .content .title {\\n            font-size: 13px;\\n            line-height: normal;\\n        }\\n\\n        .news-box .content .description {\\n            font-size: 11px;\\n            max-height: 20px;\\n        }\\n\\n        .news-box .content a {\\n            font-size: 11px;\\n            margin-top: 10px;\\n        }\\n\\n        .pagination .page {\\n            font-size: 13px;\\n        }\\n\\n        .topics-box ul li {\\n            padding: 5px 15px;\\n        }\\n\\n        .news-box .image-layout {\\n            margin-bottom: 10px;\\n        }\\n    }\\n\\n    @media screen and (max-width: 500px) {\\n        .news-box {\\n            display: grid;\\n        }\\n\\n        .news-box .image-layout {\\n            min-width: 100%;\\n            max-width: 100%;\\n            height: 240px;\\n            margin-right: 10px;\\n        }\\n\\n        .container-box {\\n            margin-top: 20px;\\n        }\\n\\n        .topics-box h2 {\\n            font-size: 15px;\\n        }\\n\\n        .type-box h2 {\\n            font-size: 15px;\\n            margin-bottom: 10px;\\n            margin-top: 20px;\\n        }\\n\\n        .topics-box ul {\\n            margin-bottom: 20px;\\n        }\\n\\n        .type-box ul li {\\n            font-size: 12px;\\n        }\\n\\n        .type-box input[type=\\\"checkbox\\\"] {\\n            margin-bottom: 3px;\\n        }\\n    }\\n\\n    \\\/* Skeleton Loader Styles *\\\/\\n    .skeleton {\\n        background-color: #eee;\\n        border-radius: 4px;\\n        margin: 8px 0;\\n        animation: shimmer 1.5s infinite linear;\\n    }\\n\\n    .skeleton-img, .skeleton-title, .skeleton-description, .skeleton-see-more {\\n        height: 20px;\\n        background-color: #eee;\\n        animation: shimmer 1.5s infinite linear;\\n    }\\n\\n    .skeleton-img {\\n        width: 100%;\\n        max-width: 290px;\\n        height: 171px;\\n        margin-right: 20px;\\n        border-radius: 5px;\\n    }\\n\\n    .skeleton-title {\\n        width: 70%;\\n        height: 25px;\\n    }\\n\\n    .skeleton-description {\\n        width: 90%;\\n        height: 20px;\\n    }\\n\\n    .skeleton-see-more {\\n        width: 80px;\\n        height: 20px;\\n        border-radius: 10px;\\n    }\\n\\n    @keyframes shimmer {\\n        0% {\\n            background-color: #e0e0e0;\\n        }\\n        50% {\\n            background-color: #c0c0c0;\\n        }\\n        100% {\\n            background-color: #e0e0e0;\\n        }\\n    }\\n\\n    \\\/* Mobile adjustments *\\\/\\n    @media screen and (max-width: 768px) {\\n        .skeleton-img {\\n            max-width: 100%; \\\/* Full width on mobile *\\\/\\n            height: 150px; \\\/* Adjust height as needed *\\\/\\n            margin-right: 0;\\n            margin-bottom: 10px;\\n        }\\n\\n        .skeleton-content {\\n            width: 100%; \\\/* Full width for content *\\\/\\n            padding: 0 15px; \\\/* Add some padding *\\\/\\n        }\\n\\n        .skeleton-title, .skeleton-description, .skeleton-see-more {\\n            width: 90%; \\\/* Adjust width for smaller screens *\\\/\\n        }\\n    }\\n\\n<\\\/style>\\n<script src=\\\"https:\\\/\\\/cdn.jsdelivr.net\\\/npm\\\/axios\\\/dist\\\/axios.min.js\\\"><\\\/script>\\n<script>\\n    let currentPage = 1;\\n    let langOp = 'ru'\\n    const perPage = 10;\\n    const apiUrl = \\\"https:\\\/\\\/eu4moldova.eu\\\/wp-json\\\/wp\\\/v2\\\/posts\\\";\\n    let totalPosts;\\n    let totalPages;\\n    let queryParams = new URLSearchParams(window.location.search);\\n    const topics_loader = document.querySelector('.topics_loader');\\n    \\\/\\\/ const news_loader = document.querySelector('.news_loader');\\n    \\\/\\\/ Capture the 'topics' parameter from the URL and split it into an array\\n    let topicsParam = queryParams.get('topics');\\n    let topicIds = topicsParam ? topicsParam.split(',') : [];\\n\\n    \\\/\\\/GET TOPICS\\n    function getTopics() {\\n        axios\\n            .get(`https:\\\/\\\/eu4moldova.eu\\\/wp-json\\\/wp\\\/v2\\\/topics?per_page=100&lang=${langOp}&_fields=name,id`)\\n            .then((response) => {\\n                topics_loader.style.display = 'none';\\n                const topics = response.data;\\n                const topicList = document.getElementById(\\\"topicList\\\");\\n                topics.forEach((topic) => {\\n                    const listItem = document.createElement(\\\"li\\\");\\n                    listItem.textContent = topic.name;\\n                    listItem.dataset.topicId = topic.id; \\\/\\\/ Store topic ID in a data attribute for easy access\\n                    \\\/\\\/ Mark the topic as active if it matches any of the IDs in the topicIds array\\n                    if (topicIds.includes(topic.id.toString())) {\\n                        listItem.classList.add(\\\"active\\\");\\n                    }\\n\\n                    listItem.addEventListener(\\\"click\\\", function () {\\n                        const topicId = this.dataset.topicId;\\n                        let selectedTopics = queryParams.get(\\\"topics\\\") ? queryParams.get(\\\"topics\\\").split(',') : [];\\n                        const topicIndex = selectedTopics.indexOf(topicId);\\n\\n                        \\\/\\\/ Toggle topic selection\\n                        if (topicIndex > -1) {\\n                            \\\/\\\/ Topic is already selected, remove it\\n                            selectedTopics.splice(topicIndex, 1);\\n                            this.classList.remove(\\\"active\\\");\\n                        } else {\\n                            \\\/\\\/ Topic is not selected, add it\\n                            selectedTopics.push(topicId);\\n                            this.classList.add(\\\"active\\\");\\n                        }\\n\\n                        \\\/\\\/ Update URL parameters\\n                        if (selectedTopics.length > 0) {\\n                            queryParams.set(\\\"topics\\\", selectedTopics.join(','));\\n                        } else {\\n                            queryParams.delete(\\\"topics\\\");\\n                        }\\n                        queryParams.set(\\\"page\\\", 1);\\n                        history.replaceState(null, null, \\\"?\\\" + queryParams.toString());\\n                        clearPosts();\\n                        fetchData(1);\\n                    });\\n                    topicList.appendChild(listItem);\\n                });\\n            })\\n            .catch((error) => {\\n                console.error(\\\"Error fetching topics:\\\", error);\\n            });\\n\\n        topics_loader.style.display = 'flex';\\n    }\\n\\n    \\\/\\\/GET POSTS\\n    function fetchData(page) {\\n        renderSkeletons(); \\\/\\\/ Display skeletons before fetching data\\n        let url;\\n        const params = new URLSearchParams(window.location.search);\\n        const topics = params.get('topics');\\n        const pag = params.get('page');\\n        const categories = params.get('categories')\\n\\n        if (topics) {\\n            url = `${apiUrl}?categories=${categories ? categories : 6}&topics=${topics}&per_page=${perPage}&page=${pag ? pag : page}&_embed&lang=${langOp}&_fields=title,excerpt,acf.event_end_date,link,_links.wp:featuredmedia,_embedded.wp:featuredmedia`;\\n        } else {\\n            url = `${apiUrl}?categories=${categories ? categories : 6}&per_page=${perPage}&page=${pag ? pag : page}&_embed&lang=${langOp}&_fields=title,excerpt,acf.event_end_date,link,_links.wp:featuredmedia,_embedded.wp:featuredmedia`;\\n        }\\n\\n        axios\\n            .get(url)\\n            .then((response) => {\\n                \\\/\\\/ news_loader.style.display = 'none';\\n                renderPosts(response.data);\\n                totalPosts = response.headers[\\\"x-wp-total\\\"];\\n                totalPages = Math.ceil(totalPosts \\\/ perPage);\\n                renderPagination();\\n            })\\n            .catch((error) => {\\n                console.error(\\\"Error fetching data:\\\", error);\\n            });\\n        \\\/\\\/ news_loader.style.display = 'flex';\\n    }\\n\\n    function renderPagination() {\\n        const paginationContainer = document.querySelector(\\\".pagination\\\");\\n        paginationContainer.innerHTML = \\\"\\\";\\n        const queryParams = new URLSearchParams(window.location.search);\\n        const currentPage = Number(queryParams.get(\\\"page\\\")) || 1;\\n        const visiblePages = 5;\\n        const halfVisiblePages = Math.floor(visiblePages \\\/ 2);\\n        let startPage = Math.max(1, currentPage - halfVisiblePages);\\n        let endPage = Math.min(startPage + visiblePages - 1, totalPages);\\n\\n        if (endPage - startPage + 1 < visiblePages) {\\n            if (currentPage > totalPages \\\/ 2) {\\n                startPage = Math.max(1, totalPages - visiblePages + 1);\\n            } else {\\n                startPage = Math.max(1, endPage - visiblePages + 1);\\n            }\\n        }\\n\\n        if (startPage > 1) {\\n            const firstPage = document.createElement(\\\"div\\\");\\n            firstPage.classList.add(\\\"page\\\");\\n            firstPage.textContent = \\\"1\\\";\\n            firstPage.addEventListener(\\\"click\\\", () => {\\n                queryParams.set(\\\"page\\\", 1);\\n                history.replaceState(null, null, \\\"?\\\" + queryParams.toString());\\n                fetchData(1);\\n            });\\n            paginationContainer.appendChild(firstPage);\\n\\n            if (startPage > 2) {\\n                const prevEllipsis = document.createElement(\\\"div\\\");\\n                prevEllipsis.textContent = \\\"...\\\";\\n                prevEllipsis.classList.add(\\\"ellipsis\\\");\\n                paginationContainer.appendChild(prevEllipsis);\\n            }\\n        }\\n\\n        for (let i = startPage; i <= endPage; i++) {\\n            const pageLink = document.createElement(\\\"div\\\");\\n            pageLink.classList.add(\\\"page\\\");\\n            pageLink.textContent = i;\\n            if (i === currentPage) {\\n                pageLink.classList.add(\\\"active\\\");\\n            }\\n            pageLink.addEventListener(\\\"click\\\", () => {\\n                clearPosts();\\n                queryParams.set(\\\"page\\\", i);\\n                history.replaceState(null, null, \\\"?\\\" + queryParams.toString());\\n                fetchData(i);\\n                document.body.scrollTop = 0; \\\/\\\/ For Safari\\n                document.documentElement.scrollTop = 0; \\\/\\\/ For Chrome, Firefox, IE and Opera\\n            });\\n            paginationContainer.appendChild(pageLink);\\n        }\\n\\n        if (endPage < totalPages) {\\n            if (endPage < totalPages - 1) {\\n                const nextEllipsis = document.createElement(\\\"div\\\");\\n                nextEllipsis.textContent = \\\"...\\\";\\n                nextEllipsis.classList.add(\\\"ellipsis\\\");\\n                paginationContainer.appendChild(nextEllipsis);\\n            }\\n\\n            const lastPage = document.createElement(\\\"div\\\");\\n            lastPage.classList.add(\\\"page\\\");\\n            lastPage.textContent = totalPages;\\n            lastPage.addEventListener(\\\"click\\\", () => {\\n                queryParams.set(\\\"page\\\", totalPages);\\n                history.replaceState(null, null, \\\"?\\\" + queryParams.toString());\\n                fetchData(totalPages);\\n            });\\n            paginationContainer.appendChild(lastPage);\\n        }\\n    }\\n\\n\\n    function renderPosts(posts) {\\n        const newsContainer = document.querySelector(\\\".news-container\\\");\\n\\n        newsContainer.innerHTML = \\\"\\\";\\n\\n        posts.forEach((post) => {\\n            const newsBox = document.createElement(\\\"div\\\");\\n            newsBox.classList.add(\\\"news-box\\\");\\n\\n            const imageLayout = document.createElement(\\\"div\\\");\\n            imageLayout.classList.add(\\\"image-layout\\\");\\n\\n            const imgElement = document.createElement(\\\"img\\\");\\n            imgElement.classList.add(\\\"news-img\\\");\\n            imgElement.src = post._embedded[\\\"wp:featuredmedia\\\"] ? post._embedded[\\\"wp:featuredmedia\\\"][0]?.source_url : '';\\n            imgElement.alt = \\\"\\\";\\n\\n            imageLayout.appendChild(imgElement);\\n            newsBox.appendChild(imageLayout);\\n\\n            const content = document.createElement(\\\"div\\\");\\n            content.classList.add(\\\"content\\\");\\n\\n            const layoutDiv = document.createElement(\\\"div\\\");\\n            layoutDiv.classList.add(\\\"layout\\\");\\n\\n            if (post.acf.event_end_date) {\\n                const dateParagraph = document.createElement(\\\"p\\\");\\n                dateParagraph.classList.add(\\\"date\\\");\\n                let event_end_date = post.acf.event_end_date;\\n                let end_date;\\n                let dateObj = new Date(event_end_date.replace(\\\/(\\\\d{4})(\\\\d{2})(\\\\d{2})\\\/, '$1-$2-$3'));\\n                let options = {month: 'long', day: 'numeric', year: 'numeric'};\\n                end_date = '\\u041a\\u0420\\u0410\\u0419\\u041d\\u0418\\u0419 \\u0421\\u0420\\u041e\\u041a \\u041f\\u041e\\u0414\\u0410\\u0427\\u0418 \\u0417\\u0410\\u042f\\u0412\\u041a\\u0418: ' + dateObj.toLocaleDateString('ru-RU', options).toUpperCase();\\n                dateParagraph.textContent = end_date;\\n                layoutDiv.appendChild(dateParagraph);\\n            }\\n\\n\\n            const titleParagraph = document.createElement(\\\"p\\\");\\n            titleParagraph.classList.add(\\\"title\\\");\\n            const tempD = document.createElement(\\\"div\\\");\\n            tempD.innerHTML = post.title.rendered;\\n            titleParagraph.textContent = tempD.textContent;\\n\\n            const descriptionParagraph = document.createElement(\\\"p\\\");\\n            descriptionParagraph.classList.add(\\\"description\\\");\\n            const tempDiv = document.createElement(\\\"div\\\");\\n            tempDiv.innerHTML = post.excerpt.rendered;\\n            descriptionParagraph.textContent = tempDiv.textContent;\\n            document.body.appendChild(descriptionParagraph);\\n\\n            const seeMoreLink = document.createElement(\\\"a\\\");\\n            seeMoreLink.href = post.link;\\n            seeMoreLink.textContent = \\\"\\u041f\\u043e\\u0434\\u0440\\u043e\\u0431\\u043d\\u0435\\u0435\\\";\\n\\n            const imgIcon = document.createElement(\\\"img\\\");\\n            imgIcon.src =\\n                \\\"https:\\\/\\\/eu4moldova.eu\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/Line-24.svg\\\";\\n            imgIcon.alt = \\\"\\\";\\n\\n            seeMoreLink.appendChild(imgIcon);\\n            layoutDiv.appendChild(titleParagraph);\\n            layoutDiv.appendChild(descriptionParagraph);\\n            content.appendChild(layoutDiv);\\n            content.appendChild(seeMoreLink);\\n            newsBox.appendChild(content);\\n\\n            const postLink = document.createElement(\\\"a\\\");\\n            postLink.href = post.link;\\n            postLink.appendChild(newsBox);\\n            newsContainer.appendChild(postLink);\\n        });\\n    }\\n\\n    const checkboxes = document.querySelectorAll('.type-box input[type=\\\"checkbox\\\"]');\\n    const categoryId6 = '6';\\n\\n    function getPostsByCheckboxCategory() {\\n        const selectedCategories = Array.from(checkboxes)\\n            .filter(checkbox => checkbox.checked && checkbox.id !== categoryId6)\\n            .map(checkbox => checkbox.id);\\n        \\\/\\\/ if (!selectedCategories.includes(categoryId6)) {\\n        \\\/\\\/     selectedCategories.push(categoryId6);\\n        \\\/\\\/ }\\n        clearPosts();\\n        const categoriesParam = selectedCategories.join(',');\\n        queryParams.set(\\\"categories\\\", categoriesParam);\\n        queryParams.set(\\\"page\\\", 1);\\n        history.replaceState(null, null, \\\"?\\\" + queryParams.toString());\\n        fetchData(1);\\n    }\\n\\n    checkboxes.forEach(checkbox => {\\n        checkbox.addEventListener('change', getPostsByCheckboxCategory);\\n    });\\n\\n    document.addEventListener('DOMContentLoaded', function () {\\n        const categoriesParam = queryParams.get('categories');\\n        if (categoriesParam) {\\n            const categoryIds = categoriesParam.split(',');\\n            categoryIds.forEach(id => {\\n                const checkbox = document.getElementById(id);\\n                if (checkbox) {\\n                    checkbox.checked = true;\\n                }\\n            });\\n        }\\n    });\\n\\n    function renderSkeletons(count = 5) {\\n        const newsContainer = document.querySelector(\\\".news-container\\\");\\n        newsContainer.innerHTML = \\\"\\\"; \\\/\\\/ Clear the news container\\n\\n        for (let i = 0; i < count; i++) {\\n            const skeletonWrapper = document.createElement(\\\"div\\\");\\n            skeletonWrapper.classList.add(\\\"news-box\\\");\\n            skeletonWrapper.style.display = \\\"flex\\\";\\n            skeletonWrapper.style.alignItems = \\\"flex-start\\\";\\n\\n            const skeletonImage = document.createElement(\\\"div\\\");\\n            skeletonImage.classList.add(\\\"skeleton-img\\\");\\n            skeletonWrapper.appendChild(skeletonImage);\\n\\n            const skeletonContent = document.createElement(\\\"div\\\");\\n            skeletonContent.style.flexGrow = \\\"1\\\";\\n\\n            const skeletonTitle = document.createElement(\\\"div\\\");\\n            skeletonTitle.classList.add(\\\"skeleton\\\", \\\"skeleton-title\\\");\\n            skeletonContent.appendChild(skeletonTitle);\\n\\n            const skeletonDescription = document.createElement(\\\"div\\\");\\n            skeletonDescription.classList.add(\\\"skeleton\\\", \\\"skeleton-description\\\");\\n            skeletonContent.appendChild(skeletonDescription);\\n\\n            const skeletonSeeMore = document.createElement(\\\"div\\\");\\n            skeletonSeeMore.classList.add(\\\"skeleton\\\", \\\"skeleton-see-more\\\");\\n            skeletonContent.appendChild(skeletonSeeMore);\\n\\n            skeletonWrapper.appendChild(skeletonContent);\\n            newsContainer.appendChild(skeletonWrapper);\\n        }\\n    }\\n\\n    function clearPosts() {\\n        renderSkeletons(5); \\\/\\\/ Optionally pass the number of skeletons you want to render\\n\\n        const postsContainer = document.querySelector(\\\".news-container\\\");\\n        postsContainer.innerHTML = \\\"\\\";\\n    }\\n\\n    getTopics();\\n    fetchData(currentPage);\\n\\n<\\\/script>\\n\"}}]}]}]}],\"version\":\"4.2.11\"} --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>OPPORTUNITIES \u0422\u0435\u043c\u044b \u0422\u0438\u043f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0422\u0440\u0435\u043d\u0438\u043d\u0433\u0438 \u0438 \u043a\u0443\u0440\u0441\u044b \u0421\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438 \u041c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0413\u0440\u0430\u043d\u0442\u044b<\/p>\n","protected":false},"author":35,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-115791","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 - EU for Moldova<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/eu4moldova.eu\/ro\/opportunities\/\" \/>\n<meta property=\"og:locale\" content=\"ru_RU\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 - EU for Moldova\" \/>\n<meta property=\"og:description\" content=\"OPPORTUNITIES \u0422\u0435\u043c\u044b \u0422\u0438\u043f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0422\u0440\u0435\u043d\u0438\u043d\u0433\u0438 \u0438 \u043a\u0443\u0440\u0441\u044b \u0421\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438 \u041c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0413\u0440\u0430\u043d\u0442\u044b\" \/>\n<meta property=\"og:url\" content=\"https:\/\/eu4moldova.eu\/ro\/opportunities\/\" \/>\n<meta property=\"og:site_name\" content=\"EU for Moldova\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/EUDelegationMoldova\/\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-12T16:10:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/eu4moldova.eu\/wp-content\/uploads\/EU-flag_1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@euinmoldova\" \/>\n<meta name=\"twitter:label1\" content=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\" \/>\n\t<meta name=\"twitter:data1\" content=\"12 \u043c\u0438\u043d\u0443\u0442\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/ro\\\/opportunities\\\/\",\"url\":\"https:\\\/\\\/eu4moldova.eu\\\/ro\\\/opportunities\\\/\",\"name\":\"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 - EU for Moldova\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/#website\"},\"datePublished\":\"2024-02-13T12:43:18+00:00\",\"dateModified\":\"2024-03-12T16:10:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/ro\\\/opportunities\\\/#breadcrumb\"},\"inLanguage\":\"ru-RU\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/eu4moldova.eu\\\/ro\\\/opportunities\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/ro\\\/opportunities\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/eu4moldova.eu\\\/ru\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/#website\",\"url\":\"https:\\\/\\\/eu4moldova.eu\\\/\",\"name\":\"EU for Moldova\",\"description\":\"European Union for the Republic of Moldova\",\"publisher\":{\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/eu4moldova.eu\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ru-RU\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/#organization\",\"name\":\"European Union in the Republic of Moldova\",\"url\":\"https:\\\/\\\/eu4moldova.eu\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ru-RU\",\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/eu4moldova.eu\\\/wp-content\\\/uploads\\\/eu-moldova-logo-1.png\",\"contentUrl\":\"https:\\\/\\\/eu4moldova.eu\\\/wp-content\\\/uploads\\\/eu-moldova-logo-1.png\",\"width\":5057,\"height\":870,\"caption\":\"European Union in the Republic of Moldova\"},\"image\":{\"@id\":\"https:\\\/\\\/eu4moldova.eu\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/EUDelegationMoldova\\\/\",\"https:\\\/\\\/x.com\\\/euinmoldova\",\"https:\\\/\\\/www.instagram.com\\\/euinmoldova\",\"https:\\\/\\\/www.youtube.com\\\/c\\\/EUDelegationMoldova\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 - EU for Moldova","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/eu4moldova.eu\/ro\/opportunities\/","og_locale":"ru_RU","og_type":"article","og_title":"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 - EU for Moldova","og_description":"OPPORTUNITIES \u0422\u0435\u043c\u044b \u0422\u0438\u043f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0422\u0440\u0435\u043d\u0438\u043d\u0433\u0438 \u0438 \u043a\u0443\u0440\u0441\u044b \u0421\u0442\u0430\u0436\u0438\u0440\u043e\u0432\u043a\u0438 \u041c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0413\u0440\u0430\u043d\u0442\u044b","og_url":"https:\/\/eu4moldova.eu\/ro\/opportunities\/","og_site_name":"EU for Moldova","article_publisher":"https:\/\/www.facebook.com\/EUDelegationMoldova\/","article_modified_time":"2024-03-12T16:10:06+00:00","og_image":[{"width":1600,"height":900,"url":"https:\/\/eu4moldova.eu\/wp-content\/uploads\/EU-flag_1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@euinmoldova","twitter_misc":{"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f":"12 \u043c\u0438\u043d\u0443\u0442"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/eu4moldova.eu\/ro\/opportunities\/","url":"https:\/\/eu4moldova.eu\/ro\/opportunities\/","name":"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 - EU for Moldova","isPartOf":{"@id":"https:\/\/eu4moldova.eu\/#website"},"datePublished":"2024-02-13T12:43:18+00:00","dateModified":"2024-03-12T16:10:06+00:00","breadcrumb":{"@id":"https:\/\/eu4moldova.eu\/ro\/opportunities\/#breadcrumb"},"inLanguage":"ru-RU","potentialAction":[{"@type":"ReadAction","target":["https:\/\/eu4moldova.eu\/ro\/opportunities\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/eu4moldova.eu\/ro\/opportunities\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/eu4moldova.eu\/ru\/"},{"@type":"ListItem","position":2,"name":"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438"}]},{"@type":"WebSite","@id":"https:\/\/eu4moldova.eu\/#website","url":"https:\/\/eu4moldova.eu\/","name":"EU for Moldova","description":"European Union for the Republic of Moldova","publisher":{"@id":"https:\/\/eu4moldova.eu\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/eu4moldova.eu\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ru-RU"},{"@type":"Organization","@id":"https:\/\/eu4moldova.eu\/#organization","name":"European Union in the Republic of Moldova","url":"https:\/\/eu4moldova.eu\/","logo":{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https:\/\/eu4moldova.eu\/#\/schema\/logo\/image\/","url":"https:\/\/eu4moldova.eu\/wp-content\/uploads\/eu-moldova-logo-1.png","contentUrl":"https:\/\/eu4moldova.eu\/wp-content\/uploads\/eu-moldova-logo-1.png","width":5057,"height":870,"caption":"European Union in the Republic of Moldova"},"image":{"@id":"https:\/\/eu4moldova.eu\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/EUDelegationMoldova\/","https:\/\/x.com\/euinmoldova","https:\/\/www.instagram.com\/euinmoldova","https:\/\/www.youtube.com\/c\/EUDelegationMoldova"]}]}},"_links":{"self":[{"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/pages\/115791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/comments?post=115791"}],"version-history":[{"count":13,"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/pages\/115791\/revisions"}],"predecessor-version":[{"id":117254,"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/pages\/115791\/revisions\/117254"}],"wp:attachment":[{"href":"https:\/\/eu4moldova.eu\/ru\/wp-json\/wp\/v2\/media?parent=115791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}