Register
Required fields are marked with an asterisk: *
/* ========================================================= UMPO JOURNALS - JOURNAL CARD BUILDER OJS 3.3.0.21 Site Homepage Only ========================================================= */ (function () { 'use strict'; /* Hanya berjalan pada halaman utama direktori jurnal */ if (!document.body.classList.contains('pkp_page_index')) { return; } /* Mengambil teks tanpa spasi berlebih */ function getText(element) { if (!element) return ''; return (element.textContent || '') .replace(/\s+/g, ' ') .trim(); } /* Mencari daftar jurnal */ function getJournalItems() { var journalList = document.querySelector( 'body.pkp_page_index .journals' ); if (!journalList) return []; return Array.prototype.slice.call( journalList.querySelectorAll(':scope > li') ); } /* Mencari judul jurnal */ function getJournalTitle(item) { var heading = item.querySelector( 'h2, h3, h4, .journal-title' ); if (!heading) return null; var titleLink = heading.querySelector('a'); return { element: heading, link: titleLink, text: getText(titleLink || heading) }; } /* Mencari tombol berdasarkan teks */ function getActionLink(item, label) { var links = item.querySelectorAll('a[href]'); for (var i = 0; i < links.length; i++) { var linkText = getText(links[i]).toLowerCase(); if (linkText === label.toLowerCase()) { return links[i]; } } return null; } /* Mencari thumbnail jurnal yang sudah tersedia */ function getJournalImage(item) { var selectors = [ '.thumb img', '.thumbnail img', '.journal_thumbnail img', '.journalThumbnail img', '.journal-cover img', 'img' ]; for (var i = 0; i < selectors.length; i++) { var image = item.querySelector(selectors[i]); if ( image && ( image.getAttribute('src') || image.getAttribute('data-src') ) ) { return image; } } return null; } /* Membuat inisial jurnal untuk placeholder */ function getInitials(title) { var words = title .replace(/[^\p{L}\p{N}\s]/gu, ' ') .trim() .split(/\s+/) .filter(Boolean); if (words.length === 0) return 'UMPO'; if (words.length === 1) { return words[0].substring(0, 4).toUpperCase(); } return ( words[0].charAt(0) + words[1].charAt(0) + (words[2] ? words[2].charAt(0) : '') ).toUpperCase(); } /* Membuat elemen HTML */ function createElement(tag, className, text) { var element = document.createElement(tag); if (className) { element.className = className; } if (typeof text !== 'undefined') { element.textContent = text; } return element; } /* Membuat satu kartu jurnal */ function buildJournalCard(item) { if (item.dataset.umpoCardReady === 'true') { return; } var journal = getJournalTitle(item); var viewLink = getActionLink( item, 'View Journal' ); var issueLink = getActionLink( item, 'Current Issue' ); /* * Jangan mengubah item jika judul atau tautan * tidak ditemukan. Konten asli tetap aman. */ if ( !journal || !journal.text || !viewLink || !issueLink ) { return; } /* Cover */ var cover = createElement( 'div', 'umpo-journal-cover' ); var originalImage = getJournalImage(item); if (originalImage) { var image = document.createElement('img'); image.src = originalImage.currentSrc || originalImage.getAttribute('src') || originalImage.getAttribute('data-src'); image.alt = 'Cover ' + journal.text; image.loading = 'lazy'; image.decoding = 'async'; cover.appendChild(image); } else { var placeholder = createElement( 'div', 'umpo-cover-placeholder', getInitials(journal.text) ); cover.appendChild(placeholder); } /* Judul */ var title = createElement( 'h3', 'umpo-journal-title' ); var titleAnchor = document.createElement('a'); titleAnchor.href = journal.link && journal.link.href ? journal.link.href : viewLink.href; titleAnchor.textContent = journal.text; title.appendChild(titleAnchor); /* Area tombol */ var actions = createElement( 'div', 'umpo-journal-actions' ); /* Tombol View Journal */ var viewButton = document.createElement('a'); viewButton.href = viewLink.href; viewButton.textContent = 'View Journal'; viewButton.setAttribute( 'aria-label', 'View Journal: ' + journal.text ); /* Tombol Current Issue */ var issueButton = document.createElement('a'); issueButton.href = issueLink.href; issueButton.textContent = 'Current Issue'; issueButton.className = 'umpo-current-issue'; issueButton.setAttribute( 'aria-label', 'Current Issue: ' + journal.text ); actions.appendChild(viewButton); actions.appendChild(issueButton); /* Susunan kartu */ var cardContent = createElement( 'div', 'umpo-journal-card-content' ); cardContent.appendChild(cover); cardContent.appendChild(title); cardContent.appendChild(actions); /* * Tambahkan kartu terlebih dahulu. * Setelah berhasil, sembunyikan elemen lama. */ item.appendChild(cardContent); Array.prototype.forEach.call( item.children, function (child) { if (child !== cardContent) { child.classList.add( 'umpo-original-journal-content' ); } } ); item.classList.add('umpo-journal-card'); item.dataset.umpoCardReady = 'true'; } /* Jalankan semua kartu */ function initializeUMPOJournals() { var items = getJournalItems(); if (!items.length) { console.warn( 'UMPO Journals: daftar jurnal tidak ditemukan.' ); return; } items.forEach(buildJournalCard); console.log( 'UMPO Journals: proses pembuatan kartu selesai.' ); } /* Jalankan setelah halaman siap */ if (document.readyState === 'loading') { document.addEventListener( 'DOMContentLoaded', initializeUMPOJournals ); } else { initializeUMPOJournals(); } })();