c3d2-web/content/static/script/membership.js

88 lines
4.0 KiB
JavaScript
Raw Normal View History

2020-09-27 15:31:43 +02:00
function escape(s) {
return s.toString()
.replace(/&/g, "&")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;");
}
$('.membership-form').each(function() {
var container = $(this);
container.html('<h3>Mitgliedschaftsformular</h3>' +
2020-09-25 01:02:54 +02:00
'<p><input type="checkbox" id="neumitglied"><label for="neumitglied"> Ich möchte Mitglied im Netzbiotop Dresden e.V. werden und habe die Satzung gelesen.</label></p>' +
'<p class="neumitglied indented"><input type="radio" id="ordentlich" name="art" value="ordentlich"><label for="ordentlich"> Ordentliche Mitgliedschaft</label></input></p>' +
'<p class="neumitglied indented"><input type="radio" id="foerder" name="art" value="foerder"><label for="foerder"> Fördermitgliedschaft</label></input></p>' +
'<p class="neumitglied indented"><input type="radio" id="reduziert" name="art" value="reduziert"><label for="reduziert"> Ermäßigte Mitgliedschaft</label></input></p>' +
'<p><input type="checkbox" id="update"><label for="update"> Ich möchte meine Mitgliedsdaten aktualisieren.</label></p>' +
'<p><input type="text" id="name"></p>' +
'<p class="desc"><label for="name">Name</label></p>' +
'<p><input type="text" id="email"></p>' +
'<p class="desc"><label for="email">E-Mail</label></p>' +
'<p><input type="text" id="pgp"></p>' +
'<p class="desc"><label for="pgp">PGP-Fingerprint (optional, erforderlich für verschlüsselte Komunikation)</label></p>' +
'<p><textarea rows="3" cols="40" id="note"></textarea>' +
'<p class="desc"><label for="note">Bemerkungen</label></p>' +
2020-09-27 15:36:45 +02:00
'<p><input type="text" id="dtg"></p>' +
'<p class="desc"><label for="dtg">Beitrittsdatum</label></p>' +
'<p style="margin: 2rem 0.5rem 1rem"><a href="#" download="antrag-netzbiotop.xml" id="ok">Antrag generieren</a> und dann an <a href="mailto:vorstand@c3d2.de?subject=Mitgliedschaftsantrag">vorstand@c3d2.de</a> senden, am besten signiert!</p>'
);
function getText(id) {
return container.find('#' + id).val();
}
function isChecked(id) {
return container.find('#' + id).prop('checked');
}
function generateXml() {
var xml =
'<member';
if (isChecked('neumitglied') && isChecked('foerder')) xml += ' type="Fördermitglied"';
xml += '>\n <name>' +
escape(getText('name')) +
'</name>\n <email>' +
escape(getText('email')) +
'</email>\n';
var pgp = getText('pgp');
if (pgp) xml += ' <pgp-fpr>' + escape(getText('pgp')) + '</pgp-fpr>\n';
if (isChecked('neumitglied')) {
var rate = isChecked('ordentlich') ? 42 :
isChecked('reduziert') ? 13.37 : 0;
2020-09-27 15:36:45 +02:00
xml += ' <term rate="' + rate + '" start="' + getText('dtg') + '"/>\n';
}
var note = getText('note');
if (note) xml += ' <note>' + escape(note) + '</note>\n';
2020-09-27 15:36:45 +02:00
var dtg = getText('dtg');
if (dtg) xml += ' <date>' + escape(dtg) + '</date>\n';
2020-09-27 15:31:43 +02:00
xml +=
'</member>';
// console.log('xml: ' + xml);
return xml;
}
function update() {
if (isChecked('neumitglied')) {
container.find('.neumitglied').show();
} else {
container.find('.neumitglied').hide();
}
2020-09-27 15:36:45 +02:00
if (!getText('dtg')) {
var d = new Date();
d.setHours(23);
d.setDate(1);
var s = d.toISOString().replace(/T.+/, "");
2020-09-27 15:36:45 +02:00
container.find('#dtg').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();
});