{"id":5382,"date":"2025-04-26T09:56:36","date_gmt":"2025-04-26T14:56:36","guid":{"rendered":"https:\/\/federacioncolombianadeajedrez.com\/?page_id=5382"},"modified":"2025-06-26T09:17:21","modified_gmt":"2025-06-26T14:17:21","slug":"base-revistas","status":"publish","type":"page","link":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/base-revistas\/","title":{"rendered":"Base Revistas"},"content":{"rendered":"<div style=\"display: flex; align-items: center; gap: 20px; flex-wrap: wrap; margin-bottom: 20px;\">\n  <img loading=\"lazy\" decoding=\"async\" \n    src=\"https:\/\/federacioncolombianadeajedrez.com\/wp-content\/uploads\/pl.png\" \n    alt=\"Revista Pe\u00f3n Ladino\" \n    width=\"120\" \n    height=\"120\" \n    style=\"border-radius: 8px; object-fit: cover; box-shadow: 0 4px 10px rgba(0,0,0,0.1);\" \n  \/><\/p>\n<div style=\"flex: 1; text-align: center;\">\n<h2 style=\"font-size: 1.8em; margin: 0; color: #2c3e50;\">\n      <strong>EDICIONES REVISTA PE\u00d3N LADINO<\/strong><br \/>\n    <\/h2>\n<p style=\"font-size: 0.95em; color: #666; margin-top: 5px;\">\n      Revista Oficial Federaci\u00f3n Colombiana de Ajedrez\n    <\/p>\n<\/p><\/div>\n<\/div>\n    <div id=\"filtros-revistas\" style=\"margin-bottom: 20px; text-align: center;\">\n        <!-- Campo para buscar revistas -->\n        <input type=\"text\" id=\"buscar-revista\" placeholder=\"Buscar revista por nombre...\" style=\"padding: 8px; width: 100%; max-width: 300px;\">\n        \n        <!-- Filtro de a\u00f1o din\u00e1mico -->\n        <select id=\"filtro-anio\" style=\"padding: 8px; margin-left: 10px;\">\n            <option value=\"\">Todos los a\u00f1os<\/option>\n        <\/select>\n        \n        <!-- Bot\u00f3n para alternar vistas -->\n        <button id=\"toggle-vista\" style=\"padding: 8px 12px; margin-left: 10px; background: #006400; color: white; border: none; border-radius: 4px; cursor: pointer;\">\n            Cambiar vista\n        <\/button>\n    <\/div>\n\n    <div id=\"contenedor-revistas\" class=\"revistas-grid\"><\/div>\n    <div id=\"loader-revistas\" style=\"text-align: center; padding: 20px; display: none;\">Cargando m\u00e1s revistas...<\/div>\n\n    <style>\n        .revistas-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n            gap: 20px;\n        }\n        .revistas-lista {\n            display: flex;\n            flex-direction: column;\n            gap: 12px;\n        }\n        .revista-item {\n            border: 1px solid #ddd;\n            border-radius: 8px;\n            padding: 10px;\n            background: #fefefe;\n            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);\n        }\n        .revista-item.lista {\n            display: flex;\n            align-items: center;\n        }\n        .revista-item.lista img.revista-thumbnail {\n            width: 80px;\n            height: auto;\n            margin-right: 15px;\n        }\n        .revista-thumbnail {\n            background: #ddd;\n            display: block;\n            width: 100%;\n            height: auto;\n        }\n        .revista-info {\n            flex: 1;\n        }\n        .revista-info h4 {\n            margin: 0 0 5px 0;\n            font-size: 16px;\n        }\n        .revista-botones a {\n            display: inline-block;\n            margin: 5px 5px 0 5px;\n            padding: 6px 12px;\n            background: #006400;\n            color: white;\n            border-radius: 4px;\n            text-decoration: none;\n            font-size: 14px;\n        }\n        .revista-botones a:hover {\n            background: #004d00;\n        }\n        #loader-revistas {\n            font-size: 18px;\n            color: #333;\n            animation: blink 1.5s infinite;\n        }\n        @keyframes blink {\n            50% { opacity: 0.5; }\n        }\n    <\/style>\n\n    <script>\n    document.addEventListener('DOMContentLoaded', function () {\n        const folderId = '1THXJRkfUEcqeuwTwSO5CLVVK7c_f8tWL'; \/\/ <-- tu Folder ID\n        const apiKey = 'AIzaSyDD1cjlLyFTnPyJIsa_4wq96TEt2o6TTvU'; \/\/ <-- tu API Key\n        let pageToken = '';\n        let cargando = false;\n        let todasRevistas = [];\n        let revistasFiltradas = [];\n        let offset = 0;\n        const limite = 12;\n        let vista = localStorage.getItem('vistaRevistas') || 'galeria';\n        const contenedor = document.getElementById('contenedor-revistas');\n        const toggleBtn = document.getElementById('toggle-vista');\n        actualizarTextoToggle();\n\n        toggleBtn.addEventListener('click', () => {\n            vista = (vista === 'galeria') ? 'lista' : 'galeria';\n            localStorage.setItem('vistaRevistas', vista);\n            actualizarTextoToggle();\n            filtrarYMostrar(true);\n        });\n\n        function actualizarTextoToggle() {\n            toggleBtn.textContent = (vista === 'galeria') ? 'Ver como lista' : 'Ver como galer\u00eda';\n        }\n\n        function cargarRevistas(callback) {\n            if (cargando) return;\n            cargando = true;\n            document.getElementById('loader-revistas').style.display = 'block';\n\n            let url = `https:\/\/www.googleapis.com\/drive\/v3\/files?q='${folderId}'+in+parents+and+mimeType='application\/pdf'&fields=nextPageToken,files(id,name,webViewLink,thumbnailLink,createdTime)&orderBy=createdTime+desc&pageSize=100&key=${apiKey}`;\n            if (pageToken) url += `&pageToken=${pageToken}`;\n\n            fetch(url)\n                .then(res => {\n                    if (!res.ok) throw new Error('Error al cargar revistas');\n                    return res.json();\n                })\n                .then(data => {\n                    pageToken = data.nextPageToken || '';\n                    todasRevistas = todasRevistas.concat(data.files);\n                    filtrarYMostrar(true);\n                    if (callback) callback();\n                })\n                .catch(err => console.error('Error:', err))\n                .finally(() => {\n                    cargando = false;\n                    document.getElementById('loader-revistas').style.display = 'none';\n                });\n        }\n\n        function filtrarYMostrar(reset = false) {\n            const buscar = document.getElementById('buscar-revista').value.toLowerCase();\n            const anio = document.getElementById('filtro-anio').value;\n            revistasFiltradas = todasRevistas.filter(file => {\n                const nombre = file.name.toLowerCase();\n                const coincideNombre = buscar === '' || nombre.includes(buscar);\n                const coincideAnio = anio === '' || nombre.includes(anio);\n                return coincideNombre && coincideAnio;\n            });\n\n            if (reset) offset = 0;\n            mostrarRevistas();\n        }\n\n        function mostrarRevistas() {\n            if (offset >= revistasFiltradas.length) return;\n\n            if (offset === 0) {\n                contenedor.innerHTML = '';\n                contenedor.className = (vista === 'galeria') ? 'revistas-grid' : 'revistas-lista';\n            }\n\n            const revistas = revistasFiltradas.slice(offset, offset + limite);\n            revistas.forEach(file => {\n                const thumb = file.thumbnailLink || 'https:\/\/via.placeholder.com\/150?text=Sin+Imagen';\n                const item = document.createElement('div');\n                item.classList.add('revista-item');\n                item.classList.toggle('lista', vista === 'lista');\n                item.classList.toggle('galeria', vista === 'galeria');\n\n                const imageTag = `<img decoding=\"async\" src=\"${thumb}\" class=\"revista-thumbnail\" alt=\"${file.name}\" onerror=\"this.src='https:\/\/via.placeholder.com\/150?text=Sin+Imagen';\">`;\n\n                if (vista === 'lista') {\n                    item.innerHTML = `\n                        ${imageTag}\n                        <div class=\"revista-info\">\n                            <h4>${file.name}<\/h4>\n                            <small>A\u00f1o: ${(file.name.match(\/\\d{4}\/) || ['Desconocido'])[0]}<\/small>\n                            <div class=\"revista-botones\">\n                                <a href=\"${file.webViewLink}\" target=\"_blank\">Ver Online<\/a>\n                                <a href=\"https:\/\/drive.google.com\/uc?export=download&id=${file.id}\" target=\"_blank\">Descargar<\/a>\n                            <\/div>\n                        <\/div>\n                    `;\n                } else {\n                    item.innerHTML = `\n                        ${imageTag}\n                        <h4>${file.name}<\/h4>\n                        <div class=\"revista-botones\">\n                            <a href=\"${file.webViewLink}\" target=\"_blank\">Ver Online<\/a>\n                            <a href=\"https:\/\/drive.google.com\/uc?export=download&id=${file.id}\" target=\"_blank\">Descargar<\/a>\n                        <\/div>\n                    `;\n                }\n                contenedor.appendChild(item);\n            });\n\n            offset += limite;\n        }\n\n        function llenarAnios() {\n            const select = document.getElementById('filtro-anio');\n            const anios = [...new Set(todasRevistas.map(f => (f.name.match(\/\\d{4}\/) || [''])[0]).filter(Boolean))];\n            anios.sort((a, b) => b - a);\n            anios.forEach(a => {\n                select.innerHTML += `<option value=\"${a}\">${a}<\/option>`;\n            });\n        }\n\n        document.getElementById('buscar-revista').addEventListener('input', () => filtrarYMostrar(true));\n        document.getElementById('filtro-anio').addEventListener('change', () => filtrarYMostrar(true));\n\n        window.addEventListener('scroll', () => {\n            if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 100 && !cargando) {\n                mostrarRevistas();\n            }\n        });\n\n        cargarRevistas(() => {\n            llenarAnios();\n            filtrarYMostrar(true);\n        });\n    });\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"<p>EDICIONES REVISTA PE\u00d3N LADINO Revista Oficial Federaci\u00f3n Colombiana de Ajedrez<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","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":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","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-5382","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/wp-json\/wp\/v2\/pages\/5382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/wp-json\/wp\/v2\/comments?post=5382"}],"version-history":[{"count":0,"href":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/wp-json\/wp\/v2\/pages\/5382\/revisions"}],"wp:attachment":[{"href":"https:\/\/federacioncolombianadeajedrez.com\/noticias\/wp-json\/wp\/v2\/media?parent=5382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}