function validate(what, text) { if (what == 'alias') { var re = /^[a-zA-Z0-9 ]{1,25}$/; } return re.test(text); } $(document).ready(function () { $(".show-modal").click(function () { $("#alias_exclamation").hide(); var alias = $(this).prev().html(); var deveui = $(this).prev().attr('id').replace("alias_", ""); $('#deveui').html(deveui); $("#alias").val(alias); $("#modal").addClass("is-active"); }); $("#cart-close").click(function () { $("#cart").removeClass("is-active"); }); $("#payment_notifier_close").click(function () { $("#payment_notifier").removeClass("is-active"); location.reload(true); }); $(".abo_plus").click(function () { el = $(this).parent().find(".abo_add_years"); el_text = $(this).parent().parent().find(".abo_add_years_text"); counter = Number(el.html()); if (counter < 3) { counter = counter + 1; el.html(counter); if (counter == 1) { el_text.html("+" + counter + " Jahr"); } else { el_text.html("+" + counter + " Jahre"); } } }); $(".abo_minus").click(function () { el = $(this).parent().find(".abo_add_years"); el_text = $(this).parent().parent().find(".abo_add_years_text"); counter = Number(el.html()); if (counter > 0) { counter = counter - 1; el.html(counter); if (counter == 0) { el_text.html(" "); } else if (counter == 1) { el_text.html("+" + counter + " Jahr"); } else { el_text.html("+" + counter + " Jahre"); } } }); function add_years(dt, n) { return new Date(dt.setFullYear(dt.getFullYear() + n)); } $(".abo_pay").click(function () { loadStripeLibrary(); counter = 0; charge_data = ''; abo_table = ''; abo_table += ''; $(".tracker").each(function (index) { this_count = Number($(this).find(".abo_add_years").html()); if (this_count > 0) { counter += this_count; paid_until = $(this).find(".paid_until").html(); if (moment(paid_until, 'DD.MM.YYYY') < moment()) { this_date = moment().format('DD.MM.YYYY'); } else { this_date = paid_until; } abo_table += ''; if (charge_data == '') { charge_data = $(this).find("div").first().attr('id') + ":" + this_count; } else { charge_data += "," + $(this).find("div").first().attr('id') + ":" + this_count; } } }); abo_table += ''; abo_table += "
Aliasverlängern bisBetrag
' + $(this).find('.alias').html() + '' + moment(this_date, 'DD.MM.YYYY').add('years', this_count).format('DD.MM.YYYY') + '' + (this_count * 60).toFixed(2) + '
Total CHF' + (counter * 60).toFixed(2) + '
"; if (counter > 0) { $("#abos_verlaengern").html(abo_table); $("#charge_data").html(charge_data); $("#cart").addClass("is-active"); } }); $("#modal-close").click(function () { $("#modal").removeClass("is-active"); }); $("#modal-save").click(function () { // Validation Code var is_valid = true; if (!validate('alias', $('#alias').val())) { $('#alias_errormsg').html('Ungültige Bezeichnung; erlaubte Zeichen A-Z, 0-9 und Leerschlag'); $("#alias").addClass("is-danger"); $("#alias_exclamation").show(); is_valid = false; } else { $('#alias_errormsg').html(''); $("#alias").removeClass("is-danger"); $("#alias_exclamation").hide(); } if (!(is_valid)) { return; } $.ajax({ url: "save_tracker_settings", type: "get", //send it through get method dataType: "json", data: { deveui: $('#deveui').html(), alias: $('#alias').val() }, success: function (response) { if (response.rc == 0) { $('#alias_' + $('#deveui').html()).html($('#alias').val()); } }, error: function (xhr) { //Do Something to handle error } }); $("#modal").removeClass("is-active"); }); }); function loadStripeLibrary() { $.ajax({ url: "https://js.stripe.com/v3/", dataType: "script", async: false, // <-- This is the key success: function () { // all good... SetupStripe(); }, error: function () { throw new Error("Could not load script " + script); } }); } function SetupStripe() { // Set your publishable key: remember to change this to your live publishable key in production // See your keys here: https://dashboard.stripe.com/account/apikeys stripe = Stripe('pk_live_51Icq29K2XyHQRTs2oNQMPT75m7J96ajcKDADEE8FCSA3WWD98je6IZgN0E7Q2t5Vccdu1ar5kQZUIjbPhRluTkS500rgdMr0dF'); elements = stripe.elements({ locale: "de" }); // Set up Stripe.js and Elements to use in checkout form style = { base: { color: "#32325d", } }; card = elements.create("card", { style: style }); card.mount("#card-element"); $("#card-errors-article").hide(); card.addEventListener('change', ({ error }) => { if (error) { $("#card-errors").text(error.message); $("#card-errors-article").show(); } else { $("#card-errors").text(""); $("#card-errors-article").hide(); } }); } function ConfirmPayment(clientSecret) { stripe.confirmCardPayment(clientSecret, { payment_method: { card: card, billing_details: { name: '{{ .UserName }}' } } }).then(function (result) { if (result.error) { // Show error to your customer (e.g., insufficient funds) $('#card-errors').text(result.error.message); $('#card-errors-article').show(); //Do Something to handle error EndPaymentProgress(); } else { // The payment has been processed! if (result.paymentIntent.status === 'succeeded') { // Show a success message to your customer // There's a risk of the customer closing the window before callback // execution. Set up a webhook or plugin to listen for the // payment_intent.succeeded event that handles any business critical // post-payment actions. $('#card-errors').text(""); $('#card-errors-article').hide(); $("#cart").removeClass("is-active"); EndPaymentProgress(); $('#payment_notifier').addClass('is-active'); } } }); } function StartPaymentProgress() { $("#cart-pay").attr("disabled", true).addClass("is-loading"); $("#cart-close").attr("disabled", true); } function EndPaymentProgress() { $("#cart-pay").attr("disabled", false).removeClass("is-loading"); $("#cart-close").attr("disabled", false); } function PayMe() { $.ajax({ url: "getstripepaymentintent", type: "get", //send it through get method dataType: "json", data: { charge_data: $("#charge_data").html() }, success: function (response) { if (response.rc == 0) { ConfirmPayment(response.stripeclientsecret); } }, error: function (xhr) { //Do Something to handle error EndPaymentProgress(); } }); } $('#cart-pay').on('click', function (ev) { StartPaymentProgress(); PayMe(); }); // draw all maps var woBischIcon = L.icon({ iconUrl: '/static/images/marker.png', iconSize: [64, 64], iconAnchor: [32, 64] }); var maps = []; $(document).ready(function () { $(".tracker").each(function (index) { deveui = $(this).find("div").first().attr("id"); lat = $(this).find("#lat").html(); lon = $(this).find("#lon").html(); var map = new L.Map('map_' + deveui, { crs: L.CRS.EPSG3857, zoomControl: false }); map.dragging.disable(); map.touchZoom.disable(); map.doubleClickZoom.disable(); map.scrollWheelZoom.disable(); map.boxZoom.disable(); map.keyboard.disable(); if (map.tap) map.tap.disable(); var url = 'https://wmts20.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeg'; var tilelayer = new L.tileLayer(url); map.addLayer(tilelayer); map.attributionControl.setPrefix('Source: Swiss Federal Office of Topography') map.setView(L.latLng(lat, lon), 10); var marker = L.marker([lat, lon], { icon: woBischIcon }).addTo(map); maps.push(map); }); });