WIP: codeberg design & gettext translation #12

Open
momar wants to merge 11 commits from momar/build-deploy-reg-server:codeberg-design into main
  1. 2
      .gitignore
  2. 240
      etc/reg-server/locales/de/messages.po
  3. 238
      etc/reg-server/locales/en/messages.po
  4. 1
      etc/reg-server/static/codeberg.svg
  5. BIN
      etc/reg-server/static/favicon.ico
  6. 3
      etc/reg-server/static/fonts/LICENSE
  7. BIN
      etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0-ExdGM.woff2
  8. BIN
      etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0KExQ.woff2
  9. BIN
      etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0aExdGM.woff2
  10. BIN
      etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0yExdGM.woff2
  11. BIN
      etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcadA_xcy4.woff2
  12. BIN
      etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcadw_xcy4.woff2
  13. BIN
      etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcaeg_x.woff2
  14. BIN
      etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcafg_xcy4.woff2
  15. BIN
      etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFSzr-tdg.woff2
  16. BIN
      etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFWzr8.woff2
  17. BIN
      etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFYzr-tdg.woff2
  18. BIN
      etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFbzr-tdg.woff2
  19. BIN
      etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019-7DRs5.woff2
  20. BIN
      etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019K7DQ.woff2
  21. BIN
      etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019a7DRs5.woff2
  22. BIN
      etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019y7DRs5.woff2
  23. 239
      etc/reg-server/static/form.css
  24. 197
      etc/reg-server/static/form.js
  25. 141
      etc/reg-server/templates/cs/form.tmpl
  26. 17
      etc/reg-server/templates/cs/thanks.tmpl
  27. 140
      etc/reg-server/templates/de/form.tmpl
  28. 140
      etc/reg-server/templates/en/form.tmpl
  29. 17
      etc/reg-server/templates/en/thanks.tmpl
  30. 285
      etc/reg-server/templates/form.tmpl
  31. 144
      etc/reg-server/templates/it/form.tmpl
  32. 17
      etc/reg-server/templates/it/thanks.tmpl
  33. 0
      etc/reg-server/templates/join.txt
  34. 140
      etc/reg-server/templates/nl/form.tmpl
  35. 17
      etc/reg-server/templates/nl/thanks.tmpl
  36. 0
      etc/reg-server/templates/thanks.tmpl
  37. 2
      etc/systemd/system/reg-server.service
  38. 9
      go.mod
  39. 237
      main.go

2
.gitignore vendored

@ -0,0 +1,2 @@
*.sum
*.mo

240
etc/reg-server/locales/de/messages.po

@ -0,0 +1,240 @@
msgid ""
msgstr ""
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgctxt "Language Identifier"
msgid "en"
msgstr "de"
msgctxt "Page Title"
msgid "Join Codeberg e. V."
msgstr "Codeberg e. V. beitreten"
# General information
msgid "Become a Member"
msgstr "Werde jetzt Mitglied im Codeberg e. V., um die Entwicklung freier Software zu fördern!"
msgid "Become a Member (Markdown Description)"
msgstr "Als Vereinsmitglied bist du Teil unserer Mission für freie Software. "
"Du bist an der Spitze neuer Technologien und kannst die Entwicklung von Codeberg durch deine Stimme "
"bei vielen Entscheidungen und der Wahl des Präsidiums beeinflussen. "
"Wir brauchen Leute wie dich, die sich "
"finanziell oder durch ehrenamtliche Arbeit einbringen, und damit das Projekt voranbringen!"
# Step 1
msgid "Kind of Membership"
msgstr "Art der Mitgliedschaft"
msgid "Kind of Membership (Markdown Description)"
msgstr "Als **Fördermitglied** kannst du die Arbeit des Codeberg e. V. direkt und effizient unterstützen. Du erhältst "
"regelmäßige Informationen über die Arbeit des Vereins. Mit einer **aktiven Mitgliedschaft** kannst du dich zusätzlich "
"aktiv im Verein einbringen, und hast ein Stimmrecht in der Mitgliederversammlung.\n"
"\n"
"Privatpersonen können Fördermitglied oder aktives Mitglied sein. Firmen können den Codeberg e. V. nur mit einer "
"Fördermitgliedschaft unterstützen."
msgid "Who or what are you?"
msgstr "Wer oder was bist du?"
msgid "Private Individual"
msgstr "Privatperson"
msgid "Legal Entity (e.g. organization or company)"
msgstr "Juristische Person (z. B. Verein oder Firma)"
msgid "What kind of member do you want to become?"
msgstr "Welche Art von Mitglied möchtest du werden?"
msgid "Active Member"
msgstr "Aktives Mitglied"
msgid "Supporting Member"
msgstr "Fördermitglied"
# Step 2
msgid "Volunteer Work"
msgstr "Ehrenamtliche Unterstützung"
msgid "Volunteer Work (Markdown Description)"
msgstr "Wenn du dich aktiv in die Arbeit des Codeberg e. V. einbringen möchtest, und dir vorstellen kannst, "
"uns bei Fragen und Problemen tatkräftig oder beratend beiseite zu stehen, lass uns das bitte wissen:"
msgid "I'd like to support you in the following areas:"
msgstr "Ich möchte euch in folgenden Bereichen unterstützen:"
msgctxt "Volunteer Work Options"
msgid "application-development"
msgstr "Anwendungsentwicklung (v. a. mit Go)"
msgctxt "Volunteer Work Options"
msgid "it-security"
msgstr "IT-Sicherheit & Penetration Testing"
msgctxt "Volunteer Work Options"
msgid "database-engineering"
msgstr "Datenbanken inkl. Replikation und Performance"
msgctxt "Volunteer Work Options"
msgid "distributed-filesystems"
msgstr "Verteilte Dateisysteme (v. a. Ceph)"
msgctxt "Volunteer Work Options"
msgid "cluster-infrastructure"
msgstr "Cluster-Infrastruktur & Configuration as Code (v. a. Kubernetes & Terraform)"
msgctxt "Volunteer Work Options"
msgid "bookkeeping-and-finances"
msgstr "Kassenprüfung, Finanzen & Steuerrecht"
msgctxt "Volunteer Work Options"
msgid "legal-stuff"
msgstr "IT-Recht, Vereinsrecht, pro bono Rechtsberatung"
msgctxt "Volunteer Work Options"
msgid "public-relations"
msgstr "Öffentlichkeitsarbeit im Bereich Open Source"
msgctxt "Volunteer Work Options"
msgid "fundraising"
msgstr "Fundraising"
msgctxt "Volunteer Work Options"
msgid "Other areas where I can help:"
msgstr "Sonstiges Bereiche in denen ich helfen kann:"
# Step 3
msgid "Personal Information"
msgstr "Persönliche Daten"
msgid "First Name:"
msgstr "Vorname:"
msgid "Last Name:"
msgstr "Nachname:"
msgid "Organization or Company:"
msgstr "Verein oder Firma:"
msgid "Email Address:"
msgstr "E-Mail-Adresse:"
msgid "Email Address (Markdown Description)"
msgstr "Per E-Mail werden regelmäßig Informationen über die Arbeit des Vereins versendet, und etwa Termine zu "
"Abstimmungen und Mitgliederversammlungen mitgeteilt. Auch ist die Mitgliedschaft jederzeit per E-Mail formlos kündbar."
msgid "Postal Address (Markdown Description)"
msgstr "Als Verein sind wir rechtlich dazu verpflichtet, die aktuelle Postanschrift unserer Mitglieder zu kennen. "
"Normalerweise versenden wir keine Post. Nur in Ausnahmefällen wie einer nicht funktionierenden E-Mail-Adresse werden "
"wir per Brief Kontakt aufnehmen."
msgid "Street Address:"
msgstr "Straße & Hausnummer:"
msgid "Address Details:"
msgstr "Addresszusatz:"
msgid "Postal Code:"
msgstr "Postleitzahl:"
msgid "City:"
msgstr "Ort:"
msgid "Country:"
msgstr "Land:"
msgid "Accept Privacy Policy (Markdown Description)"
msgstr "Die Verarbeitung deiner personenbezogenen Daten erfolgt gemäß unserer "
"[Datenschutzerklärung](https://codeberg.org/codeberg/org/src/branch/master/PrivacyPolicy.md), welche du als "
"Vereinsmitglied akzeptieren musst."
msgid "I accept the privacy policy"
msgstr "Ich akzeptiere die Datenschutzerklärung"
# Step 4
msgid "Membership Fee"
msgstr "Mitgliedsbeitrag"
msgid "Membership Fee Information (Markdown Description)"
msgstr "Mit dem Mitgliedsbeitrag werden unsere Serverkosten, Werbung und vieles mehr finanziert. Die Höhe und den "
"Abbuchungsrhythmus kannst du selbst wählen. Für aktive Mitglieder gilt zur Zeit ein **Mindest-Jahresbeitrag von "
"24 €**. Wenn du Mitglied werden möchtest, aber mit eingeschränkter finanzieller Leistungskraft nicht den vollen "
"Mitgliedsbeitrag zahlen möchtest (z.B. Schüler, Studenten, Arbeitslose, Rentner und Sozialhilfeempfänger), kannst "
"du einen Antrag auf Ermäßigung stellen. Dies senkt den jährlichen Mindestbeitrag auf 12 €."
msgid "Additional Membership Fee Information for Legal Entities (Markdown Description)"
msgstr "**Für juristische Personen gilt abweichend ein Mindest-Jahresbeitrag von 100 €.**"
msgid "I want to apply for a discounted membership fee"
msgstr "Ich möchte eine ermäßigte Mitgliedschaft beantragen"
msgid "Why do you want to pay a discounted membership fee?"
msgstr "Wieso möchtest du einen reduzierten Mitgliedsbeitrag zahlen?"
msgid "Discounted Membership Information (Markdown Description)"
msgstr "Für Personen mit eingeschränkter finanzieller Leistungskraft "
"(z.B. Schüler, Studenten, Arbeitslose, Rentner und Sozialhilfeempfänger) "
"kann der Mindest-Mitgliedsbeitrag auf Antrag ermäßigt werden. "
"Der Vorstand entscheidet über den schriftlich eingebrachten Antrag auf Ermäßigung."
msgid "Chosen yearly membership fee:"
msgstr "Gewählter jährlicher Mitgliedsbeitrag:"
msgid "Payment Method (SEPA transactions must be at least 10 €):"
msgstr "Zahlungsart (für SEPA-Transaktionen gilt ein Minimum von 10 €):"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee'), 0, 2)} € yearly)"
msgstr "SEPA-Lastschrift (${fmt(val('membership-fee'), 0, 2)} € jährlich)"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee') / 2, 0, 2)} € half-yearly)"
msgstr "SEPA-Lastschrift (${fmt(val('membership-fee') / 2, 0, 2)} € halb-jährlich)"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee') / 4, 0, 2)} € quarterly)"
msgstr "SEPA-Lastschrift (${fmt(val('membership-fee') / 4, 0, 2)} € viertel-jährlich)"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee') / 12, 0, 2)} € monthly)"
msgstr "SEPA-Lastschrift (${fmt(val('membership-fee') / 12, 0, 2)} € monatlich)"
msgctxt "Payment Method"
msgid "Manual Bank Transfer"
msgstr "Manuelle Banküberweisung"
msgid "Manual Bank Transfer Information (Markdown Description)"
msgstr "Bei der manuellen Banküberweisung bist du selbst dafür verantwortlich, den gewählten "
"Mitgliedsbeitrag im gewählten Intervall auf folgende Bankverbindung zu überweisen:"
msgid "IBAN:"
msgstr "IBAN:"
msgid "BIC:"
msgstr "BIC:"
msgid "SEPA Disclaimer (Markdown)"
msgstr "Ich ermächtige den Codeberg e. V. (DE40ZZZ00002172825), Zahlungen von meinem Konto mittels Lastschrift "
"einzuziehen. Zugleich weise ich mein Kreditinstitut an, die vom Codeberg e. V. auf mein Konto gezogenen Lastschriften "
"einzulösen. Ich kann innerhalb von acht Wochen, beginnend mit dem Belastungsdatum, die Erstattung des belasteten "
"Betrages verlangen. Es gelten dabei die mit meinem Kreditinstitut vereinbarten Bedingungen."
# Step 5
msgid "Submit Membership Application"
msgstr "Mitgliedsantrag abschicken"
msgid "Accept Bylaws (Markdown Description)"
msgstr "Ja, ich möchte Mitglied im Codeberg e. V. gemäß der "
"[aktuell gültigen Satzung](https://codeberg.org/codeberg/org/src/branch/master/Satzung.md) werden!"
msgid "Become Member Now!"
msgstr "Jetzt Mitglied werden!"

