6db83ccd90
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 4m55s
- Discount store pages (products, cart, orders, order detail) - Blog pages and services - Payment gateway callback page - AppImage component, EmptyState, LoadingState, PageHeader - DiscountCartService, DiscountOrderService, DiscountProductService - BlogCategoryService, BlogPostService, SitePageService, ImageCacheService - PhoneVerifyForm component - Profile Hub page - UI/UX improvements across all pages - landing.js for homepage - Config and routing updates
140 lines
6.2 KiB
Plaintext
140 lines
6.2 KiB
Plaintext
@page "/"
|
|
@using Microsoft.AspNetCore.Components.Web
|
|
@namespace FrontOffice.Main.Pages
|
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="fa" dir="rtl">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<meta name="theme-color" content="#7c4dff" />
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
<base href="~/" />
|
|
<link rel="icon" type="image/png" href="favicon.png"/>
|
|
<component type="typeof(HeadOutlet)" render-mode="Server" />
|
|
|
|
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" />
|
|
<!-- MudBlazor CSS (باید قبل از site.css باشه تا override بشه) -->
|
|
<link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" asp-append-version="true" />
|
|
<!-- Custom styles (بعد از MudBlazor برای override) -->
|
|
<link href="css/site.css" rel="stylesheet" asp-append-version="true" />
|
|
<link href="FrontOffice.Main.styles.css" rel="stylesheet" />
|
|
<!-- d3-org-chart custom styles -->
|
|
<link href="css/org-chart.css" rel="stylesheet" asp-append-version="true" />
|
|
</head>
|
|
<body>
|
|
<component type="typeof(App)" render-mode="Server" />
|
|
|
|
<div id="blazor-error-ui">
|
|
<environment include="Staging,Production">
|
|
یک خطا رخ داده است. این برنامه ممکن است تا زمان بارگذاری مجدد پاسخگو نباشد.
|
|
</environment>
|
|
<environment include="Development">
|
|
خطای مدیریتنشده ای اتفاق افتاده است. برای مشاهده جزئیات، ابزار توسعه (DevTools) مرورگر را بررسی نمایید.
|
|
</environment>
|
|
<a href="" class="reload">بارگذاری مجدد</a>
|
|
<a class="dismiss">🗙</a>
|
|
</div>
|
|
|
|
<!-- Load MudBlazor JS before Blazor to avoid early JS interop calls failing; add cache-busting -->
|
|
<script src="_content/MudBlazor/MudBlazor.min.js" asp-append-version="true"></script>
|
|
|
|
<!-- d3.js and d3-org-chart for network tree visualization -->
|
|
<script src="js/d3.v7.min.js"></script>
|
|
<script src="js/d3-flextree.min.js"></script>
|
|
<script src="js/d3-org-chart3.js"></script>
|
|
<script src="js/org-chart.js" asp-append-version="true"></script>
|
|
<script src="js/landing.js" asp-append-version="true"></script>
|
|
|
|
<script src="_framework/blazor.server.js"></script>
|
|
<script>
|
|
window.fetchAndDownloadPdf = async function(html, fileName){
|
|
try {
|
|
const res = await fetch('/contract/generate', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ html: html, fileName: fileName })
|
|
});
|
|
if(!res.ok){
|
|
throw new Error('PDF generation failed: ' + res.status);
|
|
}
|
|
const blob = await res.blob();
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = (fileName || 'contract') + '.pdf';
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
a.remove();
|
|
setTimeout(()=>URL.revokeObjectURL(url), 5000);
|
|
} catch(e){
|
|
console.error(e);
|
|
}
|
|
};
|
|
</script>
|
|
<script>
|
|
// elementId: id نوار (مثلاً "top")
|
|
// containerSelector: کانتینری که اسکرول میخوره؛ برای MudLayout معمولا ".mud-main-content"
|
|
// threshold: آستانه پیکسل
|
|
function changeNavBgOnBodyScroll(elementId, containerSelector = null, threshold = 10) {
|
|
var navbar = document.getElementById(elementId);
|
|
if (!navbar) return;
|
|
|
|
var container = containerSelector ? document.querySelector(containerSelector) : window;
|
|
|
|
var getScrollTop = function () {
|
|
if (container === window) {
|
|
return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
|
}
|
|
return container.scrollTop || 0;
|
|
};
|
|
|
|
var update = function () {
|
|
var y = getScrollTop();
|
|
if (y >= threshold) {
|
|
navbar.classList.add("white", "mud-elevation-2");
|
|
} else {
|
|
navbar.classList.remove("white", "mud-elevation-2");
|
|
}
|
|
};
|
|
|
|
// گوش دادن به اسکرول روی کانتینر درست
|
|
(container === window ? window : container).addEventListener("scroll", update, { passive: true });
|
|
|
|
// برای بارگذاری اولیه / تغییر اندازه / بازگشت از تاریخچه
|
|
window.addEventListener("load", update);
|
|
window.addEventListener("resize", update);
|
|
window.addEventListener("pageshow", update);
|
|
|
|
// اجرای اولیه (حتی اگر کاربر اسکرول نکرده)
|
|
requestAnimationFrame(update);
|
|
}
|
|
|
|
// پاک کردن کش مرورگر (Cache Storage و Service Worker)
|
|
window.clearBrowserCache = async function() {
|
|
// پاک کردن Cache Storage (Service Worker cache)
|
|
if ('caches' in window) {
|
|
const cacheNames = await caches.keys();
|
|
await Promise.all(
|
|
cacheNames.map(cacheName => caches.delete(cacheName))
|
|
);
|
|
console.log('Cache Storage cleared:', cacheNames.length, 'caches deleted');
|
|
}
|
|
|
|
// پاک کردن Service Worker registration
|
|
if ('serviceWorker' in navigator) {
|
|
const registrations = await navigator.serviceWorker.getRegistrations();
|
|
await Promise.all(
|
|
registrations.map(registration => registration.unregister())
|
|
);
|
|
console.log('Service Workers unregistered:', registrations.length);
|
|
}
|
|
|
|
return true;
|
|
};
|
|
</script>
|
|
</body>
|
|
</html>
|