ok
Direktori : /home2/selectio/public_html/fms-worksuite/resources/views/layouts/ |
Current File : /home2/selectio/public_html/fms-worksuite/resources/views/layouts/app.blade.php |
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="icon" type="image/png" sizes="16x16" href="{{ companyOrGlobalSetting()->favicon_url }}"> <!-- Font Awesome Icons --> <link rel="stylesheet" href="{{ asset('vendor/css/all.min.css') }}"> <!-- Simple Line Icons --> <link rel="stylesheet" href="{{ asset('vendor/css/simple-line-icons.css') }}"> <!-- Datepicker --> <link rel="stylesheet" href="{{ asset('vendor/css/datepicker.min.css') }}"> <!-- TimePicker --> <link rel="stylesheet" href="{{ asset('vendor/css/bootstrap-timepicker.min.css') }}"> <!-- Select Plugin --> <link rel="stylesheet" href="{{ asset('vendor/css/select2.min.css') }}"> <!-- Bootstrap Icons --> <link rel="stylesheet" href="{{ asset('vendor/css/bootstrap-icons.css') }}"> @stack('datatable-styles') <!-- Template CSS --> <link type="text/css" rel="stylesheet" media="all" href="{{ asset('css/main.css') }}"> <title>@lang($pageTitle)</title> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="{{ companyOrGlobalSetting()->favicon_url }}"> <meta name="theme-color" content="#ffffff"> <meta name="csrf-token" content="{{ csrf_token() }}"/> @isset($activeSettingMenu) <style> .preloader-container { margin-left: 510px; width: calc(100% - 510px) } .blur-code { filter: blur(3px); } .purchase-code { transition: filter .2s ease-out; margin-right: 4px; } </style> @endisset @stack('styles') <style> :root { --fc-border-color: #E8EEF3; --fc-button-text-color: #99A5B5; --fc-button-border-color: #99A5B5; --fc-button-bg-color: #ffffff; --fc-button-active-bg-color: #171f29; --fc-today-bg-color: #f2f4f7; } .fc a[data-navlink] { color: #99a5b5; } .ql-editor p{ line-height: 1.42; } </style> {{-- Custom theme styles --}} @if (!user()->dark_theme) @include('sections.theme_css') @endif @if (file_exists(public_path() . '/css/app-custom.css')) <link href="{{ asset('css/app-custom.css') }}" rel="stylesheet"> @endif <script src="{{ asset('vendor/jquery/jquery.min.js') }}"></script> <script src="{{ asset('vendor/jquery/modernizr.min.js') }}"></script> {{-- Timepicker --}} <script src="{{ asset('vendor/jquery/bootstrap-timepicker.min.js') }}"></script> @includeif('sections.push-setting-include') {{-- Include file for widgets if exist --}} @includeif('sections.custom_script') <script> const checkMiniSidebar = localStorage.getItem("mini-sidebar"); </script> </head> <body id="body" class="{{ user()->dark_theme ? 'dark-theme' : '' }} {{ user()->rtl ? 'rtl' : '' }}"> <script> if (checkMiniSidebar == "yes" || checkMiniSidebar == "") { $('body').addClass('sidebar-toggled'); } </script> {{-- include topbar --}} @include('sections.topbar') {{-- include sidebar menu --}} @include('sections.sidebar') <!-- BODY WRAPPER START --> <div class="body-wrapper clearfix"> <!-- MAIN CONTAINER START --> <section class="main-container bg-additional-grey mb-5 mb-sm-0" id="fullscreen"> <div class="preloader-container d-flex justify-content-center align-items-center"> <div class="spinner-border" role="status" aria-hidden="true"></div> </div> @yield('filter-section') <x-app-title class="d-block d-lg-none" :pageTitle="__($pageTitle)"></x-app-title> @yield('content') </section> <!-- MAIN CONTAINER END --> </div> <!-- BODY WRAPPER END --> @include('sections.modals') <!-- Global Required Javascript --> <script src="{{ asset('js/main.js') }}"></script> <script> // Translation of default values for the select picker box. $.fn.selectpicker.Constructor.DEFAULTS.noneSelectedText = "@lang('placeholders.noneSelectedText')"; $.fn.selectpicker.Constructor.DEFAULTS.noneResultsText = "@lang('placeholders.noneResultsText')"; $.fn.selectpicker.Constructor.DEFAULTS.selectAllText = "@lang('placeholders.selectAllText')"; $.fn.selectpicker.Constructor.DEFAULTS.deselectAllText = "@lang('placeholders.deselectAllText')"; const MODAL_DEFAULT = '#myModalDefault'; const MODAL_LG = '#myModal'; const MODAL_XL = '#myModalXl'; const MODAL_HEADING = '#modelHeading'; const RIGHT_MODAL = '#task-detail-1'; const RIGHT_MODAL_CONTENT = '#right-modal-content'; const RIGHT_MODAL_TITLE = '#right-modal-title'; const company = @json(companyOrGlobalSetting()); const pusher_setting = @json(pusher_settings()); const message_setting = @json(message_setting()); const SEARCH_KEYWORD = "{{ request('search_keyword') }}"; const MOMENTJS_TIME_FORMAT = "{{ (companyOrGlobalSetting()->time_format == 'h:i A') ? 'hh:mm A' : ( (companyOrGlobalSetting()->time_format == 'h:i a') ? 'hh:mm a' : 'H:mm') }}"; const datepickerConfig = { formatter: (input, date, instance) => { input.value = moment(date).format('{{ companyOrGlobalSetting()->moment_date_format }}') }, showAllDates: true, customDays: {!! json_encode(\App\Models\GlobalSetting::getDaysOfWeek())!!}, customMonths: {!! json_encode(\App\Models\GlobalSetting::getMonthsOfYear())!!}, customOverlayMonths: {!! json_encode(\App\Models\GlobalSetting::getMonthsOfYear())!!}, overlayButton: "@lang('app.submit')", overlayPlaceholder: "@lang('app.enterYear')", startDay: parseInt("{{ attendance_setting()?->week_start_from }}") }; const daterangeConfig = { "@lang('app.today')": [moment(), moment()], "@lang('app.last30Days')": [moment().subtract(29, 'days'), moment()], "@lang('app.thisMonth')": [moment().startOf('month'), moment().endOf('month')], "@lang('app.lastMonth')": [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')], "@lang('app.last90Days')": [moment().subtract(89, 'days'), moment()], "@lang('app.last6Months')": [moment().subtract(6, 'months'), moment()], "@lang('app.last1Year')": [moment().subtract(1, 'years'), moment()] }; const daterangeLocale = { "format": "{{ companyOrGlobalSetting()->moment_date_format }}", "customRangeLabel": "@lang('app.customRange')", "separator": " @lang('app.to') ", "applyLabel": "@lang('app.apply')", "cancelLabel": "@lang('app.cancel')", "monthNames": {!! json_encode(\App\Models\GlobalSetting::getMonthsOfYear())!!}, "daysOfWeek": {!! json_encode(\App\Models\GlobalSetting::getDaysOfWeek())!!}, "firstDay": parseInt("{{ attendance_setting()?->week_start_from }}") }; const dropifyMessages = { default: "@lang('app.dragDrop')", replace: "@lang('app.dragDropReplace')", remove: "@lang('app.remove')", error: "@lang('messages.errorOccured')", }; const DROPZONE_FILE_ALLOW = "{{ global_setting()->allowed_file_types }}"; const DROPZONE_MAX_FILESIZE = "{{ global_setting()->allowed_file_size }}"; const DROPZONE_MAX_FILES = "{{ global_setting()->allow_max_no_of_files }}"; Dropzone.prototype.defaultOptions.dictFallbackMessage = "{{ __('modules.projectTemplate.dropFallbackMessage') }}"; Dropzone.prototype.defaultOptions.dictFallbackText = "{{ __('modules.projectTemplate.dropFallbackText') }}"; Dropzone.prototype.defaultOptions.dictFileTooBig = "{{ __('modules.projectTemplate.dropFileTooBig') }}"; Dropzone.prototype.defaultOptions.dictInvalidFileType = "{{ __('modules.projectTemplate.dropInvalidFileType') }}"; Dropzone.prototype.defaultOptions.dictResponseError = "{{ __('modules.projectTemplate.dropResponseError') }}"; Dropzone.prototype.defaultOptions.dictCancelUpload = "{{ __('modules.projectTemplate.dropCancelUpload') }}"; Dropzone.prototype.defaultOptions.dictCancelUploadConfirmation = "{{ __('modules.projectTemplate.dropCancelUploadConfirmation') }}"; Dropzone.prototype.defaultOptions.dictRemoveFile = "{{ __('modules.projectTemplate.dropRemoveFile') }}"; Dropzone.prototype.defaultOptions.dictMaxFilesExceeded = "{{ __('modules.projectTemplate.dropMaxFilesExceeded') }}"; Dropzone.prototype.defaultOptions.dictDefaultMessage = "{{ __('modules.projectTemplate.dropFile') }}"; Dropzone.prototype.defaultOptions.timeout = 0; $('#datatableRange').on('apply.daterangepicker', (event, picker) => { cb(picker.startDate, picker.endDate); $('#datatableRange').val(picker.startDate.format('{{ companyOrGlobalSetting()->moment_date_format }}') + ' @lang("app.to") ' + picker.endDate.format( '{{ companyOrGlobalSetting()->moment_date_format }}')); }); $('#datatableRange2').on('apply.daterangepicker', (event, picker) => { cb(picker.startDate, picker.endDate); $('#datatableRange2').val(picker.startDate.format('{{ companyOrGlobalSetting()->moment_date_format }}') + ' @lang("app.to") ' + picker.endDate.format( '{{ companyOrGlobalSetting()->moment_date_format }}')); }); function cb(start, end) { $('#datatableRange, #datatableRange2').val(start.format('{{ companyOrGlobalSetting()->moment_date_format }}') + ' @lang("app.to") ' + end.format( '{{ companyOrGlobalSetting()->moment_date_format }}')); $('#reset-filters, #reset-filters-2').removeClass('d-none'); } </script> <!-- Scripts --> <script> window.Laravel = {!! json_encode([ 'csrfToken' => csrf_token(), 'user' => user(), ]) !!}; </script> @stack('scripts') <script> $(window).on('load', function () { // Animate loader off screen init(); $(".preloader-container").fadeOut("slow", function () { $(this).removeClass("d-flex"); }); }); $('body').on('click', '.view-notification', function (event) { event.preventDefault(); const id = $(this).data('notification-id'); const href = $(this).attr('href'); $.easyAjax({ url: "{{ route('mark_single_notification_read') }}", type: "POST", data: { '_token': "{{ csrf_token() }}", 'id': id }, success: function () { if (typeof href !== 'undefined') { window.location = href; } } }); }); $('body').on('click', '.img-lightbox', function () { const imageUrl = $(this).data('image-url'); const url = "{{ route('front.public.show_image').'?image_url=' }}" + encodeURIComponent(imageUrl); $(MODAL_XL + ' ' + MODAL_HEADING).html('...'); $.ajaxModal(MODAL_XL, url); }); function updateOnesignalPlayerId(userId) { $.easyAjax({ url: '{{ route('profile.update_onesignal_id') }}', type: 'POST', data: { 'userId': userId, '_token': '{{ csrf_token() }}' } }) } if (SEARCH_KEYWORD !== '' && $('#search-text-field').length > 0) { $('#search-text-field').val(SEARCH_KEYWORD); $('#reset-filters').removeClass('d-none'); } $('body').on('click', '.show-hide-purchase-code', function () { $('> .icon', this).toggleClass('fa-eye-slash fa-eye'); $(this).siblings('span').toggleClass('blur-code '); }); </script> <script> let quillArray = {}; function quillImageLoad(ID) { const quillContainer = document.querySelector(ID); quillArray[ID] = new Quill(ID, { modules: { toolbar: [ // [{ align: '' }, { align: 'center' }, { align: 'right' }, { align: 'justify' }], [{ header: [1, 2, 3, 4, 5, false] }], [{ 'list': 'ordered' }, { 'list': 'bullet' }], ['bold', 'italic', 'underline', 'strike'], ['image', 'code-block', 'link','video'], [{ 'direction': 'rtl' }], ['clean'] ], clipboard: { matchVisual: false }, "emoji-toolbar": true, "emoji-textarea": true, "emoji-shortname": true, }, theme: 'snow', bounds: quillContainer }); $.each(quillArray, function (key, quill) { quill.getModule('toolbar').addHandler('image', selectLocalImage); }); } function destory_editor(selector){ if($(selector)[0]) { var content = $(selector).find('.ql-editor').html(); $(selector).html(content); $(selector).siblings('.ql-toolbar').remove(); $(selector + " *[class*='ql-']").removeClass (function (index, class_name) { return (class_name.match (/(^|\s)ql-\S+/g) || []).join(' '); }); $(selector + "[class*='ql-']").removeClass (function (index, class_name) { return (class_name.match (/(^|\s)ql-\S+/g) || []).join(' '); }); } else { console.error('editor not exists'); } } function quillMention(atValues,ID) { const mentionItemTemplate = '<div class="mention-item"> <img src="{image}" class="align-self-start mr-3 taskEmployeeImg rounded">{name}</div>'; const customRenderItem = function(item, searchTerm) { const html = mentionItemTemplate.replace('{image}', item.image).replace('{name}', item.value); return html; } let placeholder; if (ID === '#submitTexts') { placeholder = "@lang('placeholders.message')"; } else { placeholder = ''; } var quillEditor = new Quill(ID, { placeholder: placeholder, modules: { magicUrl: { urlRegularExpression: /(https?:\/\/[\S]+)|(www.[\S]+)|(tel:[\S]+)/g, globalRegularExpression: /(https?:\/\/|www\.|tel:)[\S]+/g, }, mention: { allowedChars: /^[A-Za-z\sÅÄÖåäö]*$/, mentionDenotationChars: ["@", "#"], source: function(searchTerm, renderList, mentionChar) { let values; if (mentionChar === "@") { values = atValues; } else { values = hashValues; } if (searchTerm.length === 0) { renderList(values, searchTerm); } else { const matches = []; for (i = 0; i < values.length; i++) if ( ~values[i].value .toLowerCase() .indexOf(searchTerm.toLowerCase()) ) matches.push(values[i]); renderList(matches, searchTerm); } }, renderItem: customRenderItem, }, }, theme: 'snow' }); } /** * click to open user profile * */ window.addEventListener('mention-clicked', function ({ value }) { if (value?.link) { window.open(value.link, value?.target ?? '_blank'); } }); /** * Step1. select local image * */ function selectLocalImage() { const input = document.createElement('input'); input.setAttribute('type', 'file'); input.click(); // Listen upload local image and save to server input.onchange = () => { const file = input.files[0]; // file type is only image. if (/^image\//.test(file.type)) { saveToServer(file); } else { console.warn('You could only upload images.'); } }; } /** * Step2. save to server * * @param {File} file */ function saveToServer(file) { const fd = new FormData(); fd.append('image', file); $.ajax({ type: 'POST', url: "{{ route('image.store') }}", dataType: "json", headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: fd, contentType: false, processData: false, success: function (response) { insertToEditor(response) }, }); } function insertToEditor(url) { // push image url to rich editor. $.each(quillArray, function (key, quill) { try { let range = quill.getSelection(); quill.insertEmbed(range.index, 'image', url); } catch (err) { } }); } </script> <script> $('body').on('click', '#pause-timer-btn, .pause-active-timer', function () { const id = $(this).data('time-id'); let url = "{{ route('timelogs.pause_timer', ':id') }}"; url = url.replace(':id', id); const token = '{{ csrf_token() }}'; $.easyAjax({ url: url, blockUI: true, type: "POST", disableButton: true, buttonSelector: "#pause-timer-btn", data: { timeId: id, _token: token }, success: function (response) { if (response.status === 'success') { if ($('#myActiveTimer').length > 0) { $(MODAL_XL + ' .modal-content').html(response.html); if ($('#allTasks-table').length) { window.LaravelDataTables["allTasks-table"].draw(false); } } if ($('#allTasks-table').length) { window.LaravelDataTables["allTasks-table"].draw(false); } $('#timer-clock').html(response.clockHtml); } } }) }); $('body').on('click', '#resume-timer-btn, .resume-active-timer', function () { const id = $(this).data('time-id'); let url = "{{ route('timelogs.resume_timer', ':id') }}"; url = url.replace(':id', id); const token = '{{ csrf_token() }}'; $.easyAjax({ url: url, blockUI: true, type: "POST", disableButton: true, buttonSelector: "#resume-timer-btn", data: { timeId: id, _token: token }, success: function (response) { if (response.status === 'success') { if ($('#myActiveTimer').length > 0) { $(MODAL_XL + ' .modal-content').html(response.html); } $('#timer-clock').html(response.clockHtml); if ($('#allTasks-table').length) { window.LaravelDataTables["allTasks-table"].draw(false); } } } }) }); $('body').on('click', '.stop-active-timer', function () { const id = $(this).data('time-id'); let url = "{{ route('timelogs.stop_timer', ':id') }}"; url = url.replace(':id', id); const token = '{{ csrf_token() }}'; $.easyAjax({ url: url, type: "POST", data: { timeId: id, _token: token }, success: function (response) { if ($('#myActiveTimer').length > 0) { $(MODAL_XL + ' .modal-content').html(response.html); } if (response.activeTimerCount > 0) { $('#show-active-timer .active-timer-count').html(response.activeTimerCount); } else { $('#show-active-timer .active-timer-count').addClass('d-none'); } $('#timer-clock').html(''); if ($('#allTasks-table').length) { window.LaravelDataTables["allTasks-table"].draw(false); } } }) }); </script> @if (in_array('messages', user_modules())) <script> function newMessageNotificationPlay() { var audio = new Audio("{{ asset('message-notification.mp3') }}"); audio.play(); } function checkNewMessage() { var url = "{{ route('messages.check_new_message') }}"; var token = "{{ csrf_token() }}"; $.easyAjax({ url: url, type: "POST", data: { '_token': token, }, success: function (response) { if (response.new_message_count > 0) { newMessageNotificationPlay(); Swal.fire({ icon: 'info', text: 'New message received.', toast: true, position: "top-end", timer: 3000, timerProgressBar: true, showConfirmButton: false, customClass: { confirmButton: "btn btn-primary", }, showClass: { popup: "swal2-noanimation", backdrop: "swal2-noanimation", }, }); } } }); } if (message_setting.send_sound_notification == 1 && !(pusher_setting.status === 1 && pusher_setting.messages === 1)) { window.setInterval(function () { checkNewMessage() }, 10000); // Check messages every 10 seconds } </script> @endif </body> </html>