From 08f4d63f450ccd96f5077bc60774d8f1fecec92c Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Wed, 16 Nov 2022 18:52:53 +0100 Subject: initial commit --- src/koszko_org_website/__init__.py | 7 + src/koszko_org_website/__main__.py | 9 + src/koszko_org_website/app.py | 159 ++ .../locales/en_US/LC_MESSAGES/messages.po | 81 + .../locales/pl_PL/LC_MESSAGES/messages.po | 77 + src/koszko_org_website/py.typed | 5 + src/koszko_org_website/static/campaign-favicon.ico | Bin 0 -> 4286 bytes src/koszko_org_website/static/campaign-favicon.svg | 101 + src/koszko_org_website/static/cv-formal-en.pdf | Bin 0 -> 104983 bytes src/koszko_org_website/static/cv-formal-pl.pdf | Bin 0 -> 105269 bytes src/koszko_org_website/static/easter-eggs.jpg | Bin 0 -> 775875 bytes .../static/easter-eggs.jpg.license | 3 + src/koszko_org_website/static/free-program.svg | 1993 ++++++++++++++++++++ src/koszko_org_website/static/key.gpg | 60 + src/koszko_org_website/static/key.gpg.sig | 2 + src/koszko_org_website/static/key.pub | 2 + src/koszko_org_website/static/key.pub.asc | 7 + src/koszko_org_website/static/no-facebook.svg | 209 ++ .../static/no-facebook.svg.license | 4 + src/koszko_org_website/static/normalize.css | 375 ++++ src/koszko_org_website/static/pure-base.css | 38 + src/koszko_org_website/static/pure-layouts.css | 55 + src/koszko_org_website/static/pure-main.css | 629 ++++++ src/koszko_org_website/static/pure-menus-core.css | 42 + .../static/pure-menus-horizontal.css | 25 + src/koszko_org_website/static/pure-menus-skin.css | 66 + src/koszko_org_website/static/pure-tables.css | 76 + src/koszko_org_website/templates/__base.html.jinja | 253 +++ .../templates/__campaign_base.html.jinja | 258 +++ .../templates/__index.html.jinja | 27 + .../templates/__koszko_base.html.jinja | 210 +++ src/koszko_org_website/templates/cv.html.jinja | 159 ++ .../templates/en/__footer.html.jinja | 27 + .../templates/en/__footer_for_qr.html.jinja | 19 + .../templates/en/__index.html.jinja | 160 ++ .../templates/en/author.html.jinja | 33 + src/koszko_org_website/templates/en/cv.html.jinja | 160 ++ .../templates/en/koszko.html.jinja | 157 ++ .../templates/en/prima_aprilis.html.jinja | 20 + src/koszko_org_website/templates/en/qr.html.jinja | 28 + src/koszko_org_website/templates/koszko.html.jinja | 66 + .../templates/pl/__footer.html.jinja | 30 + .../templates/pl/__footer_for_qr.html.jinja | 17 + .../templates/pl/__index.html.jinja | 175 ++ .../templates/pl/author.html.jinja | 36 + src/koszko_org_website/templates/pl/cv.html.jinja | 159 ++ .../templates/pl/koszko.html.jinja | 162 ++ .../templates/pl/prima_aprilis.html.jinja | 20 + src/koszko_org_website/templates/pl/qr.html.jinja | 28 + 49 files changed, 6229 insertions(+) create mode 100644 src/koszko_org_website/__init__.py create mode 100644 src/koszko_org_website/__main__.py create mode 100644 src/koszko_org_website/app.py create mode 100644 src/koszko_org_website/locales/en_US/LC_MESSAGES/messages.po create mode 100644 src/koszko_org_website/locales/pl_PL/LC_MESSAGES/messages.po create mode 100644 src/koszko_org_website/py.typed create mode 100644 src/koszko_org_website/static/campaign-favicon.ico create mode 100644 src/koszko_org_website/static/campaign-favicon.svg create mode 100644 src/koszko_org_website/static/cv-formal-en.pdf create mode 100644 src/koszko_org_website/static/cv-formal-pl.pdf create mode 100644 src/koszko_org_website/static/easter-eggs.jpg create mode 100644 src/koszko_org_website/static/easter-eggs.jpg.license create mode 100644 src/koszko_org_website/static/free-program.svg create mode 100644 src/koszko_org_website/static/key.gpg create mode 100644 src/koszko_org_website/static/key.gpg.sig create mode 100644 src/koszko_org_website/static/key.pub create mode 100644 src/koszko_org_website/static/key.pub.asc create mode 100644 src/koszko_org_website/static/no-facebook.svg create mode 100644 src/koszko_org_website/static/no-facebook.svg.license create mode 100644 src/koszko_org_website/static/normalize.css create mode 100644 src/koszko_org_website/static/pure-base.css create mode 100644 src/koszko_org_website/static/pure-layouts.css create mode 100644 src/koszko_org_website/static/pure-main.css create mode 100644 src/koszko_org_website/static/pure-menus-core.css create mode 100644 src/koszko_org_website/static/pure-menus-horizontal.css create mode 100644 src/koszko_org_website/static/pure-menus-skin.css create mode 100644 src/koszko_org_website/static/pure-tables.css create mode 100644 src/koszko_org_website/templates/__base.html.jinja create mode 100644 src/koszko_org_website/templates/__campaign_base.html.jinja create mode 100644 src/koszko_org_website/templates/__index.html.jinja create mode 100644 src/koszko_org_website/templates/__koszko_base.html.jinja create mode 100644 src/koszko_org_website/templates/cv.html.jinja create mode 100644 src/koszko_org_website/templates/en/__footer.html.jinja create mode 100644 src/koszko_org_website/templates/en/__footer_for_qr.html.jinja create mode 100644 src/koszko_org_website/templates/en/__index.html.jinja create mode 100644 src/koszko_org_website/templates/en/author.html.jinja create mode 100644 src/koszko_org_website/templates/en/cv.html.jinja create mode 100644 src/koszko_org_website/templates/en/koszko.html.jinja create mode 100644 src/koszko_org_website/templates/en/prima_aprilis.html.jinja create mode 100644 src/koszko_org_website/templates/en/qr.html.jinja create mode 100644 src/koszko_org_website/templates/koszko.html.jinja create mode 100644 src/koszko_org_website/templates/pl/__footer.html.jinja create mode 100644 src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja create mode 100644 src/koszko_org_website/templates/pl/__index.html.jinja create mode 100644 src/koszko_org_website/templates/pl/author.html.jinja create mode 100644 src/koszko_org_website/templates/pl/cv.html.jinja create mode 100644 src/koszko_org_website/templates/pl/koszko.html.jinja create mode 100644 src/koszko_org_website/templates/pl/prima_aprilis.html.jinja create mode 100644 src/koszko_org_website/templates/pl/qr.html.jinja (limited to 'src/koszko_org_website') diff --git a/src/koszko_org_website/__init__.py b/src/koszko_org_website/__init__.py new file mode 100644 index 0000000..3ac4327 --- /dev/null +++ b/src/koszko_org_website/__init__.py @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +from .app import website_app diff --git a/src/koszko_org_website/__main__.py b/src/koszko_org_website/__main__.py new file mode 100644 index 0000000..ad71c06 --- /dev/null +++ b/src/koszko_org_website/__main__.py @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +from .app import website_app + +website_app.run() diff --git a/src/koszko_org_website/app.py b/src/koszko_org_website/app.py new file mode 100644 index 0000000..e3e6339 --- /dev/null +++ b/src/koszko_org_website/app.py @@ -0,0 +1,159 @@ +# SPDX-License-Identifier: CC0-1.0 + +# koszko.org website logic. + +# Copyright (C) 2021, 2022 Wojtek Kosior + +import gettext +import dataclasses as dc +import typing as t + +from pathlib import Path, PurePosixPath + +import flask +import werkzeug +import jinja2 +import jinja2.exceptions + + +here = Path(__file__).resolve().parent + + +pages = { + 'index.html' +} + + +langs_short_2_long = { + 'en': 'en_US', + 'pl': 'pl_PL' +} + +langs_long_2_short = dict((v, k) for k, v in langs_short_2_long.items()) + +default_locale = 'pl_PL' + + +def raise_exception(msg) -> t.NoReturn: + raise Exception(msg) + + +@dc.dataclass(init=False) +class Website(flask.Flask): + def __init__(self) -> None: + super().__init__(__name__) + + self.jinja_options = { + **self.jinja_options, + 'loader': jinja2.PackageLoader(__package__), + 'autoescape': jinja2.select_autoescape(['.jinja']), + 'lstrip_blocks': True, + 'extensions': [ + *self.jinja_options.get('extensions', []), + 'jinja2.ext.i18n', + 'jinja2.ext.do' + ] + } + + self.jinja_env.globals['raise'] = raise_exception + + def koszko_install_translations(self, locale: str) -> None: + translations = gettext.translation( + 'messages', + localedir = here / 'locales', + languages = [locale] + ) + self.jinja_env.install_gettext_translations(translations) + + +website_app = Website() + + +def show_page(lang_short: str, page_path: str) -> str: + for segment in PurePosixPath(page_path).parts: + if segment.startswith('__'): + flask.abort(404) + + effective_page_path = '__index.html' if page_path == '' else page_path + + app = t.cast(Website, flask.current_app) + app.koszko_install_translations(langs_short_2_long[lang_short]) + + for prefix in [f'{lang_short}', '']: + pure_path = PurePosixPath(prefix) / f'{effective_page_path}.jinja' + footer_path = pure_path.parent / f'__footer_for_{pure_path.name}' + try: + html = flask.render_template( + str(pure_path), + lang_short = lang_short, + page_path = page_path, + dedicated_footer_path = str(footer_path) + ) + break + except jinja2.exceptions.TemplateNotFound: + if prefix == '': + raise + + return html + +for lang in langs_short_2_long.keys(): + def __show_page_in_lang(page_path: str, lang_short: str = lang) -> str: + return show_page(lang_short, page_path) + + website_app.add_url_rule( + f'/{lang}/', + f'show_page_in_{lang}', + __show_page_in_lang, + methods=['GET'] + ) + + def __show_main_page_in_lang(lang_short: str = lang) -> str: + return show_page(lang_short, '') + + website_app.add_url_rule( + f'/{lang}/', + f'show_main_page_in_{lang}', + __show_main_page_in_lang, + methods=['GET'] + ) + +@website_app.route('/', methods=['GET']) +def redirect_to_resource(page_path) -> werkzeug.Response: + if page_path != '': + path_start = PurePosixPath(page_path).parts[0] + + if path_start == 'sideload': + return flask.Response( + "Incomplete server configuration - requests for '/sideload/' not routed as they should be.", + 500 + ) + + # Route to other stuff that was on this domain before and has been moved + # under '/sideload/'. + for name in ['fraktal', 'mm']: + if path_start == name: + return flask.redirect(f'/sideload/{name}') + + # Make all resources from '/static' aliased under '/'. + if not page_path.endswith('.html'): + return flask.redirect(f'/static/{page_path}') + + # Redirect to the most suitable language version of a page. + chosen_locale = flask.request.accept_languages.best_match( + langs_short_2_long.values(), + default = default_locale + ) + if chosen_locale is None: + chosen_locale = default_locale + + lang_short = langs_long_2_short[chosen_locale] + + url = flask.url_for( + f'.show_page_in_{lang_short}', + page_path = page_path + ) + return flask.redirect(url) + +@website_app.route('/', methods=['GET']) +def redirect_to_lang_main_page() -> werkzeug.Response: + return redirect_to_resource('') diff --git a/src/koszko_org_website/locales/en_US/LC_MESSAGES/messages.po b/src/koszko_org_website/locales/en_US/LC_MESSAGES/messages.po new file mode 100644 index 0000000..4e4db01 --- /dev/null +++ b/src/koszko_org_website/locales/en_US/LC_MESSAGES/messages.po @@ -0,0 +1,81 @@ +# SPDX-License-Identifier: CC0-1.0 +# English translations for koszko.org website. +# +# Copyright (C) 2021,2022 Wojtek Kosior +# Available under the terms of Creative Commons Zero v1.0 Universal. +msgid "" +msgstr "" +"Project-Id-Version: koszko_org_website 0.1.dev0+d20221110\n" +"Report-Msgid-Bugs-To: koszko@koszko.org\n" +"POT-Creation-Date: 2022-11-16 11:03+0100\n" +"PO-Revision-Date: 2022-11-10 16:29+0100\n" +"Last-Translator: Wojtek Kosior \n" +"Language: en_US\n" +"Language-Team: en_US \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.0\n" + +#: src/koszko_org_website/templates/__campaign_base.html.jinja:225 +msgid "campaign_base.menu.a:libre_program" +msgstr "Libre Program" + +msgid "index.img:libre_program_alt" +msgstr "drawing of a program breaking chains it's been cuffed with" + +msgid "qr.img:easter_eggs_alt" +msgstr "photo of Easter eggs lying on grass" + +#: src/koszko_org_website/templates/__campaign_base.html.jinja:239 +msgid "campaign_base.menu.a:about_author" +msgstr "About author" + +#: src/koszko_org_website/templates/__index.html.jinja:10 +msgid "index.title:libre_programs" +msgstr "Libre programs" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:130 +msgid "koszko_base.menu.span:languages" +msgstr "Langs" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:140 +msgid "koszko_base.menu.span:places" +msgstr "Places" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:145 +msgid "koszko_base.menu.a:home" +msgstr "Home" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:146 +msgid "koszko_base.menu.a:curriculum_vitae" +msgstr "Curriculum vitae" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:147 +msgid "koszko_base.menu.a:campaign" +msgstr "Campaign" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:167 +msgid "koszko_base.h1:wojtek_kosior" +msgstr "Wojtek Kosior" + +#: src/koszko_org_website/templates/koszko.html.jinja:36 +msgid "koszko.th:to_freesw_hackers" +msgstr "To free software hackers" + +#: src/koszko_org_website/templates/koszko.html.jinja:37 +msgid "koszko.th:to_christians" +msgstr "To catholics and other christians" + +#: src/koszko_org_website/templates/koszko.html.jinja:40 +msgid "koszko.td:nonbelievers" +msgstr "*nonbelievers" + +#: src/koszko_org_website/templates/koszko.html.jinja:41 +msgid "koszko.td:choosing_proprietary_programs" +msgstr "*choosing proprietary programs" + +#: src/koszko_org_website/templates/koszko.html.jinja:56 +msgid "koszko.td:please" +msgstr "Please 馃檪" diff --git a/src/koszko_org_website/locales/pl_PL/LC_MESSAGES/messages.po b/src/koszko_org_website/locales/pl_PL/LC_MESSAGES/messages.po new file mode 100644 index 0000000..1054e45 --- /dev/null +++ b/src/koszko_org_website/locales/pl_PL/LC_MESSAGES/messages.po @@ -0,0 +1,77 @@ +# SPDX-License-Identifier: CC0-1.0 +# Polish translations for koszko.org website. +# +# Copyright (C) 2021,2022 Wojtek Kosior +# Available under the terms of Creative Commons Zero v1.0 Universal. +msgid "" +msgstr "" +"Project-Id-Version: koszko_org_website 0.1.dev0+d20221110\n" +"Report-Msgid-Bugs-To: koszko@koszko.org\n" +"POT-Creation-Date: 2022-11-16 11:03+0100\n" +"PO-Revision-Date: 2022-11-10 16:27+0100\n" +"Last-Translator: Wojtek Kosior \n" +"Language: pl_PL\n" +"Language-Team: pl_PL \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.0\n" + +#: src/koszko_org_website/templates/__campaign_base.html.jinja:225 +msgid "campaign_base.menu.a:libre_program" +msgstr "Wolny Program" + +msgid "index.img:libre_program_alt" +msgstr "rysunek programu zrywaj膮cego z siebie kajdany" + +msgid "qr.img:easter_eggs_alt" +msgstr "zdj臋cie jajeczek wielkanocnych le偶膮cych w trawie" + +#: src/koszko_org_website/templates/__campaign_base.html.jinja:239 +msgid "campaign_base.menu.a:about_author" +msgstr "O autorze" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:130 +msgid "koszko_base.menu.span:languages" +msgstr "J臋zyki" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:140 +msgid "koszko_base.menu.span:places" +msgstr "Miejsca" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:145 +msgid "koszko_base.menu.a:home" +msgstr "Start" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:146 +msgid "koszko_base.menu.a:curriculum_vitae" +msgstr "Curriculum vitae" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:147 +msgid "koszko_base.menu.a:campaign" +msgstr "Kampania" + +#: src/koszko_org_website/templates/__koszko_base.html.jinja:167 +msgid "koszko_base.h1:wojtek_kosior" +msgstr "Wojtek Kosior" + +#: src/koszko_org_website/templates/koszko.html.jinja:36 +msgid "koszko.th:to_freesw_hackers" +msgstr "Do entuzjast贸w wolnego oprogramowania" + +#: src/koszko_org_website/templates/koszko.html.jinja:37 +msgid "koszko.th:to_christians" +msgstr "Do katolik贸w oraz innych chrze艣cijan" + +#: src/koszko_org_website/templates/koszko.html.jinja:40 +msgid "koszko.td:nonbelievers" +msgstr "*niewierz膮cych" + +#: src/koszko_org_website/templates/koszko.html.jinja:41 +msgid "koszko.td:choosing_proprietary_programs" +msgstr "*wybieraj膮cych w艂asno艣ciowe programy" + +#: src/koszko_org_website/templates/koszko.html.jinja:56 +msgid "koszko.td:please" +msgstr "Prosz臋 馃檪" diff --git a/src/koszko_org_website/py.typed b/src/koszko_org_website/py.typed new file mode 100644 index 0000000..f41d511 --- /dev/null +++ b/src/koszko_org_website/py.typed @@ -0,0 +1,5 @@ +SPDX-License-Identifier: CC0-1.0 + +Copyright (C) 2022 Wojtek Kosior + +Available under the terms of Creative Commons Zero v1.0 Universal. diff --git a/src/koszko_org_website/static/campaign-favicon.ico b/src/koszko_org_website/static/campaign-favicon.ico new file mode 100644 index 0000000..79e6014 Binary files /dev/null and b/src/koszko_org_website/static/campaign-favicon.ico differ diff --git a/src/koszko_org_website/static/campaign-favicon.svg b/src/koszko_org_website/static/campaign-favicon.svg new file mode 100644 index 0000000..e538c87 --- /dev/null +++ b/src/koszko_org_website/static/campaign-favicon.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/src/koszko_org_website/static/cv-formal-en.pdf b/src/koszko_org_website/static/cv-formal-en.pdf new file mode 100644 index 0000000..a6e52b3 Binary files /dev/null and b/src/koszko_org_website/static/cv-formal-en.pdf differ diff --git a/src/koszko_org_website/static/cv-formal-pl.pdf b/src/koszko_org_website/static/cv-formal-pl.pdf new file mode 100644 index 0000000..2aabbf7 Binary files /dev/null and b/src/koszko_org_website/static/cv-formal-pl.pdf differ diff --git a/src/koszko_org_website/static/easter-eggs.jpg b/src/koszko_org_website/static/easter-eggs.jpg new file mode 100644 index 0000000..3fb9e16 Binary files /dev/null and b/src/koszko_org_website/static/easter-eggs.jpg differ diff --git a/src/koszko_org_website/static/easter-eggs.jpg.license b/src/koszko_org_website/static/easter-eggs.jpg.license new file mode 100644 index 0000000..e3959f7 --- /dev/null +++ b/src/koszko_org_website/static/easter-eggs.jpg.license @@ -0,0 +1,3 @@ +SPDX-License-Identifier: CC-BY-3.0 + +Copyright 2011 Frederik Fransoo diff --git a/src/koszko_org_website/static/free-program.svg b/src/koszko_org_website/static/free-program.svg new file mode 100644 index 0000000..90cead9 --- /dev/null +++ b/src/koszko_org_website/static/free-program.svg @@ -0,0 +1,1993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/koszko_org_website/static/key.gpg b/src/koszko_org_website/static/key.gpg new file mode 100644 index 0000000..5abc04a --- /dev/null +++ b/src/koszko_org_website/static/key.gpg @@ -0,0 +1,60 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEX+SUABYJKwYBBAHaRw8BAQdAgefq2VrIIqFyIDLzuDF3b7ayHqH7QVniF51S +bu6t7Fu0HVcuIEtvc2lvciA8a29zemtvQGtvc3prby5vcmc+iJkEExYIAEECGwMF +CQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTpcnBg48VjfIpPS0JLxSIc +Wnn9GgUCYKP1JwIZAQAKCRBLxSIcWnn9GlW/AP91Cfy7vIe7mptVkgiW1T4aB1dY +GuLiR2iu0gAJZW2/mAD+K56vgQQZGW59otVUi6ezeNRrEbpz7bpXyV3UdE/8rwuJ +AjMEEAEKAB0WIQRngZs0Oyq3De2TIIcsZGSvKo5MAgUCYr412QAKCRAsZGSvKo5M +AtUzD/4mYWwxysJHrgxAiP3oXWgiUO+OxGHNrzNG990YvkYRzF30ndQM3KbgUAh+ +GbVNdZZckOGzDMhskYcOXt44CSoNd9d99rDcSzTWPr/OTcclHnsG2Kju95Ed523m +xeErubCvNz6I9vL9qLy4FNDCPMg4dw8wqi2lcCnHQKXjnD6xkvoqo2iRCeXNVnB5 +U/a8ogLzoo/qKfJ/iA5RZeu94gVos9acEoflL0mdHvAEtj7mcAfyFTZQLM5PgVG4 +7joT446JEnXuii+QCAlXnXKjyMuciayxZN5kFI5/HBMUkco79Mq1nlITuP8eCvCO +sLguq7OZb/x6+zm89jJWwribppcQXFHvq6wbGTWp+/eZC8vYCCeSSzrIV3huVAS8 +8aV7PtrYaWP3NN5sNpsmstN7TMBKn3rrpd6g1EaBgchN1cfEJukLUXZO8kHXeVUj +0cFecFTp2k90gDfyiUADuDATkMrcwnmtJ4LogPx7DNJga5lkuKA+1+2Gu/Xy6j8s +mW2nNoF+u7ZIKszsk2Y/63Lsb5nvYcjoA/1XHSwKy+XUHIiST9U6vZtaVXNhVqbR +0plBW4/0Crl2wLx5MQvXgN7AkgdPuDO1ns2Douf/l60Z+glgLOzBtVW05O2WpETP +7MtOw56kzTzmm3LeMgIx2liCGE53RLiDJcGQKDQKFhnvVV0BtbQuV29qY2llY2gg +S29zaW9yIDx3a0Brb3N6a29udXRlay10bXAucGwuZXUub3JnPoiWBBMWCAA+FiEE +6XJwYOPFY3yKT0tCS8UiHFp5/RoFAmCEJY4CGwMFCQlmAYAFCwkIBwIGFQoJCAsC +BBYCAwECHgECF4AACgkQS8UiHFp5/RrzkwEA29Rxl+TC3j5q4fS0xSE06dq3NCnl +sYUx3/iFXJ4mR5IBANIoQo8b73aYMuZ4ptMEp2OuqzdTfiKUxF+qaTkm+FQIiQIz +BBABCgAdFiEEZ4GbNDsqtw3tkyCHLGRkryqOTAIFAmK+NeYACgkQLGRkryqOTAJK +nQ//cRLbDGijlnCVzTQ5IoJifPJyeh+ToCoCgvsZwNFvD3riaTUtAdc2P0Q2du/9 +kxUlWRESS62lFsDx54IKKtOdPt7mHlGWw4HvWgjX3bSAuV6O4KDmwaGwEGOiWYDB +uSRIEK37L7NmFh2PwI0czusIKXW4JsSq6rxR1EWJuxUMczdYXhV+hy0ZuP8FVvTF +1QzFUvGoGBsJB97/lwstlGYN7YqFzOn0XANiZQ7xhq/eFVd4bdXZ81dzsbiFQacG +A3Od3IUNvjXzEFJJ/W2P23on6edk98JcoDfU1yazkDrzQUpa4jH4ZjEduhaJjZ+k +MlE9lKgHVq/MIEFWQptwVtInFH39wPW8vO6C6izOiRkd4FiOZTarDYIU7z61yb0x +wC/KoR/jhRSk0rBg/qW2yAwwpR8sfgqxiQ1w913X5uAnzi5961XhbEMKr69lmvRb +vsk3OVyXi8+KDrgivkenpdVqsjFG01hfta0EQCFJkiMMUDmcb1lKoeOxLTXQfWOa +55tfIYmrXMhhChbPJMAocbERoZmYdUaa1htgxiCLde+kYlfP7m8j4ZblTqN289am +wMh4VCRRmE5eHzNgWQs8z0awuA9FLCeP7c/sNpBroUG8AGZVhLNZCDgS79IGjaq1 +WTy0hoAPnhiHuHrU8yJwrMibA47S0H41KXMkWhfgplSpCS+0K1dvamNpZWNoIEtv +c2lvciA8a29zaW9yQHN0dWRlbnQuYWdoLmVkdS5wbD6InwQwFggARxYhBOlycGDj +xWN8ik9LQkvFIhxaef0aBQJgmA0gKR0gSSBubyBsb25nZXIgaGF2ZSBhY2Nlc3Mg +dG8gdGhhdCBtYWlsYm94AAoJEEvFIhxaef0aW+UBAKpkQf78Eh66YUMP92g2y781 +08m4nr/hdhybvYZ1cur3AP9RgUvun4PjhlhaSr5leCM6rfrvTDOURrhL9B5TPyv0 +CYiWBBMWCAA+FiEE6XJwYOPFY3yKT0tCS8UiHFp5/RoFAl/klAACGwMFCQlmAYAF +CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQS8UiHFp5/Rp3YwD/Z2MgNnpJS5H1 +CaOPDTEuFqXwJIvRWneftUQPGuqbX6wA/3oDfxlx5N4qezw6UU7r4ayiEEHKRH7A +pLwWiRPSB1IMiQIzBBABCgAdFiEEZ4GbNDsqtw3tkyCHLGRkryqOTAIFAmFTKiwA +CgkQLGRkryqOTAKeDg//UY5zZl2i7HopWHnESIpRhZDNuAGVuZSlO06h2dXmQDpo +maS7/D3lzjOUhYrDxX656xTBa7ImVBwUkB/ywsYwkeyOQrx9MurR7y4MgZ3osGGA +Vun7WKGkySvqM2r9UVpWdaiJRz/v/81z6VhvQP4WOly9qv9w1a7xR4bgB4SH3ST6 +8aRme1AtBpK3LYrtVsYn0xBarqUMx/zj/Q/svwjQpP3M471unEO9Ow3VfGyxbQYB +L7mWMybthriNp3MV5IVbyLRe2PRVVqhuUo1BnDOs2wgrmKHCa+hShzfBlAUihu51 +meCYN8Dd7wWF3KOFeWkcUyOxSmldxR37WcXep1tMTAT0+7GCaPi8WlPhlwquxeKf +lzMmtMbSYeeq4/71GhcAQHg6nUq5ELre0aQm5QPOg0RmiN5RqfreSGz1R7gJ6B/P +agnTc/BCDRbo6tap9itBVj50T7wn+ZAYWT/ixtmccKRjoSqmirpvvyrr1+EE2xnO +gadd2cKtlLXbgOLZwc386/o++w6f37v+DIMA0lNNOBhK3XXPNkMfa+xatKEGoUJw +3Z4FO/Veg3XSjQIEBg2/zt6jn4EV293QAb1AJldh6W441bCd1VmxwwqdMTTLF7Ag +odJZGP2jkzS03eDL3jlvcGOULMGyy6WDd/x0eZEHJVTLQIznH9+wy+tKF59/ER64 +OARf5JQAEgorBgEEAZdVAQUBAQdAD4Nkc5GL1JTtLqRkBpC9cP1i9SL3WLrkJ1LN +u7GxCEgDAQgHiH4EGBYIACYWIQTpcnBg48VjfIpPS0JLxSIcWnn9GgUCX+SUAAIb +DAUJCWYBgAAKCRBLxSIcWnn9GroDAP9qWOfDT6o3VIa/U08xV3IYxQITsyhg1HOt +k5dv6nDqwgEA6qupb9hBEY0qYZSF2DV1IIaCzEmITA6wMG8lJ8Au2Q0= +=EyyS +-----END PGP PUBLIC KEY BLOCK----- diff --git a/src/koszko_org_website/static/key.gpg.sig b/src/koszko_org_website/static/key.gpg.sig new file mode 100644 index 0000000..ac76e52 --- /dev/null +++ b/src/koszko_org_website/static/key.gpg.sig @@ -0,0 +1,2 @@ +untrusted comment: verify with key.pub +RWQSf2wUdpjAtg12ANLYoJOLwKvNBQ7t3wTfVqiJHOC9rtkCBbn4olsZd0s31iFKvqNFu28XmFqcjZly7P9mpSEjYSplisZzZQI= diff --git a/src/koszko_org_website/static/key.pub b/src/koszko_org_website/static/key.pub new file mode 100644 index 0000000..d5e70dc --- /dev/null +++ b/src/koszko_org_website/static/key.pub @@ -0,0 +1,2 @@ +untrusted comment: Wojtek's release signing key public key +RWQSf2wUdpjAtrmt7D3t9iHrHFL/GpqXOF+NxECx8ck7swrx6tNzDkM9 diff --git a/src/koszko_org_website/static/key.pub.asc b/src/koszko_org_website/static/key.pub.asc new file mode 100644 index 0000000..bf01fb7 --- /dev/null +++ b/src/koszko_org_website/static/key.pub.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHUEABYIAB0WIQTpcnBg48VjfIpPS0JLxSIcWnn9GgUCYgy1nQAKCRBLxSIcWnn9 +Gm/DAP9hdya2JFwMc/Drqh6AXBrNBf96rUXBXEhAB25q0pYtYgEA4yo4SJgJEf3Y +t9VFMSxQufopw69lCs8u7K2tMbC/yAo= +=ENAB +-----END PGP SIGNATURE----- diff --git a/src/koszko_org_website/static/no-facebook.svg b/src/koszko_org_website/static/no-facebook.svg new file mode 100644 index 0000000..2678e5c --- /dev/null +++ b/src/koszko_org_website/static/no-facebook.svg @@ -0,0 +1,209 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/koszko_org_website/static/no-facebook.svg.license b/src/koszko_org_website/static/no-facebook.svg.license new file mode 100644 index 0000000..ee54f0c --- /dev/null +++ b/src/koszko_org_website/static/no-facebook.svg.license @@ -0,0 +1,4 @@ +SPDX-License-Identifier: CC0-1.0 AND LicenseRef-no-facebook + +Copyright (C) R.Siddharth +Copyright (C) 2021,2022 Wojtek Kosior diff --git a/src/koszko_org_website/static/normalize.css b/src/koszko_org_website/static/normalize.css new file mode 100644 index 0000000..e6cebf9 --- /dev/null +++ b/src/koszko_org_website/static/normalize.css @@ -0,0 +1,375 @@ +/* +SPDX-License-Identifier: LicenseRef-Normalize-CSS-MIT + +# The MIT License (MIT) + +Copyright 漏 Nicolas Gallagher and Jonathan Neal + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +/* Version 8.0.1, available from https://github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/src/koszko_org_website/static/pure-base.css b/src/koszko_org_website/static/pure-base.css new file mode 100644 index 0000000..ea5512d --- /dev/null +++ b/src/koszko_org_website/static/pure-base.css @@ -0,0 +1,38 @@ +/* +SPDX-License-Identifier: LicenseRef-Yahoo-BSD-3 + +Copyright 2013 Yahoo! Inc. + +See https://git.koszko.org/koszko-org-website/tree/LICENSES/ for details. +*/ + +/* ========================================================================== + Pure Base Extras + ========================================================================== */ + +/** + * Extra rules that Pure adds on top of Normalize.css + */ + +html { + font-family: sans-serif; +} + +/** + * Always hide an element when it has the `hidden` HTML attribute. + */ + +.hidden, +[hidden] { + display: none !important; +} + +/** + * Add this class to an image to make it fit within it's fluid parent wrapper while maintaining + * aspect ratio. + */ +.pure-img { + max-width: 100%; + height: auto; + display: block; +} diff --git a/src/koszko_org_website/static/pure-layouts.css b/src/koszko_org_website/static/pure-layouts.css new file mode 100644 index 0000000..febddd0 --- /dev/null +++ b/src/koszko_org_website/static/pure-layouts.css @@ -0,0 +1,55 @@ +/* +SPDX-License-Identifier: LicenseRef-Yahoo-BSD-3 + +Copyright 2013 Yahoo! Inc. + +See https://git.koszko.org/koszko-org-website/tree/LICENSES/ for details. +*/ + +.layout-item { + margin-top: 2em; + padding-top: 2em; + border-top: 1px solid #eee; +} +.layout-item-screenshot { + text-align: center; +} +.layout-item-head { + margin-top: 0; /* so that the .layout-item-head lines up with the image */ +} +.layout-item-modules { + padding: 0; +} +.layout-item-module { + margin-right: 0.5714em; + font-size: 0.875em; +} +.layout-item-module-base a { + border-left: 3px solid rgb(14, 144, 210); +} +.layout-item-module-grids a { + border-left: 3px solid rgb(128, 88, 165); +} +.layout-item-module-forms a { + border-left: 3px solid rgb(94, 185, 94); +} +.layout-item-module-buttons a { + border-left: 3px solid rgb(221, 81, 76); +} +.layout-item-module-tables a { + border-left: 3px solid rgb(243, 123, 29); +} +.layout-item-module-menus a { + border-left: 3px solid rgb(250, 210, 50); +} +.layout-item-module a:link, +.layout-item-module a:visited { + text-transform: capitalize; + color: rgb(75, 75, 75); + padding: 0 0.5714em; + line-height: 1.75; + display: block; +} +.layout-item-content .pure-button { + margin-right: 5px; +} diff --git a/src/koszko_org_website/static/pure-main.css b/src/koszko_org_website/static/pure-main.css new file mode 100644 index 0000000..b762a2c --- /dev/null +++ b/src/koszko_org_website/static/pure-main.css @@ -0,0 +1,629 @@ +/* +SPDX-License-Identifier: LicenseRef-Yahoo-BSD-3 + +Copyright 2013 Yahoo! Inc. + +See https://git.koszko.org/koszko-org-website/tree/LICENSES/ for details. +*/ + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html, button, input, select, textarea, +.pure-g [class *= "pure-u"] { + font-family: Helvetica, Arial, sans-serif; + letter-spacing: 0.01em; +} + + +/* -------------------------- + * Element Styles + * -------------------------- +*/ + +body { + min-width: 320px; + background-color: #fff; + color: #777; + line-height: 1.6; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: bold; + color: rgb(75, 75, 75); +} +h3 { + font-size: 1.25em; +} +h4 { + font-size: 1.125em; +} + +a { + color: #3b8bba; /* block-background-text-normal */ + text-decoration: none; +} + +a:visited { + color: #265778; /* block-normal-text-normal */ +} + +dt { + font-weight: bold; +} +dd { + margin: 0 0 10px 0; +} + +aside { + background: #1f8dd6; /* same color as selected state on site menu */ + margin: 1em 0; + padding: 0.3em 1em; + border-radius: 3px; + color: #fff; +} + aside a, aside a:visited { + color: rgb(169, 226, 255); + } + + +/* -------------------------- + * Layout Styles + * -------------------------- +*/ + +/* Navigation Push Styles */ +#layout { + position: relative; + padding-left: 0; +} + #layout.active #menu { + left: 160px; + width: 160px; + } + +/* Apply the .box class on the immediate parent of any grid element (pure-u-*) to apply some padding. */ +.l-box { + padding: 1em; +} + +.l-wrap { + margin-left: auto; + margin-right: auto; +} +.content .l-wrap { + margin-left: -1em; + margin-right: -1em; +} + + +/* -------------------------- + * Header Module Styles + * -------------------------- +*/ + +.header { + font-family: "Raleway", "Helvetica Neue", Helvetica, Arial, sans-serif; + max-width: 768px; + margin: 0 auto; + padding: 1em; + text-align: center; + border-bottom: 1px solid #eee; + background: #fff; + letter-spacing: 0.05em; +} + .header h1 { + font-size: 300%; + font-weight: 100; + margin: 0; + } + .header h2 { + font-size: 125%; + font-weight: 100; + line-height: 1.5; + margin: 0; + color: #666; + letter-spacing: -0.02em; + } + + + /* -------------------------- + * Content Module Styles + * -------------------------- + */ + +/* The content div is placed as a wrapper around all the docs */ +.content { + margin-left: auto; + margin-right: auto; + padding-left: 1em; + padding-right: 1em; + max-width: 768px; +} + + .content .content-subhead { + margin: 2em 0 1em 0; + font-weight: 300; + color: #888; + position: relative; + } + + .content .content-spaced { + line-height: 1.8; + } + + .content .content-quote { + font-family: "Georgia", serif; + color: #666; + font-style: italic; + line-height: 1.8; + border-left: 5px solid #ddd; + padding-left: 1.5em; + } + + .content-link { + position: absolute; + top: 0; + right: 0; + display: block; + height: 100%; + width: 20px; + background: transparent url('/img/link-icon.png') no-repeat center center; + background-size: 20px 20px; + } + + @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) { + .content-link { + background-image: url('/img/link-icon@2x.png'); + } + } + + +/* -------------------------- + * Code Styles + * -------------------------- +*/ + +pre, +code { + font-family: Consolas, Courier, monospace; + color: #333; + background: rgb(250, 250, 250); +} + +code { + padding: 0.2em 0.4em; + white-space: nowrap; +} +.content p code { + font-size: 90%; +} + +.code { + margin-left: -1em; + margin-right: -1em; + border: 1px solid #eee; + border-left-width: 0; + border-right-width: 0; + overflow-x: auto; +} +.code pre { + margin: 0; +} +.code code { + font-size: 95%; + white-space: pre; + word-wrap: normal; + padding: 0; + background: none; +} +.code-wrap code { + white-space: pre-wrap; + word-wrap: break-word; +} +.example .code { + margin-top: 1em; +} + +/* -------------------------- + * Footer Module Styles + * -------------------------- +*/ + +.footer { + font-size: 87.5%; + border-top: 1px solid #eee; + margin-top: 3.4286em; + padding: 1.1429em; + background: rgb(250, 250, 250); +} + +.legal { + line-height: 1.6; + text-align: center; + margin: 0 auto; +} + + .legal-license { + margin-top: 0; + } + .legal-links { + list-style: none; + padding: 0; + margin-bottom: 0; + } + .legal-copyright { + margin-top: 0; + margin-bottom: 0; + } + + +/* -------------------------- + * Main Navigation Bar Styles + * -------------------------- +*/ + +/* Add transition to containers so they can push in and out */ +#layout, +#menu, +.menu-link { + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; +} + +#layout.active .menu-link { + left: 160px; +} + +#menu { + margin-left: -160px; /* "#menu" width */ + width: 160px; + position: fixed; + top: 0; + left: 0; + bottom: 0; + z-index: 1000; /* so the menu or its navicon stays above all content */ + background: #191818; + overflow-y: auto; +} + #menu a { + color: #999; + border: none; + white-space: normal; + padding: 0.625em 1em; + } + + #menu .pure-menu-open { + background: transparent; + border: 0; + } + + #menu .pure-menu ul { + border: none; + background: transparent; + display: block; + } + + #menu .pure-menu ul, + #menu .pure-menu .menu-item-divided { + border-top: 1px solid #333; + } + + #menu .pure-menu-list li .pure-menu-link:hover, + #menu .pure-menu-list li .pure-menu-link:focus { + background: #333; + } + + .menu-link { + position: fixed; + display: block; /* show this only on small screens */ + top: 0; + left: 0; /* "#menu width" */ + background: #191818a4; + font-size: 11px; /* change this value to increase/decrease button size */ + z-index: 1001; + width: 4em; + height: 4em; + padding: 1em; + } + + :not(:checked) + .menu-link:hover, + :not(:checked) + .menu-link:focus { + background: #000; + } + + .menu-link span { + position: relative; + display: block; + margin-top: 0.9em; + } + + .menu-link span, + .menu-link span:before, + .menu-link span:after { + background-color: #fff; + pointer-events: none; + width: 100%; + height: .2em; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; + } + + .menu-link span:before, + .menu-link span:after { + position: absolute; + top: -.55em; + content: " "; + } + + .menu-link span:after { + top: .55em; + } + + :checked + .menu-link span { + background: transparent; + } + + :checked + .menu-link span:before { + -webkit-transform: rotate(45deg) translate(.5em, .4em); + -moz-transform: rotate(45deg) translate(.5em, .4em); + -ms-transform: rotate(45deg) translate(.5em, .4em); + -o-transform: rotate(45deg) translate(.5em, .4em); + transform: rotate(45deg) translate(.5em, .4em); + } + + :checked + .menu-link span:after { + -webkit-transform: rotate(-45deg) translate(.4em, -.3em); + -moz-transform: rotate(-45deg) translate(.4em, -.3em); + -ms-transform: rotate(-45deg) translate(.4em, -.3em); + -o-transform: rotate(-45deg) translate(.4em, -.3em); + transform: rotate(-45deg) translate(.4em, -.3em); + } + + #menu .pure-menu-heading { + font-size: 125%; + font-weight: 300; + letter-spacing: 0.1em; + color: #fff; + margin-top: 0; + padding: 0.5em 0.8em; + text-transform: uppercase; + } + #menu .pure-menu-heading:hover, + #menu .pure-menu-heading:focus { + color: #999; + } + + #menu .pure-menu-item .active { + background: #1f8dd6; + color: #fff; + } + + #menu li.pure-menu-item .active:hover, + #menu li.pure-menu-item .active:focus { + background: #1f8dd6; + } + + +/* --------------------- + * Smaller Module Styles + * --------------------- +*/ + +.pure-img-responsive { + max-width: 100%; + height: auto; +} + +.pure-paginator .pure-button { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.pure-button { + font-family: inherit; +} +a.pure-button-primary { + color: white; +} + + +/* green call to action button class */ +.notice { + background-color: #61B842; + color: white; +} + +.muted { + color: #ccc; +} + + + +/* ------------- + * Table Styles + * ------------- +*/ +.pure-table th, +.pure-table td { + padding: 0.5em 1em; +} + +.table-responsive { + margin-left: -1em; + margin-right: -1em; + overflow-x: auto; + margin-bottom: 1em; +} +.table-responsive table { + width: 100%; + min-width: 35.5em; + border-left-width: 0; + border-right-width: 0; +} + +.table-responsive .mq-table { + width: 100%; + min-width: 44em; +} +.mq-table th.highlight { + background-color: rgb(255, 234, 133); +} +.mq-table td.highlight { + background-color: rgb(255, 250, 229); +} +.mq-table th.highlight code, +.mq-table td.highlight code { + background: rgb(255, 255, 243); +} +.mq-table-mq code { + font-size: 0.875em; +} + +/* ---------------------------- + * Example for full-width Grids + * ---------------------------- +*/ + +.grids-example { + background: rgb(250, 250, 250); + margin: 2em auto; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +/* -------------------------- + * State Rules + * -------------------------- +*/ + + +.is-code-full { + text-align: center; +} +.is-code-full .code { + margin-left: auto; + margin-right: auto; +} +.is-code-full code { + display: inline-block; + max-width: 768px; + margin-left: auto; + margin-right: auto; +} + + +/* -------------------------- + * Responsive Styles + * -------------------------- +*/ + +@media screen and (min-width: 35.5em) { + + .legal-license { + text-align: left; + margin: 0; + } + .legal-copyright, + .legal-links, + .legal-links li { + text-align: right; + margin: 0; + } + +} + +@media screen and (min-width: 48em) { + + .l-wrap, + .l-wrap .content { + padding-left: 1em; + padding-right: 1em; + } + .content .l-wrap { + margin-left: -2em; + margin-right: -2em; + } + + .header, + .content { + padding-left: 2em; + padding-right: 2em; + } + + .header h1 { + font-size: 320%; + } + .header h2 { + font-size: 128%; + } + + .content p { + font-size: 1.125em; + } + + .code { + margin-left: auto; + margin-right: auto; + border-left-width: 1px; + border-right-width: 1px; + } + + .table-responsive { + margin-left: auto; + margin-right: auto; + } + .table-responsive table { + border-left-width: 1px; + border-right-width: 1px; + } + +} + +input[type="checkbox"] { + display: none; +} + +@media (max-width: 58em) { + input#show-menu:checked ~ #menu { + left: 160px; + } + input#show-menu:checked ~ .menu-link { + position: fixed; + left: calc(160px - 4em); + } +} + +@media (min-width: 58em) { + + #menu { + left: 160px; + } + + .menu-link { + position: fixed; + left: 160px; + display: none; + } + + #main { + margin-left: 160px; + } +} diff --git a/src/koszko_org_website/static/pure-menus-core.css b/src/koszko_org_website/static/pure-menus-core.css new file mode 100644 index 0000000..065eed1 --- /dev/null +++ b/src/koszko_org_website/static/pure-menus-core.css @@ -0,0 +1,42 @@ +/* +SPDX-License-Identifier: LicenseRef-Yahoo-BSD-3 + +Copyright 2013 Yahoo! Inc. + +See https://git.koszko.org/koszko-org-website/tree/LICENSES/ for details. +*/ + +.pure-menu { + box-sizing: border-box; +} + +.pure-menu-fixed { + position: fixed; + left: 0; + top: 0; + z-index: 3; +} + +.pure-menu-list, +.pure-menu-item { + position: relative; +} + +.pure-menu-list { + list-style: none; + margin: 0; + padding: 0; +} + +.pure-menu-item { + padding: 0; + margin: 0; + height: 100%; +} + +.pure-menu-link, +.pure-menu-heading { + display: block; + text-decoration: none; + white-space: nowrap; +} diff --git a/src/koszko_org_website/static/pure-menus-horizontal.css b/src/koszko_org_website/static/pure-menus-horizontal.css new file mode 100644 index 0000000..ceec10b --- /dev/null +++ b/src/koszko_org_website/static/pure-menus-horizontal.css @@ -0,0 +1,25 @@ +/* +SPDX-License-Identifier: LicenseRef-Yahoo-BSD-3 + +Copyright 2013 Yahoo! Inc. + +See https://git.koszko.org/koszko-org-website/tree/LICENSES/ for details. +*/ + +/* HORIZONTAL MENU */ +.pure-menu-horizontal { + width: 100%; + white-space: nowrap; +} + +.pure-menu-horizontal .pure-menu-list { + display: inline-block; +} + +/* Initial menus should be inline-block so that they are horizontal */ +.pure-menu-horizontal .pure-menu-item, +.pure-menu-horizontal .pure-menu-heading, +.pure-menu-horizontal .pure-menu-separator { + display: inline-block; + vertical-align: middle; +} diff --git a/src/koszko_org_website/static/pure-menus-skin.css b/src/koszko_org_website/static/pure-menus-skin.css new file mode 100644 index 0000000..f67b900 --- /dev/null +++ b/src/koszko_org_website/static/pure-menus-skin.css @@ -0,0 +1,66 @@ +/* +SPDX-License-Identifier: LicenseRef-Yahoo-BSD-3 + +Copyright 2013 Yahoo! Inc. + +See https://git.koszko.org/koszko-org-website/tree/LICENSES/ for details. +*/ + +/* misc default styling */ + +.pure-menu-separator, +.pure-menu-horizontal .pure-menu-children .pure-menu-separator { + background-color: #ccc; + height: 1px; + margin: .3em 0; +} + +.pure-menu-horizontal .pure-menu-separator { + width: 1px; + height: 1.3em; + margin: 0 .3em ; +} + +/* Need to reset the separator since submenu is vertical */ +.pure-menu-horizontal .pure-menu-children .pure-menu-separator { + display: block; + width: auto; +} + +.pure-menu-heading { + text-transform: uppercase; + color: #565d64; +} + +.pure-menu-link { + color: #777; +} + +.pure-menu-children { + background-color: #fff; +} + +.pure-menu-link, +.pure-menu-heading { + padding: .5em 1em; +} + +.pure-menu-disabled { + opacity: .5; +} + +.pure-menu-disabled .pure-menu-link:hover { + background-color: transparent; + cursor: default; +} + +.pure-menu-active > .pure-menu-link, +.pure-menu-link:hover, +.pure-menu-link:focus { + background-color: #eee; +} + +.pure-menu-selected > .pure-menu-link, +.pure-menu-selected > .pure-menu-link:visited { + color: #000; +} diff --git a/src/koszko_org_website/static/pure-tables.css b/src/koszko_org_website/static/pure-tables.css new file mode 100644 index 0000000..35c0624 --- /dev/null +++ b/src/koszko_org_website/static/pure-tables.css @@ -0,0 +1,76 @@ +/* +SPDX-License-Identifier: LicenseRef-Yahoo-BSD-3 + +Copyright 2013 Yahoo! Inc. + +See https://git.koszko.org/koszko-org-website/tree/LICENSES/ for details. +*/ + +.pure-table { + /* Remove spacing between table cells (from Normalize.css) */ + border-collapse: collapse; + border-spacing: 0; + empty-cells: show; + border: 1px solid #cbcbcb; +} + +.pure-table caption { + color: #000; + font: italic 85%/1 arial, sans-serif; + padding: 1em 0; + text-align: center; +} + +.pure-table td, +.pure-table th { + border-left: 1px solid #cbcbcb;/* inner column border */ + border-width: 0 0 0 1px; + font-size: inherit; + margin: 0; + overflow: visible; /*to make ths where the title is really long work*/ + padding: 0.5em 1em; /* cell padding */ +} + +.pure-table thead { + background-color: #e0e0e0; + color: #000; + text-align: left; + vertical-align: bottom; +} + +/* +striping: + even - #fff (white) + odd - #f2f2f2 (light gray) +*/ +.pure-table td { + background-color: transparent; +} +.pure-table-odd td { + background-color: #f2f2f2; +} + +/* nth-child selector for modern browsers */ +.pure-table-striped tr:nth-child(2n-1) td { + background-color: #f2f2f2; +} + +/* BORDERED TABLES */ +.pure-table-bordered td { + border-bottom: 1px solid #cbcbcb; +} +.pure-table-bordered tbody > tr:last-child > td { + border-bottom-width: 0; +} + + +/* HORIZONTAL BORDERED TABLES */ + +.pure-table-horizontal td, +.pure-table-horizontal th { + border-width: 0 0 1px 0; + border-bottom: 1px solid #cbcbcb; +} +.pure-table-horizontal tbody > tr:last-child > td { + border-bottom-width: 0; +} diff --git a/src/koszko_org_website/templates/__base.html.jinja b/src/koszko_org_website/templates/__base.html.jinja new file mode 100644 index 0000000..c05a0a1 --- /dev/null +++ b/src/koszko_org_website/templates/__base.html.jinja @@ -0,0 +1,253 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website base page template. + +Copyright (C) 2022 Wojtek Kosior +#} + +{% macro same_lang_url(page_path) -%} + {{ url_for('.show_page_in_' ~ lang_short, page_path=page_path) }} +{%- endmacro %} + +{% + set section_ns = namespace( + in_section = false, + id = none, + linked = false, + first = true + ) +%} + +{% macro maybe_link(to, link=true) %} + {%- if to is not none and link -%} + {{ caller() }} + {%- else -%} + {{ caller() }} + {%- endif -%} +{% endmacro %} + +{% macro header(level, text='', link_to_section=true) %} + + {% + set should_link = section_ns.in_section and + link_to_section and + not section_ns.linked and + section_ns.id is not none + %} + {% set section_ns.linked = section_ns.linked or should_link %} + {% set caller_markup = caller() if caller is defined else '' %} + {% call maybe_link('#' ~ section_ns.id, link=should_link) -%} + {{ text }}{{ caller_markup }} + {%- endcall %} + +{% endmacro %} + +{% macro section(id=none) %} + {% set attrs = {} %} + {% do attrs.update(section_attrs|default({})) %} + {% if section_ns.first %} + {% set section_ns.first = false %} + {% set classes = attrs.get('class') %} + {% set classes = (classes ~ ' ' if classes else '') ~ 'first-section' %} + {% do attrs.update({'class': classes}) %} + {% endif %} + + {% if id is not none %} + + {% endif %} + {% if section_ns.in_section %} + {{ raise_exception('Section defined inside another section.') }} + {% else %} + {% set section_ns.in_section = true %} + {% set section_ns.id = id %} + {% set section_ns.linked = false %} + {% endif %} + {{ caller() }} + {% set section_ns.in_section = false %} + +{% endmacro %} + +{% macro para(ensure_containing_section=true) %} + {% if section_ns.in_section or not ensure_containing_section %} +

