From 4cee3d251ec7c9eda262a8a303ca43c6cd11e42d Mon Sep 17 00:00:00 2001 From: Justin W. Flory (he/him) [Fedora Project] Date: Nov 03 2021 15:42:16 +0000 Subject: Initial import of docs repo at https://pagure.io/fedora-docs/websites A new baseline of the initial docs website without any changes. Signed-off-by: Justin W. Flory (he/him) [Fedora Project] --- diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 0000000..1495fc1 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,360 @@ +Creative Commons Legal Code + +Attribution-ShareAlike 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 below) for the purposes of this + License. + c. "Creative Commons Compatible License" means a license that is listed + at https://creativecommons.org/compatiblelicenses that has been + approved by Creative Commons as being essentially equivalent to this + License, including, at a minimum, because that license: (i) contains + terms that have the same purpose, meaning and effect as the License + Elements of this License; and, (ii) explicitly permits the relicensing + of adaptations of works made available under that license under this + License or a Creative Commons jurisdiction license with the same + License Elements as this License. + d. "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. + e. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, ShareAlike. + f. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + g. "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. + h. "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. + i. "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. + j. "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. + k. "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(c), 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(c), as requested. + b. You may Distribute or Publicly Perform an Adaptation only under the + terms of: (i) this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible + License. If you license the Adaptation under one of the licenses + mentioned in (iv), you must comply with the terms of that license. If + you license the Adaptation under the terms of any of the licenses + mentioned in (i), (ii) or (iii) (the "Applicable License"), you must + comply with the terms of the Applicable License generally and the + following provisions: (I) You must include a copy of, or the URI for, + the Applicable License with every copy of each Adaptation You + Distribute or Publicly Perform; (II) You may not offer or impose any + terms on the Adaptation that restrict the terms of the Applicable + License or the ability of the recipient of the Adaptation to exercise + the rights granted to that recipient under the terms of the Applicable + License; (III) You must keep intact all notices that refer to the + Applicable License and to the disclaimer of warranties with every copy + of the Work as included in the Adaptation You Distribute or Publicly + Perform; (IV) when You Distribute or Publicly Perform the Adaptation, + You may not impose any effective technological measures on the + Adaptation that restrict the ability of a recipient of the Adaptation + from You to exercise the rights granted to that recipient under the + terms of the Applicable License. This Section 4(b) applies to the + Adaptation as incorporated in a Collection, but this does not require + the Collection apart from the Adaptation itself to be made subject to + the terms of the Applicable License. + c. 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 Ssection 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(c) 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. + d. 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. + e. 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. 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 the License. + + Creative Commons may be contacted at https://creativecommons.org/. + diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..49fb545 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,120 @@ +# Fedora Websites docs + +This repository documentation for maintaining and adding new Fedora websites. + +## Structure + +``` +|-- README.md +|-- antora.yml ....................... 1. +|-- build.sh ......................... 2. +|-- preview.sh ....................... 3. +|-- site.yml ......................... 4. +`-- modules + `-- ROOT ......................... 5. + |-- assets + | `-- images ............... 6. + | `-- pizza.png + |-- nav.adoc ................. 7. + `-- pages .................... 8. + |-- architecture.adoc + |-- community.adoc + |-- faq.adoc + |-- index.adoc + |-- pizza-dough.adoc + `-- pizza-owen.adoc +``` + +1. Metadata definition. +2. A script that does a local build. Uses docker. +3. A script that shows a preview of the site in a web browser by running a local web server. Uses docker. +4. A definition file for the build script. +5. A "root module of this documentation component". Please read below for an explanation. +6. **Images** to be used on any page. +7. **Menu definition.** Also defines the hierarchy of all the pages. +8. **Pages with the actual content.** They can be also organised into subdirectories if desired. + +## Components and Modules + +Antora introduces two new terms: + +* **Component** — Simply put, a component is a part of the documentation website with its own menu. Components can also be versioned. In the Fedora Docs, we use separate components for user documentation, the Fedora Poject, Fedora council, Mindshare, FESCO, but also subprojects such as CommOps or Modulartity. +* **Module** — A component can be broken down into multiple modules. Modules still share a single menu on the site, but their sources can be stored in different git repositories, even owned by different groups. The default module is called "ROOT" (that's what is in this example). If you don't want to use multiple modules, only use "ROOT". But to define more modules, simply duplicate the "ROOT" directory and name it anything you want. You can store modules in one or more git repositories. + +## Local preview + +This repo includes scripts to build and preview the contents of this repository. + +**NOTE**: Please note that if you reference pages from other repositoreis, such links will be broken in this local preview as it only builds this repository. If you want to rebuild the whole Fedora Docs site, please see [the Fedora Docs build repository](https://pagure.io/fedora-docs/docs-fp-o/) for instructions. + +Both scripts work on Fedora (using Podman) and macOS (using Docker). + +To build and preview the site, run: + +``` +$ ./build.sh && ./preview.sh +``` + +The result will be available at http://localhost:8080 + +### Installing Podman on Fedora + +Fedora Workstation doesn't come with Podman preinstalled by default — so you might need to install it using the following command: + +``` +$ sudo dnf install podman +``` + +### Preview as a part of the whole Fedora Docs site + +You can also build the whole Fedora Docs site locally to see your changes in the whole context. +This is especially useful for checking if your `xref` links work properly. + +To do this, you need to clone the main [Fedora Docs build repository](https://pagure.io/fedora-docs/docs-fp-o), modify the `site.yml` file to reference a repo with your changes, and build it. +Steps: + +Clone the main repository and cd into it: + +``` +$ git clone https://pagure.io/fedora-docs/docs-fp-o.git +$ cd docs-fp-o +``` + +Find a reference to the repository you're changing in the `site.yml` file, and change it so it points to your change. +So for example, if I made a modification to the Modularity docs, I would find: + +``` +... + - url: https://pagure.io/fedora-docs/modularity.git + branches: + - master +... +``` + +And replaced it with a pointer to my fork: +``` +... + - url: https://pagure.io/forks/asamalik/fedora-docs/modularity.git + branches: + - master +... +``` + +I could also point to a local repository, using `HEAD` as a branch to preview the what's changed without the need of making a commit. + +**Note:** I would need to move the repository under the `docs-fp-o` directory, because the builder won't see anything above. +So I would need to create a `repositories` directory in `docs-fp-o` and copy my repository into it. + +``` +... + - url: ./repositories/modularity + branches: + - HEAD +... +``` + +To build the whole site, I would run the following in the `docs-fp-o` directory. + +``` +$ ./build.sh && ./preview.sh +``` diff --git a/docs/antora.yml b/docs/antora.yml new file mode 100644 index 0000000..009c240 --- /dev/null +++ b/docs/antora.yml @@ -0,0 +1,16 @@ +# Name will be mostly visible in the URL. Treat it as an indentifier. +# Tip: If you want to use the local preview scripts that come with this repository, please change this value in the site.yml file as well. (under site/start_page) +name: websites + +# Title will be visible on the page. +title: Fedora Websites + +# If you don't plan to have multiple versions of the docs (for example, to document multiple versions of some software), you can ignore this field. Otherwise, change "master" to a specific version. +version: master + +# We encourage you to name the index page as "index.adoc". If you absolutely have to use a different name, please reflect it here. You can ignore this field otherwise. +start_page: ROOT:index + +# This lists all the menu definitions of your component. +nav: +- modules/ROOT/nav.adoc diff --git a/docs/build.sh b/docs/build.sh new file mode 100755 index 0000000..f4ecfe4 --- /dev/null +++ b/docs/build.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +image="docker.io/antora/antora" +cmd="--html-url-extension-style=indexify site.yml" + +if [ "$(uname)" = "Darwin" ]; then + # Running on macOS. + # Let's assume that the user has the Docker CE installed + # which doesn't require a root password. + echo "" + echo "This build script is using Docker container runtime to run the build in an isolated environment." + echo "" + docker run --rm -it -v "$(pwd):/antora" $image $cmd + +elif [ "$(expr substr "$(uname -s)" 1 5)" = "Linux" ]; then + # Running on Linux. + # Check whether podman is available, else fall back to docker + # which requires root. + + if [ -f /usr/bin/podman ]; then + echo "" + echo "This build script is using Podman to run the build in an isolated environment." + echo "" + podman run --rm -it -v "$(pwd):/antora:z" $image $cmd + + elif [ -f /usr/bin/docker ]; then + echo "" + echo "This build script is using Docker to run the build in an isolated environment." + echo "" + + if groups | grep -wq "docker"; then + docker run --rm -it -v "$(pwd):/antora:z" $image $cmd + else + echo "" + echo "This build script is using $runtime to run the build in an isolated environment. You might be asked for your password." + echo "You can avoid this by adding your user to the 'docker' group, but be aware of the security implications. See https://docs.docker.com/install/linux/linux-postinstall/." + echo "" + sudo docker run --rm -it -v "$(pwd):/antora:z" $image $cmd + fi + else + echo "" + echo "Error: Container runtime haven't been found on your system. Fix it by:" + echo "$ sudo dnf install podman" + exit 1 + fi +fi diff --git a/docs/build/site.zip b/docs/build/site.zip new file mode 100644 index 0000000..1d1968e Binary files /dev/null and b/docs/build/site.zip differ diff --git a/docs/cache/ui/b23e735193edfbb6dbd32c30e386f682d5093c1c.zip b/docs/cache/ui/b23e735193edfbb6dbd32c30e386f682d5093c1c.zip new file mode 100644 index 0000000..9fd7b1b Binary files /dev/null and b/docs/cache/ui/b23e735193edfbb6dbd32c30e386f682d5093c1c.zip differ diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc new file mode 100644 index 0000000..6d0a691 --- /dev/null +++ b/docs/modules/ROOT/nav.adoc @@ -0,0 +1,6 @@ +* xref:setup-docker.adoc[Getting Set Up (Docker)] +* xref:setup.adoc[Getting Set Up (old method)] +* xref:fedora-release.adoc[Fedora Beta/GA Release] +* xref:newcontent.adoc[Creating New Content] +** xref:newcontent-edition.adoc[New Edition] +** xref:newcontent-site.adoc[New Site] diff --git a/docs/modules/ROOT/pages/fedora-release.adoc b/docs/modules/ROOT/pages/fedora-release.adoc new file mode 100644 index 0000000..2f9d521 --- /dev/null +++ b/docs/modules/ROOT/pages/fedora-release.adoc @@ -0,0 +1,126 @@ += Fedora Release +Rick Elrod +:page-authors: {author} + +== Introduction + +[NOTE] +==== +This assume you have a working setup already. See the other documents (e.g. the +one using Docker to get a development environment working) to get set up. Also, +if using a container-based environment, *ensure that the image you're using +reflects the latest `Dockerfile` in the root of the repository.* +==== + +This document guides you through updating the websites for a release (beta or +GA) of Fedora. + +Most of the work comes down to editing one file, +`sites/getfedora.org/release.yaml`. What follows are the important points to +note. + +The `release.yaml` file is broken into several main sections, and the relevant +ones are `ga`, `beta`, `fmw`, and `gpg_keys`. + +[NOTE] +==== +Pushing to the `staging` branch will update https://stg.getfedora.org/, which +pushing to the `master` branch will update https://getfedora.org/. +==== + +=== Beta Releases + +If you are updating for a *beta* release, then you are free to leave the `ga` +section alone. + +In the `beta` section, you'll want `show` to be `true`. This toggles whether we +show the beta download links at all. It also changes the banner at the top of +the website to announce the beta instead of the previous GA release. The +`announcement_release_number` dictates which version number is shown in that +announcement, so you'll want to bump it to the beta version being released. + +Next you'll want to edit the `editions` section, still under the `beta` parent +section. Bump the `release_number` and set the `rc_version` to the RC that was +called gold/ready for release. Find this information out from releng, if +necessary. + +== GA Releases + +If you are updating for a *ga* release, then in the `beta` section, set `show` +to `false`, so that the beta downloads don't show, and the announcement at the +top of the landing site reflects the new GA. Check with someone (usually Paul +Frields (`stickster` on IRC) to find the URL of the Fedora Magazine announcement +for the release, and set `announcement_url` to that, in the `ga` section. + +Next, bump the `release_number` and `rc_version` of each edition under +`editions`, using the `rc_version` that was declared gold/ready for +release. Find this information out from releng, if necessary. + +== `releases.json` file + +The next step is to produce the `releases.json` static file used by Fedora Media +Writer to produce its list of possible downloads. In the `fmw` section of +`release.yaml`, update the `releases_json` list to include the current non-EOL +versions of Fedora, including any current betas. If a version is in beta, set +the its `milestone` to `beta`. Otherwise set it to `final` or leave out the +field altogether. + +For example: + +[source,yaml] +---- +fmw: + ... + releases_json: + - version: 31 + milestone: beta + - version: 30 + - version: 29 +---- + +Once this is done, you'll need to actually generate the `releases.json` file. + +If using a containerized environment, you can do this from the root of the +repository (replacing `sudo docker` with `podman` if you use Podman): + +[source,bash] +---- +sudo docker run -it --rm -v "$(pwd):/opt/:z" fedora-websites python ./scripts/releases-json.py > sites/getfedora.org/static/releases.json +---- + +Otherwise, if you're not using a containerized environment, you can run the +script yourself after installing the `python-fedfind` package. From the root of +the repository: + +[source,bash] +---- +python3 sites/getfedora.org/scripts/releases-json.py > sites/getfedora.org/static/releases.json +---- + +Check that releases.json looks sane (it should look like a blob of JSON), then +move on. + +== Checksum Files + +You'll need to import the checksum files into +`sites/getfedora.org/static/checksums/`. To find out which checksums you need to +import, you can simply do a build of getfedora.org, and it will error out and +tell you what is missing. This is by design to ensure we don't miss a checksum +file. + +== GPG Keys + +Lastly, you'll want to add the latest GPG key information to `gpg_keys` in +`release.yaml`. Follow the pattern that is already there, and move any now-EOL +releases into the `obsolete` subsection. + +Import any new GPG keys into `sites/getfedora.org/static/keys/`, naming the file +`[short key id].txt` e.g. `57BBCCBA.txt`. + +== Conclusion + +That should be all. The old sites (namely spins, labs, alt, arm) which haven't +been ported to the new system need to be updated separately and are beyond the +scope of this document. + +Commit your changes, and they should auto-deploy within two hours at most. diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc new file mode 100644 index 0000000..cd940a4 --- /dev/null +++ b/docs/modules/ROOT/pages/index.adoc @@ -0,0 +1,93 @@ += Fedora Websites +Rick Elrod; Ryan Lerch +:page-authors: {author}, {author_2} + +== Who We Are +The Fedora Websites & Apps team works on the frontend and backend of Fedora's websites and web applications. +This team is a reboot of the previous Fedora Website's team, created by community members to update and improve Fedora's web presence and online documentation. + +We are a growing team of developers with a range of skills and interests. One of our team's first goals is to set up the foundation of an empowering mentorship program. + +== Our Collaborations +Working on both websites and web applications, our team is regularly communicating and working with different stakeholders in Fedora's community. + +* We work closely with the link:++https://fedoraproject.org/wiki/Design++[Fedora Design team] to build our websites that are visually pleasing, easy to use, and accessible to everybody. +* Along with the design team, we also work closely with link:++https://fedoraproject.org/wiki/Infrastructure++[Fedora Infrastructure] on backend technologies. +* We also collaborate with the link:++https://fedoraproject.org/wiki/L10N++[Fedora Translations team] to ensure that websites are able to be translated into different languages. +* Typically has one member (either in Design or Websites) who sits on the + xref:mindshare::index.adoc[Fedora Mindshare committee]. + +== What We Do +The W&A Team updates and maintains the code bases for Fedora's websites and web applications. We collaborate closely with the Fedora Design team and Fedora Infrastructure to implement new designs and update backend code. The W&A team is regularly working on a variety of tasks that are suitable for new and experienced contributors. + +=== Tasks Include: +* Adding temporary content to websites +* Coding design mockups provided by the Design Team +* Updating server side code +* Improving language and accessiblity support +* Revamping websites to improve user experience +* Writing documentation for contributors + +=== The Web and Apps Team Revamp +In 2021, the Fedora Websites Team began a revamp into the Fedora Websites & Apps Team. This was was started in order to facilitate the growing interest in Fedora's web presence as well as a need for a knowledgeable group of contributors to focus on keeping Fedora's websites and apps up to date current with modern web standards. + +== How To Get Involved + +To get involved with the Fedora W&A team get in touch with us through the email list or by messaging us on Telegram. We are looking for both front and backend contributors of all skill levels. If you are interested in getting active, feel free to check out the open tickets on pagure. + +We also welcome new contributors to our weekly meetings. If you have something that you would like to address, send a message to one of our team leads ahead of time so that we can plan to discuss your topic at an upcomming session. + +=== Membership + +In order to become a member of the Fedora Website & Apps Team, the applicant must be register at link:++https://accounts.fedoraproject.org++[Fedora Accounts] and set up an account with the link:++https://pagure.io++[Pagure] gitforge. + +By becoming a Fedora Contributor, you accept these terms. + +* link:++https://fedoraproject.org/wiki/Legal:Fedora_Project_Contributor_Agreement++[Fedora Project Contributor Agrement (FPCA)] +* link:++https://docs.fedoraproject.org/en-US/project/code-of-conduct/++[Code of Conduct] + +=== Are You New to Web Development? +We flag tickets that are suitable for new contributors and those whom are newer to html, css, js, and python. If you aren't sure where to start, or cannot find documentation that you are looking for, get in touch with one of our team members and they will help point you in the right direction. + +One of the goals of our revamp is to offer mentorship to those who are new to the field, or just interested in advancing their skills. If you are interested in mentorship, get in touch with one of our admins and they will help connect you with someone for mentorship opportunities. + +=== Are you an experienced Web Developer? +We often have tickets that demand more advanced knowledge of the technologies in our stack, and as web development is such a fast moving field, we are always interested to work with developers that bring something new to the table. Do you see something that you would like to work on? Please get in touch with us. + +== Meetings +We hold weekly meetings to review tickets and other tasks, touch base on direction, check in with one another, discuss team direction, and plan activities. Feel free to join us and get involved or to come and ask any questions that you have. We are a diverse team that is always looking for new contributors. + +* Location: link:++https://meet.jit.si/fedora-websites-apps-meeting++[Jitsi Room] +* Day: Tuesdays +* Time: 15:00 - 16:00 UTC + +=== Communication Channels +The W&A Team has a couple different lines of communication. Get in touch with us in any of the following ways (most being connected together): + +* link:++https://t.me/joinchat/hWQIgi7L79k3Nzk5++[Telegram]: Fedora Websites and Apps Telegram Group +* link:++https://discussion.fedoraproject.org/c/project/websites/66++[Discussion Forum]: Public Discussion Space +* link:++https://lists.fedoraproject.org/archives/list/websites@lists.fedoraproject.org/++[Email List]: Announcements, new member introductions +* link:++https://matrix.to/#/#fedora-websites:matrix.org++[Matrix]: Fedora Websites and Apps Matrix Channel +* link:++ircs://irc.libera.chat:6697/#fedora-websites++[IRC]: Fedora Websites and App IRC Channel + +== Resources +The W&A Team is made up of people who work on all levels of the tech stack. We value perspectives and experience from all positions of the tech stack. Check out these resources for your own setup. We are always working to expand our instructional material and documentation. + +=== Fedora's Website Tech Stacks +* Fedora Community Blog: Wordpress +* Fedora Websites: Flask, Jinja, HTML, CSS3, JavaScript, Python 3 +* Fedora Docs: Asciidoc + +=== Documentation +* link:++https://fedoraproject.org/w/uploads/1/19/Websitesandappsrevamp_logicmodel.png++[Fedora Websites Revamp Logic Model]: An overview of the Websites Team revamp +* link:++https://developer.fedoraproject.org/tech/languages/python/python-installation.html++[Fedora Developer Python] +* link:++https://developer.fedoraproject.org/tech/languages/python/flask-installation.html++[Fedora Developer Flask] +* For those interested in php and working with the link:++https://communityblog.fedoraproject.org++[Fedora Community Blog] +* link:++https://fedoramagazine.org/howto-install-wordpress-fedora/++[Wordpress Local Setup Instructions]: This article will help you setup a local wordpress deployment on Fedora. + +== Code Repositories +* link:++https://pagure.io/fedora-websites++[Fedora Websites] +* link:++https://pagure.io/fedora-web/websites/++[Fedora Main Website] +* link:++https://github.com/fedora-infra/fedbadges++[Fedora Badges] +* link:++https://github.com/fedora-infra/noggin++[Fedora Account System(FAS)] +* link:++https://pagure.io/fedora-docs/docs-fp-o++[Fedora Docs] diff --git a/docs/modules/ROOT/pages/newcontent-edition.adoc b/docs/modules/ROOT/pages/newcontent-edition.adoc new file mode 100644 index 0000000..f6fd5db --- /dev/null +++ b/docs/modules/ROOT/pages/newcontent-edition.adoc @@ -0,0 +1,89 @@ += New Edition +Rick Elrod +:page-authors: {author} + +== Introduction + +Fedora editions are "versions" of Fedora that users can install. These include +"official" editions (Workstation and Server at time of writing), but the +ultimate goal in Websites is to also make Spins and Labs editions be considered +"editions" in some form as far as websites are concerned. That is to say, we'd +like to ultimately have Spins and Labs have a section on the main getfedora.org +site, rendering link:https://spins.fedorparoject.org/[] and +link:https://labs.fedoraproject.org/[] useless and able to be gotten rid of. +Doing this effectively will take some time. + +Also note that most of the content in this document applies to adding pages in +general, with the notable exception of the `release.yaml` edits. Adding a page +to getfedora.org should follow largely the same process, though. + +[NOTE] +==== +All new editions should be added to getfedora.org, to aid in our goal of getting +rid of all of the `*.fedoraproject.org` edition-specific subdomain sites. This +generates a more consistent and less confusing user experience and makes +maintenance of the websites easier going forward. Everything in this document +assumes that you are working with the getfedora.org codebase, and NOT creating a +new site from scratch. +==== + +Now then, all work in this document takes place in the repository in which +link:https://pagure.io/fedora-web/websites/[getfedora.org] lives, and particularly +in the `sites/getfedora.org/` directory. + +== Edition-specific Release Variables + +The first step is to edit `release.yaml`, and add the relevant sections under +`ga` and `beta` for your new edition. Use `workstation` and `server` as +templates. You might not need all variables that these existing sections have, +or you might need to add new ones, depending on your templates, but these blocks +should get you started. + +== Exporting the Edition Routes + +Now, open `main.py` and go to near the bottom, where you'll note a number of +`export_route(...)` calls. This method is a custom method defined earlier in the +file, which does a little bit of work for us: The first argument is an internal +identifier name, so that we can reference the page using `url_for` safely (if +the URL changes, so will the URLs that get generated by `url_for`). The second +argument is a path to the directory that contains the templates you'll make, but +with a preceding and trailing `/`. Follow the example of the other, currently +existing pages and add the appropriate `export_route` calls at the end. + +== Hacking the Templates + +The templates themselves live in the `sites` directory (under +`sites/getfedora.org/` still). There are already templates started (but not +currently exported in `main.py`) for `silverblue`, `coreos`, and `iot`, at time +of writing. + +[IMPORTANT] +==== +Every string you add *must* be enclosed in `{% trans %}` ... `{% endtrans %}` +blocks so that it can be translated. If the string spans multiple lines (we tend +to break at 80 characters but are fairly lenient about this), then the opening +block should instead be `{% trans trimmed %}` (the closing block is still just +`{% endtrans %}`). +==== + +You can copy the templates from the existing editions, if you need inspiration +or help. + +== Letting the Translators Do Their Thing + +Once the above is done, the next step is get all the strings in the hands of the +Fedora Translations team. If you have an account on Fedora's Zanata instance, +and are in the appropriate websites group on Zanata, and have a valid +`~/.config/zanata.ini` file, you can do this step yourself. Otherwise you'll +either need to be added to the appropriate team or have someone do this for you: + +Run `./scripts/translations-source.sh`. At the end of its output, it will give +you the Zanata command to push the strings up: `zanata push getfedora.org.pot` + +== Concluding + +Largely, that is it. You've added variables that are easy to update each release +(in `release.yaml`), you've exported the pages, written your templates in a +translatable way, and pushed those strings to the Translations team. Now you can +sit back and relax while the translators do their thing. Their translations will +go live immediately (well, within an hour) and automatically. diff --git a/docs/modules/ROOT/pages/newcontent-site.adoc b/docs/modules/ROOT/pages/newcontent-site.adoc new file mode 100644 index 0000000..b468541 --- /dev/null +++ b/docs/modules/ROOT/pages/newcontent-site.adoc @@ -0,0 +1,15 @@ += Creating A New Site +Rick Elrod +:page-authors: {author} + +In rare cases, you might need to create an entirely new site, rather than an +edition or page on getfedora.org. + +In a future world, this document will help you do so. + +For this to happen effectively, we'll need to abstract some things out from the +current getfedora.org work. + +But familiarizing yourself with link:https://flask.palletsprojects.com/[Flask] +and link:https://pythonhosted.org/Frozen-Flask/[Frozen-Flask] is a good starting +point, as we plan for all of our websites to build using this toolset. diff --git a/docs/modules/ROOT/pages/newcontent.adoc b/docs/modules/ROOT/pages/newcontent.adoc new file mode 100644 index 0000000..b64ab51 --- /dev/null +++ b/docs/modules/ROOT/pages/newcontent.adoc @@ -0,0 +1,23 @@ += Creating New Content +Rick Elrod +:page-authors: {author} + +Content can be broken into several different components, although some of the +process is the same for all cases. + +All new sites are being built with the Python link:http://flask.pocoo.org/[Flask] +framework and the link:https://pythonhosted.org/Frozen-Flask/[Frozen-Flask] library +for generating static pages. + +== New Editions + +New editions of Fedora should be added to the getfedora.org website. We are +trying to get away from having a bunch of `*.fedoraproject.org` sites for each +of the various editions (currently we have link:https://coreos.fedoraproject.org[], +link:https://iot.fedoraproject.org[], etc.). + +== New Websites + +There are cases, however, where the content being added is *not* a new edition, +and is deserving of having its own distinct website, separate from +getfedora.org. These cases should probably be somewhat rare. diff --git a/docs/modules/ROOT/pages/setup-docker.adoc b/docs/modules/ROOT/pages/setup-docker.adoc new file mode 100644 index 0000000..4f927ef --- /dev/null +++ b/docs/modules/ROOT/pages/setup-docker.adoc @@ -0,0 +1,76 @@ += Getting Set Up (using Docker) +Rick Elrod +:page-authors: {author} + +== Preliminary Notes + +It is now easier to get started on developing the Fedora Websites with the use +of Docker (or Podman). + +We ship a `Dockerfile` which will install dependencies into an image +for you, so all you are left to do is mount the site as a volume, pull +translations, and start the development server. + +[NOTE] +==== +The documentation here refers to `docker`, but our fairly simple use +of it means that things are likely to work with `podman` with little +modification. +==== + +== Building the container image + +First clone the repository: + +[source,bash] +---- +git clone https://pagure.io/fedora-web/websites.git +---- + +(You may instead clone your fork of it, or add your fork as a second +remote later on.) + +Now ensure Docker is running and run: + +[source,bash] +---- +sudo docker build -t fedora-websites . +---- + +This will generate a container image for you to use. + +== Pulling translations + +We have a script for pulling translations. Let's call it from within +the container: + +[source,bash] +---- +sudo docker run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/pull-translations.sh +---- + + +Notice here that we are mounting a volume (`-v`) in Docker which +points to our check-out of the repository. We're referring to the +`fedora-websites` image created above, and calling the +`./scripts/pull-translations.sh` script from within it. + +== Running the development server + +Now we are ready to run the development server: + +[source,bash] +---- +sudo docker run -it --rm -v "$(pwd):/opt/:z" -p 5000:5000 fedora-websites flask run --reload --host 0.0.0.0 +---- + +Note that we need `-p 5000:5000` so that we can access the development +server from our actual host. Also notice that we need to tell Flask to +listen on `0.0.0.0` as by default it listens on `127.0.0.1` which +won't be accessible outside of the container. + +You may now go to `http://localhost:5000/` in your browser of choice. + +Now you are ready to go and any changes you make in the repository +should be reflected immediately upon refreshing the page in your +browser. diff --git a/docs/modules/ROOT/pages/setup.adoc b/docs/modules/ROOT/pages/setup.adoc new file mode 100644 index 0000000..e715bf2 --- /dev/null +++ b/docs/modules/ROOT/pages/setup.adoc @@ -0,0 +1,103 @@ += Getting Set Up +Rick Elrod +:page-authors: {author} + +[NOTE] +==== +We now have documentation on using the `Dockerfile` which ships in the Fedora +websites repository, and suggest trying that method before using the method +outlined on this page. See link:../setup-docker[this tutorial]. +==== + +== Preliminary Notes + +There are some open tickets (https://pagure.io/fedora-web/websites/issue/31[31], +https://pagure.io/fedora-web/websites/issue/11[11]) about getting the websites +repository building on Fedora with Python 3. + +However, it should be able to be built on Fedora 30, using Python 2 packages, +for now. + +=== Fedora 29 Alternative + +Note, the dependencies below may not currently resolve due to package renaming +in Fedora 30. If the dependencies do not resolve in Fedora 30, running Flask +from a Fedora 29 container is an alternative. An example to run the Fedora 29 +container using `podman` is as follows: + +``` +# Expose the default port for Flask, 5000. +podman run --expose 5000 --net=host --privileged -v /path/to/websites/repo:/path/to/websites/repo -ti registry.fedoraproject.org/fedora:29 +``` + +== Dependencies + +That said, assuming Fedora 30, install the dependencies as follows +footnote:[This list comes directly from the Fedora Infrastructure OpenShift +build for Websites found +https://infrastructure.fedoraproject.org/cgit/ansible.git/tree/roles/openshift-apps/websites/templates/buildconfig.yml[here].]: + +[source,bash] +---- +dnf install \ + git \ + python-flask \ + python-frozen-flask \ + python-flask-assets \ + python-rjsmin \ + python-cssmin \ + python-flask-babel \ + python-flask-htmlmin \ + python-cssutils \ + rubygem-sass \ + babel \ + python3-jinja2 \ + python-pyyaml \ + python-dateutil \ + python-dogpile-cache \ + python-requests \ + python-zanata-client +---- + +== Pull Strings + +Now we need to pull the current translations. After installing the dependencies +above, you can `cd` into `sites/getfedora.org/` and run: +`./scripts/pull-translations.sh`. + +Once the dependencies are installed and translations are pulled, you can do one +of two things: + +== Use the Development Server + +One option is to use the Flask built-in development server. This is handy +because it prevents you from needing to build the websites every time you change +something. However, it bypasses the Frozen-Flask system which creates are static +sites, entirely, so it's not entirely an accurate representation of what goes +live. + +To use the development server: + +[source,bash] +---- +export FLASK_APP=main.py +flask run --reload +---- + +Now you many visit http://localhost:5000/ to get to the site. + +== Use Apache + +Alternatively, you may simply run `python main.py`. You'll get a statically +built site in the `./build/` directory. However, the HTML files are all +language-code-suffixed as Apache/httpd MultiViews system expects +(e.g. `index.html.en`). As a result you *cannot* just run a simple HTTP server +(like `python -m SimpleHTTPServer`) in the `./build/` directory, unfortunately. + +You can, however, set up an Apache on your system, and point it to the +`./build/` directory. + +[NOTE] +==== +(We should probably add an example Apache config here at some point). +==== diff --git a/docs/modules/ROOT/pages/translation-flow.adoc b/docs/modules/ROOT/pages/translation-flow.adoc new file mode 100644 index 0000000..c017809 --- /dev/null +++ b/docs/modules/ROOT/pages/translation-flow.adoc @@ -0,0 +1,85 @@ += Translation flow (for Fedora websites) + Jan Kuparinen +:page-authors: {author} + +== General + +Fedora websites can be viewed in many languages. This page gives some details on how this happens. + +=== Tagging text + +System needs to be told what strings needs to be translated. +Generally every text inside web page should be surrounded with tags: + +[source,html] +---- +{% trans trimmed %}Translate this text.{% endtrans %} +---- + +== Generating pot file +First we need to pull all translatable strings into a file called getfedora.org.pot + +This file is generated by running: + +[source,bash] +---- +podman run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/translations-source.sh +---- + +This file needs to be sent to link:++https://pagure.io/fedora-web/translations++[translations repository] + +If you don't have access to the translations repository push it to fedora-websites and create a pull request and once approved it should be automatically sent to translations repository with 24 hours. + +== Weblate process (How strings get translated) + +Once getfedora.org.pot file is in the translations repository it will be pulled by Weblate system and merged into translatable strings. It can then be translated by translators. + +== Manual testing +[NOTE] +==== +Any translations made here will not get propagated to the weblate of final versions of the page. +==== +You can test the changes manually by: + +1) +Update strings to the language files +[source,bash] +---- +podman run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/translations-update-local.sh +---- + +Now edit desired language file, for example + +[source,bash] +---- +nano sites/getfedora.org/translations/fi/LC_MESSAGES/messages.po +---- +Find the string you want to test, format inside file is: + + `#: partials/templates/download_card.html:13` Location(s) of string. + `msgid "Download"` Text in english. + `msgstr "Lataa"` Text in desired language. + + +Edit the `msgstr` + +Once edited translations need to be compiled into more efficient format for the web server. This is done by running: + +[source,bash] +---- +podman run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/translations-compile-local.sh +---- + +You can now change your browser setting to desired language and see how the translations are working out. + +--- + +=== Description of translation scripts inside sites/getfedora.org/scripts + +[NOTE] +==== +Technically scripts can be run without using podman, but will then require proper setup in the local machine. The instructions given above are safer for generic users. +==== + + + diff --git a/docs/nginx.conf b/docs/nginx.conf new file mode 100644 index 0000000..f7093b3 --- /dev/null +++ b/docs/nginx.conf @@ -0,0 +1,14 @@ +server { + listen 80; + server_name localhost; + + location / { + root /antora/public; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/docs/preview.sh b/docs/preview.sh new file mode 100755 index 0000000..4270107 --- /dev/null +++ b/docs/preview.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +if [ "$(uname)" = "Darwin" ]; then + # Running on macOS. + # Let's assume that the user has the Docker CE installed + # which doesn't require a root password. + echo "The preview will be available at http://localhost:8080/" + docker run --rm -v "$(pwd):/antora:ro" -v "$(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro" -p 8080:80 nginx + +elif [ "$(expr substr "$(uname -s)" 1 5)" = "Linux" ]; then + # Running on Linux. + # Fedora Workstation has python3 installed as a default, so using that + echo "" + echo "The preview is available at http://localhost:8080" + echo "" + cd ./public + python3 -m http.server 8080 +fi diff --git a/docs/public/_/css/site.css b/docs/public/_/css/site.css new file mode 100644 index 0000000..b4b1990 --- /dev/null +++ b/docs/public/_/css/site.css @@ -0,0 +1,3 @@ +@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local("Roboto Regular"),local("Roboto-Regular"),url(../font/roboto-latin-400.woff2) format("woff2"),url(../font/roboto-latin-400.woff) format("woff")}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:local("Roboto Italic"),local("Roboto-Italic"),url(../font/roboto-latin-400italic.woff2) format("woff2"),url(../font/roboto-latin-400italic.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:local("Roboto Medium"),local("Roboto-Medium"),url(../font/roboto-latin-500.woff2) format("woff2"),url(../font/roboto-latin-500.woff) format("woff")}@font-face{font-family:Roboto;font-style:italic;font-weight:500;src:local("Roboto Medium Italic"),local("Roboto-MediumItalic"),url(../font/roboto-latin-500italic.woff2) format("woff2"),url(../font/roboto-latin-500italic.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;src:local("Roboto Mono"),local("RobotoMono-Regular"),url(../font/roboto-mono-latin-400.woff2) format("woff2"),url(../font/roboto-mono-latin-400.woff) format("woff")}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:500;src:local("Roboto Mono Medium"),local("RobotoMono-Medium"),url(../font/roboto-mono-latin-500.woff2) format("woff2"),url(../font/roboto-mono-latin-500.woff) format("woff")}body,html{height:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:Roboto,sans-serif;font-size:1.1em;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}@media (min-width:1024px){html{font-size:1.2em}}body{color:#222;line-height:1.6;margin:0}@media print{body{padding-top:0!important}nav.navbar{position:static!important}}a{text-decoration:none}a:hover{text-decoration:underline}code,kbd,pre{font-family:Roboto Mono,monospace}b,dt,strong,th{font-weight:700}::-webkit-scrollbar{width:.3333rem;height:.3333rem}::-webkit-scrollbar-track{background-color:#f0f0f0}::-webkit-scrollbar-thumb{background-color:#c1c1c1}::-webkit-scrollbar-thumb:window-inactive{background:transparent}@media (min-width:1024px){.main-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}.main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}}.navigation-container{display:none;position:fixed;top:3.25rem;left:0;width:100%;font-size:.95rem;z-index:1}.navigation-container.is-active{display:block}@media (min-width:769px){.navigation-container{width:16rem;font-size:.9rem}}@media (min-width:1024px){.navigation-container{font-size:.85rem;-webkit-box-flex:0;-ms-flex:none;flex:none;display:block;position:static;top:0}}.navigation{background-color:#fafafa;position:relative;top:30px;height:calc(100vh - 3.25rem - 30px)}@media (min-width:769px){.navigation{-webkit-box-shadow:.5px 0 3px #c1c1c1;box-shadow:.5px 0 3px #c1c1c1}}@media (min-width:1024px){.navigation{top:3.25rem;-webkit-box-shadow:none;box-shadow:none;position:-webkit-sticky;position:sticky;height:calc(100vh - 3.25rem)}}.navigation .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}html.is-clipped--nav{overflow-y:hidden}.navigation-menu{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow-y:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:calc(100vh - 3.25rem - 30px - 2.5rem)}@media (min-width:1024px){.navigation-menu{height:calc(100vh - 5.75rem)}}.navigation-menu:not(.is-active){display:none}.navigation-container,.navigation-menu{background-color:#dedede}.nav-menu{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;min-height:0}nav.nav-menu span.nav-text strong{text-transform:uppercase;display:block;color:#294172;margin-top:16px;font-size:.9em}.nav-menu h3.title{margin:0;font-weight:500;color:#424242;font-size:1em;padding:.125rem .5rem .25rem}.nav-menu a,.nav-menu a:visited{color:inherit}.nav-list{margin:0;padding:0 0 .5em;width:100%}.nav-list .nav-list{margin-left:1em;padding-bottom:0}.nav-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-top:5px;padding-bottom:5px}ul.nav-list .nav-item .is-current-page,ul.nav-list .nav-item .is-current-path{background-color:#fff}ul.nav-list ul.nav-list .nav-item{padding-left:10px}.nav-menu .title a{margin-left:20px}.nav-item:not(.is-active)>.nav-list{display:none}.nav-item[data-depth="0"]>.nav-list:first-child{display:block;margin-left:0}.nav-item[data-depth="0"]>.nav-list:first-child>.nav-item:first-child{padding-top:0}.nav-toggle{background:transparent url(../img/caret.svg) no-repeat 0;background-size:85%;border:none;cursor:pointer;height:1.85em;outline:none;padding:0;font-size:.95em;width:1.0526em}@media (min-width:769px){.nav-toggle{height:1.6em}}.nav-toggle::-moz-focus-inner{border:none}.nav-item.is-active>.nav-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.nav-link,.nav-text{display:inline-block;line-height:1.85;margin-left:1em;padding-left:.25em}@media (min-width:769px){.nav-link,.nav-text{line-height:1.6}}.is-current-page>.nav-link,.is-current-page>.nav-text{font-weight:700}.nav-toggle+.nav-link,.nav-toggle+.nav-text{margin-left:0}.navigation-explore{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.navigation-explore.is-active{height:inherit}.navigation-explore .context{-ms-flex-negative:0;flex-shrink:0;color:#5d5d5d;background-color:#fafafa;-webkit-box-shadow:0 -1px 0 #e1e1e1;box-shadow:0 -1px 0 #e1e1e1;padding:0 .25rem 0 .5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;font-size:.8824em;line-height:1;height:2.5rem}.navigation-explore.is-active .context{-webkit-box-shadow:0 1px 0 #e1e1e1;box-shadow:0 1px 0 #e1e1e1}.navigation-explore .context .version{background-image:url(../img/chevron.svg);background-repeat:no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;padding:0 1.5rem 0 0}.navigation-explore .components{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-shadow:inset 0 1px 5px #e1e1e1;box-shadow:inset 0 1px 5px #e1e1e1;background-color:#f0f0f0;padding:.5rem;margin:0;overflow-y:auto;max-height:100%;display:block}.navigation-explore:not(.is-active) .components{display:none}.navigation-explore .component{display:block}.navigation-explore .component+.component{margin-top:.5rem}.navigation-explore .component .title{font-weight:500}.navigation-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:.5rem}.navigation-explore .component .version{display:block;font-size:.95em}.navigation-explore .component .version a{border:1px solid #b0b0b0;border-radius:.25em;color:#4a4a4a;white-space:nowrap;padding:.05em .25em 0}.navigation-explore .component .is-current a{border-color:#4a4a4a;font-weight:500}.navigation-explore .component .version+.version{padding-left:.375em}.toolbar{color:#5d5d5d;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#eee;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.75rem;height:30px;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;position:-webkit-sticky;position:sticky;top:3.22rem;z-index:1;padding:5px 15px}.toolbar a,.toolbar a:visited{color:inherit}.navigation-toggle{background:url(../img/menu.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;cursor:pointer;display:block;height:2.5rem;padding:0;width:2.5rem;margin-right:-.25rem}.navigation-toggle::-moz-focus-inner{border:none}@media (min-width:1024px){.navigation-toggle{display:none}}.navigation-toggle.is-active{background-image:url(../img/back.svg);background-size:41.5%}.home-link{background:url(../img/home-o.svg) no-repeat 50% 45%;background-size:50%;display:block;height:2.5rem;padding:0;width:2.5rem}.home-link.is-current,.home-link:hover{background-image:url(../img/home.svg)}.edit-this-page{display:none;padding-right:.5rem}@media (min-width:1024px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#8e8e8e}.crumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;padding:0 .5rem 0 .75rem;line-height:1.35;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}@media (min-width:1024px){.crumbs{display:block}}a+.crumbs{padding-left:.05rem}.crumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none;color:#0275d8}.crumbs li{display:inline;margin:0}.crumbs li:after{content:"/";color:#333;padding:0 .5rem}.crumbs li:last-of-type:after{content:none}.page-versions{display:none;margin-right:.7rem;position:relative}@media (min-width:1024px){.page-versions{display:block}}.page-versions.is-active{color:#333}.page-versions .versions-menu-toggle{color:inherit;font-family:inherit;font-size:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:1px solid transparent;outline:none;cursor:pointer;padding:.35rem 1.5rem .35rem .5rem;position:relative;z-index:1}.page-versions .versions-menu-toggle::-moz-focus-inner{border:none}.page-versions .versions-menu{border:1px solid transparent;background-color:#f0f0f0;padding:1.3rem .5rem .35rem;position:absolute;top:0;left:0;width:100%}.page-versions:not(.is-active) .versions-menu{display:none}.page-versions .version{display:block;line-height:1;padding-top:.6em}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.doc{margin:0 auto;max-width:40rem;padding:0 1rem 4rem;color:#333}@media (min-width:1024px){.doc{margin:0 2rem;max-width:54rem}}.toc .title{font-family:Open sans,Helvetica,Arial;font-size:24px;color:#191919;font-weight:600}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#191919;font-weight:600;line-height:1.3;margin:1rem 0 0}article.doc h1{font-weight:600;color:#294172!important}.doc h3,article.doc h1,ul.nav-list{font-family:Open sans,Helvetica,Arial}.doc h3{font-size:24px}.doc h1>a.anchor,.doc h2>a.anchor,.doc h3>a.anchor,.doc h4>a.anchor,.doc h5>a.anchor,.doc h6>a.anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em}.doc h1>a.anchor:before,.doc h2>a.anchor:before,.doc h3>a.anchor:before,.doc h4>a.anchor:before,.doc h5>a.anchor:before,.doc h6>a.anchor:before{content:"\00a7"}.doc h1:hover>a.anchor,.doc h2:hover>a.anchor,.doc h3:hover>a.anchor,.doc h4:hover>a.anchor,.doc h5:hover>a.anchor,.doc h6:hover>a.anchor{visibility:visible}.doc a,.doc a:visited{color:#1565c0}.doc a:hover{color:#104d92}.doc i.fa{font-style:normal}.doc p code{font-size:.9em;background-color:#fafafa;padding:.075rem .25rem .125rem;border-radius:.2rem;color:#d14}.doc pre{font-size:.9rem;line-height:1.5;margin:0}.doc .colist,.doc .dlist,.doc .exampleblock,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .sidebarblock,.doc .ulist{margin:1rem 0 0}@media (min-width:1024px){.doc .sidebarblock.width50{width:54%}.doc .sidebarblock.width33,.doc .sidebarblock.width50{float:right;margin:0 -20px 0 20px;border:20px solid #fff}.doc .sidebarblock.width33{width:39%}}.doc table.tableblock{border-collapse:collapse;font-size:.8em;margin:2rem 0}.doc table.spread{width:100%}.doc table.tableblock td,.doc table.tableblock th{padding:.5rem}.doc table.tableblock th{border-bottom:2.5px solid #ddd}.doc table.tableblock td{border-top:1px solid #ddd;border-bottom:1px solid #ddd}.doc .halign-left{text-align:left}.doc .valign-top{vertical-align:top}.doc .tableblock p{font-size:inherit}.doc .admonitionblock{margin:1.4rem 0 0}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.9rem}.doc .admonitionblock td.content>:first-child{margin:0}.doc .admonitionblock pre{font-size:.85rem}.doc .admonitionblock>table{border-collapse:collapse;table-layout:fixed;position:relative;width:100%}.doc .admonitionblock td.content{padding:1rem 1rem .75rem;background-color:#fafafa;width:100%}.doc .admonitionblock .icon{position:absolute;top:0;left:0;font-size:.75rem;padding:0 .5rem;height:1.25rem;line-height:1;font-weight:500;text-transform:uppercase;border-radius:.45rem;color:#fff;-webkit-transform:translate(-.5rem,-50%);transform:translate(-.5rem,-50%)}.doc .admonitionblock.caution .icon{background-color:#a0439c}.doc .admonitionblock.important .icon{background-color:#d32f2f}.doc .admonitionblock.note .icon{background-color:#217ee7}.doc .admonitionblock.tip .icon{background-color:#41af46}.doc .admonitionblock.warning .icon{background-color:#e18114}.doc .admonitionblock.caution td.content{border:1px solid #a0439c}.doc .admonitionblock.important td.content{border:1px solid #d32f2f}.doc .admonitionblock.note td.content{border:1px solid #217ee7}.doc .admonitionblock.tip td.content{border:1px solid #41af46}.doc .admonitionblock.warning td.content{border:1px solid #e18114}.doc .admonitionblock .icon i{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.doc .admonitionblock .icon i:after{content:attr(title);-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc .imageblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock img{display:block}.doc .imageblock .title{color:#191919;font-style:italic;margin-top:.5rem}.doc .imageblock img,.doc .paragraph .image img{height:auto;max-width:100%}.doc>h1{font-size:2rem;margin:2rem 0 1.5rem}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2.5rem}.doc h2:not(.discrete){border-bottom:1px solid #ddd;margin-left:-1rem;margin-right:-1rem;padding:.4rem 1.5rem .1rem;font-size:36px;font-weight:600;font-family:Open sans,Helvetica,Arial}article.doc h2{border-bottom:solid #0275d8!important;padding:.4rem .9rem .1rem!important}.doc p{font-size:18px;margin:0}.doc .content,.doc .tableblock,.doc p{-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}#preamble .abstract blockquote{background-color:#f0f0f0;border-left:5px solid #ddd;color:#4a4a4a;font-size:.9em;margin:0;padding:.75em 1em}.doc table.tableblock .paragraph{margin:0;padding:0}.doc .olist .admonitionblock,.doc .ulist .admonitionblock,.doc table.tableblock .admonitionblock{padding:0}.doc ul{margin:0;padding:0 0 0 1.5rem}.doc ol{margin:0;padding:0 0 0 2rem;list-style:none;counter-reset:a}.doc ol>li{counter-increment:a}.doc ol>li:before{font-weight:500;font-size:.95em;display:inline-block;width:1em;direction:rtl;margin:-.025em .5em 0 -1.5em;text-align:right;position:absolute}.doc ol.arabic>li:before{content:"." counter(a)}.doc ol.loweralpha>li:before{content:"." counter(a,lower-alpha)}.doc ol.lowergreek>li:before{content:"." counter(a,lower-greek)}.doc ol.lowerroman>li:before{content:"." counter(a,lower-roman)}.doc ol.upperalpha>li:before{content:"." counter(a,upper-alpha)}.doc ol.upperroman>li:before{content:"." counter(a,upper-roman)}.doc ul.checklist{padding-left:.5rem;list-style:none}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1rem;margin-right:.25rem}.doc ul.checklist i.fa-check-square-o:before{content:"\2713"}.doc ul.checklist i.fa-square-o:before{content:"\274f"}.doc .dlist .dlist,.doc .dlist .olist,.doc .dlist .ulist,.doc .olist .dlist,.doc .olist .olist,.doc .olist .ulist,.doc .ulist .dlist,.doc .ulist .olist,.doc .ulist .ulist{margin-top:.5rem}.doc .olist li,.doc .ulist li{margin-bottom:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title{color:#191919;font-size:.925rem;font-style:italic;letter-spacing:-.005em;padding-bottom:.075rem}.doc .admonitionblock .title+.paragraph{margin-top:0}.doc .exampleblock>.content{background-color:#fff;-webkit-box-shadow:inset 0 0 1.75px #248232;box-shadow:inset 0 0 1.75px #248232;padding:.75rem}.doc .exampleblock>.content>:first-child{margin-top:0}.doc .sidebarblock{background-color:#ebebeb;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{color:#191919;font-size:1.2rem;font-weight:500;line-height:1.3;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc pre.highlight code,.doc pre:not(.highlight){background-color:#fafafa;-webkit-box-shadow:inset 0 0 1.75px #ddd;box-shadow:inset 0 0 1.75px #ddd;display:block;overflow-x:auto;padding:.75rem}.doc pre.highlight{position:relative}.doc .listingblock code[data-lang]:before{content:attr(data-lang);display:none;color:#8e8e8e;font-size:.75em;font-weight:500;letter-spacing:.075em;line-height:1;text-transform:uppercase;position:absolute;top:.5rem;right:.5rem}.doc .listingblock:hover code[data-lang]:before{display:block}.doc .dlist dt{color:#4a4a4a;font-style:italic}.doc .dlist dd{margin:0 0 .3rem 1.5rem}.doc .conum[data-value]{border:1px solid #404040;border-radius:100%;display:inline-block;font-family:Roboto,sans-serif;font-size:.75rem;font-style:normal;height:1.25em;line-height:1.2;text-align:center;width:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]:after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc .colist{font-size:.95rem}.doc .colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}b.button{white-space:nowrap}b.button:before{content:"[";padding-right:.25em}b.button:after{content:"]";padding-left:.25em}kbd{display:inline-block;font-size:.7rem;background-color:#fafafa;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #fff inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #fff;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.keyseq,kbd{line-height:1}.keyseq{font-family:Roboto Mono,monospace;font-size:.9em}.keyseq kbd{margin:0 .125em}.keyseq kbd:first-child{margin-left:0}.keyseq kbd:last-child{margin-right:0}.menuseq i.caret:before{content:">";font-weight:500}.qanda li p:first-child{font-weight:600;margin-top:20px;margin-left:-20px}.imageblock.profile-picture{float:right;margin-left:30px;width:140px}.imageblock.profile-picture img{border-radius:8px}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.25rem}.navbar{background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#ddd));background-image:linear-gradient(180deg,#eee 0,#ddd);color:#222;font-size:.83333rem;height:3.25rem;position:fixed;top:0;width:100%;word-wrap:break-word;z-index:2}.navbar a{text-decoration:none}.navbar-brand .navbar-item:first-child,.navbar-brand .navbar-item:first-child a{color:#222;font-size:1.15rem}.navbar-brand .separator{padding:0 .375rem}@media screen and (min-width:1024px){.navbar-end .navbar-link,.navbar-end>.navbar-item{color:#222}.navbar-end .navbar-link:hover,.navbar-end>a.navbar-item:hover{background-color:#ccc;color:#222}.navbar-end .navbar-link:after{border-color:#222}.navbar-item.has-dropdown:hover .navbar-link{background-color:#ccc;color:#222}}.navbar-brand{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;height:3.25rem}.navbar-burger{color:#222;background:none;border:none;outline:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:2.75rem;margin-left:auto;padding:0}.navbar-burger::-moz-focus-inner{border:none}.navbar-burger span{background-color:#222;display:block;height:1px;left:50%;margin-left:-7px;position:absolute;top:50%;width:15px}.navbar-burger span:first-child{margin-top:-6px}.navbar-burger span:nth-child(2){margin-top:-1px}.navbar-burger span:nth-child(3){margin-top:4px}.navbar-burger.is-active span:first-child{margin-left:-5px;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){margin-left:-5px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:left bottom;transform-origin:left bottom}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:.5rem 1rem;position:relative}.navbar-item{-webkit-box-flex:0;-ms-flex:none;flex:none}.navbar-item.has-dropdown{padding:0}.navbar-item .icon{width:1.1rem;height:1.1rem;display:block}.navbar-link{padding-right:2.5em}.navbar-dropdown{font-size:.875rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#e1e1e1;border:none;height:1px;margin:.25rem 0}@media screen and (max-width:1023px){.navbar-brand .navbar-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-menu{background-color:#fff;padding:.5rem 0}.navbar-menu.is-active{display:block;-webkit-box-shadow:0 8px 16px hsla(0,0%,4%,.1);box-shadow:0 8px 16px hsla(0,0%,4%,.1);max-height:calc(100vh - 3.25rem);overflow-y:auto}.navbar-menu .navbar-link:hover,.navbar-menu a.navbar-item:hover{background-color:#fafafa}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-burger{display:none}.navbar-item,.navbar-link{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-item.has-dropdown{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-link:after{border-width:0 0 1px 1px;border-style:solid;content:" ";display:block;height:.5em;pointer-events:none;position:absolute;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);width:.5em;margin-top:-.375em;right:1.125em;top:50%}.navbar-menu{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.navbar-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border:1px solid #e1e1e1;display:none;font-size:.875rem;top:100%;left:0;min-width:100%;position:absolute}.navbar-dropdown .navbar-item{padding:.5rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown.is-right{left:auto;right:0}.navbar-dropdown a.navbar-item:hover{background-color:#fafafa}}.navbar .button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;border:1px solid #e1e1e1;border-radius:.15rem;height:1.75rem;color:#333;padding:0 .75em;white-space:nowrap}footer.footer{font-size:.85rem;background-color:#e6e6e6;color:#8e8e8e;padding:.5rem 1rem}.footer p{margin:.5rem 0;font-size:17px;color:#8d8d8d;font-family:Open sans,Helvetica,Arial}.footer a{color:#5d5d5d} + +/*! GitHub style for highlight.js (c) Vasily Polovnyov */.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:500}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:500}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:500}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:500}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:500}div.homepage-section h3,div.homepage-section p{color:#fff;margin:0}div.homepage-section h3{padding-bottom:.2em}div.homepage-section a.homepage-link-primary h3{font-size:28px}div.homepage-section a.homepage-link-secondary p{font-size:16px}div.homepage-section a.homepage-link-secondary h3{font-size:20px}div.homepage-section a.homepage-link-secondary p{font-size:14px}div.homepage-section-container{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}div.homepage-section a.homepage-link{display:block;padding:16px;margin:10px;border-radius:10px}.homepage-page{margin-top:2.5em}div.homepage-section a.homepage-link:hover{text-decoration:none}div.homepage-section a.homepage-link-primary{background:transparent radial-gradient(ellipse at 50% 50%,#294172 15%,#233862 70%) repeat scroll 0 0;-webkit-box-flex:1;-ms-flex:1 1 300px;flex:1 1 300px}div.homepage-section a.homepage-link-primary:hover{background-color:#ddd}div.homepage-section a.homepage-link-secondary{background-color:#3c6eb4;font-size:.8em;-webkit-box-flex:1;-ms-flex:1 1 200px;flex:1 1 200px}div.home-page div.container-header{padding:20px 10px 0}div.home-page div.container-header h2{margin:0;border:none;padding:0}.homepage-page div h2{margin:1em -1rem .3em;padding:.8rem 1.5rem!important;font-size:34px!important;color:#294172!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#ddd));background-image:linear-gradient(180deg,#eee,#ddd);border-bottom:none!important}div.home-page div.container-contributors,div.home-page div.container-project,div.home-page div.container-releases{margin-bottom:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}div.home-page div.container-contributors a,div.home-page div.container-project a,div.home-page div.container-releases a{display:block;background-color:#233862;color:#fff;text-decoration:none;padding:10px;margin:10px}div.home-page div.container-contributors h3,div.home-page div.container-project h3,div.home-page div.container-releases h3{color:#fff}div.home-page div.container-releases a{background-color:#173e77}div.home-page div.container-project a{background-color:#680959}div.home-page div.container-contributors a{background-color:#984f15}div.home-page .flex-container a.container-big{-webkit-box-flex:500px;-ms-flex:500px;flex:500px}div.home-page .flex-container a.container-small{-webkit-box-flex:200px;-ms-flex:200px;flex:200px}div.home-page .flex-container a.container-third{-webkit-box-flex:1;-ms-flex:1 1 500px;flex:1 1 500px}.flex-container p,div.home-page .flex-container h3{margin:10px}#contributing{text-align:center;background-color:#e6e6e6;margin:40px;padding:10px}#contributing h3{font-size:1em;margin:0}#contributing p.contributors{margin:0} \ No newline at end of file diff --git a/docs/public/_/font/roboto-latin-400.woff b/docs/public/_/font/roboto-latin-400.woff new file mode 100644 index 0000000..92dfacc Binary files /dev/null and b/docs/public/_/font/roboto-latin-400.woff differ diff --git a/docs/public/_/font/roboto-latin-400.woff2 b/docs/public/_/font/roboto-latin-400.woff2 new file mode 100644 index 0000000..7e854e6 Binary files /dev/null and b/docs/public/_/font/roboto-latin-400.woff2 differ diff --git a/docs/public/_/font/roboto-latin-400italic.woff b/docs/public/_/font/roboto-latin-400italic.woff new file mode 100644 index 0000000..27c34da Binary files /dev/null and b/docs/public/_/font/roboto-latin-400italic.woff differ diff --git a/docs/public/_/font/roboto-latin-400italic.woff2 b/docs/public/_/font/roboto-latin-400italic.woff2 new file mode 100644 index 0000000..3791c88 Binary files /dev/null and b/docs/public/_/font/roboto-latin-400italic.woff2 differ diff --git a/docs/public/_/font/roboto-latin-500.woff b/docs/public/_/font/roboto-latin-500.woff new file mode 100644 index 0000000..2633e15 Binary files /dev/null and b/docs/public/_/font/roboto-latin-500.woff differ diff --git a/docs/public/_/font/roboto-latin-500.woff2 b/docs/public/_/font/roboto-latin-500.woff2 new file mode 100644 index 0000000..8dceabc Binary files /dev/null and b/docs/public/_/font/roboto-latin-500.woff2 differ diff --git a/docs/public/_/font/roboto-latin-500italic.woff b/docs/public/_/font/roboto-latin-500italic.woff new file mode 100644 index 0000000..d4d8b15 Binary files /dev/null and b/docs/public/_/font/roboto-latin-500italic.woff differ diff --git a/docs/public/_/font/roboto-latin-500italic.woff2 b/docs/public/_/font/roboto-latin-500italic.woff2 new file mode 100644 index 0000000..1b95899 Binary files /dev/null and b/docs/public/_/font/roboto-latin-500italic.woff2 differ diff --git a/docs/public/_/font/roboto-mono-latin-400.woff b/docs/public/_/font/roboto-mono-latin-400.woff new file mode 100644 index 0000000..0ea5db8 Binary files /dev/null and b/docs/public/_/font/roboto-mono-latin-400.woff differ diff --git a/docs/public/_/font/roboto-mono-latin-400.woff2 b/docs/public/_/font/roboto-mono-latin-400.woff2 new file mode 100644 index 0000000..6163de7 Binary files /dev/null and b/docs/public/_/font/roboto-mono-latin-400.woff2 differ diff --git a/docs/public/_/font/roboto-mono-latin-500.woff b/docs/public/_/font/roboto-mono-latin-500.woff new file mode 100644 index 0000000..b12f6a1 Binary files /dev/null and b/docs/public/_/font/roboto-mono-latin-500.woff differ diff --git a/docs/public/_/font/roboto-mono-latin-500.woff2 b/docs/public/_/font/roboto-mono-latin-500.woff2 new file mode 100644 index 0000000..125f098 Binary files /dev/null and b/docs/public/_/font/roboto-mono-latin-500.woff2 differ diff --git a/docs/public/_/img/back.svg b/docs/public/_/img/back.svg new file mode 100644 index 0000000..201c83f --- /dev/null +++ b/docs/public/_/img/back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/_/img/caret.svg b/docs/public/_/img/caret.svg new file mode 100644 index 0000000..99857c1 --- /dev/null +++ b/docs/public/_/img/caret.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/_/img/chevron.svg b/docs/public/_/img/chevron.svg new file mode 100644 index 0000000..c397621 --- /dev/null +++ b/docs/public/_/img/chevron.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/_/img/close.svg b/docs/public/_/img/close.svg new file mode 100644 index 0000000..b4a8088 --- /dev/null +++ b/docs/public/_/img/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/_/img/docs_logo.png b/docs/public/_/img/docs_logo.png new file mode 100644 index 0000000..271f4cc Binary files /dev/null and b/docs/public/_/img/docs_logo.png differ diff --git a/docs/public/_/img/home-o.svg b/docs/public/_/img/home-o.svg new file mode 100644 index 0000000..95d193b --- /dev/null +++ b/docs/public/_/img/home-o.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/_/img/home.svg b/docs/public/_/img/home.svg new file mode 100644 index 0000000..4e96b35 --- /dev/null +++ b/docs/public/_/img/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/_/img/menu.svg b/docs/public/_/img/menu.svg new file mode 100644 index 0000000..8b43b2e --- /dev/null +++ b/docs/public/_/img/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/_/js/site.js b/docs/public/_/js/site.js new file mode 100644 index 0000000..124268d --- /dev/null +++ b/docs/public/_/js/site.js @@ -0,0 +1,4 @@ +!function(){"use strict";function e(n){3!==n.which&&2!==n.button&&(document.documentElement.classList.remove("is-clipped--nav"),s.classList.remove("is-active"),i.classList.remove("is-active"),window.removeEventListener("click",e),t(n))}function t(e){e.stopPropagation()}function n(){window.sessionStorage.setItem("nav-state",JSON.stringify(c))}function a(e,t){return[].slice.call((t||document).querySelectorAll(e))}var i=document.querySelector(".navigation-container"),s=document.querySelector(".navigation-toggle");s.addEventListener("click",function(n){if(s.classList.contains("is-active"))return e(n);document.documentElement.classList.add("is-clipped--nav"),s.classList.add("is-active"),i.classList.add("is-active"),window.addEventListener("click",e),t(n)}),i.addEventListener("click",t);var o=i.querySelector("[data-panel=menu]");if(o){var c=function(){var e=window.sessionStorage.getItem("nav-state");return e&&"1"===(e=JSON.parse(e)).__version__?e:{__version__:"1"}}(),r=function(e,t,n){var a=n+"@"+t;return e[a]||(e[a]={})}(c,i.dataset.component,i.dataset.version);i.querySelector(".context").addEventListener("click",function(){var e=i.querySelector(".is-active[data-panel]"),t="menu"===e.dataset.panel?"explore":"menu";e.classList.toggle("is-active"),i.querySelector("[data-panel="+t+"]").classList.toggle("is-active")}),a(".nav-toggle",o).forEach(function(e){var t=e.parentElement;e.addEventListener("click",function(){t.classList.toggle("is-active"),r.expandedItems=a(".is-active",o).map(function(e){return e.dataset.id}),n()})}),a(".nav-item",o).forEach(function(e,t){e.setAttribute("data-id","menu-"+e.dataset.depth+"-"+t)});var d=r.expandedItems||(r.expandedItems=[]);d.length&&a(d.map(function(e){return'.nav-item[data-id="'+e+'"]'}).join(","),o).forEach(function(e){e.classList.add("is-active")});var l=o.querySelector(".is-current-page");l&&function(e){for(var t,n=[e.dataset.id],a=e.parentNode;!(t=a.classList).contains("nav-menu");)"LI"===a.tagName&&t.contains("nav-item")&&(t.add("is-active","is-current-path"),n.push(a.dataset.id)),a=a.parentNode;return e.classList.add("is-active"),n}(l).forEach(function(e){d.indexOf(e)<0&&d.push(e)}),n(),function(e,t,n){if(!n)return t.scrollTop=e;var a=n.offsetTop-e<0,i=n.offsetTop-e+n.offsetHeight>t.offsetHeight;t.scrollTop=a?n.offsetTop-10:i?n.offsetTop-(t.offsetHeight-n.offsetHeight)+10:e}(r.scroll||0,o,l&&l.querySelector(".nav-link")),o.addEventListener("scroll",function(){r.scroll=Math.round(o.scrollTop),n()})}}(); +!function(){"use strict";function e(t,o){return n.contains(t)?e(t.offsetParent,t.offsetTop+o):o}function t(t){t&&(window.location.hash="#"+this.id,t.preventDefault()),window.scrollTo(0,e(this,0)-o.getBoundingClientRect().bottom)}var n=document.querySelector("article.doc"),o=document.querySelector(".toolbar");window.addEventListener("load",function e(n){var o,i;(o=window.location.hash)&&(i=document.getElementById(o.slice(1)))&&t.bind(i)(),window.removeEventListener("load",e)}),Array.prototype.slice.call(document.querySelectorAll('a[href^="#"]')).forEach(function(e){var n,o;(n=e.hash.slice(1))&&(o=document.getElementById(n))&&e.addEventListener("click",t.bind(o))})}(); +!function(){"use strict";var e=document.querySelector(".page-versions .versions-menu-toggle");if(e){var t=document.querySelector(".page-versions");e.addEventListener("click",function(e){t.classList.toggle("is-active"),e.stopPropagation()}),window.addEventListener("click",function(){t.classList.remove("is-active")})}}(); +document.addEventListener("DOMContentLoaded",function(){var t=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);0!==t.length&&t.forEach(function(t){t.addEventListener("click",function(e){e.stopPropagation(),t.classList.toggle("is-active"),document.getElementById(t.dataset.target).classList.toggle("is-active"),document.documentElement.classList.toggle("is-clipped--navbar")})})}); \ No newline at end of file diff --git a/docs/public/_/js/vendor/docsearch.min.js b/docs/public/_/js/vendor/docsearch.min.js new file mode 100644 index 0000000..f807026 --- /dev/null +++ b/docs/public/_/js/vendor/docsearch.min.js @@ -0,0 +1 @@ +!function t(e,n,r){function i(o,a){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!a&&u)return u(o,!0);if(s)return s(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};e[o][0].call(l.exports,function(t){var n=e[o][1][t];return i(n||t)},l,l.exports,t,e,n,r)}return n[o].exports}for(var s="function"==typeof require&&require,o=0;o=31},n.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),n.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],n.formatters.j=function(t){return JSON.stringify(t)},n.enable(r())},{"./debug":2}],2:[function(t,e,n){(n=e.exports=function(t){function e(){}function s(){var t=s,e=+new Date,o=e-(r||e);t.diff=o,t.prev=r,t.curr=e,r=e,null==t.useColors&&(t.useColors=n.useColors()),null==t.color&&t.useColors&&(t.color=n.colors[i++%n.colors.length]);var a=Array.prototype.slice.call(arguments);a[0]=n.coerce(a[0]),"string"!=typeof a[0]&&(a=["%o"].concat(a));var u=0;a[0]=a[0].replace(/%([a-z%])/g,function(e,r){if("%%"===e)return e;u++;var i=n.formatters[r];if("function"==typeof i){var s=a[u];e=i.call(t,s),a.splice(u,1),u--}return e}),"function"==typeof n.formatArgs&&(a=n.formatArgs.apply(t,a)),(s.log||n.log||console.log.bind(console)).apply(t,a)}e.enabled=!1,s.enabled=!0;var o=n.enabled(t)?s:e;return o.namespace=t,o}).coerce=function(t){return t instanceof Error?t.stack||t.message:t},n.disable=function(){n.enable("")},n.enable=function(t){n.save(t);for(var e=(t||"").split(/[\s,]+/),r=e.length,i=0;i1e4)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return n*u;case"days":case"day":case"d":return n*a;case"hours":case"hour":case"hrs":case"hr":case"h":return n*o;case"minutes":case"minute":case"mins":case"min":case"m":return n*s;case"seconds":case"second":case"secs":case"sec":case"s":return n*i;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n}}}}(t):e.long?function(t){return r(t,a,"day")||r(t,o,"hour")||r(t,s,"minute")||r(t,i,"second")||t+" ms"}(t):function(t){return t>=a?Math.round(t/a)+"d":t>=o?Math.round(t/o)+"h":t>=s?Math.round(t/s)+"m":t>=i?Math.round(t/i)+"s":t+"ms"}(t)}},{}],4:[function(t,e,n){!function(t,r){"object"==typeof n&&"object"==typeof e?e.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof n?n.docsearch=r():t.docsearch=r()}("undefined"!=typeof self?self:this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=21)}([function(t,e,n){"use strict";function r(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var i=n(1);t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return void 0===t||null===t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,function(t,r){t&&(n.isArray(t)?e[r]=[].concat(t):n.isObject(t)&&(e[r]=n.cloneDeep(t)))}),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,function(r,i){if(!(n=e.call(null,r,i,t)))return!1}),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,function(r,i){if(e.call(null,r,i,t))return n=!0,!1}),n):n},getUniqueId:function(){var t=0;return function(){return t++}}(),templatify:function(t){if(this.isFunction(t))return t;var e=i.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return(n?"":".")+t+e},escapeHighlightedString:function(t,e,n){e=e||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var o=document.createElement("div");return o.appendChild(document.createTextNode(t)),o.innerHTML.replace(RegExp(r(i.innerHTML),"g"),e).replace(RegExp(r(s.innerHTML),"g"),n)}}},function(t,e,n){"use strict";t.exports={element:null}},function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var s=t.length;if(s===+s)for(var o=0;o was loaded but did not call our provided callback"),JSONPScriptError:i("JSONPScriptError"," + + +Redirect Notice +

