diff options
Diffstat (limited to 'ganarchy/templating')
-rw-r--r-- | ganarchy/templating/__init__.py | 21 | ||||
-rw-r--r-- | ganarchy/templating/environment.py | 29 | ||||
-rw-r--r-- | ganarchy/templating/templates.py | 124 | ||||
-rw-r--r-- | ganarchy/templating/toml.py | 33 |
4 files changed, 207 insertions, 0 deletions
diff --git a/ganarchy/templating/__init__.py b/ganarchy/templating/__init__.py new file mode 100644 index 0000000..d6f6d0c --- /dev/null +++ b/ganarchy/templating/__init__.py @@ -0,0 +1,21 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +"""Templates. + +""" + +# TODO write me diff --git a/ganarchy/templating/environment.py b/ganarchy/templating/environment.py new file mode 100644 index 0000000..a527053 --- /dev/null +++ b/ganarchy/templating/environment.py @@ -0,0 +1,29 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +import jinja2 + +import ganarchy.templating.templates +import ganarchy.templating.toml + +def get_env(): + env = jinja2.Environment( + loader=ganarchy.templating.templates.get_template_loader(), + autoescape=False + ) + env.filters['tomlescape'] = ganarchy.templating.toml.tomlescape + env.filters['tomle'] = env.filters['tomlescape'] + return env diff --git a/ganarchy/templating/templates.py b/ganarchy/templating/templates.py new file mode 100644 index 0000000..0f691e0 --- /dev/null +++ b/ganarchy/templating/templates.py @@ -0,0 +1,124 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +import jinja2 + +import ganarchy.dirs + +def get_template_loader(): + return jinja2.ChoiceLoader([ + jinja2.FileSystemLoader([ganarchy.dirs.CONFIG_HOME + "/templates"] + [config_dir + "/templates" for config_dir in ganarchy.dirs.CONFIG_DIRS]), + jinja2.DictLoader({ + ## index.html + 'index.html': """<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <!-- + GAnarchy - project homepage generator + Copyright (C) 2019 Soni L. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + --> + <title>{{ ganarchy.title|e }}</title> + <meta name="description" content="{{ ganarchy.title|e }}" /> + <!--if your browser doesn't like the following, use a different browser.--> + <script type="application/javascript" src="/index.js"></script> + </head> + <body> + <h1>{{ ganarchy.title|e }}</h1> + <p>This is {{ ganarchy.title|e }}. Currently tracking the following projects:</p> + <ul> + {% for project in ganarchy.projects -%} + <li><a href="/project/{{ project.commit|e }}">{{ project.title|e }}</a>: {{ project.description|e }}</li> + {% endfor -%} + </ul> + <p>Powered by <a href="https://ganarchy.autistic.space/">GAnarchy</a>. AGPLv3-licensed. <a href="https://cybre.tech/SoniEx2/ganarchy">Source Code</a>.</p> + <p> + <a href="{{ ganarchy.base_url|e }}" onclick="event.preventDefault(); navigator.registerProtocolHandler('web+ganarchy', this.href + '?url=%s', 'GAnarchy');">Register web+ganarchy: URI handler</a>. + </p> + </body> +</html> +""", + ## index.toml + 'index.toml': """# Generated by GAnarchy + +{%- for project, repos in config.projects.items() %} +[projects.{{project}}] +{%- for repo_url, branches in repos.items() %}{% for branch, options in branches.items() %}{% if options.active %} +"{{repo_url|tomle}}".{% if branch %}"{{branch|tomle}}"{% else %}HEAD{% endif %} = { active=true } +{%- endif %}{% endfor %} +{%- endfor %} +{% endfor -%} +""", + ## project.html FIXME + 'project.html': """<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <!-- + GAnarchy - project homepage generator + Copyright (C) 2019 Soni L. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + --> + <title>{{ project_title|e }}</title> + {% if project_desc %}<meta name="description" content="{{ project_desc|e }}" />{% endif %} + <style type="text/css">.branchname { color: #808080; font-style: italic; }</style> + </head> + <body> + <h1>{{ project_title|e }}</h1> + <p>Tracking <span id="project_commit"><a href="web+ganarchy:{{ project_commit }}">{{ project_commit }}</a></span></p> + <div id="project_body"><p>{{ project_body|e|replace("\n\n", "</p><p>") }}</p></div> + <ul> + {% for url, msg, img, branch in repos -%} + <li><a href="{{ url|e }}">{{ url|e }}</a>{% if branch %} <span class="branchname">[{{ branch|e }}]</span>{% endif %}: {{ msg|e }}</li> + {% endfor -%} + </ul> + <p>Powered by <a href="https://ganarchy.autistic.space/">GAnarchy</a>. AGPLv3-licensed. <a href="https://cybre.tech/SoniEx2/ganarchy">Source Code</a>.</p> + <p> + <a href="/">Main page</a>. + <a href="{{ base_url|e }}" onclick="event.preventDefault(); navigator.registerProtocolHandler('web+ganarchy', this.href + '?url=%s', 'GAnarchy');">Register web+ganarchy: URI handler</a>. + </p> + </body> +</html> +""", + ## history.svg FIXME + 'history.svg': """""", + }) + ]) diff --git a/ganarchy/templating/toml.py b/ganarchy/templating/toml.py new file mode 100644 index 0000000..431125d --- /dev/null +++ b/ganarchy/templating/toml.py @@ -0,0 +1,33 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +_tomletrans = str.maketrans({ + 0: '\\u0000', 1: '\\u0001', 2: '\\u0002', 3: '\\u0003', 4: '\\u0004', + 5: '\\u0005', 6: '\\u0006', 7: '\\u0007', 8: '\\b', 9: '\\t', 10: '\\n', + 11: '\\u000B', 12: '\\f', 13: '\\r', 14: '\\u000E', 15: '\\u000F', + 16: '\\u0010', 17: '\\u0011', 18: '\\u0012', 19: '\\u0013', 20: '\\u0014', + 21: '\\u0015', 22: '\\u0016', 23: '\\u0017', 24: '\\u0018', 25: '\\u0019', + 26: '\\u001A', 27: '\\u001B', 28: '\\u001C', 29: '\\u001D', 30: '\\u001E', + 31: '\\u001F', '"': '\\"', '\\': '\\\\' + }) + +def tomlescape(value): + """Escapes a string for use in a TOML string. + + Returns: + str: The escaped string. + """ + return value.translate(_tomletrans) |