{"id":2750,"date":"2025-07-22T15:43:36","date_gmt":"2025-07-22T20:43:36","guid":{"rendered":"https:\/\/biblioteca.utc.edu.ec\/?page_id=2750"},"modified":"2026-03-06T10:04:24","modified_gmt":"2026-03-06T15:04:24","slug":"prueba2","status":"publish","type":"page","link":"https:\/\/biblioteca.utc.edu.ec\/?page_id=2750","title":{"rendered":"Libros en Catalogaci\u00f3n"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Libros nuevos que se encuentran en Proceso de Etiquetado<\/title>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@300;400;500;700&#038;display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0\/css\/all.min.css\">\n    <style>\n        body { font-family: 'Roboto', sans-serif; background-color: #f4f7f9; padding: 10px; margin: 0; }\n        #app-biblioteca { max-width: 1100px; margin: 20px auto; }\n        .bib-container { background: white; padding: 30px; border-radius: 12px; box-shadow: 0 4px 25px rgba(0,0,0,0.1); }\n        \n        h1 { text-align: center; color: #333; margin-bottom: 25px; }\n\n        .bib-header-select { \n            background-color: #ffffff; \n            color: #333; \n            padding: 20px; \n            border-radius: 8px; \n            margin-bottom: 25px; \n            display: flex; \n            flex-wrap: wrap; \n            gap: 15px; \n            justify-content: space-between; \n            align-items: center; \n            border: 1px solid #e0e0e0; \n        }\n        .bib-header-select select { \n            padding: 10px; border-radius: 6px; border: 1px solid #ddd; min-width: 250px; font-size: 14px; background-color: #f9f9f9;\n        }\n\n        .bib-search-panel { \n            display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); \n            gap: 15px; background-color: #fdfdfd; padding: 20px; border-radius: 8px; \n            border: 1px solid #e0e0e0; align-items: flex-end;\n        }\n        .bib-form-group { display: flex; flex-direction: column; }\n        .bib-form-group label { font-size: 0.8em; font-weight: bold; margin-bottom: 5px; color: #666; }\n        .bib-input { padding: 10px; border: 1px solid #ddd; border-radius: 6px; font-size: 14px; background: white; }\n        \n        .bib-button-container { display: flex; gap: 8px; }\n        \n        .bib-button { \n            background-color: #ffffff; color: #333; border: 1px solid #ccc; padding: 10px; border-radius: 6px; cursor: pointer; \n            font-weight: bold; height: 40px; min-width: 45px; transition: 0.2s; display: flex; align-items: center; justify-content: center; font-size: 1.1rem;\n        }\n\n        #btnBuscar:hover { background-color: #f0f0f0; border-color: #999; color: #000; }\n        .btn-limpiar:hover { background-color: #fce8e6; border-color: #d93025; color: #d93025; }\n\n        .bib-table { width: 100%; border-collapse: collapse; margin-top: 20px; }\n        .bib-table th { background-color: #f8f9fa; color: #5f6368; padding: 12px; text-align: left; border-bottom: 2px solid #eee; }\n        .bib-table td { padding: 12px; border-bottom: 1px solid #f1f1f1; font-size: 14px; }\n        \n        .bib-text-lib { color: #555; font-weight: 500; }\n        .highlight { background-color: #fff176; font-weight: bold; padding: 1px 2px; border-radius: 2px; }\n\n        .pagination { display: flex; justify-content: center; flex-wrap: wrap; gap: 8px; margin-top: 25px; padding-bottom: 20px; }\n        .page-link { font-size: 12px; color: #777; text-decoration: none; cursor: pointer; padding: 2px 4px; transition: 0.2s; border-bottom: 1px solid transparent; }\n        .page-link:hover { color: #000; border-bottom: 1px solid #333; }\n        .page-link.active { color: #000; font-weight: bold; border-bottom: 2px solid #000; }\n\n        \/* MODAL CENTRADO SIEMPRE *\/\n        .bib-modal { \n            display: none; \n            position: fixed; \n            z-index: 1000; \n            left: 0; \n            top: 0; \n            width: 100%; \n            height: 100%; \n            background: rgba(0,0,0,0.5); \n            backdrop-filter: blur(2px); \n            \/* Centrado absoluto *\/\n            display: none; \/* Se cambia a 'flex' v\u00eda JS cuando se abre *\/\n            align-items: center; \n            justify-content: center; \n        }\n        \n        .bib-modal-content { \n            background: white; \n            padding: 25px; \n            width: 90%; \n            max-width: 850px; \n            border-radius: 12px; \n            box-shadow: 0 5px 30px rgba(0,0,0,0.3); \n            max-height: 85vh; \n            overflow-y: hidden; \n            display: flex; \n            flex-direction: column; \n            position: relative; \n            margin: 0; \/* Eliminado el margin auto para dejar que flex lo centre *\/\n        }\n        \n        .bib-modal-header { margin-bottom: 15px; padding-right: 40px; }\n        .bib-modal-header h2 { color: #333 !important; margin: 0; }\n\n        .bib-close { \n            position: absolute; \n            top: 15px; \n            right: 20px; \n            font-size: 28px; \n            cursor: pointer; \n            color: #999; \n            line-height: 1; \n            transition: 0.2s;\n            z-index: 1010;\n        }\n        .bib-close:hover { color: #333; transform: scale(1.1); }\n        \n        .bib-modal-search-box { background: #f1f3f4; padding: 15px; border-radius: 8px; margin-bottom: 15px; }\n        .bib-modal-scroll { overflow-y: auto; flex-grow: 1; }\n        #bibContador { margin: 15px 0; color: #666; font-size: 0.9em; font-weight: 500; }\n    <\/style>\n<\/head>\n<body>\n\n<div id=\"app-biblioteca\">\n    <div class=\"bib-container\">\n        <h4>Libros en Proceso de Etiquetado (ya se encuentran en cat\u00e1logo)<\/h4>\n        <div class=\"bib-header-select\">\n            <span><strong>\ud83d\udcc2 VISOR R\u00c1PIDO POR SEDE:<\/strong><\/span>\n            <select id=\"bibSelectBiblioteca\"><option>Cargando datos&#8230;<\/option><\/select>\n        <\/div>\n        <div class=\"bib-search-panel\">\n            <div class=\"bib-form-group\"><label>C\u00f3digo del Bien<\/label><input type=\"text\" class=\"bib-input\" id=\"bibSearchCodigo\" autocomplete=\"off\"><\/div>\n            <div class=\"bib-form-group\"><label>ISBN<\/label><input type=\"text\" class=\"bib-input\" id=\"bibSearchIsbn\" autocomplete=\"off\"><\/div>\n            <div class=\"bib-form-group\"><label>T\u00edtulo<\/label><input type=\"text\" class=\"bib-input\" id=\"bibSearchTitulo\" autocomplete=\"off\"><\/div>\n            <div class=\"bib-form-group\"><label>Autor<\/label><input type=\"text\" class=\"bib-input\" id=\"bibSearchAutor\" autocomplete=\"off\"><\/div>\n            <div class=\"bib-form-group\">\n                <div class=\"bib-button-container\">\n                    <button id=\"btnBuscar\" class=\"bib-button\" title=\"BUSCAR\"><i class=\"fas fa-search\"><\/i><\/button>\n                    <button id=\"btnLimpiar\" class=\"bib-button btn-limpiar\" title=\"BORRAR\"><i class=\"fas fa-trash-alt\"><\/i><\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <p id=\"bibContador\">Conectando con la base de datos&#8230;<\/p>\n        <div style=\"overflow-x: auto;\">\n            <table class=\"bib-table\">\n                <thead><tr><th>C\u00f3digo<\/th><th>ISBN<\/th><th>T\u00edtulo<\/th><th>Autor<\/th><th>Biblioteca<\/th><\/tr><\/thead>\n                <tbody id=\"bibTableBody\"><\/tbody>\n            <\/table>\n        <\/div>\n        <div class=\"pagination\" id=\"bibPagination\"><\/div>\n    <\/div>\n<\/div>\n\n<div id=\"bibLibraryModal\" class=\"bib-modal\">\n    <div class=\"bib-modal-content\">\n        <span class=\"bib-close\" onclick=\"cerrarModal()\">&times;<\/span>\n        \n        <div class=\"bib-modal-header\">\n            <h4 id=\"bibModalTitle\">Proceso de Catalogaci\u00f3n Sede<\/h4>\n            <small id=\"bibModalContador\" style=\"color:#666;\"><\/small>\n        <\/div>\n        <div class=\"bib-modal-search-box\">\n            <label style=\"font-size: 0.8em; font-weight: bold; color: #555; display: block; margin-bottom: 5px;\">BUSCAR EN ESTA SEDE:<\/label>\n            <input type=\"text\" id=\"bibModalInputBusqueda\" class=\"bib-input\" style=\"width: 100%; box-sizing: border-box;\" placeholder=\"Filtre por c\u00f3digo, t\u00edtulo o autor...\">\n        <\/div>\n        <div class=\"bib-modal-scroll\">\n            <table class=\"bib-table\">\n                <thead><tr><th>C\u00f3digo<\/th><th>ISBN<\/th><th>T\u00edtulo<\/th><th>Autor<\/th><\/tr><\/thead>\n                <tbody id=\"bibModalTableBody\"><\/tbody>\n            <\/table>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    const APPS_SCRIPT_URL = \"https:\/\/script.google.com\/macros\/s\/AKfycbw3FUJmee1BCMeTgNrGnCdN5HHKMAVQYzay8NFa9pjQu0tgvyDEKwFWUyyYYlWUD6Z2uQ\/exec\"; \n    let bibAllData = [];\n    let filteredData = [];\n    let modalDataOriginal = []; \n    let currentPage = 1;\n    const rowsPerPage = 12;\n    let lastQuery = { codigo: '', isbn: '', titulo: '', autor: '' };\n\n    window.onload = async () => {\n        try {\n            const resp = await fetch(APPS_SCRIPT_URL);\n            bibAllData = await resp.json();\n            filteredData = [...bibAllData];\n            const select = document.getElementById('bibSelectBiblioteca');\n            const libs = [...new Set(bibAllData.map(b => b.biblioteca))].filter(Boolean).sort();\n            select.innerHTML = '<option value=\"\">-- Seleccionar Biblioteca para visor --<\/option>';\n            libs.forEach(l => select.innerHTML += `<option value=\"${l}\">${l}<\/option>`);\n            renderAll();\n            setupEvents();\n        } catch (e) {\n            document.getElementById('bibContador').innerText = \"\u274c No se pudo cargar la base de datos.\";\n        }\n    };\n\n    function setupEvents() {\n        document.getElementById('btnBuscar').onclick = ejecutarBusqueda;\n        document.querySelectorAll('.bib-input').forEach(input => {\n            input.addEventListener('keypress', (e) => { if (e.key === 'Enter') ejecutarBusqueda(); });\n        });\n        document.getElementById('btnLimpiar').onclick = () => {\n            document.querySelectorAll('.bib-input').forEach(i => i.value = '');\n            ejecutarBusqueda();\n        };\n        document.getElementById('bibSelectBiblioteca').onchange = (e) => { if(e.target.value) abrirModal(e.target.value); };\n        document.getElementById('bibModalInputBusqueda').addEventListener('input', filtrarModal);\n        \n        \/\/ Cerrar modal al hacer clic fuera del contenido blanco\n        window.onclick = function(event) {\n            const modal = document.getElementById('bibLibraryModal');\n            if (event.target == modal) {\n                cerrarModal();\n            }\n        }\n    }\n\n    function ejecutarBusqueda() {\n        currentPage = 1;\n        lastQuery.codigo = document.getElementById('bibSearchCodigo').value.toLowerCase();\n        lastQuery.isbn = document.getElementById('bibSearchIsbn').value.toLowerCase();\n        lastQuery.titulo = document.getElementById('bibSearchTitulo').value.toLowerCase();\n        lastQuery.autor = document.getElementById('bibSearchAutor').value.toLowerCase();\n        filteredData = bibAllData.filter(b => \n            b.codigo.toLowerCase().includes(lastQuery.codigo) &&\n            b.isbn.toString().toLowerCase().includes(lastQuery.isbn) &&\n            b.titulo.toLowerCase().includes(lastQuery.titulo) &&\n            b.autor.toLowerCase().includes(lastQuery.autor)\n        );\n        renderAll();\n    }\n\n    function renderAll() {\n        const tbody = document.getElementById('bibTableBody');\n        tbody.innerHTML = '';\n        const inicio = (currentPage - 1) * rowsPerPage;\n        const fin = inicio + rowsPerPage;\n        const dataPagina = filteredData.slice(inicio, fin);\n        if(dataPagina.length === 0) {\n            tbody.innerHTML = '<tr><td colspan=\"5\" style=\"text-align:center; padding:20px;\">No se encontraron resultados.<\/td><\/tr>';\n        } else {\n            dataPagina.forEach(b => {\n                tbody.innerHTML += `<tr>\n                    <td>${marcarTexto(b.codigo, lastQuery.codigo)}<\/td>\n                    <td>${marcarTexto(b.isbn, lastQuery.isbn)}<\/td>\n                    <td><strong>${marcarTexto(b.titulo, lastQuery.titulo)}<\/strong><\/td>\n                    <td>${marcarTexto(b.autor, lastQuery.autor)}<\/td>\n                    <td><span class=\"bib-text-lib\">${b.biblioteca}<\/span><\/td>\n                <\/tr>`;\n            });\n        }\n        document.getElementById('bibContador').innerText = `\ud83d\udcca Mostrando ${filteredData.length} registros encontrados.`;\n        renderPagination();\n    }\n\n    function marcarTexto(texto, query) {\n        if (!query) return texto;\n        const strTexto = texto.toString();\n        const index = strTexto.toLowerCase().indexOf(query.toLowerCase());\n        if (index >= 0) {\n            return strTexto.substring(0, index) + \"<span class='highlight'>\" + strTexto.substring(index, index + query.length) + \"<\/span>\" + strTexto.substring(index + query.length);\n        }\n        return strTexto;\n    }\n\n    function renderPagination() {\n        const p = document.getElementById('bibPagination');\n        p.innerHTML = '';\n        const totalPaginas = Math.ceil(filteredData.length \/ rowsPerPage);\n        if(totalPaginas <= 1) return;\n        for(let i=1; i<=totalPaginas; i++) {\n            const span = document.createElement('span');\n            span.innerText = i;\n            span.className = `page-link ${i === currentPage ? 'active' : ''}`;\n            span.onclick = () => { currentPage = i; renderAll(); window.scrollTo(0,0); };\n            p.appendChild(span);\n        }\n    }\n\n    function abrirModal(lib) {\n        const modal = document.getElementById('bibLibraryModal');\n        document.getElementById('bibModalTitle').innerText = \"Proceso de Catalogaci\u00f3n: \" + lib;\n        document.getElementById('bibModalInputBusqueda').value = ''; \n        modalDataOriginal = bibAllData.filter(b => b.biblioteca === lib);\n        actualizarTablaModal(modalDataOriginal);\n        \n        \/\/ Abrir usando flex para que se centre autom\u00e1ticamente\n        modal.style.display = 'flex';\n    }\n\n    function filtrarModal() {\n        const val = document.getElementById('bibModalInputBusqueda').value.toLowerCase();\n        const dataFiltrada = modalDataOriginal.filter(b => \n            b.codigo.toLowerCase().includes(val) || \n            b.isbn.toString().toLowerCase().includes(val) ||\n            b.titulo.toLowerCase().includes(val) || \n            b.autor.toLowerCase().includes(val)\n        );\n        actualizarTablaModal(dataFiltrada);\n    }\n\n    function actualizarTablaModal(data) {\n        const mBody = document.getElementById('bibModalTableBody');\n        const contador = document.getElementById('bibModalContador');\n        contador.innerText = `${data.length} libros encontrados en esta sede.`;\n        if(data.length === 0) {\n            mBody.innerHTML = '<tr><td colspan=\"4\" style=\"text-align:center; padding:20px;\">No coinciden libros.<\/td><\/tr>';\n        } else {\n            mBody.innerHTML = data.map(b => `<tr><td>${b.codigo}<\/td><td>${b.isbn}<\/td><td><strong>${b.titulo}<\/strong><\/td><td>${b.autor}<\/td><\/tr>`).join('');\n        }\n    }\n\n    function cerrarModal() {\n        document.getElementById('bibLibraryModal').style.display = 'none';\n        document.getElementById('bibSelectBiblioteca').value = '';\n    }\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Libros nuevos que se encuentran en Proceso de Etiquetado Libros en Proceso de Etiquetado (ya se encuentran en cat\u00e1logo) \ud83d\udcc2 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2750","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=\/wp\/v2\/pages\/2750","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2750"}],"version-history":[{"count":23,"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=\/wp\/v2\/pages\/2750\/revisions"}],"predecessor-version":[{"id":3209,"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=\/wp\/v2\/pages\/2750\/revisions\/3209"}],"wp:attachment":[{"href":"https:\/\/biblioteca.utc.edu.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}