]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/commitdiff
Improve rendering of sledrun as MediaWiki markup.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 26 Oct 2021 07:14:55 +0000 (09:14 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 26 Oct 2021 07:14:55 +0000 (09:14 +0200)
wrpylib/templates/sledrun_wiki.txt
wrpylib/wrmwmarkup.py

index 341e09fecbbbdb8519e32d93224039cc34cd5f84..42fc580449b332b720f027e25920c9104daff9c2 100644 (file)
@@ -1,7 +1,7 @@
 {% block content %}
 == Allgemeines ==
 {{ rodelbahnbox }}
-{{ description }}
+{{ description | default("*Hier wird die Rodelbahn allgemein beschrieben.*") | from_markdown | trim }}
 {% raw %}
 * {{Position oben}}
 * {{Position unten}}
@@ -9,31 +9,40 @@
 * {{Bahnlänge}}
 * {{Gehzeit}}
 {% endraw -%}
-* '''Beleuchtung''': {{ night_light }}
-* '''Rodelverleih''': {{ sled_rental_description }}
-* '''Schneelage - Auskunft''':{% for info in sledrun_json.get('info_phone', []) %}
-** {{ info['phone'] }} ({{ info['name'] }}){% endfor %}{% for info in sledrun_json.get('info_web', []) %}
-** {% if 'text' in info %}[{{ info['url'] }} {{ info['text'] }}]{% else %}{{ info['url'] }}{% endif %}{% endfor %}
+* '''Beleuchtung''': {{ nightlight_description | default( nightlight_possible | default('*Unbekannt*') ) | from_markdown | trim }}
+* '''Rodelverleih''': {{ sled_rental_description | default( sled_rental_direct | german_bool | default( '*Unbekannt*' ) ) | from_markdown | trim }}
+* '''Schneelage - Auskunft''':
+{%- for info in info_phone %}
+** {{ info.phone }} ({{ info.name }})
+{%- endfor %}
+{%- for info in info_web %}
+** {% if info.text %}[{{ info.url }} {{ info.text }}]{% else %}{{ info.url }}{% endif %}
+{%- endfor %}
 * '''Betreiber''': {{ operator }}
-* '''Hütten''':{% for info in sledrun_json.get('gastronomy', []) %}
-** {% if 'wr_page' in info -%}
-   {% if 'name' in info %}[[{{ info['wr_page']['title'] }}|{{ info['name'] }}]]
-   {%- else %}{{ info['wr_page'] }}{% endif -%}
+* '''Hütten''':
+{%- for info in gastronomy %}
+** {% if info.wr_page -%}
+   {% if info.name %}[[{{ info.wr_page.title }}|{{ info.name }}]]
+   {%- else %}{{ info.wr_page }}{% endif -%}
    {% endif -%}
-   {% endfor %}
+{% endfor %}
 * '''Andere Rodelbahnen''':
-** [[Untermarkter Alm]]
-* '''Siehe auch''':{% for info in sledrun_json.get('see_also', []) %}
-** {% if 'text' in info %}[{{ info['url'] }} {{ info['text'] }}]{% else %}{{ info['url'] }}{% endif %}{% endfor %}
+{%- for page in sledrun_list %}
+** [[{{ page.title }}{% if page.name %}|{{ page.name }}{% endif %}]]
+{% endfor -%}
+* '''Siehe auch''':
+{%- for info in see_also %}
+** {% if info.text %}[{{ info.url }} {{ info.text }}]{% else %}{{ info.url }}{% endif %}
+{%- endfor %}
 
 
 {% raw %}{{Buttonleiste{% endraw -%}
-|Bericht={% if sledrun_json.get('allow_reports', True) %}Ja{% else %}Nein{% endif -%}
-{% if 'forum_id' in sledrun_json %}|ForumId={{ sledrun_json['forum_id'] }}{% endif -%}
-{% if 'position' in sledrun_json %}|Wetter=Ja{% endif -%}
-|Korrektur=Seite{% if 'correction_email' in sledrun_json %}|Korrektur_To={{ sledrun_json['correction_email'] }}{% endif -%}
-{% if 'freizeitticket_tyrol' in sledrun_json %}|Freizeitticket=Ja{% endif -%}
-{% if 'regio_card_tyrol' in sledrun_json %}|Regiocard=Ja{% endif -%}}}
+|Bericht={{ allow_reports | default(true) | german_bool }}
+{%- if forum_id %}|ForumId={{ forum_id }}{% endif %}
+{%- if position %}|Wetter=Ja{% endif -%}
+|Korrektur=Seite{% if correction_email %}|Korrektur_To={{ correction_email }}{% endif -%}
+{% if freizeitticket_tyrol %}|Freizeitticket=Ja{% endif -%}
+{% if regio_card_tyrol %}|Regiocard=Ja{% endif -%}}}
 {% raw %}{{Clear}}{% endraw %}
 
 
 {%- else -%}
 {{ h.create_wrmap(map_json) }}
 {% raw %}{{Landkarte Legende}}<br/>{{GoogleMaps Hinweis}}{% endraw %}
-{% endif %}
+{%- endif %}
+
 
 == Anreise mit öffentlichen Verkehrsmitteln ==
