//--- Utility Script
//--- (C) Digital Scorpions, India
//--- http://www.digitalscorpions.in
//--- support@digitalscorpions.in
function isJson(str) {
try {
JSON.parse(str);
return true;
} catch (e) {
return false;
}
}
function dateDiff(sDt, eDt, sorceFmt, returnType = 'd'){
//--- Note: Infomplete! Need modification for time part.
//--- Currently working with d, m, y only
if(sorceFmt != 'mdy'){
sDt = ChangeDateFormat(sDt, sorceFmt, 'mdy');
eDt = ChangeDateFormat(eDt, sorceFmt, 'mdy');
}
milisec = ((new Date(eDt)).getTime() - (new Date(sDt)).getTime());
switch(returnType){
case 's':
return milisec/1000;
break;
case 'i':
return milisec/1000/60;
break;
case 'h':
return milisec/1000/60/60;
break;
case 'd':
return milisec/1000/60/60/24;
break;
case 'm':
return (((eDt.getFullYear() - sDt.getFullYear()) * 12) - sDt.getMonth() + eDt.getMonth());
break;
case 'y':
return (eDt.getFullYear() - sDt.getFullYear());
break;
}
}
function showLoading() {
$('.loadAnim').remove();
let bgDiv = $('
')
.addClass('loadAnim no-select d-flex justify-content-center align-item-center')
.css({ 'width': '100%',
'height': '100%',
'background-color': 'rgba(0,0,0,0.5)',
'position': 'absolute',
'top': '0px',
'left': '0px',
'display': 'none'});
let fr1 = $('
')
.css({ 'color': 'rgba(0,0,0,0.5)',
'position': 'absolute',
'top': '45vh',
'left': '45vw',
'font-size': '10vw',
'animation': 'lr 1s ease-in-out infinite'
})
.html('
');
let fr2 = $('
')
.css({ 'color': 'rgba(222,193,2,0.8)',
'position': 'absolute',
'top': '45vh',
'left': '45vw',
'font-size': '10vw',
'animation': 'rl 1s ease-in-out infinite'
})
.html('
');
bgDiv.append(fr1).append(fr2);
$('body').append(bgDiv);
$('.loadAnim').fadeIn();
}
function hideLoading(){
$('.loadAnim').remove();
}
//--- Utility for showing messages
function showMessage(mIcon = 'info', mMessage){
mParentTag = "ds_system_message";
mClass = "ds-msgbox col-12 col-md-6 col-lg-4 ml-auto rounded p-1 mb-1 bg-";
switch(mIcon) {
case "success":
mClass += "success text-white";
break;
case "error":
mClass += "danger text-white";
break;
case "warning":
mClass += "warning text-dark";
break;
default:
mClass += "info text-white";
break;
}
$("#" + mParentTag).append($("
").addClass(mClass).html("
").delay(5000).hide("slow", "swing", function() {
$(this).remove();
}));
$("#" + mParentTag + " td:last").append($("
").prop("href", "#").html("").on("click", function (e) {
e.preventDefault();
$(this).closest('.ds-msgbox').remove();
}));
}
//--- Utility for opening page in modal dialog box
function saveDialogLocation(obj){
obj.prop('original-top', obj.parent().position().top + 1);
obj.prop('original-left', obj.parent().position().left + 1);
obj.prop('original-height', obj.parent().outerHeight());
obj.prop('original-width', obj.parent().outerWidth() - 7);
}
function resetDialogs(){
$(".ds-dialog.ds-maximized").dialog({
resizable: false,
draggable: false,
width: $('#divMain').width() - 15,
height: $('#divMain').height(),
position: {
my: 'left top',
at: 'left top',
of: $('#divMain')
}
})
.parent()
.draggable({ containment: '#divMain'});
let offsetL = 0, offsetB = 10, totalW = $("#divMain").width();
$(".ds-dialog.ds-minimized").each(function(){
$(this).dialog({
resizable: false,
draggable: false,
height: 40,
minWidth: minWinW - winGap,
width: minWinW - winGap,
position: {
my: 'left bottom',
at: 'left+' + offsetL + ' bottom-' + offsetB,
of: $('#divMain')
}
});
if((offsetL + (minWinW*2)) <= totalW){
offsetL += minWinW;
} else {
offsetL = 0;
offsetB += 50;
}
});
$("#lst").addClass('d-none').removeClass('position-fixed');
}
function showDialog(mTitle, mAction, mTarget = 'dialog' + Date.now()){
mThisWin = $('#' + mTarget);
if(mThisWin.length > 0){
if(mThisWin.hasClass('ds-minimized')){
mThisWin.closest('.ui-dialog').find('button.ui-dialog-titlebar-close:eq(1)').trigger('click');
}
mThisWin.dialog( "moveToTop" );
return false;
}
tArr = mAction.split('|');
mAction = tArr[0];
//--- Check if Called From Sub Window
if($('#divMain').length){
dMain = $('#divMain');
dDown = $('#lstOpenWindow');
} else {
dMain = window.parent.$('#divMain');
dDown = window.parent.$('#lstOpenWindow');
}
diagW = dMain.width() * tArr[1] / 100;
diagH = dMain.height() * tArr[2] / 100;
diagPosition = 'center';
if(screen.width < 900){
diagW = dMain.width() - 15;
diagH = dMain.height();
diagPosition = 'left top';
}
opt = new Option(mTitle, mTarget);
dDown.append(opt).selectpicker('refresh')
.val(mTarget).selectpicker('refresh')
.closest('.form-group').slideDown('slow');
let t = "
";
let w = "";
dMain.append(w);
dMain.find('#' + mTarget).dialog({
appendTo: '#divMain',
title : t + " " + mTitle,
modal: false,
resizable: true,
draggable: true,
autoOpen: false,
closeOnEscape: true,
width: diagW,
minWidth: minWinW - winGap,
height: diagH,
minHeight: 40,
position: {
my: diagPosition,
at: diagPosition,
of: dMain
},
show: { effect: "blind", duration: 500 },
hide: { effect: "blind", duration: 500 },
create: function(){
//--- Add Maximize / Restore Button
btn = $(this).parent().find("button:first").clone();
btn.addClass('p-0').css('margin-right', '25px').attr('title', 'Reshape').find('.ui-icon-closethick').removeClass('ui-icon-closethick').addClass('ui-icon-newwin');
btn.html(btn.html().replace("Close", "Reshape"));
//--- Maximise / Restore Dialogue
btn.click(function(){
obj = $(this).parent().next('.ds-dialog');
$(this).siblings(':hidden').show();
if(obj.hasClass("ds-minimized"))
obj.toggleClass('ds-minimized');
else
obj.toggleClass('ds-maximized');
if(obj.hasClass("ds-maximized")){
saveDialogLocation(obj);
saveDialogLocation(obj);
resetDialogs();
} else {
obj.dialog({
resizable: true,
draggable: true,
height: obj.prop('original-height'),
width: obj.prop('original-width'),
position: {
my: 'left top',
at: 'left+' + obj.prop('original-left') + ' top+' + obj.prop('original-top'),
of: dMain
}
})
.parent()
.draggable({ containment: '#divMain'});
}
});
$(this).parent().find(".ui-dialog-titlebar").append(btn);
//--- Add Minimize Button in Large Screen
btn = $(this).parent().find("button:first").clone();
btn.addClass('p-0').css('margin-right', '50px').attr('title', 'Minimize').find('.ui-icon-closethick').removeClass('ui-icon-closethick').addClass('ui-icon-caret-1-s');
btn.html(btn.html().replace("Close", "Minimize"));;
//--- minimize Dialogue
btn.click(function(){
obj = $(this).parent().next('.ds-dialog');
obj.addClass('ds-minimized');
if(obj.hasClass("ds-maximized"))
obj.removeClass("ds-maximized");
else
saveDialogLocation(obj);
$(this).hide();
resetDialogs();
});
$(this).parent().find(".ui-dialog-titlebar").append(btn);
$(this).parent().find(".ui-dialog-titlebar").dblclick(function(){ $(this).find('button .ui-icon-newwin').trigger('click'); });
},
focus: function() {
dDown.val($(this).prop('id')).selectpicker('refresh');
},
close: function () {
dDown.find("option[value='" + $(this).prop('id') + "']").remove()
dDown.selectpicker('refresh');
if(dDown.find("option").length <= 0)
dDown.closest('.form-group').slideUp('slow');
else
$('#' + dDown.val()).dialog( "moveToTop" );
dMain.find('#' + $(this).prop('id')).dialog('destroy').remove();
}
})
.parent()
.draggable({ containment: '#divMain'})
.end()
.dialog('open')
.find('iframe').attr('src', mAction);
}
function InitDialog(){
$('.ds-dialog').dialog('destroy').remove();
$('#lstOpenWindow option').remove();
$('#lstOpenWindow').closest('.form-group').slideUp('slow');
}
function distributeData(mTarget, result = '', mHide = '', mDtls = false) {
if(!mDtls){
//--- Initialize form
mTarget.find('.form-group .validate').hide('blind');
mTarget.find('.form-group :input:not(#submit-mode, [data-toggle=toggle])').val('');
mTarget.find('.form-group :input:not(#submit-mode, [data-toggle=toggle])').val('');
mTarget.find('.form-group select').selectpicker('refresh');
mTarget.find('.border-error').removeClass('border-error');
mTarget.find('.form-group input[data-toggle=toggle]').prop('checked', false).change();
if(mHide !== '')
$('#P' + mHide + ' option').show();
if(result == '')
return true;
//--- Populate form
var res = $.parseJSON(result);
mTarget.find(':input').each(function() {
if(typeof $(this).attr('id') !== 'undefined' && typeof res[0][$(this).attr('id')] !== 'undefined') {
if(!isJson(res[0][$(this).attr('id')])){
if($(this).attr('data-toggle') == 'toggle'){
$(this).prop('checked', ($(this).data('on-value') == res[0][$(this).attr('id')]) ? true : false).change();
} else {
if($(this).attr('type') !== 'password')
$(this).val(res[0][$(this).attr('id')]);
}
if($(this).attr('onchange')){
$(this).trigger('change');
}
} else {
//--- Load Detail Parts
distributeData($("#" + $(this).attr('id')), res[0][$(this).attr('id')], '', true);
}
}
if($(this).attr('id') == 'P' + mHide)
$(this).find('option[value="' + $('#' + mHide).val() + '"]').hide();
$(this).hasClass('selectpicker') && $(this).selectpicker('refresh');
});
} else {
initTable('#' + mTarget.prop('id') + "-Table");
var res = $.parseJSON(result);
alert("In Dtl Part - " + result + " :: " + res.length);
for(let i = 0; i < res.length; i++){
if(i > 0)
addRow("#" + mTarget.prop('id') + "-Table");
mTargetS = $('#' + mTarget.prop('id') + "-Table tr:last");
alert('Populate Rec. : ' + i);
mTargetS.find(':input').each(function() {
if(typeof $(this).attr('id') !== 'undefined' && typeof res[0][$(this).attr('id')] !== 'undefined') {
if(!isJson(res[0][$(this).attr('id')])){
if($(this).attr('data-toggle') == 'toggle'){
$(this).prop('checked', ($(this).data('on-value') == res[0][$(this).attr('id')]) ? true : false).change();
} else {
if(isDate(res[0][$(this).attr('id')]))
res[0][$(this).attr('id')] = ChangeDateFormat(res[0][$(this).attr('id')], "ymd", "dmy");
if($(this).attr('type') !== 'password')
$(this).val(res[0][$(this).attr('id')]);
}
} else {
//--- Load Detail Parts
distributeData($("#" + $(this).attr('id')), res[0][$(this).attr('id')], '', true);
}
}
if($(this).attr('id') == 'P' + mHide)
$(this).find('option[value="' + $('#' + mHide).val() + '"]').hide();
$(this).hasClass('selectpicker') && $(this).selectpicker('refresh');
});
}
}
}
//--- Utility for loading form in Div on click on list
function loadForm(mTitle, mAction, mTarget, mHide = ''){
mTitle = ((mTitle=='New Record') ? 'Add : ' : 'Edit : ') + mTitle;
mTarget.find('#secTitle').html("" + mTitle);
//--- Make the form Empty
distributeData(mTarget.find('#secBody'));
const a = mAction.split('?');
$.ajax({
type: 'POST',
url: a[0],
data: "submit-mode=LOAD_DATA&" + a[1],
success: function(result) {
mTarget.find('#secTitle').html(mTitle);
if(result.indexOf('||') >=0){
var res = result.split('||');
showMessage(res[0], res[1]);
} else {
//alert(result);
distributeData(mTarget.find('#secBody'), result, mHide);
}
//mTarget.find('#secTitle')
}
});
}
//--- Convert Dialog Title to HTML
$.widget("ui.dialog", $.extend({}, $.ui.dialog.prototype, {
_title: function(title) {
title.html(this.options.title);
}
}));
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, "");
};
String.prototype.replaceAll = function(stringToFind,stringToReplace){
var temp = this;
mHoldString = stringToReplace;
stringToReplace = "<£Ü>";
var index = temp.indexOf(stringToFind);
while(index != -1){
temp = temp.replace(stringToFind,stringToReplace);
index = temp.indexOf(stringToFind);
}
stringToFind = "<£Ü>";
stringToReplace = mHoldString;
var index = temp.indexOf(stringToFind);
while(index != -1){
temp = temp.replace(stringToFind,stringToReplace);
index = temp.indexOf(stringToFind);
}
return temp;
}
String.prototype.toCapitalize = function(force = false){
if(this.trim() !== ''){
force && this.toLowerCase();
words = this.split(' ');
for(i = 0; i < words.length; i++)
words[i] = words[i][0].toUpperCase() + words[i].substr(1);
return words.join(' ');
}
return this;
}
function formatUnixTimestamp(unixTimestamp) {
var date = new Date(unixTimestamp * 1000); // Convert to milliseconds
var day = ('0' + date.getDate()).slice(-2); // Add leading zero
var month = ('0' + (date.getMonth() + 1)).slice(-2); // Months are zero-based
var year = date.getFullYear();
var hours = ('0' + date.getHours()).slice(-2);
var minutes = ('0' + date.getMinutes()).slice(-2);
return `${day}/${month}/${year} ${hours}:${minutes}`;
}
function isDate(dateString) {
var regEx = /^\d{4}-\d{2}-\d{2}$/;
return dateString.match(regEx) != null;
}
function ChangeDateFormat(Dt, Fmt, RetFmt) {
switch(Fmt) {
case "dmy":
y=6; m=3; d=0; b1=2; b2=5;
break;
case "mdy":
y=6; m=0; d=3; b1=2; b2=5;
break;
case "myd":
y=3; m=0; d=8; b1=2; b2=7;
break;
case "dym":
y=3; m=8; d=0; b1=2; b2=7;
break;
case "ydm":
y=0; m=8; d=5; b1=4; b2=7;
break;
default:
//"ymd":
y=0; m=5; d=8; b1=4; b2=7;
break;
}
mRet = "";
switch(RetFmt) {
case "ymd":
mRet = Dt.substr(y,4) + '/' + Dt.substr(m,2) + '/' + Dt.substr(d,2);
break;
case "mdy":
mRet = Dt.substr(m,2) + '/' + Dt.substr(d,2) + '/' + Dt.substr(y,4);
break;
case "myd":
mRet = Dt.substr(m,2) + '/' + Dt.substr(y,4) + '/' + Dt.substr(d,2);
break;
case "dym":
mRet = Dt.substr(d,2) + '/' + Dt.substr(y,4) + '/' + Dt.substr(m,2);
break;
case "ydm":
mRet = Dt.substr(y,4) + '/' + Dt.substr(d,2) + '/' + Dt.substr(m,2);
break;
default:
//"dmy":
mRet = Dt.substr(d,2) + '/' + Dt.substr(m,2) + '/' + Dt.substr(y,4);
break;
}
return mRet;
}
//----------
function isTime(Tm, Fmt){
if(!Fmt){Fmt="hms";}
h=0; m=3; s=6; b1=2; b2=5; b3=8; ap=9;
if(isNaN(Tm.substr(h,2)-0)||(Tm.substr(h,2)-0<0) || (Tm.substr(h,2)-0>12))
return false;
if(Tm.substr(b1,1)!=":")
return false;
if(isNaN(Tm.substr(m,2)-0)||(Tm.substr(m,2)-0<0) || (Tm.substr(m,2)-0>59))
return false;
if(Tm.substr(b2,1)!=":")
return false;
if(isNaN(Tm.substr(s,2)-0)||(Tm.substr(s,2)-0<0) || (Tm.substr(s,2)-0>59))
return false;
if(Tm.substr(b3,1)!=" ")
return false;
if(Tm.substr(ap,2).toUpperCase()!="AM" && Tm.substr(ap,2).toUpperCase()!="PM")
return false;
return true;
}
//..............
function isEmail(Ml){
if(!Ml){return true}
if(Ml.indexOf("@")<=0 || Ml.indexOf("@")==Ml.length-1 || Ml.indexOf(".")<=0 || Ml.indexOf(".")==Ml.length-1 || Ml.indexOf("..")!=-1 || Ml.indexOf("@@")!=-1 || Ml.indexOf("{")!=-1 || Ml.indexOf("}")!=-1 || Ml.indexOf("(")!=-1 || Ml.indexOf(")")!=-1 || Ml.indexOf("[")!=-1 || Ml.indexOf("]")!=-1 || Ml.indexOf("@.")!=-1 || Ml.indexOf(".@")!=-1)
return false;
else
return true;
}
//..............
function isInt(theNum)
{
if(Trim(theNum) == "")
return true;
else if(theNum.indexOf(".") != -1)
return false;
else if(!isNaN(theNum))
return true;
}
function isDecimal(str)
{
mystring = str;
if (mystring.match(/^\d+\.\d/ ))
return true;
else if(isInt(mystring))
return true;
else
return false;
}
function Trim(s){return LTrim(RTrim(' '+s));}
//..............
function LTrim (s){
if(!s){return '';}
while(s.charAt(0)==' ')
s = s.substring(1,s.length);
return s;
}
//..............
function RTrim (s){
if(!s || s==' '){return '';}
if (s.length > 1){
while(s.charAt(s.length-1)==' ')
s = s.substring(0,s.length-2);
return s;
}
}
function setNumRange(t) {
if(!t.value)
return
if(t.value - 0 < t.min - 0){
showMessage('error', 'Invalid out of range value.');
t.value = t.min;
}
if(t.value - 0 > t.max - 0){
showMessage('error', 'Invalid out of range value.');
t.value = t.max;
}
}
function addRow(mTable) {
m = $(mTable).find("tr:last").clone();
m.find(":input[type!='checkbox']").val('');
m.find(".border-error").removeClass('border-error');
m.find("[actual-type='toggle']").next().remove().end().unwrap().bootstrapToggle();
m.find(".selectpicker").next().remove().end().next().remove().end().unwrap().selectpicker();
$(mTable).append(m);
$(mTable).trigger('change');
}
//..............
function initTable(mTable){
do {
delRow(mTable, $(mTable + " td:last"));
} while($(mTable).find("tr").size() > 2);
}
function delRow(mTable, t) {
if($(mTable).find("tr").size() > 2)
t.closest('tr').remove();
else if($(mTable).find("tr").size() > 1){
t.closest('tr').find('input[type!=button]').val('');
t.closest('tr').find(".border-error").removeClass('border-error');
}
$(mTable).trigger('change');
}
var isSupported = function (t) {
var input = document.createElement('input');
var v = 'a';
input.setAttribute('type', t);
input.setAttribute('value', v);
return (input.value !== v);
};
$(function (){
if(!isSupported('date')){
$(document).on('focus', '[type=date]', (e) => {
$(e.target).datepicker( "destroy" ).datepicker({
constrainInput: true,
dateFormat: 'yy-mm-dd',
changeMonth: true,
changeYear: true,
minDate: $(e.target).attr('min'),
maxDate: $(e.target).attr('max')
}).datepicker("show");
});
}
if(!isSupported('month')){
$(document).on('focus', '[type=month]', (e) => {
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = today.getFullYear();
if(!$(e.target).val())
$(e.target).val(yyyy + '-' + mm);
if(!$(e.target).attr('min'))
$(e.target).val($(e.target).sttr('min').substring(0,7));
$(e.target).datepicker( "destroy" ).datepicker({
defaultDate : new Date($(e.target).val() + "-15"),
constrainInput: true,
dateFormat: "yy-mm",
changeMonth: true,
changeYear: true,
showButtonPanel: true,
onClose: function() {
var iMonth = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
var iYear = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
$(this).datepicker('setDate', new Date(iYear, iMonth, 1));
}
}).datepicker("show");
$("#ui-datepicker-div table.ui-datepicker-calendar").css('display', 'none');
});
}
});
// Initialize and add Google Map
function loadURL(mId, mURL) {
mlat = 22.51155;
mlng = 88.36536;
mId.html('');
}
function openFullscreen(elem) {
if (elem.requestFullscreen) {
elem.requestFullscreen();
} else if (elem.webkitRequestFullscreen) { /* Safari */
elem.webkitRequestFullscreen();
} else if (elem.msRequestFullscreen) { /* IE11 */
elem.msRequestFullscreen();
}
}
//--- Table to JSON
function TableToJSON(oTbl) {
mData = "";
oTbl.find('tbody tr').each(function(){
mData1 = "";
$(this).find('td input, td select').each(function(){
if(mData1 != "") {mData1 += ", ";}
if($(this).attr("actual-type") == "toggle"){
mData1 += '"' + $(this).attr('id') + '" : "' + ( $(this).prop('checked')==true ? $(this).attr('data-on-value') : $(this).attr('data-off-value') ) + '"';
} else
mData1 += '"' + $(this).attr('id') + '" : "' + $(this).val() + '"';
});
if(mData1 != ""){
if(mData != "") {mData += ", ";}
mData += "{" + mData1 + "}";
}
});
if(mData != "") {mData = "[" + mData + "]";}
return mData;
}
//---------------------
//JSON To Table
function JSONToTable(r, cls = ""){
let res = $.parseJSON(r);
let thead = "";
let tbody = "
";
let align = "";
for(let j2t_i=0; j2t_i < res.length; j2t_i++){
tbody += "";
for (let j2t_x in res[j2t_i]) {
var j2tHd = j2t_x.split('_');
if(parseInt(j2tHd[1]) !== 0)
mStyle = "width: " + j2tHd[1] + "%;";
else
mStyle = "display: none;";
align = "";
if(j2tHd[2] == 'BTN')
align = "text-center";
if(!isNaN(res[j2t_i][j2t_x]))
align = "text-right";
if(j2t_i == 0){
thead += "" + j2tHd[0] + " | ";
}
if(isDate(res[j2t_i][j2t_x]))
res[j2t_i][j2t_x] = ChangeDateFormat(res[j2t_i][j2t_x], 'ymd', 'dmy');
tbody += "" + res[j2t_i][j2t_x] + " | ";
}
tbody += "
";
}
thead += "";
tbody += "";
return "";
}
function FormToJSON(form) {
var array = form.serializeArray();
var json = {};
$.each(array, function() {
json[this.name] = this.value || '';
});
return JSON.stringify(json);
}
function getRandom(len = 6){
let enc = window.btoa($.now()).replaceAll("=", "").replaceAll("O", "0").toUpperCase();
return enc.substr(enc.length - len);
}
function getQueryString(formID, fldList){
var fieldArray = fldList.split(',');
var queryString = "";
fieldArray.forEach(function(field) {
queryString += $("#" + formID).find(":input[name='" + field.trim() + "']").serialize() + "&";
});
// Remove the trailing ampersand
queryString = queryString.slice(0, -1);
return queryString
}