88 lines
4.0 KiB
JavaScript
88 lines
4.0 KiB
JavaScript
function escape(s) {
|
||
return s.toString()
|
||
.replace(/&/g, "&")
|
||
.replace(/</g, "<")
|
||
.replace(/>/g, ">");
|
||
}
|
||
|
||
$('.membership-form').each(function() {
|
||
var container = $(this);
|
||
container.html('<h3>Mitgliedschaftsformular</h3>' +
|
||
'<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>' +
|
||
'<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;
|
||
xml += ' <term rate="' + rate + '" start="' + getText('dtg') + '"/>\n';
|
||
}
|
||
var note = getText('note');
|
||
if (note) xml += ' <note>' + escape(note) + '</note>\n';
|
||
|
||
var dtg = getText('dtg');
|
||
if (dtg) xml += ' <date>' + escape(dtg) + '</date>\n';
|
||
|
||
xml +=
|
||
'</member>';
|
||
// console.log('xml: ' + xml);
|
||
return xml;
|
||
}
|
||
|
||
function update() {
|
||
if (isChecked('neumitglied')) {
|
||
container.find('.neumitglied').show();
|
||
} else {
|
||
container.find('.neumitglied').hide();
|
||
}
|
||
if (!getText('dtg')) {
|
||
var d = new Date();
|
||
d.setHours(23);
|
||
d.setDate(1);
|
||
var s = d.toISOString().replace(/T.+/, "");
|
||
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();
|
||
});
|