From 04d8de2dfbe9556e801388ac64565b715ad1ecf5 Mon Sep 17 00:00:00 2001
From: UlrichB22 <97119703+UlrichB22@users.noreply.github.com>
Date: Fri, 2 Feb 2024 22:02:32 +0100
Subject: [PATCH] Add ShowSmileys macro

---
 src/moin/macros/ShowSmileys.py             | 28 ++++++++++++++++++++++
 src/moin/macros/_tests/test_ShowSmileys.py | 25 +++++++++++++++++++
 2 files changed, 53 insertions(+)
 create mode 100644 src/moin/macros/ShowSmileys.py
 create mode 100644 src/moin/macros/_tests/test_ShowSmileys.py

diff --git a/src/moin/macros/ShowSmileys.py b/src/moin/macros/ShowSmileys.py
new file mode 100644
index 000000000..fe4fed40e
--- /dev/null
+++ b/src/moin/macros/ShowSmileys.py
@@ -0,0 +1,28 @@
+# Copyright: 2024 MoinMoin:UlrichB
+# License: GNU GPL v2 (or any later version), see LICENSE.txt for details.
+
+"""
+Show all available smileys that may be included in wiki item content
+"""
+
+from flask import url_for
+
+from moin.utils.tree import html
+from moin.macros._base import MacroBlockBase
+from moin.i18n import _
+from moin.converters._table import TableMixin
+from moin.converters.smiley import Converter
+
+
+class Macro(MacroBlockBase):
+    def macro(self, content, arguments, page_url, alternative):
+        smileys = Converter.smileys
+        headings = (_('Markup'), _('Result'), _('Name'))
+        rows = []
+        for key in smileys.keys():
+            icon_name = smileys[key]
+            src = url_for('static', filename='img/icons/' + icon_name + ".png")
+            rows.append((key, html.img(attrib={html.src: src, html.alt: icon_name}), icon_name))
+        table = TableMixin()
+        ret = table.build_dom_table(rows, head=headings)
+        return ret
diff --git a/src/moin/macros/_tests/test_ShowSmileys.py b/src/moin/macros/_tests/test_ShowSmileys.py
new file mode 100644
index 000000000..e14b0c764
--- /dev/null
+++ b/src/moin/macros/_tests/test_ShowSmileys.py
@@ -0,0 +1,25 @@
+# Copyright: 2024 MoinMoin:UlrichB
+# License: GNU GPL v2 (or any later version), see LICENSE.txt for details.
+
+"""
+Test for macros.ShowSmileys
+"""
+
+from moin.macros.ShowSmileys import Macro
+
+
+def test_Macro():
+    """ test for Macro.macro """
+    expected_text = ['X-(', 'angry', ':D', 'biggrin', '<:(', 'frown', '{o}', 'star_off', ]
+    expected_tag = '{http://moinmo.in/namespaces/page}table-row'
+    macro_obj = Macro()
+    macro_out = macro_obj.macro('content', None, 'page_url', 'alternative')
+    result_text = []
+    result_tags = []
+    for node in macro_out.iter_elements_tree():
+        if getattr(node, 'text'):
+            result_text.append(getattr(node, 'text'))
+        if getattr(node, 'tag'):
+            result_tags.append(str(getattr(node, 'tag')))
+    assert set(expected_text).issubset(result_text)
+    assert expected_tag in result_tags