238
etc/reg-server/locales/en/messages.po

@ -0,0 +1,238 @@
msgid ""
msgstr ""
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgctxt "Language Identifier"
msgid "en"
msgstr "en"
msgctxt "Page Title"
msgid "Join Codeberg e. V."
msgstr "Join Codeberg e. V."
# General information
msgid "Become a Member"
msgstr "Join the Codeberg e.V. and actively support Free and Open Software Development!"
msgid "Become a Member (Markdown Description)"
msgstr "As a member, you are part of the Codeberg mission. "
"You are at the front of new technology and you can influence the development of "
"Codeberg by voting for many decisions including the vote of the presidium. "
"People like you support the project by giving a financial contribution and ideally via voluntary work."
# Step 1
msgid "Kind of Membership"
msgstr "Kind of Membership"
msgid "Kind of Membership (Markdown Description)"
msgstr "As a **Supporting Member** you support the goals of the Codeberg e.V. directly, and will receive regular updates "
"about the work of the Codeberg e.V. As an **Active Member** you join the Codeberg e.V., and will have voting rights. "
"\n\n"
"Private individuals can choose to be either supporting or active members. Corporate entities can support "
"the Codeberg e.V. by means of a supporting membership."
msgid "Who or what are you?"
msgstr "Who or what are you?"
msgid "Private Individual"
msgstr "Private Individual"
msgid "Legal Entity (e.g. organization or company)"
msgstr "Legal Entity (e.g. organization or company)"
msgid "What kind of member do you want to become?"
msgstr "What kind of member do you want to become?"
msgid "Active Member"
msgstr "Active Member"
msgid "Supporting Member"
msgstr "Supporting Member"
# Step 2
msgid "Volunteer Work"
msgstr "Volunteer Work"
msgid "Volunteer Work (Markdown Description)"
msgstr "If you would like to actively contribute to the project and you can imagine "
"to advise us on questions and problems, please let us know:"
msgid "I'd like to support you in the following areas:"
msgstr "I'd like to support you in the following areas:"
msgctxt "Volunteer Work Options"
msgid "application-development"
msgstr "Application development (esp. in Go)"
msgctxt "Volunteer Work Options"
msgid "it-security"
msgstr "IT-Security & Penetration Testing"
msgctxt "Volunteer Work Options"
msgid "database-engineering"
msgstr "Database Engineering incl. Replication and Performance"
msgctxt "Volunteer Work Options"
msgid "distributed-filesystems"
msgstr "distributed Filesystems Dateisysteme (esp. Ceph)"
msgctxt "Volunteer Work Options"
msgid "cluster-infrastructure"
msgstr "Cluster-Infrastructure & Configuration as Code (esp. Kubernetes & Terraform)"
msgctxt "Volunteer Work Options"
msgid "bookkeeping-and-finances"
msgstr "Bookkeeping, Finances, Taxes"
msgctxt "Volunteer Work Options"
msgid "legal-stuff"
msgstr "IT and association law, pro bono legal advice"
msgctxt "Volunteer Work Options"
msgid "public-relations"
msgstr "Public relations in the scope of Open Source"
msgctxt "Volunteer Work Options"
msgid "fundraising"
msgstr "Fundraising"
msgctxt "Volunteer Work Options"
msgid "Other areas where I can help:"
msgstr "Other areas where I can help:"
# Step 3
msgid "Personal Information"
msgstr "Personal Information"
msgid "First Name:"
msgstr "First Name:"
msgid "Last Name:"
msgstr "Last Name:"
msgid "Organization or Company:"
msgstr "Organization or Company:"
msgid "Email Address:"
msgstr "Email Address:"
msgid "Email Address (Markdown Description)"
msgstr "Regular updates about the work of the Codeberg e.V., and invitations to vote and to attend membership meetings "
"are sent out by e-mail. We also use the e-mail address to identify you as a member and to allow you to "
"cancel membership at any time by writing an email from that address."
msgid "Postal Address (Markdown Description)"
msgstr "As Codeberg e.V. we are legally required to keep up-to-date records of postal addresses of our members. "
"We would only send letters by post if we did not have a functioning e-mail address."
msgid "Street Address:"
msgstr "Street and Number:"
msgid "Address Details:"
msgstr "Address Line 2:"
msgid "Postal Code:"
msgstr "ZIP code:"
msgid "City:"
msgstr "City:"
msgid "Country:"
msgstr "Country:"
msgid "Accept Privacy Policy (Markdown Description)"
msgstr "The processing of your personal data is carried out in accordance with our "
"[privacy policy](https://codeberg.org/codeberg/org/src/branch/master/PrivacyPolicy.md), "
"which you must accept as a member of the association."
msgid "I accept the privacy policy"
msgstr "I accept the privacy policy"
# Step 4
msgid "Membership Fee"
msgstr "Membership Fee"
msgid "Membership Fee Information (Markdown Description)"
msgstr "The Membership Fee is used to finance the server costs, advertisements and more. "
"You can choose the height and the debiting rhythm yourself. "
"For active members, there is currently a minimum annual fee of 24 €. "
"If you want to become member, but have limited financial means, you can apply "
"for a discounted membership fee which is only 12 € annually."
msgid "Additional Membership Fee Information for Legal Entities (Markdown Description)"
msgstr "**For legal entities, the minimum annual fee is 100 €.**"
msgid "I want to apply for a discounted membership fee"
msgstr "Ich möchte eine Ehrenmitgliedschaft beantragen"
msgid "Why do you want to pay a discounted membership fee?"
msgstr "Wieso möchtest du Ehrenmitglied werden?"
msgid "Discounted Membership Information (Markdown Description)"
msgstr "For members with limited financial means (e.g. pupils, students, "
"unemployed, pensioners and social welfare recipients), the minimum membership fee can be reduced upon request. "
"The board decides on the written application for a discount of the membership fee."
msgid "Chosen yearly membership fee:"
msgstr "Chosen yearly membership fee:"
msgid "Payment Method (SEPA transactions must be at least 10 €):"
msgstr "Payment Method (SEPA transactions must be at least 10 €):"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee'), 0, 2)} € yearly)"
msgstr "SEPA Direct Debit (${fmt(val('membership-fee'), 0, 2)} € yearly)"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee') / 2, 0, 2)} € half-yearly)"
msgstr "SEPA Direct Debit (${fmt(val('membership-fee') / 2, 0, 2)} € half-yearly)"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee') / 4, 0, 2)} € quarterly)"
msgstr "SEPA Direct Debit (${fmt(val('membership-fee') / 4, 0, 2)} € quarterly)"
msgctxt "Payment Method"
msgid "SEPA Direct Debit (${fmt(val('membership-fee') / 12, 0, 2)} € monthly)"
msgstr "SEPA Direct Debit (${fmt(val('membership-fee') / 12, 0, 2)} € monthly)"
msgctxt "Payment Method"
msgid "Manual Bank Transfer"
msgstr "Manual Bank Transfer"
msgid "Manual Bank Transfer Information (Markdown Description)"
msgstr "With a manual bank transfer, you are responsible to send the required membership "
"fee at your selected interval to the following bank connection:"
msgid "IBAN:"
msgstr "IBAN:"
msgid "BIC:"
msgstr "BIC:"
msgid "SEPA Disclaimer (Markdown)"
msgstr "I authorize the Codeberg e. V. (DE40ZZZ00002172825), to collect payments from my account by direct debit. "
"At the same time, I instruct my credit institution, to honor the direct debits drawn on my account by Codeberg e. V. "
"I can request a refund of the debited amount within eight weeks, beginning with the debit date. "
"The conditions agreed with my credit institution apply."
# Step 5
msgid "Submit Membership Application"
msgstr "Submit Membership Application"
msgid "Accept Bylaws (Markdown Description)"
msgstr "Yes, I want to become member of Codeberg e. V. as of the "
"[currently valid bylaws](https://codeberg.org/codeberg/org/src/branch/master/Satzung.md)! "
"(Unofficial English translation can be found [here](https://codeberg.org/Codeberg/org/src/branch/master/en/bylaws.md).)"
msgid "Become Member Now!"
msgstr "Become Member Now!!"

