master
parent
7f748127b8
commit
6ab9c53fe8
|
@ -18,7 +18,7 @@ export async function sync() {
|
|||
let ids = items.map(obj => obj.id);
|
||||
|
||||
if (ids.length > 0) {
|
||||
let products = await fetch(document.querySelector('meta[name="get-contents"]').getAttribute('content') + "/" + ids.join(","));
|
||||
let products = await fetch(url("contents/" + ids.join(",")));
|
||||
products = await products.json();
|
||||
|
||||
products.contents.forEach(product => {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as Cart from './modules/cart.js';
|
||||
import { url } from './utils.js';
|
||||
|
||||
document.addEventListener("DOMContentLoaded", async () => {
|
||||
let productId = document.querySelector('meta[name="product-id"]').getAttribute('content');
|
||||
|
@ -26,7 +27,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|||
btnCheckOut.addEventListener("click", () => {
|
||||
let productId = btnCheckOut.getAttribute("data-id");
|
||||
Cart.addItem(productId);
|
||||
window.location.replace(document.querySelector('meta[name="checkout"]').getAttribute('content'));
|
||||
window.location.replace(url("/checkout"));
|
||||
});
|
||||
|
||||
let btnAddToBag = document.querySelector('#btn-add-to-bag');
|
||||
|
|
|
@ -15,40 +15,8 @@ export function isEncoded(string) {
|
|||
return true;
|
||||
}
|
||||
|
||||
export function fetchData(method = null, url, data = null) {
|
||||
|
||||
const csrf = $('meta[name="csrf-token"]').attr('content');
|
||||
const urlBase = document.querySelector('meta[name="url-base"]').getAttribute("content");
|
||||
|
||||
const urlPattern = /^(https?:\/\/|ftp:\/\/)[^\s/$.?#].[^\s]*$/i;
|
||||
const pathPattern = /^(\/|[^\/\s]+\/)[^\s]*$/;
|
||||
|
||||
if (pathPattern.test(url)) url = urlBase + (url.startsWith('/') ? "" : "/") + url;
|
||||
else if (!urlPattern.test(url)) throw new Error("Invalid URL.");
|
||||
|
||||
return fetch(url, {
|
||||
method: method ?? 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRF-TOKEN': csrf
|
||||
},
|
||||
body: JSON.stringify(data ?? {})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.catch(error => console.error("Error fetching data:", error));
|
||||
}
|
||||
|
||||
export function url(path = "") {
|
||||
let protocol = window.location.protocol;
|
||||
let host = window.location.hostname;
|
||||
let port = window.location.port;
|
||||
let pathk = window.location.pathname;
|
||||
|
||||
let baseUrl = protocol + "//" + host + (port ? ':' + port : '');
|
||||
|
||||
let pathArray = pathk.split('/');
|
||||
pathArray.pop();
|
||||
let directoryOnly = pathArray.join('/');
|
||||
|
||||
return baseUrl + directoryOnly + '/' + path;
|
||||
const baseUrlElement = document.getElementById("base-url");
|
||||
const baseUrl = baseUrlElement ? baseUrlElement.getAttribute("content") : "";
|
||||
return baseUrl + path;
|
||||
}
|
|
@ -5,17 +5,16 @@
|
|||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="Generator" content="Lumino CMS" />
|
||||
<title>{{config('settings.name')}}</title>
|
||||
@include('template.'.config('settings.template').'.content.includes.css')
|
||||
|
||||
|
||||
<meta name="csrf-token" content="{{csrf_token()}}"/>
|
||||
<meta name="url-base" content="{{url('/')}}">
|
||||
<meta name="checkout" content="{{url('/checkout')}}">
|
||||
<meta name="get-contents" content="{{url('/contents')}}">
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{$favicon['180']}}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{$favicon['32']}}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{$favicon['16']}}">
|
||||
|
||||
@include('template.'.config('settings.template').'.content.includes.css')
|
||||
|
||||
@yield('head')
|
||||
</head>
|
||||
<body>
|
||||
|
@ -47,15 +46,11 @@
|
|||
</picture>
|
||||
</a>
|
||||
|
||||
|
||||
@if(!Request::is('checkout'))
|
||||
|
||||
|
||||
@if(!request()->is('checkout'))
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
|
||||
<div class="collapse navbar-collapse justify-content-end" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav fs-5">
|
||||
<a class="nav-item nav-link {{request()->is('produkt*')?'active':''}}" href="{{url('/produkte')}}">Produkte</a>
|
||||
|
@ -76,12 +71,9 @@
|
|||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
@ -137,18 +129,16 @@
|
|||
</div>
|
||||
<div class="row mt-3" id="modal-buttons">
|
||||
<div class="col-6">
|
||||
<button class="btn btn-light text-muted text-decoration-none" data-bs-toggle="modal" data-bs-target="#share-cart">
|
||||
<button class="btn btn-transparent text-muted text-decoration-none border" data-bs-toggle="modal" data-bs-target="#share-cart">
|
||||
Warenkorb teilen
|
||||
<svg style="fill: currentColor; width: 19px; margin-left: 4px; margin-bottom: 4px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M564.907 196.35L388.91 12.366C364.216-13.45 320 3.746 320 40.016v88.154C154.548 130.155 0 160.103 0 331.19c0 94.98 55.84 150.231 89.13 174.571 24.233 17.722 58.021-4.992 49.68-34.51C100.937 336.887 165.575 321.972 320 320.16V408c0 36.239 44.19 53.494 68.91 27.65l175.998-184c14.79-15.47 14.79-39.83-.001-55.3zm-23.127 33.18l-176 184c-4.933 5.16-13.78 1.73-13.78-5.53V288c-171.396 0-295.313 9.707-243.98 191.7C72 453.36 32 405.59 32 331.19 32 171.18 194.886 160 352 160V40c0-7.262 8.851-10.69 13.78-5.53l176 184a7.978 7.978 0 0 1 0 11.06z"/></svg>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<a href="{{url('/checkout')}}" type="button" class="btn btn-primary">Angebot unverbindlich anfragen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue