var getUrl = window.location;
var baseHost = getUrl.protocol + "//" + getUrl.host + "/";
var baseUrl = baseHost + getUrl.pathname.split('/')[1];
var prefix_folder_admin = '';
let is_online;
const toastLiveExample = document.getElementById('liveToast')
const toast = new bootstrap.Toast(toastLiveExample)
let deg = 0;
let csrfHash = $("meta[name=X-CSRF-TOKEN]").attr('content');
let prodi_use;
$(document).ready(function () {
$(".pc-hasmenu.active").children().eq(1).attr('style', 'display: block; box-sizing: border-box;');
$(".placeholder").removeClass('placeholder');
$('.horizontal-mainwrapper').show();
var path_current = getUrl.origin + getUrl.pathname;
// console.log(path_current);
$("a[data-url='" + path_current + "']").addClass('active');
// main-parent-menu
$("a[data-url='" + path_current + "']").closest('.main-parent-menu').addClass('collapsed');
// $("select.js-select2").each(function (index, element) {
// $(element).select2({
// theme: 'bootstrap-5',
// placeholder: $(element).data("placeholder"),
// dropdownParent: $($(element).parent()),
// width: '100%',
// allowClear: $(element).data("allowclear")
// });
// if ($(element).data('disable')) {
// $(element).prop('disabled', true)
// }
// });
$('.modal').each(function (index, element) {
$(element).attr('data-keyboard', false).attr('data-backdrop', 'static');
});
$('.trumbowyg-js').each(function () {
$(this).trumbowyg({
autogrow: true,
disabled: $(this).data('trumbowyg-disable') !== undefined ? $(this).data('trumbowyg-disable') : false,
// btns: ['upload'],
// plugins: {
// upload: {
// serverPath: 'https://api.imgur.com/3/image',
// fileFieldName: 'image',
// headers: {
// 'Authorization': 'Client-ID xxxxxxxxxxxx'
// },
// urlPropertyName: 'data.link'
// }
// }
});
});
// $(".datepicer-js").datepicker({
// format: "dd/mm/yyyy",
// autoclose: true,
// orientation: "auto",
// todayHighlight: true
// });
// $(".datepicer-js").attr('readonly', true);
// $(".datepicer-year-js").datepicker({
// format: "yyyy",
// autoclose: true,
// minViewMode: 2,
// maxViewMode: 2,
// todayHighlight: true,
// orientation: "bottom auto"
// });
// $(".datepicer-year-js").attr('readonly', true);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfHash // Mengirim token CSRF dalam header
},
});
$(document).ajaxSuccess(function (event, xhr, settings) {
const responseData = JSON.parse(xhr.responseText);
if (responseData.is_login != undefined && responseData.is_login == false) {
console.log('Unauthorized');
toast.hide()
window.location.reload();
return;
}
});
$(".select-checkbox-all").change(function (e) {
e.preventDefault();
let this_table = $(this).data('table');
if ($(this).prop('checked') === true) {
$('.dt-select-checkbox').prop('checked', true);
$("#" + this_table).DataTable().rows().select();
} else {
$('.dt-select-checkbox').prop('checked', false);
$("#" + this_table).DataTable().rows().deselect();
}
});
});
// Track page impression
trackImpression();
// Track duration
var startTime = Date.now();
window.addEventListener('beforeunload', function () {
var endTime = Date.now();
var duration = Math.round((endTime - startTime) / 1000); // Duration in seconds
navigator.sendBeacon('/track-duration', JSON.stringify({
token: getCookie('visitor_token'),
url: window.location.pathname,
duration: duration
}));
});
// Track button clicks
$('button').on('click', function () {
var buttonId = $(this).attr('id') || 'unknown';
trackButtonClick(buttonId);
});
function getCookie(name) {
let cookieArr = document.cookie.split(";");
for (let i = 0; i < cookieArr.length; i++) {
let cookiePair = cookieArr[i].split("=");
if (name == cookiePair[0].trim()) {
return decodeURIComponent(cookiePair[1]);
}
}
return null;
}
function trackImpression() {
navigator.sendBeacon('/track-impression', JSON.stringify({
token: getCookie('visitor_token'),
url: window.location.pathname
}));
}
function trackButtonClick(buttonId) {
navigator.sendBeacon('/track-button-click', JSON.stringify({
token: getCookie('visitor_token'),
url: window.location.pathname,
button_id: buttonId
}));
}
function get_csrf() {
return $("meta[name=X-CSRF-TOKEN]").attr('content');
}
function update_csrf(newToken) {
$("meta[name=X-CSRF-TOKEN]").attr('content', newToken)
}
function formated_date(date_src) {
if (date_src) {
var date = new Date(date_src);
} else {
var date = new Date();
}
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
return day + '/' + month + '/' + year;
}
function windowResize() {
let window_width = window.innerWidth;
if (window_width <= 756) {
$(".mobile-menu-nav .devider").removeClass('ml-2');
$(".logo-pro .main-logo").removeClass('d-none');
$(".nav-mobile-view .row").removeClass('d-none');
$(".nav-mobile-view").removeClass('d-none');
$("#v-pills-tab").removeClass('position-fixed pr-4');
$("#v-pills-tab").parent().removeClass('border-left order-2').addClass('border-bottom pb-2 order-1');
$("#v-pills-tab").parent().prev().removeClass('order-1').addClass('pt-2 order-2');
} else {
$(".mobile-menu-nav .devider").addClass('ml-2');
$(".logo-pro .main-logo").removeClass('d-none');
$(".nav-mobile-view .row").addClass('d-none');
$(".nav-mobile-view").addClass('d-none');
$("#v-pills-tab").addClass('position-fixed pr-4');
$("#v-pills-tab").parent().removeClass('border-bottom pb-2 order-1').addClass('border-left order-2');
$("#v-pills-tab").parent().prev().removeClass('pt-2 order-2').addClass('order-1');
}
}
$(window).resize(function (e) {
windowResize();
});
function showGlobalLoading(element = 'global-loading') {
$('body').css({
'overflow': 'hidden'
});
$(`#${element}`).removeClass('d-none');
}
function hideGlobalLoading(element = 'global-loading') {
$('body').css({
'overflow': 'auto'
});
$(`#${element}`).addClass('d-none');
}
function showLoading(parent_elem = '#spinner', target_element = 'btn_save') {
$(`${parent_elem}`).addClass('show');
}
function hideLoading(parent_elem = '#spinner', target_element = 'btn_save') {
$(`${parent_elem}`).removeClass('show');
}
function alert_success(msg) {
Swal.fire({
icon: 'success',
title: msg,
showConfirmButton: false,
timer: 1500
});
}
function alert_error(msg) {
Swal.fire({
icon: 'error',
title: msg,
showConfirmButton: false,
timer: 1500
});
}
function notif_success(message) {
$("#liveToast").removeClass('bg-danger').addClass('bg-success');
$(".toast-header .me-auto").html(message);
toast.show()
}
function notif_error(message) {
$("#liveToast").removeClass('bg-success').addClass('bg-danger');
$(".toast-header .me-auto").html(message);
toast.show()
}
function remove_invalid() {
$('.invalid-feedback').empty();
$('.invalid-feedback').removeClass('d-block');
$('input').removeClass('is-invalid');
$('select').removeClass('is-invalid');
$('textarea').removeClass('is-invalid');
}
function empty_input() {
remove_invalid();
$('.form-group > input').removeClass('is-invalid');
$('.form-group > select').removeClass('is-invalid');
$('.form-group > textarea').removeClass('is-invalid');
let form_element = $('form');
form_element.find('select').val('').trigger('change');
form_element.find('input').val('');
form_element.find('textarea').text('');
form_element.find('textarea').val('');
if (form_element.find('.trumbowyg-js')) {
$('.trumbowyg-js').each(function () {
$(this).trumbowyg('html', '');
});
}
if (form_element.find('[type=file]')) {
$.each(form_element.find('[type=file]'), function (indexInArray, valueOfElement) {
let this_target = $(valueOfElement).data('target');
let target_show = this_target;
if (this_target) {
if (!this_target.includes('#') && !this_target.includes('.')) {
target_show = '#' + this_target;
if ($(target_show).length == 0) {
target_show = '.' + this_target;
}
}
if ($(target_show).length > 0) {
$(target_show).empty();
}
}
});
}
}
/**
*
* @param {object} data
*/
function input_error(data) {
for (var i = 0; i < data.inputerror.length; i++) {
let split_inputerror = data.inputerror[i].split('.');
if ($('[name="' + data.inputerror[i] + '"]').parent().hasClass('input-group')) {
$('[name="' + data.inputerror[i] + '"]').addClass('is-invalid').parent().find('.invalid-feedback').addClass('d-block').text(data.error_string[i]);
} else if ($('[name="' + data.inputerror[i] + '"]').hasClass('trumbowyg-js')) {
$('[name="' + data.inputerror[i] + '"]').parent().parent().find('.invalid-feedback').addClass('d-block').text(data.error_string[i]);
} else {
let selector = $('[name="' + data.inputerror[i] + '"]');
if (split_inputerror.length > 1) {
selector = $('[name="' + split_inputerror[0] + '[]"]').eq(parseInt(split_inputerror[1]));
}
selector.addClass('is-invalid');
selector.siblings(':last').text(data.error_string[i]);
selector.siblings(':last').addClass('d-block');
}
}
}
function isGuest() {
if (localStorage.getItem('guest') == 'true') {
$("#modalGuest").modal('show');
return true;
}
return false;
}
let modalHandler = function (e) {
if (isGuest()) {
e.preventDefault();
return;
};
};
$(document).on('show.bs.modal', '#modal_form', modalHandler);
$(document).on('hidden.bs.modal', '#modalGuest', function () {
$(document).off('show.bs.modal', '#modal_form', modalHandler);
$(document).on('show.bs.modal', '#modal_form', modalHandler);
});
$(document).on('click', '.btn-sign-guest', function () {
let username = $("#username").val();
let password = $("#password").val();
$('.text-message').html('');
$.ajax({
url: baseUrl + '/' + prefix_folder_admin + '/login/do_login',
type: "POST",
data: {
username: username,
password: password,
},
dataType: "JSON",
success: function (data) {
if (data.status) {
window.location.reload();
} else {
console.log(data.inputerror);
if (data.error_login != '') {
$('.text-message').html(data.error_login);
}
var label = '';
for (var i = 0; i < data.inputerror.length; i++) {
$('[name="' + data.inputerror[i] + '"]').parent().addClass('is-invalid');
$('[name="' + data.inputerror[i] + '"]').next().next().text(data.error_string[i]);
}
}
},
error: function (jqXHR, textStatus, errorThrown) {
$('.btn_save_group').button('reset');
}
});//end ajax
});
$(document).on("click", ".show_password", function () {
$(this).addClass('hide_password').removeClass('show_password').parent().children().eq(1).children().removeClass("bx bx-bullseye").addClass("bx bxs-low-vision");
$(this).parent().children().eq(0).attr('type', 'text');
});
$(document).on("click", ".hide_password", function () {
$(this).addClass('show_password').removeClass('hide_password').parent().children().eq(1).children().removeClass("bx bxs-low-vision").addClass("bx bx-show-alt");
$(this).parent().children().eq(0).attr('type', 'password');
});
$(document).on('click', '.btn_custom_minus', function () {
selector_val = $(this).closest('.group-plus-minus').find('.value');
if (parseInt(selector_val.val()) > 1) {
value_int = parseInt(selector_val.val()) - 1;
selector_val.val(value_int);
}
});
$(document).on('click', '.btn_custom_plus', function () {
selector_val = $(this).closest('.group-plus-minus').find('.value');
value_int = parseInt(selector_val.val()) + 1;
// console.log(value_int);
selector_val.val(value_int);
});
if ($('.ckeditor_form').length) {
$('.ckeditor_form').ckeditor({
filebrowserBrowseUrl: '' //url
});
}
//=========================================== module function ====================================================
function show_image(inputFile, target_display) {
const fileReader = new FileReader();
fileReader.onload = function (event) {
$(target_display).attr('src', event.target.result);
};
fileReader.onerror = function (error) {
console.error('Terjadi kesalahan:', error);
};
fileReader.readAsDataURL(inputFile);
}
function show_count_confirm() {
$.ajax({
url: baseUrl + '/admin/booking/count_booking_confirm?token=' + _token_user,
type: "POST",
dataType: "JSON",
success: function (data) {
// $('.count_confirm_booking').css('position', 'relative');
if (data.count > 0) {
$('.count_confirm_booking > a').prepend(`
` + data.count + `
`);
}
},
error: function (jqXHR, textStatus, errorThrown) {
hideLoading();
}
}); //end ajax
$.ajax({
url: baseUrl + '/admin/transaction/count_transaction?token=' + _token_user,
type: "POST",
dataType: "JSON",
success: function (data) {
if (data.status) {
if (data.count_proceed_voyage > 0) {
$('.count_transaction_voyage > a').prepend(`
` + data.count_proceed_voyage + `
`);
}
if (data.count_return_countainer > 0) {
$('.count_return_countainer > a').prepend(`
` + data.count_return_countainer + `
`);
}
if (data.count_unloading_countainer > 0) {
$('.count_unloading_countainer > a').prepend(`
` + data.count_unloading_countainer + `
`);
}
}
},
error: function (jqXHR, textStatus, errorThrown) {
hideLoading();
}
}); //end ajax
}
/* Fungsi formatRupiah */
function formatRupiah(angka) {
var reverse = angka.toString().split('').reverse().join(''),
ribuan = reverse.match(/\d{1,3}/g);
ribuan = ribuan.join('.').split('').reverse().join('');
return 'Rp. ' + ribuan;
}
/* Fungsi formatNumber */
function formatNumber(angka) {
var reverse = angka.toString().split('').reverse().join(''),
ribuan = reverse.match(/\d{1,3}/g);
ribuan = ribuan.join('.').split('').reverse().join('');
return ribuan;
}
function formatDateIndo(date) {
var dateObj = new Date(date);
var day = dateObj.getDate();
var month = dateObj.getMonth() + 1;
var year = dateObj.getFullYear();
var formattedDate = day + '-' + month + '-' + year;
return formattedDate;
}
function formatDateIso(date) {
if (date == null || date == "" || date == undefined) {
return "";
}
var dateParts = date.split('-');
var day = dateParts[0];
var month = dateParts[1];
var year = dateParts[2];
var formattedDate = year + '-' + month + '-' + day;
return formattedDate;
}
var data_search_select2_default = {
data: function (params) {
var query = {
search: params.term,
}
return query;
},
}
function select2_define(selector, url, custom_search_properties = data_search_select2_default, option_clear = false, dropdown_parent = $(selector).parent().parent()) {
var ajax_settings = {
url: url_controller + url + "/?token=" + _token_user,
dataType: 'json',
delay: 300,
processResults: function (data) {
return {
results: data.map(function (item) {
return {
id: item.code,
text: item.content,
}
})
}
}
}
$(selector).select2({
dropdownParent: dropdown_parent,
// dropdownAutoWidth: true,
allowClear: option_clear,
ajax: {
...ajax_settings,
...custom_search_properties
}
})
$(`span.select2.select2-container`).css("width", "unset");
}
function flatpicker_define(selector, add_on_proporties = {}, is_custom_properties = 0) {
var default_config = {
dateFormat: "d-m-Y",
};
if (is_custom_properties == 0) {
var new_config = {
...default_config,
...add_on_proporties
}
} else {
var new_config = add_on_proporties;
}
var flatpickr_var = $(selector).flatpickr(new_config);
return flatpickr_var;
}
function ckeditor_define(id, placeholder = 'Isikan detail') {
let editor;
CKEDITOR.ClassicEditor.create(document.getElementById(id), {
// https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html#extended-toolbar-configuration-format
toolbar: {
items: [
'findAndReplace', 'selectAll', '|',
'heading', '|',
'bold', 'italic', 'strikethrough', 'underline', 'code', 'subscript', 'superscript', 'removeFormat', '|',
'bulletedList', 'numberedList', 'todoList', '|',
'outdent', 'indent', '|',
'undo', 'redo',
'-',
'fontSize', 'fontFamily', 'fontColor', 'fontBackgroundColor', 'highlight', '|',
'alignment', '|', 'uploadImage', '|', 'blockQuote', 'insertTable', '|',
'specialCharacters', 'horizontalLine', 'pageBreak', '|',
],
shouldNotGroupWhenFull: true
},
// Changing the language of the interface requires loading the language file using the