Files
nirvana/assets/js/custom/widgets.js
T
2022-01-10 22:32:53 -08:00

547 lines
18 KiB
JavaScript

"use strict";
// Class definition
var KTWidgets = function () {
// Charts widgets
var initChartsWidget1 = function() {
var element = document.getElementById("kt_charts_widget_1_chart");
var labelColor = KTUtil.getCssVariableValue('--bs-gray-500');
var borderColor = KTUtil.getCssVariableValue('--bs-gray-200');
var baseColor = KTUtil.getCssVariableValue('--bs-primary');
var lightColor = KTUtil.getCssVariableValue('--bs-gray-200');
if (!element) {
return;
}
var height = parseInt(KTUtil.css(element, 'height'));
var options = {
series: [{
name: 'Net Profit',
data: [60, 60, 90, 90, 80, 80, 70, 70]
}],
chart: {
fontFamily: 'inherit',
type: 'area',
height: 350,
toolbar: {
show: false
}
},
plotOptions: {
},
legend: {
show: false
},
dataLabels: {
enabled: false
},
fill: {
type: 'solid',
opacity: 1
},
stroke: {
curve: 'smooth',
show: true,
width: 3,
colors: [baseColor]
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'],
axisBorder: {
show: false,
},
axisTicks: {
show: false
},
labels: {
style: {
colors: labelColor,
fontSize: '12px'
}
},
crosshairs: {
position: 'front',
stroke: {
color: baseColor,
width: 1,
dashArray: 3
}
},
tooltip: {
enabled: true,
formatter: undefined,
offsetY: 0,
style: {
fontSize: '12px'
}
}
},
yaxis: {
labels: {
style: {
colors: labelColor,
fontSize: '12px'
}
}
},
states: {
normal: {
filter: {
type: 'none',
value: 0
}
},
hover: {
filter: {
type: 'none',
value: 0
}
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0
}
}
},
tooltip: {
style: {
fontSize: '12px'
},
y: {
formatter: function (val) {
return "$" + val + " thousands"
}
}
},
colors: [lightColor],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true
}
}
},
markers: {
strokeColor: baseColor,
strokeWidth: 3
}
};
var chart = new ApexCharts(element, options);
chart.render();
}
var initChartsWidget2 = function() {
var charts = document.querySelectorAll('.charts-widget-2-chart');
var color;
var strokeColor;
var height;
var labelColor = KTUtil.getCssVariableValue('--bs-gray-500');
var borderColor = KTUtil.getCssVariableValue('--bs-gray-200');
var options;
var chart;
[].slice.call(charts).map(function(element) {
height = parseInt(KTUtil.css(element, 'height'));
var options = {
series: [{
name: 'Net Profit',
data: [35, 65, 75, 55, 45, 60, 55]
}, {
name: 'Revenue',
data: [40, 70, 80, 60, 50, 65, 60]
}],
chart: {
fontFamily: 'inherit',
type: 'bar',
height: height,
toolbar: {
show: false
},
sparkline: {
enabled: true
},
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: ['30%'],
borderRadius: 4
}
},
legend: {
show: false
},
dataLabels: {
enabled: false
},
stroke: {
show: true,
width: 1,
colors: ['transparent']
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
axisBorder: {
show: false,
},
axisTicks: {
show: false
},
labels: {
style: {
colors: labelColor,
fontSize: '12px'
}
}
},
yaxis: {
min: 0,
max: 100,
labels: {
style: {
colors: labelColor,
fontSize: '12px'
}
}
},
fill: {
type: ['solid', 'solid'],
opacity: [0.25, 1]
},
states: {
normal: {
filter: {
type: 'none',
value: 0
}
},
hover: {
filter: {
type: 'none',
value: 0
}
},
active: {
allowMultipleDataPointsSelection: false,
filter: {
type: 'none',
value: 0
}
}
},
tooltip: {
style: {
fontSize: '12px'
},
y: {
formatter: function (val) {
return "$" + val + " thousands"
}
},
marker: {
show: false
}
},
colors: ['#ffffff', '#ffffff'],
grid: {
borderColor: borderColor,
strokeDashArray: 4,
yaxis: {
lines: {
show: true
}
},
padding: {
left: 20,
right: 20
}
}
};
var chart = new ApexCharts(element, options);
chart.render()
});
}
// Follow button
var initUserFollowButton = function() {
var follow = document.querySelector('#kt_user_follow_button');
if (follow) {
follow.addEventListener('click', function(e){
// Prevent default action
e.preventDefault();
// Show indicator
follow.setAttribute('data-kt-indicator', 'on');
// Disable button to avoid multiple click
follow.disabled = true;
// Check button state
if (follow.classList.contains("btn-success")) {
setTimeout(function() {
follow.removeAttribute('data-kt-indicator');
follow.classList.remove("btn-success");
follow.classList.add("btn-light");
follow.querySelector(".svg-icon").classList.add("d-none");
follow.querySelector(".indicator-label").innerHTML = 'Follow';
follow.disabled = false;
}, 1500);
} else {
setTimeout(function() {
follow.removeAttribute('data-kt-indicator');
follow.classList.add("btn-success");
follow.classList.remove("btn-light");
follow.querySelector(".svg-icon").classList.remove("d-none");
follow.querySelector(".indicator-label").innerHTML = 'Following';
follow.disabled = false;
}, 1000);
}
});
}
}
// Calendar
var initCalendarWidget1 = function() {
if (typeof FullCalendar === 'undefined' || !document.querySelector('#kt_calendar_widget_1')) {
return;
}
var todayDate = moment().startOf('day');
var YM = todayDate.format('YYYY-MM');
var YESTERDAY = todayDate.clone().subtract(1, 'day').format('YYYY-MM-DD');
var TODAY = todayDate.format('YYYY-MM-DD');
var TOMORROW = todayDate.clone().add(1, 'day').format('YYYY-MM-DD');
var calendarEl = document.getElementById('kt_calendar_widget_1');
var calendar = new FullCalendar.Calendar(calendarEl, {
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
},
height: 800,
contentHeight: 780,
aspectRatio: 3, // see: https://fullcalendar.io/docs/aspectRatio
nowIndicator: true,
now: TODAY + 'T09:25:00', // just for demo
views: {
dayGridMonth: { buttonText: 'month' },
timeGridWeek: { buttonText: 'week' },
timeGridDay: { buttonText: 'day' }
},
initialView: 'dayGridMonth',
initialDate: TODAY,
editable: true,
dayMaxEvents: true, // allow "more" link when too many events
navLinks: true,
events: [
{
title: 'All Day Event',
start: YM + '-01',
description: 'Toto lorem ipsum dolor sit incid idunt ut',
className: "fc-event-danger fc-event-solid-warning"
},
{
title: 'Reporting',
start: YM + '-14T13:30:00',
description: 'Lorem ipsum dolor incid idunt ut labore',
end: YM + '-14',
className: "fc-event-success"
},
{
title: 'Company Trip',
start: YM + '-02',
description: 'Lorem ipsum dolor sit tempor incid',
end: YM + '-03',
className: "fc-event-primary"
},
{
title: 'ICT Expo 2017 - Product Release',
start: YM + '-03',
description: 'Lorem ipsum dolor sit tempor inci',
end: YM + '-05',
className: "fc-event-light fc-event-solid-primary"
},
{
title: 'Dinner',
start: YM + '-12',
description: 'Lorem ipsum dolor sit amet, conse ctetur',
end: YM + '-10'
},
{
id: 999,
title: 'Repeating Event',
start: YM + '-09T16:00:00',
description: 'Lorem ipsum dolor sit ncididunt ut labore',
className: "fc-event-danger"
},
{
id: 1000,
title: 'Repeating Event',
description: 'Lorem ipsum dolor sit amet, labore',
start: YM + '-16T16:00:00'
},
{
title: 'Conference',
start: YESTERDAY,
end: TOMORROW,
description: 'Lorem ipsum dolor eius mod tempor labore',
className: "fc-event-primary"
},
{
title: 'Meeting',
start: TODAY + 'T10:30:00',
end: TODAY + 'T12:30:00',
description: 'Lorem ipsum dolor eiu idunt ut labore'
},
{
title: 'Lunch',
start: TODAY + 'T12:00:00',
className: "fc-event-info",
description: 'Lorem ipsum dolor sit amet, ut labore'
},
{
title: 'Meeting',
start: TODAY + 'T14:30:00',
className: "fc-event-warning",
description: 'Lorem ipsum conse ctetur adipi scing'
},
{
title: 'Happy Hour',
start: TODAY + 'T17:30:00',
className: "fc-event-info",
description: 'Lorem ipsum dolor sit amet, conse ctetur'
},
{
title: 'Dinner',
start: TOMORROW + 'T05:00:00',
className: "fc-event-solid-danger fc-event-light",
description: 'Lorem ipsum dolor sit ctetur adipi scing'
},
{
title: 'Birthday Party',
start: TOMORROW + 'T07:00:00',
className: "fc-event-primary",
description: 'Lorem ipsum dolor sit amet, scing'
},
{
title: 'Click for Google',
url: 'http://google.com/',
start: YM + '-28',
className: "fc-event-solid-info fc-event-light",
description: 'Lorem ipsum dolor sit amet, labore'
}
]
});
calendar.render();
}
// Daterangepicker
var initDaterangepicker = function () {
if (!document.querySelector('#kt_dashboard_daterangepicker')) {
return;
}
var picker = $('#kt_dashboard_daterangepicker');
var start = moment();
var end = moment();
function cb(start, end, label) {
var title = '';
var range = '';
if ((end - start) < 100 || label == 'Today') {
title = 'Today:';
range = start.format('MMM D');
} else if (label == 'Yesterday') {
title = 'Yesterday:';
range = start.format('MMM D');
} else {
range = start.format('MMM D') + ' - ' + end.format('MMM D');
}
$('#kt_dashboard_daterangepicker_date').html(range);
$('#kt_dashboard_daterangepicker_title').html(title);
}
picker.daterangepicker({
direction: KTUtil.isRTL(),
startDate: start,
endDate: end,
opens: 'left',
applyClass: 'btn-primary',
cancelClass: 'btn-light-primary',
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
}, cb);
cb(start, end, '');
}
var initDarkModeToggle = function() {
var toggle = document.querySelector('#kt_user_menu_dark_mode_toggle');
if (toggle) {
toggle.addEventListener('click', function() {
window.location.href = this.getAttribute('data-kt-url');
});
}
}
// Public methods
return {
init: function () {
// Daterangepicker
initDaterangepicker();
// Dark Mode
initDarkModeToggle();
// Charts widgets
initChartsWidget1();
initChartsWidget2();
// Follow button
initUserFollowButton();
// Calendar
initCalendarWidget1();
}
}
}();
// Webpack support
if (typeof module !== 'undefined') {
module.exports = KTWidgets;
}
// On document ready
KTUtil.onDOMContentLoaded(function() {
KTWidgets.init();
});