Refactor pages for wire:navigate

This commit is contained in:
Julian Prieber 2024-12-19 15:13:37 +01:00
parent 82cbe24e94
commit 91e716adc0
7 changed files with 866 additions and 682 deletions

View File

@ -2,7 +2,7 @@
Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
*/ */
(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"M2G9",version:"4.18.0",revision:"5fe059002f3",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var h=c[d].src.match(a);if(h){b=h[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,2)&&(b=0===b.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+ (function(){/*if(window.CKEDITOR&&window.CKEDITOR.dom)return;*/window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"M2G9",version:"4.18.0",revision:"5fe059002f3",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var h=c[d].src.match(a);if(h){b=h[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,2)&&(b=0===b.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+
b:location.href.match(/^[^\?]*\/(?:)/)[0]+b);if(!b)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return b}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);return a=this.appendTimestamp(a)},appendTimestamp:function(a){if(!this.timestamp||"/"===a.charAt(a.length-1)||/[&?]t=/.test(a))return a;var b=0<=a.indexOf("?")?"\x26":"?";return a+b+"t\x3d"+this.timestamp}, b:location.href.match(/^[^\?]*\/(?:)/)[0]+b);if(!b)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return b}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);return a=this.appendTimestamp(a)},appendTimestamp:function(a){if(!this.timestamp||"/"===a.charAt(a.length-1)||/[&?]t=/.test(a))return a;var b=0<=a.indexOf("?")?"\x26":"?";return a+b+"t\x3d"+this.timestamp},
domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,!1),window.removeEventListener("load",a,!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),window.detachEvent("onload",a),b())}catch(c){}}function b(){for(var a;a=c.shift();)a()}var c=[];return function(b){function e(){try{document.documentElement.doScroll("left")}catch(b){setTimeout(e,1);return}a()}c.push(b);"complete"===document.readyState&& domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,!1),window.removeEventListener("load",a,!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),window.detachEvent("onload",a),b())}catch(c){}}function b(){for(var a;a=c.shift();)a()}var c=[];return function(b){function e(){try{document.documentElement.doScroll("left")}catch(b){setTimeout(e,1);return}a()}c.push(b);"complete"===document.readyState&&
setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);b=!1;try{b=!window.frameElement}catch(d){}document.documentElement.doScroll&&b&&e()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=d.getUrl;d.getUrl=function(a){return b.call(d,a)||c.call(d,a)}}return d}()); setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);b=!1;try{b=!window.frameElement}catch(d){}document.documentElement.doScroll&&b&&e()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=d.getUrl;d.getUrl=function(a){return b.call(d,a)||c.call(d,a)}}return d}());

View File

@ -1,17 +1,24 @@
<p>{{__('messages.AC.description')}}</p> <p>{{ __('messages.AC.description') }}</p>
<form action="{{ route('editAC') }}" method="post" id="editForm"> <form action="{{ route('editAC') }}" method="post" id="editForm">
@csrf @csrf
<div class="form-group"> <div class="form-group">
<label>{{__('messages.Advanced Configuration file.')}}</label> <label>{{ __('messages.Advanced Configuration file.') }}</label>
<textarea style="width:100%;display:none;" class="form-control" name="AdvancedConfig" rows="280">{{ file_get_contents('config/advanced-config.php') }}</textarea> <textarea style="width:100%;display:none;" class="form-control" name="AdvancedConfig" rows="280">{{ file_get_contents('config/advanced-config.php') }}</textarea>
<div id="editor" style="width:100%; height:<?php echo count(file('config/advanced-config.php')) * 24 + 15;?>px; background-color:transparent !important;" class="form-control border-1 border-light" name="AdvancedConfig" rows="280">{{ file_get_contents('config/advanced-config.php') }}</div> <div id="editor" style="width:100%; height:<?php echo count(file('config/advanced-config.php')) * 24 + 15; ?>px; background-color:transparent !important;"
class="form-control border-1 border-light" name="AdvancedConfig" rows="280">
{{ file_get_contents('config/advanced-config.php') }}</div>
</div> </div>
<button type="submit" class="btn btn-primary" id="saveBtn">{{__('messages.Save')}}</button> <button type="submit" class="btn btn-primary" id="saveBtn">{{ __('messages.Save') }}</button>
<a class="btn btn-danger confirmation" href="#" id="restoreDefaultsBtn">{{__('messages.Restore defaults')}}</a> <a class="btn btn-danger confirmation" href="#"
id="restoreDefaultsBtn">{{ __('messages.Restore defaults') }}</a>
</form> </form>
<script src="{{ asset('assets/external-dependencies/ace.js') }}" type="text/javascript" charset="utf-8"></script> @push('sidebar-stylesheets')
<script> <script src="{{ asset('assets/external-dependencies/ace.js') }}" type="text/javascript" charset="utf-8"></script>
@endpush
@push('sidebar-scripts')
<script>
function performOperation() {
var editor = ace.edit("editor"); var editor = ace.edit("editor");
editor.getSession().on('change', function(e) { editor.getSession().on('change', function(e) {
@ -25,11 +32,24 @@
var confirmationMessage = "Are you sure?"; var confirmationMessage = "Are you sure?";
if (isAdvancedConfig) { if (isAdvancedConfig) {
$('#editForm').append('<input type="hidden" name="ResetAdvancedConfig" value="RESET_DEFAULTS">'); $('#editForm').append(
'<input type="hidden" name="ResetAdvancedConfig" value="RESET_DEFAULTS">');
} }
if (confirm(confirmationMessage)) { if (confirm(confirmationMessage)) {
$('#editForm').submit(); $('#editForm').submit();
} }
}); });
</script> };
document.addEventListener('DOMContentLoaded', () => {
if (typeof Livewire === 'undefined') {
performOperation();
}
});
document.addEventListener('livewire:navigated', () => {
performOperation();
});
</script>
@endpush

View File

