Skip to content

Commit 06764ff

Browse files
committed
Enhance HTML export by making links relative and updating link application logic to use a default base URL
1 parent efb6862 commit 06764ff

3 files changed

Lines changed: 34 additions & 17 deletions

File tree

exporters/html/html_export.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def convert_to_html(data: Dict[str, Any], apply_amendments: bool = False, up_to_
139139
return create_ignored_html_content(data, ignore_reason)
140140

141141
# Format the content text
142-
formatted_text = format_sfs_text_as_markdown(innehall_text)
142+
formatted_text = format_sfs_text_as_markdown(innehall_text, apply_links=True)
143143

144144
# Apply amendments if requested
145145
if apply_amendments and up_to_amendment:
@@ -157,6 +157,9 @@ def convert_to_html(data: Dict[str, Any], apply_amendments: bool = False, up_to_
157157

158158
# Convert markdown-formatted text to HTML
159159
html_content = markdown_to_html(formatted_text)
160+
161+
# Strip base URL from links to make them relative for HTML export
162+
html_content = make_links_relative(html_content)
160163

161164
# Create HTML document with navbar integration and ELI format
162165
html_doc = create_html_head(rubrik_original, beteckning)
@@ -166,9 +169,7 @@ def convert_to_html(data: Dict[str, Any], apply_amendments: bool = False, up_to_
166169
<div class="metadata">
167170
<dl>
168171
<dt>Beteckning:</dt>
169-
<dd property="eli:id_local" datatype="xsd:string">{html.escape(beteckning)}</dd>
170-
<dt>Rubrik:</dt>
171-
<dd property="eli:title" datatype="xsd:string">{html.escape(rubrik_original)}</dd>"""
172+
<dd property="eli:id_local" datatype="xsd:string">{html.escape(beteckning)}</dd>"""
172173

173174
if organisation:
174175
html_doc += f"""
@@ -225,6 +226,25 @@ def convert_to_html(data: Dict[str, Any], apply_amendments: bool = False, up_to_
225226
return html_doc
226227

227228

229+
def make_links_relative(html_content: str) -> str:
230+
"""
231+
Strip base URL from links to make them relative for HTML export.
232+
233+
Removes https://selex.se/eli from links to make them relative.
234+
235+
Args:
236+
html_content (str): HTML content with potentially absolute links
237+
238+
Returns:
239+
str: HTML content with relative links
240+
"""
241+
# Pattern to match https://selex.se/eli in href attributes
242+
pattern = r'href="https://selex\.se/eli(/[^"]*)"'
243+
replacement = r'href="\1"'
244+
245+
return re.sub(pattern, replacement, html_content)
246+
247+
228248
def markdown_to_html(markdown_text: str) -> str:
229249
"""Convert markdown formatting to HTML using the markdown library.
230250
@@ -472,7 +492,8 @@ def create_html_head(title: str, beteckning: str, additional_styles: str = "", a
472492
navbar_script = f"""
473493
<script>
474494
window.NAVBAR_CONFIG = {{
475-
logoUrl: "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 300 70'><text x='0' y='60' font-family='Inter, sans-serif' font-size='70' fill='%23f1c40f'>SE-Lex</text></svg>"
495+
logoUrl: "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 300 70'><text x='0' y='60' font-family='Inter, sans-serif' font-size='70' fill='%23f1c40f'>SE-Lex</text></svg>",
496+
drawerEnabled: false,
476497
}};
477498
</script>
478499
<script src=\"https://swebar.netlify.app/navbar.js\"></script>

formatters/apply_links.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ def apply_sfs_links(text: str) -> str:
4141
4242
Söker efter mönster som "YYYY:NNN" (år:löpnummer) och skapar länkar till /sfs/(beteckning).
4343
44-
Använder miljövariabeln INTERNAL_LINKS_BASE_URL för att skapa absoluta länkar om den är satt,
45-
annars skapas relativa länkar.
44+
Använder alltid https://selex.se/eli som bas-URL om INTERNAL_LINKS_BASE_URL inte är satt.
4645
4746
Args:
4847
text (str): Texten som ska bearbetas
@@ -54,8 +53,8 @@ def apply_sfs_links(text: str) -> str:
5453
# Matchar mönster som "2002:43", "1970:485", etc.
5554
sfs_pattern = SFS_PATTERN
5655

57-
# Hämta bas-URL från miljövariabler (tom sträng som standard för relativa länkar)
58-
base_url = os.getenv('INTERNAL_LINKS_BASE_URL', '')
56+
# Använd alltid https://selex.se/eli som default om env variabel inte finns
57+
base_url = os.getenv('INTERNAL_LINKS_BASE_URL', 'https://selex.se/eli')
5958

6059
# TODO: Slå upp SFS-beteckning mot JSON-fil för att verifiera giltighet
6160

@@ -226,8 +225,8 @@ def apply_law_name_links(text: str) -> str:
226225
if not law_names_data:
227226
return text
228227

229-
# Hämta bas-URL från miljövariabler
230-
base_url = os.getenv('INTERNAL_LINKS_BASE_URL', '')
228+
# Hämta bas-URL från miljövariabler - använd alltid https://selex.se/eli som default
229+
base_url = os.getenv('INTERNAL_LINKS_BASE_URL', 'https://selex.se/eli')
231230

232231
# Processar texten rad för rad för att undvika att länka rubriker
233232
lines = text.split('\n')
@@ -262,10 +261,7 @@ def replace_law_name_reference(match):
262261
year, number = id_parts
263262

264263
# Skapa bas-URL
265-
if base_url:
266-
url = f"{base_url}/sfs/{year}/{number}"
267-
else:
268-
url = f"/sfs/{year}/{number}"
264+
url = f"{base_url}/sfs/{year}/{number}"
269265

270266
# Extrahera första paragrafnummer för anchor om det finns
271267
# För externa länkar (till annan författning) ska formatet vara: #kapX.Y

sfs_processor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -624,8 +624,8 @@ def main():
624624
help='Branch name to use for git commits when "git" format is enabled. Use "(date)" as placeholder for current date. Default: sfs-updates-(date)')
625625
parser.add_argument('--predocs', action='store_true',
626626
help='Fetch detailed information about förarbeten from Riksdagen API. This will make processing slower.')
627-
parser.add_argument('--apply-links', action='store_true',
628-
help='Apply internal paragraph links (e.g., [9 §](#9§)), external SFS links (e.g., [2002:43](/sfs/2002:43)), EU legislation links (e.g., [(EU) nr 651/2014](https://eur-lex.europa.eu/...)), and law name links (e.g., [8 kap. 7 § regeringsformen](/sfs/1974/152)) to the document.')
627+
parser.add_argument('--apply-links', action='store_true', default=True,
628+
help='Apply internal paragraph links (e.g., [9 §](#9§)), external SFS links (e.g., [2002:43](/sfs/2002:43)), EU legislation links (e.g., [(EU) nr 651/2014](https://eur-lex.europa.eu/...)), and law name links (e.g., [8 kap. 7 § regeringsformen](/sfs/1974/152)) to the document. Default: True')
629629
parser.set_defaults(year_folder=True)
630630
args = parser.parse_args()
631631

0 commit comments

Comments
 (0)