/**
 * Copyright 2016 Leif Olsen. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Copied/Modified/Inspired from/by:
 *   https://github.com/google/material-design-lite/tree/master/src/textfield
 *   http://red-team-design.com/making-html-dropdowns-not-suck/
 *   http://codepen.io/etcpe9/pen/PqyOye,
 *   http://codepen.io/pudgereyem/pen/PqBxQx
 *   https://github.com/MEYVN-digital/mdl-selectfield
 *   https://github.com/mebibou/mdl-selectfield
 */

// Use of this module requires the user to include variables from material-design-lite
//@import "../../node_modules/material-design-lite/src/variables";
//@import "../../node_modules/material-design-lite/src/mixins";

@import "../mixins";

// The container for the selectfield.
.mdlext-selectfield {
  box-sizing: border-box;
  position: relative;
  font-size: $input-text-font-size;
  display: inline-block;
  width: 300px;
  max-width: 100%;
  margin: 0;
  padding: $input-text-vertical-spacing 0;

  // Align buttons, if used.
  & .mdl-button {
    bottom: $input-text-vertical-spacing;
    position: absolute;
  }

  // Styling the down arrow
  &::after {
    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length);

    position: absolute;
    right: 0.5em;
    top: 50%;
    transform: translateY(-50%);
    pointer-events: none;
  }
}

.mdlext-selectfield.is-disabled {
  &::after {
    color: $input-text-disabled-color;
    @include mdlext-arrow(bottom, $mdlext-selectfield-arrow-width, $mdlext-selectfield-arrow-length, $input-text-disabled-color);
  }
}

// Optional class to align right.
.mdlext-selectfield--align-right {
  text-align: right;
}

// Optional class to display at full width.
.mdlext-selectfield--full-width {
  width: 100%;
}

// Optional class to make the select field expandable.
.mdlext-selectfield--expandable {
  min-height: $input-text-button-size;
  min-width: $input-text-button-size;
  width: auto;
}

// Styling for the select element.
.mdlext-selectfield__select {

  // Reset select
  box-sizing: border-box;
  border: 0;
  border-radius: 0;
  -webkit-appearance: none;
  -moz-appearance: none;
  -ms-appearance: none;
  appearance: none;
  text-indent: 0.01px; // Removes default arrow from firefox
  text-overflow: '';   // Removes default arrow from firefox
  outline: none;
  box-shadow: none;
  // End Reset select

  font-size: $input-text-font-size;
  font-family: $performance_font;
  padding: $input-text-padding calc(1.2em + #{$input-text-padding}) $input-text-padding 0;
  width: $input-text-width;
  border-bottom: 1px solid $input-text-bottom-border-color;
  display: block;
  margin: 0;
  background: none;
  text-align: left;
  color: inherit;

  // Mozilla, remove focusring
  &:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000000;
  }

  // MS, remove selected option background color
  &:focus::-ms-value {
    background-color: inherit;
    color: inherit;
  }

  &::-ms-expand {
    display: none;
  }

  .mdlext-selectfield.is-focused & {
    outline: none;
  }

  .mdlext-selectfield.is-invalid & {
    border-color: $input-text-error-color;
    box-shadow: none;
  }

  fieldset[disabled] .mdlext-selectfield &,
  .mdlext-selectfield.is-disabled & {
    border-bottom: 1px dotted $input-text-disabled-color;
    color: $input-text-disabled-text-color;
    background-color: transparent;
  }

  option {
    color: $text-color-primary;
    box-sizing: border-box;
    background-color: inherit;
  }
}

// Styling for the label / floating label.
.mdlext-selectfield__label {
  box-sizing: border-box;
  color: $input-text-label-color;
  font-size: $input-text-font-size;
  top: ($input-text-padding + $input-text-vertical-spacing);
  bottom: 0;
  left: 0;
  right: 0;
  pointer-events: none;
  position: absolute;
  display: block;
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
  text-align: left;

  .mdlext-selectfield.is-dirty &,
  .mdlext-selectfield.has-placeholder & {
    visibility: hidden;
  }

  // Floating Label
  .mdlext-selectfield--floating-label & {
    @include material-animation-default();
  }

  .mdlext-selectfield--floating-label.has-placeholder & {
    transition: none;
  }

  fieldset[disabled] .mdlext-selectfield &,
  .mdlext-selectfield.is-disabled.is-disabled & {
    color: $input-text-disabled-text-color;
  }

  .mdlext-selectfield--floating-label.is-focused &,
  .mdlext-selectfield--floating-label.is-dirty.is-dirty &,
  .mdlext-selectfield--floating-label.has-placeholder & {
    color: $input-text-highlight-color;
    font-size: $input-text-floating-label-fontsize;
    top: $input-text-vertical-spacing - ($input-text-floating-label-fontsize + $input-text-padding);
    visibility: visible;
  }

  .mdlext-selectfield--floating-label.is-focused .mdlext-selectfield__expandable-holder &,
  .mdlext-selectfield--floating-label.is-dirty .mdlext-selectfield__expandable-holder &,
  .mdlext-selectfield--floating-label.has-placeholder .mdlext-selectfield__expandable-holder & {
    top: -($input-text-floating-label-fontsize + $input-text-padding);
  }

  .mdlext-selectfield--floating-label.is-invalid & {
    color: $input-text-error-color;
    font-size: $input-text-floating-label-fontsize;
  }

  // The after label is the colored underline for the Selectfield.
  &::after {
    background-color: $input-text-highlight-color;
    bottom: $input-text-vertical-spacing;
    content: '';
    height: 2px;
    left: 45%;
    position: absolute;
    @include material-animation-default();

    visibility: hidden;
    width: 10px;
  }

  .mdlext-selectfield.is-focused &::after {
    left: 0;
    visibility: visible;
    width: 100%;
  }

  .mdlext-selectfield.is-invalid &::after {
    background-color: $input-text-error-color;
  }
}

// SelectField Error.
.mdlext-selectfield__error {
  color: $input-text-error-color;
  font-size: $input-text-floating-label-fontsize;
  position: absolute;
  margin-top: 3px;
  visibility: hidden;
  display: block;

  .mdlext-selectfield.is-invalid & {
    visibility: visible;
  }
}

// Expandable Holder.
.mdlext-selectfield__expandable-holder {
  display: inline-block;
  position: relative;
  margin-left: $input-text-button-size;

  @include material-animation-default();

  // Safari (possibly others) need to be convinced that this field is actually
  // visible, otherwise it cannot be tabbed to nor focused via a <label>.
  // TODO: In some cases (Retina displays), this is big enough to render the
  // inner element :(
  max-width: 0.1px;

  .mdlext-selectfield.is-focused &,
  .mdlext-selectfield.is-dirty & {
    // This is an unfortunate hack. Animating between widths in percent (%)
    // in many browsers (Chrome, Firefox) only animates the inner visual style
    // of the input - the outer bounding box still 'jumps'.
    // Thus assume a sensible maximum, and animate to/from that value.
    max-width: 600px;
  }
  .mdlext-selectfield__label::after {
    bottom: 0;
  }
}
