[ADD] extensions: icon_role font awesome

closes odoo/documentation#9053

X-original-commit: 1039a0b195
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
This commit is contained in:
Sam Lieber (sali)
2024-04-01 13:12:09 +00:00
parent 9865c8ee4e
commit 8bec283166
7 changed files with 960 additions and 0 deletions
+17
View File
@@ -1,4 +1,5 @@
from docutils import nodes
from docutils.parsers.rst import roles
from sphinx import addnodes
from sphinx.environment.adapters import toctree
@@ -16,6 +17,8 @@ def setup(app):
app.add_js_file('js/page_toc.js')
app.add_js_file('js/switchers.js')
roles.register_canonical_role('icon', icon_role)
return {
'parallel_read_safe': True,
'parallel_write_safe': True
@@ -107,3 +110,17 @@ def resolve(old_resolve, tree, docname, *args, **kwargs):
if resolved_toc: # `resolve` returns None if the depth of the TOC to resolve is too high
_update_toctree_nodes(resolved_toc)
return resolved_toc
def icon_role(name, rawtext, text, lineno, inliner, options=None, content=None):
""" Implement an `icon` role for Odoo and Font Awesome icons. """
for icon_class in text.split():
if not icon_class.startswith('fa-'):
report_error = inliner.reporter.error(
f"'{icon_class}' is not a valid icon formatting class.", lineno=lineno
)
error_node = inliner.problematic(rawtext, rawtext, report_error)
return [error_node], [report_error]
icon_html = f'<i class="{text}"></i>'
node = nodes.raw('', icon_html, format='html')
return [node], []