You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.0 KiB
106 lines
3.0 KiB
/*
|
|
* Minio Cloud Storage (C) 2016 Minio, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import mimedb from 'mime-types'
|
|
|
|
const isFolder = (name, contentType) => {
|
|
if (name.endsWith('/')) return true
|
|
return false
|
|
}
|
|
|
|
const isPdf = (name, contentType) => {
|
|
if (contentType === 'application/pdf') return true
|
|
return false
|
|
}
|
|
|
|
const isZip = (name, contentType) => {
|
|
if (!contentType || !contentType.includes('/')) return false
|
|
if (contentType.split('/')[1].includes('zip')) return true
|
|
return false
|
|
}
|
|
|
|
const isCode = (name, contentType) => {
|
|
const codeExt = ['c', 'cpp', 'go', 'py', 'java', 'rb', 'js', 'pl', 'fs',
|
|
'php', 'css', 'less', 'scss', 'coffee', 'net', 'html',
|
|
'rs', 'exs', 'scala', 'hs', 'clj', 'el', 'scm', 'lisp',
|
|
'asp', 'aspx']
|
|
const ext = name.split('.').reverse()[0]
|
|
for (var i in codeExt) {
|
|
if (ext === codeExt[i]) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const isExcel = (name, contentType) => {
|
|
if (!contentType || !contentType.includes('/')) return false
|
|
const types = ['excel', 'spreadsheet']
|
|
const subType = contentType.split('/')[1]
|
|
for (var i in types) {
|
|
if (subType.includes(types[i])) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const isDoc = (name, contentType) => {
|
|
if (!contentType || !contentType.includes('/')) return false
|
|
const types = ['word', '.document']
|
|
const subType = contentType.split('/')[1]
|
|
for (var i in types) {
|
|
if (subType.includes(types[i])) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const isPresentation = (name, contentType) => {
|
|
if (!contentType || !contentType.includes('/')) return false
|
|
var types = ['powerpoint', 'presentation']
|
|
const subType = contentType.split('/')[1]
|
|
for (var i in types) {
|
|
if (subType.includes(types[i])) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const typeToIcon = (type) => {
|
|
return (name, contentType) => {
|
|
if (!contentType || !contentType.includes('/')) return false
|
|
if (contentType.split('/')[0] === type) return true
|
|
return false
|
|
}
|
|
}
|
|
|
|
export const getDataType = (name, contentType) => {
|
|
if (contentType === "") {
|
|
contentType = mimedb.lookup(name) || 'application/octet-stream'
|
|
}
|
|
const check = [
|
|
['folder', isFolder],
|
|
['code', isCode],
|
|
['audio', typeToIcon('audio')],
|
|
['image', typeToIcon('image')],
|
|
['video', typeToIcon('video')],
|
|
['text', typeToIcon('text')],
|
|
['pdf', isPdf],
|
|
['zip', isZip],
|
|
['excel', isExcel],
|
|
['doc', isDoc],
|
|
['presentation', isPresentation]
|
|
]
|
|
for (var i in check) {
|
|
if (check[i][1](name, contentType)) return check[i][0]
|
|
}
|
|
return 'other'
|
|
}
|
|
|