@ -94,6 +94,78 @@
<!-- App Script --> <!-- App Script -->
<script src="{{ asset('assets/js/hope-ui.js') }}" defer></script> <script src="{{ asset('assets/js/hope-ui.js') }}" defer></script>
<!-- External Library Bundle Script -->
<script src="{{ asset('assets/js/core/external.min.js') }}"></script>
<!-- Widgetchart Script -->
<script src="{{ asset('assets/js/charts/widgetcharts.js') }}"></script>
<!-- mapchart Script -->
<script src="{{ asset('assets/js/charts/vectore-chart.js') }}"></script>
<script src="{{ asset('assets/js/charts/dashboard.js') }}"></script>
<!-- fslightbox Script -->
<script src="{{ asset('assets/js/plugins/fslightbox.js') }}"></script>
<!-- Slider-tab Script -->
{{-- <script src="{{ asset('assets/js/plugins/slider-tabs.js') }}"></script> --}}
<!-- Form Wizard Script -->
<script src="{{ asset('assets/js/plugins/form-wizard.js') }}"></script>
<!-- AOS Animation Plugin-->
<script src="{{ asset('assets/vendor/aos/dist/aos.js') }}"></script>
<!-- Flatpickr Script -->
{{-- <script src="{{ asset('assets/vendor/flatpickr/dist/flatpickr.min.js') }}"></script>
<script src="{{ asset('assets/js/plugins/flatpickr.js') }}" defer></script> --}}
<script src="{{ asset('assets/js/plugins/prism.mini.js') }}"></script>
<!-- Share Button -->
<script>
// Get a reference to all buttons with the class "share-button"
var shareButtons = document.querySelectorAll('.share-button');
// Add a click event listener to each button
shareButtons.forEach(button => {
button.addEventListener('click', () => {
// Get the value to share/copy from the "data-share" attribute
var valueToShare = button.dataset.share;
// Check if the Web Share API is supported
if (navigator.share) {
// Call the Web Share API to open the native share dialog
navigator.share({
title: '{{ __('messages.Share your profile') }}',
text: valueToShare,
url: valueToShare,
})
.catch(err => console.error('{{ __('messages.Error sharing:') }}', err));
} else {
// If the Web Share API is not supported, copy the value to the clipboard
navigator.clipboard.writeText(valueToShare)
.then(() => {
// If copying was successful, alert the user
alert('{{ __('messages.Text copied to clipboard!') }}');
})
.catch(err => {
// If copying failed, alert the user
alert('{{ __('messages.Error copying text:') }}', err);
});
}
});
});
</script>
<script src="{{ asset('assets/js/popper.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('assets/js/Sortable.min.js') }}"></script>
<script src="{{ asset('assets/js/jquery-block-ui.js') }}"></script>
<script src="{{ asset('assets/js/main-dashboard.js') }}"></script>
<script src="{{ asset('assets/vendor/livewire/core.min.js') }}"></script>
</head> </head>
<body class="{{$_COOKIE['color-mode'] ?? 'auto'}}"> <body class="{{$_COOKIE['color-mode'] ?? 'auto'}}">
{{-- <!-- loader Start --> {{-- <!-- loader Start -->
@ -224,7 +296,7 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link {{ Request::segment(2) == 'users' ? 'active' : '' }}" <a class="nav-link {{ Request::segment(2) == 'users' ? 'active' : '' }}"
href="{{ url('admin/users/all') }}" wire:current="active" wire:navigate> href="{{ url('admin/users') }}" wire:current="active" wire:navigate>
<i class="bi bi-people-fill"></i> <i class="bi bi-people-fill"></i>
<span class="item-name">{{ __('messages.Manage Users') }}</span> <span class="item-name">{{ __('messages.Manage Users') }}</span>
</a> </a>
@ -1163,81 +1235,13 @@ MODAL; // <-- Indentation breaks my code editor :/
}); });
</script> --}} </script> --}}
<!-- External Library Bundle Script -->
<script src="{{ asset('assets/js/core/external.min.js') }}"></script>
<!-- Widgetchart Script -->
<script src="{{ asset('assets/js/charts/widgetcharts.js') }}"></script>
<!-- mapchart Script -->
<script src="{{ asset('assets/js/charts/vectore-chart.js') }}"></script>
<script src="{{ asset('assets/js/charts/dashboard.js') }}"></script>
<!-- fslightbox Script -->
<script src="{{ asset('assets/js/plugins/fslightbox.js') }}"></script>
<!-- Settings Script --> <!-- Settings Script -->
<script src="{{ asset('assets/js/plugins/setting.js') }}"></script> <script src="{{ asset('assets/js/plugins/setting.js') }}"></script>
<!-- Slider-tab Script -->
{{-- <script src="{{ asset('assets/js/plugins/slider-tabs.js') }}"></script> --}}
<!-- Form Wizard Script -->
<script src="{{ asset('assets/js/plugins/form-wizard.js') }}"></script>
<!-- AOS Animation Plugin-->
<script src="{{ asset('assets/vendor/aos/dist/aos.js') }}"></script>
<!-- Flatpickr Script -->
{{-- <script src="{{ asset('assets/vendor/flatpickr/dist/flatpickr.min.js') }}"></script>
<script src="{{ asset('assets/js/plugins/flatpickr.js') }}" defer></script> --}}
<script src="{{ asset('assets/js/plugins/prism.mini.js') }}"></script>
<!-- Share Button -->
<script>
// Get a reference to all buttons with the class "share-button"
var shareButtons = document.querySelectorAll('.share-button');
// Add a click event listener to each button
shareButtons.forEach(button => {
button.addEventListener('click', () => {
// Get the value to share/copy from the "data-share" attribute
var valueToShare = button.dataset.share;
// Check if the Web Share API is supported
if (navigator.share) {
// Call the Web Share API to open the native share dialog
navigator.share({
title: '{{ __('messages.Share your profile') }}',
text: valueToShare,
url: valueToShare,
})
.catch(err => console.error('{{ __('messages.Error sharing:') }}', err));
} else {
// If the Web Share API is not supported, copy the value to the clipboard
navigator.clipboard.writeText(valueToShare)
.then(() => {
// If copying was successful, alert the user
alert('{{ __('messages.Text copied to clipboard!') }}');
})
.catch(err => {
// If copying failed, alert the user
alert('{{ __('messages.Error copying text:') }}', err);
});
}
});
});
</script>
<script src="{{ asset('assets/js/popper.js') }}"></script>
<script src="{{ asset('assets/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('assets/js/Sortable.min.js') }}"></script>
<script src="{{ asset('assets/js/jquery-block-ui.js') }}"></script>
<script src="{{ asset('assets/js/main-dashboard.js') }}"></script>
@stack('sidebar-scripts') @stack('sidebar-scripts')
{{-- <script src="{{ asset('assets/js/detect-dark-mode.js') }}"></script> --}}
<script> <script>
document.addEventListener('livewire:navigated', () => { document.addEventListener('livewire:navigated', () => {
var collapseElement = document.getElementById("admin-section"); var collapseElement = document.getElementById("admin-section");

View File

@ -124,13 +124,17 @@
</div> </div>
@push('sidebar-stylesheets') @push('sidebar-stylesheets')
{{-- @livewireStyles --}} @if(false)
@livewireStyles
@endif
<link rel="stylesheet" href="{{ asset('assets/vendor/livewire/core.min.css') }}" /> <link rel="stylesheet" href="{{ asset('assets/vendor/livewire/core.min.css') }}" />
@endpush @endpush
@push('sidebar-scripts') @push('sidebar-scripts')
{{-- <script src="{{ asset('assets/vendor/livewire/livewire.js') }}" data-update-uri="/livewire/update" data-navigate-once="true"></script> --}} @if(false)
@livewireScripts
<script src="{{ asset('assets/vendor/livewire/core.min.js') }}"></script> <script src="{{ asset('assets/vendor/livewire/core.min.js') }}"></script>
@endif
<script src="{{ asset('assets/external-dependencies/sweetalert2.min.js') }}"></script> <script src="{{ asset('assets/external-dependencies/sweetalert2.min.js') }}"></script>
<script type="text/javascript"> <script type="text/javascript">
// Function to confirm and delete users // Function to confirm and delete users

View File

@ -344,7 +344,22 @@ if (isset($_COOKIE['LinkCount'])) {
</div> </div>
</div> </div>
<script src="{{ asset('assets/external-dependencies/jquery-1.12.4.min.js') }}"></script> <script type="text/javascript">
<script type="text/javascript">$("iframe").load(function() { $("iframe").contents().find("a").each(function(index) { $(this).on("click", function(event) { event.preventDefault(); event.stopPropagation(); }); }); });</script> const iframes = ['frPreview1', 'frPreview2'];
iframes.forEach(id => {
const iframe = document.getElementById(id);
iframe.onload = function() {
const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
const style = document.createElement('style');
style.innerHTML = `
* {
pointer-events: none !important;
}
`;
iframeDocument.head.appendChild(style);
};
});
</script>
@endsection @endsection

View File

@ -3,7 +3,7 @@
@section('content') @section('content')
<div class="conatiner-fluid content-inner mt-n5 py-0"> <div class="conatiner-fluid content-inner mt-n5 py-0">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
@ -23,10 +23,10 @@
max-width: 80%; max-width: 80%;
margin: 20px auto; margin: 20px auto;
} }
</style> </style>
<style> <style>
@supports (-webkit-appearance: none) or (-moz-appearance: none) { @supports (-webkit-appearance: none) or (-moz-appearance: none) {
input[type=checkbox], input[type=checkbox],
input[type=radio] { input[type=radio] {
--active: var(--bs-primary); --active: var(--bs-primary);
@ -50,6 +50,7 @@
background: var(--b, var(--background)); background: var(--b, var(--background));
transition: background 0.3s, border-color 0.3s, box-shadow 0.2s; transition: background 0.3s, border-color 0.3s, box-shadow 0.2s;
} }
input[type=checkbox]:after, input[type=checkbox]:after,
input[type=radio]:after { input[type=radio]:after {
content: ""; content: "";
@ -59,6 +60,7 @@
position: absolute; position: absolute;
transition: transform var(--d-t, 0.3s) var(--d-t-e, ease), opacity var(--d-o, 0.2s); transition: transform var(--d-t, 0.3s) var(--d-t-e, ease), opacity var(--d-o, 0.2s);
} }
input[type=checkbox]:checked, input[type=checkbox]:checked,
input[type=radio]:checked { input[type=radio]:checked {
--b: var(--active); --b: var(--active);
@ -67,43 +69,52 @@
--d-t: .6s; --d-t: .6s;
--d-t-e: cubic-bezier(.2, .85, .32, 1.2); --d-t-e: cubic-bezier(.2, .85, .32, 1.2);
} }
input[type=checkbox]:disabled, input[type=checkbox]:disabled,
input[type=radio]:disabled { input[type=radio]:disabled {
--b: var(--disabled); --b: var(--disabled);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.9; opacity: 0.9;
} }
input[type=checkbox]:disabled:checked, input[type=checkbox]:disabled:checked,
input[type=radio]:disabled:checked { input[type=radio]:disabled:checked {
--b: var(--disabled-inner); --b: var(--disabled-inner);
--bc: var(--border); --bc: var(--border);
} }
input[type=checkbox]:disabled + label,
input[type=radio]:disabled + label { input[type=checkbox]:disabled+label,
input[type=radio]:disabled+label {
cursor: not-allowed; cursor: not-allowed;
} }
input[type=checkbox]:hover:not(:checked):not(:disabled), input[type=checkbox]:hover:not(:checked):not(:disabled),
input[type=radio]:hover:not(:checked):not(:disabled) { input[type=radio]:hover:not(:checked):not(:disabled) {
--bc: var(--border-hover); --bc: var(--border-hover);
} }
input[type=checkbox]:focus, input[type=checkbox]:focus,
input[type=radio]:focus { input[type=radio]:focus {
box-shadow: 0 0 0 var(--focus); box-shadow: 0 0 0 var(--focus);
} }
input[type=checkbox]:not(.switch), input[type=checkbox]:not(.switch),
input[type=radio]:not(.switch) { input[type=radio]:not(.switch) {
width: 21px; width: 21px;
} }
input[type=checkbox]:not(.switch):after, input[type=checkbox]:not(.switch):after,
input[type=radio]:not(.switch):after { input[type=radio]:not(.switch):after {
opacity: var(--o, 0); opacity: var(--o, 0);
} }
input[type=checkbox]:not(.switch):checked, input[type=checkbox]:not(.switch):checked,
input[type=radio]:not(.switch):checked { input[type=radio]:not(.switch):checked {
--o: 1; --o: 1;
} }
input[type=checkbox] + label,
input[type=radio] + label { input[type=checkbox]+label,
input[type=radio]+label {
font-size: 14px; font-size: 14px;
line-height: 21px; line-height: 21px;
display: inline-block; display: inline-block;
@ -115,6 +126,7 @@
input[type=checkbox]:not(.switch) { input[type=checkbox]:not(.switch) {
border-radius: 7px; border-radius: 7px;
} }
input[type=checkbox]:not(.switch):after { input[type=checkbox]:not(.switch):after {
width: 5px; width: 5px;
height: 9px; height: 9px;
@ -125,13 +137,16 @@
top: 4px; top: 4px;
transform: rotate(var(--r, 20deg)); transform: rotate(var(--r, 20deg));
} }
input[type=checkbox]:not(.switch):checked { input[type=checkbox]:not(.switch):checked {
--r: 43deg; --r: 43deg;
} }
input[type=checkbox].switch { input[type=checkbox].switch {
width: 38px; width: 38px;
border-radius: 11px; border-radius: 11px;
} }
input[type=checkbox].switch:after { input[type=checkbox].switch:after {
left: 2px; left: 2px;
top: 2px; top: 2px;
@ -141,10 +156,12 @@
background: var(--ab, var(--border)); background: var(--ab, var(--border));
transform: translateX(var(--x, 0)); transform: translateX(var(--x, 0));
} }
input[type=checkbox].switch:checked { input[type=checkbox].switch:checked {
--ab: var(--active-inner); --ab: var(--active-inner);
--x: 17px; --x: 17px;
} }
input[type=checkbox].switch:disabled:not(:checked):after { input[type=checkbox].switch:disabled:not(:checked):after {
opacity: 0.6; opacity: 0.6;
} }
@ -152,6 +169,7 @@
input[type=radio] { input[type=radio] {
border-radius: 50%; border-radius: 50%;
} }
input[type=radio]:after { input[type=radio]:after {
width: 19px; width: 19px;
height: 19px; height: 19px;
@ -160,41 +178,55 @@
opacity: 0; opacity: 0;
transform: scale(var(--s, 0.7)); transform: scale(var(--s, 0.7));
} }
input[type=radio]:checked { input[type=radio]:checked {
--s: .5; --s: .5;
} }
} }
.txt-label{
.txt-label {
color: white; color: white;
padding-left: 5px; padding-left: 5px;
font-size: 200%; font-size: 200%;
position: relative; position: relative;
} }
.toggle-btn{
.toggle-btn {
padding-left: 20px; padding-left: 20px;
} }
.ch2{
.ch2 {
padding-top: 60px; padding-top: 60px;
} }
</style> </style>
<div class="profile-img position-relative me-3 mb-3 mb-lg-0 profile-logo profile-logo1"> <div class="profile-img position-relative me-3 mb-3 mb-lg-0 profile-logo profile-logo1">
@if(file_exists(base_path(findAvatar(Auth::user()->id)))) @if (file_exists(base_path(findAvatar(Auth::user()->id))))
<img src="{{ url(findAvatar(Auth::user()->id)) }}" class="img-fluid rounded-pill avatar-100 bg-white" width="100" height="100" draggable="false" style="object-fit:cover;"> <img src="{{ url(findAvatar(Auth::user()->id)) }}"
@elseif(file_exists(base_path("assets/linkstack/images/").findFile('avatar'))) class="img-fluid rounded-pill avatar-100 bg-white" width="100" height="100"
<img src="{{ url("assets/linkstack/images/")."/".findFile('avatar') }}" class="img-fluid rounded-pill avatar-100 bg-white" width="100" height="100" draggable="false"> draggable="false" style="object-fit:cover;">
@elseif(file_exists(base_path('assets/linkstack/images/') . findFile('avatar')))
<img src="{{ url('assets/linkstack/images/') . '/' . findFile('avatar') }}"
class="img-fluid rounded-pill avatar-100 bg-white" width="100" height="100"
draggable="false">
@else @else
<img src="{{ asset('assets/linkstack/images/logo.svg') }}" class="img-fluid rounded-pill avatar-100 bg-white" width="100" height="100" draggable="false"> <img src="{{ asset('assets/linkstack/images/logo.svg') }}"
class="img-fluid rounded-pill avatar-100 bg-white" width="100" height="100"
draggable="false">
@endif @endif
@if(file_exists(base_path(findAvatar(Auth::user()->id)))) @if (file_exists(base_path(findAvatar(Auth::user()->id))))
<div class="upload-icone bg-primary"> <div class="upload-icone bg-primary">
<a href="{{ route('delProfilePicture') }}" style="top:1px;position:relative;" data-bs-toggle="tooltip" data-bs-placement="right" title="Delete profile picture"><i class="bi bi-trash-fill text-white"></i></a> <a href="{{ route('delProfilePicture') }}" style="top:1px;position:relative;"
data-bs-toggle="tooltip" data-bs-placement="right"
title="Delete profile picture"><i
class="bi bi-trash-fill text-white"></i></a>
<input class="file-upload" type="file" accept="image/*"> <input class="file-upload" type="file" accept="image/*">
</div> </div>
@endif @endif
</div> </div>
<section class='text-gray-400'> <section class='text-gray-400'>
<h3 class="mb-4 card-header"><i class="bi bi-file-earmark-break"> {{__('messages.My Profile')}}</i></h3> <h3 class="mb-4 card-header"><i class="bi bi-file-earmark-break">
@if($errors->any()) {{ __('messages.My Profile') }}</i></h3>
@if ($errors->any())
<div class="alert alert-danger d-flex align-items-center" role="alert"> <div class="alert alert-danger d-flex align-items-center" role="alert">
<svg class="bi flex-shrink-0 me-2" width="24" height="24"> <svg class="bi flex-shrink-0 me-2" width="24" height="24">
<use xlink:href="#exclamation-triangle-fill"></use> <use xlink:href="#exclamation-triangle-fill"></use>
@ -209,13 +241,17 @@
<div> <div>
<div></div> <div></div>
@foreach($pages as $page) @foreach ($pages as $page)
<form action="{{ route('editPage') }}" enctype="multipart/form-data" method="post"> <form action="{{ route('editPage') }}" enctype="multipart/form-data"
method="post">
@csrf @csrf
@if($page->littlelink_name != '') @if ($page->littlelink_name != '')
<div class="form-group col-lg-8"> <div class="form-group col-lg-8">
<label class="form-label" for="customFile">{{__('messages.Profile Picture')}}</label> <label class="form-label"
<input type="file" accept="image/jpeg,image/jpg,image/png,image/webp" name="image" class="form-control" id="customFile"> for="customFile">{{ __('messages.Profile Picture') }}</label>
<input type="file"
accept="image/jpeg,image/jpg,image/png,image/webp"
name="image" class="form-control" id="customFile">
</div> </div>
@endif @endif
@ -227,64 +263,92 @@
<div class="form-group col-lg-8"> <div class="form-group col-lg-8">
<?php <?php
$url = $_SERVER['REQUEST_URI']; $url = $_SERVER['REQUEST_URI'];
if( strpos( $url, "no_page_name" ) == true ) echo '<span style="color:#FF0000; font-size:120%;">You do not have a Page URL</span>'; ?> if (strpos($url, 'no_page_name') == true) {
echo '<span style="color:#FF0000; font-size:120%;">You do not have a Page URL</span>';
} ?>
<br> <br>
<label for="littlelink_name" class="form-label">{{__('messages.Page URL')}}</label> <label for="littlelink_name"
class="form-label">{{ __('messages.Page URL') }}</label>
<div class="input-group mb-3 has-validation"> <div class="input-group mb-3 has-validation">
<span class="input-group-text" id="basic-addon3">{{str_replace(['http://', 'https://'], '', url(''))}}/@</span> <span class="input-group-text"
<input type="littlelink_name" class="form-control" id="littlelink_name" name="littlelink_name" aria-describedby="littlelink_name" value="{{ $page->littlelink_name ?? '' }}" :value="old('littlelink_name')" required autofocus > id="basic-addon3">{{ str_replace(['http://', 'https://'], '', url('')) }}/@</span>
<input type="littlelink_name" class="form-control"
id="littlelink_name" name="littlelink_name"
aria-describedby="littlelink_name"
value="{{ $page->littlelink_name ?? '' }}" required autofocus>
</div> </div>
<script>var exceptionvar = value="{{ $page->littlelink_name }}";</script> <script>
var exceptionvar = value = "{{ $page->littlelink_name }}";
</script>
@include('auth.url-validation') @include('auth.url-validation')
<label style="margin-top:15px">{{__('messages.Display name')}}</label> <label
style="margin-top:15px">{{ __('messages.Display name') }}</label>
<div class="input-group"> <div class="input-group">
{{-- <div class="input-group-prepend"> {{-- <div class="input-group-prepend">
<div class="input-group-text">{{__('messages.Name')}}</div> <div class="input-group-text">{{__('messages.Name')}}</div>
</div> --}} </div> --}}
<input type="text" class="form-control" name="name" value="{{ $page->name }}" required> <input type="text" class="form-control" name="name"
value="{{ $page->name }}" required>
</div> </div>
</div> </div>
<div class="form-group col-lg-8"> <div class="form-group col-lg-8">
<label>{{__('messages.Page Description')}}</label> <label>{{ __('messages.Page Description') }}</label>
<textarea class="form-control @if(env('ALLOW_USER_HTML') === true) ckeditor @endif" name="pageDescription" rows="3">{{ $page->littlelink_description ?? '' }}</textarea> <textarea class="form-control @if (env('ALLOW_USER_HTML') === true) ckeditor @endif" name="pageDescription" rows="3">{{ $page->littlelink_description ?? '' }}</textarea>
</div> </div>
@if(auth()->user()->role == 'admin' || auth()->user()->role == 'vip') @if (auth()->user()->role == 'admin' || auth()->user()->role == 'vip')
<div class="form-group col-lg-8"> <div class="form-group col-lg-8">
<h5 style="margin-top:50px"> {{__('messages.Show checkmark')}}</h5> <h5 style="margin-top:50px"> {{ __('messages.Show checkmark') }}
<p class="text-muted">{{__('messages.disableverified')}}</p> </h5>
<p class="text-muted">{{ __('messages.disableverified') }}</p>
<div class="mb-3 form-check form-switch"> <div class="mb-3 form-check form-switch">
<input name="checkmark" class="switch toggle-btn" type="checkbox" id="checkmark" <?php if(UserData::getData(Auth::user()->id, 'checkmark') == true){echo 'checked';} ?> /> <input name="checkmark" class="switch toggle-btn"
<label class="form-check-label" for="checkmark">{{__('messages.Enable')}}</label> type="checkbox" id="checkmark" <?php if (UserData::getData(Auth::user()->id, 'checkmark') == true) {
echo 'checked';
} ?> />
<label class="form-check-label"
for="checkmark">{{ __('messages.Enable') }}</label>
</div> </div>
<input type="hidden" name="_token" value="{{csrf_token()}}"> <input type="hidden" name="_token" value="{{ csrf_token() }}">
@endif @endif
@endforeach @endforeach
<div class="form-group col-lg-8"> <div class="form-group col-lg-8">
<h5 style="margin-top:50px">{{__('messages.Show share button')}}</h5> <h5 style="margin-top:50px">{{ __('messages.Show share button') }}</h5>
<p class="text-muted">{{__('messages.disablesharebutton')}}</p> <p class="text-muted">{{ __('messages.disablesharebutton') }}</p>
<div class="mb-3 form-check form-switch"> <div class="mb-3 form-check form-switch">
<input name="sharebtn" class="switch toggle-btn" type="checkbox" id="sharebtn" <?php if(UserData::getData(Auth::user()->id, 'disable-sharebtn') != "true"){echo 'checked';} ?> /> <input name="sharebtn" class="switch toggle-btn" type="checkbox"
<label class="form-check-label" for="sharebtn">{{__('messages.Enable')}}</label> id="sharebtn" <?php if (UserData::getData(Auth::user()->id, 'disable-sharebtn') != 'true') {
echo 'checked';
} ?> />
<label class="form-check-label"
for="sharebtn">{{ __('messages.Enable') }}</label>
</div> </div>
<div class="form-group col-lg-8"> <div class="form-group col-lg-8">
<h5 style="margin-top:50px">{{__('messages.Open links in new tab')}}</h5> <h5 style="margin-top:50px">{{ __('messages.Open links in new tab') }}
<p class="text-muted">{{__('messages.openlinksnewtab')}}</p> </h5>
<p class="text-muted">{{ __('messages.openlinksnewtab') }}</p>
<div class="mb-3 form-check form-switch"> <div class="mb-3 form-check form-switch">
<input name="tablinks" class="switch toggle-btn" type="checkbox" id="tablinks" <?php if(UserData::getData(Auth::user()->id, 'links-new-tab') != false){echo 'checked';} ?> /> <input name="tablinks" class="switch toggle-btn" type="checkbox"
<label class="form-check-label" for="tablinks">{{__('messages.Enable')}}</label> id="tablinks" <?php if (UserData::getData(Auth::user()->id, 'links-new-tab') != false) {
echo 'checked';
} ?> />
<label class="form-check-label"
for="tablinks">{{ __('messages.Enable') }}</label>
</div> </div>
<button id="submit-btn" type="submit" class="mt-3 ml-3 btn btn-primary">{{__('messages.Save')}}</button> <button id="submit-btn" type="submit"
class="mt-3 ml-3 btn btn-primary">{{ __('messages.Save') }}</button>
</form> </form>
@if(env('ALLOW_USER_HTML') === true) @if (env('ALLOW_USER_HTML') === true)
@push('sidebar-stylesheets')
<script src="{{ asset('assets/external-dependencies/ckeditor.js') }}"></script> <script src="{{ asset('assets/external-dependencies/ckeditor.js') }}"></script>
<script> <script>
function performOperation() {
ClassicEditor ClassicEditor
.create(document.querySelector('.ckeditor'), { .create(document.querySelector('.ckeditor'), {
toolbar: { toolbar: {
@ -292,7 +356,8 @@
'exportPDF', 'exportWord', '|', 'exportPDF', 'exportWord', '|',
'findAndReplace', 'selectAll', '|', 'findAndReplace', 'selectAll', '|',
'heading', '|', 'heading', '|',
'bold', 'italic', 'strikethrough', 'underline', 'code', 'subscript', 'superscript', 'removeFormat', '|', 'bold', 'italic', 'strikethrough', 'underline', 'code', 'subscript', 'superscript',
'removeFormat', '|',
'bulletedList', 'numberedList', 'todoList', '|', 'bulletedList', 'numberedList', 'todoList', '|',
'outdent', 'indent', '|', 'outdent', 'indent', '|',
'undo', 'redo', 'undo', 'redo',
@ -340,8 +405,19 @@
.catch(error => { .catch(error => {
console.error(error); console.error(error);
}); });
</script> }
document.addEventListener('DOMContentLoaded', () => {
if (typeof Livewire === 'undefined') {
performOperation();
}
});
document.addEventListener('livewire:navigated', () => {
performOperation();
});
</script>
@endpush
@endif @endif
</div> </div>

View File

@ -1,8 +1,7 @@
@extends('layouts.sidebar') @extends('layouts.sidebar')
@section('content') @section('content')
<div class="conatiner-fluid content-inner mt-n5 py-0">
<div class="conatiner-fluid content-inner mt-n5 py-0">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
@ -11,13 +10,13 @@
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
@foreach($pages as $page) @foreach ($pages as $page)
<section class='text-gray-400'> <section class='text-gray-400'>
<h3 class="mb-4 card-header"><i class="bi bi-brush">{{__('messages.Select a theme')}}</i></h3> <h3 class="mb-4 card-header"><i
class="bi bi-brush">{{ __('messages.Select a theme') }}</i></h3>
<div> <div>
@if($errors->any()) @if ($errors->any())
<div class="alert alert-danger d-flex align-items-center" role="alert"> <div class="alert alert-danger d-flex align-items-center" role="alert">
<svg class="bi flex-shrink-0 me-2" width="24" height="24"> <svg class="bi flex-shrink-0 me-2" width="24" height="24">
<use xlink:href="#exclamation-triangle-fill"></use> <use xlink:href="#exclamation-triangle-fill"></use>
@ -30,25 +29,34 @@
</div> </div>
@endif @endif
<button type="button" class="btn btn-primary mb-5" data-bs-toggle="modal" data-bs-target="#exampleModal"> <button type="button" class="btn btn-primary mb-5" data-bs-toggle="modal"
{{__('messages.Select theme')}} data-bs-target="#exampleModal">
{{ __('messages.Select theme') }}
</button> </button>
<section class="text-gray-400"></section> <section class="text-gray-400"></section>
<div> <div>
<div style="max-width:1000px" class="col-md-12"> <div style="max-width:1000px" class="col-md-12">
<div class="card rounded shadow-lg bg-light aos-init aos-animate" data-aos="fade-up" data-aos-delay="800"> <div class="card rounded shadow-lg bg-light aos-init aos-animate"
<div class="flex-wrap card-header d-flex justify-content-between align-items-center bg-light"> data-aos="fade-up" data-aos-delay="800">
<div
class="flex-wrap card-header d-flex justify-content-between align-items-center bg-light">
<div class="header-title"> <div class="header-title">
<h4 class="card-title">{{__('messages.Preview')}}</h4> <h4 class="card-title">{{ __('messages.Preview') }}</h4>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
@if(env('USE_THEME_PREVIEW_IFRAME') === false or $page->littlelink_name == '') @if (env('USE_THEME_PREVIEW_IFRAME') === false or $page->littlelink_name == '')
<center><img style="width:95%;max-width:700px;argin-left:1rem!important;" src="@if(file_exists(base_path() . '/themes/' . $page->theme . '/preview.png')){{url('/themes/' . $page->theme . '/preview.png')}}@elseif($page->theme === 'default' or empty($page->theme)){{url('/assets/linkstack/images/themes/default.png')}}@else{{url('/assets/linkstack/images/themes/no-preview.png')}}@endif"></img></center> <center><img
style="width:95%;max-width:700px;argin-left:1rem!important;"
src="@if (file_exists(base_path() . '/themes/' . $page->theme . '/preview.png')) {{ url('/themes/' . $page->theme . '/preview.png') }}@elseif($page->theme === 'default' or empty($page->theme)){{ url('/assets/linkstack/images/themes/default.png') }}@else{{ url('/assets/linkstack/images/themes/no-preview.png') }} @endif"></img>
</center>
@else @else
<iframe frameborder="0" allowtransparency="true" id="frPreview" style="background: #FFFFFF;height:400px;" class='w-100' src="{{ url('') }}/@<?= Auth::user()->littlelink_name ?>">{{__('messages.No compatible browser')}}</iframe> <iframe frameborder="0" allowtransparency="true"
id="frPreview" style="background: #FFFFFF;height:400px;"
class='w-100'
src="{{ url('') }}/@<?= Auth::user()->littlelink_name ?>">{{ __('messages.No compatible browser') }}</iframe>
@endif @endif
</div> </div>
</div> </div>
@ -67,10 +75,11 @@
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
@if(env('ALLOW_CUSTOM_BACKGROUNDS') == true) @if (env('ALLOW_CUSTOM_BACKGROUNDS') == true)
<form action="{{ route('themeBackground') }}" enctype="multipart/form-data" method="post"> <form action="{{ route('themeBackground') }}" enctype="multipart/form-data"
method="post">
@csrf @csrf
<h3 class="mb-4 card-header">{{__('messages.Custom background')}}</h3> <h3 class="mb-4 card-header">{{ __('messages.Custom background') }}</h3>
<div style="display: none;" class="form-group col-lg-8"> <div style="display: none;" class="form-group col-lg-8">
<select class="form-control" name="theme"> <select class="form-control" name="theme">
<option>{{ $page->theme }}</option> <option>{{ $page->theme }}</option>
@ -79,18 +88,30 @@
</div> </div>
<div class="form-group col-lg-8"> <div class="form-group col-lg-8">
<figure style="max-width:1000px;max-height:562.5px;" class="figure"> <figure style="max-width:1000px;max-height:562.5px;" class="figure">
@if(!file_exists(base_path('assets/img/background-img/'.findBackground(Auth::user()->id))))<p><i>{{__('messages.No image selected')}}</i></p>@endif @if (!file_exists(base_path('assets/img/background-img/' . findBackground(Auth::user()->id))))
<img class="bd-placeholder-img figure-img img-fluid rounded" src="@if(file_exists(base_path('assets/img/background-img/'.findBackground(Auth::user()->id)))){{url('assets//img/background-img/'.findBackground(Auth::user()->id))}}@else{{url('/assets/linkstack/images/themes/no-preview.png')}}@endif"><br> <p><i>{{ __('messages.No image selected') }}</i></p>
@if(file_exists(base_path('assets/img/background-img/'.findBackground(Auth::user()->id))))<button class="mt-3 ml-3 btn btn-primary" style="background-color:tomato!important;border-color:tomato!important;transform: scale(.9);" title="Delete background image"><a href="{{ url('/studio/rem-background') }}" style="color:#FFFFFF;"><i class="bi bi-trash-fill"></i>{{__('messages.Remove background')}}</a></button><br>@endif @endif
<img class="bd-placeholder-img figure-img img-fluid rounded"
src="@if (file_exists(base_path('assets/img/background-img/' . findBackground(Auth::user()->id)))) {{ url('assets//img/background-img/' . findBackground(Auth::user()->id)) }}@else{{ url('/assets/linkstack/images/themes/no-preview.png') }} @endif"><br>
@if (file_exists(base_path('assets/img/background-img/' . findBackground(Auth::user()->id))))
<button class="mt-3 ml-3 btn btn-primary"
style="background-color:tomato!important;border-color:tomato!important;transform: scale(.9);"
title="Delete background image"><a
href="{{ url('/studio/rem-background') }}"
style="color:#FFFFFF;"><i
class="bi bi-trash-fill"></i>{{ __('messages.Remove background') }}</a></button><br>
@endif
{{-- <figcaption class="figure-caption">A caption for the above image.</figcaption> --}} {{-- <figcaption class="figure-caption">A caption for the above image.</figcaption> --}}
</figure> </figure>
<br> <br>
<br><br> <br><br>
<div class="mb-3"> <div class="mb-3">
<input type="file" accept="image/jpeg,image/jpg,image/png,image/webp,image/gif" class="form-control form-control-lg" name="image"><br> <input type="file"
accept="image/jpeg,image/jpg,image/png,image/webp,image/gif"
class="form-control form-control-lg" name="image"><br>
</div> </div>
</div> </div>
<button type="submit" class="btn btn-primary">{{__('messages.Apply')}}</button> <button type="submit" class="btn btn-primary">{{ __('messages.Apply') }}</button>
</form> </form>
@endif @endif
</div> </div>
@ -99,28 +120,31 @@
</div> </div>
</div> </div>
@if(auth()->user()->role == 'admin') @if (auth()->user()->role == 'admin')
<div class="col-lg-12"> <div class="col-lg-12">
<div class="card rounded"> <div class="card rounded">
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<h3 class="mb-4 card-header">{{__('messages.Manage themes')}}</h3> <h3 class="mb-4 card-header">{{ __('messages.Manage themes') }}</h3>
@if(env('ENABLE_THEME_UPDATER') == 'true') @if (env('ENABLE_THEME_UPDATER') == 'true')
<div id="ajax-container"> <div id="ajax-container">
<br><br><br> <br><br><br>
<div class="accordion"> <div class="accordion">
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header" id="details-header"> <h2 class="accordion-header" id="details-header">
<button class="accordion-button collapsed disabled" type="button" aria-expanded="false" aria-controls="details-collapse"> <button class="accordion-button collapsed disabled" type="button"
<div style="max-height:20px;max-width:20px;" class="spinner-border text-primary" role="status"> aria-expanded="false" aria-controls="details-collapse">
<span class="visually-hidden">{{__('messages.Loading...')}}</span> <div style="max-height:20px;max-width:20px;"
class="spinner-border text-primary" role="status">
<span
class="visually-hidden">{{ __('messages.Loading...') }}</span>
</div> </div>
</button> </button>
</h2> </h2>
<div id="details-collapse" class="accordion-collapse collapse" aria-labelledby="details-header"> <div id="details-collapse" class="accordion-collapse collapse"
aria-labelledby="details-header">
<div class="accordion-body"></div> <div class="accordion-body"></div>
</div> </div>
</div> </div>
@ -141,13 +165,19 @@
<br> <br>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label>{{__('messages.Upload themes')}}</label> <label>{{ __('messages.Upload themes') }}</label>
<input type="file" accept=".zip" name="zip" class="form-control form-control-lg"> <input type="file" accept=".zip" name="zip"
class="form-control form-control-lg">
</div><br><br> </div><br><br>
<div class="d-flex flex-column flex-md-row align-items-md-center"> <div class="d-flex flex-column flex-md-row align-items-md-center">
<button type="submit" class="btn btn-primary me-md-3 mb-3 mb-md-0">{{__('messages.Upload themes')}}</button> <button type="submit"
<button class="btn btn-danger me-md-3 mb-3 mb-md-0 delete-themes" title="Delete themes"><a href="{{ url('/admin/theme') }}" class="text-white">{{__('messages.Delete themes')}}</a></button> class="btn btn-primary me-md-3 mb-3 mb-md-0">{{ __('messages.Upload themes') }}</button>
<button class="btn btn-info download-themes" title="Download more themes"><a href="https://linkstack.org/themes/" target="_blank" class="text-white">{{__('messages.Download themes')}}</a></button> <button class="btn btn-danger me-md-3 mb-3 mb-md-0 delete-themes"
title="Delete themes"><a href="{{ url('/admin/theme') }}"
class="text-white">{{ __('messages.Delete themes') }}</a></button>
<button class="btn btn-info download-themes" title="Download more themes"><a
href="https://linkstack.org/themes/" target="_blank"
class="text-white">{{ __('messages.Download themes') }}</a></button>
</div> </div>
</form> </form>
</details> </details>
@ -158,13 +188,11 @@
</div> </div>
</div> </div>
@endif @endif
@endforeach
@endforeach </section>
<script>
<script src="{{ asset('assets/external-dependencies/jquery-1.12.4.min.js') }}"></script> function performOperation() {
</section>
<script>
$(window).on('load', function() {
var placeholder = $('#ajax-container'); var placeholder = $('#ajax-container');
var lazyElement = $('#my-lazy-element'); var lazyElement = $('#my-lazy-element');
@ -176,35 +204,67 @@ $(window).on('load', function() {
lazyElement.html(response); lazyElement.html(response);
} }
}); });
}); };
</script>
<script type="text/javascript">$("iframe").load(function() { $("iframe").contents().find("a").each(function(index) { $(this).on("click", function(event) { event.preventDefault(); event.stopPropagation(); }); }); });</script>
@push('sidebar-scripts') document.addEventListener('DOMContentLoaded', () => {
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> if (typeof Livewire === 'undefined') {
performOperation();
}
});
document.addEventListener('livewire:navigated', () => {
performOperation();
});
</script>
<script type="text/javascript">
var iframe = document.getElementById('frPreview');
iframe.onload = function() {
const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
const style = document.createElement('style');
style.innerHTML = `
* {
pointer-events: none !important;
}
`;
iframeDocument.head.appendChild(style);
};
</script>
@push('sidebar-scripts')
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-fullscreen"> <div class="modal-dialog modal-fullscreen">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">{{__('messages.Select a theme')}}</h5> <h5 class="modal-title" id="exampleModalLabel">{{ __('messages.Select a theme') }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form action="{{ route('editTheme') }}" enctype="multipart/form-data" method="post"> <form action="{{ route('editTheme') }}" enctype="multipart/form-data" method="post">
@csrf @csrf
<select id="theme-select" style="display:none;" name="theme" data-base-url="{{ url('') }}/@<?= Auth::user()->littlelink_name ?>"><option value="default" selected></option></select> <select id="theme-select" style="display:none;" name="theme"
data-base-url="{{ url('') }}/@<?= Auth::user()->littlelink_name ?>">
<option value="default" selected></option>
</select>
<div class="row"> <div class="row">
<div class="col-lg-3"> <div class="col-lg-3">
<div class="card shadow-lg @if($page->theme == "" or $page->theme == "default") bg-primary @else bg-soft-primary @endif"> <div
class="card shadow-lg @if ($page->theme == '' or $page->theme == 'default') bg-primary @else bg-soft-primary @endif">
<div class="card-body pb-0"> <div class="card-body pb-0">
<a style="cursor:pointer;" onclick="setTheme('default')"> <a style="cursor:pointer;" onclick="setTheme('default')">
<div class="d-flex justify-content-between"> <div class="d-flex justify-content-between">
<div> <div>
<img draggable="false" class="bd-placeholder-img bd-placeholder-img-lg img-fluid" src="{{url('assets/linkstack/images/themes/default.png')}}"> <img draggable="false"
class="bd-placeholder-img bd-placeholder-img-lg img-fluid"
src="{{ url('assets/linkstack/images/themes/default.png') }}">
</div> </div>
</div> </div>
<div class="text-center"> <div class="text-center">
<h2 class="m-3 @if($page->theme == "" or $page->theme == "default") text-white @else text-gray @endif"">Default Theme</h2> <h2
class="m-3 @if ($page->theme == '' or $page->theme == 'default') text-white @else text-gray @endif"">
Default Theme</h2>
<div> <div>
</div> </div>
</div> </div>
@ -228,16 +288,21 @@ $(window).on('load', function() {
?> ?>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="card shadow-lg @if($page->theme == $entry) bg-primary @else bg-soft-primary @endif"> <div
class="card shadow-lg @if ($page->theme == $entry) bg-primary @else bg-soft-primary @endif">
<div class="card-body pb-0"> <div class="card-body pb-0">
<a style="cursor:pointer;" onclick="setTheme('{{$entry}}')"> <a style="cursor:pointer;" onclick="setTheme('{{ $entry }}')">
<div class="d-flex justify-content-between"> <div class="d-flex justify-content-between">
<div> <div>
<img draggable="false" class="bd-placeholder-img bd-placeholder-img-lg img-fluid" src="{{url('themes/'.$entry.'/preview.png')}}"> <img draggable="false"
class="bd-placeholder-img bd-placeholder-img-lg img-fluid"
src="{{ url('themes/' . $entry . '/preview.png') }}">
</div> </div>
</div> </div>
<div class="text-center"> <div class="text-center">
<h2 class="m-3 @if($page->theme == $entry) text-white @else text-gray @endif">{{$themeName}}</h2> <h2
class="m-3 @if ($page->theme == $entry) text-white @else text-gray @endif">
{{ $themeName }}</h2>
<div> <div>
</div> </div>
</div> </div>
@ -257,18 +322,18 @@ $(window).on('load', function() {
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{__('messages.Close')}}</button> <button type="button" class="btn btn-secondary"
data-bs-dismiss="modal">{{ __('messages.Close') }}</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<script> <script>
function setTheme(themeName) { function setTheme(themeName) {
const selectElement = document.getElementById('theme-select'); const selectElement = document.getElementById('theme-select');
selectElement.querySelector('option').value = themeName; selectElement.querySelector('option').value = themeName;
selectElement.form.submit(); selectElement.form.submit();
} }
</script> </script>
@endpush @endpush
@endsection
@endsection