2020-09-27 15:31:43 +02:00
function escape ( s ) {
return s . toString ( )
. replace ( /&/g , "&" )
2017-06-09 00:40:52 +02:00
. replace ( /</g , "<" )
. replace ( />/g , ">" ) ;
}
$ ( '.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>' +
2017-06-09 00:40:52 +02:00
'<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>' +
2017-06-09 00:40:52 +02:00
'<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' ;
2017-06-09 00:40:52 +02:00
}
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
2017-06-09 00:40:52 +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' ) ) {
2017-06-09 00:40:52 +02:00
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 ) ;
2017-06-09 00:40:52 +02:00
}
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 ( ) ;
} ) ;