From b020ab61847a945bac2edc46503ee87d12d29e35 Mon Sep 17 00:00:00 2001 From: Astro Date: Fri, 9 Jun 2017 00:40:52 +0200 Subject: [PATCH] pages/membership: implement a javascript membership form --- content/pages/membership.xml | 13 +++-- content/static/script/membership.js | 83 +++++++++++++++++++++++++++++ content/static/style/default.css | 46 ++++++++++++++++ xsl/header.xsl | 20 ++++--- xsl/xhtml5.xsl | 6 +++ 5 files changed, 159 insertions(+), 9 deletions(-) create mode 100644 content/static/script/membership.js diff --git a/content/pages/membership.xml b/content/pages/membership.xml index ff1edfb34..05afd3d8d 100644 --- a/content/pages/membership.xml +++ b/content/pages/membership.xml @@ -37,11 +37,18 @@ Wir sind als gemeinnützig anerkannt.

    -
  1. Fülle das Formular (zur Nutzung der Formularfunktion ggf. zuvor lokal abspeichern) aus,
  2. -
  3. Sende es an vorstand@c3d2.de,
  4. -
  5. Alternativ, schicke einen Ausdruck an unsere postalische Anschrift.
  6. +
  7. + Fülle das + Formular + (zur Nutzung der Formularfunktion ggf. zuvor lokal abspeichern) + aus, JavaScript-Alternative untenstehend, +
  8. +
  9. Sende es (am besten PGP-signiert) an vorstand@c3d2.de,
  10. +
  11. Alternativ, schicke einen Ausdruck an unsere postalische Anschrift.
+ +

Juristische Personen können Fördermitglied werden. Damit gibt es eine einfache Möglichkeit der dauerhaften Unterstützung unserer diff --git a/content/static/script/membership.js b/content/static/script/membership.js new file mode 100644 index 000000000..4717f3359 --- /dev/null +++ b/content/static/script/membership.js @@ -0,0 +1,83 @@ +function escape(s) { + return s.replace(/&/g, "&") + .replace(//g, ">"); +} + +$('.membership-form').each(function() { + var container = $(this); + container.html('

Mitgliedschaftsformular

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

' + + '

Antrag generieren und dann an vorstand@c3d2.de senden, am besten signiert!

' + ); + function getText(id) { + return container.find('#' + id).val(); + } + function isChecked(id) { + return container.find('#' + id).prop('checked'); + } + + function generateXml() { + var xml = + '\n ' + + escape(getText('email')) + + '\n'; + + var pgp = getText('pgp'); + if (pgp) xml += ' ' + escape(getText('pgp')) + '\n'; + + if (isChecked('neumitglied')) { + var rate = isChecked('ordentlich') ? 42 : + isChecked('reduziert') ? 13.37 : 0; + xml += ' \n'; + } + var note = getText('note'); + if (note) xml += ' ' + escape(note) + '\n'; + + xml += + ''; + // console.log('xml: ' + xml); + return xml; + } + + function update() { + if (isChecked('neumitglied')) { + container.find('.neumitglied').show(); + } else { + container.find('.neumitglied').hide(); + } + if (!getText('date')) { + var d = new Date(); + d.setHours(23); + d.setDate(1); + var s = d.toISOString().replace(/T.+/, ""); + container.find('#date').val(s); + + } + + var xmlUri = 'data:application/xml;charset=utf-8,' + encodeURIComponent(generateXml()); + container.find('#ok').attr('href', xmlUri); + } + container.find('input').on('change', update); + container.find('textarea').on('change', update); + update(); +}); diff --git a/content/static/style/default.css b/content/static/style/default.css index b5a6c0873..84f2255ae 100644 --- a/content/static/style/default.css +++ b/content/static/style/default.css @@ -945,3 +945,49 @@ h3 + div { float: right; color: #f99; } + +.membership-form { + margin: 1em 2em; + padding: 0.5em 1em; + width: 40em; + background-color: #ffffe0; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); +} +#content .membership-form h3 { + margin: 1rem 0.5rem; +} +#content .membership-form p { + margin: 0.5rem 0.5rem 0; +} +#content .membership-form p.indented { + margin-left: 2rem; +} +.membership-form label { + padding-right: 1rem; +} +.membership-form input[type=text], .membership-form textarea { + margin: 0.5rem 0 0; + width: 100%; + font-family: monospace; + font-size: 110%; + background-color: white; + color: #333; + border: none; + border-bottom: 1px solid black; +} +.membership-form input[type=text] { + height: 2em; +} +#content .membership-form p.desc { + margin: 0 0.5rem 0; + font-size: 70%; +} +.membership-form #ok { + background-color: white; + color: #333; + cursor: pointer; + font-weight: bold; + padding: 0.2rem 0.5rem; + border-radius: 2px; + border: 1px solid black; +} diff --git a/xsl/header.xsl b/xsl/header.xsl index a90ebfcae..dfd9a86a8 100644 --- a/xsl/header.xsl +++ b/xsl/header.xsl @@ -42,27 +42,35 @@ [if lt IE 9]> <script src="script/ie-html5.js" type="text/javascript"></script> <![endif] + - + calendar - + jquery-1.8.3.min - + jquery.dataset - + pentamedia-comments - + play-resources - + bitlove-enclosures + + + + + membership + + diff --git a/xsl/xhtml5.xsl b/xsl/xhtml5.xsl index ecdbb48f2..e0210e7f0 100644 --- a/xsl/xhtml5.xsl +++ b/xsl/xhtml5.xsl @@ -438,4 +438,10 @@ + +
+ +
+
+