all files / couch/util/file-loader/ content-type.js

31.25% Statements 10/32
8.33% Branches 1/12
25% Functions 1/4
31.25% Lines 10/32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69                                                                                                                     
import Ember from 'ember';
 
const {
  isEmpty,
  A
} = Ember;
 
let _raw = {
  'png':  'image/png',
  'jpg jpeg': 'image/jpeg',
  'pdf': 'application/pdf',
  'psd': 'image/vnd.adobe.photoshop',
  'mp4 mp4v mpg4 m4v': 'video/mp4',
  'mpeg mpg mpe m1v m2v': 'video/mpeg',
  'txt': 'text/plain',
  'hbs handlebars': 'text/x-handlebars-template',
  'md markdown': 'text/x-markdown',
  'js': 'text/javascript',
  'mpga mp2 mp2a mp3 m2a m3a': 'audio/mpeg',
};
 
let _mapping;
 
function mapping() {
  if(!_mapping) {
    _mapping = {};
    for(let key in _raw) {
      let value = _raw[key];
      let keys = A(key.split(' '));
      for(let i = 0; i < keys.length; i++) {
        let key = keys[i];
        _mapping[key] = value;
      }
    }
  }
  return _mapping;
}
 
function extnameFromFilename(name) {
  let idx = name.lastIndexOf('.');
  if(idx > 0) {
    return name.substr(idx + 1);
  }
}
 
export function contentTypeForFileName(filename) {
  let extname = extnameFromFilename(filename);
  if(extname) {
    extname = extname.toLowerCase();
    return mapping()[extname];
  }
}
 
export default function contentTypeForFile(file) {
  let type = file.type;
  Iif(isEmpty(type)) {
    let name = file.name;
    if(name) {
      type = contentTypeForFileName(name);
      if(type) {
        return type;
      }
    }
    return 'application/octet-stream';
  }
  return type;
}