SYMBOL INDEX (106 symbols across 18 files) FILE: src/arxiv_integration.py class ArxivIntegration (line 8) | class ArxivIntegration: method __init__ (line 9) | def __init__(self): method extract_arxiv_id (line 12) | def extract_arxiv_id(self, url_or_id: str) -> str: method get_paper (line 29) | def get_paper(self, url_or_id: str) -> Optional[Dict[str, Any]]: method append_to_yaml (line 61) | def append_to_yaml(self, entry: Dict[str, Any], filename: str = "aweso... method format_yaml_entry (line 81) | def format_yaml_entry(entry: Dict[str, Any]) -> str: function clean_and_quote (line 107) | def clean_and_quote(text: str) -> str: function format_optional_field (line 117) | def format_optional_field(value) -> str: FILE: src/components/dialogs.py class ArxivAddDialog (line 12) | class ArxivAddDialog(QDialog): method __init__ (line 13) | def __init__(self, parent=None): method setup_ui (line 21) | def setup_ui(self): method generate_thumbnail (line 43) | def generate_thumbnail(self, entry): method add_paper (line 67) | def add_paper(self): FILE: src/components/thumbnail.py class ThumbnailGenerator (line 10) | class ThumbnailGenerator: method __init__ (line 11) | def __init__(self, output_dir: str = "assets/thumbnails"): method download_pdf (line 18) | def download_pdf(self, url: str) -> bytes: method create_thumbnail (line 29) | def create_thumbnail(self, pdf_content: bytes, paper_id: str) -> bool: FILE: src/components/widgets.py class TagButton (line 3) | class TagButton(QPushButton): method __init__ (line 4) | def __init__(self, text, active=False): class URLWidget (line 25) | class URLWidget(QWidget): method __init__ (line 26) | def __init__(self, label_text): method set_text (line 40) | def set_text(self, value): FILE: src/fix_date.py class YAMLUpdater (line 9) | class YAMLUpdater: method __init__ (line 10) | def __init__(self): method extract_year_from_id (line 14) | def extract_year_from_id(self, paper_id: str) -> Optional[int]: method extract_arxiv_id (line 21) | def extract_arxiv_id(self, url: str) -> Optional[str]: method get_fallback_date (line 32) | def get_fallback_date(self, entry: Dict[str, Any]) -> Optional[str]: method process_paper (line 51) | def process_paper(self, entry: Dict[str, Any]) -> Tuple[Dict[str, Any]... method safe_sort_key (line 90) | def safe_sort_key(self, x: Dict[str, Any]) -> tuple: method update_yaml_with_dates (line 112) | def update_yaml_with_dates(self, filename: str = "awesome_3dgs_papers.... FILE: src/generate.py function generate_html (line 9) | def generate_html(entries: List[Dict[str, Any]], output_file: str) -> None: function main (line 38) | def main(): FILE: src/helper.py function generate_year_options (line 10) | def generate_year_options(entries: List[Dict[str, Any]]) -> str: function generate_tag_filters (line 15) | def generate_tag_filters(entries: List[Dict[str, Any]]) -> str: function generate_paper_cards (line 21) | def generate_paper_cards(entries: List[Dict[str, Any]]) -> str: function format_publication_date (line 45) | def format_publication_date(date_str: str, date_source: str) -> str: FILE: src/paper_generator.py class PaperCardGenerator (line 7) | class PaperCardGenerator: method __init__ (line 10) | def __init__(self, templates_dir: Path): method _generate_link (line 14) | def _generate_link(self, url: str, icon: str, text: str, emoji: str = ... method _generate_links (line 21) | def _generate_links(self, paper: Paper) -> str: method _generate_tags (line 44) | def _generate_tags(self, paper: Paper) -> str: method _generate_abstract (line 49) | def _generate_abstract(self, paper: Paper) -> str: method generate_card (line 58) | def generate_card(self, paper: Paper) -> str: method generate_cards (line 75) | def generate_cards(self, papers: List[Paper]) -> str: FILE: src/paper_schema.py class Paper (line 6) | class Paper: method from_dict (line 23) | def from_dict(cls, data: dict) -> 'Paper': method to_dict (line 74) | def to_dict(self) -> dict: FILE: src/static/js/filters.js function filterPapers (line 1) | function filterPapers() { function clearSearch (line 41) | function clearSearch() { function initializeFilters (line 46) | function initializeFilters() { FILE: src/static/js/navigation.js function scrollToTop (line 2) | function scrollToTop() { function scrollToBottom (line 9) | function scrollToBottom() { function updateScrollProgress (line 17) | function updateScrollProgress() { function updateFilterStatus (line 25) | function updateFilterStatus() { function createFilterTag (line 77) | function createFilterTag(type, title, info) { function clearAllFilters (line 94) | function clearAllFilters() { FILE: src/static/js/selection.js function toggleSelectedOnly (line 1) | function toggleSelectedOnly() { function toggleSelectionMode (line 24) | function toggleSelectionMode() { function clearSelection (line 54) | function clearSelection() { function togglePaperSelection (line 80) | function togglePaperSelection(paperId, checkbox) { function removeFromSelection (line 119) | function removeFromSelection(paperId) { function updateSelectionCount (line 143) | function updateSelectionCount() { function handleCheckboxClick (line 148) | function handleCheckboxClick(ev, paperId, checkbox) { function scrollToPaper (line 153) | function scrollToPaper(paperId) { FILE: src/static/js/sharing.js function showShareModal (line 1) | function showShareModal() { function hideShareModal (line 17) | function hideShareModal() { function copyShareLink (line 21) | async function copyShareLink() { function copyBitcoinAddress (line 36) | function copyBitcoinAddress() { function applyURLParams (line 48) | function applyURLParams() { FILE: src/static/js/utils.js function debounce (line 1) | function debounce(fn, delay) { function updateURL (line 9) | function updateURL() { function updatePaperNumbers (line 37) | function updatePaperNumbers() { FILE: src/template_engine.py class TemplateEngine (line 5) | class TemplateEngine: method __init__ (line 6) | def __init__(self, template_path: Path): method render (line 10) | def render(self, context: Dict[str, Any]) -> str: FILE: src/utils.py function read_files (line 4) | def read_files(base_dir: Path, file_paths: List[str]) -> List[str]: function write_output (line 12) | def write_output(output_file: str, content: str) -> None: FILE: src/validate_yaml.py function validate_url (line 39) | def validate_url(url, required=False): function get_changed_entries (line 66) | def get_changed_entries(): function validate_entries (line 101) | def validate_entries(entries): function main (line 153) | def main(): FILE: src/yaml_editor.py class YAMLEditor (line 17) | class YAMLEditor(QMainWindow): method __init__ (line 18) | def __init__(self): method safe_sort_key (line 53) | def safe_sort_key(self, x: Dict[str, Any]) -> tuple: method load_yaml (line 84) | def load_yaml(self): method setup_status_bar (line 102) | def setup_status_bar(self): method show_save_feedback (line 107) | def show_save_feedback(self, success=True): method clear_save_indicator (line 116) | def clear_save_indicator(self): method setup_ui (line 120) | def setup_ui(self): method auto_save (line 253) | def auto_save(self): method handle_url_change (line 303) | def handle_url_change(self): method get_entry_state (line 307) | def get_entry_state(self, entry): method update_tags (line 314) | def update_tags(self): method update_automatic_tags (line 320) | def update_automatic_tags(self): method clear_search_results (line 341) | def clear_search_results(self): method show_current_entry (line 346) | def show_current_entry(self): method search_entry (line 378) | def search_entry(self): method open_url (line 414) | def open_url(self, field): method go_to_page (line 419) | def go_to_page(self): method prev_entry (line 430) | def prev_entry(self): method next_entry (line 436) | def next_entry(self): method delete_current_entry (line 442) | def delete_current_entry(self): method add_arxiv_button (line 479) | def add_arxiv_button(self): method refresh_ui (line 484) | def refresh_ui(self): method show_arxiv_dialog (line 505) | def show_arxiv_dialog(self): function main (line 551) | def main():