-{% if 'public_transport_description' in sledrun_json %}{{ sledrun_json['public_transport_description'] }}
-{%- else %}''Hier wird die Anreise mit öffentlichen Verkehrsmitteln beschrieben.''{% endif %}
+{% if public_transport_description -%}
+{{ public_transport_description | from_markdown | trim }}
+{%- else -%}
+''Hier wird die Anreise mit öffentlichen Verkehrsmitteln beschrieben.''
+{%- endif %}
 
 {% for pt_stop in sledrun_json.get('public_transport_stops', []) -%}
 * {{ h.list_template('Haltestelle', [pt_stop.get('name', ''), '', h.json_pos_ele_position(pt_stop.get('position', '')), h.json_pos_ele_elevation(pt_stop.get('position', ''))]) }}
 
 
 == Anreise mit dem Auto ==
-{% if 'car_description' in sledrun_json %}{{ sledrun_json.car_description }}
-{%- else %}''Hier wird die Anreise mit dem Auto beschrieben.''{% endif %}
+{% if car_description -%}
+{{ car_description | from_markdown | trim }}
+{%- else -%}
+''Hier wird die Anreise mit dem Auto beschrieben.''
+{%- endif %}
 
 {% for parking in sledrun_json.car_parking -%}
 * '''Parkplatz''': {{ h.list_template('Parkplatz', [h.json_pos_ele_position(parking.position), h.json_pos_ele_elevation(parking.position)]) }}
index def51f1a74ddbe2f09d57ad82b178fc723c901f2..c609e70bf8f898e4e2ad5ca3d4a55abe1047ab57 100644 (file)
@@ -16,7 +16,7 @@ from wrpylib.wrvalidators import LonLat, opt_lonlat_from_str, opt_lonlat_to_str,
     opt_str_opt_comment_enum_to_str, lift_german_to_str, webauskunft_to_str, cachet_german_to_str, \
     opt_phone_comment_enum_to_str, lift_german_from_str, GASTHAUSBOX_DICT, opt_difficulty_german_from_str, \
     opt_avalanches_german_from_str, nightlightdays_from_str, opt_public_transport_german_from_str, \
-    opt_tristate_german_comment_from_str, rodelbahnbox_to_str, lonlat_to_str
+    opt_tristate_german_comment_from_str, rodelbahnbox_to_str, lonlat_to_str, opt_no_or_str_to_str
 
 
 def split_lon_lat(value: Optional[LonLat]) -> Union[LonLat, Tuple[None, None]]:
@@ -334,6 +334,16 @@ def create_wrmap(geojson: Dict) -> str:
     return xml.etree.ElementTree.tostring(wrmap_xml, encoding='utf-8').decode('utf-8')
 
 
+def markdown_to_mediawiki(markdown: str) -> str:
+    return subprocess.check_output(['pandoc', '--to', 'mediawiki'], input=markdown, encoding='utf-8')
+
+
+def german_bool(value: Union[bool, jinja2.Undefined]) -> Union[str, jinja2.Undefined]:
+    if jinja2.is_undefined(value):
+        return value
+    return wrpylib.wrvalidators.bool_german_to_str(value)
+
+
 class Jinja2Tools:
     def create_wrmap(self, geojson: Dict) -> str:
         return create_wrmap(geojson)
@@ -369,13 +379,12 @@ class Jinja2Tools:
 def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict]) -> str:
     env = jinja2.Environment(
         loader=jinja2.PackageLoader("wrpylib"),
-        autoescape=jinja2.select_autoescape()
+        autoescape=jinja2.select_autoescape(),
     )
+    env.filters["from_markdown"] = markdown_to_mediawiki
+    env.filters["german_bool"] = german_bool
     template = env.get_template("sledrun_wiki.txt")
 
-    def markdown_to_mediawiki(markdown: str) -> str:
-        return subprocess.check_output(['pandoc', '--to', 'mediawiki'], input=markdown, encoding='utf-8')
-
     def position_to_lon_lat(value: Optional[dict]) -> Optional[LonLat]:
         if value is not None:
             lon = value.get('longitude')
@@ -439,7 +448,7 @@ def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict]) -> str:
         ('Länge', sledrun_json.get('length')),
         ('Schwierigkeit', opt_difficulty_german_from_str(sledrun_json.get('difficulty', ''))),
         ('Lawinen', opt_avalanches_german_from_str(sledrun_json.get('avalanches', ''))),
-        ('Betreiber', betreiber()),
+        ('Betreiber', opt_no_or_str_to_str((sledrun_json.get('has_operator'), sledrun_json.get('operator')))),
         ('Öffentliche Anreise', opt_public_transport_german_from_str(sledrun_json.get('public_transport', ''))),
         ('Aufstieg möglich', sledrun_json.get('walkup_possible')),
         ('Aufstieg getrennt', opt_tristate_german_comment_from_str(sledrun_json.get('walkup_separate', ''))),
@@ -456,18 +465,8 @@ def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict]) -> str:
         ('Forumid', sledrun_json.get('forum_id'))
     ])
 
-    def get_markdown_field(key: str) -> str:
-        if key in sledrun_json:
-            return markdown_to_mediawiki(sledrun_json[key])
-        return ''
-
-    description = get_markdown_field('description').strip()
-    night_light = get_markdown_field('night_light').strip()
-    sled_rental_description = get_markdown_field('sled_rental_description').strip()
-
     rodelbahnbox = rodelbahnbox_to_str(sledrun_rbb_json)
 
     return template.render(sledrun_json=sledrun_json,
-                           rodelbahnbox=rodelbahnbox, description=description, night_light=night_light,
-                           sled_rental_description=sled_rental_description, operator=betreiber(),
-                           map_json=map_json, h=Jinja2Tools())
+                           rodelbahnbox=rodelbahnbox,
+                           map_json=map_json, h=Jinja2Tools(), **sledrun_json)