dhammawatthumpra commited on
Commit
cfd4523
·
1 Parent(s): 68e09f8

fix: end markers only show for nearby sections (page proximity filter)

Browse files
webapp/tipitaka-api/app/services/page_service.py CHANGED
@@ -70,7 +70,7 @@ class PageService:
70
  return None
71
 
72
  cursor.execute("""
73
- SELECT c.title, c.level
74
  FROM contents c
75
  WHERE c.volume_id = ?
76
  AND c.page_number <= ?
@@ -88,9 +88,10 @@ class PageService:
88
  # Clean section range suffix: ๓.-๑๐. → ๓.
89
  title = re.sub(r'^([\u0E50-\u0E59]+)\.-[\u0E50-\u0E59]+\.\s*', r'\1. ', title)
90
  level = r["level"]
 
91
  if level not in seen_levels and title:
92
  seen_levels.add(level)
93
- sections.append({"title": title, "level": level})
94
  sections.sort(key=lambda s: s["level"])
95
  cleaned = self.search_service.clean_text(row["content_text"])
96
  is_blank = self._is_blank_page(cleaned)
 
70
  return None
71
 
72
  cursor.execute("""
73
+ SELECT c.title, c.level, c.page_number
74
  FROM contents c
75
  WHERE c.volume_id = ?
76
  AND c.page_number <= ?
 
88
  # Clean section range suffix: ๓.-๑๐. → ๓.
89
  title = re.sub(r'^([\u0E50-\u0E59]+)\.-[\u0E50-\u0E59]+\.\s*', r'\1. ', title)
90
  level = r["level"]
91
+ sec_page = r["page_number"]
92
  if level not in seen_levels and title:
93
  seen_levels.add(level)
94
+ sections.append({"title": title, "level": level, "page_number": sec_page})
95
  sections.sort(key=lambda s: s["level"])
96
  cleaned = self.search_service.clean_text(row["content_text"])
97
  is_blank = self._is_blank_page(cleaned)
webapp/tipitaka-web/src/components/layout/ReaderPanel.tsx CHANGED
@@ -17,12 +17,17 @@ const SHELL_STYLES: Record<string, string> = {
17
  classic: 'bg-[#f5edd8]',
18
  };
19
 
20
- const renderContent = (html: string, fontSize: number, sections: {title: string; level: number}[]) => {
21
  // Sections with "จบ" → end marker below content
22
- // Skip if already rendered as <h4> inside content body (from <B> tag)
23
  const endMarkers = sections.filter(s => {
24
  const title = s.title.trim();
25
  if (!(title.endsWith('จบ') || title.includes('จบ'))) return false;
 
 
 
 
 
26
  if (html && html.includes(title)) return false;
27
  return true;
28
  });
@@ -193,7 +198,7 @@ const ReaderPanel: React.FC = () => {
193
  ))}
194
  </header>
195
  <div className="border-b border-[#c8860a]/15 mb-5" />
196
- {renderContent(content.content_html_formatted || content.content_html || '', fontSize, content.sections || [])}
197
  </>
198
  )}
199
 
 
17
  classic: 'bg-[#f5edd8]',
18
  };
19
 
20
+ const renderContent = (html: string, fontSize: number, sections: {title: string; level: number; page_number?: number}[], currentPage?: number) => {
21
  // Sections with "จบ" → end marker below content
22
+ // Only if section's page_number is close to current page (within 5 pages)
23
  const endMarkers = sections.filter(s => {
24
  const title = s.title.trim();
25
  if (!(title.endsWith('จบ') || title.includes('จบ'))) return false;
26
+ // Skip if this end marker belongs to a faraway page
27
+ if (s.page_number !== undefined && currentPage !== undefined) {
28
+ if (currentPage - s.page_number > 5) return false;
29
+ }
30
+ // Skip if already rendered as <h4> inside content body (from <B> tag)
31
  if (html && html.includes(title)) return false;
32
  return true;
33
  });
 
198
  ))}
199
  </header>
200
  <div className="border-b border-[#c8860a]/15 mb-5" />
201
+ {renderContent(content.content_html_formatted || content.content_html || '', fontSize, content.sections || [], content.page_number)}
202
  </>
203
  )}
204