174 lines
5.4 KiB
Python
174 lines
5.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Demo script showing TOC overlay pagination functionality.
|
|
|
|
This demonstrates:
|
|
1. Opening a navigation overlay with many chapters
|
|
2. Navigating through pages using Next/Previous buttons
|
|
3. Switching between Contents and Bookmarks tabs with pagination
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Add project root to path
|
|
project_root = Path(__file__).parent.parent
|
|
sys.path.insert(0, str(project_root))
|
|
|
|
from dreader import EbookReader, TouchEvent, GestureType
|
|
|
|
def main():
|
|
print("=" * 60)
|
|
print("TOC Pagination Demo")
|
|
print("=" * 60)
|
|
|
|
# Create reader
|
|
reader = EbookReader(page_size=(800, 1200))
|
|
|
|
# Create a mock book with many chapters for demonstration
|
|
from dreader.html_generator import generate_navigation_overlay
|
|
|
|
# Generate test data: 35 chapters and 20 bookmarks
|
|
chapters = [{"index": i, "title": f"Chapter {i+1}: The Adventure Continues"} for i in range(35)]
|
|
bookmarks = [{"name": f"Bookmark {i+1}", "position": f"Page {i*10}"} for i in range(20)]
|
|
|
|
print("\nTest Data:")
|
|
print(f" - {len(chapters)} chapters")
|
|
print(f" - {len(bookmarks)} bookmarks")
|
|
print(f" - Items per page: 10")
|
|
print()
|
|
|
|
# Demonstrate pagination on Contents tab
|
|
print("Contents Tab Pagination:")
|
|
print("-" * 60)
|
|
|
|
# Page 1 of TOC (chapters 1-10)
|
|
print("\n[Page 1/4] Chapters 1-10:")
|
|
html_page1 = generate_navigation_overlay(
|
|
chapters=chapters,
|
|
bookmarks=bookmarks,
|
|
active_tab="contents",
|
|
page_size=(800, 1200),
|
|
toc_page=0,
|
|
toc_items_per_page=10
|
|
)
|
|
# Extract chapter titles for display
|
|
for i in range(10):
|
|
print(f" {i+1}. {chapters[i]['title']}")
|
|
print(" [← Prev] Page 1 of 4 [Next →]")
|
|
|
|
# Page 2 of TOC (chapters 11-20)
|
|
print("\n[Page 2/4] Chapters 11-20:")
|
|
html_page2 = generate_navigation_overlay(
|
|
chapters=chapters,
|
|
bookmarks=bookmarks,
|
|
active_tab="contents",
|
|
page_size=(800, 1200),
|
|
toc_page=1,
|
|
toc_items_per_page=10
|
|
)
|
|
for i in range(10, 20):
|
|
print(f" {i+1}. {chapters[i]['title']}")
|
|
print(" [← Prev] Page 2 of 4 [Next →]")
|
|
|
|
# Page 3 of TOC (chapters 21-30)
|
|
print("\n[Page 3/4] Chapters 21-30:")
|
|
html_page3 = generate_navigation_overlay(
|
|
chapters=chapters,
|
|
bookmarks=bookmarks,
|
|
active_tab="contents",
|
|
page_size=(800, 1200),
|
|
toc_page=2,
|
|
toc_items_per_page=10
|
|
)
|
|
for i in range(20, 30):
|
|
print(f" {i+1}. {chapters[i]['title']}")
|
|
print(" [← Prev] Page 3 of 4 [Next →]")
|
|
|
|
# Page 4 of TOC (chapters 31-35)
|
|
print("\n[Page 4/4] Chapters 31-35:")
|
|
html_page4 = generate_navigation_overlay(
|
|
chapters=chapters,
|
|
bookmarks=bookmarks,
|
|
active_tab="contents",
|
|
page_size=(800, 1200),
|
|
toc_page=3,
|
|
toc_items_per_page=10
|
|
)
|
|
for i in range(30, 35):
|
|
print(f" {i+1}. {chapters[i]['title']}")
|
|
print(" [← Prev] Page 4 of 4 [Next →]")
|
|
|
|
# Demonstrate pagination on Bookmarks tab
|
|
print("\n" + "=" * 60)
|
|
print("Bookmarks Tab Pagination:")
|
|
print("-" * 60)
|
|
|
|
# Page 1 of Bookmarks (1-10)
|
|
print("\n[Page 1/2] Bookmarks 1-10:")
|
|
html_bm1 = generate_navigation_overlay(
|
|
chapters=chapters,
|
|
bookmarks=bookmarks,
|
|
active_tab="bookmarks",
|
|
page_size=(800, 1200),
|
|
toc_page=0,
|
|
bookmarks_page=0,
|
|
toc_items_per_page=10
|
|
)
|
|
for i in range(10):
|
|
print(f" {bookmarks[i]['name']} - {bookmarks[i]['position']}")
|
|
print(" [← Prev] Page 1 of 2 [Next →]")
|
|
|
|
# Page 2 of Bookmarks (11-20)
|
|
print("\n[Page 2/2] Bookmarks 11-20:")
|
|
html_bm2 = generate_navigation_overlay(
|
|
chapters=chapters,
|
|
bookmarks=bookmarks,
|
|
active_tab="bookmarks",
|
|
page_size=(800, 1200),
|
|
toc_page=0,
|
|
bookmarks_page=1,
|
|
toc_items_per_page=10
|
|
)
|
|
for i in range(10, 20):
|
|
print(f" {bookmarks[i]['name']} - {bookmarks[i]['position']}")
|
|
print(" [← Prev] Page 2 of 2 [Next →]")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("Pagination Controls:")
|
|
print("-" * 60)
|
|
print(" - Click 'Next →' to go to next page")
|
|
print(" - Click '← Prev' to go to previous page")
|
|
print(" - Page indicator shows: 'Page X of Y'")
|
|
print(" - Buttons are disabled at boundaries:")
|
|
print(" • '← Prev' disabled on page 1")
|
|
print(" • 'Next →' disabled on last page")
|
|
print()
|
|
|
|
print("=" * 60)
|
|
print("Interactive Gesture Flow:")
|
|
print("-" * 60)
|
|
print("1. User swipes up → Opens navigation overlay (page 1)")
|
|
print("2. User taps 'Next →' → Shows page 2")
|
|
print("3. User taps 'Next →' → Shows page 3")
|
|
print("4. User taps chapter → Navigates to chapter & closes overlay")
|
|
print("5. OR taps '← Prev' → Goes back to page 2")
|
|
print()
|
|
|
|
print("HTML Features Implemented:")
|
|
print("-" * 60)
|
|
print("✓ Pagination links: <a href='page:next'> and <a href='page:prev'>")
|
|
print("✓ Page indicator: 'Page X of Y' text")
|
|
print("✓ Disabled styling: opacity 0.3 + pointer-events: none")
|
|
print("✓ Separate pagination for Contents and Bookmarks tabs")
|
|
print("✓ Automatic page calculation based on total items")
|
|
print("✓ Graceful handling of empty lists")
|
|
print()
|
|
|
|
print("=" * 60)
|
|
print("Demo Complete!")
|
|
print("=" * 60)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|