keeweb/app/scripts/models/attachment-model.js

173 lines
3.7 KiB
JavaScript
Raw Normal View History

2019-09-17 20:08:58 +02:00
import { Model } from 'framework/model';
2015-10-17 23:49:24 +02:00
2019-09-17 20:08:58 +02:00
class AttachmentModel extends Model {
2019-08-18 10:17:09 +02:00
getBinary() {
2017-01-31 07:50:28 +01:00
let data = this.data;
2015-10-17 23:49:24 +02:00
if (data && data.ref) {
data = data.value;
}
if (data && data.getBinary) {
data = data.getBinary();
}
if (data instanceof ArrayBuffer && data.byteLength) {
data = new Uint8Array(data);
}
if (data instanceof Uint8Array) {
return data;
}
}
2019-09-17 21:39:06 +02:00
static fromAttachment(att) {
const ext = getExtension(att.title);
return new AttachmentModel({
title: att.title,
data: att.data,
ext,
icon: getIcon(ext),
mimeType: getMimeType(ext)
});
}
2019-09-17 20:08:58 +02:00
}
AttachmentModel.defineModelProperties({
title: undefined,
data: undefined,
ext: undefined,
icon: undefined,
mimeType: undefined
2015-10-17 23:49:24 +02:00
});
2019-09-17 20:08:58 +02:00
function getExtension(fileName) {
const ext = fileName ? fileName.split('.').pop() : undefined;
return ext ? ext.toLowerCase() : undefined;
}
function getIcon(ext) {
switch (ext) {
case 'txt':
case 'log':
case 'rtf':
case 'pem':
2020-11-25 18:20:53 +01:00
return 'file-alt-o';
2019-09-17 20:08:58 +02:00
case 'html':
case 'htm':
case 'js':
case 'css':
case 'xml':
case 'config':
case 'json':
case 'yaml':
case 'cpp':
case 'c':
case 'h':
case 'cc':
case 'hpp':
case 'mm':
case 'cs':
case 'php':
case 'sh':
case 'py':
case 'java':
case 'rb':
case 'cfg':
case 'properties':
case 'yml':
case 'asm':
case 'bat':
return 'file-code-o';
case 'pdf':
return 'file-pdf-o';
case 'zip':
case 'rar':
case 'bz':
case 'bz2':
case '7z':
case 'gzip':
case 'gz':
case 'tar':
case 'cab':
case 'ace':
case 'dmg':
case 'jar':
return 'file-archive-o';
case 'doc':
case 'docx':
return 'file-word-o';
case 'xls':
case 'xlsx':
return 'file-excel-o';
case 'ppt':
case 'pptx':
return 'file-powerpoint-o';
case 'jpeg':
case 'jpg':
case 'png':
case 'gif':
case 'bmp':
case 'tiff':
case 'svg':
case 'ico':
case 'psd':
return 'file-image-o';
case 'avi':
case 'mp4':
case '3gp':
case 'm4v':
case 'mov':
case 'mpeg':
case 'mpg':
case 'mpe':
return 'file-video-o';
case 'mp3':
case 'wav':
case 'flac':
return 'file-audio-o';
}
return 'file-o';
}
function getMimeType(ext) {
switch (ext) {
case 'txt':
case 'log':
case 'html':
case 'htm':
case 'js':
case 'css':
case 'xml':
case 'config':
case 'json':
case 'yaml':
case 'cpp':
case 'c':
case 'h':
case 'cc':
case 'hpp':
case 'mm':
case 'cs':
case 'php':
case 'sh':
case 'py':
case 'java':
case 'rb':
case 'cfg':
case 'properties':
case 'yml':
case 'asm':
case 'pem':
return 'text/plain';
case 'pdf':
return 'application/pdf';
case 'jpeg':
case 'jpg':
case 'png':
case 'gif':
case 'bmp':
case 'tiff':
case 'svg':
return 'image/' + ext;
}
}
2019-09-15 14:16:32 +02:00
export { AttachmentModel };