diff --git a/.gitignore b/.gitignore index 3bdd52e..2c44880 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ node_modules/ dist/ .DS_Store +.env +.env.local +groups/**/.env +groups/**/.env.local diff --git a/assets/global/localization.js b/assets/global/localization.js index 82d1ca7..9ff9d19 100644 --- a/assets/global/localization.js +++ b/assets/global/localization.js @@ -569,6 +569,33 @@ const translations = { kontrib_guideline_3: "Sertakan fakta dan data yang akurat dan dapat diverifikasi.", kontrib_guideline_4: "Hindari plagiarisme. Karya harus orisinal.", kontrib_guideline_5: "Tim redaksi berhak menyunting konten untuk keperluan editorial.", + + // --- apeNameTeamE (Halaman Beasiswa) --- + ape_breadcrumb_profile: 'Profil', + ape_breadcrumb_scholarship: 'Beasiswa', + ape_hero_badge: 'Program Beasiswa', + ape_hero_title: 'Beasiswa Studi &
Penelitian', + ape_hero_subtitle: 'Teknik Informatika Universitas Tanjungpura', + ape_hero_desc: 'Temukan berbagai peluang beasiswa untuk mendukung perjalanan akademik dan penelitian Anda. Program Studi Informatika UNTAN berkomitmen membantu mahasiswa meraih prestasi terbaik.', + ape_hero_cta: 'Lihat Daftar Beasiswa', + ape_stats_total: 'Total Mahasiswa Penerima
Beasiswa Semester Ini', + ape_stats_gov: 'Total Penerima Beasiswa
Pembiayaan Pemerintah', + ape_stats_private: 'Total Penerima Beasiswa
Pembiayaan Swasta', + ape_dir_label: 'Daftar Beasiswa', + ape_dir_title: 'Daftar Beasiswa', + ape_dir_desc: 'Temukan beragam beasiswa dari berbagai sumber resmi yang tersedia untuk mahasiswa aktif, alumni, dan calon mahasiswa Program Studi Informatika UNTAN.', + ape_dir_guide: 'Terima Bantuan Beasiswa?', + ape_filter_open: 'Sedang Buka', + ape_filter_closed: 'Ditutup', + ape_filter_gov: 'Pemerintah', + ape_filter_private: 'Swasta', + ape_search_placeholder: 'Cari Nama Beasiswa...', + ape_testimonial_title: 'Apa Kata Mereka?', + ape_testimonial_desc: 'Cerita inspiratif dari para penerima beasiswa Program Studi Informatika UNTAN', + ape_cta_title: 'Ingin Mengetahui Info Lebih Lanjut?', + ape_cta_desc: 'Hubungi admin prodi atau ikuti Instagram kemahasiswaan UNTAN untuk informasi terbaru tentang beasiswa dan program akademik.', + ape_cta_btn1: 'DAFTAR BEASISWA', + ape_cta_btn2: 'Hubungi Kami', }, en: { @@ -1135,6 +1162,33 @@ const translations = { kontrib_guideline_3: "Include accurate and verifiable facts and data.", kontrib_guideline_4: "Avoid plagiarism. Work must be original.", kontrib_guideline_5: "The editorial team reserves the right to edit content for editorial purposes.", + + // --- apeNameTeamE (Scholarship Page) --- + ape_breadcrumb_profile: 'Profile', + ape_breadcrumb_scholarship: 'Scholarship', + ape_hero_badge: 'Scholarship Program', + ape_hero_title: 'Study & Research
Scholarships', + ape_hero_subtitle: 'Informatics Engineering, Tanjungpura University', + ape_hero_desc: 'Discover various scholarship opportunities to support your academic and research journey. The Informatics Study Program at UNTAN is committed to helping students achieve excellence.', + ape_hero_cta: 'View Scholarships', + ape_stats_total: 'Total Scholarship
Recipients This Semester', + ape_stats_gov: 'Total Government
Scholarship Recipients', + ape_stats_private: 'Total Private
Scholarship Recipients', + ape_dir_label: 'Scholarship Directory', + ape_dir_title: 'Scholarship Directory', + ape_dir_desc: 'Find various scholarships from official sources available for active students, alumni, and prospective students of the UNTAN Informatics Study Program.', + ape_dir_guide: 'Need Scholarship Aid?', + ape_filter_open: 'Open', + ape_filter_closed: 'Closed', + ape_filter_gov: 'Government', + ape_filter_private: 'Private', + ape_search_placeholder: 'Search Scholarship Name...', + ape_testimonial_title: 'What They Say?', + ape_testimonial_desc: 'Inspiring stories from scholarship recipients at UNTAN Informatics Study Program', + ape_cta_title: 'Want to Know More?', + ape_cta_desc: 'Contact the program admin or follow UNTAN student affairs Instagram for the latest scholarship and academic program information.', + ape_cta_btn1: 'SCHOLARSHIP LIST', + ape_cta_btn2: 'Contact Us', } }; diff --git a/groups/ACAAB/index.html b/groups/ACAAB/index.html index a781215..1be3821 100644 --- a/groups/ACAAB/index.html +++ b/groups/ACAAB/index.html @@ -997,7 +997,7 @@
- +
@@ -229,7 +233,7 @@ async function initDirectory() { Gagal memuat data beasiswa

- Pastikan menggunakan live server. Silakan refresh atau hubungi admin. + Tidak dapat terhubung ke server. Silakan refresh atau hubungi admin.

`; } diff --git a/groups/ApeNameTeamE/assets/js/i18n.js b/groups/ApeNameTeamE/assets/js/i18n.js index 963b8fc..387579a 100644 --- a/groups/ApeNameTeamE/assets/js/i18n.js +++ b/groups/ApeNameTeamE/assets/js/i18n.js @@ -105,24 +105,32 @@ function applyTranslations(lang) { document.documentElement.lang = lang === 'id' ? 'id' : 'en'; } +// Override setLanguage to delegate to localization.js when available, +// so both systems stay in sync (localization.js dispatches 'languageChanged' +// which triggers our listener below to re-apply dot-key translations). function setLanguage(lang) { if (lang !== 'id' && lang !== 'en') return; - currentLang = lang; - sessionStorage.setItem('lang', lang); - - // Update button visual states - document.querySelectorAll('.lang-btn').forEach(btn => { - const isActive = btn.dataset.lang === lang; - btn.classList.toggle('active', isActive); - }); - - applyTranslations(lang); + if (typeof setLang === 'function') { + setLang(lang); // localization.js handles state + dispatches languageChanged + } else { + currentLang = lang; + sessionStorage.setItem('lang', lang); + applyTranslations(lang); + } } - -// Expose globally so onclick in HTML works window.setLanguage = setLanguage; +// Re-apply dot-key translations whenever localization.js changes the language. +// This fixes the race where localization.js overwrites dot-key elements with the +// raw key string (its fallback for unknown keys). +document.addEventListener('languageChanged', (e) => { + applyTranslations(e.detail.lang); +}); + // Initialize on DOM ready document.addEventListener('DOMContentLoaded', () => { - setLanguage(currentLang); + // Use localization.js state if it's already loaded, otherwise fall back. + const initLang = (typeof getLang === 'function') ? getLang() + : (sessionStorage.getItem('lang') || 'id'); + applyTranslations(initLang); }); diff --git a/groups/ApeNameTeamE/assets/js/main.js b/groups/ApeNameTeamE/assets/js/main.js index 9bf70cf..21228c0 100644 --- a/groups/ApeNameTeamE/assets/js/main.js +++ b/groups/ApeNameTeamE/assets/js/main.js @@ -55,24 +55,17 @@ document.addEventListener('DOMContentLoaded', () => { // ─── Hamburger Menu (Mobile) ───────────────────────── - const hamburger = document.getElementById('hamburger'); - const mobileMenu = document.getElementById('mobile-menu'); + const mobileBtn = document.getElementById('mobile-menu-button'); + const mobileMenu = document.getElementById('mobile-menu'); + const closeMobileBtn = document.getElementById('close-mobile-menu'); - hamburger?.addEventListener('click', () => { - const isOpen = !mobileMenu.classList.contains('hidden'); - mobileMenu.classList.toggle('hidden'); + const closeMobileMenu = () => { + mobileMenu?.classList.add('-translate-x-full'); + mobileBtn?.setAttribute('aria-expanded', 'false'); + }; - // Toggle icon - const icon = hamburger.querySelector('i'); - if (isOpen) { - icon.className = 'fas fa-bars text-lg'; - } else { - icon.className = 'fas fa-times text-lg'; - } - - // Aksesibilitas - hamburger.setAttribute('aria-expanded', String(!isOpen)); - }); + // openMobileMenu handled by inline script in HTML; this covers close-on-scroll + closeMobileBtn?.addEventListener('click', closeMobileMenu); // ─── Smooth Scroll untuk anchor links ────────────── @@ -90,9 +83,7 @@ document.addEventListener('DOMContentLoaded', () => { window.scrollTo({ top, behavior: 'smooth' }); // Tutup mobile menu jika sedang terbuka - mobileMenu?.classList.add('hidden'); - const icon = hamburger?.querySelector('i'); - if (icon) icon.className = 'fas fa-bars text-lg'; + closeMobileMenu(); }); }); diff --git a/groups/ApeNameTeamE/assets/js/popup.js b/groups/ApeNameTeamE/assets/js/popup.js index 759f4d9..7736bbb 100644 --- a/groups/ApeNameTeamE/assets/js/popup.js +++ b/groups/ApeNameTeamE/assets/js/popup.js @@ -29,7 +29,7 @@ function openPopup(id) { const bsw = data.find(b => b.id === id); if (!bsw) return; - const isBuka = bsw.status === 'Buka'; + const isBuka = bsw.status === 'Buka' || bsw.status === 'Dibuka'; const badgeClass = isBuka ? 'badge-buka' : 'badge-ditutup'; // Bangun list syarat umum diff --git a/groups/ApeNameTeamE/index.html b/groups/ApeNameTeamE/index.html index 43767bd..028b88d 100644 --- a/groups/ApeNameTeamE/index.html +++ b/groups/ApeNameTeamE/index.html @@ -1,601 +1,1689 @@ - + + - - + + + Group 10 – ApeNameTeamE | Informatika UNTAN + + + + + + - - Beasiswa Studi & Penelitian — Informatika Universitas Tanjungpura - - + + - - - - + + - - - - - - + - + - - - - - - - -
- -
- -
- -
-
- Selamat datang di antarmuka situs web Informatika terbaru!  |  Pendaftaran kolaborasi riset semester genap telah dibuka.  |  Pantau publikasi dosen dan mahasiswa secara real-time.  |  Beasiswa KIP Kuliah 2026 dibuka — Daftar sekarang!  |  Beasiswa LPDP S2 tersedia hingga September 2026.       - -
-
-
- - - -
-
- -
- - - -
- - -
- -
- PROGRAM BEASISWA -
- - -

- Beasiswa Studi &
Penelitian -

- - -

- Teknik Informatika Universitas Tanjungpura -

- - -

- Beasiswa adalah program keuangan yang disediakan untuk membantu mahasiswa yang membutuhkan dalam menyelesaikan studi mereka. Beasiswa ini dapat diberikan berdasarkan kriteria akademik, kebutuhan finansial, atau prestasi di luar kelas. -

- - - - Lihat Daftar Beasiswa - - -
- - - - -
-
-
- - - -
-
-
- - -
-
0
-
- Total Mahasiswa Penerima
Beasiswa Semester Ini -
-
- - -
-
0
-
- Total Penerima Beasiswa
Pembiayaan Pemerintah -
-
- - -
-
0
-
- Total Penerima Beasiswa
Pembiayaan Swasta -
-
- -
-
-
- - - -
-
- - -
-
- -
- DAFTAR LENGKAP -
-

Daftar Beasiswa

-

- Universitas menawarkan berbagai program bantuan keuangan untuk mahasiswa. Program ini berdasarkan prestasi akademik, kebutuhan finansial, atau prestasi di luar akademik. -

-
- -
- - -
- -
- - - - - -
- - -
-
- - -
- - -
-
- - -
- -
- -

Memuat data beasiswa...

-
-
- - - - -
-
- - - - - - - -