ernestwisniewski/kbin

View on GitHub
assets/styles/components/_comment.scss

Summary

Maintainability
Test Coverage
$levels: ('#ac5353', '#71ac53', '#ffa500', '#538eac', '#6253ac', '#ac53ac', '#ac5353', '#2b7070ff', '#b9ab52', '#808080ff');
$comment-margin-xl: 1rem;
$comment-margin-lg: .5rem;
$comment-margin-sm: .3rem;

.comment-add {
  .row {
    margin-bottom: 0;
  }

  @include media-breakpoint-down(sm) {
    .params {
      display: block;

      div {
        margin-bottom: 1rem;
      }

      > div:last-of-type {
        margin-bottom: 0;
      }
    }
  }
}

.comment {
  display: grid;
  font-size: .9rem;
  grid-gap: .5rem;
  grid-template-areas: "avatar header vote"
                         "avatar body body"
                         "avatar footer footer";
  grid-template-columns: min-content auto min-content;
  margin: .5rem 0;
  padding: 0.5rem 0.75rem;
  position: relative;
  z-index: 2;

  @include media-breakpoint-down(sm) {
    grid-template-areas: "avatar header vote"
                         "body body body"
                         "footer footer footer";
  }

  &:hover,
  &:focus-visible {
    z-index: 5;
  }

  header {
    color: var(--kbin-meta-text-color);
    font-size: .8rem;
    grid-area: header;
    opacity: .75;

    a {
      color: var(--kbin-meta-text-color);
      font-weight: bold;

      time {
        font-weight: normal;
      }
    }
  }

  .content {
    p:last-child {
      margin-bottom: 0;
    }
  }

  aside {
    grid-area: vote;
  }

  div {
    grid-area: body;

    p {
      margin-top: 0;
      margin-bottom: 0.5rem;
    }
  }

  > figure {
    grid-area: avatar;
    display: none;
    margin: 0;

    a {
      display: flex;
    }

    img {
      width: 30px;
      height: 30px;
    }

    @include media-breakpoint-up(sm) {
      img {
        border: var(--kbin-avatar-border);
        width: 40px;
        height: 40px;
      }
    }
  }


  menu {
    column-gap: 1rem;
    display: grid;
    grid-area: meta;
    grid-auto-columns: max-content;
    grid-auto-flow: column;
    list-style: none;
    opacity: .75;
    position: relative;
    z-index: 4;

    & > a.active,
    & > li button.active, {
      text-decoration: underline;
    }

    button,
    a {
      font-size: .8rem;
      @include kbin-btn-link;
    }

    li:first-child a {
      padding-left: 0;
    }
  }

  .vote {
    display: flex;
    gap: .5rem;
    justify-content: flex-end;

    button {
      height: 1.2rem;
      width: 4rem;
    }
  }

  footer {
    position: relative;
    color: var(--kbin-meta-text-color);
    font-size: .75rem;
    font-weight: 300;
    grid-area: footer;

    menu, .boosts {
      opacity: .75;
    }

    a {
      @include kbin-btn-link;
    }

    figure {
      margin: 0;
    }

    figure img {
      margin: .5rem 0;
      max-width: 100%;
    }
  }

  .loader {
    height: 20px;
    position: absolute;
    width: 20px;
  }

  &:hover,
  &:focus-within {
    header, menu, footer menu, footer .boosts {
      @include fade-in(.5s, .75);
    }
  }
}

.post-comments {
  blockquote {
    margin: 0;
  }
}

.comments-tree {
  position: relative;

  blockquote {
    margin-top: 0;
  }

  .comment {
    @for $i from 2 to 11 {
      &-line--#{$i} {
        border-left: 1px dashed unquote(nth($levels, $i));
        bottom: 0;
        height: 100%;
        left: $comment-margin-lg * ($i - 1);
        opacity: .4;

        position: absolute;
        z-index: 1;

        @include media-breakpoint-up(xl) {
          left: $comment-margin-xl * ($i - 1);
        }

        @include media-breakpoint-down(sm) {
          left: $comment-margin-sm * ($i - 1);
        }
      }
    }

    @for $i from 2 to 11 {
      &-level--#{$i} {
        border-left: 1px solid unquote(nth($levels, $i));
        margin-left: $comment-margin-lg * ($i - 1) !important;

        @include media-breakpoint-up(xl) {
          margin-left: $comment-margin-xl * ($i - 1) !important;
        }

        @include media-breakpoint-down(sm) {
          margin-left: $comment-margin-sm * ($i - 1) !important;
        }
      }
    }
  }
}

.show-comment-avatar {
  .comment > figure {
    display: block;
  }

  .comment-wrap {
    @include media-breakpoint-up(sm) {
      padding: 1rem 1rem 1rem 1.4rem !important;
      position: absolute !important;
      top: -0.5rem;
      left: -3.5rem;
    }
  }
}

aside.comments {
  position: relative;
}

.entry-comment {
  margin-bottom: 0;
}

#comment-add {
  margin: .5rem 0;
  padding: 0.75rem;
}

.new-comment {
  position: relative;
}

.new-comment::before {
  content: '';
  position: absolute;
  left: -5px;
  bottom: 0;
  width: 0;
  height: 0;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
  border-bottom: 10px solid var(--kbin-new-comment-color);
  clear: both;
  transform: rotate(225deg);
}