lanna_lalala;- commited on
Commit
97ef44b
·
1 Parent(s): fdf0e7a

lesson css try

Browse files
Files changed (1) hide show
  1. phase/Student_view/lesson.py +40 -11
phase/Student_view/lesson.py CHANGED
@@ -18,6 +18,13 @@ USE_LOCAL_DB = os.getenv("DISABLE_DB", "1") != "1"
18
 
19
  FALLBACK_TAG = "<!--fallback-->"
20
 
 
 
 
 
 
 
 
21
  # ---------------------------------------------
22
  # Page state helpers
23
  # ---------------------------------------------
@@ -256,18 +263,38 @@ def _render_catalog():
256
 
257
  level = st.session_state.get("level", _SS_DEFAULTS["level"])
258
 
259
- cols = st.columns(3)
260
  for i, mod in enumerate(MODULES_META[level]):
261
- with cols[i % 3]:
262
- st.subheader(mod["title"])
263
- if mod.get("description"):
264
- st.caption(mod["description"])
265
- st.caption(f"Duration: {mod.get('duration','—')} · Difficulty: {mod.get('difficulty','—')}")
266
- with st.expander("Topics include"):
267
- for t, _ord in _topic_plan(level, mod["id"]):
268
- st.write(" ", t)
269
- if st.button("Start Learning", key=f"start_{level}_{mod['id']}"):
270
- # clear topic cache and cached fetches for a fresh run
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  st.session_state.topics_cache.pop((level, mod["id"]), None)
272
  try:
273
  st.cache_data.clear()
@@ -278,6 +305,7 @@ def _render_catalog():
278
  st.session_state.mode = "lesson"
279
  st.rerun()
280
 
 
281
  def _get_topics(level: str, module_id: int) -> List[Tuple[str, str]]:
282
  """
283
  Build the six-topic plan from metadata titles, try backend for each,
@@ -512,6 +540,7 @@ def _render_assigned_lesson(lesson_id: int, assignment_id: Optional[int] = None)
512
  st.rerun()
513
 
514
  def render():
 
515
  _ensure_state()
516
  ensure_quiz_state() # ensure quiz keys whenever the page renders
517
  route = st.session_state.get("lesson_route")
 
18
 
19
  FALLBACK_TAG = "<!--fallback-->"
20
 
21
+ # --- Load external CSS (optional) ---
22
+ def load_css(file_name: str):
23
+ try:
24
+ with open(file_name, "r", encoding="utf-8") as f:
25
+ st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
26
+ except FileNotFoundError:
27
+ st.warning("⚠️ Stylesheet not found. Please ensure 'assets/styles.css' exists.")
28
  # ---------------------------------------------
29
  # Page state helpers
30
  # ---------------------------------------------
 
263
 
264
  level = st.session_state.get("level", _SS_DEFAULTS["level"])
265
 
266
+ cols = st.columns(2) # Two cards side by side like in the image
267
  for i, mod in enumerate(MODULES_META[level]):
268
+ with cols[i % 2]:
269
+ completed = "✅" if mod.get("completed") else ""
270
+ user_count = f"{2500 - i * 400}" # mock user count for visual
271
+ duration = mod.get("duration", "—")
272
+
273
+ # Inject HTML using markdown
274
+ st.markdown(f"""
275
+ <div class="metric-card lesson-card" style="padding: 1.5rem;">
276
+ <div style="display: flex; justify-content: space-between; align-items: center;">
277
+ <span class="badge">Beginner</span>
278
+ <span>{completed}</span>
279
+ </div>
280
+ <h4 style="margin-top: 0.5rem;">{mod['title']}</h4>
281
+ <p class="card-subtitle">{mod.get('description')}</p>
282
+ <p style="color: var(--gray-600); font-size: 0.9rem;">
283
+ ⏱ {duration} &nbsp;&nbsp; 👥 {user_count}
284
+ </p>
285
+ <ul style="margin-top: 1rem; font-size: 0.9rem; color: var(--text-dark); padding-left: 1.2rem;">
286
+ {''.join(f'<li>{t}</li>' for t, _ in _topic_plan(level, mod["id"])[:2])}
287
+ </ul>
288
+ <form action="#">
289
+ <button class="stButton" type="submit" name="start_{level}_{mod['id']}" style="margin-top: 1rem; width: 100%;">
290
+ {'Review Module' if mod.get('completed') else 'Start Learning'}
291
+ </button>
292
+ </form>
293
+ </div>
294
+ """, unsafe_allow_html=True)
295
+
296
+ # Start learning button logic (outside of form for interaction)
297
+ if st.button("", key=f"start_{level}_{mod['id']}", help="Hidden button to enable rerun"):
298
  st.session_state.topics_cache.pop((level, mod["id"]), None)
299
  try:
300
  st.cache_data.clear()
 
305
  st.session_state.mode = "lesson"
306
  st.rerun()
307
 
308
+
309
  def _get_topics(level: str, module_id: int) -> List[Tuple[str, str]]:
310
  """
311
  Build the six-topic plan from metadata titles, try backend for each,
 
540
  st.rerun()
541
 
542
  def render():
543
+ load_css(os.path.join("assets", "styles.css"))
544
  _ensure_state()
545
  ensure_quiz_state() # ensure quiz keys whenever the page renders
546
  route = st.session_state.get("lesson_route")