diff --git a/static/icons/favicon.ico b/static/icons/favicon.ico new file mode 100644 index 0000000..2d2d600 Binary files /dev/null and b/static/icons/favicon.ico differ diff --git a/tinywiki/parser/bbcode/formatters.py b/tinywiki/parser/bbcode/formatters.py index 858ec7b..d540a1f 100644 --- a/tinywiki/parser/bbcode/formatters.py +++ b/tinywiki/parser/bbcode/formatters.py @@ -17,29 +17,58 @@ from .text_formatters import ( render_youtube_video, ) -from .simple_formatters import SIMPLE_FORMATTERS +from .simple_formatters import SIMPLE_FORMATTERS # noqa: F401 # a list of tuples containig an tuple args and a dict of kwargs -#a list of tuples containing an tuple of args and a dict of kwargs +# a list of tuples containing an tuple of args and a dict of kwargs FORMATTERS=[ - (('url',render_url),{'strip':True,'swallow_trailing_newline':True,'same_tag_closes':True}), - (('wiki-url',render_wiki_url),{'strip':True,'swallow_trailing_newline':True,'same_tag_closes':True}), - (('wiki',render_wiki_link),{'strip':True,'swallow_tailin_newline':True,'standalone':True}), - (('codeblock',render_codeblock),{'strip':True,'swallow_trailing_newline':False,'same_tag_closes':False,"render_embedded":False}), - (('ol',render_ordered_list),{}), - (('ul',render_unordered_list),{}), - (('li',render_list_item),{}), - (('p',render_paragraph),{'same_tag_closes':False}), - (('image',render_image),{'same_tag_closes':True}), - (('img',render_image),{'same_tag_closes':True}), - (('wiki-image',render_wiki_image),{'standalone':True}), - (('wimg',render_wiki_image),{'standalone':True}), - (('table',render_table),{}), - (('table-row',render_table_row),{}), - (('tr',render_table_row),{}), - (('table-header',render_table_header),{}), - (('th',render_table_header),{}), - (('table-data',render_table_data),{}), - (('td',render_table_data),{}), - (('youtube',render_youtube_video),{'same_tag_closes':True}), + ( + ('url', render_url), + { + 'strip': True, + 'swallow_trailing_newline': True, + 'same_tag_closes': True + } + ), + ( + ('wiki-url', render_wiki_url), + { + 'strip': True, + 'swallow_trailing_newline': True, + 'same_tag_closes': True + } + ), + ( + ('wiki', render_wiki_link), + { + 'strip': True, + 'swallow_tailin_newline': True, + 'standalone': True + } + ), + ( + ('codeblock', render_codeblock), + { + 'strip': True, + 'swallow_trailing_newline': False, + 'same_tag_closes': False, + 'render_embedded': False + } + ), + (('ol', render_ordered_list), {}), + (('ul', render_unordered_list), {}), + (('li', render_list_item), {}), + (('p', render_paragraph), {'same_tag_closes': False}), + (('image', render_image), {'same_tag_closes': True}), + (('img', render_image), {'same_tag_closes': True}), + (('wiki-image', render_wiki_image), {'standalone': True}), + (('wimg', render_wiki_image),{'standalone': True}), + (('table', render_table), {}), + (('table-row', render_table_row), {}), + (('tr', render_table_row), {}), + (('table-header', render_table_header), {}), + (('th', render_table_header), {}), + (('table-data', render_table_data), {}), + (('td', render_table_data), {}), + (('youtube', render_youtube_video), {'same_tag_closes': True}), ] diff --git a/tinywiki/parser/bbcode/text_formatters.py b/tinywiki/parser/bbcode/text_formatters.py index 4bd2f3c..c64abb1 100644 --- a/tinywiki/parser/bbcode/text_formatters.py +++ b/tinywiki/parser/bbcode/text_formatters.py @@ -7,21 +7,23 @@ from ... import settings from ... import models import bbcode + def render_url(tag_name:str,value,options,parent,context): try: url = options['url'] except KeyError: url = value - + if not url.startswith('/') and '://' not in url: url = "http://" + url - + if settings.USE_BOOTSTRAP: if ['noicon in options']: return f"{value}" return f"{value}" 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]}) @@ -30,11 +32,11 @@ def render_wiki_url(tag_name,value,options,parent,context): page = models.Page.objects.get(slug=slug) except models.Page.DoesNotExist: page = None - + else: url = reverse('tinywiki:home') slug=None - + if settings.USE_BOOTSTRAP: href = settings.settings.STATIC_URL+"tinywiki/icons/bootstrap-icons.svg" if page: @@ -69,61 +71,66 @@ def render_wiki_link(tag_name,value,options,parent,context): title = _("Home") url = reverse("tinywiki:home") svg = "house" - + if settings.USE_BOOTSTRAP: href = settings.settings.STATIC_URL + "tinywiki/icons/bootstrap-icons.svg" return f"{title}" return f"{value}" + def render_codeblock(tag_name:str,value,options,parent,context)->str: if tag_name 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): + +def render_image(tag_name: str, value, options, parent, context): if tag_name not in options: return "" - + if 'alt' in options: - alt=options['alt'] + alt = options['alt'] else: - alt="" - + alt = "" + if settings.USE_BOOTSTRAP: - classes=["img-fluid","figure-img","rounded"] - fig_classes=["figure","my-1"] - styles=[] - fig_styles=[] + classes = ["img-fluid", "figure-img", "rounded"] + fig_classes = ["figure", "my-1"] + styles = [] + fig_styles = [] else: - styles=["max-width:100%;"] - classes=[] - fig_classes=[] - fig_styles=[] - + styles = ["max-width:100%;"] + classes = [] + fig_classes = [] + fig_styles = [] + if 'width' in options: _w = options['width'] if _w.endswith('px') or _w.endswith('em') or _w.endswith('rem'): fig_styles.append(f"width:{_w};") - else: + else: if _w.endswith('%'): _w = _w[:-1] if _w.isdigit(): - _w=int(_w) + _w = int(_w) if _w > 100: _w = 100 if settings.USE_BOOTSTRAP: @@ -138,7 +145,7 @@ def render_image(tag_name:str,value,options,parent,context): _h = options['width'] if _h.endswith('px') or _h.endswith('em') or _h.endswith('rem'): fig_styles.append(f"height:{_h};") - else: + else: if _h.endswith('%'): _h= _h[:-1] if _h.isdigit(): @@ -152,15 +159,15 @@ def render_image(tag_name:str,value,options,parent,context): height = ((_h // 25) * 25) if height > 100: height = 100 - + fig_classes.append(f'h-{height}') else: fig_styles.append(f"height:{_h}%;") - + if "position" in options: pos = options['position'] if settings.USE_BOOTSTRAP: - if pos == "left" or pos=="start": + if pos == "left" or pos == "start": fig_classes += ["float-start","me-2"] classes += ["float-start","me-2"] elif pos == "right" or pos == "end": @@ -169,46 +176,47 @@ def render_image(tag_name:str,value,options,parent,context): elif pos == "center": fig_classes += ["mx-auto","d-block"] classes += ["mx-auto","d-block"] - + if styles: - style=f"style=\"{"".join(styles)}\"" + style = f"style=\"{"".join(styles)}\"" else: - style="" - + style = "" + if fig_styles: - fig_style=f'style="{"".join(fig_styles)}"' + fig_style = f'style="{"".join(fig_styles)}"' else: - fig_style="" + fig_style = "" if settings.USE_BOOTSTRAP: return f'