all files / src/components/FileTree/Icon/ index.vue

100% Statements 8/8
75% Branches 3/4
100% Functions 0/0
100% Lines 8/8
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86                                                                                                                        210×                                    
<template>
  <img :src="icon.path" :alt="icon.type">
</template>
 
<script>
export default {
  name: 'Icon',
  props: {
    extension: {
      type: String,
      default: ''
    }
  },
  computed: {
    icon () {
      const iconTypes = {
        js: ['js'],
        html: ['html', 'htm'],
        sass: ['sass', 'scss'],
        less: ['less'],
        stylus: ['stylus', 'styl'],
        css: ['css'],
        php: ['php'],
        json: ['json'],
        jade: ['jade'],
        pug: ['pug'],
        md: ['md'],
        sql: ['sql'],
        apache: ['htaccess', 'htpasswd'],
        yml: ['yml'],
        svg: ['svg'],
        font: ['eot', 'ttf', 'woff', 'woff2'],
        image: ['jpeg', 'jpg', 'tiff', 'gif', 'bmp', 'png', 'webp'],
        video: [
          'mpeg',
          'mpg',
          'mp4',
          'amv',
          'wmv',
          'mov',
          'avi',
          'ogv',
          'mkv',
          'webm'
        ],
        audio: ['mp3', 'wav', 'ogg', 'raw'],
        zip: ['zip', 'rar', '7z', 'gz'],
        txt: ['txt'],
        coffee: ['coffee'],
        git: ['gitignore', 'gitkeep'],
        xml: ['xml'],
        twig: ['twig'],
        c: ['c', 'h'],
        folder: ['folder'],
        'folder-active': ['folder-active']
      }
 
      let ret = {
        type: this.extension,
        path: ''
      }
 
      for (const key in iconTypes) {
        if (iconTypes[key].indexOf(this.extension) !== -1) {
          ret.path = require(`./icons/${key}.svg`)
          break
        }
      }
 
      ret.path = ret.path || require('./icons/random.svg')
 
      return ret
    }
  }
}
</script>
 
<style lang="scss" scoped>
img {
  display: inline-block;
  width: 100%;
  height: 100%;
}
</style>