openfoodfoundation/openfoodnetwork

View on GitHub
app/webpacker/css/admin_v3/components/buttons.scss

Summary

Maintainability
Test Coverage
// Button styles
// Design reference: https://github.com/openfoodfoundation/openfoodnetwork/wiki/Design-styleguide%3A-links-and-buttons

@mixin disabled-button() {
  &:disabled,
  &:disabled:hover {
    cursor: initial;
    color: $color-btn-disabled-text;
    background-color: $color-btn-disabled-bg;
    border-color: transparent;
  }
}

input[type="submit"],
input[type="reset"],
input[type="button"]:not(.trix-button),
button:not(.plain):not(.trix-button),
.button {
  position: relative;
  cursor: pointer;
  font-size: 14px;
  @include border-radius($border-radius);
  display: inline-block;
  padding: 0px 12px;
  background-color: $color-btn-bg;
  border: 1px solid $color-btn-bg;
  color: $color-btn-text;
  line-height: $btn-regular-height - 2px; // remove 2px to compensate for border
  height: $btn-regular-height;
  font-weight: bold;
  @include disabled-button();

  &:before {
    font-weight: normal !important;
  }

  &:active,
  &:focus {
    outline: none;
    border: 1px solid $color-btn-hover-border;
  }

  &:active:focus {
    box-shadow: none;
  }

  &:hover {
    background-color: $color-btn-hover-bg;
    border: 1px solid $color-btn-hover-bg;
    color: $color-btn-hover-text;
  }

  // --- Colours ---
  &.secondary {
    background-color: $color-btn-secondary-bg;
    color: $color-link;

    &:hover {
      background-color: $color-btn-secondary-hover-bg;
    }

    &:focus {
      background-color: $color-btn-secondary-hover-bg;
      border-color: $color-link-focus;
      color: $color-link-focus;
    }

    // "Naked" variation: text appears on hover
    &.naked {
      border: none;
      color: transparent;

      &:before {
        color: $color-link;
      }

      &:hover {
        background-color: $color-btn-secondary-bg;
        color: $color-link;
      }
      &:focus {
        background-color: $color-btn-secondary-hover-bg;
        color: $color-link-focus;
      }
    }
  }

  &.disruptive {
    background-color: transparent;
    border: 1px solid $color-5;
    color: $color-5;

    &:hover {
      background-color: $fair-pink;
      border: 1px solid $color-5;
      color: $color-5;
    }

    &:active,
    &:focus {
      background-color: $fair-pink;
      border: 1px solid $roof-terracotta;
      color: $roof-terracotta;
    }
  }

  // --- Sizes ---
  &.mini {
    line-height: 18px;
    height: auto; // DC: I don't like fixed heights.
    padding: 0 6px;
  }

  &.condensed {
    line-height: $btn-condensed-height - 2px; // remove 2px to compensate for border
    height: $btn-condensed-height;
  }

  &.relaxed {
    line-height: $btn-relaxed-height - 2px; // remove 2px to compensate for border
    height: $btn-relaxed-height;
  }

  &.big {
    @extend .relaxed; // use relaxed height
    width: 100%;
    font-size: 1rem;
    @include border-radius(25px);
    text-transform: uppercase;
  }

  &.fullwidth {
    width: 100%;
    text-align: center;
  }

  .badge {
    position: absolute;
    top: 0;
    right: 0;
    transform: translateY(-50%);
    font-size: 10px;
    text-transform: capitalize;
    padding: 0px 5px;
    border-radius: 3px;

    &:before {
      padding: 0;
    }

    &.danger {
      background-color: $color-warning;
    }
    &.success {
      background-color: $spree-green;
    }
  }
}

// --- Reset buttons ---
input[type="reset"],
.reset {
  // Reset button looks like a link, but has a border the same as buttons when active.
  background: none;
  border: 1px solid transparent;
  color: $color-link;

  &:active {
    color: $color-link-active;
  }
  &:focus {
    color: $color-link-focus;
  }
  &:hover {
    color: $color-link-hover;
    background: none;
    border-color: transparent;
  }
}

a.button {
  text-decoration: none;
}

.button.disruptive::before {
  margin-right: 3px;

  @extend .icon-remove-sign;
  font-family: FontAwesome;
}