+ {{ caller() }} +

+ {% else %} + {% set caller_snapshot = caller %} + {% call section() %} +

+ {{ caller_snapshot() }} +

+ {% endcall %} + {% endif %} +{% endmacro %} + +{% macro link(to, text='') -%} + {{ text }} + {%- if caller is defined -%} + {{ caller() }} + {%- endif -%} + +{%- endmacro %} + +{% macro bold(text='') -%} + {{ text }} + {%- if caller is defined -%} + {{ caller() }} + {%- endif -%} + +{%- endmacro %} + +{% macro italic(text='') -%} + {{ text }} + {%- if caller is defined -%} + {{ caller() }} + {%- endif -%} + +{%- endmacro %} + +{% macro unordered_list() %} +
    + {{ caller() }} +
+{% endmacro %} + +{% macro list_entry() %} +
  • + {{ caller() }} +
  • +{% endmacro %} + +{% macro descriptions() %} +
    + {{ caller() }} +
    +{% endmacro %} + +{% macro desc_term(text='') %} + {{ '
    '|safe }} +
    {{ text }} + {%- if caller is defined -%} + {{ caller() }} + {%- endif -%} +
    +{% endmacro %} + +{% macro desc_desc(text='') %} +
    {{ text }} + {%- if caller is defined -%} + {{ caller() }} + {%- endif -%} +
    + {{ '
    '|safe }} +{% endmacro %} + +{% macro img(url, alt_text, extra_classes=[]) %} + {% set attrs = {'class': (['pure-img'] + extra_classes)|join(' ')} %} + {% do attrs.update({'src': url, 'alt': alt_text, 'draggable': false}) %} + +{% endmacro %} + +{% macro aside(text='') %} + +{% endmacro %} + +{% macro sup(text='') -%} + {{ text }} + {%- if caller is defined -%} + {{ caller() }} + {%- endif -%} + +{%- endmacro %} + +{% set numberlinks_ns = namespace(next_num=1, nums={}) %} + +{% macro numberlink(link_url) -%} + {%- if link_url not in numberlinks_ns.nums -%} + {%- do numberlinks_ns.nums.update({link_url: numberlinks_ns.next_num}) -%} + {%- set numberlinks_ns.next_num = numberlinks_ns.next_num + 1 -%} + {%- endif -%} + {%- call sup() -%} + {{ link(link_url, '[' ~ numberlinks_ns.nums[link_url] ~ ']') }} + {%- endcall -%} +{%- endmacro %} + +{% macro newline() %} +
    +{% endmacro %} + +{% macro nbsp() -%} +   +{%- endmacro %} + +{% macro unicode(code) -%} + &#{{ code }}; +{%- endmacro %} + + + + + {% block head %} + + + + + {% block title %} + {% endblock %} + + {% block external_css %} + + + + + + {% endblock %} + + {% endblock %} + + + {% block body %} + Kocham Asi臋 茞> + {% endblock %} + + diff --git a/src/koszko_org_website/templates/__campaign_base.html.jinja b/src/koszko_org_website/templates/__campaign_base.html.jinja new file mode 100644 index 0000000..0cb6ad2 --- /dev/null +++ b/src/koszko_org_website/templates/__campaign_base.html.jinja @@ -0,0 +1,258 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website campaign pages template. + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__base.html.jinja" %} + +{% block external_css %} + {{ super() }} + + + +{% endblock %} + +{% block style %} + {{ super() }} + + input { + display: none; + } + + * { + color: #777; + } + + body { + min-height: 100vh; + display: flex; + flex-direction: column; + } + + #main { + background-color: white; + flex-grow: 1; + } + + /* + * Wanted to slightly adjust PureCSS menu styling to my needs and ended up + * with a mess :( + */ + + body, .pure-menu { + background-color: #eee; + } + + .pure-menu { + white-space: normal; + position: sticky; + top: 0; + } + + .pure-menu-horizontal .pure-menu-item, + .pure-menu-horizontal .pure-menu-heading, + .pure-menu-horizontal .pure-menu-separator { + white-space: nowrap; + } + + .pure-menu-link { + cursor: pointer; + } + + .pure-menu-item .pure-menu-link:hover, + .pure-menu-item .pure-menu-link:focus, + .pure-menu-heading .pure-menu-link:hover, + .pure-menu-heading .pure-menu-link:focus { + background-color: #ddd; + } + + .pure-menu-disabled .pure-menu-link, + .pure-menu-disabled .pure-menu-link:hover, + .pure-menu-disabled .pure-menu-link:focus { + background-color: transparent; + cursor: pointer; + } + + h1, h2 { + color: #555; + } + + .content { + max-width: 850px; + padding: 0px 20px 20px 20px; + margin: 0 auto; + } + + .section-anchor { + top: -50px; + } + + .hamburger { + display: none; + position: absolute; + right: 0; + border-radius: 3px; + opacity: 0.7; + background-color: #ccc; + cursor: pointer; + } + + .hamburger>div { + height: 3px; + width: 16px; + margin: 6px 5px; + padding: 0 5px; + border-radius: 2px; + background-color: #555; + } + + .hide-menu { + display: none; + text-align: center; + padding: 0 0 0 0; + height: 30px; + border-top: solid 2px #777; + background-color: #ccc; + color: #777; + font-size: 2em; + user-select: none; + cursor: pointer; + } + + @media (max-width: 600px) { + #show-menu:not(:checked)+.hamburger { + display: block; + position: fixed; + } + + .hide-menu { + display: block; + } + + .pure-menu { + position: fixed; + transition: top 0.2s; + } + + #show-menu:not(:checked)+.hamburger+.pure-menu { + top: -160px; + } + + #show-menu:checked+.hamburger+.pure-menu { + top: 0; + } + + .pure-menu .pure-menu-list, + .pure-menu .pure-menu-item, + .pure-menu .pure-menu-heading, + .pure-menu .pure-menu-separator { + display: block; + } + + .pure-menu { + text-align: center; + } + + .section-anchor { + top: 0; + } + } + + footer { + border-top: 1px solid #888; + } + + footer > p { + max-width: 850px; + padding-left: 10px; + padding-right: 10px; + margin-left: auto; + margin-right: auto; + } + + h1 { + text-align: center; + } + + section { + border-top: 1px solid #ccc; + } + + section.first-section { + border-top: none; + } + + {# + The style below is not used right now but is left in case it ever becomes + useful again. + #} + + aside { + display: inline-block; + padding: 10px; + border-radius: 4px; + background-color: #acf; + text-color: #555; + } +{% endblock %} + +{% macro menu_item(link_url, text, active, heading=false) %} + {% set tag_name = 'span' if heading else 'li' %} + {% if heading %} + {% set classes = ['pure-menu-heading'] %} + {% else %} + {% set classes = ['pure-menu-item'] %} + {% endif %} + {% if active %} + {% do classes.append('pure-menu-disabled') %} + {% endif %} + <{{ tag_name }} class="{{ classes|join(' ') }}"> + {% set href = '#' if active else link_url %} + {{ text }} + +{% endmacro %} + +{% block body %} + + + + +
    + {% block main %} +
    + {% block content %} + {% endblock %} +
    + {% endblock %} +
    + +
    + {% include [dedicated_footer_path, lang_short ~ '/__footer.html.jinja'] %} +
    +{% endblock %} diff --git a/src/koszko_org_website/templates/__index.html.jinja b/src/koszko_org_website/templates/__index.html.jinja new file mode 100644 index 0000000..ac1b335 --- /dev/null +++ b/src/koszko_org_website/templates/__index.html.jinja @@ -0,0 +1,27 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website start page stub. + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__campaign_base.html.jinja" %} + +{% block style %} + {{ super() }} + + @media (max-width: 1000px) { + .libre-program-img { + -o-object-fit: cover; + object-fit: cover; + height: 307px; + } + } +{% endblock %} + +{% block main %} + {% set alt_text = _('index.img:libre_program_alt') %} + {{ img('/static/free-program.svg', alt_text, ['libre-program-img']) }} + + {{ super() }} +{% endblock %} diff --git a/src/koszko_org_website/templates/__koszko_base.html.jinja b/src/koszko_org_website/templates/__koszko_base.html.jinja new file mode 100644 index 0000000..b7de249 --- /dev/null +++ b/src/koszko_org_website/templates/__koszko_base.html.jinja @@ -0,0 +1,210 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website campaign pages template. + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% set section_attrs = {'class': 'layout-item'} %} +{% set header_attrs = {'class': 'content-subhead'} %} + +{% extends "__base.html.jinja" %} + +{% macro gitlink() -%} + {%- for project_id in varargs -%} + {{ numberlink('https://git.koszko.org/' ~ project_id ~ '/') }} + {%- endfor -%} +{%- endmacro %} + +{% block external_css %} + {{ super() }} + + + +{% endblock %} + +{% block style %} + {{ super() }} + + .pure-menu-item a { + display: block; + } + + #no-fb { + position: relative; + } + + #no-fb img { + width: 150px; + height: auto; + position: absolute; + left: 100px; + top: -70px; + -webkit-backface-visibility: hidden; + } + + @media (max-width: 520px) { + #no-fb img { + width: 130px; + left: 90px; + top: -60px; + } + } + @media (max-width: 460px) { + #no-fb img { + width: 110px; + top: -50px; + } + } + @media (max-width: 410px) { + #no-fb img { + width: 100px; + left: 80px; + top: -40px; + } + } + @media (max-width: 380px) { + #no-fb img { + width: 70px; + left: 65px; + top: -30px; + } + } + + #main { + min-height: 100vh; + display: flex; + flex-direction: column; + } + + .header, .content { + width: 100%; + } + + .content { + flex-grow: 1; + } + + aside { + background: #1f8dd6; + margin: 10px 0; + padding: 3px 10px; + border-radius: 3px; + color: #fff; + } + + .layout-item:first-child { + margin-top: 0; + border-top: 0; + } + + .content .content-subhead { + margin-top: 0; + } + + dt { + float: left; + margin-right: .5em; + } + + dd { + display: inline; + } + + dl.indent-dl dt { + margin-left: -2em; + } + + dl.indent-dl { + margin-top: 0; + margin-left: 2em; + } + + footer > p { + max-width: 768px; + margin: auto; + } +{% endblock %} + +{% macro menu_item(link_url, text, active) %} +
  • + {% if active %} + {% set link_url = "#" %} + {% endif %} + {% set attrs = {'href': link_url, 'class': 'active' if active else none} %} + {{ text }} +
  • +{% endmacro %} + +{% block body %} + + + + +
    +
    + {% block header %} +

    + {% if page_path == 'koszko.html' %} + {% set url = '#' %} + {% else %} + {% set url = same_lang_url('koszko.html') %} + {% endif %} + + {{ _('koszko_base.h1:wojtek_kosior') }} + +

    +

    + + {% block subheading_text %} + {% endblock %} + +

    + {% if include_not_facebookd|default(false) %} + + + + + + {% endif %} + {% endblock %} +
    +
    + {% block content %} + {% endblock %} +
    +
    + {% include [dedicated_footer_path, lang_short ~ '/__footer.html.jinja'] %} +
    +
    +{% endblock %} diff --git a/src/koszko_org_website/templates/cv.html.jinja b/src/koszko_org_website/templates/cv.html.jinja new file mode 100644 index 0000000..60c37ae --- /dev/null +++ b/src/koszko_org_website/templates/cv.html.jinja @@ -0,0 +1,159 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website CV page stub. + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__koszko_base.html.jinja" %} + +{% block title %} CV {% endblock %} + +{% block subheading_text %} CV {% endblock %} + +{% set include_not_facebookd = true %} + +{% macro gitlink() -%} + {%- for project_id in varargs -%} + {{ numberlink('https://git.koszko.org/' ~ project_id ~ '/') }} + {%- endfor -%} +{%- endmacro %} + +{% macro speaks_list() %} + {% call unordered_list() %} + {% call list_entry() %} + C + {%- + set project_ids = [ + 'AGH-engineering-thesis', + 'smtps-and-pop3s-console-program', + 'xml-backup-restore', + 'rpi-MMU-example', + 'C-hashtable', + ] + -%} + {{ gitlink(*project_ids) }} + {%- endcall %} + + {% call list_entry() %} + Python{{ gitlink('0tdns', 'pydrilla') }} + {% endcall %} + + {% call list_entry() %} + JavaScript{{ gitlink('browser-extension') }} + {% endcall %} + + {% call list_entry() %} + sh{{ gitlink('0tdns') }} + {% endcall %} + + {% call list_entry() %} + Verilog{{ gitlink('AGH-engineering-thesis') }} + {% endcall %} + + {% call list_entry() %} + SQL{{ gitlink('xml-backup-restore', 'pydrilla') }} + {% endcall %} + + {% call list_entry() %} + HTML+CSS + {%- + set project_ids = [ + 'mothers-day-css-animation', + 'birthday-flower-css-animation', + 'chrysantemum', + 'browser-extension', + 'pydrilla', + 'hydrilla-website' + ] + -%} + {{ gitlink(*project_ids) }} + {%- endcall %} + + {% call list_entry() %} + Java + {% endcall %} + + {% call list_entry() %} + LaTeX{{ gitlink('change-world-sheets') }} + {% endcall %} + + {% call list_entry() %} + Fortran + {%- + set project_ids = [ + 'fortran-assignment1', + 'fortran-assignment2', + 'fortran-assignment3' + ] + -%} + {{ gitlink(*project_ids) }} + {%- endcall %} + + {% call list_entry() %} + {% block lisp_entry_text %} + {% endblock %} + {% endcall %} + + {% call list_entry() %} + Org mode + {% endcall %} + + {% call list_entry() %} + {% block assembly_link_text %} + {% endblock %}{{ gitlink('rpi-MMU-example') }} + {% endcall %} + + {% call list_entry() %} + C++{{ gitlink('smtps-and-pop3s-console-program') }} + {% endcall %} + + {% call list_entry() %} + Erlang + {% endcall %} + + {% call list_entry() %} + Tcl{{ gitlink('AGH-engineering-thesis') }} + {% endcall %} + {% endcall %} +{% endmacro %} + +{% + set make_project_ids = [ + 'AGH-engineering-thesis', + 'smtps-and-pop3s-console-program', + 'xml-backup-restore', + 'rpi-MMU-example', + 'pydrilla' + ] +%} + +{% set embeds_project_ids = ['rpi-MMU-example'] %} + +{% set networking_project_ids = ['0tdns'] %} + +{% + set xcc_project_ids = [ + 'rpi-MMU-example', + 'gcc-arm-PKGBUILDs', + 'smtps-and-pop3s-console-program', + 'xml-backup-restore' + ] +%} + +{% macro contact_info() %} + {% call descriptions() %} + {{ desc_term(_('Tel.:')) }} + {{ desc_desc('(+48) 12 350 64 74') }} + + {{ desc_term('Email:') }} + {% call desc_desc() -%} + {{ link('mailto:koszko@koszko.org', 'koszko@koszko.org') }} + {%- endcall %} + + {{ desc_term('PGP') }} + {% call desc_desc() -%} + {{ link('/static/key.gpg', 'key.gpg') }} + {%- endcall %} + {% endcall %} +{% endmacro %} diff --git a/src/koszko_org_website/templates/en/__footer.html.jinja b/src/koszko_org_website/templates/en/__footer.html.jinja new file mode 100644 index 0000000..5d1791f --- /dev/null +++ b/src/koszko_org_website/templates/en/__footer.html.jinja @@ -0,0 +1,27 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +Footer text of the koszko.org website pages (english). + +Copyright (C) 2022 Wojtek Kosior +#} + +{% call para(ensure_containing_section=false) %} + This site utilizes styling from {{ link('https://purecss.io/', 'PureCSS') }} + and {{ link('https://github.com/necolas/normalize.css', 'Normalize CSS') }} + available under + {{ link('/static/yahoo-bsd-license.txt', 'Yahoo\'s BSD License') }} and + {{ link('/static/normalize-mit-license.txt', 'an X11-style license') }}, + respectively. +{% endcall %} + +{% block extra_footer_copyright_info %} +{% endblock %} + +{% call para(ensure_containing_section=false) %} + The rest is made by {{ link(same_lang_url('koszko.html'), 'Wojtek') }}, + available + {{ link('https://git.koszko.org/koszko-org-website/', 'here') }} + under the terms of + {{ link('/static/cc0-1.0.txt', 'CC0') }}. +{% endcall %} diff --git a/src/koszko_org_website/templates/en/__footer_for_qr.html.jinja b/src/koszko_org_website/templates/en/__footer_for_qr.html.jinja new file mode 100644 index 0000000..f06ea2f --- /dev/null +++ b/src/koszko_org_website/templates/en/__footer_for_qr.html.jinja @@ -0,0 +1,19 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +Footer text of the koszko.org website qr page (english). + +Copyright (C) 2022 Wojtek Kosior +#} +{% extends 'en/__footer.html.jinja' %} + +{% block extra_footer_copyright_info %} + {% call para(ensure_containing_section=false) %} + The Easter eggs photo has been taken from + {% call link('https://commons.wikimedia.org/wiki/File:20110423_Easter_eggs_(3).jpg') -%} + Wikimedia Commons + {%- endcall %} + and is available under the terms of + {{ link('/static/cc-by-3.0.txt', 'CC BY 3.0 Unported') }}. + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/en/__index.html.jinja b/src/koszko_org_website/templates/en/__index.html.jinja new file mode 100644 index 0000000..480c4c4 --- /dev/null +++ b/src/koszko_org_website/templates/en/__index.html.jinja @@ -0,0 +1,160 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website start page (english). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__index.html.jinja" %} + +{% block title %} Libre programs {% endblock %} + +{% block content %} + {{ header(1, 'Campaign for libre software') }} + + {% call section('what-software') %} + {{ header(2, 'What software?') }} + + {% call para() %} + Libre program is one its user can use for any purpose, modify in the form + of source code and redistribute, including for commercial + purposes. Examples are GNU/Linux operating system, VLC media player, GIMP, + LibreOffice, WordPress and also (except for certain components): Firefox + browser, Android operating system and Chromium browser. A program user + cannot modify or redistribute for either legal or technical reasons is + called proprietary or nonfree. + {% endcall %} + {% endcall %} + + {% call section('who-needs-this') %} + {{ header(2, 'Who needs this?') }} + + {% call para() %} + Libre program gives user control. Computer is a useful device, yet is does + nothing by itself. To work it needs a program. Computer's owner is only + able to control it indirectly, through a program. If the software being + run is libre, the user has control over it and hence over the device. A + proprietary program, on the other hand, is controlled by its vendor (or + speaking 100% strictly - the party holding its cource code). Such program + only does what its vendor wants it to. As a result, the device also does + not what its owner wants but rather what program's vendor wants. Instead + of the desired situation where device user controls the device, we get a + reversed one: vendor, through program, controls the user and decides what + user can and cannot do. Of course, in practice we witness different levels + of users mistreatment. One edge case is an operating system only allowing + installation of applications approved by its vendor. + {% endcall %} + + {% call para() %} + Everyone should care about using libre programs simply because it is good + to have control over one's own devices. The issue is not, however, limited + to personal preferences. The more people in a society rely on proprietary, + incompatible tools, the harder life is for those willing to choose libre + ones. + {% endcall %} + + {% call para() %} + The problem is also worth looking at on a different scale. A state with + proprietary programs in widespread use is not fully independent - it + depends indirectly on vendors of these programs. For this reason a duty of + responsibility for one's state also means taking action to stop its + economy and education from relying on proprietary operating systems or + tools. + {% endcall %} + {% endcall %} + + {% call section('how-this-matters-to-non-programmers') %} + {{ header(2, 'How does all this matter to someone who cannot program?') }} + + {% call para() %} + One does not need to be a programmer in order to utilize the control libre + programs give. Quite often when a direction of some libre program is bad + (e.g. antifeatures are being added like telemetry in Firefox), independent + people come up with a version of that program without the original + drawbacks (example would be the + {{ link('https://librewolf-community.gitlab.io/', 'LibreWolf') }} + browser). All that's needed is a bit of demand for a modified version of + some program. Bussinessmen, on the other hand, might find it practical to + employ someone to adapt a libre program to company's needs. + {% endcall %} + {% endcall %} + + {% call section('how-is-moneymaking-affected') %} + {% call header(2) %} + Does it mean programmers shouldn't be paid for writing software? + {% endcall %} + + {% call para() %} + Equating libre program with gratis and proprietary with paid is a very + common misunderstanding. In reality proprietary programs often come for + free (Adobe Reader, Chrome browser, Google Docs) and libre tools can also + be made available for a fee (e.g. commercial GNU/Linux distrubutions). + Many people associate programming with a business model where a customer + is being sold a license for use of some proprietary program. Because such + model is less practical in case of libre programs, some think their + creation cannot be commercialized. However, most code - both libre and + nonfree - is not being written with the goal of selling licenses for its + use. Income often comes from different sources, such as selling services + or hardware the program works with. + {% endcall %} + {% endcall %} + + {% call section('how-it-started') %} + {{ header(2, 'Who came up with all this?') }} + + {% call para() %} + In 1983 + {% call link('https://en.wikipedia.org/wiki/Richard_Stallman') -%} + Richard Stallman + {%- endcall %}, + a + {% call link('https://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technology') -%} + MIT + {%- endcall %} + scientist, started the + {{ link('https://www.gnu.org/', 'GNU project') }} with a goal of + developing a libre replacement for proprietary UNIX system. 2 years later + in Boston he founded the + {{ link('https://www.fsf.org/', 'Free Software Foundation (FSF)') }} which + still promotes and develops these ideals. + {% endcall %} + {% endcall %} + + {% call section('how-to-come-to-the-good-side') %} + {{ header(2, 'How to come to the good side?') }} + + {% call para() %} + You can help in many ways. For example by + {% endcall %} + + {% call unordered_list() %} + {% call list_entry() %} + using libre programs on daily basis, + {% endcall %} + {% call list_entry() %} + making others aware of the problem (you can link this site + or the {{ link('https://fsf.org', 'FSF\'s site') }}), + {% endcall %} + {% call list_entry() %} + refusing to use proprietary tools to the best of your ability, + {% endcall %} + {% call list_entry() %} + complaining to vendors of proprietary programs asking for their source + code to be released under some libre license, + {% endcall %} + {% call list_entry() %} + calling on people in charge of various organizations and educational + facilities to deploy a libre operating system and tools, + {% endcall %} + {% call list_entry() %} + calling on politicians to enact laws good for software freedom + (e.g. making code written for public money available under a libre + license) and + {% endcall %} + {% call list_entry() %} + {{ link('https://my.fsf.org/join', 'donating to the FSF') }} or various + projects developing libre programs. + {% endcall %} + {% endcall %} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/en/author.html.jinja b/src/koszko_org_website/templates/en/author.html.jinja new file mode 100644 index 0000000..e3a01c3 --- /dev/null +++ b/src/koszko_org_website/templates/en/author.html.jinja @@ -0,0 +1,33 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website "about author" page (english). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__campaign_base.html.jinja" %} + +{% block title %} Campaign author {% endblock %} + +{% block content %} + {{ header(1, 'About campaign author') }} + + {% call section() %} + {% call para() %} + My name is Wojciech Kosior. I am (as one could easily guess) a software + freedom proponent and (as you might not yet know) a catholic. In 2021 I + {% call link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html') -%} + successfully defended + {%- endcall %} + my BSc thesis in infomatics at + {{ link('https://en.wikipedia.org/wiki/AGH_University_of_Science_and_Technology', 'AGH') }} + in Krak贸w, Poland. I am now striving to make people care more about their + digital freedom. + {% endcall %} + + {% call para() %} + You can find more information on + {{ link(same_lang_url('koszko.html'), 'my personal page') }}. + {% endcall %} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/en/cv.html.jinja b/src/koszko_org_website/templates/en/cv.html.jinja new file mode 100644 index 0000000..36f6d59 --- /dev/null +++ b/src/koszko_org_website/templates/en/cv.html.jinja @@ -0,0 +1,160 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website CV page (english). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "cv.html.jinja" %} + +{% block lisp_entry_text %} + Lisp (bits from various dialects) +{% endblock %} + +{% block assembly_link_text %} + assembly (ARM, x86 in Intel syntax) +{% endblock %} + +{% block content %} + {% call section() %} + {% call aside() %} + The formal, PDF version of the Curriculum Vitae can be found + {{ link('/static/cv-formal-en.pdf', 'here') }}. + {% endcall %} + {% endcall %} + + {% call section('edu') %} + {{ header(2, 'Education') }} + + {% call descriptions() %} + {{ desc_term('2017-2021') }} + {% call desc_desc() -%} + Informatics, stationary studies, + {{ link('https://en.wikipedia.org/wiki/AGH_University_of_Science_and_Technology', 'AGH') }} + in Krak贸w, IEiT faculty + {%- endcall %} + {% endcall %} + {% endcall %} + + {% call section('achievements') %} + {{ header(2, 'Achievements') }} + + {% call descriptions() %} + {{ desc_term('2014') }} + {% call desc_desc() %} + {{ link('https://omj.edu.pl/laureaci-ix', 'Laureate') }} of the 9th + {% call link('https://om.edu.pl/omg/') -%} + Math Olympics for Secondary School Students + {%- endcall %} + {% endcall %} + + {{ desc_term('2017') }} + {% call desc_desc() %} + {{ link('https://www.kgof.edu.pl/archiwum/66/of66-3-laureaci.pdf', 'Laureate') }} + of the 66th {{ link('https://www.kgof.edu.pl/', 'Physics Olympics') }} + {% endcall %} + + {{ desc_term('2017') }} + {% call desc_desc() %} + {{ link('https://om.mimuw.edu.pl/previous_olympiads/68', 'Finalist') }} + of the 68th {{ link('https://om.edu.pl/', 'Math Olympics') }} + {% endcall %} + + {{ desc_term('2021') }} + {% call desc_desc() %} + {{ link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html', 'Fight') }} + for the ability to study using libre software, concluded with successful + BSc thesis defence with a "very good" final grade + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('skills') %} + {{ header(2, 'Knowledge of technologies') }} + + {% call para() %} + Speaks (best learned towards the top) + {% endcall %} + + {{ speaks_list() }} + + {% call para() %} + I can also learn almost any programming language in ~20 minutes + {{ unicode(128521) }} + {% endcall %} + + {% call para() %} + I am experienced in + {% endcall %} + + {% call unordered_list() %} + {% call list_entry() %} + administering UNIX-like systems (e.g. Debian GNU/Linux) + {% endcall %} + + {% call list_entry() %} + low-level programming, bare-metal, embedded + systems{{ gitlink(*embeds_project_ids)}} + {% endcall %} + + {% call list_entry() %} + networking facilities offered by the Linux + kernel{{ gitlink(*networking_project_ids) }} + {% endcall %} + + {% call list_entry() %} + Make tool{{ gitlink(*make_project_ids) }} + {% endcall %} + + {% call list_entry() %} + Git tool + {% endcall %} + + {% call list_entry() %} + practical applications of cryptographic tools + {% endcall %} + + {% call list_entry() %} + crafting of lightweight, ethical websites + {% endcall %} + + {% call list_entry() %} + libre software licenses + {% endcall %} + + {% call list_entry() %} + cross-compilation{{ gitlink(*xcc_project_ids) }} + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('rest') %} + {{ header(2, 'Others') }} + + {% call unordered_list() %} + {% call list_entry() %} + english language at level C1 + {% endcall %} + {% call list_entry() %} + polish language (native) + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('freesw-only') %} + {{ header(2, 'Libre software at work') }} + + {% call para() %} + I am open for ethical contracts and job offers that do not involve + proprietary software development nor a non-disclosure agreement. In case + of doubt + {{ link('mailto:koszko@koszko.org', 'I am answering questions') }}. + {% endcall %} + {% endcall %} + + {% call section('contact') %} + {{ header(2, 'Contact') }} + + {{ contact_info() }} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/en/koszko.html.jinja b/src/koszko_org_website/templates/en/koszko.html.jinja new file mode 100644 index 0000000..23bc321 --- /dev/null +++ b/src/koszko_org_website/templates/en/koszko.html.jinja @@ -0,0 +1,157 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website personal page (english). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "koszko.html.jinja" %} + +{% block title %} Wojtek {% endblock %} + +{% block subheading_text %} personal site {% endblock %} + +{% set include_not_facebookd = true %} + +{% block to_freesw_hackers %} + {% call para() %} + You want people to appreciate libre software and choose it, for their own + good and society's? You consider hurtful that most people are very + irresponsible and in every field rely on proprietary tools, without showing + even a tiny bit of initiative to verify whether those are truly good for + them? Perhaps you also met with snubbing of logical argumentation? + {% endcall %} + {% call para() %} + Many catholics feel likewise seeing people leaving Church and dedicated + atheists responding to any miracle reports with conspiracy theories to + undermine them. And we just want good for you -{{ nbsp() }}so that you can + be truly happy and -{{ nbsp() }}put simply -{{ nbsp() }}eventually be + salvated. + {% endcall %} + {% call para() %} + Friends, show the life responsibility we expect from others and seriously + verify if, perhaps, what Church has been saying for 2000 years + is {{ bold('true') }}. + {% endcall %} +{% endblock %} + +{% block to_christians %} + {% call para() %} + As christians we strive to live well and responsibly. As christians we + consider sharing a good thing. Have you heard of free/libre software? It is + a concept that should be extremely popular among christians. But currently + this is not the case. Why most of us are not trying to build a responsible + society that would utilize technology in a sensible manner so that it is + being controlled by human and not the opposite? Why instead of encouraging + others to share code catholics so often release their own as proprietary, + resulting in its user being thrown on their mercy? + {% endcall %} + {% call para() %} + We don't like ignoring? Let's not ignore by ourselves. Snubbing is bad? Let + us not snub. We want the Church to be independent? Then shall we in the + first place stop relying on devices, software and services which take away + freedom. + {% endcall %} +{% endblock %} + +{% block use_internet_if_needed %} + {% call para() %} + I've been told the above is too general and someone who's not aware of what + I wrote about shall not understand it. If you indeed have no idea what I + wrote about, feel free to utilize a search engine and/or Wikipedia to learn + more. + {% endcall %} +{% endblock %} + +{% block content %} + {% call section('contact') %} + {{ header(2, 'Contact') }} + + {% call descriptions() %} + {{ desc_term('Tel.:') }} + {{ desc_desc('(+48) 12 350 64 74') }} + + {{ desc_term('Email:') }} + {% call desc_desc() -%} + {{ link('mailto:koszko@koszko.org', 'koszko@koszko.org') }} + {%- endcall %} + {% endcall %} + {% endcall %} + + {% call section('pubkeys') %} + {{ header(2, 'Public keys') }} + + {% call unordered_list() %} + {% call list_entry() %} + {{ link('/static/key.gpg', 'PGP') }} + + {% call unordered_list() %} + {% call list_entry() %} + {% call link('/static/key.gpg.sig') -%} + PGP key signature made with signify key + {%- endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + + {% call list_entry() %} + {{ link('/static/key.pub', 'signify') }} + + {% call unordered_list() %} + {% call list_entry() %} + {% call link('/static/key.pub.asc') -%} + signify key signature made with PGP key + {%- endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('portal') %} + {{ header(2, 'Portal') }} + + {% call para() %} + This portal of mine is online since april 2021. Sites comprising it are + listed below. + {% endcall %} + + {% call descriptions() %} + {% call desc_term() -%} + {{ link(same_lang_url('koszko.html'), 'koszko.org/koszko.html') }} + {%- endcall %} + - + {{ desc_desc('my personal website (you\'re viewing it)') }} + + {% call desc_term() -%} + {{ link('https://pray.koszko.org', 'pray.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('prayer sheets website') }} + + {% call desc_term() -%} + {{ link('https://sheets.koszko.org', 'sheets.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('world changing sheets website') }} + + {% call desc_term() -%} + {{ link('https://haketilo.koszko.org', 'haketilo.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('Haketilo proxy website') }} + + {% call desc_term() -%} + {{ link('https://git.koszko.org', 'git.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('my repositories') }} + {% endcall %} + {% endcall %} + + {% call section('request') %} + {{ header(2, 'Personal statement') }} + + {{ request_table() }} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/en/prima_aprilis.html.jinja b/src/koszko_org_website/templates/en/prima_aprilis.html.jinja new file mode 100644 index 0000000..d361f4f --- /dev/null +++ b/src/koszko_org_website/templates/en/prima_aprilis.html.jinja @@ -0,0 +1,20 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website Prima Aprilis page (polish). + +Copyright (C) 2022 Wojtek Kosior +#} +{% extends "__koszko_base.html.jinja" %} + +{% block title %} April Fools! {% endblock %} + +{% block header %} + {{ header(1, 'April Fools!') }} +{% endblock %} + +{% block content %} + {% call para() %} + {{ unicode(128521) }} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/en/qr.html.jinja b/src/koszko_org_website/templates/en/qr.html.jinja new file mode 100644 index 0000000..1fe1545 --- /dev/null +++ b/src/koszko_org_website/templates/en/qr.html.jinja @@ -0,0 +1,28 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website QR code easter egg page (english). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__campaign_base.html.jinja" %} + +{% block title %} Easter eggs {% endblock %} + +{% block content %} + {{ header(1, 'QR code') }} + + {% call section() %} + {% call para() %} + So you scanned the QR code? You'll see something cool then. + {% endcall %} + + {% set alt_text = 'photo of Easter eggs lying on the grass' %} + {{ img('/static/easter-eggs.jpg', alt_text) }} + + {% call para() %} + You can now move to {{ link(same_lang_url(''), 'the target page') }} + {{ unicode(128578) }} + {% endcall %} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/koszko.html.jinja b/src/koszko_org_website/templates/koszko.html.jinja new file mode 100644 index 0000000..4253329 --- /dev/null +++ b/src/koszko_org_website/templates/koszko.html.jinja @@ -0,0 +1,66 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website personal page stub. + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__koszko_base.html.jinja" %} + +{% block style %} + {{ super() }} + + #request_table thead, #request_table tbody { + vertical-align: top; + } + + @media (max-width: 500px) { + #request_table { + font-size: 80%; + } + } + + col { + width: 50%; + } +{% endblock %} + +{% macro request_table() %} + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {{ _('koszko.th:to_freesw_hackers') }}{{ _('koszko.th:to_christians') }}
    {{ _('koszko.td:nonbelievers') }}{{ _('koszko.td:choosing_proprietary_programs') }}
    + {% block to_freesw_hackers %} + {% endblock %} + + {% block to_christians %} + {% endblock %} +
    {{ _('koszko.td:please') }}
    + {% block use_internet_if_needed %} + {% endblock %} +
    +{% endmacro %} diff --git a/src/koszko_org_website/templates/pl/__footer.html.jinja b/src/koszko_org_website/templates/pl/__footer.html.jinja new file mode 100644 index 0000000..6dbb419 --- /dev/null +++ b/src/koszko_org_website/templates/pl/__footer.html.jinja @@ -0,0 +1,30 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +Footer text of the koszko.org website pages (polish). + +Copyright (C) 2022 Wojtek Kosior +#} + +{% call para(ensure_containing_section=false) %} + Ta strona wykorzystuje stylowanie + {{ link('https://purecss.io/', 'PureCSS') }} + oraz {{ link('https://github.com/necolas/normalize.css', 'Normalize CSS') }} + dost臋pne odpowiednio na + {{ link('/static/yahoo-bsd-license.txt', 'Licencji BSD Yahoo') }} + i{{ nbsp() }} + {%- call link('/static/normalize-mit-license.txt') -%} + licencji w{{ nbsp() }}stylu X11 + {%- endcall %}. +{% endcall %} + +{% block extra_footer_copyright_info %} +{% endblock %} + +{% call para(ensure_containing_section=false) %} + Reszta jest autorstwa {{ link(same_lang_url('koszko.html'), 'Wojtka') }}, + dost臋pna + {{ link('https://git.koszko.org/koszko-org-website/', 'tutaj') }} + na warunkach + {{ link('/static/cc0-1.0.txt', 'CC0') }}. +{% endcall %} diff --git a/src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja b/src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja new file mode 100644 index 0000000..9736f9f --- /dev/null +++ b/src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja @@ -0,0 +1,17 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +Footer text of the koszko.org website qr page (polish). + +Copyright (C) 2022 Wojtek Kosior +#} +{% extends 'pl/__footer.html.jinja' %} + +{% block extra_footer_copyright_info %} + {% call para(ensure_containing_section=false) %} + Zdj臋cie Jajeczek wielkanocnych zosta艂o zaczerpni臋te + z{{ nbsp() }}{{ link('https://commons.wikimedia.org/wiki/File:20110423_Easter_eggs_(3).jpg', 'Wikimedia Commons') }} + i{{ nbsp() }}jest dost臋pne na licencji + {{ link('/static/cc-by-3.0.txt', 'CC BY 3.0 Unported') }}. + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/pl/__index.html.jinja b/src/koszko_org_website/templates/pl/__index.html.jinja new file mode 100644 index 0000000..59b33e0 --- /dev/null +++ b/src/koszko_org_website/templates/pl/__index.html.jinja @@ -0,0 +1,175 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website start page (english). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__index.html.jinja" %} + +{% block title %} Wolne programy {% endblock %} + +{% block content %} + {{ header(1, 'Kampania na rzecz wolnego oprogramowania') }} + + {% call section('what-software') %} + {{ header(2, 'Jakiego oprogramowania?') }} + + {% call para() %} + Wolny program to taki, kt贸ry u偶ytkownik ma mo偶liwo艣膰 u偶ywa膰 + w{{ nbsp() }}dowolnym celu, modyfikowa膰 w{{ nbsp() }}postaci kodu + 藕r贸d艂owego i{{ nbsp() }}rozpowszechnia膰 dalej, r贸wnie偶 + w{{ nbsp() }}celach komercyjnych. Przyk艂adami s膮 system operacyjny + GNU/Linux, VLC media player, GIMP, LibreOffice, WordPress, + a{{ nbsp() }}tak偶e (za wyj膮tkiem niekt贸rych komponent贸w): przegl膮darka + Firefox, system Android i{{ nbsp() }}przegl膮darka Chromium. Program, + kt贸rego z powod贸w prawnych lub technicznych u偶ytkownik nie mo偶e + modyfikowa膰 lub rozpowszechnia膰, nazywamy w艂asno艣ciowym lub niewolnym. + {% endcall %} + {% endcall %} + + {% call section('who-needs-this') %} + {{ header(2, 'Komu to potrzebne?') }} + + {% call para() %} + Wolny program daje u偶ytkownikowi kontrol臋. Komputer to przydatne + urz膮dzenie, kt贸re jednak samo z{{ nbsp() }}siebie nic nie robi. Do + dzia艂ania potrzebuje programu. Tylko po艣rednio, za po艣rednictwem programu, + u偶ytkownik jest w stanie kontrolowa膰 sw贸j komputer. Je艣li uruchamiany + program jest wolny, u偶ytkownik ma kontrol臋 nad nim i{{ nbsp() }}przez to + nad komputerem. Z{{ nbsp() }}kolei nad w艂asno艣ciowym programem w艂adz臋 + sprawuje jego wydawca (lub m贸wi膮c w 100% 艣ci艣le - podmiot maj膮cy kod + 藕r贸d艂owy). Taki program robi to, czego chce jego wydawca, przez co tak偶e + i{{ nbsp() }}samo urz膮dzenie robi nie to, czego chce jego w艂a艣ciciel, lecz + to, czego chce wydawca programu. Zamiast porz膮danej sytuacji, + w{{ nbsp() }}kt贸rej u偶ytkownik kontroluje swoje urz膮dzenie, dostajemy + sytuacj臋 odwr贸con膮: wydawca przez program kontroluje u偶ytkownika + i{{ nbsp() }}decyduje, co mo偶e on zrobi膰, a{{ nbsp() }}czego nie. + W{{ nbsp() }}praktyce obserwujemy oczywi艣cie r贸偶ne stopnie z艂ego + traktowania u偶ytkownik贸w. Jednym ze skrajnych przypadk贸w jest system + operacyjny umo偶liwiajacy instalowanie wy艂膮cznie tych aplikacji, kt贸re + zaaprobowa艂 jego wydawca. + {% endcall %} + + {% call para() %} + Ka偶demu powinno zale偶e膰 na u偶ywaniu wolnych program贸w, bo dobrze jest m贸c + sprawowa膰 kontrol臋 nad swoimi urz膮dzeniem. Sprawa nie ogranicza si臋 jednak + do osobistych preferencji. Im wi臋cej os贸b w{{ nbsp() }}spo艂ecze艅stwie + polega na w艂asno艣ciowych, niekompatybilnych narz臋dziach, tym ci臋偶ej jest + 偶y膰 tym, kt贸rzy chc膮 wybiera膰 wolne. + {% endcall %} + + {% call para() %} + Warto te偶 popatrze膰 na problem w{{ nbsp() }}wi臋kszej skali. Pa艅stwo, + w{{ nbsp() }}kt贸rym w{{ nbsp() }}powszechnym u偶yciu s膮 w艂asno艣ciowe + programy, nie jest w pe艂ni niepodleg艂e - podlega po艣rednio wydawcom tych + program贸w. Z{{ nbsp() }}tego powodu poczucie odpowiedzialno艣ci za kraj + wi膮偶e si臋 z{{ nbsp() }}d膮偶eniem do tego, aby gospodarka + i{{ nbsp() }}edukacja nie opiera艂y si臋 na w艂asno艣ciowym systemie + operacyjnym czy narz臋dziach. + {% endcall %} + {% endcall %} + + {% call section('how-this-matters-to-non-programmers') %} + {% call header(2) %} + Jakie to wszystko ma znaczenie dla kogo艣, kto nie umie programowa膰? + {% endcall %} + + {% call para() %} + Nie trzeba by膰 programist膮, 偶eby m贸c korzysta膰 z{{ nbsp() }}kontroli, jak膮 + daj膮 wolne programy. Cz臋sto gdy kierunek rozwoju wolnego programu jest z艂y + (np. dodawane s膮 antyfunkcjonalno艣ci jak telemetria + w{{ nbsp() }}Firefoksie), znajduj膮 si臋 osoby ch臋tne do opracowania wersji + programu niezawieraj膮cej tych wad (przyk艂adem jest przegl膮darka + {{ link('https://librewolf-community.gitlab.io/', 'LibreWolf') }}. + Wystarczy, 偶e pojawi si臋 wystarczaj膮ce zapotrzebowanie na odmienn膮 + wersj臋 jakiego艣 wolnego programu. Z{{ nbsp() }}kolei z{{ nbsp() }}punktu + widzenia przedsi臋biorcy sensown膮 opcj膮 bywa zatrudnienie kogo艣, kto + przystosuje wolny program do cel贸w firmy. + {% endcall %} + {% endcall %} + + {% call section('how-is-moneymaking-affected') %} + {% call header(2) %} + Czy to znaczy, 偶e programi艣ci nie powinni zarabia膰 na pisaniu program贸w? + {% endcall %} + + {% call para() %} + Uto偶samianie wolnego programu z{{ nbsp() }}darmowym, + a{{ nbsp() }}w艂asno艣ciowego z{{ nbsp() }}p艂atnym to bardzo cz臋ste + nieporozumienie. W{{ nbsp() }}rzeczywisto艣ci programy w艂asno艣ciowe cz臋sto + s膮 darmowe (Adobe Reader, przegl膮darka Chrome, Google Docs), + a{{ nbsp() }}wolne narz臋dzia mog膮 by膰 dystrybuowane odp艂atnie + (np. komercyjne dystrybucje GNU/Linuksa). Wiele os贸b + z{{ nbsp() }}programowaniem kojarzy model biznesowy, w{{ nbsp() }}kt贸rym + klientowi sprzedawana jest licencja na u偶ywanie w艂asno艣ciowego + programu. Poniewa偶 taki model jest mniej op艂acalny w{{ nbsp() }}przypadku + wolnych program贸w, niekt贸rzy my艣l膮, 偶e na ich tworzeniu wcale nie mo偶na + zarobi膰. Tymczasem wi臋kszo艣膰 kodu - zar贸wno wolnego, jak + i{{ nbsp() }}w艂asno艣ciowego - nie jest pisana w{{ nbsp() }}celu sprzeda偶y + licencji na jego u偶ywanie. Dochody s膮 cz臋sto czerpane z innych 藕r贸de艂, + np. ze sprzeda偶y us艂ug i{{ nbsp() }}sprz臋tu, z{{ nbsp() }}kt贸rymi program + wsp贸艂pracuje. + {% endcall %} + {% endcall %} + + {% call section('how-it-started') %} + {{ header(2, 'Kto to wszystko wykmini艂?') }} + + {% call para() %} + W{{ nbsp() }}1983-cim roku + {% call link('https://pl.wikipedia.org/wiki/Richard_Stallman') -%} + Richard Stallman + {%- endcall %}, + Naukowiec z{{ nbsp() }} + {%- call link('https://pl.wikipedia.org/wiki/Massachusetts_Institute_of_Technology') -%} + MIT + {%- endcall %}, + zapocz膮tkowa艂 {{ link('https://www.gnu.org/', 'projekt GNU') }} maj膮cy na + celu stworzenie wolnego zamiennika dla w艂asno艣ciowego systemu UNIX. 2 lata + p贸藕niej za艂o偶y艂 w Bostonie + {% call link('https://www.fsf.org/') -%} + Fundacj臋 Wolnego Oprogramowania (FSF) + {%- endcall %} + zajmuj膮c膮 si臋 do teraz promowaniem i{{ nbsp() }}rozwojem tych idei. + {% endcall %} + {% endcall %} + + {% call section('how-to-come-to-the-good-side') %} + {{ header(2, 'Jak przej艣膰 na dobr膮 stron臋?') }} + + {% call para() %} + Pom贸c mo偶na na wiele sposob贸w. Na przyk艂ad + {% endcall %} + + {% call unordered_list() %} + {% call list_entry() %} + u偶ywaj膮c na co dzie艅 wolnych program贸w, + {% endcall %} + {% call list_entry() %} + u艣wiadamiaj膮c innych o{{ nbsp() }}problemie (mo偶na linkowa膰 t膮 stron臋), + {% endcall %} + {% call list_entry() %} + na miar臋 swoich mo偶liwo艣ci odmawiaj膮c u偶ywania w艂asno艣ciowych narz臋dzi, + {% endcall %} + {% call list_entry() %} + apeluj膮c do tw贸rc贸w w艂asno艣ciowych program贸w o{{ nbsp() }}udost臋pnienie + ich kodu na wolnej licencji, + {% endcall %} + {% call list_entry() %} + apeluj膮c do os贸b zarz膮dzaj膮cych r贸偶norakimi organizacjami i{{ nbsp() }} + plac贸wkami o艣wiatowymi o{{ nbsp() }}wprowadzenie do u偶ytku wolnego + systemu operacyjnego i{{ nbsp() }}narz臋dzi, + {% endcall %} + {% call list_entry() %} + apeluj膮c do polityk贸w stanowienie przepis贸w sprzyjaj膮cych wolnemu + oprogramowaniu (np. uczynienie dost臋pnym na wolnej licencji kodu + pisanego za pieni膮dze publiczne) oraz + {% endcall %} + {% call list_entry() %} + przekazuj膮c {{ link('https://my.fsf.org/join', 'darowizn臋 na FSF') }} + lub r贸偶ne projekty tworz膮ce wolne programy. + {% endcall %} + {% endcall %} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/pl/author.html.jinja b/src/koszko_org_website/templates/pl/author.html.jinja new file mode 100644 index 0000000..041f096 --- /dev/null +++ b/src/koszko_org_website/templates/pl/author.html.jinja @@ -0,0 +1,36 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website "about author" page (polish). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__campaign_base.html.jinja" %} + +{% block title %} Autor kampani {% endblock %} + +{% block content %} + {% call header(1) %} + O{{ nbsp() }}autorze kampani + {% endcall %} + + {% call section() %} + {% call para() %} + + Nazywam si臋 Wojciech Kosior. Jestem (jak mo偶na si臋 domy艣li膰) zwolennikiem + wolnego oprogramowania i{{ nbsp()}}(o{{ nbsp()}}czym by膰 mo偶e nie wiesz) + katolikiem. W{{ nbsp()}}2021-wszym roku + {% call link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html') -%} + obroni艂em + {%- endcall %} + prac臋 in偶yniersk膮 z{{ nbsp()}}informatyki na AGH w{{ nbsp()}}Krakowie. + Obecnie staram si臋 sk艂oni膰 ludzi do zatroszczenia si臋 bardziej + o{{ nbsp()}}w艂asn膮 wolno艣膰 cyfrow膮. + {% endcall %} + + {% call para() %} + Mo偶esz znale藕膰 wi臋cej informacji na + {{ link(same_lang_url('koszko.html'), 'mojej stronie domowej') }}. + {% endcall %} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/pl/cv.html.jinja b/src/koszko_org_website/templates/pl/cv.html.jinja new file mode 100644 index 0000000..15a0177 --- /dev/null +++ b/src/koszko_org_website/templates/pl/cv.html.jinja @@ -0,0 +1,159 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website CV page (polish). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "cv.html.jinja" %} + +{% block lisp_entry_text %} + Lisp (elementy z r贸偶nych dialekt贸w) +{% endblock %} + +{% block assembly_link_text %} + assemblery (ARM, x86 w{{ nbsp() }}sk艂adni Intela) +{% endblock %} + +{% block content %} + {% call section() %} + {% call aside() %} + Formaln膮 wersj臋 Curriculum Vitae w formacie PDF znajdziesz + {{ link('/static/cv-formal-pl.pdf', 'tutaj') }}. + {% endcall %} + {% endcall %} + + {% call section('edu') %} + {{ header(2, 'Edukacja') }} + + {% call descriptions() %} + {{ desc_term('2017-2021') }} + {% call desc_desc() -%} + Informatyka, studia dzienne, + {{ link('https://pl.wikipedia.org/wiki/Akademia_G%C3%B3rniczo-Hutnicza_im._Stanis%C5%82awa_Staszica_w_Krakowie', 'AGH') }} + w Krakowie, wydzia艂 IEiT + {%- endcall %} + {% endcall %} + {% endcall %} + + {% call section('achievements') %} + {{ header(2, 'Osi膮gni臋cia') }} + + {% call descriptions() %} + {{ desc_term('2014') }} + {% call desc_desc() %} + {{ link('https://omj.edu.pl/laureaci-ix', 'Laureat') }} 9. + {% call link('https://om.edu.pl/omg/') -%} + Olimpiady Matematycznej Gimnazjalist贸w + {%- endcall %} + {% endcall %} + + {{ desc_term('2017') }} + {% call desc_desc() %} + {{ link('https://www.kgof.edu.pl/archiwum/66/of66-3-laureaci.pdf', 'Laureat') }} + 66. {{ link('https://www.kgof.edu.pl/', 'Olimpiady Fizycznej') }} + {% endcall %} + + {{ desc_term('2017') }} + {% call desc_desc() %} + {{ link('https://om.mimuw.edu.pl/previous_olympiads/68', 'Finalista') }} + 68. {{ link('https://om.edu.pl/', 'Olimpiady Matematycznej') }} + {% endcall %} + + {{ desc_term('2021') }} + {% call desc_desc() %} + {{ link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html', 'Walka') }} + o mo偶liwo艣膰 studiowania przy u偶yciu wolnego oprogramowania zwie艅czona + uko艅czeniem studi贸w in偶ynierskich z{{ nbsp() }}wynikiem "bardzo dobry" + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('skills') %} + {{ header(2, 'Znajomo艣膰 technologii') }} + + {% call para() %} + M贸wi臋 j臋zykami (najlepiej poznane u{{ nbsp() }}g贸ry) + {% endcall %} + + {{ speaks_list() }} + + {% call para() %} + Dodatkowo mog臋 nauczy膰 si臋 prawie ka偶dego j臋zyka programowania + w{{ nbsp() }}~20 minut {{ unicode(128521) }} + {% endcall %} + + {% call para() %} + Znam si臋 na + {% endcall %} + + {% call unordered_list() %} + {% call list_entry() %} + administrowaniu systememami UNIXopodobnymi (e.g. Debian GNU/Linux) + {% endcall %} + + {% call list_entry() %} + programowaniu niskopoziomowym, bare-metal'u, systemach + wbudowanych{{ gitlink(*embeds_project_ids)}} + {% endcall %} + + {% call list_entry() %} + mechanizmach sieciowych udost臋pnianych przez j膮dro + Linux{{ gitlink(*networking_project_ids) }} + {% endcall %} + + {% call list_entry() %} + narz臋dziu Make{{ gitlink(*make_project_ids) }} + {% endcall %} + + {% call list_entry() %} + narz臋dziu Git + {% endcall %} + + {% call list_entry() %} + praktycznym zastosowaniu narz臋dzi kryptograficznych + {% endcall %} + + {% call list_entry() %} + tworzeniu lekkich, etycznych stron internetowych + {% endcall %} + + {% call list_entry() %} + licencjach wolnego oprogramowania + {% endcall %} + + {% call list_entry() %} + kompilacji skro艣nej{{ gitlink(*xcc_project_ids) }} + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('rest') %} + {{ header(2, 'Pozosta艂e') }} + + {% call unordered_list() %} + {% call list_entry() %} + znajomo艣膰 j臋zyka angielskiego na poziomie C1 + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('freesw-only') %} + {{ header(2, 'Wolne oprogramowanie w pracy') }} + + {% call para() %} + + Jestem otwarty na zlecenia i{{ nbsp() }}oferty etycznej pracy, czyli + w{{ nbsp() }}szczeg贸lno艣ci takiej, w{{ nbsp() }}ramach kt贸rej nie rozwija + si臋 w艂asno艣ciowego oprogramowania i{{ nbsp() }}nie wymaga si臋 klauzuli + o{{ nbsp() }}poufno艣ci. W{{ nbsp() }}razie w膮tpliwo艣ci + {{ link('mailto:koszko@koszko.org', 'odpowiadam na pytania') }}. + {% endcall %} + {% endcall %} + + {% call section('contact') %} + {{ header(2, 'Kontakt') }} + + {{ contact_info() }} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/pl/koszko.html.jinja b/src/koszko_org_website/templates/pl/koszko.html.jinja new file mode 100644 index 0000000..1fd1b05 --- /dev/null +++ b/src/koszko_org_website/templates/pl/koszko.html.jinja @@ -0,0 +1,162 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website personal page (polish). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "koszko.html.jinja" %} + +{% block title %} Wojtek {% endblock %} + +{% block subheading_text %} strona domowa {% endblock %} + +{% set include_not_facebookd = true %} + +{% block to_freesw_hackers %} + {% call para() %} + Chcecie, 偶eby ludzie doceniali i{{ nbsp() }}wybierali wolne programy, dla + dobra ich i{{ nbsp() }}spo艂ecze艅stwa? Uwa偶acie za przykre, 偶e wi臋kszo艣膰 + os贸b jest bardzo nieodpowiedzialna i{{ nbsp() }}polega w{{ nbsp() }}ka偶dej + dziedzinie na w艂asno艣ciowych narz臋dziach, nie okazuj膮c ani odrobiny + inicjatywy, 偶eby si臋 przekona膰, czy na pewno s膮 dla nich lepsze? Mo偶e te偶 + spotkali艣cie si臋 z{{ nbsp() }}olewaniem logicznych argument贸w? + {% endcall %} + {% call para() %} + Wielu katolik贸w czuje si臋 podobnie widz膮c ludzi odchodz膮cych od Ko艣cio艂a + oraz zagorza艂ych ateist贸w w{{ nbsp() }}odpowiedzi na wszelkie doniesienia + o{{ nbsp() }}cudach wymy艣laj膮cych teorie spiskowe dla ich podwa偶enia. A{{ + nbsp() }}my przecie偶 chcemy dla Was dobrze - 偶eby艣cie byli naprawd臋 + szcz臋艣liwi i{{ nbsp() }}-{{ nbsp() }}m贸wi膮c prosto -{{ nbsp() }}zbawili si臋. + {% endcall %} + {% call para() %} + Przyjaciele, oka偶cie tak膮 odpowiedzialno艣膰 偶yciow膮, jakiej oczekujemy od + innych i{{ nbsp() }}na powa偶nie zweryfikujcie czy to, co Ko艣ci贸艂 g艂osi od + 2000 lat, przypadkiem nie jest {{ bold('prawd膮') }}. + {% endcall %} +{% endblock %} + +{% block to_christians %} + {% call para() %} + Jako chrze艣cijanie staramy si臋 偶y膰 dobrze i{{ nbsp() }}odpowiedzialnie. + Jako chrze艣cijanie uznajemy dzielenie si臋 z{{ nbsp() }}innymi za co艣 + dobrego. S艂yszeli艣cie o{{ nbsp() }}wolnym oprogramowaniu? Na logik臋 to + jest co艣, co powinno si臋 cieszy膰 ogromn膮 popularno艣ci膮 w艣r贸d + chrze艣cijan. Tymczasem tak nie jest. Dlaczego wi臋kszo艣膰 z{{ nbsp() }}nas nie + stara si臋 budowa膰 spo艂ecze艅stwa odpowiedzialnego, kt贸re technologii + u偶ywa艂oby w{{ nbsp() }}rozs膮dny spos贸b, tak, 偶eby by艂a ona kontrolowana + przez cz艂owieka, a{{ nbsp() }}nie na odwr贸t? Dlaczego zamiast zach臋ca膰 + innych do dzielenia si臋 swoim kodem, katolicy tak cz臋sto sami sw贸j kod + udost臋pniaj膮 jako w艂asno艣ciowy, przez co jego u偶ytkownik jest ca艂kowicie + zdany na ich 艂ask臋? + {% endcall %} + {% call para() %} + Nie lubimy ignorowania? To i{{ nbsp() }}my nie ignorujmy. Lekcewa偶enie jest + z艂e? Wi臋c i{{ nbsp() }}my nie lekcewa偶my. Chcemy, 偶eby nasze Pa艅stwo by艂o + niepodleg艂e a{{ nbsp() }}Ko艣cio艂 niezale偶ny? To w{{ nbsp() }}pierwszej + kolejno艣ci my przestawajmy polega膰 na urz膮dzeniach, programach i{{ nbsp() + }}serwisach, kt贸re odbieraj膮 wolno艣膰. + {% endcall %} +{% endblock %} + +{% block use_internet_if_needed %} + {% call para() %} + Powiedziano mi, 偶e powy偶sze jest zbyt og贸lnikowe i{{ nbsp() }}kto艣, kto nic + nie wie, niczego nie zrozumie. Je艣li faktycznie nie masz poj臋cia, + o{{ nbsp() }}czym tutaj napisa艂em, mo偶esz skorzysta膰 z wyszukiwarki + internetowej i/lub Wikipedii, 偶eby dowiedzie膰 si臋 wi臋cej. + {% endcall %} +{% endblock %} + +{% block content %} + {% call section('contact') %} + {{ header(2, 'Kontakt') }} + + {% call descriptions() %} + {{ desc_term('Tel.:') }} + {{ desc_desc('(+48) 12 350 64 74') }} + + {{ desc_term('Email:') }} + {% call desc_desc() -%} + {{ link('mailto:koszko@koszko.org', 'koszko@koszko.org') }} + {%- endcall %} + {% endcall %} + {% endcall %} + + {% call section('pubkeys') %} + {{ header(2, 'Klucze publiczne') }} + + {% call unordered_list() %} + {% call list_entry() %} + {{ link('/static/key.gpg', 'PGP') }} + + {% call unordered_list() %} + {% call list_entry() %} + {% call link('/static/key.gpg.sig') -%} + podpis klucza PGP wykonany kluczem signify + {%- endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + + {% call list_entry() %} + {{ link('/static/key.pub', 'signify') }} + + {% call unordered_list() %} + {% call list_entry() %} + {% call link('/static/key.pub.asc') -%} + podpis klucza signify wykonany kluczem PGP + {%- endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + {% endcall %} + + {% call section('portal') %} + {{ header(2, 'Portal') }} + + {% call para() %} + Niniejszy portal istnieje w{{ nbsp() }}sieci od kwietnia 2021. Wchodz膮ce w + jego sk艂ad strony s膮 wymienione poni偶ej. + {% endcall %} + + {% call descriptions() %} + {% call desc_term() -%} + {{ link(same_lang_url('koszko.html'), 'koszko.org/koszko.html') }} + {%- endcall %} + - + {{ desc_desc('strona domowa (przegl膮dasz j膮)') }} + + {% call desc_term() -%} + {{ link('https://pray.koszko.org', 'pray.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('strona karteczek modlitwy') }} + + {% call desc_term() -%} + {{ link('https://sheets.koszko.org', 'sheets.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('strona karteczek zmieniania 艣wiata') }} + + {% call desc_term() -%} + {{ link('https://haketilo.koszko.org', 'haketilo.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('strona proxy Haketilo') }} + + {% call desc_term() -%} + {{ link('https://git.koszko.org', 'git.koszko.org') }} + {%- endcall %} + - + {{ desc_desc('moje repozytoria') }} + {% endcall %} + {% endcall %} + + {% call section('request') %} + {{ header(2, 'O艣wiadczenie osobiste') }} + + {{ request_table() }} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/pl/prima_aprilis.html.jinja b/src/koszko_org_website/templates/pl/prima_aprilis.html.jinja new file mode 100644 index 0000000..f273f5c --- /dev/null +++ b/src/koszko_org_website/templates/pl/prima_aprilis.html.jinja @@ -0,0 +1,20 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website Prima Aprilis page (polish). + +Copyright (C) 2022 Wojtek Kosior +#} +{% extends "__koszko_base.html.jinja" %} + +{% block title %} Prima Aprilis! {% endblock %} + +{% block header %} + {{ header(1, 'Prima Aprilis!') }} +{% endblock %} + +{% block content %} + {% call para() %} + Uwa偶aj, bo si臋 pomylisz {{ unicode(128521) }} + {% endcall %} +{% endblock %} diff --git a/src/koszko_org_website/templates/pl/qr.html.jinja b/src/koszko_org_website/templates/pl/qr.html.jinja new file mode 100644 index 0000000..92d6652 --- /dev/null +++ b/src/koszko_org_website/templates/pl/qr.html.jinja @@ -0,0 +1,28 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +koszko.org website QR code easter egg page (polish). + +Copyright (C) 2021,2022 Wojtek Kosior +#} +{% extends "__campaign_base.html.jinja" %} + +{% block title %} Jajeczka {% endblock %} + +{% block content %} + {{ header(1, 'Kod QR') }} + + {% call section() %} + {% call para() %} + A{{ nbsp() }}wi臋c zeskanowa艂e艣/a艣 kod QR? Zobaczysz za to co艣 ciekawego. + {% endcall %} + + {% set alt_text = 'zdj臋cie jajeczek wielkanocnych le偶膮cych w trawie' %} + {{ img('/static/easter-eggs.jpg', alt_text) }} + + {% call para() %} + Mo偶esz ju偶 przej艣膰 do {{ link(same_lang_url(''), 'w艂a艣ciwej strony') }} + {{ unicode(128578) }} + {% endcall %} + {% endcall %} +{% endblock %} -- cgit v1.2.3