Skip to content

Instantly share code, notes, and snippets.

@hendrasyp
Created Jan 22, 2022
Embed
What would you like to do?
JSCore By KiNET - Suhendra Yohana Putra
// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.
// Write your JavaScript code.
/* CONSTANTS, GLOBAL VARIABLES */
let isSuperAdmin;
let max_char_in_byte = 3915;
let notyErr = 'error';
let notyOK = 'success';
let notyWarn = 'warning';
let notyInfo = 'info';
let blankString = '';
let NOTIFICATION_TIMEOUT = 3000;
let DEFAULT_NOTIFICATION_TIMEOUT = 5000;
let SUCCESS_NOTIFICATION_TIMEOUT = 5000;
let ERROR_NOTIFICATION_TIMEOUT = 3000;
var tbl;
let tblData;
var tblSelectedRow;
var tblRowData;
var tblRowIndex;
var dtTableExportButtons = [];
const contentWrapper = '#content-wrapper';
const RELOAD_NO_REPOST = 'reloadNoRefresh';
const RELOAD_REPOST = 'reload';
const BLANK_STRING = '';
const BREAK_LINE = '<br/>';
const EMPTY_STRING = '';
const FREE_OBJECT = {};
const NULL_OBJECT = {};
const MSG_SUCCESS = 'success';
const MSG_ERROR = 'error';
const MSG_ERROR_MAX = 'error_max';
const MSG_WARNING = 'warning';
const MSG_INFO = 'info';
const BUTTON_YES = 'Yes';
const BUTTON_NO = 'No';
const BUTTON_CANCEL = 'Cancel';
const MODAL_WIDTH_FULL = -1; // 100%
const MODAL_WIDTH_1366 = 1366;
const MODAL_WIDTH_1024 = 1024;
const MODAL_WIDTH_800 = 800;
const MODAL_WIDTH_600 = 600;
const MODAL_WIDTH_400 = 400;
const EVENT_CLICK = 'click';
const EVENT_SUBMIT = 'submit';
const EVENT_CHANGE = 'change';
const LINK_SEPARATOR = ' | ';
const DTPICKER_DEFAULT_OPT = {
autoclose: true,
format: 'dd/mm/yyyy',
todayBtn: "linked",
clearBtn: false,
todayHighlight: true
};
let dynamicModalContainer = '#kiModalContainer';
var vmNet = {
txtPreviewImage: function (input, element) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$(element).attr('value', e.target.result);
}
reader.readAsDataURL(input.files[0]); // convert to base64 string
}
},
previewImage: function (input, element) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$(element).attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]); // convert to base64 string
}
},
message: {
type: {
success: 'success',
error: 'error',
warn: 'warning'
},
},
validation: {
isRequired: 'required',
defaultRequired: 'This field is required',
errorValidation: 'Please fill in the blank field(s)'
},
dialog: {
message: '',
confirmation: function (acceptButton, rejectButton, callback, param) {
let dialogBox = new Noty({
text: vmNet.dialog.message,
dismissQueue: true,
layout: 'center',
closeWith: ['button'],
modal: true,
theme: 'metroui',
callback: {
onCloseClick: function () {
dialogBox.close();
},
},
buttons: [
Noty.button(acceptButton, 'btn btn-success', function () {
callback(param);
dialogBox.close();
}, {
id: 'btnDialogOk',
'data-status': 'ok',
'style': 'margin-right: 5px;'
}),
Noty.button(rejectButton, 'btn btn-danger', function () {
dialogBox.close();
}, {
id: 'btnDialogCancel',
'data-status': 'cancel'
})
]
});
dialogBox.show();
},
// confirm: function (args) {
// let dialogBox = new Noty({
// text: args.message,
// dismissQueue: true,
// layout: 'center',
// closeWith: ['button'],
// modal: true,
// theme: 'metroui',
// callback: {
// onCloseClick: function () {
// dialogBox.close();
// },
// },
// buttons: [
// Noty.button(args.firstButton, 'btn ' + args.firstButtonStyle, function () {
// args.onFirstButtonClick(args.firstParam);
// dialogBox.close();
// }, {
// id: 'btnDialogOk',
// 'data-status': 'ok',
// 'style': 'margin-right: 5px;'
// }),
// Noty.button(args.lastButton, 'btn ' + args.lastButtonStyle, function () {
// args.onLastButtonClick(args.lastParam);
// dialogBox.close();
// }, {
// id: 'btnDialogCancel',
// 'data-status': 'cancel'
// })
// ]
// });
// dialogBox.show();
// },
// dialogOKCancelWithAction: function (msg, callback, callbackCancel, param) {
// let dialogBox = new Noty({
// text: msg,
// dismissQueue: true,
// layout: 'center',
// closeWith: ['button'],
// modal: true,
// theme: 'metroui',
// callback: {
// onCloseClick: function () {
// callbackCancel(param);
// },
// },
// buttons: [
// Noty.button('YES', 'btn btn-success', function () {
// callback(param);
// dialogBox.close();
// }, {
// id: 'btnDialogOk',
// 'data-status': 'ok',
// 'style': 'margin-right: 5px;'
// }),
// Noty.button('NO', 'btn btn-danger', function () {
// callbackCancel(param);
// dialogBox.close();
// }, {
// id: 'btnDialogCancel',
// 'data-status': 'cancel'
// })
// ]
// });
// dialogBox.show();
// },
// dialog: function (msg, callback, param) {
// let dialogBox = new Noty({
// text: msg,
// layout: 'center',
// closeWith: ['click'],
// modal: true,
// theme: 'metroui',
// buttons: [
// Noty.button('YES', 'btn btn-success', function () {
// callback(param);
// dialogBox.close();
// }, {
// id: 'btnDialogOk',
// 'data-status': 'ok',
// 'style': 'margin-right: 5px;'
// }),
// Noty.button('NO', 'btn btn-danger', function () {
// dialogBox.close();
// }, {
// id: 'btnDialogCancel',
// 'data-status': 'cancel'
// })
// ]
// });
// dialogBox.show();
// },
// dialogOK: function (msg, callback, param) {
// let dialogBox = new Noty({
// text: msg,
// layout: 'center',
// timeout: 10000,
// closeWith: ['click', 'timeout'],
// modal: true,
// theme: 'metroui',
// buttons: [
// Noty.button('OK', 'btn btn-success', function () {
// callback(param);
// dialogBox.close();
// }, {
// id: 'btnDialogOk',
// 'data-status': 'ok',
// 'style': 'margin-right: 5px;'
// }),
// ]
// });
// dialogBox.show();
// },
// dialogNoAction: function (msg) {
// let dialogBox = new Noty({
// text: msg,
// layout: 'center',
// closeWith: ['click', 'timeout'],
// timeout: 3000,
// modal: true,
// theme: 'metroui',
// buttons: [
// Noty.button('OK', 'btn btn-success', function () {
// dialogBox.close();
// }, {
// id: 'btnDialogOk',
// 'data-status': 'ok',
// 'style': 'margin-right: 5px;'
// }),
// ]
// });
// dialogBox.show();
// },
// dialogOkOnly: function (msg) {
// let dialogBox = new Noty({
// text: msg,
// layout: 'center',
// closeWith: ['click'],
// modal: true,
// theme: 'metroui',
// buttons: [
// Noty.button('OK', 'btn btn-success', function () {
// dialogBox.close();
// }, {
// id: 'btnDialogOk',
// 'data-status': 'ok',
// 'style': 'margin-right: 5px;'
// }),
// ]
// });
// dialogBox.show();
// },
//
// validationMsg: function () {
// let optionsDefault = {
// type: 'error',
// text: 'Please enter Required value',
// layout: 'topRight',
// timeout: 500,
// closeWith: ['click', 'timeout'],
// progressBar: true,
// modal: true,
// theme: 'metroui'
// };
// new Noty(optionsDefault).show();
// },
},
notification: {
show: function (msg, type, redirect, timeout) {
timeout = timeout || DEFAULT_NOTIFICATION_TIMEOUT;
const optionsDefault = {
type: type,
text: msg,
layout: 'topRight',
timeout: timeout,
closeWith: ['click', 'timeout'],
progressBar: true,
modal: true,
theme: 'metroui'
};
new Noty(optionsDefault).on('onClose', function () {
if (redirect != '') {
if (redirect === 'reloadNoRefresh') {
window.top.location = window.top.location;
} else if (redirect === 'reload') {
//window.top.location = window.top.location;
location.reload();
} else {
window.location.href = redirect;
// setTimeout(function () {
//
// }, timeout);
}
}
}).show();
}
},
modal: {
makeDraggable: false,
close: function () {
$(dynamicModalContainer).modal('hide');
vmNet.modal.makeDraggable = false;
},
show: function (url, title, postData) {
let element = '.content-wrapper'
if (postData) {
$.ajax({
url: url,
type: "POST",
dataType: "html",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(postData),
beforeSend: function () {
$(element).LoadingOverlay("show", {
image: '',
background: "rgba(255, 255, 255, 0.2)",
size: "60",
maxSize: "60",
minSize: "50",
fontawesome: 'fa fa-refresh fa-spin'
});
},
complete: function (e) {
$(element).LoadingOverlay("hide", true);
},
error: function (xhr, ajaxOptions, thrownError) {
switch (xhr.status) {
case 404:
vmNet.notification.show("The page you requested not found.", MSG_ERROR, BLANK_STRING);
break;
case 400:
vmNet.notification.show("Bad Request. Check your parameter request.", MSG_ERROR, BLANK_STRING);
break;
case 403:
vmNet.notification.show("You don't have authorization to access requested page.", MSG_ERROR, BLANK_STRING);
break;
case 500:
dipNotification.show("Internal server error. Please check the requested page.", MSG_ERROR, BLANK_STRING);
break;
}
return false;
},
success: function (html) {
$(dynamicModalContainer + ' .modal-title').text(title);
$(dynamicModalContainer + ' .modal-body').html(html);
$(dynamicModalContainer).modal('show', {
backdrop: 'static',
keyboard: false
});
if (vmNet.modal.makeDraggable === true) {
$(dynamicModalContainer).draggable({
handle: ".modal-header"
});
$(".modal").css('background', 'none');
}
}
});
} else {
$.ajax({
url: url,
success: function (html) {
$(dynamicModalContainer + ' .modal-title').text(title);
$(dynamicModalContainer + ' .modal-body').html(html);
$(dynamicModalContainer).modal('show', {
backdrop: 'static',
keyboard: false
});
}
});
}
},
width: function (w) {
$(dynamicModalContainer).on('shown.bs.modal', function () {
if (w == -1) {
$(this).find('.modal-dialog').css({
width: '100%', //probably not needed
height: 'auto', //probably not needed
'max-height': '100%'
});
} else {
$(this).find('.modal-dialog').css({
width: w + 'px', //probably not needed
height: 'auto', //probably not needed
'max-height': '100%'
});
}
});
},
},
grid: {
extractDataAttr: function (attr) {
let dataAttr = "";
Object.keys(attr).forEach(function (key) {
dataAttr = dataAttr + 'data-' + key + '="' + attr[key] + '" ';
});
return dataAttr;
},
generateActionLink: function (args, data, separator) {
let noUrl = 'javascript:void(0)';
let uri = '';
let icon = 'fa-heart';
let dummy = [
{
"class": "edit",
"label": "label edit",
"url": null,
"withPermission": false,
"permissions": {
"admin": true,
"itsupport": true
}
},
{
"class": "delete",
"label": "Delete",
"url": null,
"withPermission": false,
"permissions": {
"admin": true,
"itsupport": true
}
}
];
let btnLinks = [];
for (let idx = 0; idx < args.length; idx++) {
if (args[idx].url === null) {
uri = noUrl;
}
if (args[idx].icon === null) {
args[idx].icon = icon;
}
if (args[idx].label === null) {
btnLinks[idx] = '<a href="' + uri + '" title="' + args[idx].label + '" class="btn btn-' + args[idx].color + ' btn-flat ' + args[idx].class + '" ' + vmNet.grid.extractDataAttr(data) + ' ><i class="fas fa-' + args[idx].icon + '"></i></a>';
} else {
btnLinks[idx] = '<a href="' + uri + '" title="' + args[idx].label + '" class="btn btn-' + args[idx].color + ' btn-flat ' + args[idx].class + '" ' + vmNet.grid.extractDataAttr(data) + ' ><i class="fas fa-' + args[idx].icon + '"></i>' + args[idx].label + '</a>';
}
}
// console.log(btnLinks.join(' | '));
return '<div class="btn-group">' + btnLinks.join(separator) + '</div>';
},
checkBoxSelector: 'input[type="checkbox"]',
selectAllId: '#select_all',
summarized: {
render: function (api, colsToSum, intVal) {
let me = vmNet.grid.summarized;
let total = 0; // Total over all pages
let totalPerPage = 0; // Total over this page
let idx = 0;
if (Array.isArray(colsToSum)) {
for (idx = 0; idx < colsToSum.length; idx++) {
total = me.getTotal(api, colsToSum[idx], intVal);
totalPerPage = me.getPageTotal(api, colsToSum[idx], intVal);
me.renderFooter(api, colsToSum[idx], totalPerPage, total);
}
} else {
total = me.getTotal(api, colsToSum, intVal);
totalPerPage = me.getPageTotal(api, colsToSum, intVal);
me.renderFooter(api, colsToSum, totalPerPage, total);
}
},
getTotal: function (api, colIndex, intVal) {
return api
.column(colIndex)
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
},
getPageTotal: function (api, colIndex, intVal) {
return api
.column(colIndex, { page: 'current' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
},
renderFooter: function (api, colIndex, pageTotal, total) {
$(api.column(colIndex).footer()).html(
//'$' + pageTotal + ' ( $' + total + ' total)'
// dtTableNumericVar(pageTotal) + ' of ' + dtTableNumericVar(total) + ' total.'
dtTableNumericVar(pageTotal)
// pageTotal + 'of ( $' + total + ' total)'
);
}
},
formatter: {
number: function (thousands, decimal, precision, prefix, postfix) {
return $.fn.dataTable.render.number(thousands, decimal, precision, prefix, postfix);
}
},
generateTopButton: {
onRight: function () {
$(".dataTables_wrapper div.dt-buttons").addClass("float-right").css({ "position": "initial" });
},
onLeft: function () {
$(".dataTables_wrapper div.dt-buttons").css({ "position": "initial" });
}
},
getData: function (el) {
let tbl = $(el).DataTable();
return tbl.rows().data();
},
getDataLength: function (el) {
let tbl = $(el).DataTable();
return tbl.rows().data().length;
},
getRowData: function (el, obj) {
let tbl = $(el).DataTable();
return tbl.row(obj.parents('tr')).data();
},
getRowSelectedData: function (el) {
let tbl = $(el).DataTable();
return tbl.row({ selected: true }).data();
},
getRowIndex: function (el, obj) {
let tbl = $(el).DataTable();
return tbl.row(obj.parents('tr')).index();
},
onWindowResize: function (el) {
let table = el.DataTable();
table.columns.adjust().draw();
}
},
dateHelper: {
dtPicker: {
alwaysOnTop: function (el) {
el.on('show', function () {
$(".datepicker").css('z-index', 9999);
}).datepicker();
}
},
isoToDate: function (isoDate) {
let date = new Date(isoDate);
let year = date.getFullYear();
let month = date.getMonth() + 1;
let dt = date.getDate();
if (dt < 10) {
dt = '0' + dt;
}
if (month < 10) {
month = '0' + month;
}
return dt + '/' + month + '/' + year;
},
getCurrentDate: function (inFormat) {
let today = new Date();
let dd = today.getDate();
let mm = today.getMonth() + 1;
const yyyy = today.getFullYear();
if (dd < 10) {
dd = `0${dd}`;
}
if (mm < 10) {
mm = `0${mm}`;
}
// today = `${mm}-${dd}-${yyyy}`;
return inFormat.toString().replace('dd', dd.toString())
.replace('mm', mm.toString())
.replace('yyyy', yyyy.toString());
},
getFullYear: {
fromDtPicker: function (objDate) {
if (objDate.length > 0) {
let strDate = objDate.split('/');
let space = ' ';
let delimiter = '-';
let year = strDate[2];
let month = strDate[1];
let date = strDate[0];
let newDate = year + delimiter + month + delimiter + date;
return moment(newDate, 'YYYY-MM-DD').format('YYYY');
} else {
return '';
}
}
},
getMonth: {
fromDtPicker: function (objDate) {
if (objDate.length > 0) {
let strDate = objDate.split('/');
let space = ' ';
let delimiter = '-';
let year = strDate[2];
let month = strDate[1];
let date = strDate[0];
let newDate = year + delimiter + month + delimiter + date;
return moment(newDate, 'YYYY-MM-DD').format('MMMM');
} else {
return '';
}
}
},
// dd/MM/yyyy to yyyy-MM-dd hh:mm:ss
toTimeStamp: function (objDate) {
let strDate = objDate.split('/');
let space = ' ';
let delimiter = '-';
let time = '00:00:00';
let year = strDate[2];
let month = strDate[1];
let date = strDate[0];
return year + delimiter + month + delimiter + date + space + time;
},
timeStampToDate: function (objTimeStamp) {
let strDate = objTimeStamp.split(' ');
strDate = strDate[0].split('-');
let space = ' ';
let delimiter = '/';
let year = strDate[0];
let month = strDate[1];
let date = strDate[2];
return date + delimiter + month + delimiter + year;
},
// dd/MM/yyyy to yyyy-MM-dd
toSqlDate: function (objDate) {
if (objDate.length > 0) {
let strDate = objDate.split('/');
let space = ' ';
let delimiter = '-';
let year = strDate[2];
let month = strDate[1];
let date = strDate[0];
return year + delimiter + month + delimiter + date;
} else {
return '';
}
},
// return MM-DD-YYYY
toMomentValidFormat(objDate, format) {
if (objDate.length > 0) {
const dateValue = objDate;
const newDate = new Date(dateValue);
if (format !== '') {
return moment(newDate).format(format);
} else {
return moment(newDate).format('DD/MM/YYYY');
}
} else {
return '';
}
},
},
general: {
browserClientInfo: function () {
"undefined" != typeof jQuery ? console.log("jQuery Version", jQuery.fn.jquery) : console.log("jQuery library is not found!");
navigator.appVersion;
var n, e, r, o = navigator.userAgent, a = navigator.appName, i = "" + parseFloat(navigator.appVersion),
s = parseInt(navigator.appVersion, 10);
-1 != (e = o.indexOf("OPR/")) ? (a = "Opera", i = o.substring(e + 4)) : -1 != (e = o.indexOf("Opera")) ? (a = "Opera", i = o.substring(e + 6), -1 != (e = o.indexOf("Version")) && (i = o.substring(e + 8))) : -1 != (e = o.indexOf("MSIE")) ? (a = "Microsoft Internet Explorer", i = o.substring(e + 5)) : -1 != (e = o.indexOf("Chrome")) ? (a = "Chrome", i = o.substring(e + 7)) : -1 != (e = o.indexOf("Safari")) ? (a = "Safari", i = o.substring(e + 7), -1 != (e = o.indexOf("Version")) && (i = o.substring(e + 8))) : -1 != (e = o.indexOf("Firefox")) ? (a = "Firefox", i = o.substring(e + 8)) : (n = o.lastIndexOf(" ") + 1) < (e = o.lastIndexOf("/")) && (a = o.substring(n, e), i = o.substring(e + 1), a.toLowerCase() == a.toUpperCase() && (a = navigator.appName)), -1 != (r = i.indexOf(";")) && (i = i.substring(0, r)), -1 != (r = i.indexOf(" ")) && (i = i.substring(0, r)), s = parseInt("" + i, 10), isNaN(s) && (i = "" + parseFloat(navigator.appVersion), s = parseInt(navigator.appVersion, 10)), console.log("Cookie Enabled", navigator.cookieEnabled), console.log("Browser: ", a + "(" + i + ")"), console.log("Navigator: ", navigator.appName), console.log("User Agent: ", navigator.userAgent);
var t = "Unknown OS";
-1 != navigator.appVersion.indexOf("Win") && (t = "Windows"), -1 != navigator.appVersion.indexOf("Mac") && (t = "MacOS"), -1 != navigator.appVersion.indexOf("X11") && (t = "UNIX"), -1 != navigator.appVersion.indexOf("Linux") && (t = "Linux"), console.log("OS: ", t)
},
checkBrowser: function () {
var browser;
c = navigator.userAgent.search("Chrome");
f = navigator.userAgent.search("Firefox");
m8 = navigator.userAgent.search("MSIE 8.0");
m9 = navigator.userAgent.search("MSIE 9.0");
if (c > -1) {
browser = "Chrome";
} else if (f > -1) {
browser = "Firefox";
} else if (m9 > -1) {
browser = "MSIE 9.0";
} else if (m8 > -1) {
browser = "MSIE 8.0";
}
return browser;
},
browserMust: function (force) {
if (vmNet.general.checkBrowser() !== force) {
//window.location.href = "/dashboard";
}
}
},
ajax: {
statusCode: {
400: function () {
console.log("Error 400", "BadRequest.");
}, 404: function () {
console.log("Error 404", "Page Not Found.");
}, 500: function () {
console.log("Error 500", "Internal Server Error.");
}
},
post: function (destination, data, element) {
if (element == blankString || typeof element === 'undefined' || !element || element === null) {
element = "#content-wrapper";
}
return $.ajax({
url: destination,
type: "POST",
dataType: "JSON",
contentType: "application/json",
data: JSON.stringify(data),
statusCode: this.statusCode,
beforeSend: function () {
$(element).LoadingOverlay("show", {
image: '',
background: "rgba(165, 168, 172, 0)",
size: "60",
maxSize: "60",
minSize: "50",
fontawesome: 'fa fa-refresh fa-spin'
});
},
complete: function (e) {
$(element).LoadingOverlay("hide", true);
},
error: function (xhr, ajaxOptions, thrownError) {
switch (xhr.status) {
case 404:
dipNotification.show("The page you requested not found.", "error", "");
break;
case 400:
dipNotification.show("Bad Request. Check your parameter request.", "error", "");
break;
case 403:
dipNotification.show("You don't have authorization to access requested page.", "error", "");
break;
case 500:
dipNotification.show("Internal server error. Please check the requested page. <br/> Error details: " + xhr.responseText, "error", "");
break;
}
return false;
}
});
},
},
// Event
goToURL: function (page) {
window.location.href = page;
},
validator: {
validateFileInput: function (el) {
if (el.hasClass("error-ext").toString() === 'true') {
return false;
} else {
return true;
}
},
isGreaterThanEquals: function (a, b) {
// const x = new Date('07/09/2020');
// const y = new Date('04/09/1986');
const x = new Date(a);
const y = new Date(b);
return (x >= y);
},
isEmailAddress: function (val) {
var pattern = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return pattern.test(val); // returns a boolean
},
isNotEmpty: function (val) {
var pattern = /\S+/;
return pattern.test(val); // returns a boolean
},
isNumber: function (val) {
var pattern = /^\d+$/;
return pattern.test(val); // returns a boolean
},
is123: function (val) {
var pattern = /^[0-2]+$/;
return pattern.test(val); // returns a boolean
},
isSame: function (val1, val2) {
return val1 === val2;
},
},
generateLink: function (url, title, target) {
if (target != '') {
return '<a class="goto" href="javascript:void(0)" data-url="' + url + '" title="">' + title + '</a>';
} else {
return '<a class="goto" target="' + target + '" href="javascript:void(0)" data-url="' + url + '" title="">' + title + '</a>';
}
},
checkExtension: function (input, forceExt) {
if (!input.files || !input.files[0]) {
return;
}
const name = input.files[0].name;
const lastDot = name.lastIndexOf('.');
const fileName = name.substring(0, lastDot);
const ext = name.substring(lastDot + 1);
// console.log(ext);
// console.log(forceExt.toLowerCase());
if (ext.toLowerCase() !== forceExt.toLowerCase()) {
$(input).addClass("error-ext");
$(input).after("<span class='error-ext_span' style=\"color:#ff0000;font-style:italic;font-size:12px;\">Please use *." + forceExt + " file.</span>");
} else {
$(input).removeClass("error-ext");
$(".error-ext_span").remove();
}
}
}
if (window.addEventListener) {
window.addEventListener('load', vmNet.general.browserMust("Firefox"), false);
} else if (window.attachEvent) {
// window.attachEvent('onload', dip.speedTest.InitiateSpeedDetection);
}
// KEYBOARD/DOM/MOUSE EVENT
$(document).off("keydown", "form");
$(document).on("keydown", "form", function (e) {
if (e.which === 13) {
var className = e.target.parentNode.className;
if (!$(e.target).is('textarea') && className !== 'bootstrap-tagsinput') {
e.preventDefault();
console.error("ENTER-KEY PREVENTED ON NON-TEXTAREA ELEMENTS");
}
}
});
$(document).off(EVENT_CLICK, '#select_all');
$(document).on(EVENT_CLICK, '#select_all', function (e) {
var table = $(e.target).closest('table');
$('td input:checkbox', table).prop('checked', this.checked);
});
$(document).off(EVENT_CLICK, '#btnBackToPage');
$(document).on(EVENT_CLICK, '#btnBackToPage', function (e) {
vmNet.goToURL($(this).data('backpage'));
});
$(document).off(EVENT_CLICK, 'a.goto');
$(document).on(EVENT_CLICK, 'a.goto', function (e) {
vmNet.goToURL($(this).data('url'));
});
$(document).off(EVENT_SUBMIT, '.preventSubmit');
$(document).on(EVENT_SUBMIT, '.preventSubmit', function (e) {
e.preventDefault();
});
$(document).off(EVENT_SUBMIT, '.prevent-submit');
$(document).on(EVENT_SUBMIT, '.prevent-submit', function (e) {
e.preventDefault();
});
$(document).off(EVENT_CHANGE, '.forcePDF');
$(document).on(EVENT_CHANGE, '.forcePDF', function () {
vmNet.checkExtension(this, 'pdf');
});
$(document).off(EVENT_CHANGE, '.forceXlsx');
$(document).on(EVENT_CHANGE, '.forceXlsx', function () {
vmNet.checkExtension(this, 'xlsx');
});
$(document).off('keydown', 'input[pattern]');
$(document).on('keydown', 'input[pattern]', function (e) {
var input = $(this);
var oldVal = input.val();
var regex = new RegExp(input.attr('pattern'), 'g');
setTimeout(function () {
var newVal = input.val();
if (!regex.test(newVal)) {
input.val(oldVal);
}
}, 0);
});
$(document).off(EVENT_CLICK, ".btn-modal-cancel");
$(document).on(EVENT_CLICK, ".btn-modal-cancel", function (e) {
e.preventDefault();
vmNet.modal.close();
});
$(document).off('shown.bs.modal');
$(document).on('shown.bs.modal', function (e) {
$.fn.dataTable.tables({ visible: true, api: true }).columns.adjust();
});
(function ($) {
$.fn.inputFilter = function (inputFilter) {
return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function () {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = "";
}
});
};
}(jQuery));
// Restricts input for the set of matched elements to the given inputFilter function.
$(document).ready(function () {
//let loggedUserRoleList = $("#hidUserRoleList").val();
//isSuperAdmin = loggedUserRoleList.includes("administrator");
//_setVal('hidIsSuperAdmin', isSuperAdmin);
$('.tooltip').tooltip();
// https://jsfiddle.net/emkey08/tvx5e7q3
$(".integer").inputFilter(function (value) {
return /^-?\d*$/.test(value);
});
$(".uint").inputFilter(function (value) {
return /^\d*$/.test(value);
});
$(".float").inputFilter(function (value) {
return /^-?\d*[.,]?\d*$/.test(value);
});
$(".currency").inputFilter(function (value) {
return /^-?\d*[.,]?\d{0,2}$/.test(value);
});
$(".latin").inputFilter(function (value) {
return /^[a-z]*$/i.test(value);
});
$(".hex").inputFilter(function (value) {
return /^[0-9a-f]*$/i.test(value);
});
$('.datepicker').datepicker(DTPICKER_DEFAULT_OPT);
//Timepicker
//$('.timepicker').timepicker({
// showInputs: false
//});
$('input').attr('autocomplete', 'off');
$('form').attr('autocomplete', 'off');
$(':input').on('focus', function () {
$(this).attr('autocomplete', 'off')
});
$('.has-tooltip').tooltip();
//Initialize Select2 Elements
$('.select2bs4').select2({
theme: 'bootstrap4'
});
});
/* TRIGGER EVENT UNTUK ELEMENT YANG BELUM ADA SEBELUMNYA :: LIVE EVENT */
/* EXTERNAL FUNCTION */
function textAreaCounter(val, maxchar) {
var len = val.value.length;
var tmp = 0
var oldValue = val.value;
tmp = maxchar - len
if (len > maxchar) {
$("#charNum").css("color", "red");
} else {
$("#charNum").css("color", "#333");
}
$('#charNum').text(tmp + ' Characters left from ' + maxchar);
};
function countChar(val) {
var len = val.value.length;
var tmp = 0
var oldValue = val.value;
tmp = max_char_in_byte - len
if (len > max_char_in_byte) {
$("#charNum").css("color", "red");
} else {
$("#charNum").css("color", "#333");
}
$('#charNum').text(tmp + ' Characters left from ' + max_char_in_byte);
};
// var mynumber = 500000;
// (cicilan).formatMoney(0, ',', '.')
Number.prototype.formatMoney = function (c, d, t) {
var n = this,
c = isNaN(c = Math.abs(c)) ? 2 : c,
d = d == undefined ? "." : d,
t = t == undefined ? "," : t,
s = n < 0 ? "-" : "",
i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "",
j = (j = i.length) > 3 ? j % 3 : 0;
return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"numeric-comma-pre": function (a) {
var x = (a == "-") ? 0 : a.replace(/,/, ".");
return parseFloat(x);
},
"numeric-comma-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"numeric-comma-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
function setReadOnly(obj) {
$("#" + obj).attr("readonly", "readonly");
}
// region DIP-MODAL
// endregion
//region NOTY-JS
function common_showDialog(msg, callback, param) {
var dialog = new Noty({
text: msg,
layout: 'center',
closeWith: ['click'],
modal: true,
theme: 'metroui',
buttons: [
Noty.button('YES', 'btn btn-success', function () {
callback(param);
dialog.close();
}, {
id: 'btnDialogOk',
'data-status': 'ok',
'style': 'margin-right: 5px;'
}),
Noty.button('NO', 'btn btn-danger', function () {
dialog.close();
}, {
id: 'btnDialogCancel',
'data-status': 'cancel'
})
]
});
dialog.show();
}
function common_showValidationMessage() {
var optionsDefault = {
type: 'error',
text: 'Please enter Required value',
layout: 'topRight',
timeout: 500,
closeWith: ['click', 'timeout'],
progressBar: true,
modal: true,
theme: 'metroui'
};
new Noty(optionsDefault).show();
}
//endregion
// region FUNGSI YANG SUDAH ADA DI VARIABLE DIP
// dip.property
function dtTableNumeric(thousands, decimal, precision, prefix, postfix) {
// return $.fn.dataTable.render.number(thousands, precision, decimal, prefix, postfix);
return $.fn.dataTable.render.number(thousands, decimal, precision, prefix, postfix);
}
function dtTableNumericDefault() {
// return $.fn.dataTable.render.number(thousands, precision, decimal, prefix, postfix);
return $.fn.dataTable.render.number('.', ',', '2', null, null);
}
//let dtTableNumericVar = $.fn.dataTable.render.number(',', '.', 2).display;
let dtTableNumericVar = $.fn.dataTable.render.number('.', ',', 2).display;
let dtTableNumericVar9 = $.fn.dataTable.render.number(',', '.', 9).display;
function dateToTimeStamp(objDate) {
var strDate = objDate.split('/');
var space = ' ';
var delimiter = '-';
var time = '00:00:00';
var year = strDate[2];
var month = strDate[1];
var date = strDate[0];
return year + delimiter + month + delimiter + date + space + time;
}
function dateToSqlDate(objDate) {
if (objDate.length > 0) {
var strDate = objDate.split('/');
var space = ' ';
var delimiter = '-';
var year = strDate[2];
var month = strDate[1];
var date = strDate[0];
return year + delimiter + month + delimiter + date;
} else {
return '';
}
}
function generateActionLink(args, data) {
let noUrl = 'javascript:void(0)';
let uri = '';
let dummy = [
{
"class": "edit",
"label": "label edit",
"url": null,
"withPermission": false,
"permissions": {
"admin": true,
"itsupport": true
}
},
{
"class": "delete",
"label": "label delete",
"url": null,
"withPermission": false,
"permissions": {
"admin": true,
"itsupport": true
}
}
];
let btnLinks = [];
let btnLink = "";
for (let idx = 0; idx < args.length; idx++) {
if (args[idx].url === null) {
uri = noUrl;
}
btnLinks[idx] = '<a href="' + uri + '" title="' + args[idx].label + '" class="' + args[idx].class + '" ' + buildDataAttrLink(data) + ' >' + args[idx].label + '</a>';
}
return btnLink.join(' | ');
}
function buildDataAttrLink(attr) {
var dataAttr = "";
Object.keys(attr).forEach(function (key) {
dataAttr = dataAttr + 'data-' + key + '="' + attr[key] + '" ';
});
//console.log("Table Data Attr", dataAttr);
return dataAttr;
}
function buildLinkAction(linkArray) {
var actionLink = linkArray.join(' | ');
return actionLink;
}
// endregion
// Create an object type UserException
function UserException(message) {
this.message = message;
this.name = 'UserException';
}
// Make the exception convert to a pretty string when used as a string
// (e.g., by the error console)
UserException.prototype.toString = function () {
return `${this.name}: "${this.message}"`;
};
// region CUSTOM VALIDATOR
jQuery.validator.addMethod("validate_email", function (value, element) {
if (value.length > 1) {
if (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value)) {
return true;
} else {
return false;
}
} else {
return false;
}
}, "Please enter a valid Email.");
jQuery.validator.addMethod("numberMoreThanZero", function (value, element) {
if (value > 0) {
return true;
} else {
return false;
}
}, "Please enter a value more than Zero.");
// endregion
let randomGuid = '';
let dip = {
implode: function (arr, separator) {
if (arr.length > 0) {
return arr.join(separator);
} else {
return EMPTY_STRING;
}
},
splitChunkArray: function (array, chunkSize) {
return [].concat.apply([],
array.map(function (elem, i) {
return i % chunkSize ? [] : [array.slice(i, i + chunkSize)];
})
);
},
concatArrayForce: function (array, separator, len, conjunction) {
var chunkedArray = dip.splitChunkArray(array, len);
console.log(chunkedArray);
var out = '';
var tmpOut = [];
for (let idx = 0; idx < chunkedArray.length; idx++) {
tmpOut[idx] = chunkedArray[idx].join(separator);
// if ((idx+1) === len){
// tmpOut.length = 0;
// }
}
var tmpOutLagi = tmpOut.join('___|___');
tmpOutLagi = tmpOutLagi.replaceAll('___|___', separator + conjunction)
out = tmpOutLagi.replace('___', '&nbsp;');
//out = tmpOutLagi.join(conjunction);
console.log(out);
return out;
},
concatArray: function (arr, separator, eachLength, conjuction) {
var str = blankString;
if (arr.length > 0) {
var counter = 0;
for (var i = 0; i < arr.length; i++) {
str = str + arr[i];
counter++;
if (counter == eachLength) {
counter = 0;
if (i < arr.length) {
if ((i + 1) == arr.length) {
str = str;
} else {
str = str + conjuction;
}
} else {
str = blankString;
}
} else {
str = str + separator
}
}
}
var nStr = str.substring(str.length - 3).trim();
if (nStr === "|") {
nStr = str.slice(0, -3);
} else {
nStr = str;
}
return nStr;
},
isEquals: function (str1, str2) {
var ret = false;
if (str1.toLowerCase().trim() === str2.toLowerCase().trim()) {
ret = true;
}
return ret;
},
notdefined: 'undefined',
isUndefined: function (obj) {
if (typeof obj === 'undefined') {
return true;
} else {
return false;
}
},
currentUser: {
userNumber: $('#hidUserNumber').val(),
userName: $('#hidUserName').val(),
userPass: $('#hidUserPass').val(),
roleList: $('#hidUserRoleList').val(),
today: $('#hidToday').val()
},
// COLLECTION
formOptions: {
validatorErrorPlacement: function (error, element, name, type) {
var elementName = element.attr('name');
if (type === 'select2' && elementName === name) {
error.appendTo(element.parent("div"));
} else if (type === 'datepicker' && elementName === name) {
error.appendTo(element.parent("div").parent("div"));
} else if (type === 'textGroupButton' && elementName === name) {
error.insertAfter(element);
} else {
error.insertAfter(element);
}
}
},
fileExt: {
xlsx: ".xlsx",
pdf: ".pdf",
},
mimeType: {
"123": "application/vnd.lotus-1-2-3",
"1km": "application/vnd.1000minds.decision-model+xml",
"3dml": "text/vnd.in3d.3dml",
"3ds": "image/x-3ds",
"3g2": "video/3gpp2",
"3gp": "video/3gpp",
"3gpp": "video/3gpp",
"3mf": "model/3mf",
"7z": "application/x-7z-compressed",
"aab": "application/x-authorware-bin",
"aac": "audio/x-aac",
"aam": "application/x-authorware-map",
"aas": "application/x-authorware-seg",
"abw": "application/x-abiword",
"ac": "application/vnd.nokia.n-gage.ac+xml",
"acc": "application/vnd.americandynamics.acc",
"ace": "application/x-ace-compressed",
"acu": "application/vnd.acucobol",
"acutc": "application/vnd.acucorp",
"adp": "audio/adpcm",
"aep": "application/vnd.audiograph",
"afm": "application/x-font-type1",
"afp": "application/vnd.ibm.modcap",
"ahead": "application/vnd.ahead.space",
"ai": "application/postscript",
"aif": "audio/x-aiff",
"aifc": "audio/x-aiff",
"aiff": "audio/x-aiff",
"air": "application/vnd.adobe.air-application-installer-package+zip",
"ait": "application/vnd.dvb.ait",
"ami": "application/vnd.amiga.ami",
"amr": "audio/amr",
"apk": "application/vnd.android.package-archive",
"apng": "image/apng",
"appcache": "text/cache-manifest",
"application": "application/x-ms-application",
"apr": "application/vnd.lotus-approach",
"arc": "application/x-freearc",
"arj": "application/x-arj",
"asc": "application/pgp-signature",
"asf": "video/x-ms-asf",
"asm": "text/x-asm",
"aso": "application/vnd.accpac.simply.aso",
"asx": "video/x-ms-asf",
"atc": "application/vnd.acucorp",
"atom": "application/atom+xml",
"atomcat": "application/atomcat+xml",
"atomdeleted": "application/atomdeleted+xml",
"atomsvc": "application/atomsvc+xml",
"atx": "application/vnd.antix.game-component",
"au": "audio/basic",
"avi": "video/x-msvideo",
"avif": "image/avif",
"aw": "application/applixware",
"azf": "application/vnd.airzip.filesecure.azf",
"azs": "application/vnd.airzip.filesecure.azs",
"azv": "image/vnd.airzip.accelerator.azv",
"azw": "application/vnd.amazon.ebook",
"b16": "image/vnd.pco.b16",
"bat": "application/x-msdownload",
"bcpio": "application/x-bcpio",
"bdf": "application/x-font-bdf",
"bdm": "application/vnd.syncml.dm+wbxml",
"bdoc": "application/x-bdoc",
"bed": "application/vnd.realvnc.bed",
"bh2": "application/vnd.fujitsu.oasysprs",
"bin": "application/octet-stream",
"blb": "application/x-blorb",
"blorb": "application/x-blorb",
"bmi": "application/vnd.bmi",
"bmml": "application/vnd.balsamiq.bmml+xml",
"bmp": "image/x-ms-bmp",
"book": "application/vnd.framemaker",
"box": "application/vnd.previewsystems.box",
"boz": "application/x-bzip2",
"bpk": "application/octet-stream",
"bsp": "model/vnd.valve.source.compiled-map",
"btif": "image/prs.btif",
"buffer": "application/octet-stream",
"bz": "application/x-bzip",
"bz2": "application/x-bzip2",
"c": "text/x-c",
"c11amc": "application/vnd.cluetrust.cartomobile-config",
"c11amz": "application/vnd.cluetrust.cartomobile-config-pkg",
"c4d": "application/vnd.clonk.c4group",
"c4f": "application/vnd.clonk.c4group",
"c4g": "application/vnd.clonk.c4group",
"c4p": "application/vnd.clonk.c4group",
"c4u": "application/vnd.clonk.c4group",
"cab": "application/vnd.ms-cab-compressed",
"caf": "audio/x-caf",
"cap": "application/vnd.tcpdump.pcap",
"car": "application/vnd.curl.car",
"cat": "application/vnd.ms-pki.seccat",
"cb7": "application/x-cbr",
"cba": "application/x-cbr",
"cbr": "application/x-cbr",
"cbt": "application/x-cbr",
"cbz": "application/x-cbr",
"cc": "text/x-c",
"cco": "application/x-cocoa",
"cct": "application/x-director",
"ccxml": "application/ccxml+xml",
"cdbcmsg": "application/vnd.contact.cmsg",
"cdf": "application/x-netcdf",
"cdfx": "application/cdfx+xml",
"cdkey": "application/vnd.mediastation.cdkey",
"cdmia": "application/cdmi-capability",
"cdmic": "application/cdmi-container",
"cdmid": "application/cdmi-domain",
"cdmio": "application/cdmi-object",
"cdmiq": "application/cdmi-queue",
"cdx": "chemical/x-cdx",
"cdxml": "application/vnd.chemdraw+xml",
"cdy": "application/vnd.cinderella",
"cer": "application/pkix-cert",
"cfs": "application/x-cfs-compressed",
"cgm": "image/cgm",
"chat": "application/x-chat",
"chm": "application/vnd.ms-htmlhelp",
"chrt": "application/vnd.kde.kchart",
"cif": "chemical/x-cif",
"cii": "application/vnd.anser-web-certificate-issue-initiation",
"cil": "application/vnd.ms-artgalry",
"cjs": "application/node",
"cla": "application/vnd.claymore",
"class": "application/java-vm",
"clkk": "application/vnd.crick.clicker.keyboard",
"clkp": "application/vnd.crick.clicker.palette",
"clkt": "application/vnd.crick.clicker.template",
"clkw": "application/vnd.crick.clicker.wordbank",
"clkx": "application/vnd.crick.clicker",
"clp": "application/x-msclip",
"cmc": "application/vnd.cosmocaller",
"cmdf": "chemical/x-cmdf",
"cml": "chemical/x-cml",
"cmp": "application/vnd.yellowriver-custom-menu",
"cmx": "image/x-cmx",
"cod": "application/vnd.rim.cod",
"coffee": "text/coffeescript",
"com": "application/x-msdownload",
"conf": "text/plain",
"cpio": "application/x-cpio",
"cpp": "text/x-c",
"cpt": "application/mac-compactpro",
"crd": "application/x-mscardfile",
"crl": "application/pkix-crl",
"crt": "application/x-x509-ca-cert",
"crx": "application/x-chrome-extension",
"cryptonote": "application/vnd.rig.cryptonote",
"csh": "application/x-csh",
"csl": "application/vnd.citationstyles.style+xml",
"csml": "chemical/x-csml",
"csp": "application/vnd.commonspace",
"css": "text/css",
"cst": "application/x-director",
"csv": "text/csv",
"cu": "application/cu-seeme",
"curl": "text/vnd.curl",
"cww": "application/prs.cww",
"cxt": "application/x-director",
"cxx": "text/x-c",
"dae": "model/vnd.collada+xml",
"daf": "application/vnd.mobius.daf",
"dart": "application/vnd.dart",
"dataless": "application/vnd.fdsn.seed",
"davmount": "application/davmount+xml",
"dbf": "application/vnd.dbf",
"dbk": "application/docbook+xml",
"dcr": "application/x-director",
"dcurl": "text/vnd.curl.dcurl",
"dd2": "application/vnd.oma.dd2+xml",
"ddd": "application/vnd.fujixerox.ddd",
"ddf": "application/vnd.syncml.dmddf+xml",
"dds": "image/vnd.ms-dds",
"deb": "application/x-debian-package",
"def": "text/plain",
"deploy": "application/octet-stream",
"der": "application/x-x509-ca-cert",
"dfac": "application/vnd.dreamfactory",
"dgc": "application/x-dgc-compressed",
"dic": "text/x-c",
"dir": "application/x-director",
"dis": "application/vnd.mobius.dis",
"disposition-notification": "message/disposition-notification",
"dist": "application/octet-stream",
"distz": "application/octet-stream",
"djv": "image/vnd.djvu",
"djvu": "image/vnd.djvu",
"dll": "application/x-msdownload",
"dmg": "application/x-apple-diskimage",
"dmp": "application/vnd.tcpdump.pcap",
"dms": "application/octet-stream",
"dna": "application/vnd.dna",
"doc": "application/msword",
"docm": "application/vnd.ms-word.document.macroenabled.12",
"docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"dot": "application/msword",
"dotm": "application/vnd.ms-word.template.macroenabled.12",
"dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
"dp": "application/vnd.osgi.dp",
"dpg": "application/vnd.dpgraph",
"dra": "audio/vnd.dra",
"drle": "image/dicom-rle",
"dsc": "text/prs.lines.tag",
"dssc": "application/dssc+der",
"dtb": "application/x-dtbook+xml",
"dtd": "application/xml-dtd",
"dts": "audio/vnd.dts",
"dtshd": "audio/vnd.dts.hd",
"dump": "application/octet-stream",
"dvb": "video/vnd.dvb.file",
"dvi": "application/x-dvi",
"dwd": "application/atsc-dwd+xml",
"dwf": "model/vnd.dwf",
"dwg": "image/vnd.dwg",
"dxf": "image/vnd.dxf",
"dxp": "application/vnd.spotfire.dxp",
"dxr": "application/x-director",
"ear": "application/java-archive",
"ecelp4800": "audio/vnd.nuera.ecelp4800",
"ecelp7470": "audio/vnd.nuera.ecelp7470",
"ecelp9600": "audio/vnd.nuera.ecelp9600",
"ecma": "application/ecmascript",
"edm": "application/vnd.novadigm.edm",
"edx": "application/vnd.novadigm.edx",
"efif": "application/vnd.picsel",
"ei6": "application/vnd.pg.osasli",
"elc": "application/octet-stream",
"emf": "image/emf",
"eml": "message/rfc822",
"emma": "application/emma+xml",
"emotionml": "application/emotionml+xml",
"emz": "application/x-msmetafile",
"eol": "audio/vnd.digital-winds",
"eot": "application/vnd.ms-fontobject",
"eps": "application/postscript",
"epub": "application/epub+zip",
"es": "application/ecmascript",
"es3": "application/vnd.eszigno3+xml",
"esa": "application/vnd.osgi.subsystem",
"esf": "application/vnd.epson.esf",
"et3": "application/vnd.eszigno3+xml",
"etx": "text/x-setext",
"eva": "application/x-eva",
"evy": "application/x-envoy",
"exe": "application/x-msdownload",
"exi": "application/exi",
"exr": "image/aces",
"ext": "application/vnd.novadigm.ext",
"ez": "application/andrew-inset",
"ez2": "application/vnd.ezpix-album",
"ez3": "application/vnd.ezpix-package",
"f": "text/x-fortran",
"f4v": "video/x-f4v",
"f77": "text/x-fortran",
"f90": "text/x-fortran",
"fbs": "image/vnd.fastbidsheet",
"fcdt": "application/vnd.adobe.formscentral.fcdt",
"fcs": "application/vnd.isac.fcs",
"fdf": "application/vnd.fdf",
"fdt": "application/fdt+xml",
"fe_launch": "application/vnd.denovo.fcselayout-link",
"fg5": "application/vnd.fujitsu.oasysgp",
"fgd": "application/x-director",
"fh": "image/x-freehand",
"fh4": "image/x-freehand",
"fh5": "image/x-freehand",
"fh7": "image/x-freehand",
"fhc": "image/x-freehand",
"fig": "application/x-xfig",
"fits": "image/fits",
"flac": "audio/x-flac",
"fli": "video/x-fli",
"flo": "application/vnd.micrografx.flo",
"flv": "video/x-flv",
"flw": "application/vnd.kde.kivio",
"flx": "text/vnd.fmi.flexstor",
"fly": "text/vnd.fly",
"fm": "application/vnd.framemaker",
"fnc": "application/vnd.frogans.fnc",
"fo": "application/vnd.software602.filler.form+xml",
"for": "text/x-fortran",
"fpx": "image/vnd.fpx",
"frame": "application/vnd.framemaker",
"fsc": "application/vnd.fsc.weblaunch",
"fst": "image/vnd.fst",
"ftc": "application/vnd.fluxtime.clip",
"fti": "application/vnd.anser-web-funds-transfer-initiation",
"fvt": "video/vnd.fvt",
"fxp": "application/vnd.adobe.fxp",
"fxpl": "application/vnd.adobe.fxp",
"fzs": "application/vnd.fuzzysheet",
"g2w": "application/vnd.geoplan",
"g3": "image/g3fax",
"g3w": "application/vnd.geospace",
"gac": "application/vnd.groove-account",
"gam": "application/x-tads",
"gbr": "application/rpki-ghostbusters",
"gca": "application/x-gca-compressed",
"gdl": "model/vnd.gdl",
"gdoc": "application/vnd.google-apps.document",
"geo": "application/vnd.dynageo",
"geojson": "application/geo+json",
"gex": "application/vnd.geometry-explorer",
"ggb": "application/vnd.geogebra.file",
"ggt": "application/vnd.geogebra.tool",
"ghf": "application/vnd.groove-help",
"gif": "image/gif",
"gim": "application/vnd.groove-identity-message",
"glb": "model/gltf-binary",
"gltf": "model/gltf+json",
"gml": "application/gml+xml",
"gmx": "application/vnd.gmx",
"gnumeric": "application/x-gnumeric",
"gph": "application/vnd.flographit",
"gpx": "application/gpx+xml",
"gqf": "application/vnd.grafeq",
"gqs": "application/vnd.grafeq",
"gram": "application/srgs",
"gramps": "application/x-gramps-xml",
"gre": "application/vnd.geometry-explorer",
"grv": "application/vnd.groove-injector",
"grxml": "application/srgs+xml",
"gsf": "application/x-font-ghostscript",
"gsheet": "application/vnd.google-apps.spreadsheet",
"gslides": "application/vnd.google-apps.presentation",
"gtar": "application/x-gtar",
"gtm": "application/vnd.groove-tool-message",
"gtw": "model/vnd.gtw",
"gv": "text/vnd.graphviz",
"gxf": "application/gxf",
"gxt": "application/vnd.geonext",
"gz": "application/gzip",
"h": "text/x-c",
"h261": "video/h261",
"h263": "video/h263",
"h264": "video/h264",
"hal": "application/vnd.hal+xml",
"hbci": "application/vnd.hbci",
"hbs": "text/x-handlebars-template",
"hdd": "application/x-virtualbox-hdd",
"hdf": "application/x-hdf",
"heic": "image/heic",
"heics": "image/heic-sequence",
"heif": "image/heif",
"heifs": "image/heif-sequence",
"hej2": "image/hej2k",
"held": "application/atsc-held+xml",
"hh": "text/x-c",
"hjson": "application/hjson",
"hlp": "application/winhlp",
"hpgl": "application/vnd.hp-hpgl",
"hpid": "application/vnd.hp-hpid",
"hps": "application/vnd.hp-hps",
"hqx": "application/mac-binhex40",
"hsj2": "image/hsj2",
"htc": "text/x-component",
"htke": "application/vnd.kenameaapp",
"htm": "text/html",
"html": "text/html",
"hvd": "application/vnd.yamaha.hv-dic",
"hvp": "application/vnd.yamaha.hv-voice",
"hvs": "application/vnd.yamaha.hv-script",
"i2g": "application/vnd.intergeo",
"icc": "application/vnd.iccprofile",
"ice": "x-conference/x-cooltalk",
"icm": "application/vnd.iccprofile",
"ico": "image/x-icon",
"ics": "text/calendar",
"ief": "image/ief",
"ifb": "text/calendar",
"ifm": "application/vnd.shana.informed.formdata",
"iges": "model/iges",
"igl": "application/vnd.igloader",
"igm": "application/vnd.insors.igm",
"igs": "model/iges",
"igx": "application/vnd.micrografx.igx",
"iif": "application/vnd.shana.informed.interchange",
"img": "application/octet-stream",
"imp": "application/vnd.accpac.simply.imp",
"ims": "application/vnd.ms-ims",
"in": "text/plain",
"ini": "text/plain",
"ink": "application/inkml+xml",
"inkml": "application/inkml+xml",
"install": "application/x-install-instructions",
"iota": "application/vnd.astraea-software.iota",
"ipfix": "application/ipfix",
"ipk": "application/vnd.shana.informed.package",
"irm": "application/vnd.ibm.rights-management",
"irp": "application/vnd.irepository.package+xml",
"iso": "application/x-iso9660-image",
"itp": "application/vnd.shana.informed.formtemplate",
"its": "application/its+xml",
"ivp": "application/vnd.immervision-ivp",
"ivu": "application/vnd.immervision-ivu",
"jad": "text/vnd.sun.j2me.app-descriptor",
"jade": "text/jade",
"jam": "application/vnd.jam",
"jar": "application/java-archive",
"jardiff": "application/x-java-archive-diff",
"java": "text/x-java-source",
"jhc": "image/jphc",
"jisp": "application/vnd.jisp",
"jls": "image/jls",
"jlt": "application/vnd.hp-jlyt",
"jng": "image/x-jng",
"jnlp": "application/x-java-jnlp-file",
"joda": "application/vnd.joost.joda-archive",
"jp2": "image/jp2",
"jpe": "image/jpeg",
"jpeg": "image/jpeg",
"jpf": "image/jpx",
"jpg": "image/jpeg",
"jpg2": "image/jp2",
"jpgm": "video/jpm",
"jpgv": "video/jpeg",
"jph": "image/jph",
"jpm": "video/jpm",
"jpx": "image/jpx",
"js": "application/javascript",
"json": "application/json",
"json5": "application/json5",
"jsonld": "application/ld+json",
"jsonml": "application/jsonml+json",
"jsx": "text/jsx",
"jxr": "image/jxr",
"jxra": "image/jxra",
"jxrs": "image/jxrs",
"jxs": "image/jxs",
"jxsc": "image/jxsc",
"jxsi": "image/jxsi",
"jxss": "image/jxss",
"kar": "audio/midi",
"karbon": "application/vnd.kde.karbon",
"kdbx": "application/x-keepass2",
"key": "application/vnd.apple.keynote",
"kfo": "application/vnd.kde.kformula",
"kia": "application/vnd.kidspiration",
"kml": "application/vnd.google-earth.kml+xml",
"kmz": "application/vnd.google-earth.kmz",
"kne": "application/vnd.kinar",
"knp": "application/vnd.kinar",
"kon": "application/vnd.kde.kontour",
"kpr": "application/vnd.kde.kpresenter",
"kpt": "application/vnd.kde.kpresenter",
"kpxx": "application/vnd.ds-keypoint",
"ksp": "application/vnd.kde.kspread",
"ktr": "application/vnd.kahootz",
"ktx": "image/ktx",
"ktx2": "image/ktx2",
"ktz": "application/vnd.kahootz",
"kwd": "application/vnd.kde.kword",
"kwt": "application/vnd.kde.kword",
"lasxml": "application/vnd.las.las+xml",
"latex": "application/x-latex",
"lbd": "application/vnd.llamagraphics.life-balance.desktop",
"lbe": "application/vnd.llamagraphics.life-balance.exchange+xml",
"les": "application/vnd.hhe.lesson-player",
"less": "text/less",
"lgr": "application/lgr+xml",
"lha": "application/x-lzh-compressed",
"link66": "application/vnd.route66.link66+xml",
"list": "text/plain",
"list3820": "application/vnd.ibm.modcap",
"listafp": "application/vnd.ibm.modcap",
"litcoffee": "text/coffeescript",
"lnk": "application/x-ms-shortcut",
"log": "text/plain",
"lostxml": "application/lost+xml",
"lrf": "application/octet-stream",
"lrm": "application/vnd.ms-lrm",
"ltf": "application/vnd.frogans.ltf",
"lua": "text/x-lua",
"luac": "application/x-lua-bytecode",
"lvp": "audio/vnd.lucent.voice",
"lwp": "application/vnd.lotus-wordpro",
"lzh": "application/x-lzh-compressed",
"m13": "application/x-msmediaview",
"m14": "application/x-msmediaview",
"m1v": "video/mpeg",
"m21": "application/mp21",
"m2a": "audio/mpeg",
"m2v": "video/mpeg",
"m3a": "audio/mpeg",
"m3u": "audio/x-mpegurl",
"m3u8": "application/vnd.apple.mpegurl",
"m4a": "audio/x-m4a",
"m4p": "application/mp4",
"m4s": "video/iso.segment",
"m4u": "video/vnd.mpegurl",
"m4v": "video/x-m4v",
"ma": "application/mathematica",
"mads": "application/mads+xml",
"maei": "application/mmt-aei+xml",
"mag": "application/vnd.ecowin.chart",
"maker": "application/vnd.framemaker",
"man": "text/troff",
"manifest": "text/cache-manifest",
"map": "application/json",
"mar": "application/octet-stream",
"markdown": "text/markdown",
"mathml": "application/mathml+xml",
"mb": "application/mathematica",
"mbk": "application/vnd.mobius.mbk",
"mbox": "application/mbox",
"mc1": "application/vnd.medcalcdata",
"mcd": "application/vnd.mcd",
"mcurl": "text/vnd.curl.mcurl",
"md": "text/markdown",
"mdb": "application/x-msaccess",
"mdi": "image/vnd.ms-modi",
"mdx": "text/mdx",
"me": "text/troff",
"mesh": "model/mesh",
"meta4": "application/metalink4+xml",
"metalink": "application/metalink+xml",
"mets": "application/mets+xml",
"mfm": "application/vnd.mfmp",
"mft": "application/rpki-manifest",
"mgp": "application/vnd.osgeo.mapguide.package",
"mgz": "application/vnd.proteus.magazine",
"mid": "audio/midi",
"midi": "audio/midi",
"mie": "application/x-mie",
"mif": "application/vnd.mif",
"mime": "message/rfc822",
"mj2": "video/mj2",
"mjp2": "video/mj2",
"mjs": "application/javascript",
"mk3d": "video/x-matroska",
"mka": "audio/x-matroska",
"mkd": "text/x-markdown",
"mks": "video/x-matroska",
"mkv": "video/x-matroska",
"mlp": "application/vnd.dolby.mlp",
"mmd": "application/vnd.chipnuts.karaoke-mmd",
"mmf": "application/vnd.smaf",
"mml": "text/mathml",
"mmr": "image/vnd.fujixerox.edmics-mmr",
"mng": "video/x-mng",
"mny": "application/x-msmoney",
"mobi": "application/x-mobipocket-ebook",
"mods": "application/mods+xml",
"mov": "video/quicktime",
"movie": "video/x-sgi-movie",
"mp2": "audio/mpeg",
"mp21": "application/mp21",
"mp2a": "audio/mpeg",
"mp3": "audio/mpeg",
"mp4": "video/mp4",
"mp4a": "audio/mp4",
"mp4s": "application/mp4",
"mp4v": "video/mp4",
"mpc": "application/vnd.mophun.certificate",
"mpd": "application/dash+xml",
"mpe": "video/mpeg",
"mpeg": "video/mpeg",
"mpg": "video/mpeg",
"mpg4": "video/mp4",
"mpga": "audio/mpeg",
"mpkg": "application/vnd.apple.installer+xml",
"mpm": "application/vnd.blueice.multipass",
"mpn": "application/vnd.mophun.application",
"mpp": "application/vnd.ms-project",
"mpt": "application/vnd.ms-project",
"mpy": "application/vnd.ibm.minipay",
"mqy": "application/vnd.mobius.mqy",
"mrc": "application/marc",
"mrcx": "application/marcxml+xml",
"ms": "text/troff",
"mscml": "application/mediaservercontrol+xml",
"mseed": "application/vnd.fdsn.mseed",
"mseq": "application/vnd.mseq",
"msf": "application/vnd.epson.msf",
"msg": "application/vnd.ms-outlook",
"msh": "model/mesh",
"msi": "application/x-msdownload",
"msl": "application/vnd.mobius.msl",
"msm": "application/octet-stream",
"msp": "application/octet-stream",
"msty": "application/vnd.muvee.style",
"mtl": "model/mtl",
"mts": "model/vnd.mts",
"mus": "application/vnd.musician",
"musd": "application/mmt-usd+xml",
"musicxml": "application/vnd.recordare.musicxml+xml",
"mvb": "application/x-msmediaview",
"mwf": "application/vnd.mfer",
"mxf": "application/mxf",
"mxl": "application/vnd.recordare.musicxml",
"mxmf": "audio/mobile-xmf",
"mxml": "application/xv+xml",
"mxs": "application/vnd.triscape.mxs",
"mxu": "video/vnd.mpegurl",
"n-gage": "application/vnd.nokia.n-gage.symbian.install",
"n3": "text/n3",
"nb": "application/mathematica",
"nbp": "application/vnd.wolfram.player",
"nc": "application/x-netcdf",
"ncx": "application/x-dtbncx+xml",
"nfo": "text/x-nfo",
"ngdat": "application/vnd.nokia.n-gage.data",
"nitf": "application/vnd.nitf",
"nlu": "application/vnd.neurolanguage.nlu",
"nml": "application/vnd.enliven",
"nnd": "application/vnd.noblenet-directory",
"nns": "application/vnd.noblenet-sealer",
"nnw": "application/vnd.noblenet-web",
"npx": "image/vnd.net-fpx",
"nq": "application/n-quads",
"nsc": "application/x-conference",
"nsf": "application/vnd.lotus-notes",
"nt": "application/n-triples",
"ntf": "application/vnd.nitf",
"numbers": "application/vnd.apple.numbers",
"nzb": "application/x-nzb",
"oa2": "application/vnd.fujitsu.oasys2",
"oa3": "application/vnd.fujitsu.oasys3",
"oas": "application/vnd.fujitsu.oasys",
"obd": "application/x-msbinder",
"obgx": "application/vnd.openblox.game+xml",
"obj": "model/obj",
"oda": "application/oda",
"odb": "application/vnd.oasis.opendocument.database",
"odc": "application/vnd.oasis.opendocument.chart",
"odf": "application/vnd.oasis.opendocument.formula",
"odft": "application/vnd.oasis.opendocument.formula-template",
"odg": "application/vnd.oasis.opendocument.graphics",
"odi": "application/vnd.oasis.opendocument.image",
"odm": "application/vnd.oasis.opendocument.text-master",
"odp": "application/vnd.oasis.opendocument.presentation",
"ods": "application/vnd.oasis.opendocument.spreadsheet",
"odt": "application/vnd.oasis.opendocument.text",
"oga": "audio/ogg",
"ogex": "model/vnd.opengex",
"ogg": "audio/ogg",
"ogv": "video/ogg",
"ogx": "application/ogg",
"omdoc": "application/omdoc+xml",
"onepkg": "application/onenote",
"onetmp": "application/onenote",
"onetoc": "application/onenote",
"onetoc2": "application/onenote",
"opf": "application/oebps-package+xml",
"opml": "text/x-opml",
"oprc": "application/vnd.palm",
"opus": "audio/ogg",
"org": "text/x-org",
"osf": "application/vnd.yamaha.openscoreformat",
"osfpvg": "application/vnd.yamaha.openscoreformat.osfpvg+xml",
"osm": "application/vnd.openstreetmap.data+xml",
"otc": "application/vnd.oasis.opendocument.chart-template",
"otf": "font/otf",
"otg": "application/vnd.oasis.opendocument.graphics-template",
"oth": "application/vnd.oasis.opendocument.text-web",
"oti": "application/vnd.oasis.opendocument.image-template",
"otp": "application/vnd.oasis.opendocument.presentation-template",
"ots": "application/vnd.oasis.opendocument.spreadsheet-template",
"ott": "application/vnd.oasis.opendocument.text-template",
"ova": "application/x-virtualbox-ova",
"ovf": "application/x-virtualbox-ovf",
"owl": "application/rdf+xml",
"oxps": "application/oxps",
"oxt": "application/vnd.openofficeorg.extension",
"p": "text/x-pascal",
"p10": "application/pkcs10",
"p12": "application/x-pkcs12",
"p7b": "application/x-pkcs7-certificates",
"p7c": "application/pkcs7-mime",
"p7m": "application/pkcs7-mime",
"p7r": "application/x-pkcs7-certreqresp",
"p7s": "application/pkcs7-signature",
"p8": "application/pkcs8",
"pac": "application/x-ns-proxy-autoconfig",
"pages": "application/vnd.apple.pages",
"pas": "text/x-pascal",
"paw": "application/vnd.pawaafile",
"pbd": "application/vnd.powerbuilder6",
"pbm": "image/x-portable-bitmap",
"pcap": "application/vnd.tcpdump.pcap",
"pcf": "application/x-font-pcf",
"pcl": "application/vnd.hp-pcl",
"pclxl": "application/vnd.hp-pclxl",
"pct": "image/x-pict",
"pcurl": "application/vnd.curl.pcurl",
"pcx": "image/x-pcx",
"pdb": "application/x-pilot",
"pde": "text/x-processing",
"pdf": "application/pdf",
"pem": "application/x-x509-ca-cert",
"pfa": "application/x-font-type1",
"pfb": "application/x-font-type1",
"pfm": "application/x-font-type1",
"pfr": "application/font-tdpfr",
"pfx": "application/x-pkcs12",
"pgm": "image/x-portable-graymap",
"pgn": "application/x-chess-pgn",
"pgp": "application/pgp-encrypted",
"php": "application/x-httpd-php",
"pic": "image/x-pict",
"pkg": "application/octet-stream",
"pki": "application/pkixcmp",
"pkipath": "application/pkix-pkipath",
"pkpass": "application/vnd.apple.pkpass",
"pl": "application/x-perl",
"plb": "application/vnd.3gpp.pic-bw-large",
"plc": "application/vnd.mobius.plc",
"plf": "application/vnd.pocketlearn",
"pls": "application/pls+xml",
"pm": "application/x-perl",
"pml": "application/vnd.ctc-posml",
"png": "image/png",
"pnm": "image/x-portable-anymap",
"portpkg": "application/vnd.macports.portpkg",
"pot": "application/vnd.ms-powerpoint",
"potm": "application/vnd.ms-powerpoint.template.macroenabled.12",
"potx": "application/vnd.openxmlformats-officedocument.presentationml.template",
"ppam": "application/vnd.ms-powerpoint.addin.macroenabled.12",
"ppd": "application/vnd.cups-ppd",
"ppm": "image/x-portable-pixmap",
"pps": "application/vnd.ms-powerpoint",
"ppsm": "application/vnd.ms-powerpoint.slideshow.macroenabled.12",
"ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
"ppt": "application/vnd.ms-powerpoint",
"pptm": "application/vnd.ms-powerpoint.presentation.macroenabled.12",
"pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
"pqa": "application/vnd.palm",
"prc": "application/x-pilot",
"pre": "application/vnd.lotus-freelance",
"prf": "application/pics-rules",
"provx": "application/provenance+xml",
"ps": "application/postscript",
"psb": "application/vnd.3gpp.pic-bw-small",
"psd": "image/vnd.adobe.photoshop",
"psf": "application/x-font-linux-psf",
"pskcxml": "application/pskc+xml",
"pti": "image/prs.pti",
"ptid": "application/vnd.pvi.ptid1",
"pub": "application/x-mspublisher",
"pvb": "application/vnd.3gpp.pic-bw-var",
"pwn": "application/vnd.3m.post-it-notes",
"pya": "audio/vnd.ms-playready.media.pya",
"pyv": "video/vnd.ms-playready.media.pyv",
"qam": "application/vnd.epson.quickanime",
"qbo": "application/vnd.intu.qbo",
"qfx": "application/vnd.intu.qfx",
"qps": "application/vnd.publishare-delta-tree",
"qt": "video/quicktime",
"qwd": "application/vnd.quark.quarkxpress",
"qwt": "application/vnd.quark.quarkxpress",
"qxb": "application/vnd.quark.quarkxpress",
"qxd": "application/vnd.quark.quarkxpress",
"qxl": "application/vnd.quark.quarkxpress",
"qxt": "application/vnd.quark.quarkxpress",
"ra": "audio/x-realaudio",
"ram": "audio/x-pn-realaudio",
"raml": "application/raml+yaml",
"rapd": "application/route-apd+xml",
"rar": "application/x-rar-compressed",
"ras": "image/x-cmu-raster",
"rcprofile": "application/vnd.ipunplugged.rcprofile",
"rdf": "application/rdf+xml",
"rdz": "application/vnd.data-vision.rdz",
"relo": "application/p2p-overlay+xml",
"rep": "application/vnd.businessobjects",
"res": "application/x-dtbresource+xml",
"rgb": "image/x-rgb",
"rif": "application/reginfo+xml",
"rip": "audio/vnd.rip",
"ris": "application/x-research-info-systems",
"rl": "application/resource-lists+xml",
"rlc": "image/vnd.fujixerox.edmics-rlc",
"rld": "application/resource-lists-diff+xml",
"rm": "application/vnd.rn-realmedia",
"rmi": "audio/midi",
"rmp": "audio/x-pn-realaudio-plugin",
"rms": "application/vnd.jcp.javame.midlet-rms",
"rmvb": "application/vnd.rn-realmedia-vbr",
"rnc": "application/relax-ng-compact-syntax",
"rng": "application/xml",
"roa": "application/rpki-roa",
"roff": "text/troff",
"rp9": "application/vnd.cloanto.rp9",
"rpm": "application/x-redhat-package-manager",
"rpss": "application/vnd.nokia.radio-presets",
"rpst": "application/vnd.nokia.radio-preset",
"rq": "application/sparql-query",
"rs": "application/rls-services+xml",
"rsat": "application/atsc-rsat+xml",
"rsd": "application/rsd+xml",
"rsheet": "application/urc-ressheet+xml",
"rss": "application/rss+xml",
"rtf": "text/rtf",
"rtx": "text/richtext",
"run": "application/x-makeself",
"rusd": "application/route-usd+xml",
"s": "text/x-asm",
"s3m": "audio/s3m",
"saf": "application/vnd.yamaha.smaf-audio",
"sass": "text/x-sass",
"sbml": "application/sbml+xml",
"sc": "application/vnd.ibm.secure-container",
"scd": "application/x-msschedule",
"scm": "application/vnd.lotus-screencam",
"scq": "application/scvp-cv-request",
"scs": "application/scvp-cv-response",
"scss": "text/x-scss",
"scurl": "text/vnd.curl.scurl",
"sda": "application/vnd.stardivision.draw",
"sdc": "application/vnd.stardivision.calc",
"sdd": "application/vnd.stardivision.impress",
"sdkd": "application/vnd.solent.sdkm+xml",
"sdkm": "application/vnd.solent.sdkm+xml",
"sdp": "application/sdp",
"sdw": "application/vnd.stardivision.writer",
"sea": "application/x-sea",
"see": "application/vnd.seemail",
"seed": "application/vnd.fdsn.seed",
"sema": "application/vnd.sema",
"semd": "application/vnd.semd",
"semf": "application/vnd.semf",
"senmlx": "application/senml+xml",
"sensmlx": "application/sensml+xml",
"ser": "application/java-serialized-object",
"setpay": "application/set-payment-initiation",
"setreg": "application/set-registration-initiation",
"sfd-hdstx": "application/vnd.hydrostatix.sof-data",
"sfs": "application/vnd.spotfire.sfs",
"sfv": "text/x-sfv",
"sgi": "image/sgi",
"sgl": "application/vnd.stardivision.writer-global",
"sgm": "text/sgml",
"sgml": "text/sgml",
"sh": "application/x-sh",
"shar": "application/x-shar",
"shex": "text/shex",
"shf": "application/shf+xml",
"shtml": "text/html",
"sid": "image/x-mrsid-image",
"sieve": "application/sieve",
"sig": "application/pgp-signature",
"sil": "audio/silk",
"silo": "model/mesh",
"sis": "application/vnd.symbian.install",
"sisx": "application/vnd.symbian.install",
"sit": "application/x-stuffit",
"sitx": "application/x-stuffitx",
"siv": "application/sieve",
"skd": "application/vnd.koan",
"skm": "application/vnd.koan",
"skp": "application/vnd.koan",
"skt": "application/vnd.koan",
"sldm": "application/vnd.ms-powerpoint.slide.macroenabled.12",
"sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide",
"slim": "text/slim",
"slm": "text/slim",
"sls": "application/route-s-tsid+xml",
"slt": "application/vnd.epson.salt",
"sm": "application/vnd.stepmania.stepchart",
"smf": "application/vnd.stardivision.math",
"smi": "application/smil+xml",
"smil": "application/smil+xml",
"smv": "video/x-smv",
"smzip": "application/vnd.stepmania.package",
"snd": "audio/basic",
"snf": "application/x-font-snf",
"so": "application/octet-stream",
"spc": "application/x-pkcs7-certificates",
"spdx": "text/spdx",
"spf": "application/vnd.yamaha.smaf-phrase",
"spl": "application/x-futuresplash",
"spot": "text/vnd.in3d.spot",
"spp": "application/scvp-vp-response",
"spq": "application/scvp-vp-request",
"spx": "audio/ogg",
"sql": "application/x-sql",
"src": "application/x-wais-source",
"srt": "application/x-subrip",
"sru": "application/sru+xml",
"srx": "application/sparql-results+xml",
"ssdl": "application/ssdl+xml",
"sse": "application/vnd.kodak-descriptor",
"ssf": "application/vnd.epson.ssf",
"ssml": "application/ssml+xml",
"st": "application/vnd.sailingtracker.track",
"stc": "application/vnd.sun.xml.calc.template",
"std": "application/vnd.sun.xml.draw.template",
"stf": "application/vnd.wt.stf",
"sti": "application/vnd.sun.xml.impress.template",
"stk": "application/hyperstudio",
"stl": "model/stl",
"str": "application/vnd.pg.format",
"stw": "application/vnd.sun.xml.writer.template",
"styl": "text/stylus",
"stylus": "text/stylus",
"sub": "text/vnd.dvb.subtitle",
"sus": "application/vnd.sus-calendar",
"susp": "application/vnd.sus-calendar",
"sv4cpio": "application/x-sv4cpio",
"sv4crc": "application/x-sv4crc",
"svc": "application/vnd.dvb.service",
"svd": "application/vnd.svd",
"svg": "image/svg+xml",
"svgz": "image/svg+xml",
"swa": "application/x-director",
"swf": "application/x-shockwave-flash",
"swi": "application/vnd.aristanetworks.swi",
"swidtag": "application/swid+xml",
"sxc": "application/vnd.sun.xml.calc",
"sxd": "application/vnd.sun.xml.draw",
"sxg": "application/vnd.sun.xml.writer.global",
"sxi": "application/vnd.sun.xml.impress",
"sxm": "application/vnd.sun.xml.math",
"sxw": "application/vnd.sun.xml.writer",
"t": "text/troff",
"t3": "application/x-t3vm-image",
"t38": "image/t38",
"taglet": "application/vnd.mynfc",
"tao": "application/vnd.tao.intent-module-archive",
"tap": "image/vnd.tencent.tap",
"tar": "application/x-tar",
"tcap": "application/vnd.3gpp2.tcap",
"tcl": "application/x-tcl",
"td": "application/urc-targetdesc+xml",
"teacher": "application/vnd.smart.teacher",
"tei": "application/tei+xml",
"teicorpus": "application/tei+xml",
"tex": "application/x-tex",
"texi": "application/x-texinfo",
"texinfo": "application/x-texinfo",
"text": "text/plain",
"tfi": "application/thraud+xml",
"tfm": "application/x-tex-tfm",
"tfx": "image/tiff-fx",
"tga": "image/x-tga",
"thmx": "application/vnd.ms-officetheme",
"tif": "image/tiff",
"tiff": "image/tiff",
"tk": "application/x-tcl",
"tmo": "application/vnd.tmobile-livetv",
"toml": "application/toml",
"torrent": "application/x-bittorrent",
"tpl": "application/vnd.groove-tool-template",
"tpt": "application/vnd.trid.tpt",
"tr": "text/troff",
"tra": "application/vnd.trueapp",
"trm": "application/x-msterminal",
"ts": "video/mp2t",
"tsd": "application/timestamped-data",
"tsv": "text/tab-separated-values",
"ttc": "font/collection",
"ttf": "font/ttf",
"ttl": "text/turtle",
"ttml": "application/ttml+xml",
"twd": "application/vnd.simtech-mindmapper",
"twds": "application/vnd.simtech-mindmapper",
"txd": "application/vnd.genomatix.tuxedo",
"txf": "application/vnd.mobius.txf",
"txt": "text/plain",
"u32": "application/x-authorware-bin",
"u8dsn": "message/global-delivery-status",
"u8hdr": "message/global-headers",
"u8mdn": "message/global-disposition-notification",
"u8msg": "message/global",
"ubj": "application/ubjson",
"udeb": "application/x-debian-package",
"ufd": "application/vnd.ufdl",
"ufdl": "application/vnd.ufdl",
"ulx": "application/x-glulx",
"umj": "application/vnd.umajin",
"unityweb": "application/vnd.unity",
"uoml": "application/vnd.uoml+xml",
"uri": "text/uri-list",
"uris": "text/uri-list",
"urls": "text/uri-list",
"usdz": "model/vnd.usdz+zip",
"ustar": "application/x-ustar",
"utz": "application/vnd.uiq.theme",
"uu": "text/x-uuencode",
"uva": "audio/vnd.dece.audio",
"uvd": "application/vnd.dece.data",
"uvf": "application/vnd.dece.data",
"uvg": "image/vnd.dece.graphic",
"uvh": "video/vnd.dece.hd",
"uvi": "image/vnd.dece.graphic",
"uvm": "video/vnd.dece.mobile",
"uvp": "video/vnd.dece.pd",
"uvs": "video/vnd.dece.sd",
"uvt": "application/vnd.dece.ttml+xml",
"uvu": "video/vnd.uvvu.mp4",
"uvv": "video/vnd.dece.video",
"uvva": "audio/vnd.dece.audio",
"uvvd": "application/vnd.dece.data",
"uvvf": "application/vnd.dece.data",
"uvvg": "image/vnd.dece.graphic",
"uvvh": "video/vnd.dece.hd",
"uvvi": "image/vnd.dece.graphic",
"uvvm": "video/vnd.dece.mobile",
"uvvp": "video/vnd.dece.pd",
"uvvs": "video/vnd.dece.sd",
"uvvt": "application/vnd.dece.ttml+xml",
"uvvu": "video/vnd.uvvu.mp4",
"uvvv": "video/vnd.dece.video",
"uvvx": "application/vnd.dece.unspecified",
"uvvz": "application/vnd.dece.zip",
"uvx": "application/vnd.dece.unspecified",
"uvz": "application/vnd.dece.zip",
"vbox": "application/x-virtualbox-vbox",
"vbox-extpack": "application/x-virtualbox-vbox-extpack",
"vcard": "text/vcard",