const imageExt = [ 'jpeg', 'gif', 'png', 'png', 'svg', 'bmp', 'ico', 'jpg', 'webp', 'avif', 'heif', 'heifs', 'heic', 'heic-sequence', ] const videoExt = [ 'webm', 'mpg', 'mp2', 'mpeg', 'ogg', 'mp4', 'm4v', 'avi', 'wmv', 'mov', 'qt', 'flv', 'mkv', '3gp', '3g2', 'vob', 'ts', ] const wordExt = ['txt', 'doc', 'docx'] const excelExt = ['xls', 'xlsx', 'csv'] const presentationExt = ['ppt', 'pptx'] const zipExt = ['zip', 'rar'] const officeExt = [ ...wordExt, ...excelExt, ...presentationExt, ...zipExt, 'css', 'html', 'php', 'c', 'cpp', 'h', 'hpp', 'js', 'pdf', 'pages', 'ai', 'psd', 'tiff', 'dxf', 'svg', 'eps', 'ps', 'ttf', 'xps', ] const isAudio = (name: string, mimetype?: string) => { return name?.toLowerCase().endsWith('.mp3') || mimetype?.startsWith('audio/') } const isVideo = (name: string, mimetype?: string) => { return videoExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) || mimetype?.startsWith('video/') } const isImage = (name: string, mimetype?: string) => { return imageExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) || mimetype?.startsWith('image/') } const isPdf = (name: string, mimetype?: string) => { return name?.toLowerCase().endsWith('.pdf') || mimetype?.startsWith('application/pdf') } const isWord = (name: string, _mimetype?: string) => { return wordExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) } const isExcel = (name: string, _mimetype?: string) => { return excelExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) } const isPresentation = (name: string, _mimetype?: string) => { return presentationExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) } const isOffice = (name: string, _mimetype?: string) => { return officeExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) } const isZip = (name: string, _mimetype?: string) => { return zipExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) } export { isImage, imageExt, isVideo, isPdf, isOffice, isAudio, isZip, isWord, isExcel, isPresentation } // Ref : https://stackoverflow.com/a/12002275 // Tested in Mozilla Firefox browser, Chrome export function readFile(FileElement: HTMLInputElement, CallBackFunction: (content?: any) => void) { try { if (!FileElement.files || !FileElement.files.length) { return CallBackFunction() } const file = FileElement.files[0] if (file) { const reader = new FileReader() reader.readAsText(file, 'UTF-8') reader.onload = function (evt) { CallBackFunction(evt.target?.result) } reader.onerror = function () { CallBackFunction() } } } catch (Exception) { const fallBack = ieReadFile(FileElement.value) // eslint-disable-next-line eqeqeq if (fallBack != false) { CallBackFunction(fallBack) } } } /// Reading files with Internet Explorer function ieReadFile(filename: string) { try { const fso = new ActiveXObject('Scripting.FileSystemObject') const fh = fso.OpenTextFile(filename, 1) const contents = fh.ReadAll() fh.Close() return contents } catch (Exception) { return false } } export function extractImageSrcFromRawHtml(rawText: string) { // Parse the provided HTML string const parser = new DOMParser() const doc = parser.parseFromString(rawText, 'text/html') // Extract the img element const imgElement = doc.querySelector('img') // Check if the img element exists if (imgElement) { // Extract the src attribute return imgElement.getAttribute('src') } } export const getReadableFileSize = (sizeInBytes: number) => { const i = Math.min(Math.floor(Math.log(sizeInBytes) / Math.log(1024)), 4) return `${(sizeInBytes / 1024 ** i).toFixed(2) * 1} ${['B', 'kB', 'MB', 'GB', 'TB'][i]}` }