""" splash_page.py ────────────── Splash screen modern, full-viewport centered. Hanya tampil SEKALI saat pertama kali sistem diakses (browser baru/tab baru). Jika halaman di-refresh (F5), splash TIDAK akan muncul lagi — karena status "sudah pernah splash" disimpan di URL query parameter, bukan di session_state. ⚠️ KENAPA TIDAK PAKAI session_state SAJA? session_state Streamlit terikat ke session koneksi, bukan ke browser/tab. Pada beberapa kondisi (reconnect websocket, refresh di beberapa environment hosting), session_state bisa ter-reset sehingga splash muncul lagi padahal user hanya refresh. query_params (di URL) tidak hilang saat refresh biasa, sehingga lebih andal untuk menandai "splash sudah pernah tampil". 🕐 PENGATURAN DURASI: _SPLASH_DURATION = 10 ← ganti angka ini (satuan: detik) Rekomendasi: 4–8 detik 📐 PENGATURAN TINGGI IFRAME: components.html(..., height=700 ...) ← sesuaikan jika konten terpotong """ import time import streamlit as st import streamlit.components.v1 as components _APP_NAME = "SentiTrack" # ┌─────────────────────────────────────────┐ # │ ⏱ GANTI ANGKA INI UNTUK UBAH DURASI │ # │ Satuan: detik | Rekomendasi: 4–8 │ _SPLASH_DURATION = 10 # └─────────────────────────────────────────┘ # Nama parameter URL yang dipakai sebagai "penanda" splash sudah tampil. # Tidak perlu diubah, kecuali bentrok dengan query param lain di app kamu. _SPLASH_FLAG_KEY = "splashed" def _build_splash_html(duration: int) -> str: return f"""
{_APP_NAME}
Dashboard Monitoring Sentimen Netizen terhadap Kebijakan Pembatasan Gratis Ongkir
📌 Topik Penelitian
Perancangan dan Implementasi Dashboard Sentimen Netizen X terhadap Kebijakan Pembatasan Gratis Ongkir dengan Naive Bayes
Komdigi · Analisis Opini Publik di Platform X (Twitter)
🤖
Model
Naive Bayes
📡
Sumber Data
X Data Historis via Tweet Harvest & Realtime
🔤
Preprocessing
Case Folding · Cleaning · Normalisasi · Stopword · Stemming
📊
Output
Dashboard Analisis Sentimen
Nurizzati Adistya Putri · E31232465
Politeknik Negeri Jember · Manajemen Informatika
Tugas Akhir 2026
""" def maybe_show_splash() -> bool: """ Tampilkan splash HANYA jika belum pernah tampil di browser ini. Mekanisme: - Saat splash ditampilkan untuk pertama kali, kita menambahkan query parameter ?splashed=1 ke URL via st.query_params. - Karena ini tersimpan di URL (bukan di session_state server), query parameter ini TETAP ADA saat halaman di-refresh (F5). - Jadi: refresh biasa -> splash TIDAK muncul lagi. buka tab/browser baru tanpa parameter itu -> splash muncul. klik tombol "reset splash" (lihat reset_splash()) -> splash akan muncul lagi di reload berikutnya. Return: True -> splash baru saja ditampilkan (halaman akan rerun setelahnya) False -> splash dilewati (sudah pernah tampil sebelumnya) """ # Cek apakah flag sudah ada di URL already_splashed = st.query_params.get(_SPLASH_FLAG_KEY) == "1" if already_splashed: return False # Sembunyikan semua elemen Streamlit selama splash st.markdown(""" """, unsafe_allow_html=True) # ┌───────────────────────────────────────────────────────┐ # │ 📐 TINGGI IFRAME (px) │ # │ Naikkan jika card terpotong di layar kecil. │ # │ Rekomendasi: 650–750 │ components.html(_build_splash_html(_SPLASH_DURATION), height=700, scrolling=False) # └───────────────────────────────────────────────────────┘ # Tunggu sesuai durasi splash sebelum lanjut ke halaman utama time.sleep(_SPLASH_DURATION + 0.3) # Tandai di URL bahwa splash sudah pernah tampil. # Penanda ini bertahan walau halaman di-refresh (F5). st.query_params[_SPLASH_FLAG_KEY] = "1" st.rerun() return True def reset_splash(): """ Opsional: panggil fungsi ini (misalnya dari tombol di sidebar) jika ingin memaksa splash muncul lagi di reload berikutnya. Contoh penggunaan: if st.sidebar.button("Tampilkan ulang splash"): reset_splash() st.rerun() """ if _SPLASH_FLAG_KEY in st.query_params: del st.query_params[_SPLASH_FLAG_KEY]