diff --git a/assets/js/checkout.js b/assets/js/checkout.js
new file mode 100644
index 0000000..216209e
--- /dev/null
+++ b/assets/js/checkout.js
@@ -0,0 +1,80 @@
+function clearAddressFields() {
+ $('#address-components').hide();
+ $('#street-number').val('');
+ $('#street-number').prop('disabled', true);
+ $('#route').val('');
+ $('#locality').val('');
+ $('#postal-code').val('');
+}
+function getAddressFiedlValue(addressComponents, $field){
+ let field = addressComponents.find(obj => obj.types.indexOf($field) > -1);
+ return field != undefined?field.long_name:'';
+}
+function initialize() {
+ let input = document.getElementById('field_location');
+ let options = {
+ types: ['address'],
+ componentRestrictions: { country: "de" }
+ };
+ var autocomplete = new google.maps.places.Autocomplete(input, options);
+ autocomplete.addListener("place_changed", () => {
+ clearAddressFields();
+ const place = autocomplete.getPlace();
+ if (!place.geometry) return;
+ var componentMap = {
+ country: 'country',
+ locality: 'locality',
+ administrative_area_level_1 : 'administrative_area_level_1',
+ administrative_area_level_2 : 'administrative_area_level_2',
+ postal_code: 'postal_code',
+ route: 'route',
+ street_number : 'street_number',
+ };
+ $('#address-components').show();
+ let addressComponents = autocomplete.getPlace().address_components;
+ let streetNumber = getAddressFiedlValue(addressComponents, 'street_number');
+ if(streetNumber == '') {
+ $('#street-number').prop('disabled', false);
+ $('#street-number').focus();
+ }
+ else {
+ $('#street-number').prop('disabled', true);
+ $('#street-number').val(streetNumber);
+ }
+ let country = getAddressFiedlValue(addressComponents, 'country');
+ let route = getAddressFiedlValue(addressComponents, 'route');
+ $('#route').val(route);
+ let locality = getAddressFiedlValue(addressComponents, 'locality');
+ $('#locality').val(locality);
+ let postalCode = getAddressFiedlValue(addressComponents, 'postal_code');
+ $('#postal-code').val(postalCode);
+ $('#street-number').blur(function(){
+ if($('#street-number').val() == '') $('#street-number').focus();
+ else{
+ $('#street-number').prop('disabled', true);
+ $('#field_location').val(route+' '+$('#street-number').val()+', '+locality+', '+country);
+ }
+ });
+ });
+}
+$(window).on('load', google.maps.event, initialize);
+let input = document.querySelector("#ctelefon");
+let iti = window.intlTelInput(input, {
+ initialCountry: "de",
+ preferredCountries: ["de"],
+ geoIpLookup: function(callback) {
+ $.get('https://ipinfo.io', function() {}, "jsonp").always(function(resp) {
+ let countryCode = (resp && resp.country)?resp.country:"us";
+ callback(countryCode);
+ });
+ },
+ utilsScript: "{{storage('assets/libs/intl-tel-input/js/utils.min.js')}}",
+});
+// iti.getNumber();
+function updateProducts(){}
+$(window).on('load', function(){
+ $('#anfrage').submit(function(){
+ objProducts = [];
+ localStorage.setItem("products", JSON.stringify(objProducts));
+ });
+});
\ No newline at end of file
diff --git a/assets/js/data.js b/assets/js/data.js
new file mode 100644
index 0000000..40164a7
--- /dev/null
+++ b/assets/js/data.js
@@ -0,0 +1,4 @@
+let objProducts = [];
+let totalPrice = 0;
+let cartLink = null;
+let shareData = [];
\ No newline at end of file
diff --git a/assets/js/methods.js b/assets/js/methods.js
new file mode 100644
index 0000000..167f5db
--- /dev/null
+++ b/assets/js/methods.js
@@ -0,0 +1,148 @@
+function getInfoFromSelectedProduct(){
+ let ids = objProducts.map(obj => obj.id);
+ return $.get($('meta[name="get-contents"]').attr('content')+"/"+ids.join(","));
+}
+
+function numberToEuroFormat(number){
+ let formatter = new Intl.NumberFormat('de', {style: 'currency', currency: 'EUR'});
+ return formatter.format(number);
+}
+
+function getQuantityOfProducts(){
+ let quantitys = objProducts.map(obj => obj.quantity);
+ let quantityOfProducts = 0;
+ for(let i = 0; i < quantitys.length; i++) { if(Number.isInteger(Number(quantitys[i]))) quantityOfProducts += Number(quantitys[i]); }
+ return quantityOfProducts;
+}
+
+function getProductInfo(productInfo){
+ let objProduct = objProducts.find(obj => obj.id == productInfo.id);
+ return jQuery.extend(objProduct, productInfo);
+}
+
+function createProductElement(objProduct){
+ let elementProduct = `
+
+
+
+ |
+
+ ${objProduct.title}
+
+ sofort verfügbar
+
+
+
+ |
+ ${numberToEuroFormat(objProduct.preis)} |
+
`;
+ return elementProduct;
+}
+
+function addToBag(productId){
+ let objProductInfo = objProducts.find(obj => obj.id == productId);
+ let index = objProducts.indexOf(objProductInfo);
+ if(index == -1) objProducts.push({id: productId, quantity: 1});
+ updateProductsInLocalStorage();
+}
+
+function isJson(str) {
+ try { JSON.parse(str); }
+ catch(e) { return false; }
+ return true;
+}
+
+function isEncoded(str){
+ try { atob(str); }
+ catch(e) { return false; }
+ return true;
+}
+
+function hasCartCode(){
+ let urlPath = window.location.pathname;
+ let code = urlPath.split("/");
+ code = code[code.length-1];
+ if(isEncoded(code)){
+ let productLink = atob(code);
+ if(isJson(productLink)) return true;
+ }
+ return false;
+}
+
+function updateProductsInLocalStorage(){
+ localStorage.setItem("products", JSON.stringify(objProducts));
+ $('#count-products-in-bag').text(getQuantityOfProducts());
+ $('#list-products-in-bag').html('');
+ if(typeof updateProducts === "function") $('#list-products').html('');
+ totalPrice = 0;
+ if(objProducts.length > 0){
+ getInfoFromSelectedProduct().done(function(response, status){
+ response.contents.forEach(function(product){
+ let objProduct = getProductInfo(product);
+ totalPrice += objProduct.preis*objProduct.quantity;
+ let elementProduct = createProductElement(objProduct);
+ $('#list-products-in-bag').append(elementProduct);
+ if(typeof updateProducts === "function") $('#list-products').append(elementProduct);
+ });
+ $('#total-price').text(numberToEuroFormat(totalPrice));
+ if(typeof updateProducts === "function") $('#total-checkout-price').text(numberToEuroFormat(totalPrice));
+ });
+ $('.cart-link').show();
+ $(".btn-share").show();
+ $('#count-products-in-bag').show();
+ $('#list-products-in-bag').parent().parent().parent().parent().parent().find('.modal-footer').show();
+ $('#total-price').parent().parent().parent().show();
+ $('#no-products').hide();
+ if(typeof updateProducts === "function"){
+ $('#form-section').show();
+ $('#list-products').parent().parent().parent().parent().parent().find('.modal-footer').show();
+ $('#total-checkout-price').parent().parent().parent().show();
+ $('#no-products-in-checkout').hide();
+ }
+
+ if(window.location.origin == 'http://localhost') cartLink = window.location.origin+'/areya-energy/public/'+btoa(JSON.stringify(objProducts));
+ else cartLink = window.location.origin+'/'+btoa(JSON.stringify(objProducts));
+ $('.cart-link').val(cartLink);
+ shareData = {
+ title: "Share cart list",
+ text: 'share cart list',
+ url: cartLink,
+ };
+
+ }else{
+ $('.cart-link').hide();
+ $(".btn-share").hide();
+ $('#count-products-in-bag').hide();
+ $('#list-products-in-bag').parent().parent().parent().parent().parent().find('.modal-footer').hide();
+ $('#total-price').parent().parent().parent().hide();
+ $('#no-products').show();
+ if(typeof updateProducts === "function"){
+ $('#form-section').hide();
+ $('#list-products').parent().parent().parent().parent().parent().find('.modal-footer').hide();
+ $('#total-checkout-price').parent().parent().parent().hide();
+ $('#no-products-in-checkout').show();
+ }
+ }
+ let productId = $('meta[name="product-id"]').attr('content');
+ if(productId != undefined){
+ let objProduct = objProducts.find(obj => obj.id == productId);
+ if(objProduct == undefined) {
+ $('#btn-add-to-bag').show();
+ $('#btn-show-bag').hide();
+ if(objProducts.length > 0) $('#btn-check-out').parent().hide();
+ else $('#btn-check-out').parent().show();
+ }
+ else {
+ $('#btn-add-to-bag').hide();
+ $('#btn-show-bag').show();
+ $('#btn-check-out').parent().hide();
+ $('#count-items-in-bag').html(objProduct.quantity+``);
+ }
+ }
+}
\ No newline at end of file
diff --git a/assets/js/script.js b/assets/js/script.js
new file mode 100644
index 0000000..1ab97d5
--- /dev/null
+++ b/assets/js/script.js
@@ -0,0 +1,127 @@
+$(window).on('load', function(){
+ if(localStorage.getItem("dismiss-message") == 1) $('.alert-dismissible').remove();
+ else $('.alert-dismissible').show();
+ $('#btn-close-message').click(function(){ localStorage.setItem("dismiss-message", 1); });
+ if(localStorage.getItem("products") != null) objProducts = JSON.parse(localStorage.getItem("products"));
+ updateProductsInLocalStorage();
+ if(hasCartCode()){
+ if(objProducts.length > 0) $('#modal-confirm-product-replacement').modal('show');
+ else $('#modal-confirm-addition-of-products').modal('show');
+ $('.btn-confirm-product-link').click(function(){
+ objProducts = JSON.parse(productLink);
+ updateProductsInLocalStorage();
+ window.location.replace($('meta[name="checkout"]').attr('content'));
+ });
+ }
+ $(document).on('click', '.btn-remove-product', function(){
+ let productId = $(this).attr('data-id');
+ let objProductInfo = objProducts.find(obj => obj.id == productId);
+ let index = objProducts.indexOf(objProductInfo);
+ if(index != -1) objProducts.splice(index, 1);
+ localStorage.setItem("products", JSON.stringify(objProducts));
+ $(this).parent().parent().remove();
+
+ $('#count-products-in-bag').text(getQuantityOfProducts());
+ if(objProducts.length > 0){
+ $('.cart-link').show();
+ $(".btn-share").show();
+ $('#count-products-in-bag').show();
+ $('#list-products-in-bag').parent().parent().parent().parent().parent().find('.modal-footer').show();
+ $('#total-price').parent().parent().parent().show();
+ $('#no-products').hide();
+ if(typeof updateProducts === "function"){
+ $('#form-section').show();
+ $('#list-products').parent().parent().parent().parent().parent().find('.modal-footer').show();
+ $('#total-checkout-price').parent().parent().parent().show();
+ $('#no-products-in-checkout').hide();
+ }
+ }else{
+ $('.cart-link').hide();
+ $(".btn-share").hide();
+ $('#count-products-in-bag').hide();
+ $('#list-products-in-bag').parent().parent().parent().parent().parent().find('.modal-footer').hide();
+ $('#total-price').parent().parent().parent().hide();
+ $('#no-products').show();
+ if(typeof updateProducts === "function"){
+ $('#form-section').hide();
+ $('#list-products').parent().parent().parent().parent().parent().find('.modal-footer').hide();
+ $('#total-checkout-price').parent().parent().parent().hide();
+ $('#no-products-in-checkout').show();
+ }
+ }
+
+ getInfoFromSelectedProduct().done(function(response, status){
+ totalPrice = 0;
+ if(response.contents != undefined) response.contents.forEach(function(product){
+ let objProduct = getProductInfo(product);
+ totalPrice += objProduct.preis*objProduct.quantity;
+ });
+ $('#total-price').text(numberToEuroFormat(totalPrice));
+ if(typeof updateProducts === "function") $('#total-checkout-price').text(numberToEuroFormat(totalPrice));
+ });
+
+ productId = $('meta[name="product-id"]').attr('content');
+ if(productId != undefined){
+ let objProduct = objProducts.find(obj => obj.id == productId);
+ if(objProduct == undefined) {
+ $('#btn-add-to-bag').show();
+ $('#btn-show-bag').hide();
+ if(objProducts.length > 0) $('#btn-check-out').parent().hide();
+ else $('#btn-check-out').parent().show();
+ }
+ else {
+ $('#btn-add-to-bag').hide();
+ $('#btn-show-bag').show();
+ $('#btn-check-out').parent().hide();
+ $('#count-items-in-bag').html(objProduct.quantity+``);
+ }
+ }
+
+ });
+ $(document).on('change', '.select-quantity', function(){
+ let quantity = $(this).val();
+ let productId = $(this).attr('data-id');
+ let objProductInfo = objProducts.find(obj => obj.id == productId);
+ let index = objProducts.indexOf(objProductInfo);
+ objProducts[index].quantity = quantity;
+ localStorage.setItem("products", JSON.stringify(objProducts));
+
+ $('#count-products-in-bag').text(getQuantityOfProducts());
+ getInfoFromSelectedProduct().done(function(response, status){
+ totalPrice = 0;
+ response.contents.forEach(function(product){
+ let objProduct = getProductInfo(product);
+ totalPrice += objProduct.preis*objProduct.quantity;
+ });
+ $('#total-price').text(numberToEuroFormat(totalPrice));
+ if(typeof updateProducts === "function") $('#total-checkout-price').text(numberToEuroFormat(totalPrice));
+ });
+
+ productId = $('meta[name="product-id"]').attr('content');
+ if(productId != undefined){
+ let objProduct = objProducts.find(obj => obj.id == productId);
+ if(objProduct == undefined) {
+ $('#btn-add-to-bag').show();
+ $('#btn-show-bag').hide();
+ if(objProducts.length > 0) $('#btn-check-out').parent().hide();
+ else $('#btn-check-out').parent().show();
+ }
+ else {
+ $('#btn-add-to-bag').hide();
+ $('#btn-show-bag').show();
+ $('#btn-check-out').parent().hide();
+ $('#count-items-in-bag').html(objProduct.quantity+``);
+ }
+ }
+
+ });
+ $('#btn-copy-cart-link').click(function(){
+ $('.cart-link').select();
+ document.execCommand("copy");
+ $(this).html(``);
+ });
+ $(".btn-share").click(async function() {
+ if(navigator.share) { try { await navigator.share(shareData); } catch(err) { console.warn(err); } }
+ else { console.warn('Native Web Sharing not supported'); }
+ });
+});
\ No newline at end of file
diff --git a/content/master.blade.php b/content/master.blade.php
index af8e40d..136edc2 100644
--- a/content/master.blade.php
+++ b/content/master.blade.php
@@ -273,198 +273,9 @@
@yield('content')
@insert("content.includes.footer")
@insert("content.includes.scripts")
-
+
+
+
@yield('scripts')