1
etc/reg-server/static/codeberg.svg

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 224.896 66.146" height="250" width="850"><g transform="matrix(2.248699 0 0 2.248699 -25258.2009 4264.411283)"><path d="M11268.05-1887.045c-1.59 0-2.832.534-3.727 1.602-.904 1.068-1.358 2.478-1.358 4.23 0 1.347.332 2.52.994 3.518.915 1.393 2.3 2.1 4.178 2.1 1.3 0 2.432-.482 3.397-1.445l-.888-1.376c-.86.546-1.602.82-2.23.82-.954 0-1.715-.366-2.28-1.097-.536-.697-.804-1.533-.804-2.508 0-1.103.228-1.997.68-2.682a2.49 2.49 0 0 1 2.211-1.202c.687 0 1.446.302 2.28.905l.89-1.445c-1.115-.94-2.23-1.41-3.343-1.41zm31.562 0l-2.194 1.236v9.996h1.777l.174-.783c.535.662 1.288.993 2.264.993.986 0 1.814-.296 2.49-.888.858-.778 1.29-1.92 1.29-3.43 0-1.172-.29-2.113-.872-2.82-.663-.8-1.577-1.202-2.75-1.202-.42 0-.803.08-1.15.244-.442.21-.786.5-1.028.87zm-11.81.035l-2.197 1.22v2.525c-.545-.44-1.218-.662-2.018-.662-.928 0-1.724.308-2.384.923-.883.824-1.328 1.997-1.328 3.518 0 1.08.276 1.962.82 2.647.65.824 1.597 1.236 2.84 1.236.44 0 .87-.1 1.287-.296s.72-.447.908-.748l.313.835h1.76zm-12.355 3.083c-1.14 0-2.062.36-2.77 1.08-.78.8-1.168 1.823-1.168 3.1 0 1.126.35 2.08 1.045 2.856.778.86 1.745 1.29 2.893 1.29.99 0 1.852-.337 2.594-1 .894-.8 1.34-1.846 1.34-3.135 0-1.103-.3-2.037-.905-2.804-.72-.917-1.73-1.376-3.03-1.376zm17.267 0c-1.127 0-2.054.372-2.79 1.115-.812.813-1.22 1.84-1.22 3.082 0 1.266.362 2.258 1.08 2.978.756.766 1.806 1.15 3.154 1.15 1.25 0 2.297-.372 3.132-1.115l-.558-1.167c-.822.465-1.61.697-2.366.697-.535 0-.998-.174-1.393-.522-.386-.36-.6-.807-.643-1.34h5.43v-.8c0-1.15-.3-2.084-.905-2.804-.695-.848-1.672-1.27-2.924-1.27zm17.417 0c-1.125 0-2.053.372-2.786 1.115-.814.813-1.218 1.84-1.218 3.082 0 1.266.36 2.258 1.08 2.978.753.766 1.804 1.15 3.153 1.15 1.253 0 2.297-.372 3.134-1.115l-.556-1.167c-.826.465-1.616.697-2.37.697a2.04 2.04 0 0 1-1.394-.522c-.384-.36-.6-.807-.645-1.34h5.435v-.8c0-1.15-.302-2.084-.906-2.804-.698-.848-1.67-1.27-2.927-1.27zm8.5 0c-.346 0-.69.093-1.028.28-.325.174-.546.383-.66.627l-.21-.696h-1.863v7.906h2.16v-5.677c.184-.406.475-.61.87-.61.43 0 .836.22 1.217.66l1.847-1c-.5-.987-1.288-1.48-2.333-1.48zm5.67 0c-.92 0-1.714.308-2.387.923-.883.824-1.322 1.997-1.322 3.518 0 1.068.27 1.95.816 2.647.64.824 1.54 1.236 2.7 1.236.953 0 1.69-.39 2.213-1.167 0 1.742-.63 2.612-1.882 2.612-.884 0-1.68-.232-2.387-.697l-.556 1.114c.914.836 2.002 1.254 3.255 1.254 1.207 0 2.137-.354 2.788-1.063.66-.72.99-1.747.99-3.083v-7.087h-1.69l-.172.853c0-.116-.168-.3-.506-.522-.51-.36-1.13-.54-1.86-.54zm-31.604 1.55c1.045 0 1.6.57 1.655 1.707H11291c.127-1.138.697-1.707 1.708-1.707zm17.42 0c1.044 0 1.595.57 1.654 1.707h-3.36c.127-1.138.697-1.707 1.707-1.707zm-34.668.017c1.127 0 1.7.87 1.7 2.612 0 1.672-.563 2.508-1.7 2.508s-1.7-.836-1.7-2.508c0-1.74.564-2.612 1.7-2.612zm8.6 0c.384 0 .714.128.994.383.288.244.474.557.554.94v2.212c-.06.43-.265.813-.624 1.15-.36.325-.75.488-1.167.488-1.127 0-1.7-.865-1.7-2.595 0-.8.174-1.416.523-1.88s.818-.697 1.4-.697zm40.71 0c.373 0 .708.134 1.012.4.314.256.494.563.54.923v2.003a1.85 1.85 0 0 1-.524 1.306c-.35.36-.76.54-1.237.54-1.138 0-1.708-.865-1.708-2.595 0-.8.174-1.416.523-1.88s.814-.697 1.393-.697zm-23.398.018a1.42 1.42 0 0 1 1.254.696c.3.464.453 1.097.453 1.898 0 .813-.163 1.45-.49 1.916a1.53 1.53 0 0 1-1.321.696 1.65 1.65 0 0 1-1.135-.435 1.57 1.57 0 0 1-.521-1.079v-1.9c0-.5.168-.923.503-1.27.35-.348.767-.522 1.256-.522z" fill="#2185d0"/><path d="M42519.285-7078.79c-.225.002-.437.078-.58.208s-.2.3-.158.465l33.586 125.89a87.18 87.18 0 0 0 39.381-33.764l-71.565-92.52c-.138-.175-.392-.282-.664-.28z" transform="matrix(.123345 0 0 .123345 6003.6186 -1013.3542)" opacity=".5" fill="url(#A)" paint-order="stroke markers fill"/><path d="M11247.908-1891.505c-5.923.022-10.713 4.83-10.713 10.753 0 2.02.57 4 1.642 5.71l8.966-11.59c.03-.04.085-.063.145-.063s.116.024.145.063l8.966 11.592c1.073-1.712 1.642-3.69 1.642-5.712 0-5.94-4.815-10.753-10.753-10.753-.013 0-.027 0-.04 0s-.027 0-.04 0z" fill="#2185d0" paint-order="stroke markers fill"/></g><defs><linearGradient y2="-6966.931" x2="42575.336" y1="-7078.789" x1="42519.285" id="A" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset=".495" stop-color="#71c2ff"/><stop offset="1" stop-color="#39aaff"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

