commit.vue 4.2 KB
Newer Older
1 2 3
<script>
  import commitIconSvg from 'icons/_icon_commit.svg';
  import userAvatarLink from './user_avatar/user_avatar_link.vue';
4
  import tooltip from '../directives/tooltip';
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

  export default {
    props: {
      /**
       * Indicates the existance of a tag.
       * Used to render the correct icon, if true will render `fa-tag` icon,
       * if false will render `fa-code-fork` icon.
       */
      tag: {
        type: Boolean,
        required: false,
        default: false,
      },
      /**
       * If provided is used to render the branch name and url.
       * Should contain the following properties:
       * name
       * ref_url
       */
      commitRef: {
        type: Object,
        required: false,
        default: () => ({}),
      },
      /**
       * Used to link to the commit sha.
       */
      commitUrl: {
        type: String,
        required: false,
        default: '',
      },

      /**
       * Used to show the commit short sha that links to the commit url.
       */
      shortSha: {
        type: String,
        required: false,
        default: '',
      },
      /**
       * If provided shows the commit tile.
       */
      title: {
        type: String,
        required: false,
        default: '',
      },
      /**
       * If provided renders information about the author of the commit.
       * When provided should include:
       * `avatar_url` to render the avatar icon
       * `web_url` to link to user profile
       * `username` to render alt and title tags
       */
      author: {
        type: Object,
        required: false,
        default: () => ({}),
      },
    },
    computed: {
      /**
       * Used to verify if all the properties needed to render the commit
       * ref section were provided.
       *
       * TODO: Improve this! Use lodash _.has when we have it.
       *
       * @returns {Boolean}
       */
      hasCommitRef() {
        return this.commitRef && this.commitRef.name && this.commitRef.ref_url;
      },
      /**
       * Used to verify if all the properties needed to render the commit
       * author section were provided.
       *
       * TODO: Improve this! Use lodash _.has when we have it.
       *
       * @returns {Boolean}
       */
      hasAuthor() {
        return this.author &&
          this.author.avatar_url &&
          this.author.path &&
          this.author.username;
      },
      /**
       * If information about the author is provided will return a string
       * to be rendered as the alt attribute of the img tag.
       *
       * @returns {String}
       */
      userImageAltDescription() {
        return this.author &&
          this.author.username ? `${this.author.username}'s avatar` : null;
      },
    },
104 105
    directives: {
      tooltip,
106 107 108 109
    },
    components: {
      userAvatarLink,
    },
110 111 112
    created() {
      this.commitIconSvg = commitIconSvg;
    },
113 114 115 116
  };
</script>
<template>
  <div class="branch-commit">
117 118 119
    <div
      v-if="hasCommitRef"
      class="icon-container hidden-xs">
120 121 122 123 124 125 126 127 128 129 130 131 132 133
      <i
        v-if="tag"
        class="fa fa-tag"
        aria-hidden="true">
      </i>
      <i
        v-if="!tag"
        class="fa fa-code-fork"
        aria-hidden="true">
      </i>
    </div>

    <a
      v-if="hasCommitRef"
134
      class="ref-name hidden-xs"
135 136 137 138
      :href="commitRef.ref_url"
      v-tooltip
      data-container="body"
      :title="commitRef.name">
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
      {{commitRef.name}}
    </a>

    <div
      v-html="commitIconSvg"
      class="commit-icon js-commit-icon">
    </div>

    <a
      class="commit-sha"
      :href="commitUrl">
      {{shortSha}}
    </a>

    <div class="commit-title flex-truncate-parent">
      <span
        v-if="title"
        class="flex-truncate-child">
        <user-avatar-link
          v-if="hasAuthor"
          class="avatar-image-container"
          :link-href="author.path"
          :img-src="author.avatar_url"
          :img-alt="userImageAltDescription"
          :tooltip-text="author.username"
        />
165 166
        <a
          class="commit-row-message"
167 168 169 170 171 172 173 174 175 176
          :href="commitUrl">
          {{title}}
        </a>
      </span>
      <span v-else>
        Cant find HEAD commit for this branch
      </span>
    </div>
  </div>
</template>