Redirect Notice

+

The page you requested has been relocated to websites/.

diff --git a/docs/public/websites/fedora-release/index.html b/docs/public/websites/fedora-release/index.html new file mode 100644 index 0000000..97f0cb6 --- /dev/null +++ b/docs/public/websites/fedora-release/index.html @@ -0,0 +1,309 @@ + + + + + + Fedora Release :: Fedora Websites + + + + + +
+ +
+ +
+

Fedora Release

+
+

Introduction

+
+
+ + + + + +
+ + +
+

This assume you have a working setup already. See the other documents (e.g. the +one using Docker to get a development environment working) to get set up. Also, +if using a container-based environment, ensure that the image you’re using +reflects the latest Dockerfile in the root of the repository.

+
+
+
+
+

This document guides you through updating the websites for a release (beta or +GA) of Fedora.

+
+
+

Most of the work comes down to editing one file, +sites/getfedora.org/release.yaml. What follows are the important points to +note.

+
+
+

The release.yaml file is broken into several main sections, and the relevant +ones are ga, beta, fmw, and gpg_keys.

+
+
+ + + + + +
+ + +
+

Pushing to the staging branch will update https://stg.getfedora.org/, which +pushing to the master branch will update https://getfedora.org/.

+
+
+
+
+

Beta Releases

