|
2 | 2 |
|
3 | 3 | from mkdocs.structure.pages import Page
|
4 | 4 |
|
| 5 | +from mkdocs_zettelkasten.plugin.entities.zettel import Zettel |
5 | 6 | from mkdocs_zettelkasten.plugin.services.zettel_service import ZettelService
|
6 | 7 |
|
7 | 8 | logger = logging.getLogger(
|
8 | 9 | __name__.replace("mkdocs_zettelkasten.plugin.", "mkdocs.plugins.zettelkasten.")
|
9 | 10 | )
|
10 | 11 |
|
11 | 12 |
|
| 13 | +def add_backlink_to_target( |
| 14 | + link: str, |
| 15 | + page: Page, |
| 16 | + zettel: Zettel, |
| 17 | + zettel_service: ZettelService, |
| 18 | +) -> None: |
| 19 | + """ |
| 20 | + Adds a backlink to the target zettel if the given zettel links to the page. |
| 21 | +
|
| 22 | + This function checks if the zettel corresponds to the current page. If so, |
| 23 | + it finds the target zettel referenced by the link and appends a backlink |
| 24 | + entry to its backlinks list. |
| 25 | +
|
| 26 | + Args: |
| 27 | + link (str): The link to the target zettel. |
| 28 | + page (Page): The current MkDocs page. |
| 29 | + zettel (Zettel): The zettel associated with the current page. |
| 30 | + zettel_service (ZettelService): Service to retrieve zettels. |
| 31 | + """ |
| 32 | + |
| 33 | + if zettel.id != page.meta["zettel"].id: |
| 34 | + return |
| 35 | + |
| 36 | + target_zettel = zettel_service.get_zettel_by_partial_path(link) |
| 37 | + |
| 38 | + if not target_zettel: |
| 39 | + return |
| 40 | + |
| 41 | + backlink = { |
| 42 | + "url": page.url, |
| 43 | + "title": page.title, |
| 44 | + } |
| 45 | + target_zettel.backlinks.append(backlink) |
| 46 | + logger.debug( |
| 47 | + "Found link from %s to %s. Adding it to %s's backlinks.", |
| 48 | + zettel.rel_path, |
| 49 | + target_zettel.rel_path, |
| 50 | + target_zettel.rel_path, |
| 51 | + ) |
| 52 | + |
| 53 | + |
12 | 54 | def adapt_backlinks_to_page(page: Page, zettel_service: ZettelService) -> None:
|
13 | 55 | """
|
14 | 56 | Update backlinks for zettels that link to the current page.
|
15 | 57 |
|
16 | 58 | :param page: The page whose backlinks should be updated.
|
| 59 | + :type page: Page |
17 | 60 | :param zettel_service: Service providing zettel and backlink information.
|
| 61 | + :type zettel_service: ZettelService |
18 | 62 | """
|
| 63 | + |
19 | 64 | if not page.meta["is_zettel"]:
|
20 | 65 | return
|
21 | 66 |
|
22 |
| - current_zettel_id = page.meta["zettel"].id |
23 |
| - |
24 | 67 | for link, source_zettels in zettel_service.backlinks.items():
|
25 | 68 | for zettel in source_zettels:
|
26 |
| - if zettel.id != current_zettel_id: |
27 |
| - continue |
28 |
| - |
29 |
| - target_zettel = zettel_service.get_zettel_by_partial_path(link) |
30 |
| - if not target_zettel: |
31 |
| - continue |
32 |
| - |
33 |
| - backlink = { |
34 |
| - "url": page.url, |
35 |
| - "title": page.title, |
36 |
| - } |
37 |
| - target_zettel.backlinks.append(backlink) |
38 |
| - logger.debug( |
39 |
| - "Found link from %s to %s. Adding it to %s's backlinks.", |
40 |
| - zettel.rel_path, |
41 |
| - target_zettel.rel_path, |
42 |
| - target_zettel.rel_path, |
43 |
| - ) |
| 69 | + add_backlink_to_target(link, page, zettel, zettel_service) |
0 commit comments