aurelia-templating-resources
Version: 
A standard set of behaviors, converters and other resources for use with the Aurelia templating library.
68 lines (59 loc) • 1.88 kB
text/typescript
import {Optional} from 'aurelia-dependency-injection';
import {customAttribute, Animator} from 'aurelia-templating';
import {DOM} from 'aurelia-pal';
import {injectAureliaHideStyleAtBoundary, aureliaHideClassName} from './aurelia-hide-style';
/**
 * Binding to conditionally show markup in the DOM based on the value.
 * - different from "if" in that the markup is still added to the DOM, simply not shown.
 */
('show')
export class Show {
  /**@internal*/
  element: any;
  /**@internal*/
  animator: any;
  /**@internal*/
  domBoundary: any;
  value: any;
  /**@internal */
  static inject() {
    return [DOM.Element, Animator, Optional.of(DOM.boundary, true)];
  }
  /**
   * Creates a new instance of Show.
   * @param element Target element to conditionally show.
   * @param animator The animator that conditionally adds or removes the aurelia-hide css class.
   * @param domBoundary The DOM boundary. Used when the behavior appears within a component that utilizes the shadow DOM.
   */
  constructor(element, animator, domBoundary) {
    this.element = element;
    this.animator = animator;
    this.domBoundary = domBoundary;
  }
  /**
   * Invoked when the behavior is created.
   */
  created() {
    injectAureliaHideStyleAtBoundary(this.domBoundary);
  }
  /**
   * Invoked everytime the bound value changes.
   * @param newValue The new value.
   */
  valueChanged(newValue) {
    let element = this.element;
    let animator = this.animator;
    if (newValue) {
      animator.removeClass(element, aureliaHideClassName);
    } else {
      animator.addClass(element, aureliaHideClassName);
    }
  }
  /**
   * Binds the Show attribute.
   */
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  bind(bindingContext) {
    this.valueChanged(this.value);
  }
}