{"id":553,"date":"2021-10-22T11:22:32","date_gmt":"2021-10-22T11:22:32","guid":{"rendered":"https:\/\/www.ipleiria.pt\/esecs\/?page_id=553"},"modified":"2025-03-24T10:33:49","modified_gmt":"2025-03-24T10:33:49","slug":"provas-publicas-agendadas","status":"publish","type":"page","link":"https:\/\/www.ipleiria.pt\/estg\/estudantes\/informacoes\/provas-publicas-agendadas\/","title":{"rendered":"Provas p\u00fablicas agendadas"},"content":{"rendered":"\n<div class=\"wp-block-pt-ipleiria-ued-wp-theme-ipleiria-gutenbergblocks-moc gbmoc\" role=\"navigation\" aria-label=\"Menu de conte\u00fados\"><div class=\"gbmoc-menu-wrapper\"><div id=\"gbmoc-c8d931-26-menu-container\" class=\"gbmoc-menu-container\"><div class=\"gbmoc-title\" id=\"gbmoc-c8d931-26-title\">Ir para:<\/div><ul aria-describedby=\"gbmoc-c8d931-26-title\" class=\"gbmoc-menuitems\"><li><a href=\"#provas-publicas-agendadas\">Provas p\u00fablicas agendadas<\/a><\/li><li><a href=\"#regras-para-a-apresentacao-da-dissertacaoprojetorelatorio-de-estagio\">Regras para a apresenta\u00e7\u00e3o da Disserta\u00e7\u00e3o\/Projeto\/Relat\u00f3rio de Est\u00e1gio<\/a><\/li><li><a href=\"#strongprocedimento-para-efeitos-de-entrega-dos-trabalhos-finais-de-emdissertacaoprojetoestagioemstrong\">Procedimento para efeitos de entrega dos trabalhos finais de\u00a0Disserta\u00e7\u00e3o\/Projeto\/Est\u00e1gio<\/a><\/li><li class=\"gbmoc-scroll-to-top-wrapper\"><a class=\"gbmoc-scroll-to-top\" href=\"#top\">Topo<\/a><\/li><\/ul><\/div><\/div><\/div>\n\n\n\n<p class=\"is-style-theme-subtitle\">ESTG<\/p>\n\n\n\n<h2 class=\"is-style-theme-title\" id=\"provas-publicas-agendadas\">Provas p\u00fablicas agendadas<\/h2>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n    <section aria-describedby=\"provapublicas-section-title\">\n        <h2 id=\"provapublicas-section-title\" class=\"sr-only\">Pesquisa de provas<\/h2>\n        <form id=\"provapublicas-search\" name=\"provapublicas-search\" class=\"provapublicas-as-list\" data-api-url=\"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\" aria-controls=\"provapublicas-list\">\n            <div class=\"container\">\n                <div class=\"row\">\n                    <div class=\"col-sm pl-2 pr-2 pl-sm-0\">\n                        <label for=\"mestrado\" class=\"sr-only\">Mestrado: <\/label>\n                        <select id=\"mestrado\" name=\"mestrado\" class=\"custom-select custom-select-sm provapublica-taxonomy-filter disabled-filter\" data-api-url=\"${apiUrl}\/${taxonomy}?type=provapublica\" data-include=\"\" data-exclude=\"without-category\"  style=\"-webkit-appearance: none;-moz-appearance: none; appearance: none;\">\n                            <option value=\"\" class=\"font-weight-bold taxonomy-label\">Mestrado: <\/option>\n                        <\/select>\n                    <\/div>\n                    \n                    <div class=\"col-sm pl-2 pr-2 pr-sm-0 mt-2 mt-sm-0\">\n                        <label for=\"ano-letivo\" class=\"sr-only\">Ano: <\/label>\n                        <select id=\"ano-letivo\" name=\"ano-letivo\" class=\"custom-select custom-select-sm provapublica-taxonomy-filter disabled-filter\" data-api-url=\"${apiUrl}\/${taxonomy}?type=provapublica\" data-include=\"\" data-exclude=\"without-category\"  data-order=\"desc\" data-selectfirst=\"true\"  style=\"-webkit-appearance: none;-moz-appearance: none; appearance: none;\">\n                            <option value=\"\" class=\"font-weight-bold taxonomy-label\">Ano: <\/option>\n                        <\/select>\n                    <\/div>\n                    \n                    \n                    <div class=\"col-sm pl-2 pr-2 pr-sm-0 d-flex flex-sm-grow-0 justify-content-center mt-2 mt-sm-0\">\n                        <div class=\"btn-group provapublicas-layout-btn-group\" role=\"radiogroup\" aria-label=\"Disposi\u00e7\u00e3o\">\n                            <button type=\"button\" role=\"radio\" aria-checked=\"false\" id=\"provapublicas-as-grid\" class=\"provapublicas-layout-btn btn btn-light btn-sm\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"100%\" width=\"100%\" viewBox=\"0 -256 1800 1800\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M0-56h519.593v400H0zm640.407 0H1160v400H640.407zM1280-56h519.593v400H1280zM0 464h519.593v400H0zm640.407 0H1160v400H640.407zM1280 464h519.593v400H1280zM0 984h519.593v400H0zm640.407 0H1160v400H640.407zM1280 984h519.593v400H1280z\"\/><\/svg>\n                                <span class=\"sr-only\">Grelha<\/span><\/button>\n                            <button type=\"button\" role=\"radio\" aria-checked=\"true\" id=\"provapublicas-as-list\" class=\"provapublicas-layout-btn btn btn-light btn-sm active\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"100%\" width=\"100%\" viewBox=\"0 -256 1800 1800\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M0 984h1800v400H0zm0-520h1800v400H0zM0-56h1800v400H0z\"\/><\/svg>\n                                <span class=\"sr-only\">Lista<\/span><\/button>\n                            <input type=\"hidden\" name=\"provapublicas-layout\" id=\"provapublicas-layout\" value=\"provapublicas-as-list\">\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"row\">\n                    <input type=\"text\" class=\"provapublicas-search-input form-control form-control-xs mt-2 mb-2 provapublica-search-filter disabled-filter\" name=\"search\" value=\"\" placeholder=\"Pesquisar\" data-api-url=\"${apiUrl}\/provapublica\" >\n                <\/div>\n\n                <input style=\"display: none;\" type=\"submit\" value=\"Executar pesquisa\">\n            <\/div>\n\n            <div id=\"provapublicas-container\">\n                <h3 id=\"provapublicas-list-title\" class=\"provapublicas-list-title\">Provas p\u00fablicas de mestrado<span class=\"sr-only\">: <\/span><\/h3>\n                <div id=\"provapublicas-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\n        document.head.insertAdjacentHTML(\"beforeend\", `\n           \n            <style>\n                #provapublicas-search .provapublica-search-filter,\n                #provapublicas-search .provapublica-taxonomy-filter{\n                    transition: opacity 0.5s;\n                }\n                #provapublicas-search .disabled-filter{\n                    visibility: hidden;\n                    opacity: 0;\n                }\n                #provapublicas-search .enabled-filter{\n                    visibility: visible;\n                    opacity: 1;\n                }\n                \n                \n                #provapublicas-search .provapublicas-layout-btn-group{\n                    padding-top: calc(0.25rem - 1px);\n                }\n                #provapublicas-search .provapublicas-layout-btn svg{\n                    fill: #030303;\n                    height: calc(1.5em - 0.25rem);\n                    width: auto;\n                    pointer-events: none;\n                }\n                #provapublicas-search .btn-light:not(:disabled):not(.disabled):active, \n                #provapublicas-search .show>.btn-light.dropdown-toggle {\n                    color: #FFFFFF;\n                    background-color: #030303;\n                    border-color: #000000;\n                }\n                \n                #provapublicas-search .btn-light:not(:disabled):not(.disabled):active svg{\n                    fill: #FFFFFF\n                }\n                \n                #provapublicas-search .provapublicas-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                }#provapublicas-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                }.provapublicas-as-list #provapublicas-list ul{\n                    list-style: none;\n                    padding: 0;\n                }\n                .provapublicas-as-list #provapublicas-list ul li {\n                    display: flex;\n                    flex-direction: column;\n                }\n                .provapublicas-as-list #provapublicas-list a {\n                    line-height: 1.7rem;\n                    padding: 15px 0.75rem;\n                    margin: 0;\n                    border-bottom: 1px solid #f2f4f7;\n                }\n                .provapublicas-as-list #provapublicas-list a,\n                .provapublicas-as-list #provapublicas-list a:link,\n                .provapublicas-as-list #provapublicas-list a:visited{\n                    color: #262626;\n                    text-decoration: none;\n                }\n                .provapublicas-as-list #provapublicas-list a:hover,\n                .provapublicas-as-list #provapublicas-list a:focus,\n                .provapublicas-as-list #provapublicas-list a:active,\n                .provapublicas-as-list #provapublicas-list a:hover .meta,\n                .provapublicas-as-list #provapublicas-list a:focus .meta,\n                .provapublicas-as-list #provapublicas-list a:active .meta{\n                    color: #1b7b3e;\n                }\n                .provapublicas-as-list #provapublicas-list a:hover:before,\n                .provapublicas-as-list #provapublicas-list a:focus:before,\n                .provapublicas-as-list #provapublicas-list a:active:before{\n                    border-color: #545454;\n                }\n                .provapublicas-as-list #provapublicas-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                .provapublicas-as-list #provapublicas-list a .title{\n                    display: block;\n                    font-weight: 600;\n                    font-size: 1.1rem;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta{\n                    \/*display: flex;*\/\n                    color: #8c8c8c;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy,\n                .provapublicas-as-list #provapublicas-list a .meta .custompostfield{\n                    font-size: 0.9rem;\n                    line-height: 1rem;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-label,\n                .provapublicas-as-list #provapublicas-list a .meta .custompostfield-label\n                {\n                    font-weight: 600;\n                    padding-right: 5px;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomies-separator {\n                    padding: 0 0.2rem 0 0.4rem;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy:not([style*=\"display:none\"]):last-child:after,\n                .provapublicas-as-list #provapublicas-list a .provapublica-thumbnail-wrapper{\n                    display: none;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-type,\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-area,\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-clanguage{\n                    display: none;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-mestrado{\n                    flex-basis:30%;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-school{\n                    order: 1;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-period{\n                    order: 2;\n                }\n                .provapublicas-as-list #provapublicas-list a .meta .taxonomy-state{\n                    order: 3;\n                }\n                #provapublicas-search.provapublicas-as-list .provapublicas-list-title{\n                    margin-bottom: 0;\n                }\n                \n                #provapublicas-search.provapublicas-as-list .new-icon{\n                    margin-top: -15px;\n                    margin-right: -10px;\n                    width: 1.5rem;\n                }.provapublicas-as-grid #provapublicas-list ul{\n                    display: flex;\n                    flex-wrap: wrap;\n                    margin-right: -15px;\n                    margin-left: -15px;\n                }\n                .provapublicas-as-grid #provapublicas-list ul li{\n                    position: relative;\n                    width: 100%;\n                    padding-right: 15px;\n                    padding-left: 15px;\n                }\n                .provapublicas-as-grid #provapublicas-list a{\n                    display: block;\n                    width: 100%;\n                    padding-top: 30%;\n                    margin-bottom: 30px;\n                    position: relative;\n                    background-color: #1c1c1c;\n                    color: #fffffe;\n                    font-size: 1.5rem;\n                    text-transform: uppercase;\n                    font-weight: 700;\n                    text-decoration: none;\n                }\n                .provapublicas-as-grid #provapublicas-list a:hover,\n                .provapublicas-as-grid #provapublicas-list a:focus,\n                .provapublicas-as-grid #provapublicas-list a:active{\n                    background-color: #1b7b3e;\n                }\n                .provapublicas-as-grid #provapublicas-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                .provapublicas-as-grid #provapublicas-list a>.meta{\n                    display: none !important;\n                }\n                .provapublicas-as-grid #provapublicas-list a .provapublica-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                .provapublicas-as-grid #provapublicas-list a .provapublica-thumbnail,\n                .provapublicas-as-grid #provapublicas-list a .provapublica-thumbnail-wrapper:after{\n                    display: block;\n                    width: 100%;\n                    height: auto;\n                    max-width: none;\n                    position: absolute;\n                }\n                .provapublicas-as-grid #provapublicas-list a .provapublica-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                .provapublicas-as-grid #provapublicas-list a:hover .provapublica-thumbnail-wrapper:after,\n                .provapublicas-as-grid #provapublicas-list a:focus .provapublica-thumbnail-wrapper:after,\n                .provapublicas-as-grid #provapublicas-list a:active .provapublica-thumbnail-wrapper:after{\n                    \/*opacity: 0;*\/\n                    background-color: #1b7b3e;\n                }\n                @media (min-width: 576px){\n                    .provapublicas-as-grid #provapublicas-list ul li{\n                        flex: 0 0 50%;\n                        max-width: 50%;\n                    }\n                    \n                    .provapublicas-as-grid #provapublicas-list a{\n                        padding-top: 100%;\n                    }\n                    .provapublicas-as-grid #provapublicas-list a .provapublica-thumbnail{\n                        display: block;\n                        height: 100%;\n                        width: auto;\n                    }\n                }\n                @media (min-width: 768px){\n                    .provapublicas-as-grid #provapublicas-list ul li{\n                        flex: 0 0 33.33333%;\n                        max-width: 33.33333%;\n                    }\n                }\n                @media (min-width: 992px){\n                    .provapublicas-as-grid #provapublicas-list ul li{\n                        flex: 0 0 25%;\n                        max-width: 25%;\n                    }\n                }\n                \n                .provapublicas-as-grid #provapublicas-list .new-icon{\n                    position: absolute;\n                    top: 0;\n                    left: 0;\n                    width: 3rem;\n                }\n                .justify-content-flex-start{\n                    justify-content: flex-start;\n                }\n            <\/style>\t\n        `);\n\n        const taxonomiesInfo = {};\n\n        const getForm = () => {\n            return document.querySelector('form#provapublicas-search');\n        };\n\n        const getContainer = ()=>{\n            const form = getForm();\n            return !!form?form.querySelector('#provapublicas-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('provapublicas-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({ 'provapublicaSearch': Object.fromEntries(new FormData(form)) }, '');\n        };\n\n        const doSearch = (page=1) => {\n            const form = getForm();\n            const input = form.querySelector('.provapublicas-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': 'title,meta.custompostfields_data,meta.custompostfields_titulo-prova-publica,content,date,link,_links,_embedded.wp:featuredmedia,'+taxonomies.join(\",\"),\n                '_embed':'wp:term,wp:featuredmedia','context': 'view',\n                'per_page': 12,\n                'page': page,\n                'orderby': 'date',\n                'order': 'desc',\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            \n            url.search = urlSearchParameters.toString();\n            \n            if(page<=1){\n                container.innerHTML = '<ul class=\"provapublicas-list-items-container no-bullets\" aria-role=\"group\" aria-describedby=\"provapublicas-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('.provapublicas-list-items-container');\n                    \n                    if(!!itemsContainer){\n                        let output = '';\n                        \n                        \n                        const metaExcludeTaxonomy = [\n                            'resource_status',\n                            'ano-letivo'\n                        ];\n                        \n                        for ( let post of posts ) {\n                            \n                            let meta = `<dl title=\"Informa\u00e7\u00f5es adicionais:\" class=\"meta d-md-flex justify-content-flex-start pt-2\">`;\n                            \n                            meta += `<div class=\"pr-md-2\" style=\"flex-basis:60%;\">\n                                <dt class=\"py-1 taxonomy taxonomy-label\" >T\u00edtulo:<\/dt>\n                                <dd class=\"py-1 taxonomy taxonomy taxonomy-value\">${post.meta[\"custompostfields_titulo-prova-publica\"]}<\/dd>\n                                <\/div>`;\n                                \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 taxonomy-${taxonomy}\"><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                            \n                            \n                            meta += `<div class=\"pr-md-2\">\n                                <dt class=\"py-1 taxonomy taxonomy-label\" >Dia:<\/dt>\n                                <dd class=\"py-1 taxonomy taxonomy taxonomy-value\">${post.meta[\"custompostfields_data\"]}<\/dd>\n                                <\/div>`;\n                                \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=\"provapublica-thumbnail-wrapper\"><img class=\"provapublica-thumbnail\" loading=\"lazy\" alt=\"\" src=\"${featuredMediaInfo.source_url}\" ${featuredMedia}><\/span>`;\n                            }\n                            \n                            output += `\n                                <li>\n                                    <a href=\"${post.link}\" class=\"position-relative\">\n                                        ${featuredMedia}\n                                        <span class=\"title\">${post.title.rendered}<\/span>\n                                        ${meta}\n                                    <\/a>\n                                <\/li>\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('.provapublicas-layout-btn')) {\n                form.querySelectorAll('.provapublicas-layout-btn').forEach((button) => {\n                    button.addEventListener(\"click\", function(event) {\n                        const input = form.querySelector('#provapublicas-layout');\n                        if(event.target.tagName === \"BUTTON\" && !form.classList.contains(event.target.id)){\n                            form.classList.remove(event.target.id===\"provapublicas-as-grid\"?\"provapublicas-as-list\":\"provapublicas-as-grid\");\n                            form.classList.add(event.target.id);\n                            if(input){\n                                input.value = event.target.id;\n                            }\n                            form.querySelectorAll('.provapublicas-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('provapublicas-list');\n            const taxonomiesRequests = Array.from(form.querySelectorAll(\".provapublica-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                let taxonomySelected = taxonomy.dataset.selected||'';\n                const taxonomyInclude = taxonomy.dataset.include?taxonomy.dataset.include.split(','):[];\n                const taxonomyOrder = taxonomy.dataset.order||'asc';\n                const taxonomySelectFirst=taxonomy.dataset.selectfirst||'false';\n                \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                    'order': taxonomyOrder\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                    \n                    if(taxonomySelectFirst==='true' && taxonomySelected === '' ){\n                        taxonomySelected = terms[0][\"slug\"];\n                    }\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('.provapublicas-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.provapublicaSearch){\n                    let formItem, formItemKey;\n                    for ( formItemKey in history.state.provapublicaSearch ) {\n                        if(history.state.provapublicaSearch[formItemKey] && history.state.provapublicaSearch[formItemKey].length>0 && (formItem = form.querySelector(`[name=\"${formItemKey}\"]:not([data-selected])`) )){\n                            formItem.value = history.state.provapublicaSearch[formItemKey];\n                        }\n                    }\n                    const input = form.querySelector('#provapublicas-layout');\n                    if(input && input.value.length>0 && !form.classList.contains(input.value)){\n                        form.classList.remove(input.value===\"provapublicas-as-grid\"?\"provapublicas-as-list\":\"provapublicas-as-grid\");\n                        form.classList.add(input.value);\n                        form.querySelectorAll('.provapublicas-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;estg&#x2F;wp-json&#x2F;wp&#x2F;v2&#x2F;pages&#x2F;553&#x3F;nojs&#x3D;true\">\n             Por favor, veja uma vers\u00e3o alternativa.\n        <\/a>\n    <\/noscript>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"is-style-theme-subtitle\">Regras<\/h2>\n\n\n\n<h2 class=\"is-style-theme-title\" id=\"regras-para-a-apresentacao-da-dissertacaoprojetorelatorio-de-estagio\">Regras para a apresenta\u00e7\u00e3o da Disserta\u00e7\u00e3o\/Projeto\/Relat\u00f3rio de Est\u00e1gio<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-container-11 wp-block-columns\">\n<div class=\"wp-container-1 wp-block-column\">\n<p>O ciclo de estudos conducente ao grau de mestre integra obrigatoriamente uma disserta\u00e7\u00e3o de natureza cient\u00edfica, um trabalho de projeto ou um est\u00e1gio de natureza profissional (Vide al\u00ednea b), n.\u00ba1, artigo 20.\u00ba, da Lei n.\u00ba 65\/2018, de 16 de agosto);<\/p>\n\n\n\n<p>A al\u00ednea b) do n.\u00ba 1 do artigo 47.\u00ba do Regulamento Acad\u00e9mico do 2.\u00ba ciclo de estudos do IPLeiria e o art. 30.\u00ba Regulamento de Avalia\u00e7\u00e3o do Aproveitamento dos Estudantes da Escola Superior de Tecnologia e Gest\u00e3o do Instituto Polit\u00e9cnico de Leiria determinam as regras de avalia\u00e7\u00e3o especificas para a unidade curricular disserta\u00e7\u00e3o, trabalho de projeto e de est\u00e1gio.<\/p>\n\n\n\n<p>O&nbsp;modelo e as regras para a apresenta\u00e7\u00e3o da&nbsp;Disserta\u00e7\u00e3o\/Projeto\/Relat\u00f3rio de Est\u00e1gio&nbsp;s\u00e3o os seguintes:<\/p>\n<\/div>\n\n\n\n<div class=\"wp-container-10 wp-block-column\">\n<div class=\"wp-container-3 wp-block-columns\">\n<div class=\"wp-container-2 wp-block-column\">\n<ul><li><a href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/01\/Regras-de-apresentacao-grafica-da-dissertacao_trabalho-de-projeto_relatorio-de-estagio.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Regras de apresenta\u00e7\u00e3o gr\u00e1fica da disserta\u00e7\u00e3o, do trabalho de projeto ou relat\u00f3rio de est\u00e1gio<\/a><\/li><li><a href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/01\/Regras-de-apresentacao-grafica-da-dissertacao_trabalho-de-projeto_relatorio-de-estagio_EN.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Formatting your dissertation\/project or internship report<\/a><\/li><\/ul>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-container-5 wp-block-columns\">\n<div class=\"wp-container-4 wp-block-column\">\n<ul><li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/01\/Modelo_dissertacao_relatorio_projeto.docx\" target=\"_blank\">Modelo para apresenta\u00e7\u00e3o da Disserta\u00e7\u00e3o ou trabalho de Projeto <\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/01\/Modelo_dissertacao_relatorio_EN.docx\" target=\"_blank\">Template for the Dissertation or Project work<\/a><\/li><\/ul>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-container-7 wp-block-columns\">\n<div class=\"wp-container-6 wp-block-column\">\n<ul><li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/01\/Modelo_relatorio_estagio.docx\" target=\"_blank\">Modelo para apresenta\u00e7\u00e3o do Relat\u00f3rio de Est\u00e1gio<\/a><\/li><li><a href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/01\/Modelo_relatorio_estagio_EN.docx\" target=\"_blank\" rel=\"noreferrer noopener\">Template for the Internship Report<\/a><\/li><\/ul>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-container-9 wp-block-columns\">\n<div class=\"wp-container-8 wp-block-column\">\n<ul><li><a href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/03\/ipleiria-thesis-latex-template_2025.zip\" target=\"_blank\" rel=\"noreferrer noopener\">Modelo para apresenta\u00e7\u00e3o da Disserta\u00e7\u00e3o ou trabalho de Projeto (LaTeX)<\/a><\/li><\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"is-style-theme-subtitle\">Procedimento&nbsp;<\/h2>\n\n\n\n<h2 class=\"is-style-theme-title\" id=\"strongprocedimento-para-efeitos-de-entrega-dos-trabalhos-finais-de-emdissertacaoprojetoestagioemstrong\"><strong>Procedimento para efeitos de entrega dos trabalhos finais de&nbsp;<em>Disserta\u00e7\u00e3o\/Projeto\/Est\u00e1gio<\/em><\/strong><\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Os estudantes dever\u00e3o aceder, na Intranet, ao formul\u00e1rio \u201c<strong>Submiss\u00e3o de Trabalho Final de Mestrado (Disserta\u00e7\u00e3o | Projeto | Est\u00e1gio)<\/strong>\u201d em&nbsp;<em><a href=\"https:\/\/intranet.ipleiria.pt\/catalogo\/entidades\/DSA\/categorias\/ccce8444e7144d44acee5d99ff37906a\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/intranet.ipleiria.pt\/catalogo\/entidades\/DSA\/categorias\/ccce8444e7144d44acee5d99ff37906a<\/a><\/em>&nbsp;e formalizar a entrega com os seguintes passos:<\/p>\n\n\n\n<ol><li>Preenchimento no formul\u00e1rio dos par\u00e2metros relativos \u00e0 declara\u00e7\u00e3o de autoria e dep\u00f3sito;<\/li><li>Anexa\u00e7\u00e3o do parecer do orientador;<\/li><li>Entrega do trabalho atrav\u00e9s do recurso \u00e0 plataforma\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/filesender.fccn.pt\/\" target=\"_blank\"><em>https:\/\/filesender.fccn.pt\/<\/em><\/a>\u00a0(tutorial dispon\u00edvel\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/www.ipleiria.pt\/estg\/wp-content\/uploads\/sites\/32\/2025\/01\/Manual_FlieSender.pdf\" target=\"_blank\"><strong>aqui\u00a0<\/strong><\/a>).<\/li><\/ol>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"ESTG Provas p\u00fablicas agendadas Regras Regras para a apresenta\u00e7\u00e3o da Disserta\u00e7\u00e3o\/Projeto\/Relat\u00f3rio de Est\u00e1gio O ciclo de estudos conducente ao grau de mestre integra obrigatoriamente uma disserta\u00e7\u00e3o de natureza cient\u00edfica, um trabalho de projeto ou um est\u00e1gio de natureza profissional (Vide al\u00ednea b), n.\u00ba1, artigo 20.\u00ba, da Lei n.\u00ba 65\/2018, de 16 de agosto); A al\u00ednea [&hellip;]","protected":false},"author":1,"featured_media":4797,"parent":549,"menu_order":20,"comment_status":"closed","ping_status":"closed","template":"","meta":{"custompostfields_banners":""},"_links":{"self":[{"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/pages\/553"}],"collection":[{"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/comments?post=553"}],"version-history":[{"count":14,"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/pages\/553\/revisions"}],"predecessor-version":[{"id":9957,"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/pages\/553\/revisions\/9957"}],"up":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/pages\/549"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/media\/4797"}],"wp:attachment":[{"href":"https:\/\/www.ipleiria.pt\/estg\/wp-json\/wp\/v2\/media?parent=553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}