from django_project.settings import STATIC_URL from django.urls import reverse from django.template.loader import render_to_string from django.utils.translation import gettext as _ from ... import settings from ... import models def render_url(tag_name:str,value,options,parent,context): try: url = options['url'] except KeyError: url = value if '://' not in url: url = "http://" + url if settings.USE_BOOTSTRAP: return f"{value}{render_to_string('tinywiki/icons/box-arrow-up-right.svg')}" return f"{value}" def render_wiki_url(tag_name,value,options,parent,context): if tag_name in options: url = reverse("tinywiki:page",kwargs={'slug':options[tag_name]}) slug=options['tag_name'] try: page = models.Page.objects.get(slug=slug) except models.Page.DoesNotExist: page = None else: url = reverse('tinywiki:home') slug=None if settings.USE_BOOTSTRAP: if page: if page.slug.startswith('tw-'): svg=render_to_string('tinywiki/icons/journal.svg') elif page.slug: svg=render_to_string('tinywiki/icons/book.svg') else: svg=render_to_string('tinywiki/icons/file-earmark-x') return f"{value}{svg}" return f"{value}" def render_wiki_link(tag_name,value,options,parent,context): if tag_name in options: slug = options['tag_name'] try: page = models.Page.objects.get(slug=slug) title = page.title if slug.starts_with('tw-'): svg = "tinywiki/icons/journal.svg" else: svg = "tinywiki/icons/book.svg" except: page = None title = _("Page not found") svg_template = "tinywiki/icons/file-earmark-x.svg" url = reverse("tinywiki:page",kwargs={'slug':slug}) else: slug = None title = _("Home") url = reverse("tinywiki:home") svg_template = "tinywiki/icons/house.svg" if settings.USE_BOOTSTRAP: return f"{value}{render_to_string(svg_template)}" return f"{value}" def render_codeblock(tag_name:str,value,options,parent,context)->str: if 'codeblock' in options: return f"
{value}"
return f"{value}"
def render_ordered_list(tag_name:str,value,options,parent,context)->str:
return f"{value}
" return f"{value}
" def render_image(tag_name:str,value,options,parent,context): if tag_name not in options: return "" if 'alt' in options: alt=options['alt'] else: alt="" if settings.USE_BOOTSTRAP: classes=["img-fluid","figure-img","rounded"] fig_classes=["figure","my-1"] styles=[] fig_styles=[] else: styles=["max-width:100%;"] classes=[] fig_classes=[] fig_styles=[] if 'width' in options: _w = options['width'] if _w.endswith('px'): fig_styles.append(f"width:{_w};") else: if _w.endswith('%'): _w = _w[:-1] if _w.isdigit(): _w=int(_w) if _w > 100: _w = 100 if settings.USE_BOOTSTRAP: if 1 < int(_w) <= 25: width = 25 else: width = ((_w // 25) * 25) fig_classes.append(f'w-{width}') else: fig_styles.append(f"width:{_w}%;") if "position" in options: pos = options['position'] if settings.USE_BOOTSTRAP: if pos == "left" or pos=="start": fig_classes += ["float-start","me-2"] elif pos == "right" or pos == "end": fig_classes += ["float-end","ms-2"] elif pos == "center": fig_classes += ["mx-auto","d-block"] if styles: style=f"style=\"{"".join(styles)}\"" else: style="" if fig_styles: fig_style=f'style="{"".join(fig_styles)}"' else: fig_style="" if settings.USE_BOOTSTRAP: return f'