StrictDoc Documentation
strictdoc/features/project_index/view_object.py
Source file coverage
Path:
strictdoc/features/project_index/view_object.py
Lines:
102
Non-empty lines:
84
Non-empty lines covered with requirements:
84 / 84 (100.0%)
Functions:
13
Functions covered by requirements:
13 / 13 (100.0%)
1
"""
2
@relation(SDOC-SRS-53, scope=file)
3
"""
4
 
5
from dataclasses import dataclass
6
from typing import Union
7
 
8
from markupsafe import Markup
9
 
10
from strictdoc import __version__
11
from strictdoc.backend.sdoc.models.anchor import Anchor
12
from strictdoc.backend.sdoc.models.document import SDocDocument
13
from strictdoc.backend.sdoc.models.node import SDocNode
14
from strictdoc.core.document_tree import DocumentTree
15
from strictdoc.core.document_tree_iterator import DocumentTreeIterator
16
from strictdoc.core.file_system.file_tree import File, Folder
17
from strictdoc.core.project_config import ProjectConfig
18
from strictdoc.core.traceability_index import TraceabilityIndex
19
from strictdoc.export.html.generators.view_objects.helpers import (
20
    screen_should_display_file,
21
    screen_should_display_folder,
22
)
23
from strictdoc.export.html.html_templates import JinjaEnvironment
24
from strictdoc.export.html.renderers.link_renderer import LinkRenderer
25
from strictdoc.helpers.cast import assert_cast
26
 
27
 
28
@dataclass
29
class ProjectTreeViewObject:
30
    def __init__(
31
        self,
32
        *,
33
        traceability_index: TraceabilityIndex,
34
        project_config: ProjectConfig,
35
    ):
36
        self.traceability_index: TraceabilityIndex = traceability_index
37
        self.project_config: ProjectConfig = project_config
38
 
39
        link_renderer = LinkRenderer(
40
            root_path="", static_path=project_config.dir_for_sdoc_assets
41
        )
42
        self.link_renderer: LinkRenderer = link_renderer
43
 
44
        self.document_tree_iterator: DocumentTreeIterator = (
45
            DocumentTreeIterator(
46
                assert_cast(traceability_index.document_tree, DocumentTree)
47
            )
48
        )
49
        self.is_running_on_server: bool = project_config.is_running_on_server
50
        self.strictdoc_version = __version__
51
        self.contains_included_documents = (
52
            traceability_index.contains_included_documents
53
        )
54
 
55
    def render_local_anchor(
56
        self, node: Union[Anchor, SDocNode, SDocDocument]
57
    ) -> str:
58
        return self.link_renderer.render_local_anchor(node)
59
 
60
    def render_screen(self, jinja_environment: JinjaEnvironment) -> Markup:
61
        return jinja_environment.render_template_as_markup(
62
            "features/project_index/index.jinja", view_object=self
63
        )
64
 
65
    def render_map(self, jinja_environment: JinjaEnvironment) -> Markup:
66
        return jinja_environment.render_template_as_markup(
67
            "features/project_index/project_map.jinja.js", view_object=self
68
        )
69
 
70
    def render_static_url(self, url: str) -> str:
71
        return self.link_renderer.render_static_url(url)
72
 
73
    def render_url(self, url: str) -> str:
74
        return self.link_renderer.render_url(url)
75
 
76
    def render_static_url_with_prefix(self, url: str) -> str:
77
        return self.link_renderer.render_static_url_with_prefix(url)
78
 
79
    def is_empty_tree(self) -> bool:
80
        return self.document_tree_iterator.is_empty_tree()
81
 
82
    def get_document_level(self) -> int:
83
        return 0
84
 
85
    def should_display_fragments_toggle(self) -> bool:
86
        return self.project_config.export_included_documents
87
 
88
    def should_display_folder(self, folder: Folder) -> bool:
89
        return screen_should_display_folder(
90
            folder,
91
            self.traceability_index,
92
            self.project_config,
93
            must_only_include_non_included_sdoc=False,
94
        )
95
 
96
    def should_display_file(self, file: File) -> bool:
97
        return screen_should_display_file(
98
            file,
99
            self.traceability_index,
100
            self.project_config,
101
            must_only_include_non_included_sdoc=False,
102
        )