BIN
etc/reg-server/static/favicon.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

3
etc/reg-server/static/fonts/LICENSE

@ -1,3 +0,0 @@
All fonts in this folder are subject to their license (OFL, the SIL Open Fonts License).

BIN
etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0-ExdGM.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0KExQ.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0aExdGM.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptsans/v9/jizaRExUiTo99u79D0yExdGM.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcadA_xcy4.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcadw_xcy4.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcaeg_x.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcafg_xcy4.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFSzr-tdg.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFWzr8.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFYzr-tdg.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFbzr-tdg.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019-7DRs5.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019K7DQ.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019a7DRs5.woff2

Binary file not shown.

BIN
etc/reg-server/static/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019y7DRs5.woff2

Binary file not shown.

239
etc/reg-server/static/form.css

@ -1,239 +0,0 @@
/* cyrillic-ext */
@font-face {
font-family: 'PT Sans';
font-style: normal;
font-weight: 400;
src: local('PT Sans'), local('PTSans-Regular'), url(/fonts/ptsans/v9/jizaRExUiTo99u79D0-ExdGM.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'PT Sans';
font-style: normal;
font-weight: 400;
src: local('PT Sans'), local('PTSans-Regular'), url(/fonts/ptsans/v9/jizaRExUiTo99u79D0aExdGM.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'PT Sans';
font-style: normal;
font-weight: 400;
src: local('PT Sans'), local('PTSans-Regular'), url(/fonts/ptsans/v9/jizaRExUiTo99u79D0yExdGM.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'PT Sans';
font-style: normal;
font-weight: 400;
src: local('PT Sans'), local('PTSans-Regular'), url(/fonts/ptsans/v9/jizaRExUiTo99u79D0KExQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'PT Sans Caption';
font-style: normal;
font-weight: 400;
src: local('PT Sans Caption'), local('PTSans-Caption'), url(/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcadw_xcy4.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'PT Sans Caption';
font-style: normal;
font-weight: 400;
src: local('PT Sans Caption'), local('PTSans-Caption'), url(/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcafg_xcy4.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'PT Sans Caption';
font-style: normal;
font-weight: 400;
src: local('PT Sans Caption'), local('PTSans-Caption'), url(/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcadA_xcy4.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'PT Sans Caption';
font-style: normal;
font-weight: 400;
src: local('PT Sans Caption'), local('PTSans-Caption'), url(/fonts/ptsanscaption/v10/0FlMVP6Hrxmt7-fsUFhlFXNIlpcaeg_x.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'PT Serif';
font-style: normal;
font-weight: 400;
src: local('PT Serif'), local('PTSerif-Regular'), url(/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFbzr-tdg.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'PT Serif';
font-style: normal;
font-weight: 400;
src: local('PT Serif'), local('PTSerif-Regular'), url(/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFSzr-tdg.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'PT Serif';
font-style: normal;
font-weight: 400;
src: local('PT Serif'), local('PTSerif-Regular'), url(/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFYzr-tdg.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'PT Serif';
font-style: normal;
font-weight: 400;
src: local('PT Serif'), local('PTSerif-Regular'), url(/fonts/ptserif/v9/EJRVQgYoZZY2vCFuvAFWzr8.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'PT Serif Caption';
font-style: normal;
font-weight: 400;
src: local('PT Serif Caption'), local('PTSerif-Caption'), url(/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019-7DRs5.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'PT Serif Caption';
font-style: normal;
font-weight: 400;
src: local('PT Serif Caption'), local('PTSerif-Caption'), url(/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019a7DRs5.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'PT Serif Caption';
font-style: normal;
font-weight: 400;
src: local('PT Serif Caption'), local('PTSerif-Caption'), url(/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019y7DRs5.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'PT Serif Caption';
font-style: normal;
font-weight: 400;
src: local('PT Serif Caption'), local('PTSerif-Caption'), url(/fonts/ptserifcaption/v9/ieVl2ZhbGCW-JoW6S34pSDpqYKU019K7DQ.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
body {
font-family: 'PT Sans', sans-serif;
background-color: #f8f8f8;
}
fieldset {
overflow: hidden; /* to make sure it's a BFC */
margin-top: 1em;
padding: 0 5% 1em 5%;
border: none;
display: inline-block;
background-color:white;
padding-top: 1em;
}
fieldset > legend {
//font-family: 'PT Sans Caption', sans-serif;
font-family: 'PT Serif Caption', serif;
font-size: 125%;
display:contents;
}
p.notes {
font-family: 'PT Serif', serif;
//font-style: italic;
//font-family: Serif;
}
a {
color: black;
text-decoration: none;
}
.unavailable {
color: #ccc;
}
.error {
color: red;
}
label {
white-space: nowrap;
display: block;
margin: 0.25em;
margin-left: 2em;
text-indent: -2em;
}
.wrap {
white-space: normal;
}
.hbox {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
}
.hbox > * {
flex-grow: 1;
}
.equalwidth > * {
flex-basis: 0;
}
.vbox {
display: flex;
flex-flow: column wrap;
}
.columns {
columns: 15em;
}
input {
margin: 0.25em;
border: 0;
border-bottom: thin solid gray;
border-radius: 0.2em;
padding: 0 0.4em;
font-size: 100%; /* For fat thumbs on mobile */
}
input[type='radio'] {
margin-right: 0.7em;
}
button#submit {
background-color: #298400;
color: white;
padding: 0.25em 0.75em;
font-size: 1.5em;
font-weight: bold;
border: 0;
border-radius: 0.25em;
width: 100%;
}
button#submit:hover {
background-color: #3abc00;
cursor: pointer;
}
button#submit:disabled {
background-color: silver;
cursor: pointer;
}

197
etc/reg-server/static/form.js

@ -1,197 +0,0 @@
window.addEventListener('load', function () {
var activeMember = document.getElementById('activeMember');
var supportingMember = document.getElementById('supportingMember');
var privat = document.getElementById('private');
var corporate = document.getElementById('corporate');
var firstName = document.getElementById('firstName');
var name = document.getElementById('name');
var organization = document.getElementById('organization');
var addr1 = document.getElementById('addr1');
var zipcode = document.getElementById('zipcode');
var city = document.getElementById('city');
var country = document.getElementById('country');
var email = document.getElementById('email');
var iban = document.getElementById('iban');
var submit = document.getElementById('submit');
submit.disabled = true;
document.getElementById('form').oninput = function () { validateForm(); }
document.getElementById('form').onchange = function () { validateForm(); }
document.getElementById('skills').oninput = function () { document.getElementById('skillsOther').checked = true; }
document.getElementById('contributionCustom').oninput = function () { document.getElementById('customContribution').checked = true; }
function validateForm () {
if (isValidMembershipType()
&& isValidEmail(email.value)
&& isValidAddress()
&& isValidMembershipContribution()
&& isValidIBANNumber(iban.value))
submit.disabled = false;
else
submit.disabled = true;
}
activeMember.onchange = function () {
corporate.parentNode.classList.add('unavailable');
corporate.disabled = true;
corporate.checked = false;
};
supportingMember.onchange = function () {
corporate.parentNode.classList.remove('unavailable');
corporate.disabled = false;
};
corporate.onchange = function () {
activeMember.parentNode.classList.add('unavailable');
activeMember.disabled = true;
activeMember.checked = false;
firstName.style.display = 'none';
name.style.display = 'none';
organization.style.display = 'initial';
};
privat.onchange = function () {
activeMember.parentNode.classList.remove('unavailable');
activeMember.parentNode.style.visibility = 'visible';
activeMember.disabled = false;
firstName.style.display = 'initial';
name.style.display = 'initial';
organization.style.display = 'none';
};
email.oninput = function () {
if (isValidEmail(email.value))
email.classList.remove('error');
else
email.classList.add('error');
};
iban.oninput = function () {
for (var i=0, j=0, s=''; i<this.value.length; i++) {
var c = this.value[i];
if (c != ' ') {
s += c;
if (++j % 4 == 0 && i < this.value.length-1)
s += ' ';
}
}
iban.value = s.toUpperCase();
if (isValidIBANNumber(iban.value))
iban.classList.remove('error');
else
iban.classList.add('error');
};
function isValidMembershipType () {
if (activeMember.checked && privat.checked)
return true;
if (supportingMember.checked && (privat.checked || corporate.checked))
return true;
return false;
}
function isValidEmail (email) {
var re = /^\S+@\S+$/;
return re.test(email);
}
function isValidAddress () {
if (privat.checked) {
if (firstName.value == "")
return false;
if (name.value == "")
return false;
} else if (corporate.checked) {
if (organization.value == "")
return false;
} else
return false;
if (addr1.value == "")
return false;
if (zipcode.value == "")
return false;
if (city.value == "")
return false;
if (country.value == "")
return false;
return true;
}
function isValidMembershipContribution () {
var f = document.getElementsByName('frequency');
var c = document.getElementsByName('contribution');
var frequency = undefined;
var contribution = undefined;
for (var i = 0; i < f.length; i++) {
if (f[i].checked) {
frequency = parseFloat(f[i].value);
break;
}
}
for (var i = 0; i < c.length; i++) {
if (c[i].checked) {
if (c[i].value == 'custom') {
var contributionCustom = document.getElementById('contributionCustom')
contribution = parseFloat(contributionCustom.value);
if (contribution < 10 || contribution > 1000) {
contributionCustom.classList.add('error');
return false;
} else {
contributionCustom.classList.remove('error');
}
} else {
contribution = parseFloat(c[i].value);
}
break;
}
}
if (frequency != 1 && frequency != 3 && frequency != 6 && frequency != 12)
return false;
var annualContribution = contribution * 12 / frequency;
if (!isFinite(annualContribution))
return false;
if (activeMember.checked && annualContribution < 24 /* annual contribution for active members */)
return false;
if (contribution < 10 /* minimum transaction size */)
return false;
return true;
}
/* cf. https://stackoverflow.com/questions/21928083/iban-validation-check */
function isValidIBANNumber (input) {
/**
* Returns 1 if the IBAN is valid
* Returns any other number (checksum) when the IBAN is invalid (check digits do not match)
*/
function mod97 (string) {
var checksum = string.slice(0, 2), fragment;
for (var offset = 2; offset < string.length; offset += 7) {
fragment = String(checksum) + string.substring(offset, offset + 7);
checksum = parseInt(fragment, 10) % 97;
}
return checksum;
}
var CODE_LENGTHS = {
AD: 24, AE: 23, AT: 20, AZ: 28, BA: 20, BE: 16, BG: 22, BH: 22, BR: 29,
CH: 21, CR: 21, CY: 28, CZ: 24, DE: 22, DK: 18, DO: 28, EE: 20, ES: 24,
FI: 18, FO: 18, FR: 27, GB: 22, GI: 23, GL: 18, GR: 27, GT: 28, HR: 21,
HU: 28, IE: 22, IL: 23, IS: 26, IT: 27, JO: 30, KW: 30, KZ: 20, LB: 28,
LI: 21, LT: 20, LU: 20, LV: 21, MC: 27, MD: 24, ME: 22, MK: 19, MR: 27,
MT: 31, MU: 30, NL: 18, NO: 15, PK: 24, PL: 28, PS: 29, PT: 25, QA: 29,
RO: 24, RS: 22, SA: 24, SE: 24, SI: 19, SK: 24, SM: 27, TN: 24, TR: 26
};
// keep only alphanumeric characters
var iban = String(input).toUpperCase().replace(/[^A-Z0-9]/g, '');
// match and capture (1) the country code, (2) the check digits, and (3) the rest
var code = iban.match(/^([A-Z]{2})(\d{2})([A-Z\d]+)$/);
if (!code || iban.length !== CODE_LENGTHS[code[1]]) {
return false;
}
var digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, function (letter) {
return letter.charCodeAt(0) - 55;
});
return mod97(digits) == 1;
}
});

141
etc/reg-server/templates/cs/form.tmpl

@ -1,141 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/static/form.css">
<script type="text/javascript" src="/static/form.js"></script>
<link rel="icon" type="image/x-icon" href="/static/favicon.ico" />
</head>
<body>
<div class="header">
<a href="https://codeberg.org"><img src="/static/codeberg.svg" height="120" alt=""></a>
<h1>Přidejte se ke Codeberg e.V. a aktivně podpořte vývoj Svobodného a otevřeného software!</h1>
</div>
<form id="form" method="post" action="/post">
<div style="columns: 30em;">
<fieldset>
<legend>Členství</legend>
<div class="error">{{.errors.membership}}</div>
<p class="notes">
Jako Podpůrný člen přímo podporujete záměry Codeberg e.V. a budete dostávat pravidelmé aktualizace
o činnosti Codeberg e.V. Jako Aktivní člen se stáváte členem Codeberg e.V. a zíkáváte volební práva.
</p>
<div class="hbox equalwidth">
<label><input type="radio" name="membershipType" id="supportingMember" value="supportingMember">Podpůrné členství</label>
<label><input type="radio" name="membershipType" id="activeMember" value="activeMember">Aktivní členství</label>
</div>
<p class="notes">
Soukromé osoby si mohou zvolit buďto podpůrné nebo aktivní členství. Právnické osoby mohou podpořit
Codeberg e.V. formou podpůrného členství.
</p>
<div class="hbox equalwidth">
<label><input type="radio" name="memberType" id="private" value="private">Soukromá osoba</label>
<label><input type="radio" name="memberType" id="corporate" value="corporate">Právnická osoba</label>
</div>
</fieldset>
<fieldset>
<legend>Adresa</legend>
<p class="notes">
Pravidelné novinky o práci Codeberg e.V., pozvánky k volbám a ke členským schůzím
jsou zasílány emailem. Vaše emailová adresa je také použita k identifikaci Vašeho členství a zároveň Vám
umožňuje zrušení členství odesláním žádosti z této adresy.
</p>
<div class="error">{{.errors.email}}</div>
<div class="vbox">
<input type="text" id="email" name="email" required autocomplete="email" placeholder="E-mail">
</div>
<p class="notes">
Jako Codeberg e.V. máme zákonnou povinnost udržovat aktuální záznamy o poštovních adresách členů.
Poštovní zprávu bychom Vám zaslali pouze v případě nefunkční emailové adresy.
</p>
<div class="error">{{.errors.firstName}}</div>
<div class="error">{{.errors.name}}</div>
<div class="error">{{.errors.addr1}}</div>
<div class="error">{{.errors.addr2}}</div>
<div class="error">{{.errors.zipcode}}</div>
<div class="error">{{.errors.city}}</div>
<div class="error">{{.errors.country}}</div>
<div class="vbox">
<div class="hbox">
<input type="text" id="firstName" name="firstName" autocomplete="given-name" placeholder="Křestní Jméno">
<input type="text" id="name" name="name" autocomplete="family-name" placeholder="Příjmení">
<input type="text" id="organization" name="organization" autocomplete="organization" placeholder="Organizace">
</div>
<input type="text" id="addr1" name="addr1" required autocomplete="address-line1" placeholder="Ulice a číslo">
<input type="text" id="addr2" name="addr2" autocomplete="address-line2" placeholder="Doplněk adresy">
<div class="hbox">
<input type="text" id="zipcode" name="zipcode" size="7" required autocomplete="postal-code" placeholder="PSČ">
<input type="text" id="city" name="city" required autocomplete="city" placeholder="Obec">
<input type="text" id="country" name="country" size="15" required autocomplete="country-name" placeholder="Země">
</div>
</div>
</fieldset>
<fieldset>
<legend>Nehmotná podpora</legend>
<p class="notes">
Chcete-li podpořit projekt ve kterékoliv z následujících oblastí, zaškrtněte prosím položku/y níže.
</p>
<div class="columns">
<label><input type="checkbox" name="skillsAppDev" value="1"><span class="wrap">Vývoj aplikací</span></label>
<label><input type="checkbox" name="skillsSecurity" value="1"><span class="wrap">IT bezpečnost a penetrační testy</span></label>
<label><input type="checkbox" name="skillsDB" value="1"><span class="wrap">Databázové replikace</span></label>
<label><input type="checkbox" name="skillsFS" value="1"><span class="wrap">Distibuované souborové systémy, replikace</span></label>
<label><input type="checkbox" name="skillsTax" value="1"><span class="wrap">Auditing, Finance and Daňové zákony</span></label>
<label><input type="checkbox" name="skillsLegal" value="1"><span class="wrap">IT-Zákony, Práva asociací, pro bono právní poradenství</span></label>
<label><input type="checkbox" name="skillsPR" value="1"><span class="wrap">Spolupráce a PR marketing, obzvláště pro Svobodný a Otevřený software</span></label>
<label><input type="checkbox" name="skillsFundraising" value="1"><span class="wrap">Fund-raising, získávání finančních prostředků</span></label>
<label><input type="checkbox" id="skillsOther" name="skillsOther" value="1"><input type="text" id="skills" name="skills" placeholder=""></label>
</div>
</fieldset>
<fieldset>
<legend>Poplatky</legend>
<p class="notes">
Členské poplatky jsou vybírány formou SEPA debitu, je-li to možné. Kdy by měla transakce proběhnout
a kolik si přejete přispívat??
</p>
<div class="error">{{.errors.frequency}}</div>
<div style="columns: 10em 4;">
<label><input type="radio" name="frequency" value="1">Měsíčně</label>
<label><input type="radio" name="frequency" value="3">Čtvrtletně</label>
<label><input type="radio" name="frequency" value="6">Půlročně</label>
<label><input type="radio" name="frequency" value="12">Ročně</label>
</div>
<p class="notes">
Jak specifikováno v našich stanovách, velikost členského příspěvku si můžete zvolit sami.
Banka vyžaduje minimální transakci v částce 10€, pro pokrytí poplatku za transakci.
Minimální roční příspěvek pro aktivní členství a volební práva je 24€.
</p>
<div class="error">{{.errors.contribution}}</div>
<div style="columns: 5em 3">
<label><input type="radio" name="contribution" value="10">10€</label>
<label><input type="radio" name="contribution" value="15">15€</label>
<label><input type="radio" name="contribution" value="25">25€</label>
<label><input type="radio" name="contribution" value="50">50€</label>
<label><input type="radio" name="contribution" value="100">100€</label>
<label><input type="radio" name="contribution" value="150">150€</label>
<label><input type="radio" name="contribution" value="250">250€</label>
<label><input type="radio" name="contribution" value="custom" id="customContribution"><input type="text" name="contributionCustom" id="contributionCustom" size="5" placeholder="">€</label>
</div>
<p class="notes">
Členské příspěvky jsou vybírány formou SEPA debitu. Prosím pošlete dotaz na
<a href="mailto:contact@codeberg.org">contact@codeberg.org</a> pro jiné platební metody.
</p>
<div class="error">{{.errors.iban}}</div>
<div class="hbox">
<input type="text" id="iban" name="iban" required autocomplete="off" placeholder="IBAN">
<input type="text" id="bic" name="bic" size="11" autocomplete="off" placeholder="BIC">
</div>
</fieldset>
<fieldset>
<p style="font-size: small;">
Podpisem tohoto formuláře autorizujete: (A) Codeberg e.V. (DE40ZZZ00002172825) pro zaslání instrukcí do Vaší banky
pro debetování Vašeho účtu a (B) Vaší banku pro tuto transakci v souvislosti s instrukcemi z Codeberg e.V.
Jako součást Vašich práv máte nárok na vrácení peněz Vaší bankou dle obchodních podmínek viz Vaše smlouva s
bankou. O vrácení peněz musíte požádat do osmi (8) týdnů od počátku transakce.
</p>
<button type="submit" id="submit">Přidat se nyní</button>
</fieldset>
</div>
</form>
</body>
</html>

17
etc/reg-server/templates/cs/thanks.tmpl

@ -1,17 +0,0 @@
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
<h1>Děkujeme!</h1>
<p>
Vítejte v Codeberg e.V. a děkujeme Vám za Vaší podporu!
</p>
<p>
Byl Vám odeslán email s potvrzením registrace. Pokud Vám tento email nepříjde či v případě
nesprávných údajů, kontaktujte prosím <a href="mailto:codeberg@codeberg.org">codeberg@codeberg.org</a>.
</p>
<a href="https://codeberg.org">Zpět na codeberg.org</a>
</body>
</html>

140
etc/reg-server/templates/de/form.tmpl

@ -1,140 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/static/form.css">
<script type="text/javascript" src="/static/form.js"></script>
<link rel="icon" type="image/x-icon" href="/static/favicon.ico" />
</head>
<body>
<div class="hbox">
<a href="https://codeberg.org"><img src="/static/codeberg.svg" height="120" alt=""></a>
<h1>Mitglied im Codeberg e.V. werden und die Entwicklung Freier Software fördern!</h1>
</div>
<form id="form" method="post" action="/post">
<div style="columns: 30em;">
<fieldset>
<legend>Mitgliedschaft</legend>
<div class="error">{{.errors.membership}}</div>
<p class="notes">
Als Fördermitglied können Sie die Arbeit des Codeberg e.V. direkt und effizient unterstützen. Sie erhalten regelmäßige Informationen über die Arbeit des Vereins. Mit einer aktiven Mitgliedschaft bringen Sie sich aktiv im Verein ein, und haben ein Stimmrecht in der Mitgliederversammlung.
</p>
<div class="hbox equalwidth">
<label><input type="radio" name="membershipType" id="supportingMember" value="supportingMember">Fördermitgliedschaft</label>
<label><input type="radio" name="membershipType" id="activeMember" value="activeMember">Aktive Mitgliedschaft</label>
</div>
<p class="notes">
Privatpersonen können Fördermitglied oder aktives Mitglied sein.
Firmen können den Codeberg e.V. mit einer Fördermitgliedschaft unterstützen.
</p>
<div class="hbox equalwidth">
<label><input type="radio" name="memberType" id="private" value="private">Privatperson</label>
<label><input type="radio" name="memberType" id="corporate" value="corporate">Verein oder Firma</label>
</div>
</fieldset>
<fieldset>
<legend>Anschrift</legend>
<p class="notes">
Per E-Mail werden regelmäßig Informationen über die Arbeit des Vereins versendet,
und etwa Termine zu Abstimmungen und Mitgliederversammlungen mitgeteilt.
Auch ist die Mitgliedschaft jederzeit per E-Mail formlos kündbar.
</p>
<div class="error">{{.errors.email}}</div>
<div class="vbox">
<input type="text" id="email" name="email" required autocomplete="email" placeholder="E-Mail">
</div>
<p class="notes">
Als Verein sind wir rechtlich dazu verpflichtet, die aktuelle Postanschrift unserer Mitglieder
zu kennen. Normalerweise versenden wir keine Post. Nur in Ausnahmefällen wie einer nicht funktionierenden
E-Mail-Adresse werden wir per Brief Kontakt aufnehmen.
</p>
<div class="error">{{.errors.firstName}}</div>
<div class="error">{{.errors.name}}</div>
<div class="error">{{.errors.addr1}}</div>
<div class="error">{{.errors.addr2}}</div>
<div class="error">{{.errors.zipcode}}</div>
<div class="error">{{.errors.city}}</div>
<div class="error">{{.errors.country}}</div>
<div class="vbox">
<div class="hbox">
<input type="text" id="firstName" name="firstName" autocomplete="given-name" placeholder="Vorname">
<input type="text" id="name" name="name" autocomplete="family-name" placeholder="Name">
<input type="text" id="organization" name="organization" autocomplete="organization" placeholder="Verein oder Firma">
</div>
<input type="text" id="addr1" name="addr1" required autocomplete="address-line1" placeholder="Straße und Hausnummer">
<input type="text" id="addr2" name="addr2" autocomplete="address-line2" placeholder="Addresszusatz">
<div class="hbox">
<input type="text" id="zipcode" name="zipcode" size="7" required autocomplete="postal-code" placeholder="Postleitzahl">
<input type="text" id="city" name="city" required autocomplete="city" placeholder="Stadt">
<input type="text" id="country" name="country" size="15" required autocomplete="country-name" placeholder="Land">
</div>
</div>
</fieldset>
<fieldset>
<legend>Immaterielle Unterstützung</legend>
<p class="notes">
Wenn Sie sich aktiv in die Arbeit des Codeberg e.V. einbringen möchten,
und sich vorstellen können,
bei Fragen und Problemen beratend zur Verfügung zu stehen,
lassen Sie uns das bitte wissen!
</p>
<div class="columns">
<label><input type="checkbox" name="skillsAppDev" value="1"><span class="wrap">Application Development</span></label>
<label><input type="checkbox" name="skillsSecurity" value="1"><span class="wrap">IT Security und Penetration Tests</span></label>
<label><input type="checkbox" name="skillsDB" value="1"><span class="wrap">Datenbanken, Replikation und Performance</span></label>
<label><input type="checkbox" name="skillsFS" value="1"><span class="wrap">Distributed File Systems, Replikation und Performance</span></label>
<label><input type="checkbox" name="skillsTax" value="1"><span class="wrap">Kassenprüfung, Finanzen und Steuerrecht</span></label>
<label><input type="checkbox" name="skillsLegal" value="1"><span class="wrap">IT-Recht, Vereinsrecht, pro bono Rechtsberatung</span></label>
<label><input type="checkbox" name="skillsPR" value="1"><span class="wrap">Networking und Öffentlichkeitsarbeit im Bereich Open-Source</span></label>
<label><input type="checkbox" name="skillsFundraising" value="1"><span class="wrap">Fundraising</span></label>
<label><input type="checkbox" id="skillsOther" name="skillsOther" value="1"><input type="text" id="skills" name="skills" placeholder=""></label>
</div>
</fieldset>
<fieldset>
<legend>Beitrag</legend>
<p class="notes">
Der Mitgliedsbeitrag wird per SEPA-Lastschrift abgebucht. Wann soll
dieser Betrag gebucht werden, und welchen Mitgliedsbeitrag möchten Sie
beitragen?
</p>
<div class="error">{{.errors.frequency}}</div>
<div style="columns: 10em 4;">
<label><input type="radio" name="frequency" value="1">Monatlich</label>
<label><input type="radio" name="frequency" value="3">Quartalsweise</label>
<label><input type="radio" name="frequency" value="6">Halbjährlich</label>
<label><input type="radio" name="frequency" value="12">Jährlich</label>
</div>
<p class="notes">
Jedes Mitglied im Codeberg e.V. kann seinen Mitgliedsbeitrag frei wählen.
Für eine aktive Mitgliedschaft mit Stimmrecht wurde von der Mitgliederversammlung
ein Mindest-Jahresbeitrag von 24€ beschlossen.
Für SEPA-Lastschriften hat unsere Bank eine Mindest-Transaktionsgröße von 10€ festgelegt.
</p>
<div class="error">{{.errors.contribution}}</div>
<div style="columns: 5em 3">
<label><input type="radio" name="contribution" value="10">10€</label>
<label><input type="radio" name="contribution" value="15">15€</label>
<label><input type="radio" name="contribution" value="25">25€</label>
<label><input type="radio" name="contribution" value="50">50€</label>
<label><input type="radio" name="contribution" value="100">100€</label>
<label><input type="radio" name="contribution" value="150">150€</label>
<label><input type="radio" name="contribution" value="250">250€</label>
<label><input type="radio" name="contribution" value="custom" id="customContribution"><input type="text" name="contributionCustom" id="contributionCustom" size="5" placeholder="">€</label>
</div>
<p class="notes">
Für andere Buchungsverfahren und Beiträge bitte E-Mail an <a href="mailto:contact@codeberg.org">contact@codeberg.org</a>.
</p>
<div class="error">{{.errors.iban}}</div>
<div class="hbox">
<input type="text" id="iban" name="iban" required autocomplete="off" placeholder="IBAN">
<input type="text" id="bic" name="bic" size="11" autocomplete="off" placeholder="BIC">
</div>
<p style="font-size: small;">Ich ermächtige den Codeberg e.V. (DE40ZZZ00002172825), Zahlungen von meinem Konto mittels Lastschrift einzuziehen. Zugleich weise ich mein Kreditinstitut an, die vom Codeberg e.V. auf mein Konto gezogenen Lastschriften einzulösen. Ich kann innerhalb von acht Wochen, beginnend mit dem Belastungsdatum, die Erstattung des belasteten Betrages verlangen. Es gelten dabei die mit meinem Kreditinstitut vereinbarten Bedingungen.</p>
</fieldset>
<fieldset>
<button type="submit" id="submit">Jetzt Mitglied werden</button>
</fieldset>
</div>
</form>
</body>
</html>

140
etc/reg-server/templates/en/form.tmpl

@ -1,140 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/static/form.css">
<script type="text/javascript" src="/static/form.js"></script>
<link rel="icon" type="image/x-icon" href="/static/favicon.ico" />
</head>
<body>
<div class="header">
<a href="https://codeberg.org"><img src="/static/codeberg.svg" height="120" alt=""></a>
<h1>Join the Codeberg e.V. and actively support Free and Open Software Development!</h1>
</div>
<form id="form" method="post" action="/post">
<div style="columns: 30em;">
<fieldset>
<legend>Membership</legend>
<div class="error">{{.errors.membership}}</div>
<p class="notes">
As a Supporting Member you support the goals of the Codeberg e.V. directly, and will receive regular updates
about the work of the Codeberg e.V. As an Active Member you join the Codeberg e.V., and will have voting rights.
</p>
<div class="hbox equalwidth">
<label><input type="radio" name="membershipType" id="supportingMember" value="supportingMember">Supporting Membership</label>
<label><input type="radio" name="membershipType" id="activeMember" value="activeMember">Active Membership</label>
</div>
<p class="notes">
Private individuals can choose to be either supporting or active members. Corporate entities can support
the Codeberg e.V. by means of a supporting membership.
</p>
<div class="hbox equalwidth">
<label><input type="radio" name="memberType" id="private" value="private">Private Person</label>
<label><input type="radio" name="memberType" id="corporate" value="corporate">Corporate Entity</label>
</div>
</fieldset>
<fieldset>
<legend>Address</legend>
<p class="notes">
Regular updates about the work of the Codeberg e.V., and invitations to vote and to attend membership meetings
are sent out by e-mail. We also use the e-mail address to identify you as a member and to allow you to
cancel membership at any time by writing an email from that address.
</p>
<div class="error">{{.errors.email}}</div>
<div class="vbox">
<input type="text" id="email" name="email" required autocomplete="email" placeholder="E-mail">
</div>
<p class="notes">
As Codeberg e.V. we are legally required to keep up-to-date records of postal addresses of our members. We
would only send letters by post if we did not have a functioning e-mail address.
</p>
<div class="error">{{.errors.firstName}}</div>
<div class="error">{{.errors.name}}</div>
<div class="error">{{.errors.addr1}}</div>
<div class="error">{{.errors.addr2}}</div>
<div class="error">{{.errors.zipcode}}</div>
<div class="error">{{.errors.city}}</div>
<div class="error">{{.errors.country}}</div>
<div class="vbox">
<div class="hbox">
<input type="text" id="firstName" name="firstName" autocomplete="given-name" placeholder="Given Name">
<input type="text" id="name" name="name" autocomplete="family-name" placeholder="Family Name">
<input type="text" id="organization" name="organization" autocomplete="organization" placeholder="Organization">
</div>
<input type="text" id="addr1" name="addr1" required autocomplete="address-line1" placeholder="Street and Number">
<input type="text" id="addr2" name="addr2" autocomplete="address-line2" placeholder="Address Line 2">
<div class="hbox">
<input type="text" id="zipcode" name="zipcode" size="7" required autocomplete="postal-code" placeholder="ZIP Code">
<input type="text" id="city" name="city" required autocomplete="city" placeholder="City">
<input type="text" id="country" name="country" size="15" required autocomplete="country-name" placeholder="Country">
</div>
</div>
</fieldset>
<fieldset>
<legend>Intangible Support</legend>
<p class="notes">
If you would like to contribute to the project in any of the following areas, please tick any of the boxes
below.
</p>
<div class="columns">
<label><input type="checkbox" name="skillsAppDev" value="1"><span class="wrap">Application Development</span></label>
<label><input type="checkbox" name="skillsSecurity" value="1"><span class="wrap">IT Security und Penetration Tests</span></label>
<label><input type="checkbox" name="skillsDB" value="1"><span class="wrap">Database Replication and Performance</span></label>
<label><input type="checkbox" name="skillsFS" value="1"><span class="wrap">Distributed File Systems, Replication and Performance</span></label>
<label><input type="checkbox" name="skillsTax" value="1"><span class="wrap">Auditing, Finance and Tax Law</span></label>
<label><input type="checkbox" name="skillsLegal" value="1"><span class="wrap">IT-Law, Law of Associations, pro bono Legal Consultation</span></label>
<label><input type="checkbox" name="skillsPR" value="1"><span class="wrap">Networking and PR, especially Open-Source</span></label>
<label><input type="checkbox" name="skillsFundraising" value="1"><span class="wrap">Fundraising</span></label>
<label><input type="checkbox" id="skillsOther" name="skillsOther" value="1"><input type="text" id="skills" name="skills" placeholder=""></label>
</div>
</fieldset>
<fieldset>
<legend>Dues</legend>
<p class="notes">
Membership dues are collected by means of SEPA direct debit, if possible. When should this transaction be
initiated, and how much do you wish to contribute?
</p>
<div class="error">{{.errors.frequency}}</div>
<div style="columns: 10em 4;">
<label><input type="radio" name="frequency" value="1">Monthly</label>
<label><input type="radio" name="frequency" value="3">Quarterly</label>
<label><input type="radio" name="frequency" value="6">Semiannually</label>
<label><input type="radio" name="frequency" value="12">Annually</label>
</div>
<p class="notes">
As stated in our bylaws, you can freely choose the amount of membership contribution. The bank has determined a
minimal transaction amount of 10€ to justify transactions cost.
The minimum annual contribution for active membership and voting rights is 24€.
</p>
<div class="error">{{.errors.contribution}}</div>
<div style="columns: 5em 3">
<label><input type="radio" name="contribution" value="10">10€</label>
<label><input type="radio" name="contribution" value="15">15€</label>
<label><input type="radio" name="contribution" value="25">25€</label>
<label><input type="radio" name="contribution" value="50">50€</label>
<label><input type="radio" name="contribution" value="100">100€</label>
<label><input type="radio" name="contribution" value="150">150€</label>
<label><input type="radio" name="contribution" value="250">250€</label>
<label><input type="radio" name="contribution" value="custom" id="customContribution"><input type="text" name="contributionCustom" id="contributionCustom" size="5" placeholder="">€</label>
</div>
<p class="notes">
Membership fees are debited by means of SEPA direct debit. Please email to
<a href="mailto:contact@codeberg.org">contact@codeberg.org</a> for other transfer methods.
</p>
<div class="error">{{.errors.iban}}</div>
<div class="hbox">
<input type="text" id="iban" name="iban" required autocomplete="off" placeholder="IBAN">
<input type="text" id="bic" name="bic" size="11" autocomplete="off" placeholder="BIC">
</div>
</fieldset>
<fieldset>
<p style="font-size: small;">
By signing this mandate form, you authorise (A) Codeberg e.V. (DE40ZZZ00002172825) to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from Codeberg e.V.
As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.
</p>
<button type="submit" id="submit">Join Now</button>
</fieldset>
</div>
</form>
</body>
</html>

17
etc/reg-server/templates/en/thanks.tmpl

@ -1,17 +0,0 @@
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
<h1>Thank you!</h1>
<p>