{"id":589,"date":"2024-10-02T14:58:13","date_gmt":"2024-10-02T13:58:13","guid":{"rendered":"https:\/\/www.ipleiria.pt\/estm\/?page_id=589"},"modified":"2024-10-31T16:44:37","modified_gmt":"2024-10-31T16:44:37","slug":"alumni","status":"publish","type":"page","link":"https:\/\/www.ipleiria.pt\/estm\/estudante\/dia-a-dia\/alumni\/","title":{"rendered":"Alumni"},"content":{"rendered":"\n<div class=\"wp-container-4 wp-block-columns\">\n<div class=\"wp-container-2 wp-block-column\">\n<p class=\"is-style-theme-subtitle-inherit-color\">ESTM<\/p>\n\n\n\n<h2 class=\"is-style-theme-title\" id=\"eu-estudei-no-politcnico-de-leiria\">Rede Alumni<\/h2>\n\n\n\n<p>O Polit\u00e9cnico de Leiria valoriza o contacto com os&nbsp;antigos estudantes das suas 5 escolas, de modo a potenciar:<\/p>\n\n\n\n<ul><li>A forma\u00e7\u00e3o ao longo da vida;<\/li><li>A atualiza\u00e7\u00e3o de informa\u00e7\u00e3o e conhecimento;<\/li><li>O refor\u00e7o de uma comunidade orientada para a produ\u00e7\u00e3o cient\u00edfica e tecnol\u00f3gica.<\/li><\/ul>\n\n\n\n<p>A&nbsp;Rede Alumni&nbsp;foi criada com a miss\u00e3o de&nbsp;promover iniciativas que reforcem&nbsp;os la\u00e7os&nbsp;entre a Institui\u00e7\u00e3o&nbsp;e os seus antigos estudantes.<\/p>\n\n\n\n<p>E-mail de contacto: rede.alumni@ipleiria.pt<\/p>\n\n\n\n<div class=\"wp-container-1 wp-block-buttons\">\n<div class=\"wp-block-button is-style-theme-button-solid\"><a class=\"wp-block-button__link\" href=\"https:\/\/www.ipleiria.pt\/inovar\/comunidade-e-parceiros\/alumni\/\" target=\"_blank\" rel=\"noreferrer noopener\">Mais informa\u00e7\u00f5es <\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-container-3 wp-block-column\">\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/www.ipleiria.pt\/wp-content\/uploads\/2019\/10\/MG_1990_2-789x1024.jpg\" alt=\"\" class=\"wp-image-5127\"\/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"has-text-align-center is-style-theme-title\">Testemunhos<\/h2>\n\n\n\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n    <section aria-describedby=\"alumni-testimonials-section-title\">\n        <h2 id=\"alumni-testimonials-section-title\" class=\"sr-only\">Testemunhos alumni<\/h2>\n        <form id=\"alumni-testimonials-search\" name=\"alumni-testimonials-search\" class=\"alumni-testimonials-as-grid\" data-api-url=\"https:\/\/www.ipleiria.pt\/wp-json\/wp\/v2\" aria-controls=\"alumni-testimonials-list\">\n                        <input type=\"hidden\" name=\"course_tax\" value=\"31\">\n            <div class=\"container\">\n                <div class=\"row\">\n                    <input type=\"hidden\" id=\"search-field\" type=\"text\" class=\"alumni-testimonials-search-input form-control form-control-xs mt-2 mb-2 alumni-testimonial-search-filter disabled-filter\" name=\"search\" value=\"\" placeholder=\"Termos da pesquisa...\" data-api-url=\"${apiUrl}\/alumni-testimonial\" >\n                <\/div>\n                \n                <input style=\"display: none;\" type=\"submit\" value=\"Executar pesquisa\">\n            <\/div>\n            \n            <div id=\"alumni-testimonials-container\">\n              \n                <div id=\"alumni-testimonials-list\" class=\"\" aria-live=\"polite\" >\n                    <div class=\"container\">A carregar&#8230;<\/div>\n                <\/div>\n                <div>\n                    <div class=\"wp-block-button is-style-theme-button-solid mt-4 mt-lg-0 text-center\">\n                        <button id=\"loading-button\" class=\"hide-if-no-js wp-block-button__link\"><span class=\"loading-label\">Mostrar mais<\/span>\u00a0<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/form>\n    <\/section>\n    <script>\n        (function(isSupported){\n        'use strict';\n         document.head.insertAdjacentHTML(\"beforeend\", `\n            <style>\n                #alumni-testimonials-search .alumni-testimonial-search-filter,\n                #alumni-testimonials-search .alumni-testimonial-taxonomy-filter{\n                    transition: opacity 0.5s;\n                }\n                #alumni-testimonials-search .disabled-filter{\n                    visibility: hidden;\n                    opacity: 0;\n                }\n                #alumni-testimonials-search .enabled-filter{\n                    visibility: visible;\n                    opacity: 1;\n                }\n                \n                \n                #alumni-testimonials-search .alumni-testimonials-layout-btn-group{\n                    padding-top: calc(0.25rem - 1px);\n                }\n                #alumni-testimonials-search .alumni-testimonials-layout-btn svg{\n                    fill: #030303;\n                    height: calc(1.5em - 0.25rem);\n                    width: auto;\n                    pointer-events: none;\n                }\n                #alumni-testimonials-search .btn-light:not(:disabled):not(.disabled):active, \n                #alumni-testimonials-search .show>.btn-light.dropdown-toggle {\n                    color: #FFFFFF;\n                    background-color: #030303;\n                    border-color: #000000;\n                }\n                \n                #alumni-testimonials-search .btn-light:not(:disabled):not(.disabled):active svg{\n                    fill: #FFFFFF\n                }\n                \n                #alumni-testimonials-search .alumni-testimonials-list-title{\n                    background-color: #f2f2f2;\n                    color: #666666;\n                    vertical-align: middle;\n                    padding: .75rem;\n                    font-size: 1rem;\n                    margin: 40px 0 30px;\n                }#alumni-testimonials-list{\n                    min-height: 60px;\n                }\n                .loading{\n                    position: relative;\n                }\n                                .loading:after {\n                    content: '';\n                    display: inline-block;\n                    width: 1.5rem;\n                    height: 1.5rem;\n                    vertical-align: text-bottom;\n                    border: .25em solid currentColor;\n                    border-right-color: transparent;\n                    border-radius: 50%;\n                    animation: spinner-border .75s linear infinite;\n                    position: absolute;\n                    z-index: 3;\n                    left: calc(50% - 0.75rem);\n                    top: 0.75rem;\n                }.alumni-testimonials-as-list #alumni-testimonials-list ul{\n                    list-style: none;\n                    padding: 0;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list ul li {\n                    display: flex;\n                    flex-direction: column;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a {\n                    line-height: 1.7rem;\n                    padding: 15px 0.75rem;\n                    margin: 0;\n                    border-bottom: 1px solid #f2f4f7;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:link,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:visited{\n                    color: #262626;\n                    text-decoration: none;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a:hover,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:focus,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:active,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:hover .meta,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:focus .meta,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:active .meta{\n                    color: #0094BD;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a:hover:before,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:focus:before,\n                .alumni-testimonials-as-list #alumni-testimonials-list a:active:before{\n                    border-color: #545454;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a:before {\n                    display: block;\n                    width: 15px;\n                    height: 15px;\n                    border-color: #545454;\n                    border-right: 1px solid;\n                    border-top: 1px solid;\n                    transform: rotate(45deg);\n                    margin: 20px;\n                    content: ' ';\n                    position: absolute;\n                    right: 0;\n                    top: calc(50% - 23px);\n                }\n                \n                .alumni-testimonials-as-list #alumni-testimonials-list a .title{\n                    display: block;\n                    font-weight: 600;\n                    font-size: 1.1rem;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta{\n                    \/*display: flex;*\/\n                    color: #8c8c8c;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy{\n                    font-size: 0.9rem;\n                    line-height: 1rem;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy-label{\n                    font-weight: 600;\n                    padding-right: 5px;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomies-separator {\n                    padding: 0 0.2rem 0 0.4rem;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy:not([style*=\"display:none\"]):last-child:after,\n                .alumni-testimonials-as-list #alumni-testimonials-list a .alumni-testimonial-thumbnail-wrapper{\n                    display: none;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy-type,\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy-area,\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy-clanguage{\n                    display: none;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy-school{\n                    order: 1;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy-period{\n                    order: 2;\n                }\n                .alumni-testimonials-as-list #alumni-testimonials-list a .meta .taxonomy-state{\n                    order: 3;\n                }\n                #alumni-testimonials-search.alumni-testimonials-as-list .alumni-testimonials-list-title{\n                    margin-bottom: 0;\n                }\n                \n                #alumni-testimonials-search.alumni-testimonials-as-list .new-icon{\n                    margin-top: -15px;\n                    margin-right: -10px;\n                    width: 1.5rem;\n                }.alumni-testimonials-as-grid #alumni-testimonials-list ul{\n                    display: flex;\n                    flex-wrap: wrap;\n                    margin-right: -15px;\n                    margin-left: -15px;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list ul li{\n                    position: relative;\n                    width: 100%;\n                    padding-right: 15px;\n                    padding-left: 15px;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a{\n                    display: block;\n                    width: 100%;\n                    position: relative;\n                    color: #545454;\n                    text-decoration: none;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a:hover,\n                .alumni-testimonials-as-grid #alumni-testimonials-list a:focus,\n                .alumni-testimonials-as-grid #alumni-testimonials-list a:active{\n                    \/*background-color: #0094BD;*\/\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a>.title{\n                    display: flex;\n                    flex-direction: column;\n                    position: absolute;\n                    top: 0;\n                    right: 0;\n                    left: 0;\n                    bottom: 0;\n                    width: 100%;\n                    height: 100%;\n                    align-items: center;\n                    justify-content: center;\n                    text-align: center;\n                    overflow: hidden;\n                    text-overflow: ellipsis;\n                    word-break: break-word;\n                    padding: 15px;\n                    z-index: 2;\n                    line-height: 1.3rem;\n                    text-transform: none;\n                    font-size: 1.2rem;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a>.meta{\n                    display: none !important;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a .alumni-testimonial-thumbnail-wrapper{\n                    display: flex;\n                    position: absolute;\n                    top: 0;\n                    right: 0;\n                    left: 0;\n                    bottom: 0;\n                    width: 100%;\n                    height: 100%;\n                    align-items: center;\n                    justify-content: center;\n                    text-align: center;\n                    overflow: hidden;\n                    text-overflow: ellipsis;\n                    word-break: break-word;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a .alumni-testimonial-thumbnail,\n                .alumni-testimonials-as-grid #alumni-testimonials-list a .alumni-testimonial-thumbnail-wrapper:after{\n                    display: block;\n                    width: 100%;\n                    height: auto;\n                    max-width: none;\n                    position: absolute;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a .alumni-testimonial-thumbnail-wrapper:after{\n                    content: \" \";\n                    z-index: 1;\n                    background-color: #1c1c1c;\n                    opacity: .5;\n                    left: 0;\n                    right: 0;\n                    top: 0;\n                    bottom: 0;\n                }\n                .alumni-testimonials-as-grid #alumni-testimonials-list a:hover .alumni-testimonial-thumbnail-wrapper:after,\n                .alumni-testimonials-as-grid #alumni-testimonials-list a:focus .alumni-testimonial-thumbnail-wrapper:after,\n                .alumni-testimonials-as-grid #alumni-testimonials-list a:active .alumni-testimonial-thumbnail-wrapper:after{\n                    \/*opacity: 0;*\/\n                    background-color: #0094BD;\n                }\n                @media (min-width: 576px){\n                    .alumni-testimonials-as-grid #alumni-testimonials-list ul li{\n                        flex: 0 0 50%;\n                        max-width: 50%;\n                    }\n                   \n                    .alumni-testimonials-as-grid #alumni-testimonials-list a .alumni-testimonial-thumbnail{\n                        display: block;\n                        height: 100%;\n                        width: auto;\n                    }\n                }\n                @media (min-width: 768px){\n                    .alumni-testimonials-as-grid #alumni-testimonials-list ul li{\n                        flex: 0 0 33.33333%;\n                        max-width: 33.33333%;\n                    }\n                }\n                @media (min-width: 992px){\n                    .alumni-testimonials-as-grid #alumni-testimonials-list ul li{\n                        flex: 0 0 25%;\n                        max-width: 25%;\n                    }\n                }\n                \n                .alumni-testimonials-as-grid #alumni-testimonials-list .new-icon{\n                    position: absolute;\n                    top: 0;\n                    left: 0;\n                    width: 3rem;\n                }\n            <\/style>\n        `);\n        const taxonomiesInfo = {};\n        \n        const getForm = () => {\n            return document.querySelector('form#alumni-testimonials-search');\n        };\n        \n        const getContainer = ()=>{\n            const form = getForm();\n            return !!form?form.querySelector('#alumni-testimonials-list'):null;\n        };\n        \n        const getLoading = () => {\n            const form = getForm();\n            return !!form?form.querySelector('#loading-button'):null;\n        };\n        \n        const enableLoading = (loading=false) => {\n            const loadingButton = getLoading();\n            if(loadingButton){\n                const loadingLabel = loadingButton.querySelector('.loading-label');\n                if(!!loadingLabel){\n                    loadingLabel.style.display = loading?'none':'initial';\n                }\n                if(loading){\n                    loadingButton.classList.add(\"loading\");\n                    loadingButton.style.display = 'inline-block';\n                }else{\n                    if(ofPages()<=currentPage()){\n                        loadingButton.style.display = 'none';\n                    }\n                    loadingButton.classList.remove(\"loading\");\n                }\n                loadingButton.setAttribute(\"aria-busy\", Boolean(loading));\n                loadingButton.dataset.loading =  Boolean(loading);\n            }\n        };\n        \n        const isLoading = () => {\n            const loadingButton = getLoading();\n            return !!loadingButton && String(loadingButton.dataset.loading).toLowerCase() === \"true\";\n        };\n        \n        const currentPage = () => {\n            const loadingButton = getLoading();\n            return !!loadingButton && !!loadingButton.dataset.page ? parseInt(loadingButton.dataset.page) : 0 ;\n        };\n        \n        const ofPages = () => {\n            const loadingButton = getLoading();\n            return !!loadingButton && !!loadingButton.dataset.totalPages ? loadingButton.dataset.totalPages : 0 ;\n        };\n        \n        const doGetApiRequest = (url, page=1, allPages=false) => {\n            let totalPages = 0;\n            \n            const loadingButton = getLoading();\n            if(loadingButton && !allPages){\n                loadingButton.dataset.page = page;\n            }\n            \n            return fetch( url, {\n                \/\/credentials: 'omit',\n                mode: 'cors'\n            })\n            .then( response => {\n                if (response.status === 200) {\n                    const contentType = response.headers.get('content-type');\n                    totalPages = response.headers.get('X-WP-TotalPages');\n                    if(loadingButton && !allPages){\n                        loadingButton.dataset.totalPages = totalPages;\n                    }\n                    if (!contentType || !contentType.includes('application\/json')) {\n                        throw new TypeError(\"Resposta JSON inv\u00e1lida\");\n                    }\n                    return response.json();\n                }\n            })\n            .then( response => {\n                if (page>1 || totalPages<=1) {\n                    return response;\n                }else if(allPages){\n                    let pageUrl = new URL(url);\n                    let params = new URLSearchParams(url.search);\n                    const requests = Array.from({length:(totalPages-1)},(v,k)=>k+1+1).map(page=>{\n                        params.set('page', page);\n                        pageUrl.search = params.toString();\n                        return doGetApiRequest(pageUrl.toString(), page, allPages);\n                    });\n                    return Promise.all(requests)\n                        .then(responses => {\n                            return response.concat(responses.flat());\n                        });\n                }\n                return response;\n            })\n            .catch(err => {\n                \/\/console.error('Erro: ', err);\n                const container = document.getElementById('alumni-testimonials-list');\n                if(!!container){\n                    container.innerHTML = `Erro`;\n                }\n                enableLoading(false);\n                return err;\n            });\n        };\n        \n        \n        const syncState = () => {\n            const form = getForm();\n            \/\/history.replaceState({ 'alumni-testimonialSearch': Object.fromEntries(new FormData(form)) }, '');\n        };\n        \n        const doSearch = (page=1) => {\n            const form = getForm();\n            const input = form.querySelector('.alumni-testimonials-search-input');\n            const container = getContainer();\n            const url = new URL(input.dataset.apiUrl.replace(\/\\${apiUrl}\/,form.dataset.apiUrl));\n            const taxonomies = Object.keys(taxonomiesInfo);\n            const urlSearchParameters = new URLSearchParams({\n                '_fields': 'slug,title,date,link,_links,excerpt,course_tax,_embedded.wp:featuredmedia,meta.custompostfields_completion_year'+taxonomies.join(\",\"),\n                '_embed':'wp:term,wp:featuredmedia',\n                'context': 'view',\n                'per_page': 12,\n                'page': page,\n                'filter[orderby]':'meta_value_num',\n                'meta_key':'completion_year',\n                'order':'asc',\n            });\n            \n            enableLoading(true);\n            syncState();\n            \n            const formData = new FormData(form);\n            for (let [key, value] of formData.entries()) { \n                if(!!value && value.length>0){\n                    urlSearchParameters.append(key, value);\n                }\n            }\n            url.search = urlSearchParameters.toString();\n            \n            if(page<=1){\n                container.innerHTML = '<ul class=\"alumni-testimonials-list-items-container no-bullets\" role=\"group\" aria-describedby=\"alumni-testimonials-list-title\"><\/ul>';\n            }\n            \n            return doGetApiRequest(url, page).then(posts => {\n                if(!posts || typeof posts[Symbol.iterator] !== 'function'){\n                    if(page<=1){\n                        container.innerHTML = '';\n                    }\n                    return posts;\n                }\n                if(posts.length<=0){\n                    container.innerHTML = 'Sem dados a apresentar.';\n                }else{\n                    const itemsContainer = container.querySelector('.alumni-testimonials-list-items-container');\n                    if(!!itemsContainer){\n                        let output = '';\n                        let postType = '';\n                        let postTypeSlug = '';\n                        \n                        const metaExcludeTaxonomy = [\n                            'resource_status'\n                        ];\n                        \n                        for ( let post of posts ) {\n                            let meta = `<dl title=\"Informa\u00e7\u00f5es adicionais:\" class=\"meta d-md-flex justify-content-between pt-2\" style=\"margin-right: 35px;\">`;\n                            meta += taxonomies.map(taxonomy=>{\n                                if(metaExcludeTaxonomy.includes(taxonomy)){\n                                    return '';\n                                }\n                                \n                                let info =  (Array.isArray(post[taxonomy]) && taxonomiesInfo[taxonomy])?post[taxonomy].map(id=>{\n                                    return (taxonomiesInfo[taxonomy][id] && taxonomiesInfo[taxonomy][id].name && taxonomiesInfo[taxonomy][id].name.length>0)?taxonomiesInfo[taxonomy][id].name:false;\n                                }).join('<span class=\"taxonomy-separator\">, <\/span>'):false;\n                               \n                                return (info && taxonomiesInfo[taxonomy].label && taxonomiesInfo[taxonomy].label.length>0) ? (`\n                                    <div class=\"pr-md-2\"><dt class=\"py-1 taxonomy taxonomy-label taxonomy-${taxonomy}\">${taxonomiesInfo[taxonomy].label}<\/dt> \n                                    <dd class=\"pb-1 taxonomy taxonomy-value\">${info}<span class=\"taxonomies-separator\"><\/span><\/dd><\/div>`):'';\n                            }).join('');\n                            meta += '<\/dl>';\n                            \n                            let featuredMedia = '';\n                            const featuredMediaInfo = (post._embedded && Array.isArray(post._embedded[\"wp:featuredmedia\"]) && post._embedded[\"wp:featuredmedia\"].length>0)?post._embedded[\"wp:featuredmedia\"].shift():null;\n                            if(featuredMediaInfo && featuredMediaInfo.source_url){\n                                const srcSet = [];\n                                const sizes = '';\n                                if(featuredMediaInfo.media_details && typeof featuredMediaInfo.media_details.sizes === 'object' && featuredMediaInfo.media_details.sizes !== null){\n                                    for (let [key, size] of Object.entries(featuredMediaInfo.media_details.sizes)) {\n                                        if(size.source_url && size.width){\n                                            srcSet.push(`${size.source_url} ${size.width}w`);\n                                        }\n                                    }\n                                    if(srcSet.length>0){\n                                        featuredMedia += ` srcset=\"${srcSet.join(', ')}\"`;\n                                    }\n                                }\n                                if(featuredMediaInfo.media_details.width){\n                                    featuredMedia +=` sizes=\"(max-width: ${featuredMediaInfo.media_details.width}px) 100vw, ${featuredMediaInfo.media_details.width}px\"`;\n                                }\n                                featuredMedia = `<span class=\"alumni-testimonial-thumbnail-wrapper\"><img class=\"alumni-testimonial-thumbnail\" loading=\"lazy\" alt=\"\" src=\"${featuredMediaInfo.source_url}\" ${featuredMedia}><\/span>`;\n                            }\n                            \n                            let excerpt = post.excerpt.rendered ? `<span class=\"d-flex flex-column info\">\n                                                            <i class=\"quote-icon\" aria-hidden=\"true\" role=\"presentation\"><\/i><span class=\"d-flex flex-grow-0 align-items-center\"><q cite=\"${post.link}\" class=\"block excerpt\">${post.excerpt.rendered}<\/q><\/span>\n                                                            \n                            `:''; \n                            \n                            output += `<div id=\"testimonial-${post.slug}\" class=\"testimonial col-lg-4 col-md-6 mb-0 mb-md-4 d-flex flex-column\">\n                                        <a href=\"${post.link}\" target=\"_blank\" class=\"d-flex flex-row entry-link h-100 m-0 mb-4 mr-0 mr-md-3\">\n                                            <span class=\"block\">\n                                                <img loading=\"lazy\" style=\"width:70px; height:70px;  max-width: none; object-fit:cover;\" src=\"${featuredMediaInfo.source_url}\" class=\"block rounded-circle\" alt=\"${post.title.rendered}\">\n                                            <\/span>\n                                            ${excerpt}\n                                            <span class=\"block author\">${post.title.rendered}<\/span>\n                                            <span class=\"block meta pb-4\">\n                                                ${post.meta[`custompostfields_completion_year`]}\n                                            <\/span>\n                                        <\/a>\n                                        <\/div>`;\n                                            \n                        }\n                        itemsContainer.innerHTML += output;\n                    }\n                }\n                enableLoading(false);\n                return posts;\n            });\n        };\n        \n        document.addEventListener('DOMContentLoaded', () => {\n            const form = getForm();\n            if(!isSupported || form===undefined || form.dataset.apiUrl===undefined){\n                return;\n            }\n            \n            enableLoading(true);\n            \n            if (form.querySelector('.alumni-testimonials-layout-btn')) {\n                form.querySelectorAll('.alumni-testimonials-layout-btn').forEach((button) => {\n                    button.addEventListener(\"click\", function(event) {\n                        const input = form.querySelector('#alumni-testimonials-layout');\n                        if(event.target.tagName === \"BUTTON\" && !form.classList.contains(event.target.id)){\n                            form.classList.remove(event.target.id===\"alumni-testimonials-as-grid\"?\"alumni-testimonials-as-list\":\"alumni-testimonials-as-grid\");\n                            form.classList.add(event.target.id);\n                            if(input){\n                                input.value = event.target.id;\n                            }\n                            form.querySelectorAll('.alumni-testimonials-layout-btn.active').forEach((button) => {\n                                button.classList.remove('active');\n                                button.setAttribute('aria-checked', 'false');\n                            });\n                            button.classList.add('active');\n                            button.setAttribute('aria-checked', 'true');\n                        }\n                        syncState();\n                    });\n                });\n            }\n            \n            const loadingButton = getLoading();\n            if(loadingButton){\n                loadingButton.addEventListener(\"click\", function(event) {\n                    if(!isLoading() && (ofPages()>0 && ofPages()>currentPage())){\n                        doSearch(currentPage()+1).then(posts => {});\n                    }\n                    event.preventDefault();\n                });\n            }\n            \n            const container = document.getElementById('alumni-testimonials-list');\n            const taxonomiesRequests = Array.from(form.querySelectorAll(\".alumni-testimonial-taxonomy-filter\")).map(taxonomy => {\n            \n                if(! \"apiUrl\" in taxonomy.dataset || ! \"taxonomy\" in taxonomy.dataset){\n                    return;\n                }\n                const taxonomySlug = taxonomy.getAttribute(\"name\");\n                const taxonomyLabel = taxonomy.querySelector(\".taxonomy-label\");\n                const taxonomySelected = taxonomy.dataset.selected||'';\n                const taxonomyInclude = taxonomy.dataset.include?taxonomy.dataset.include.split(','):[];\n                taxonomiesInfo[taxonomySlug] = {};\n                \n                let url = new URL(taxonomy.dataset.apiUrl.replace(\/\\${apiUrl}\/, form.dataset.apiUrl).replace(\/\\${taxonomy}\/, taxonomySlug));\n                url.search = new URLSearchParams({\n                    '_fields': 'id,slug,name,taxonomy,link,description,count',\n                    'context': 'view'\n                }).toString();\n                \n                return doGetApiRequest(url, 1, true).then(terms => {\n                    if(typeof terms[Symbol.iterator] !== 'function'){\n                        return;\n                    }\n                    if(taxonomyLabel && taxonomyLabel.text){\n                        taxonomiesInfo[taxonomySlug]['label'] = taxonomyLabel.text;\n                    }\n                    for ( let term of terms ) {\n                        if(taxonomyInclude.length>0 && !taxonomyInclude.includes(term.slug)){\n                            continue;\n                        }\n                        \n                        taxonomiesInfo[taxonomySlug][term.id] = term;\n                        \n                        let option = document.createElement(\"option\");\n                        option.text = term.name;\n                        option.value = term.id;\n                        option.id = `select-${taxonomySlug}-${term.slug}`;\n                        if(term.slug===taxonomySelected){\n                            option.selected = true;\n                            option.setAttribute('selected', 'selected');\n                        }\n                        taxonomy.appendChild(option);\n                    }\n                    \n                    taxonomy.addEventListener('change', ()=>doSearch());\n                    taxonomy.classList.replace(\"disabled-filter\", \"enabled-filter\");\n                });\n            });\n            \n            Promise.all(taxonomiesRequests).then(()=>{\n                form.addEventListener('submit',  event => {\n                    doSearch();\n                    \n                    event.preventDefault();\n                });\n                \n                \n                const input = form.querySelector('.alumni-testimonials-search-input');\n                input.timeout = null;\n                input.addEventListener('keyup', function (e) {\n                    clearTimeout(input.timeout);\n                \n                    input.timeout = setTimeout(()=>{\n                        doSearch();\n                    }, 350);\n                });\n                input.addEventListener('blur', function (e) {\n                    clearTimeout(input.timeout);\n                });\n                input.classList.replace(\"disabled-filter\", \"enabled-filter\");if(history.state && history.state.alumni-testimonialSearch){\n                    let formItem, formItemKey;\n                    for ( formItemKey in history.state.alumni-testimonialSearch ) {\n                        if(history.state.alumni-testimonialSearch[formItemKey] && history.state.alumni-testimonialSearch[formItemKey].length>0 && (formItem = form.querySelector(`[name=\"${formItemKey}\"]:not([data-selected])`) )){\n                            formItem.value = history.state.alumni-testimonialSearch[formItemKey];\n                        }\n                    }\n                    const input = form.querySelector('#alumni-testimonials-layout');\n                    if(input && input.value.length>0 && !form.classList.contains(input.value)){\n                        form.classList.remove(input.value===\"alumni-testimonials-as-grid\"?\"alumni-testimonials-as-list\":\"alumni-testimonials-as-grid\");\n                        form.classList.add(input.value);\n                        form.querySelectorAll('.alumni-testimonials-layout-btn').forEach((button) => {\n                            if(button.id == input.value){\n                                button.classList.add('active');\n                                button.setAttribute('aria-checked', 'true');\n                            }else{\n                                button.classList.remove('active');\n                                button.setAttribute('aria-checked', 'false');\n                            }\n                        });\n                    }\n                }\n                doSearch().then(posts => {const loadingButton = getLoading();\n                    if(loadingButton){\n                        (new IntersectionObserver((targets)=>{\n                            targets.forEach((target) => {\n                                if (target.isIntersecting && target.intersectionRatio >= 0.75 && !isLoading() && (ofPages()>0 && ofPages()>currentPage())) {\n                                    target.target.dispatchEvent(new MouseEvent('click', {\n                                        view: window,\n                                        bubbles: true,\n                                        cancelable: true\n                                    }));\n                                }\n                            });\n                        }, {\n                          root: null,\n                          rootMargin: '0px',\n                          threshold: 1.0\n                        })).observe(loadingButton);\n                    }\n                });\n            });\n        });\n    })(\n           \"fetch\" in window \n        && \"URL\" in window \n        && \"URLSearchParams\" in window \n        && \"FormData\" in window\n        && \"Promise\" in window\n        && \"history\" in window\n        && \"querySelector\" in document\n        && \"querySelectorAll\" in document\n        && \"includes\" in Array()\n        && \"from\" in Array\n        && (function(){\n            try{\n                Function(\"() => {};\"); \n                Function(\"class Feature {};\");\n                return true;\n            }catch(exception){\n                return false;\n            }\n        })()\n    );\n        <\/script>\n    <noscript>\n        O JavaScript n\u00e3o \u00e9 suportado pelo seu navegador.\n        <a href=\"&#x2F;estm&#x2F;wp-json&#x2F;wp&#x2F;v2&#x2F;pages&#x2F;589&#x3F;nojs&#x3D;true\">\n             Por favor, consulte uma vers\u00e3o alternativa.\n        <\/a>\n    <\/noscript>\n","protected":false},"excerpt":{"rendered":"ESTM Rede Alumni O Polit\u00e9cnico de Leiria valoriza o contacto com os&nbsp;antigos estudantes das suas 5 escolas, de modo a potenciar: A forma\u00e7\u00e3o ao longo da vida;A atualiza\u00e7\u00e3o de informa\u00e7\u00e3o e conhecimento;O refor\u00e7o de uma comunidade orientada para a produ\u00e7\u00e3o cient\u00edfica e tecnol\u00f3gica. A&nbsp;Rede Alumni&nbsp;foi criada com a miss\u00e3o de&nbsp;promover iniciativas que reforcem&nbsp;os la\u00e7os&nbsp;entre a [&hellip;]","protected":false},"author":4,"featured_media":794,"parent":573,"menu_order":80,"comment_status":"closed","ping_status":"closed","template":"","meta":{"multilingual_post_translation":"","page_post-custom-url":"","page_post-custom-url-target":""},"_links":{"self":[{"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/pages\/589"}],"collection":[{"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/comments?post=589"}],"version-history":[{"count":3,"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/pages\/589\/revisions"}],"predecessor-version":[{"id":4837,"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/pages\/589\/revisions\/4837"}],"up":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/pages\/573"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/media\/794"}],"wp:attachment":[{"href":"https:\/\/www.ipleiria.pt\/estm\/wp-json\/wp\/v2\/media?parent=589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}