UNPKG

angular-3d-viewer

Version:
131 lines (112 loc) 2.95 kB
/** * File source identifier for import. * @enum */ export const FileSource = { /** The file is provided by a URL. */ Url : 1, /** The file is provided by a {@link File} object. */ File : 2, /** Used internally if a file is originated by a compressed archive. */ Decompressed : 3 }; export const FileFormat = { Text : 1, Binary : 2 }; export function GetFileName (filePath) { let fileName = filePath; let firstParamIndex = fileName.indexOf ('?'); if (firstParamIndex !== -1) { fileName = fileName.substring (0, firstParamIndex); } let firstSeparator = fileName.lastIndexOf ('/'); if (firstSeparator === -1) { firstSeparator = fileName.lastIndexOf ('\\'); } if (firstSeparator !== -1) { fileName = fileName.substring (firstSeparator + 1); } return decodeURI (fileName); } export function GetFileExtension (filePath) { let fileName = GetFileName (filePath); let firstPoint = fileName.lastIndexOf ('.'); if (firstPoint === -1) { return ''; } let extension = fileName.substring (firstPoint + 1); return extension.toLowerCase (); } export function RequestUrl (url, onProgress) { return new Promise ((resolve, reject) => { let request = new XMLHttpRequest (); request.open ('GET', url, true); request.onprogress = (event) => { onProgress (event.loaded, event.total); }; request.onload = () => { if (request.status === 200) { resolve (request.response); } else { reject (); } }; request.onerror = () => { reject (); }; request.responseType = 'arraybuffer'; request.send (null); }); } export function ReadFile (file, onProgress) { return new Promise ((resolve, reject) => { let reader = new FileReader (); reader.onprogress = (event) => { onProgress (event.loaded, event.total); }; reader.onloadend = (event) => { if (event.target.readyState === FileReader.DONE) { resolve (event.target.result); } }; reader.onerror = () => { reject (); }; reader.readAsArrayBuffer (file); }); } export function TransformFileHostUrls (urls) { for (let i = 0; i < urls.length; i++) { let url = urls[i]; if (url.search (/www\.dropbox\.com/u) !== -1) { url = url.replace ('www.dropbox.com', 'dl.dropbox.com'); let separatorPos = url.indexOf ('?'); if (separatorPos !== -1) { url = url.substring (0, separatorPos); } urls[i] = url; } else if (url.search (/github\.com/u) !== -1) { url = url.replace ('github.com', 'raw.githubusercontent.com'); url = url.replace ('/blob', ''); let separatorPos = url.indexOf ('?'); if (separatorPos !== -1) { url = url.substring (0, separatorPos); } urls[i] = url; } } } export function IsUrl (str) { const regex = /^https?:\/\/\S+$/g; const match = str.match (regex); return match !== null; }