+
+

If you are updating for a beta release, then you are free to leave the ga +section alone.

+
+
+

In the beta section, you’ll want show to be true. This toggles whether we +show the beta download links at all. It also changes the banner at the top of +the website to announce the beta instead of the previous GA release. The +announcement_release_number dictates which version number is shown in that +announcement, so you’ll want to bump it to the beta version being released.

+
+
+

Next you’ll want to edit the editions section, still under the beta parent +section. Bump the release_number and set the rc_version to the RC that was +called gold/ready for release. Find this information out from releng, if +necessary.

+
+
+
+
+
+

GA Releases

+
+
+

If you are updating for a ga release, then in the beta section, set show +to false, so that the beta downloads don’t show, and the announcement at the +top of the landing site reflects the new GA. Check with someone (usually Paul +Frields (stickster on IRC) to find the URL of the Fedora Magazine announcement +for the release, and set announcement_url to that, in the ga section.

+
+
+

Next, bump the release_number and rc_version of each edition under +editions, using the rc_version that was declared gold/ready for +release. Find this information out from releng, if necessary.

+
+
+
+
+

releases.json file

+
+
+

The next step is to produce the releases.json static file used by Fedora Media +Writer to produce its list of possible downloads. In the fmw section of +release.yaml, update the releases_json list to include the current non-EOL +versions of Fedora, including any current betas. If a version is in beta, set +the its milestone to beta. Otherwise set it to final or leave out the +field altogether.

+
+
+

For example:

+
+
+
+
fmw:
+  ...
+  releases_json:
+    - version: 31
+      milestone: beta
+    - version: 30
+    - version: 29
+
+
+
+

Once this is done, you’ll need to actually generate the releases.json file.

+
+
+

If using a containerized environment, you can do this from the root of the +repository (replacing sudo docker with podman if you use Podman):

+
+
+
+
sudo docker run -it --rm -v "$(pwd):/opt/:z" fedora-websites python ./scripts/releases-json.py > sites/getfedora.org/static/releases.json
+
+
+
+

Otherwise, if you’re not using a containerized environment, you can run the +script yourself after installing the python-fedfind package. From the root of +the repository:

+
+
+
+
python3 sites/getfedora.org/scripts/releases-json.py > sites/getfedora.org/static/releases.json
+
+
+
+

Check that releases.json looks sane (it should look like a blob of JSON), then +move on.

+
+
+
+
+

Checksum Files

+
+
+

You’ll need to import the checksum files into +sites/getfedora.org/static/checksums/. To find out which checksums you need to +import, you can simply do a build of getfedora.org, and it will error out and +tell you what is missing. This is by design to ensure we don’t miss a checksum +file.

+
+
+
+
+

GPG Keys

+
+
+

Lastly, you’ll want to add the latest GPG key information to gpg_keys in +release.yaml. Follow the pattern that is already there, and move any now-EOL +releases into the obsolete subsection.

+
+
+

Import any new GPG keys into sites/getfedora.org/static/keys/, naming the file +[short key id].txt e.g. 57BBCCBA.txt.

+
+
+
+
+

Conclusion

+
+
+

That should be all. The old sites (namely spins, labs, alt, arm) which haven’t +been ported to the new system need to be updated separately and are beyond the +scope of this document.

+
+
+

Commit your changes, and they should auto-deploy within two hours at most.

+
+
+
+
+
+

These nice people helped write this page:

+

Rick Elrod

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/index.html b/docs/public/websites/index.html new file mode 100644 index 0000000..ea82214 --- /dev/null +++ b/docs/public/websites/index.html @@ -0,0 +1,157 @@ + + + + + + Fedora Websites :: Fedora Websites + + + + + +
+ +
+ +
+

Fedora Websites

+
+

The Fedora Websites project owns and maintains the Project’s online presence. +Among other things, the team:

+
+
+
    +
  • +

    Works closely with the +Fedora Design team to build +our websites in a way that is visually pleasing, easy to use, accessible to +everybody, and provides a good experience for newcomers and existing users +and contributors alike.

    +
  • +
  • +

    Works closely with the +Fedora Translations team to +ensure that websites are able to be translated into different languages.

    +
  • +
  • +

    Maintains the content of the websites, updating it as necessary for releases, +new editions, new spins, and so on.

    +
  • +
  • +

    Typically has one member (either in Design or Websites) who sits on the +Fedora Mindshare committee.

    +
  • +
+
+
+
+

These nice people helped write this page:

+

Rick Elrod, Ryan Lerch

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/newcontent-edition/index.html b/docs/public/websites/newcontent-edition/index.html new file mode 100644 index 0000000..e811359 --- /dev/null +++ b/docs/public/websites/newcontent-edition/index.html @@ -0,0 +1,263 @@ + + + + + + New Edition :: Fedora Websites + + + + + +
+ +
+ +
+

New Edition

+
+

Introduction

+
+
+

Fedora editions are "versions" of Fedora that users can install. These include +"official" editions (Workstation and Server at time of writing), but the +ultimate goal in Websites is to also make Spins and Labs editions be considered +"editions" in some form as far as websites are concerned. That is to say, we’d +like to ultimately have Spins and Labs have a section on the main getfedora.org +site, rendering https://spins.fedorparoject.org/ and +https://labs.fedoraproject.org/ useless and able to be gotten rid of. +Doing this effectively will take some time.

+
+
+

Also note that most of the content in this document applies to adding pages in +general, with the notable exception of the release.yaml edits. Adding a page +to getfedora.org should follow largely the same process, though.

+
+
+ + + + + +
+ + +
+

All new editions should be added to getfedora.org, to aid in our goal of getting +rid of all of the *.fedoraproject.org edition-specific subdomain sites. This +generates a more consistent and less confusing user experience and makes +maintenance of the websites easier going forward. Everything in this document +assumes that you are working with the getfedora.org codebase, and NOT creating a +new site from scratch.

+
+
+
+
+

Now then, all work in this document takes place in the repository in which +getfedora.org lives, and particularly +in the sites/getfedora.org/ directory.

+
+
+
+
+

Edition-specific Release Variables

+
+
+

The first step is to edit release.yaml, and add the relevant sections under +ga and beta for your new edition. Use workstation and server as +templates. You might not need all variables that these existing sections have, +or you might need to add new ones, depending on your templates, but these blocks +should get you started.

+
+
+
+
+

Exporting the Edition Routes

+
+
+

Now, open main.py and go to near the bottom, where you’ll note a number of +export_route(…​) calls. This method is a custom method defined earlier in the +file, which does a little bit of work for us: The first argument is an internal +identifier name, so that we can reference the page using url_for safely (if +the URL changes, so will the URLs that get generated by url_for). The second +argument is a path to the directory that contains the templates you’ll make, but +with a preceding and trailing /. Follow the example of the other, currently +existing pages and add the appropriate export_route calls at the end.

+
+
+
+
+

Hacking the Templates

+
+
+

The templates themselves live in the sites directory (under +sites/getfedora.org/ still). There are already templates started (but not +currently exported in main.py) for silverblue, coreos, and iot, at time +of writing.

+
+
+ + + + + +
+ + +
+

Every string you add must be enclosed in {% trans %} …​ {% endtrans %} +blocks so that it can be translated. If the string spans multiple lines (we tend +to break at 80 characters but are fairly lenient about this), then the opening +block should instead be {% trans trimmed %} (the closing block is still just +{% endtrans %}).

+
+
+
+
+

You can copy the templates from the existing editions, if you need inspiration +or help.

+
+
+
+
+

Letting the Translators Do Their Thing

+
+
+

Once the above is done, the next step is get all the strings in the hands of the +Fedora Translations team. If you have an account on Fedora’s Zanata instance, +and are in the appropriate websites group on Zanata, and have a valid +~/.config/zanata.ini file, you can do this step yourself. Otherwise you’ll +either need to be added to the appropriate team or have someone do this for you:

+
+
+

Run ./scripts/translations-source.sh. At the end of its output, it will give +you the Zanata command to push the strings up: zanata push getfedora.org.pot

+
+
+
+
+

Concluding

+
+
+

Largely, that is it. You’ve added variables that are easy to update each release +(in release.yaml), you’ve exported the pages, written your templates in a +translatable way, and pushed those strings to the Translations team. Now you can +sit back and relax while the translators do their thing. Their translations will +go live immediately (well, within an hour) and automatically.

+
+
+
+
+
+

These nice people helped write this page:

+

Rick Elrod

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/newcontent-site/index.html b/docs/public/websites/newcontent-site/index.html new file mode 100644 index 0000000..b1879d9 --- /dev/null +++ b/docs/public/websites/newcontent-site/index.html @@ -0,0 +1,147 @@ + + + + + + Creating A New Site :: Fedora Websites + + + + + +
+ +
+ +
+

Creating A New Site

+
+

In rare cases, you might need to create an entirely new site, rather than an +edition or page on getfedora.org.

+
+
+

In a future world, this document will help you do so.

+
+
+

For this to happen effectively, we’ll need to abstract some things out from the +current getfedora.org work.

+
+
+

But familiarizing yourself with Flask +and Frozen-Flask is a good starting +point, as we plan for all of our websites to build using this toolset.

+
+
+
+

These nice people helped write this page:

+

Rick Elrod

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/newcontent/index.html b/docs/public/websites/newcontent/index.html new file mode 100644 index 0000000..ae335de --- /dev/null +++ b/docs/public/websites/newcontent/index.html @@ -0,0 +1,164 @@ + + + + + + Creating New Content :: Fedora Websites + + + + + +
+ +
+ +
+

Creating New Content

+
+
+
+

Content can be broken into several different components, although some of the +process is the same for all cases.

+
+
+

All new sites are being built with the Python Flask +framework and the Frozen-Flask library +for generating static pages.

+
+
+
+
+

New Editions

+
+
+

New editions of Fedora should be added to the getfedora.org website. We are +trying to get away from having a bunch of *.fedoraproject.org sites for each +of the various editions (currently we have https://coreos.fedoraproject.org, +https://iot.fedoraproject.org, etc.).

+
+
+
+
+

New Websites

+
+
+

There are cases, however, where the content being added is not a new edition, +and is deserving of having its own distinct website, separate from +getfedora.org. These cases should probably be somewhat rare.

+
+
+
+
+
+

These nice people helped write this page:

+

Rick Elrod

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/setup-docker/index.html b/docs/public/websites/setup-docker/index.html new file mode 100644 index 0000000..26ca53b --- /dev/null +++ b/docs/public/websites/setup-docker/index.html @@ -0,0 +1,235 @@ + + + + + + Getting Set Up (using Docker) :: Fedora Websites + + + + + +
+ +
+ +
+

Getting Set Up (using Docker)

+
+

Preliminary Notes

+
+
+

It is now easier to get started on developing the Fedora Websites with the use +of Docker (or Podman).

+
+
+

We ship a Dockerfile which will install dependencies into an image +for you, so all you are left to do is mount the site as a volume, pull +translations, and start the development server.

+
+
+ + + + + +
+ + +
+

The documentation here refers to docker, but our fairly simple use +of it means that things are likely to work with podman with little +modification.

+
+
+
+
+
+
+

Building the container image

+
+
+

First clone the repository:

+
+
+
+
git clone https://pagure.io/fedora-web/websites.git
+
+
+
+

(You may instead clone your fork of it, or add your fork as a second +remote later on.)

+
+
+

Now ensure Docker is running and run:

+
+
+
+
sudo docker build -t fedora-websites .
+
+
+
+

This will generate a container image for you to use.

+
+
+
+
+

Pulling translations

+
+
+

We have a script for pulling translations. Let’s call it from within +the container:

+
+
+
+
sudo docker run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/pull-translations.sh
+
+
+
+

Notice here that we are mounting a volume (-v) in Docker which +points to our check-out of the repository. We’re referring to the +fedora-websites image created above, and calling the +./scripts/pull-translations.sh script from within it.

+
+
+
+
+

Running the development server

+
+
+

Now we are ready to run the development server:

+
+
+
+
sudo docker run -it --rm -v "$(pwd):/opt/:z" -p 5000:5000 fedora-websites flask run --reload --host 0.0.0.0
+
+
+
+

Note that we need -p 5000:5000 so that we can access the development +server from our actual host. Also notice that we need to tell Flask to +listen on 0.0.0.0 as by default it listens on 127.0.0.1 which +won’t be accessible outside of the container.

+
+
+

You may now go to http://localhost:5000/ in your browser of choice.

+
+
+

Now you are ready to go and any changes you make in the repository +should be reflected immediately upon refreshing the page in your +browser.

+
+
+
+
+
+

These nice people helped write this page:

+

Rick Elrod

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/setup/index.html b/docs/public/websites/setup/index.html new file mode 100644 index 0000000..b867dc3 --- /dev/null +++ b/docs/public/websites/setup/index.html @@ -0,0 +1,284 @@ + + + + + + Getting Set Up :: Fedora Websites + + + + + +
+ +
+ +
+

Getting Set Up

+
+
+
+ + + + + +
+ + +
+

We now have documentation on using the Dockerfile which ships in the Fedora +websites repository, and suggest trying that method before using the method +outlined on this page. See this tutorial.

+
+
+
+
+
+
+

Preliminary Notes

+
+
+

There are some open tickets (31, +11) about getting the websites +repository building on Fedora with Python 3.

+
+
+

However, it should be able to be built on Fedora 30, using Python 2 packages, +for now.

+
+
+

Fedora 29 Alternative

+
+

Note, the dependencies below may not currently resolve due to package renaming +in Fedora 30. If the dependencies do not resolve in Fedora 30, running Flask +from a Fedora 29 container is an alternative. An example to run the Fedora 29 +container using podman is as follows:

+
+
+
+
# Expose the default port for Flask, 5000.
+podman run --expose 5000 --net=host --privileged -v /path/to/websites/repo:/path/to/websites/repo -ti registry.fedoraproject.org/fedora:29
+
+
+
+
+
+
+

Dependencies

+
+
+

That said, assuming Fedora 30, install the dependencies as follows +[1]:

+
+
+
+
dnf install \
+        git \
+        python-flask \
+        python-frozen-flask \
+        python-flask-assets \
+        python-rjsmin \
+        python-cssmin \
+        python-flask-babel \
+        python-flask-htmlmin \
+        python-cssutils \
+        rubygem-sass \
+        babel \
+        python3-jinja2 \
+        python-pyyaml \
+        python-dateutil \
+        python-dogpile-cache \
+        python-requests \
+        python-zanata-client
+
+
+
+
+
+

Pull Strings

+
+
+

Now we need to pull the current translations. After installing the dependencies +above, you can cd into sites/getfedora.org/ and run: +./scripts/pull-translations.sh.

+
+
+

Once the dependencies are installed and translations are pulled, you can do one +of two things:

+
+
+
+
+

Use the Development Server

+
+
+

One option is to use the Flask built-in development server. This is handy +because it prevents you from needing to build the websites every time you change +something. However, it bypasses the Frozen-Flask system which creates are static +sites, entirely, so it’s not entirely an accurate representation of what goes +live.

+
+
+

To use the development server:

+
+
+
+
export FLASK_APP=main.py
+flask run --reload
+
+
+
+

Now you many visit http://localhost:5000/ to get to the site.

+
+
+
+
+

Use Apache

+
+
+

Alternatively, you may simply run python main.py. You’ll get a statically +built site in the ./build/ directory. However, the HTML files are all +language-code-suffixed as Apache/httpd MultiViews system expects +(e.g. index.html.en). As a result you cannot just run a simple HTTP server +(like python -m SimpleHTTPServer) in the ./build/ directory, unfortunately.

+
+
+

You can, however, set up an Apache on your system, and point it to the +./build/ directory.

+
+
+ + + + + +
+ + +
+

(We should probably add an example Apache config here at some point).

+
+
+
+
+
+
+
+
+1. This list comes directly from the Fedora Infrastructure OpenShift build for Websites found here. +
+
+
+
+

These nice people helped write this page:

+

Rick Elrod

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/team/index.html b/docs/public/websites/team/index.html new file mode 100644 index 0000000..1d8733d --- /dev/null +++ b/docs/public/websites/team/index.html @@ -0,0 +1,138 @@ + + + + + + Fedora Websites & Apps Team Documentation :: Fedora Websites + + + + + +
+ +
+ +
+

Fedora Websites & Apps Team Documentation

+
+

This section of documentation is meta documentation for the Websites & Apps Team best practices. +These documents are less about our projects, and more about how we work together and collaborate as a team. +Use the sidebar navigation to browse to other pages about the team.

+
+
+

include::../nav.adoc

+
+
+
+

These nice people helped write this page:

+

Fedora Websites &amp; Apps Community

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/team/meetings/index.html b/docs/public/websites/team/meetings/index.html new file mode 100644 index 0000000..9d49d66 --- /dev/null +++ b/docs/public/websites/team/meetings/index.html @@ -0,0 +1,184 @@ + + + + + + Guide to W&A meetings :: Fedora Websites + + + + + +
+ +
+ +
+

Guide to W&A meetings

+ +
+
+
+

This page is an overview of how the Fedora Websites & Apps Team runs meetings together as a community. +The article shares more about how we work and best practices that help keep our team meetings running smoothly. +If you think something is missing here, please open an issue or submit a patch to open a discussion with the team.

+
+
+
+
+

In-person meetings

+
+
+

In normal circumstances, occasional in-person meetings (or "hackfests") help us coordinate work and get to know each other as a team. +However, in light of current global circumstances with COVID-19, this travel is not yet an option. +When this option returns, this section of documentation can be revisited for new additions.

+
+
+
+
+

Synchronous virtual meetings

+
+
+

What are synchronous virtual meetings? +This is a fancy way of saying meetings where we are all sitting together at the same moment, across many time zones. +Any meeting participants can be an engaged part of the meeting.

+
+
+

Chat

+
+

We have not yet piloted chat-led meetings, given recent zodbot bridging challenges with IRC, Matrix, and Telegram.

+
+
+
+

Audio/Video

+
+

To be written.

+
+
+
+
+
+
+

These nice people helped write this page:

+

Justin W. Flory, Fedora Community

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/public/websites/translation-flow/index.html b/docs/public/websites/translation-flow/index.html new file mode 100644 index 0000000..7e2af94 --- /dev/null +++ b/docs/public/websites/translation-flow/index.html @@ -0,0 +1,261 @@ + + + + + + Translation flow (for Fedora websites) :: Fedora Websites + + + + + +
+ +
+ +
+

Translation flow (for Fedora websites)

+
+

General

+
+
+

Fedora websites can be viewed in many languages. This page gives some details on how this happens.

+
+
+

Tagging text

+
+

System needs to be told what strings needs to be translated. +Generally every text inside web page should be surrounded with tags:

+
+
+
+
{% trans trimmed %}Translate this text.{% endtrans %}
+
+
+
+
+
+
+

Generating pot file

+
+
+

First we need to pull all translatable strings into a file called getfedora.org.pot

+
+
+

This file is generated by running:

+
+
+
+
podman run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/translations-source.sh
+
+
+
+

This file needs to be sent to translations repository

+
+
+

If you don’t have access to the translations repository push it to fedora-websites and create a pull request and once approved it should be automatically sent to translations repository with 24 hours.

+
+
+
+
+

Weblate process (How strings get translated)

+
+
+

Once getfedora.org.pot file is in the translations repository it will be pulled by Weblate system and merged into translatable strings. It can then be translated by translators.

+
+
+
+
+

Manual testing

+
+
+ + + + + +
+ + +
+

Any translations made here will not get propagated to the weblate of final versions of the page.

+
+
+
+
+

You can test the changes manually by:

+
+
+

1) +Update strings to the language files

+
+
+
+
podman run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/translations-update-local.sh
+
+
+
+

Now edit desired language file, for example

+
+
+
+
nano sites/getfedora.org/translations/fi/LC_MESSAGES/messages.po
+
+
+
+

Find the string you want to test, format inside file is:

+
+
+
+
`#: partials/templates/download_card.html:13`   Location(s) of string.
+`msgid "Download"`   Text in english.
+`msgstr "Lataa"`     Text in desired language.
+
+
+
+

Edit the msgstr

+
+
+

Once edited translations need to be compiled into more efficient format for the web server. This is done by running:

+
+
+
+
podman run -it --rm -v "$(pwd):/opt/:z" fedora-websites ./scripts/translations-compile-local.sh
+
+
+
+

You can now change your browser setting to desired language and see how the translations are working out.

+
+
+
+

Description of translation scripts inside sites/getfedora.org/scripts

+
+ + + + + +
+ + +
+

Technically scripts can be run without using podman, but will then require proper setup in the local machine. The instructions given above are safer for generic users.

+
+
+
+
+
+
+
+
+

These nice people helped write this page:

+

Jan Kuparinen

+

Want to help? Learn how to contribute to Fedora Docs.

+
+
+
+

All Fedora Documentation content available under CC-BY-SA 3.0 or, when specifically noted, under another accepted free and open content license.

+

Last build:

+
+ + + + + diff --git a/docs/site.yml b/docs/site.yml new file mode 100644 index 0000000..b8fdc7f --- /dev/null +++ b/docs/site.yml @@ -0,0 +1,20 @@ +site: + title: Fedora Websites + start_page: websites::index +content: + sources: + - url: . + branches: HEAD +ui: + bundle: + url: https://asamalik.fedorapeople.org/ui-bundle.zip + snapshot: true + default_layout: with_menu +output: + clean: true + dir: ./public + destinations: + - provider: archive +runtime: + pull: true + cache_dir: ./cache