Spaces:
Sleeping
Sleeping
File size: 5,898 Bytes
6dc0e95 c219286 b8c0afd c219286 1f78d79 6dc0e95 9d4b171 6dc0e95 1f78d79 6dc0e95 1f78d79 9d4b171 1f78d79 cef3ca5 9d4b171 1f78d79 9d4b171 1f78d79 9d4b171 1f78d79 9d4b171 1f78d79 cef3ca5 1f78d79 cef3ca5 1f78d79 9d4b171 1f78d79 b9e16dc 1f78d79 9d4b171 cef3ca5 6dc0e95 1f78d79 6dc0e95 1f78d79 9d4b171 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
import os
import streamlit as st
from dotenv import load_dotenv
load_dotenv()
# Constants
data_folder = "data"
preview_folder = "Preview"
def get_text_files_content(folder):
text = ""
if not os.path.exists(folder):
return text
for filename in os.listdir(folder):
if filename.endswith('.txt'):
with open(os.path.join(folder, filename), 'r', encoding='utf-8') as file:
text += file.read() + "\n"
return text
def notes_page():
st.header("CSS Edge - Notes Viewer :books:")
subjects = [
"A Trumped World", "Agri Tax in Punjab", "Assad's Fall in Syria", "Elusive National Unity", "Europe and Trump 2.0",
"Going Down with Democracy", "Indonesia's Pancasila Philosophy", "Pakistan in Choppy Waters",
"Pakistan's Semiconductor Ambitions", "Preserving Pakistan's Cultural Heritage", "Tackling Informal Economy",
"Technical Education in Pakistan", "The Case for Solidarity Levies", "The Decline of the Sole Superpower",
"The Power of Big Oil", "Trump 2.0 and Pakistan's Emerging Foreign Policy", "Trump and the World 2.0",
"Trump vs BRICS", "US-China Trade War", "War on Humanity", "Women's Suppression in Afghanistan"
]
# Map subject name -> folder path
subject_folders = {
subject: os.path.join(data_folder, subject.replace(' ', '_'))
for subject in subjects
}
preview_folders = {
subject: os.path.join(preview_folder, subject.replace(' ', '_'))
for subject in subjects
}
# Initialize session state variables
if "completed_subjects" not in st.session_state:
st.session_state.completed_subjects = []
if "current_subject_index" not in st.session_state:
st.session_state.current_subject_index = 0
if "grading_enabled" not in st.session_state:
st.session_state.grading_enabled = False
# Calculate progress
total_subjects = len(subjects)
completed_count = len(st.session_state.completed_subjects)
progress_fraction = completed_count / total_subjects # e.g. 0.5 means 50%
progress_percentage = progress_fraction * 100
# --- DISPLAY PROGRESS IN THE SIDEBAR ---
st.sidebar.title("Your Progress")
st.sidebar.progress(progress_fraction)
st.sidebar.write(f"You have completed {completed_count} out of {total_subjects} notes.")
st.sidebar.write(f"Overall progress: {progress_percentage:.2f}%")
# Separate completed and unread subjects
unread_subjects = [sub for sub in subjects if sub not in st.session_state.completed_subjects]
completed_subjects = st.session_state.completed_subjects
# Dropdown to filter subjects
filter_option = st.sidebar.selectbox("Filter Notes:", ["All", "Unread", "Read"])
if filter_option == "Unread":
displayed_subjects = unread_subjects
elif filter_option == "Read":
displayed_subjects = completed_subjects
else:
displayed_subjects = subjects
# If unread are filtered, allow direct jump
if filter_option == "Unread" and unread_subjects:
selected_unread_subject = st.sidebar.selectbox("Go to Unread Note:", unread_subjects)
st.session_state.current_subject_index = subjects.index(selected_unread_subject)
# Sidebar list of subjects
st.sidebar.subheader("All Subjects")
for i, subject in enumerate(displayed_subjects):
status = "✓" if subject in st.session_state.completed_subjects else ""
st.sidebar.text(f"{i+1}. {subject} {status}")
# Show current subject
selected_subject = subjects[st.session_state.current_subject_index]
st.sidebar.subheader("Current Subject:")
st.sidebar.text(selected_subject)
# Display preview content
preview_folder_path = preview_folders[selected_subject]
if os.path.exists(preview_folder_path):
preview_text = get_text_files_content(preview_folder_path)
st.subheader("Preview of Notes")
st.text_area("Preview Content:", preview_text, height=300, disabled=True)
else:
st.error(f"No preview available for {selected_subject}.")
# Display full notes
subject_folder_path = subject_folders[selected_subject]
if os.path.exists(subject_folder_path):
raw_text = get_text_files_content(subject_folder_path)
if raw_text:
st.subheader("Notes")
st.text_area("Notes Content:", raw_text, height=500, disabled=True)
# Mark as completed button
if selected_subject not in st.session_state.completed_subjects:
if st.button(f"Mark '{selected_subject}' as Read"):
st.session_state.completed_subjects.append(selected_subject)
st.success(f"Marked '{selected_subject}' as read!")
# Recalculate progress so it updates immediately
st.experimental_rerun()
# Check if all notes are completed
if len(st.session_state.completed_subjects) == len(subjects):
st.session_state.grading_enabled = True
st.sidebar.success("All subjects completed. You can now proceed to the Grading Tool.")
st.markdown("[Proceed to Grading Tool](https://thecssedge.com/wp-admin/admin.php?page=feedback-dashboard)")
# Next subject button
if st.session_state.current_subject_index < len(subjects) - 1:
if st.button("Go to Next Note"):
st.session_state.current_subject_index += 1
st.experimental_rerun()
else:
st.error(f"No text data found for {selected_subject}.")
else:
st.error(f"No data available for {selected_subject}.")
def main():
st.sidebar.title("Navigation")
page = st.sidebar.radio("Select a Page:", ["Notes"])
if page == "Notes":
notes_page()
if __name__ == "__main__":
main()
|