Created
January 22, 2022 07:35
-
-
Save hendrasyp/5f7a8276ec72e52e60f47e52501c4972 to your computer and use it in GitHub Desktop.
JSCore By KiNET - Suhendra Yohana Putra
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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('___', ' '); | |
//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", | |
"vcd": "application/x-cdlink", | |
"vcf": "text/x-vcard", | |
"vcg": "application/vnd.groove-vcard", | |
"vcs": "text/x-vcalendar", | |
"vcx": "application/vnd.vcx", | |
"vdi": "application/x-virtualbox-vdi", | |
"vhd": "application/x-virtualbox-vhd", | |
"vis": "application/vnd.visionary", | |
"viv": "video/vnd.vivo", | |
"vmdk": "application/x-virtualbox-vmdk", | |
"vob": "video/x-ms-vob", | |
"vor": "application/vnd.stardivision.writer", | |
"vox": "application/x-authorware-bin", | |
"vrml": "model/vrml", | |
"vsd": "application/vnd.visio", | |
"vsf": "application/vnd.vsf", | |
"vss": "application/vnd.visio", | |
"vst": "application/vnd.visio", | |
"vsw": "application/vnd.visio", | |
"vtf": "image/vnd.valve.source.texture", | |
"vtt": "text/vtt", | |
"vtu": "model/vnd.vtu", | |
"vxml": "application/voicexml+xml", | |
"w3d": "application/x-director", | |
"wad": "application/x-doom", | |
"wadl": "application/vnd.sun.wadl+xml", | |
"war": "application/java-archive", | |
"wasm": "application/wasm", | |
"wav": "audio/x-wav", | |
"wax": "audio/x-ms-wax", | |
"wbmp": "image/vnd.wap.wbmp", | |
"wbs": "application/vnd.criticaltools.wbs+xml", | |
"wbxml": "application/vnd.wap.wbxml", | |
"wcm": "application/vnd.ms-works", | |
"wdb": "application/vnd.ms-works", | |
"wdp": "image/vnd.ms-photo", | |
"weba": "audio/webm", | |
"webapp": "application/x-web-app-manifest+json", | |
"webm": "video/webm", | |
"webmanifest": "application/manifest+json", | |
"webp": "image/webp", | |
"wg": "application/vnd.pmi.widget", | |
"wgt": "application/widget", | |
"wks": "application/vnd.ms-works", | |
"wm": "video/x-ms-wm", | |
"wma": "audio/x-ms-wma", | |
"wmd": "application/x-ms-wmd", | |
"wmf": "image/wmf", | |
"wml": "text/vnd.wap.wml", | |
"wmlc": "application/vnd.wap.wmlc", | |
"wmls": "text/vnd.wap.wmlscript", | |
"wmlsc": "application/vnd.wap.wmlscriptc", | |
"wmv": "video/x-ms-wmv", | |
"wmx": "video/x-ms-wmx", | |
"wmz": "application/x-msmetafile", | |
"woff": "font/woff", | |
"woff2": "font/woff2", | |
"wpd": "application/vnd.wordperfect", | |
"wpl": "application/vnd.ms-wpl", | |
"wps": "application/vnd.ms-works", | |
"wqd": "application/vnd.wqd", | |
"wri": "application/x-mswrite", | |
"wrl": "model/vrml", | |
"wsc": "message/vnd.wfa.wsc", | |
"wsdl": "application/wsdl+xml", | |
"wspolicy": "application/wspolicy+xml", | |
"wtb": "application/vnd.webturbo", | |
"wvx": "video/x-ms-wvx", | |
"x32": "application/x-authorware-bin", | |
"x3d": "model/x3d+xml", | |
"x3db": "model/x3d+fastinfoset", | |
"x3dbz": "model/x3d+binary", | |
"x3dv": "model/x3d-vrml", | |
"x3dvz": "model/x3d+vrml", | |
"x3dz": "model/x3d+xml", | |
"x_b": "model/vnd.parasolid.transmit.binary", | |
"x_t": "model/vnd.parasolid.transmit.text", | |
"xaml": "application/xaml+xml", | |
"xap": "application/x-silverlight-app", | |
"xar": "application/vnd.xara", | |
"xav": "application/xcap-att+xml", | |
"xbap": "application/x-ms-xbap", | |
"xbd": "application/vnd.fujixerox.docuworks.binder", | |
"xbm": "image/x-xbitmap", | |
"xca": "application/xcap-caps+xml", | |
"xcs": "application/calendar+xml", | |
"xdf": "application/xcap-diff+xml", | |
"xdm": "application/vnd.syncml.dm+xml", | |
"xdp": "application/vnd.adobe.xdp+xml", | |
"xdssc": "application/dssc+xml", | |
"xdw": "application/vnd.fujixerox.docuworks", | |
"xel": "application/xcap-el+xml", | |
"xenc": "application/xenc+xml", | |
"xer": "application/patch-ops-error+xml", | |
"xfdf": "application/vnd.adobe.xfdf", | |
"xfdl": "application/vnd.xfdl", | |
"xht": "application/xhtml+xml", | |
"xhtml": "application/xhtml+xml", | |
"xhvml": "application/xv+xml", | |
"xif": "image/vnd.xiff", | |
"xla": "application/vnd.ms-excel", | |
"xlam": "application/vnd.ms-excel.addin.macroenabled.12", | |
"xlc": "application/vnd.ms-excel", | |
"xlf": "application/xliff+xml", | |
"xlm": "application/vnd.ms-excel", | |
"xls": "application/vnd.ms-excel", | |
"xlsb": "application/vnd.ms-excel.sheet.binary.macroenabled.12", | |
"xlsm": "application/vnd.ms-excel.sheet.macroenabled.12", | |
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", | |
"xlt": "application/vnd.ms-excel", | |
"xltm": "application/vnd.ms-excel.template.macroenabled.12", | |
"xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template", | |
"xlw": "application/vnd.ms-excel", | |
"xm": "audio/xm", | |
"xml": "text/xml", | |
"xns": "application/xcap-ns+xml", | |
"xo": "application/vnd.olpc-sugar", | |
"xop": "application/xop+xml", | |
"xpi": "application/x-xpinstall", | |
"xpl": "application/xproc+xml", | |
"xpm": "image/x-xpixmap", | |
"xpr": "application/vnd.is-xpr", | |
"xps": "application/vnd.ms-xpsdocument", | |
"xpw": "application/vnd.intercon.formnet", | |
"xpx": "application/vnd.intercon.formnet", | |
"xsd": "application/xml", | |
"xsl": "application/xslt+xml", | |
"xslt": "application/xslt+xml", | |
"xsm": "application/vnd.syncml+xml", | |
"xspf": "application/xspf+xml", | |
"xul": "application/vnd.mozilla.xul+xml", | |
"xvm": "application/xv+xml", | |
"xvml": "application/xv+xml", | |
"xwd": "image/x-xwindowdump", | |
"xyz": "chemical/x-xyz", | |
"xz": "application/x-xz", | |
"yaml": "text/yaml", | |
"yang": "application/yang", | |
"yin": "application/yin+xml", | |
"yml": "text/yaml", | |
"ymp": "text/x-suse-ymp", | |
"z1": "application/x-zmachine", | |
"z2": "application/x-zmachine", | |
"z3": "application/x-zmachine", | |
"z4": "application/x-zmachine", | |
"z5": "application/x-zmachine", | |
"z6": "application/x-zmachine", | |
"z7": "application/x-zmachine", | |
"z8": "application/x-zmachine", | |
"zaz": "application/vnd.zzazz.deck+xml", | |
"zip": "application/zip", | |
"zir": "application/vnd.zul", | |
"zirz": "application/vnd.zul", | |
"zmm": "application/vnd.handheld-entertainment+xml" | |
}, | |
saveFile: function (fileName, ext, mimeType, blobData) { | |
let newFileName = fileName + ext; | |
// console.log(blobData); | |
if (data !== null && navigator.msSaveBlob) | |
return navigator.msSaveBlob(blobData, newFileName); | |
var a = $("<a style='display: none;'/>"); | |
var url = window.URL.createObjectURL(blobData); | |
// console.log(url); | |
// console.log(newFileName); | |
a.attr("href", url); | |
a.attr("download", newFileName); | |
$("body").append(a); | |
a[0].click(); | |
window.URL.revokeObjectURL(url); | |
a.remove(); | |
}, | |
base64toBlob(b64Data, contentType) { | |
const byteCharacters = atob(b64Data); | |
const byteArrays = []; | |
for (let offset = 0; offset < byteCharacters.length; offset += 512) { | |
const slice = byteCharacters.slice(offset, offset + 512); | |
const byteNumbers = new Array(slice.length); | |
for (let i = 0; i < slice.length; i++) { | |
byteNumbers[i] = slice.charCodeAt(i); | |
} | |
const byteArray = new Uint8Array(byteNumbers); | |
byteArrays.push(byteArray); | |
} | |
const blob = new Blob(byteArrays, { type: contentType }); | |
return blob; | |
}, | |
jsonToDataAttribute: function (json) { | |
var dataAttr = ""; | |
Object.keys(json).forEach(function (key) { | |
dataAttr = dataAttr + 'data-' + key + '="' + json[key] + '" '; | |
}); | |
return dataAttr; | |
}, | |
activeUserRole: { | |
superAdmin: function () { | |
if (_getVal('hidIsSuperAdmin') === 'true') { | |
return true; | |
} else { | |
return false; | |
} | |
}, | |
itSupport: function () { | |
var loggedUserRoleList = $("#hidUserRoleList").val() | |
loggedUserRoleList = loggedUserRoleList.split(' ').join(''); | |
var loginRoleArray = loggedUserRoleList.split(","); | |
var isIT = loginRoleArray.indexOf("it"); | |
if (isIT > -1) { | |
return true; | |
} else { | |
return false; | |
} | |
} | |
}, | |
getRandomGuid: function (loadElement, target) { | |
$.when(vmNet.ajax.post('/api/generate-random-guid', { foo: 'bar' }, loadElement)).done(function (result) { | |
_setVal(target, result.message_details); | |
}); | |
}, | |
textAreaAdjust: function (o) { | |
let element = $(o); | |
// var elementHeight = o.css('height','1px'); | |
let elementScrollHeight = element.prop('scrollHeight'); | |
// elementHeight = o.css('height','1px'); | |
element.css('height', '1px'); | |
element.css('height', (25 + elementScrollHeight) + "px"); | |
}, | |
toInteger(obj) { | |
return parseInt(obj); | |
}, | |
getExtensionFromString(_string) { | |
var result = _string.substring(_string.lastIndexOf(".") + 1).trim(); | |
// | |
return result.toLowerCase(); | |
}, | |
getFaIconForFile(fileName) { | |
var fileExtension = this.getExtensionFromString(fileName); | |
var icon = ""; | |
switch (fileExtension) { | |
case 'xls': | |
case 'xlsx': | |
icon = 'fa fa-file-excel-o'; | |
break; | |
case 'doc': | |
case 'docx': | |
icon = 'fa fa-file-word-o'; | |
break; | |
case 'pdf': | |
icon = 'fa fa-file-pdf-o'; | |
break; | |
case 'txt': | |
icon = 'fa fa-file-text-o'; | |
break; | |
case 'png': | |
case 'jpg': | |
case 'jpeg': | |
case 'bmp': | |
icon = 'fa fa-file-image-o'; | |
break; | |
} | |
return icon; | |
}, | |
imgDataType: 'image', | |
get imgDataType() { | |
return 'image'; | |
}, | |
fileRootPath: '..\\', | |
get fileRootPath() { | |
return '..\\'; | |
}, | |
boolTrue: true, | |
get boolTrue() { | |
return true; | |
}, | |
boolFalse: false, | |
get boolFalse() { | |
return false; | |
}, | |
// https://www.sitepoint.com/get-url-parameters-with-javascript/ | |
getQueryString(param) { | |
const queryString = window.location.search; | |
const urlParams = new URLSearchParams(queryString); | |
const qString = urlParams.get(param); | |
return qString; | |
}, | |
implode(arrToJoin, separatedWith) { | |
return arrToJoin.join(separatedWith); | |
}, | |
explode(stringToSplit, separatedWith) { | |
return stringToSplit.split(separatedWith); | |
}, | |
findInJson(src, val) { | |
return src.some(item => _.some(src, val)); | |
}, | |
stringify(obj) { | |
return JSON.stringify(obj); | |
}, | |
contains(str1, str2) { | |
let strFrom = str1.toLowerCase(); | |
let strSearch = str2.toLowerCase(); | |
if (strFrom.indexOf(strSearch) != -1) { | |
return true; | |
} else { | |
return false; | |
} | |
}, | |
loading(pstate, pelement) { | |
if (pelement == "") { | |
pelement = "#content-wrapper" | |
} | |
if (pstate === "show") { | |
$(pelement).LoadingOverlay("show", { | |
image: '', | |
background: "rgba(255, 255, 255, 0.2)", | |
size: "60", | |
maxSize: "60", | |
minSize: "50", | |
fontawesome: 'fa fa-refresh fa-spin' | |
}); | |
} else { | |
$(pelement).LoadingOverlay("hide", true); | |
} | |
}, | |
goNewTab(url, target) { | |
if (target !== '') { | |
window.open(url, target); | |
} else { | |
window.open(url, '_blank'); | |
} | |
}, | |
clearNonNumeric(str) { | |
return str.replace(/\D/g, ''); | |
}, | |
uploadFileXhr: function () { | |
} | |
} | |
function insertAtCaret(areaId, text) { | |
CKEDITOR.instances[areaId].insertText(text); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment