Rebrand SmOS_CC customer surfaces to HAH restaurant.
Browse files- modules/SmOS_CC/admin-config.js +1 -1
- modules/SmOS_CC/admin/admin.js +3 -3
- modules/SmOS_CC/admin/barista.html +2 -2
- modules/SmOS_CC/admin/chef.html +2 -2
- modules/SmOS_CC/admin/dashboard.html +2 -2
- modules/SmOS_CC/admin/home.html +2 -2
- modules/SmOS_CC/admin/index.html +3 -3
- modules/SmOS_CC/admin/waiter.html +2 -2
- modules/SmOS_CC/app.js +20 -20
- modules/SmOS_CC/assets/logo-c.svg +1 -1
- modules/SmOS_CC/checkout.html +2 -2
- modules/SmOS_CC/hours-config.js +1 -1
- modules/SmOS_CC/index.html +5 -5
- modules/SmOS_CC/menu-data.js +1 -1
- modules/SmOS_CC/order.html +2 -2
- modules/SmOS_CC/path.html +1 -1
- modules/SmOS_CC/payments-config.js +3 -3
- modules/SmOS_CC/receipt.js +2 -2
- modules/SmOS_CC/reservation-config.js +2 -2
- modules/SmOS_CC/reservation.js +3 -3
- modules/SmOS_CC/reserve.html +2 -2
modules/SmOS_CC/admin-config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
window.SmOS_Module = {
|
| 2 |
id: "SmOS_CC",
|
| 3 |
-
name: "
|
| 4 |
};
|
|
|
|
| 1 |
window.SmOS_Module = {
|
| 2 |
id: "SmOS_CC",
|
| 3 |
+
name: "HAH restaurant",
|
| 4 |
};
|
modules/SmOS_CC/admin/admin.js
CHANGED
|
@@ -4,7 +4,7 @@ window.SmOSAdmin = (function () {
|
|
| 4 |
const match = location.pathname.match(/\/modules\/([^/]+)\/admin/);
|
| 5 |
return {
|
| 6 |
id: match ? match[1] : "SmOS_CC",
|
| 7 |
-
name: "
|
| 8 |
};
|
| 9 |
}
|
| 10 |
|
|
@@ -815,7 +815,7 @@ window.SmOSAdmin = (function () {
|
|
| 815 |
}
|
| 816 |
|
| 817 |
function menuDrinkIds() {
|
| 818 |
-
const menu = window.
|
| 819 |
return new Set(menu.filter((i) => i.section === "Drinks").map((i) => i.id));
|
| 820 |
}
|
| 821 |
|
|
@@ -1257,7 +1257,7 @@ window.SmOSAdmin = (function () {
|
|
| 1257 |
const b = bookings.find((row) => row.id === id);
|
| 1258 |
if (!b) return;
|
| 1259 |
if (window.SmOSReceipt?.openPrint) {
|
| 1260 |
-
window.SmOSReceipt.openPrint(b, { businessName: "
|
| 1261 |
} else {
|
| 1262 |
alert("Receipt helper not loaded.");
|
| 1263 |
}
|
|
|
|
| 4 |
const match = location.pathname.match(/\/modules\/([^/]+)\/admin/);
|
| 5 |
return {
|
| 6 |
id: match ? match[1] : "SmOS_CC",
|
| 7 |
+
name: "HAH restaurant",
|
| 8 |
};
|
| 9 |
}
|
| 10 |
|
|
|
|
| 815 |
}
|
| 816 |
|
| 817 |
function menuDrinkIds() {
|
| 818 |
+
const menu = window.HAHRestaurantMenu || [];
|
| 819 |
return new Set(menu.filter((i) => i.section === "Drinks").map((i) => i.id));
|
| 820 |
}
|
| 821 |
|
|
|
|
| 1257 |
const b = bookings.find((row) => row.id === id);
|
| 1258 |
if (!b) return;
|
| 1259 |
if (window.SmOSReceipt?.openPrint) {
|
| 1260 |
+
window.SmOSReceipt.openPrint(b, { businessName: "HAH restaurant" });
|
| 1261 |
} else {
|
| 1262 |
alert("Receipt helper not loaded.");
|
| 1263 |
}
|
modules/SmOS_CC/admin/barista.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -14,7 +14,7 @@
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
-
<h1 data-module-name>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>HAH restaurant · Barista</title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
+
<h1 data-module-name>HAH restaurant</h1>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
modules/SmOS_CC/admin/chef.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -14,7 +14,7 @@
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
-
<h1 data-module-name>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>HAH restaurant · Chef</title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
+
<h1 data-module-name>HAH restaurant</h1>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
modules/SmOS_CC/admin/dashboard.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -14,7 +14,7 @@
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
-
<h1 data-module-name>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>HAH restaurant · Staff</title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
+
<h1 data-module-name>HAH restaurant</h1>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
modules/SmOS_CC/admin/home.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -14,7 +14,7 @@
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
-
<h1 data-module-name>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item is-active" href="home.html">Home</a>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>HAH restaurant · Admin home</title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
+
<h1 data-module-name>HAH restaurant</h1>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item is-active" href="home.html">Home</a>
|
modules/SmOS_CC/admin/index.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -13,7 +13,7 @@
|
|
| 13 |
<body class="admin-login-page">
|
| 14 |
<div class="admin-login-card">
|
| 15 |
<div class="admin-login-brand">
|
| 16 |
-
<p class="admin-login-eyebrow"><span data-module-name>
|
| 17 |
<h1>Staff sign in</h1>
|
| 18 |
<p class="admin-login-lead">Admin home, orders & reservations for this venue.</p>
|
| 19 |
</div>
|
|
@@ -29,7 +29,7 @@
|
|
| 29 |
<p class="admin-login-error" data-login-error hidden role="alert"></p>
|
| 30 |
<button type="submit">Sign in</button>
|
| 31 |
</form>
|
| 32 |
-
<p class="admin-login-foot">Local demo: <code>admin</code> / <code>
|
| 33 |
<p class="admin-login-foot"><a class="admin-link" href="../">← Back to ordering</a></p>
|
| 34 |
</div>
|
| 35 |
<script src="../admin-config.js?v=1" defer></script>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>HAH restaurant · Staff sign in</title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 13 |
<body class="admin-login-page">
|
| 14 |
<div class="admin-login-card">
|
| 15 |
<div class="admin-login-brand">
|
| 16 |
+
<p class="admin-login-eyebrow"><span data-module-name>HAH restaurant</span> · <span data-module-id>SmOS_CC</span></p>
|
| 17 |
<h1>Staff sign in</h1>
|
| 18 |
<p class="admin-login-lead">Admin home, orders & reservations for this venue.</p>
|
| 19 |
</div>
|
|
|
|
| 29 |
<p class="admin-login-error" data-login-error hidden role="alert"></p>
|
| 30 |
<button type="submit">Sign in</button>
|
| 31 |
</form>
|
| 32 |
+
<p class="admin-login-foot">Local demo: <code>admin</code> / <code>hah-restaurant</code></p>
|
| 33 |
<p class="admin-login-foot"><a class="admin-link" href="../">← Back to ordering</a></p>
|
| 34 |
</div>
|
| 35 |
<script src="../admin-config.js?v=1" defer></script>
|
modules/SmOS_CC/admin/waiter.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -14,7 +14,7 @@
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
-
<h1 data-module-name>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>HAH restaurant · Waiter</title>
|
| 7 |
<link rel="icon" type="image/svg+xml" href="../assets/logo-c.svg">
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 14 |
<aside class="admin-sidebar">
|
| 15 |
<div class="admin-sidebar__brand">
|
| 16 |
<p class="admin-sidebar__eyebrow"><span data-module-id>SmOS_CC</span></p>
|
| 17 |
+
<h1 data-module-name>HAH restaurant</h1>
|
| 18 |
</div>
|
| 19 |
<nav class="admin-nav">
|
| 20 |
<a class="admin-nav__item" href="home.html">Home</a>
|
modules/SmOS_CC/app.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
| 1 |
(function () {
|
| 2 |
-
const THEME_KEY = "
|
| 3 |
-
const SERVICE_KEY = "
|
| 4 |
-
const MODE_KEY = "
|
| 5 |
-
const CART_KEY = "
|
| 6 |
|
| 7 |
const serviceLabels = {
|
| 8 |
delivery: "Delivery",
|
|
@@ -117,7 +117,7 @@
|
|
| 117 |
const keys = [];
|
| 118 |
for (let i = 0; i < sessionStorage.length; i += 1) {
|
| 119 |
const key = sessionStorage.key(i);
|
| 120 |
-
if (key && key.startsWith("
|
| 121 |
}
|
| 122 |
keys.forEach((key) => sessionStorage.removeItem(key));
|
| 123 |
} catch (e) {
|
|
@@ -306,7 +306,7 @@
|
|
| 306 |
|
| 307 |
if (linesEl) {
|
| 308 |
linesEl.innerHTML = "";
|
| 309 |
-
const menu = window.
|
| 310 |
cart.forEach((line) => {
|
| 311 |
const item = menu.find((m) => m.id === line.id) || line;
|
| 312 |
const li = document.createElement("li");
|
|
@@ -405,7 +405,7 @@
|
|
| 405 |
}
|
| 406 |
|
| 407 |
function initMenuPanel() {
|
| 408 |
-
const menu = window.
|
| 409 |
const filters = document.querySelector("[data-menu-filters]");
|
| 410 |
const list = document.querySelector("[data-menu-list]");
|
| 411 |
if (!filters || !list) return;
|
|
@@ -512,7 +512,7 @@
|
|
| 512 |
}
|
| 513 |
|
| 514 |
function matchOrder(query) {
|
| 515 |
-
const menu = window.
|
| 516 |
const tokens = tokenize(query);
|
| 517 |
if (!tokens.length) return [];
|
| 518 |
|
|
@@ -562,7 +562,7 @@
|
|
| 562 |
const results = document.querySelector("[data-know-results]");
|
| 563 |
if (!form || !results) return;
|
| 564 |
|
| 565 |
-
const findItem = (id) => (window.
|
| 566 |
|
| 567 |
const renderMatches = (matches) => {
|
| 568 |
results.hidden = false;
|
|
@@ -613,7 +613,7 @@
|
|
| 613 |
"sitting-in": "SIT",
|
| 614 |
};
|
| 615 |
const prefix = prefixes[service] || "ORD";
|
| 616 |
-
const storageKey = `
|
| 617 |
let ref = "";
|
| 618 |
try {
|
| 619 |
ref = sessionStorage.getItem(storageKey) || "";
|
|
@@ -637,8 +637,8 @@
|
|
| 637 |
|
| 638 |
function clearOrderReference(service) {
|
| 639 |
try {
|
| 640 |
-
sessionStorage.removeItem(`
|
| 641 |
-
sessionStorage.removeItem("
|
| 642 |
} catch (e) {
|
| 643 |
/* ignore */
|
| 644 |
}
|
|
@@ -646,7 +646,7 @@
|
|
| 646 |
|
| 647 |
function loadSitTablesFromSession() {
|
| 648 |
try {
|
| 649 |
-
const raw = sessionStorage.getItem("
|
| 650 |
if (!raw) return [];
|
| 651 |
const res = JSON.parse(raw);
|
| 652 |
return Array.isArray(res.tables) ? res.tables : [];
|
|
@@ -859,7 +859,7 @@
|
|
| 859 |
|
| 860 |
let pendingMeta = {};
|
| 861 |
try {
|
| 862 |
-
pendingMeta = JSON.parse(sessionStorage.getItem("
|
| 863 |
} catch (_) {
|
| 864 |
pendingMeta = {};
|
| 865 |
}
|
|
@@ -875,7 +875,7 @@
|
|
| 875 |
clearCart();
|
| 876 |
clearOrderReference(svc);
|
| 877 |
try {
|
| 878 |
-
sessionStorage.removeItem("
|
| 879 |
} catch (_) {}
|
| 880 |
if (lead) {
|
| 881 |
lead.textContent = `Thanks ${name || "there"}. ${ref} · ${svcLabel} · ${total} · paid via Mollie.`;
|
|
@@ -903,9 +903,9 @@
|
|
| 903 |
placedAt: booking.created_at || new Date().toISOString(),
|
| 904 |
};
|
| 905 |
try {
|
| 906 |
-
const history = JSON.parse(sessionStorage.getItem("
|
| 907 |
history.unshift(historyOrder);
|
| 908 |
-
sessionStorage.setItem("
|
| 909 |
} catch (_) {}
|
| 910 |
const receiptBtn = document.querySelector("[data-download-receipt]");
|
| 911 |
if (receiptBtn && window.SmOSReceipt?.openPrint) {
|
|
@@ -1291,7 +1291,7 @@
|
|
| 1291 |
if (!created?.checkout_url) throw new Error("No Mollie checkout URL returned.");
|
| 1292 |
try {
|
| 1293 |
sessionStorage.setItem(
|
| 1294 |
-
"
|
| 1295 |
JSON.stringify({
|
| 1296 |
paymentId: created.payment_id,
|
| 1297 |
ref: order.ref,
|
|
@@ -1342,9 +1342,9 @@
|
|
| 1342 |
}
|
| 1343 |
|
| 1344 |
try {
|
| 1345 |
-
const history = JSON.parse(sessionStorage.getItem("
|
| 1346 |
history.unshift(order);
|
| 1347 |
-
sessionStorage.setItem("
|
| 1348 |
clearOrderReference(service);
|
| 1349 |
} catch (e) {
|
| 1350 |
/* ignore */
|
|
|
|
| 1 |
(function () {
|
| 2 |
+
const THEME_KEY = "hah-restaurant-theme";
|
| 3 |
+
const SERVICE_KEY = "hah-restaurant-order-service";
|
| 4 |
+
const MODE_KEY = "hah-restaurant-order-mode";
|
| 5 |
+
const CART_KEY = "hah-restaurant-cart";
|
| 6 |
|
| 7 |
const serviceLabels = {
|
| 8 |
delivery: "Delivery",
|
|
|
|
| 117 |
const keys = [];
|
| 118 |
for (let i = 0; i < sessionStorage.length; i += 1) {
|
| 119 |
const key = sessionStorage.key(i);
|
| 120 |
+
if (key && key.startsWith("hah-restaurant-pay-ref")) keys.push(key);
|
| 121 |
}
|
| 122 |
keys.forEach((key) => sessionStorage.removeItem(key));
|
| 123 |
} catch (e) {
|
|
|
|
| 306 |
|
| 307 |
if (linesEl) {
|
| 308 |
linesEl.innerHTML = "";
|
| 309 |
+
const menu = window.HAHRestaurantMenu || [];
|
| 310 |
cart.forEach((line) => {
|
| 311 |
const item = menu.find((m) => m.id === line.id) || line;
|
| 312 |
const li = document.createElement("li");
|
|
|
|
| 405 |
}
|
| 406 |
|
| 407 |
function initMenuPanel() {
|
| 408 |
+
const menu = window.HAHRestaurantMenu || [];
|
| 409 |
const filters = document.querySelector("[data-menu-filters]");
|
| 410 |
const list = document.querySelector("[data-menu-list]");
|
| 411 |
if (!filters || !list) return;
|
|
|
|
| 512 |
}
|
| 513 |
|
| 514 |
function matchOrder(query) {
|
| 515 |
+
const menu = window.HAHRestaurantMenu || [];
|
| 516 |
const tokens = tokenize(query);
|
| 517 |
if (!tokens.length) return [];
|
| 518 |
|
|
|
|
| 562 |
const results = document.querySelector("[data-know-results]");
|
| 563 |
if (!form || !results) return;
|
| 564 |
|
| 565 |
+
const findItem = (id) => (window.HAHRestaurantMenu || []).find((m) => m.id === id);
|
| 566 |
|
| 567 |
const renderMatches = (matches) => {
|
| 568 |
results.hidden = false;
|
|
|
|
| 613 |
"sitting-in": "SIT",
|
| 614 |
};
|
| 615 |
const prefix = prefixes[service] || "ORD";
|
| 616 |
+
const storageKey = `hah-restaurant-pay-ref-${service || "order"}`;
|
| 617 |
let ref = "";
|
| 618 |
try {
|
| 619 |
ref = sessionStorage.getItem(storageKey) || "";
|
|
|
|
| 637 |
|
| 638 |
function clearOrderReference(service) {
|
| 639 |
try {
|
| 640 |
+
sessionStorage.removeItem(`hah-restaurant-pay-ref-${service || "order"}`);
|
| 641 |
+
sessionStorage.removeItem("hah-restaurant-pay-ref");
|
| 642 |
} catch (e) {
|
| 643 |
/* ignore */
|
| 644 |
}
|
|
|
|
| 646 |
|
| 647 |
function loadSitTablesFromSession() {
|
| 648 |
try {
|
| 649 |
+
const raw = sessionStorage.getItem("hah-restaurant-reservation");
|
| 650 |
if (!raw) return [];
|
| 651 |
const res = JSON.parse(raw);
|
| 652 |
return Array.isArray(res.tables) ? res.tables : [];
|
|
|
|
| 859 |
|
| 860 |
let pendingMeta = {};
|
| 861 |
try {
|
| 862 |
+
pendingMeta = JSON.parse(sessionStorage.getItem("hah-restaurant-mollie-pending") || "{}") || {};
|
| 863 |
} catch (_) {
|
| 864 |
pendingMeta = {};
|
| 865 |
}
|
|
|
|
| 875 |
clearCart();
|
| 876 |
clearOrderReference(svc);
|
| 877 |
try {
|
| 878 |
+
sessionStorage.removeItem("hah-restaurant-mollie-pending");
|
| 879 |
} catch (_) {}
|
| 880 |
if (lead) {
|
| 881 |
lead.textContent = `Thanks ${name || "there"}. ${ref} · ${svcLabel} · ${total} · paid via Mollie.`;
|
|
|
|
| 903 |
placedAt: booking.created_at || new Date().toISOString(),
|
| 904 |
};
|
| 905 |
try {
|
| 906 |
+
const history = JSON.parse(sessionStorage.getItem("hah-restaurant-orders") || "[]");
|
| 907 |
history.unshift(historyOrder);
|
| 908 |
+
sessionStorage.setItem("hah-restaurant-orders", JSON.stringify(history.slice(0, 20)));
|
| 909 |
} catch (_) {}
|
| 910 |
const receiptBtn = document.querySelector("[data-download-receipt]");
|
| 911 |
if (receiptBtn && window.SmOSReceipt?.openPrint) {
|
|
|
|
| 1291 |
if (!created?.checkout_url) throw new Error("No Mollie checkout URL returned.");
|
| 1292 |
try {
|
| 1293 |
sessionStorage.setItem(
|
| 1294 |
+
"hah-restaurant-mollie-pending",
|
| 1295 |
JSON.stringify({
|
| 1296 |
paymentId: created.payment_id,
|
| 1297 |
ref: order.ref,
|
|
|
|
| 1342 |
}
|
| 1343 |
|
| 1344 |
try {
|
| 1345 |
+
const history = JSON.parse(sessionStorage.getItem("hah-restaurant-orders") || "[]");
|
| 1346 |
history.unshift(order);
|
| 1347 |
+
sessionStorage.setItem("hah-restaurant-orders", JSON.stringify(history.slice(0, 20)));
|
| 1348 |
clearOrderReference(service);
|
| 1349 |
} catch (e) {
|
| 1350 |
/* ignore */
|
modules/SmOS_CC/assets/logo-c.svg
CHANGED
|
|
|
|
modules/SmOS_CC/checkout.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
-
var k = "
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
@@ -18,7 +18,7 @@
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
-
<title>
|
| 22 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg">
|
| 23 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 24 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
+
var k = "hah-restaurant-theme";
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
+
<title>HAH restaurant | Checkout</title>
|
| 22 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg">
|
| 23 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 24 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
modules/SmOS_CC/hours-config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
/**
|
| 2 |
window.SmOS_CC_Hours = {
|
| 3 |
cafe: {
|
| 4 |
label: "Cafe",
|
|
|
|
| 1 |
+
/** HAH restaurant service hours — single source for customer-facing copy. */
|
| 2 |
window.SmOS_CC_Hours = {
|
| 3 |
cafe: {
|
| 4 |
label: "Cafe",
|
modules/SmOS_CC/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
-
var k = "
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
@@ -18,8 +18,8 @@
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
-
<title>
|
| 22 |
-
<meta name="description" content="Order from
|
| 23 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg?v=1.17">
|
| 24 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 25 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -33,7 +33,7 @@
|
|
| 33 |
<header class="app-header">
|
| 34 |
<a class="app-brand" href="../../index.html" title="SmOS home">
|
| 35 |
<img src="assets/logo-c.svg" alt="" width="36" height="36" decoding="async">
|
| 36 |
-
<span>SmOS_CC ·
|
| 37 |
</a>
|
| 38 |
<div class="app-header__actions">
|
| 39 |
<a class="app-admin-link" href="admin/">Admin</a>
|
|
@@ -51,7 +51,7 @@
|
|
| 51 |
|
| 52 |
<main class="app-main">
|
| 53 |
<div class="app-hero">
|
| 54 |
-
<img class="app-hero__logo" src="assets/logo-c.svg?v=1.17" alt="
|
| 55 |
<h1 class="app-hero__title">How would you like your order?</h1>
|
| 56 |
<p class="app-hero__lead">Choose delivery, collection, sitting in, or reserve a table.</p>
|
| 57 |
</div>
|
|
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
+
var k = "hah-restaurant-theme";
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
+
<title>HAH restaurant | Order online</title>
|
| 22 |
+
<meta name="description" content="Order from HAH restaurant, Dalkeith — delivery, collection or sitting in.">
|
| 23 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg?v=1.17">
|
| 24 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 25 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 33 |
<header class="app-header">
|
| 34 |
<a class="app-brand" href="../../index.html" title="SmOS home">
|
| 35 |
<img src="assets/logo-c.svg" alt="" width="36" height="36" decoding="async">
|
| 36 |
+
<span>SmOS_CC · HAH restaurant</span>
|
| 37 |
</a>
|
| 38 |
<div class="app-header__actions">
|
| 39 |
<a class="app-admin-link" href="admin/">Admin</a>
|
|
|
|
| 51 |
|
| 52 |
<main class="app-main">
|
| 53 |
<div class="app-hero">
|
| 54 |
+
<img class="app-hero__logo" src="assets/logo-c.svg?v=1.17" alt="HAH restaurant" width="88" height="88" decoding="async">
|
| 55 |
<h1 class="app-hero__title">How would you like your order?</h1>
|
| 56 |
<p class="app-hero__lead">Choose delivery, collection, sitting in, or reserve a table.</p>
|
| 57 |
</div>
|
modules/SmOS_CC/menu-data.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
window.
|
| 2 |
{"id": "organic-porridge", "name": "Organic porridge", "desc": "cream or oat milk · banana & honey or berries", "price": 6.5, "priceDisplay": "£6.50", "section": "Breakfast", "group": "Morning classics", "tags": ["organic", "porridge"]},
|
| 3 |
{"id": "buttery-jam", "name": "Buttery & jam", "desc": "Aberdeen rowie, unsalted butter", "price": 3.8, "priceDisplay": "£3.80", "section": "Breakfast", "group": "Morning classics", "tags": ["buttery", "jam"]},
|
| 4 |
{"id": "bacon-or-lorne-sausage-roll", "name": "Bacon or Lorne sausage roll", "desc": "on a soft morning roll", "price": 4.5, "priceDisplay": "£4.50", "section": "Breakfast", "group": "Morning classics", "tags": ["bacon", "lorne", "sausage", "roll"]},
|
|
|
|
| 1 |
+
window.HAHRestaurantMenu = [
|
| 2 |
{"id": "organic-porridge", "name": "Organic porridge", "desc": "cream or oat milk · banana & honey or berries", "price": 6.5, "priceDisplay": "£6.50", "section": "Breakfast", "group": "Morning classics", "tags": ["organic", "porridge"]},
|
| 3 |
{"id": "buttery-jam", "name": "Buttery & jam", "desc": "Aberdeen rowie, unsalted butter", "price": 3.8, "priceDisplay": "£3.80", "section": "Breakfast", "group": "Morning classics", "tags": ["buttery", "jam"]},
|
| 4 |
{"id": "bacon-or-lorne-sausage-roll", "name": "Bacon or Lorne sausage roll", "desc": "on a soft morning roll", "price": 4.5, "priceDisplay": "£4.50", "section": "Breakfast", "group": "Morning classics", "tags": ["bacon", "lorne", "sausage", "roll"]},
|
modules/SmOS_CC/order.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
-
var k = "
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
@@ -18,7 +18,7 @@
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
-
<title>
|
| 22 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg?v=1.17">
|
| 23 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 24 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
+
var k = "hah-restaurant-theme";
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
+
<title>HAH restaurant | Order</title>
|
| 22 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg?v=1.17">
|
| 23 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 24 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
modules/SmOS_CC/path.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
| 6 |
-
<title>
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
var p = new URLSearchParams(window.location.search);
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
| 6 |
+
<title>HAH restaurant | Order</title>
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
var p = new URLSearchParams(window.location.search);
|
modules/SmOS_CC/payments-config.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
window.SmOS_CC_Payments = {
|
| 2 |
-
businessName: "
|
| 3 |
-
payeeName: "
|
| 4 |
sortCode: "",
|
| 5 |
accountNumber: "",
|
| 6 |
bankName: "",
|
| 7 |
-
referencePrefix: "
|
| 8 |
mollieEnabled: false,
|
| 9 |
mollieMode: "off",
|
| 10 |
options: [
|
|
|
|
| 1 |
window.SmOS_CC_Payments = {
|
| 2 |
+
businessName: "HAH restaurant",
|
| 3 |
+
payeeName: "HAH restaurant",
|
| 4 |
sortCode: "",
|
| 5 |
accountNumber: "",
|
| 6 |
bankName: "",
|
| 7 |
+
referencePrefix: "HAH",
|
| 8 |
mollieEnabled: false,
|
| 9 |
mollieMode: "off",
|
| 10 |
options: [
|
modules/SmOS_CC/receipt.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
/** Shared receipt helpers for
|
| 2 |
window.SmOSReceipt = (function () {
|
| 3 |
function money(n) {
|
| 4 |
const v = Number(n);
|
|
@@ -40,7 +40,7 @@ window.SmOSReceipt = (function () {
|
|
| 40 |
}
|
| 41 |
|
| 42 |
function buildHtml(b, opts = {}) {
|
| 43 |
-
const biz = opts.businessName || "
|
| 44 |
const when = b.placedAt || b.created_at || b.updated_at || new Date().toISOString();
|
| 45 |
const whenLabel = (() => {
|
| 46 |
try {
|
|
|
|
| 1 |
+
/** Shared receipt helpers for HAH restaurant orders (customer download + waiter print). */
|
| 2 |
window.SmOSReceipt = (function () {
|
| 3 |
function money(n) {
|
| 4 |
const v = Number(n);
|
|
|
|
| 40 |
}
|
| 41 |
|
| 42 |
function buildHtml(b, opts = {}) {
|
| 43 |
+
const biz = opts.businessName || "HAH restaurant";
|
| 44 |
const when = b.placedAt || b.created_at || b.updated_at || new Date().toISOString();
|
| 45 |
const whenLabel = (() => {
|
| 46 |
try {
|
modules/SmOS_CC/reservation-config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
-
/**
|
| 2 |
window.SmOS_CC_Reservations = {
|
| 3 |
-
venue: "
|
| 4 |
/** Table reservations cover cafe day + Indian evening service. */
|
| 5 |
openHours: { start: "09:00", end: "22:00", lastArrival: "21:45" },
|
| 6 |
cafeHours: { start: "09:00", end: "18:00", orderCutoff: "17:30" },
|
|
|
|
| 1 |
+
/** HAH restaurant floor plan — tables, layout grid, adjacency for smart merges. */
|
| 2 |
window.SmOS_CC_Reservations = {
|
| 3 |
+
venue: "HAH restaurant · 9 Eskdail Court, Dalkeith",
|
| 4 |
/** Table reservations cover cafe day + Indian evening service. */
|
| 5 |
openHours: { start: "09:00", end: "22:00", lastArrival: "21:45" },
|
| 6 |
cafeHours: { start: "09:00", end: "18:00", orderCutoff: "17:30" },
|
modules/SmOS_CC/reservation.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
(function () {
|
| 2 |
-
const RES_KEY = "
|
| 3 |
const cfg = window.SmOS_CC_Reservations;
|
| 4 |
if (!cfg) return;
|
| 5 |
|
|
@@ -536,9 +536,9 @@
|
|
| 536 |
|
| 537 |
try {
|
| 538 |
sessionStorage.setItem(RES_KEY, JSON.stringify(reservation));
|
| 539 |
-
const history = JSON.parse(sessionStorage.getItem("
|
| 540 |
history.unshift(reservation);
|
| 541 |
-
sessionStorage.setItem("
|
| 542 |
} catch (e) {
|
| 543 |
/* ignore */
|
| 544 |
}
|
|
|
|
| 1 |
(function () {
|
| 2 |
+
const RES_KEY = "hah-restaurant-reservation";
|
| 3 |
const cfg = window.SmOS_CC_Reservations;
|
| 4 |
if (!cfg) return;
|
| 5 |
|
|
|
|
| 536 |
|
| 537 |
try {
|
| 538 |
sessionStorage.setItem(RES_KEY, JSON.stringify(reservation));
|
| 539 |
+
const history = JSON.parse(sessionStorage.getItem("hah-restaurant-reservations") || "[]");
|
| 540 |
history.unshift(reservation);
|
| 541 |
+
sessionStorage.setItem("hah-restaurant-reservations", JSON.stringify(history.slice(0, 20)));
|
| 542 |
} catch (e) {
|
| 543 |
/* ignore */
|
| 544 |
}
|
modules/SmOS_CC/reserve.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
-
var k = "
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
@@ -18,7 +18,7 @@
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
-
<title>
|
| 22 |
<meta name="description" content="Smart table reservation — pick your seat on the floor plan or get merged table suggestions.">
|
| 23 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg?v=1.17">
|
| 24 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
|
|
| 7 |
<script>
|
| 8 |
(function () {
|
| 9 |
try {
|
| 10 |
+
var k = "hah-restaurant-theme";
|
| 11 |
var t = localStorage.getItem(k);
|
| 12 |
var th = t === "light" ? "light" : "dark";
|
| 13 |
document.documentElement.setAttribute("data-theme", th);
|
|
|
|
| 18 |
}
|
| 19 |
})();
|
| 20 |
</script>
|
| 21 |
+
<title>HAH restaurant | Reserve a table</title>
|
| 22 |
<meta name="description" content="Smart table reservation — pick your seat on the floor plan or get merged table suggestions.">
|
| 23 |
<link rel="icon" type="image/svg+xml" href="assets/logo-c.svg?v=1.17">
|
| 24 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|