File: //home/marketing.cfbon.ru/public_html/resources/views/layouts/main.blade.php
<!doctype html>
<html lang="en">
<!--begin::Head-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>@yield('title', 'Admin - CofeeBon')</title>
<!--begin::Primary Meta Tags-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="description"
content=""
/>
<!--end::Primary Meta Tags-->
<!--begin::Fonts-->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css"
integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q="
crossorigin="anonymous"
/>
<!--end::Fonts-->
<!--begin::Third Party Plugin(OverlayScrollbars)-->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.10.1/styles/overlayscrollbars.min.css"
integrity="sha256-tZHrRjVqNSRyWg2wbppGnT833E/Ys0DHWGwT04GiqQg="
crossorigin="anonymous"
/>
<!--end::Third Party Plugin(OverlayScrollbars)-->
<!--begin::Third Party Plugin(Bootstrap Icons)-->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"
integrity="sha256-9kPW/n5nn53j4WMRYAxe9c1rCY96Oogo/MKSVdKzPmI="
crossorigin="anonymous"
/>
<!--end::Third Party Plugin(Bootstrap Icons)-->
<!--begin::Required Plugin(AdminLTE)-->
<link rel="stylesheet" href="{{asset('adminLTE/dist/css/adminlte.css?ver=1.0.0')}}" />
<link rel="stylesheet" href="{{asset('adminLTE/dist/css/custom.css?ver=1.0.0')}}" />
<link rel="stylesheet" href="{{asset('adminLTE/dist/css/promotion.css?ver=1.0.0')}}" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css">
<!--end::Required Plugin(AdminLTE)-->
<!-- apexcharts -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/apexcharts@3.37.1/dist/apexcharts.css"
integrity="sha256-4MX+61mt9NVvvuPjUWdUdyfZfxSB1/Rf9WtqRHgG5S0="
crossorigin="anonymous"
/>
<!-- jsvectormap -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/jsvectormap@1.5.3/dist/css/jsvectormap.min.css"
integrity="sha256-+uGLJmmTKOqBr+2E6KDYs/NRsHxSkONXFHUL0fy2O/4="
crossorigin="anonymous"
/>
</head>
<!--end::Head-->
<!--begin::Body-->
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
<div class="app-wrapper">
<nav class="app-header navbar navbar-expand bg-body">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" data-lte-toggle="sidebar" href="#" role="button">
<i class="bi bi-list"></i>
</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
<li class="nav-item dropdown user-menu">
<span class="d-none d-md-inline m-2">{{ auth()->user()->name }}</span>
<a href="{{ route('logout') }}" class="btn btn-outline-danger">Выйти</a>
</li>
</ul>
</div>
</nav>
<aside class="app-sidebar bg-body-secondary shadow" data-bs-theme="dark">
<div class="sidebar-brand">
<a href="{{ route('index') }}" class="brand-link">
<img
src="{{asset('adminLTE/images/logo.svg')}}"
alt="AdminLTE Logo"
class="brand-image opacity-75 shadow"
/>
<span class="brand-text fw-light">CoffeeBon</span>
</a>
</div>
@include('layouts.sidebar-menu')
</aside>
<main class="app-main">
<div class="app-content-header">
<div class="container-fluid">
@yield('return_btn_url', '')
<div class="row">
<div class="col-sm-6 d-flex gap-4">
<h3 class="mb-0">@yield('title', 'Admin - CoffeeBon')</h3>
@yield('title_button')
</div>
{{-- <div class="col-sm-6">--}}
{{-- <ol class="breadcrumb float-sm-end">--}}
{{-- <li class="breadcrumb-item"><a href="#">Home</a></li>--}}
{{-- <li class="breadcrumb-item active" aria-current="page">Dashboard</li>--}}
{{-- </ol>--}}
{{-- </div>--}}
</div>
</div>
</div>
<div class="container mt-3 ms-2">
<div class="row">
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if(session('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif
</div>
</div>
@yield('content')
</main>
<footer class="app-footer">
<div class="float-end d-none d-sm-inline">Anything you want</div>
<strong>
Copyright © {{ date('Y') }}
<a href="https://www.coffeebon.ru/" class="text-decoration-none text-danger">CoffeeBon</a>.
</strong>
All rights reserved.
</footer>
</div>
<!--begin::Script-->
<!--begin::Third Party Plugin(OverlayScrollbars)-->
<script
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.10.1/browser/overlayscrollbars.browser.es6.min.js"
integrity="sha256-dghWARbRe2eLlIJ56wNB+b760ywulqK3DzZYEpsg2fQ="
crossorigin="anonymous"
></script>
<!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
<script
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
crossorigin="anonymous"
></script>
<!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js"
integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
crossorigin="anonymous"
></script>
<!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
<script src="{{asset('adminLTE/dist/js/adminlte.js')}}"></script>
<!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
<script src="{{asset('adminLTE/dist/js/tinymce/tinymce.min.js')}}"></script>
<script src="{{asset('adminLTE/dist/js/imask.js')}}"></script>
<script src="https://cdn.jsdelivr.net/npm/toastify-js"></script>
<script>
tinymce.init({
selector: '#editor',
plugins: 'advlist autolink lists link image charmap preview anchor pagebreak code',
toolbar: 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | code',
toolbar_mode: 'floating',
tinycomments_mode: 'embedded',
language: 'ru',
language_url: '{{ asset("adminLTE/dist/js/tinymce/langs/ru.js") }}',
tinycomments_author: 'Author name',
forced_root_block: 'p', // Используем <p>, но без авто-добавления пустых
force_p_newlines: false, // Не создавать новые <p> на Enter (использует <br>)
remove_linebreaks: false, // Не удалять переносы строк
cleanup: true, // Включить очистку HTML
verify_html: true, // Проверять HTML на валидность
remove_trailing_brs: true, // Удалять лишние <br> в конце
nonbreaking_force_tab: false, // Не вставлять при табуляции
});
</script>
<script>
const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper';
const Default = {
scrollbarTheme: 'os-theme-light',
scrollbarAutoHide: 'leave',
scrollbarClickScroll: true,
};
document.addEventListener('DOMContentLoaded', function () {
const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
if (sidebarWrapper && typeof OverlayScrollbarsGlobal?.OverlayScrollbars !== 'undefined') {
OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
scrollbars: {
theme: Default.scrollbarTheme,
autoHide: Default.scrollbarAutoHide,
clickScroll: Default.scrollbarClickScroll,
},
});
}
});
</script>
<!--end::OverlayScrollbars Configure-->
<!-- OPTIONAL SCRIPTS -->
<!-- sortablejs -->
<script
src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.0/Sortable.min.js"
integrity="sha256-ipiJrswvAR4VAx/th+6zWsdeYmVae0iJuiR+6OqHJHQ="
crossorigin="anonymous"
></script>
<!-- sortablejs -->
<script>
const connectedSortables = document.querySelectorAll('.connectedSortable');
connectedSortables.forEach((connectedSortable) => {
let sortable = new Sortable(connectedSortable, {
group: 'shared',
handle: '.card-header',
});
});
const cardHeaders = document.querySelectorAll('.connectedSortable .card-header');
cardHeaders.forEach((cardHeader) => {
cardHeader.style.cursor = 'move';
});
</script>
<!-- apexcharts -->
<script
src="https://cdn.jsdelivr.net/npm/apexcharts@3.37.1/dist/apexcharts.min.js"
integrity="sha256-+vh8GkaU7C9/wbSLIcwq82tQ2wTf44aOHA8HlBMwRI8="
crossorigin="anonymous"
></script>
<!-- ChartJS -->
<script>
// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
// IT'S ALL JUST JUNK FOR DEMO
// ++++++++++++++++++++++++++++++++++++++++++
const sales_chart_options = {
series: [
{
name: 'Digital Goods',
data: [28, 48, 40, 19, 86, 27, 90],
},
{
name: 'Electronics',
data: [65, 59, 80, 81, 56, 55, 40],
},
],
chart: {
height: 300,
type: 'area',
toolbar: {
show: false,
},
},
legend: {
show: false,
},
colors: ['#0d6efd', '#20c997'],
dataLabels: {
enabled: false,
},
stroke: {
curve: 'smooth',
},
xaxis: {
type: 'datetime',
categories: [
'2023-01-01',
'2023-02-01',
'2023-03-01',
'2023-04-01',
'2023-05-01',
'2023-06-01',
'2023-07-01',
],
},
tooltip: {
x: {
format: 'MMMM yyyy',
},
},
};
const sales_chart = new ApexCharts(
document.querySelector('#revenue-chart'),
sales_chart_options,
);
sales_chart.render();
</script>
<!-- jsvectormap -->
<script
src="https://cdn.jsdelivr.net/npm/jsvectormap@1.5.3/dist/js/jsvectormap.min.js"
integrity="sha256-/t1nN2956BT869E6H4V1dnt0X5pAQHPytli+1nTZm2Y="
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/jsvectormap@1.5.3/dist/maps/world.js"
integrity="sha256-XPpPaZlU8S/HWf7FZLAncLg2SAkP8ScUTII89x9D3lY="
crossorigin="anonymous"
></script>
<!-- jsvectormap -->
<script>
const visitorsData = {
US: 398, // USA
SA: 400, // Saudi Arabia
CA: 1000, // Canada
DE: 500, // Germany
FR: 760, // France
CN: 300, // China
AU: 700, // Australia
BR: 600, // Brazil
IN: 800, // India
GB: 320, // Great Britain
RU: 3000, // Russia
};
// World map by jsVectorMap
const map = new jsVectorMap({
selector: '#world-map',
map: 'world',
});
// Sparkline charts
const option_sparkline1 = {
series: [
{
data: [1000, 1200, 920, 927, 931, 1027, 819, 930, 1021],
},
],
chart: {
type: 'area',
height: 50,
sparkline: {
enabled: true,
},
},
stroke: {
curve: 'straight',
},
fill: {
opacity: 0.3,
},
yaxis: {
min: 0,
},
colors: ['#DCE6EC'],
};
const sparkline1 = new ApexCharts(document.querySelector('#sparkline-1'), option_sparkline1);
sparkline1.render();
const option_sparkline2 = {
series: [
{
data: [515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921],
},
],
chart: {
type: 'area',
height: 50,
sparkline: {
enabled: true,
},
},
stroke: {
curve: 'straight',
},
fill: {
opacity: 0.3,
},
yaxis: {
min: 0,
},
colors: ['#DCE6EC'],
};
const sparkline2 = new ApexCharts(document.querySelector('#sparkline-2'), option_sparkline2);
sparkline2.render();
const option_sparkline3 = {
series: [
{
data: [15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21],
},
],
chart: {
type: 'area',
height: 50,
sparkline: {
enabled: true,
},
},
stroke: {
curve: 'straight',
},
fill: {
opacity: 0.3,
},
yaxis: {
min: 0,
},
colors: ['#DCE6EC'],
};
const sparkline3 = new ApexCharts(document.querySelector('#sparkline-3'), option_sparkline3);
sparkline3.render();
</script>
@yield('scripts')
<!--end::Script-->
</body>
<!--end::Body-->
</html>