From 08f4d63f450ccd96f5077bc60774d8f1fecec92c Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Wed, 16 Nov 2022 18:52:53 +0100 Subject: initial commit --- .gitignore | 19 + .reuse/dep5 | 11 + LICENSES/CC-BY-3.0.txt | 93 + LICENSES/CC0-1.0.txt | 121 ++ LICENSES/LicenseRef-Normalize-CSS-MIT.txt | 19 + LICENSES/LicenseRef-Yahoo-BSD-3.txt | 29 + LICENSES/LicenseRef-no-facebook.txt | 2 + MANIFEST.in | 11 + Makefile | 101 + README.md | 10 + README.md.license | 5 + babel.cfg | 10 + bashrc | 15 + guix.scm | 66 + pyproject.toml | 12 + setup.cfg | 72 + setup.py | 64 + 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 + 66 files changed, 6889 insertions(+) create mode 100644 .gitignore create mode 100644 .reuse/dep5 create mode 100644 LICENSES/CC-BY-3.0.txt create mode 100644 LICENSES/CC0-1.0.txt create mode 100644 LICENSES/LicenseRef-Normalize-CSS-MIT.txt create mode 100644 LICENSES/LicenseRef-Yahoo-BSD-3.txt create mode 100644 LICENSES/LicenseRef-no-facebook.txt create mode 100644 MANIFEST.in create mode 100644 Makefile create mode 100644 README.md create mode 100644 README.md.license create mode 100644 babel.cfg create mode 100644 bashrc create mode 100644 guix.scm create mode 100644 pyproject.toml create mode 100644 setup.cfg create mode 100755 setup.py 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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ffe71c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +build +dist +*.egg-info +*.pyc +setuptools +src/koszko_org_website/_version.py +src/koszko_org_website/locales/messages.pot +src/koszko_org_website/static/yahoo-bsd-license.txt +src/koszko_org_website/static/normalize-mit-license.txt +src/koszko_org_website/static/cc0-1.0.txt +src/koszko_org_website/static/cc-by-3.0.txt +messages.mo +*-tarball-repack diff --git a/.reuse/dep5 b/.reuse/dep5 new file mode 100644 index 0000000..fde8f52 --- /dev/null +++ b/.reuse/dep5 @@ -0,0 +1,11 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: koszko.org website +Upstream-Contact: Wojtek Kosior +Source: https://git.koszko.org/koszko-org-website + +Files: src/koszko_org_website/static/key.* + src/koszko_org_website/static/cv-formal-*.pdf + src/koszko_org_website/static/free-program.svg + src/koszko_org_website/static/campaign-favicon.* +Copyright: 2021,2022 Wojtek Kosior +License: CC0-1.0 diff --git a/LICENSES/CC-BY-3.0.txt b/LICENSES/CC-BY-3.0.txt new file mode 100644 index 0000000..465aae7 --- /dev/null +++ b/LICENSES/CC-BY-3.0.txt @@ -0,0 +1,93 @@ +Creative Commons Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + + b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + + c. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + + d. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + + e. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + + f. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + + g. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + + h. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + + i. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + + b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + + c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + + d. to Distribute and Publicly Perform Adaptations. + + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + + ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + + iii. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. + + b. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + + c. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + + b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + + c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + + d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. + + e. This License may not be modified without the mutual written agreement of the Licensor and You. + + f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. + +Creative Commons Notice + +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License. + +Creative Commons may be contacted at http://creativecommons.org/. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/LICENSES/LicenseRef-Normalize-CSS-MIT.txt b/LICENSES/LicenseRef-Normalize-CSS-MIT.txt new file mode 100644 index 0000000..93c1e26 --- /dev/null +++ b/LICENSES/LicenseRef-Normalize-CSS-MIT.txt @@ -0,0 +1,19 @@ +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. diff --git a/LICENSES/LicenseRef-Yahoo-BSD-3.txt b/LICENSES/LicenseRef-Yahoo-BSD-3.txt new file mode 100644 index 0000000..aae45d8 --- /dev/null +++ b/LICENSES/LicenseRef-Yahoo-BSD-3.txt @@ -0,0 +1,29 @@ +Software License Agreement (BSD License) +======================================== + +Copyright 2013 Yahoo! Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the Yahoo! Inc. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/LicenseRef-no-facebook.txt b/LICENSES/LicenseRef-no-facebook.txt new file mode 100644 index 0000000..f31acec --- /dev/null +++ b/LICENSES/LicenseRef-no-facebook.txt @@ -0,0 +1,2 @@ +Copy this button (courtesy of R.Siddharth) to +express your rejection of Facebook. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..6625144 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +include src/koszko_org_website/py.typed +include src/koszko_org_website/locales/*/LC_MESSAGES/messages.po +include src/koszko_org_website/static/* +include **/*.jinja +global-exclude .git .gitignore *.mo diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5498207 --- /dev/null +++ b/Makefile @@ -0,0 +1,101 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +GUIX := guix + +# Almost all commands in this Makefilo are run through `guix time-machine` with +# Guix revision fixed to the one from the commit below. This ensures that the +# same working environment is always used. +GUIX_COMMIT := a86979b41a49a8fcdaa887970ba594dbba701226 + +GUIX_TM = $(GUIX) time-machine --commit=$(GUIX_COMMIT) -- + +GUIX_DEVSHELL = $(GUIX_TM) shell -Df guix.scm -- + +GET_VER = $$(grep '^Version:' src/koszko_org_website.egg-info/PKG-INFO | \ + cut -d' ' -f2) +RECORD_VER = VER="$(GET_VER)" + +DETERMINISTIC_TAR = $(GUIX_TM) shell tar -- tar \ + --mtime='1970-01-01 00:00Z' \ + --sort=name \ + --owner=0 --group=0 --numeric-owner \ + --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime + +DETERMINE_USER_SHELL_TO_USE = \ + case "$$SHELL" in \ + ?*) \ + SHELL_TO_USE="$$SHELL";; \ + *) \ + SHELL_TO_USE="/bin/sh";; \ + esac + +wheel: + $(GUIX_DEVSHELL) python3 -m build + +# Make a source tarball and repack in a deterministic way so that its +# reproducible. +dist src/koszko_org_website/_version.py: + $(GUIX_DEVSHELL) python3 -m build -s + $(RECORD_VER) && \ + RELNAME=koszko_org_website-"$$VER" && \ + DISTFILE=dist/"$$RELNAME".tar.gz && \ + $(MAKE) clean-source-tarball-repack && \ + mkdir source-tarball-repack/ && \ + tar -C source-tarball-repack/ -xf "$$DISTFILE" && \ + $(DETERMINISTIC_TAR) -C source-tarball-repack/ \ + -cf "$$DISTFILE" "$$RELNAME" + @printf "Generated source tarball in:\n" + @printf "./dist/koszko_org_website-$(GET_VER).tar.gz\n" + +# If using bash, modify the prompt to indicate the environment is active. +shell: + $(DETERMINE_USER_SHELL_TO_USE); \ + case "$$SHELL_TO_USE" in \ + *bash*) \ + WEBSITE_SHELL_NAME=koszko.org-website-dev \ + $(GUIX_DEVSHELL) "$$SHELL_TO_USE" \ + --rcfile ./bashrc || true;; \ + *) \ + $(GUIX_DEVSHELL) "$$SHELL_TO_USE" || true;; \ + esac + +catalogs: + $(GUIX_DEVSHELL) python3 setup.py compile_catalog + +refresh-catalogs: + $(GUIX_DEVSHELL) sh -c \ + "python3 setup.py extract_messages && python3 setup.py update_catalog && python3 setup.py compile_catalog" + +copied_license_files: + $(GUIX_DEVSHELL) python3 setup.py copy_licenses + +run-website: src/koszko_org_website/_version.py catalogs copied_license_files + PYTHONPATH=./src $(GUIX_DEVSHELL) python3 -m koszko_org_website + +reuse-lint: + $(GUIX_DEVSHELL) reuse lint + +mypy-lint: src/koszko_org_website/_version.py + PYTHONPATH=./src/ $(GUIX_DEVSHELL) mypy -p koszko_org_website + +clean-source-tarball-repack: + rm -rf source-tarball-repack/ + +clean: clean-source-tarball-repack + rm -rf build/ dist/ src/koszko_org_website.egg-info/ \ + src/koszko_org_website/_version.py \ + src/koszko_org_website/locales/messages.pot \ + $$(grep src/koszko_org_website/static/ .gitignore) \ + .mypy_cache/ + find src/koszko_org_website/locales/ -name "messages.mo" -delete + rm -rf $$(find -name "__pycache__") + +.PHONY: shell \ + wheel dist catalogs copied_license_files \ + run-website refresh-catalogs \ + reuse-lint mypy-lint \ + clean-source-tarball-repack clean diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff770de --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# koszko.org website + +This is the code behind the website at https://koszko.org + +## Copying + +Contents of this repository are Copyright (C) 2022 Wojtek Kosior and others. +The repository is [REUSE](https://reuse.software/)-compliant. Please look at +the SPDX identifiers to determine the licensing of particular files or use the +`reuse spdx` command to get a complete report. diff --git a/README.md.license b/README.md.license new file mode 100644 index 0000000..baf2b81 --- /dev/null +++ b/README.md.license @@ -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/babel.cfg b/babel.cfg new file mode 100644 index 0000000..7bad205 --- /dev/null +++ b/babel.cfg @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +[python: **.py] + +[jinja2: **.html.jinja] +extensions = jinja2.ext.do diff --git a/bashrc b/bashrc new file mode 100644 index 0000000..173e012 --- /dev/null +++ b/bashrc @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +if [ -r /etc/bash.bashrc ]; then + source /etc/bash.bashrc +fi + +if [ -r ~/.bashrc ]; then + source ~/.bashrc +fi + +export PS1="$PS1($WEBSITE_SHELL_NAME)\$ " diff --git a/guix.scm b/guix.scm new file mode 100644 index 0000000..9717135 --- /dev/null +++ b/guix.scm @@ -0,0 +1,66 @@ +;; SPDX-License-Identifier: CC0-1.0 + +;; Copyright (C) 2022 Wojtek Kosior +;; +;; Available under the terms of Creative Commons Zero v1.0 Universal. + +;; This file is based on `hydrilla-guix/hydrilla.scm` from Hydrilla&Haketilo +;; repository at ../pydrilla. + +(use-modules + (ice-9 rdelim) + (ice-9 regex)) + +;; We're mostly running from Makefile, so it's pretty safe to use `getcwd`. +(define %source-dir (getcwd)) + +;; The PKG-INFO file is generated when running `python3 -m build -s` or similar. +;; It is also automatically included in the source release tarballs. +(define %website-version + (if (access? "src/koszko_org_website.egg-info/PKG-INFO" R_OK) + (let* ((port (open-input-file "src/koszko_org_website.egg-info/PKG-INFO")) + (process-line + (lambda (self-ref) + (let ((match-result + (string-match "^Version: (.*)" (read-line port)))) + (if match-result (match:substring match-result 1) + (self-ref self-ref)))))) + (process-line process-line)) + "unknown")) + +(define source-tarball-name + (string-append "koszko_org_website-" %website-version ".tar.gz")) + +(use-modules + (guix packages) + (guix gexp) + (guix build-system python) + ((guix licenses) #:prefix license:) + (gnu packages python-build) + (gnu packages python-web) + (gnu packages python-xyz) + (gnu packages python-check)) + +(package + (name "koszko-org-website") + (version %website-version) + (source + ;; setuptools_scm makes it impossible to build directly from git + ;; checkout. We instead build from source tarball generated under ./dist/. + (local-file (string-append %source-dir "/dist/" source-tarball-name))) + (build-system python-build-system) + (propagated-inputs + (list python-flask)) + (native-inputs + (list python-setuptools-scm + python-babel + python-pypa-build + python-mypy)) + (home-page "https://git.koszko.org/koszko-org-website") + (synopsis "koszko.org website") + (description "This is the packaging of the website at https://koszko.org.") + (license (list license:cc0 + (license:non-copyleft + "file://LICENSES/LicenseRef-Yahoo-BSD-3.txt") + (license:x11-style + "file://LICENSES/LicenseRef-Normalize-CSS-MIT.txt")))) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..6bfb19d --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +[build-system] +build-backend = "setuptools.build_meta" +requires = ["setuptools>=44", "wheel", "setuptools_scm>=5.0", "babel"] + +[tool.setuptools_scm] +write_to = "src/koszko_org_website/_version.py" diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..220d8fe --- /dev/null +++ b/setup.cfg @@ -0,0 +1,72 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +[metadata] +name = koszko_org_website +author = Wojtek Kosior +author_email = koszko@koszko.org +description = koszko.org website +long_description = file: README.md +long_description_content_type = text/markdown +url = https://git.koszko.org/koszko-org-website +keywords = koszko.org +license = CC0-1.0 +classifiers = + Development Status :: 5 - Production/Stable + Intended Audience :: Developers + Environment :: Web Environment + Topic :: Internet :: WWW/HTTP :: WSGI + License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + Natural Language :: English + Natural Language :: Polish + Operating System :: OS Independent + Programming Language :: Python :: 3 :: Only + Private :: Do Not Upload + +[options] +zip_safe = False +package_dir = + = src +packages = find_namespace: +include_package_data=True +python_requires = >= 3.7 +install_requires = + flask>=1.1 + +[options.package_data] +koszko_org_website = + locales/*/LC_MESSAGES/messages.mo + py.typed + **/*.jinja + +[options.packages.find] +where = src + +[extract_messages] +mapping_file = babel.cfg +keywords = _ f_ +add_comments = TRANSLATORS: +width = 80 +input_dirs = src/koszko_org_website +output_file = src/koszko_org_website/locales/messages.pot +msgid_bugs_address = koszko@koszko.org +sort_by_file = True +copyright_holder = Wojtek Kosior + +[init_catalog] +input_file = src/koszko_org_website/locales/messages.pot +output_dir = src/koszko_org_website/locales/ +domain = messages + +[update_catalog] +input_file = src/koszko_org_website/locales/messages.pot +output_dir = src/koszko_org_website/locales/ +domain = messages + +[compile_catalog] +directory = src/koszko_org_website/locales +use_fuzzy = True +domain = messages diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..35683fe --- /dev/null +++ b/setup.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +import setuptools + +from setuptools.command.build_py import build_py +from setuptools.command.sdist import sdist +from setuptools import Command + +from pathlib import Path + + +here = Path(__file__).resolve().parent + + +class CustomBuildCommand(build_py): + """The build command but performs some important tasks before the build.""" + def run(self, *args, **kwargs): + """Wrapper around build_py's original run() method.""" + self.run_command('compile_catalog') + self.run_command('copy_licenses') + + super().run(*args, **kwargs) + + +class CopyLicenseFilesCommand(Command): + """ + Command to copy some resources from beneath `LICENSES/` so that they get + included in the wheel and are accessible to Flask. + """ + user_options = [] + + def run (self, *args, **kwargs): + """Copy the relevant license files""" + import shutil + + static_dir = here / 'src' / 'koszko_org_website' / 'static' + licenses_dir = here / 'LICENSES' + + for in_name, out_name in [ + ('LicenseRef-Yahoo-BSD-3', 'yahoo-bsd-license'), + ('LicenseRef-Normalize-CSS-MIT', 'normalize-mit-license'), + ('CC0-1.0', 'cc0-1.0'), + ('CC-BY-3.0', 'cc-by-3.0') + ]: + shutil.copy( + licenses_dir / f'{in_name}.txt', + static_dir / f'{out_name}.txt' + ) + + def initialize_options(self): + pass + + def finalize_options(self): + pass + +setuptools.setup(cmdclass = { + 'build_py': CustomBuildCommand, + 'copy_licenses': CopyLicenseFilesCommand +}) 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