<div [hidden]="!isVisible()" #root>

  <div class="blackCanvas"
       [style.opacity]="blackCanvasOpacity">
  </div>

  <div class="lightbox" #lightbox>
    <app-gallery-lightbox-media [gridMedia]="activePhoto ? activePhoto.gridPhoto : null"
                                [loadMedia]="!animating"
                                [zoom]="zoom"
                                [drag]="drag"
                                [windowAspect]="getWindowAspectRatio()"
                                #photo>
    </app-gallery-lightbox-media>
  </div>
  <div
    *ngIf="controllersVisible"
    id="controllers-container"
    #controls
    [style.width.px]="getPhotoFrameWidth()"
    [ngClass]="(controllersDimmed && !controllersAlwaysOn) ? (activePhoto && activePhoto.gridPhoto.isVideo() ? 'dim-controls-video' :'dim-controls'):  ''">
    <div class="controls-caption" *ngIf="Title">{{Title}}</div>
    <div class="controls controls-top">
      <a *ngIf="activePhoto"
         class="highlight control-button"
         [href]="activePhoto.gridPhoto.getPhotoPath()"
         [download]="activePhoto.gridPhoto.media.name">
        <span class="oi oi-data-transfer-download"
              title="download" i18n-title></span>
      </a>

      <div class=" highlight control-button" (click)="toggleInfoPanel()"
           title="info key: i" i18n-title>
        <span class="oi oi-info"></span>
      </div>

      <div *ngIf="fullScreenService.isFullScreenEnabled()"
           class=" highlight control-button"
           (click)="fullScreenService.exitFullScreen()"
           title="toggle fullscreen, key: f" i18n-title>
        <span class="oi oi-fullscreen-exit">

        </span>
      </div>

      <div *ngIf="!fullScreenService.isFullScreenEnabled()"
           class="highlight control-button"
           (click)="fullScreenService.showFullScreen(root)"
           title="toggle fullscreen, key: f" i18n-title>
        <span class="oi oi-fullscreen-enter">
        </span>
      </div>

      <div class="highlight control-button"
           (click)="hide()"
           title="close, key: Escape" i18n-title>
        <span class="oi oi-x">

        </span>
      </div>
    </div>
    <div id="swipeable-container"
         (swipeleft)="zoom == 1 && nextImage()"
         (swiperight)="zoom == 1 && prevImage()"
         (swipeup)="zoom == 1 && hide()"
         (tap)="tap($event)"
         (pan)="pan($event)"
         (wheel)="wheel($event)"
         (click)="mediaElement.playPause()">

    </div>

    <div class="navigation-arrow highlight"
         *ngIf="navigation.hasPrev && zoom == 1" title="key: left arrow" id="leftArrow" i18n-title
         (click)="prevImage()"><span
      class="oi oi-chevron-left"></span></div>
    <div class="navigation-arrow highlight"
         *ngIf="navigation.hasNext && zoom == 1" title="key: right arrow" id="rightArrow" i18n-title
         (click)="nextImage()"><span
      class="oi oi-chevron-right"></span></div>

    <div class="controls controls-zoom row" *ngIf="zoom > 1">
      <div class="col-1 col-md-4">
        <span (click)="zoomOut()" i18n-title title="Zoom out, key: '-'"
              class="oi oi-zoom-out float-right"></span>
      </div>
      <input type="range"
             [(ngModel)]="Zoom" min="1" [max]="MAX_ZOOM" step="0.1"
             value="1" class="col-10 col-md-4 zoom-progress">
      <div class="col-1 col-md-4">
        <span (click)="zoomIn()" i18n-title title="Zoom in, key: '+'"
              class="oi oi-zoom-in float-left"></span>
      </div>
    </div>

    <div class="controls controls-playback"
         *ngIf="zoom == 1 && activePhoto && activePhoto.gridPhoto.isPhoto()">
      <span class="oi oi-media-pause highlight control-button"
            [ngClass]="playBackState == PlayBackStates.Paused ? 'button-disabled':''"
            (click)="pause()"
            title="pause"></span>
      <span
        class="oi oi-media-play highlight control-button"
        [ngClass]="playBackState == PlayBackStates.Play ? 'button-active':''"
        (click)="play()"
        title="auto play"></span>
      <span class="oi oi-media-skip-forward highlight control-button"
            [ngClass]="playBackState == PlayBackStates.FastForward ? 'button-active':''"
            (click)="fastForward()"
            title="fast auto play"></span>
    </div>

    <div class="controls controls-big-play"
         *ngIf="activePhoto && activePhoto.gridPhoto.isVideo() && mediaElement.Paused">
      <span class="oi oi-media-play"></span>
    </div>

    <div class="controls controls-video row" *ngIf="activePhoto && activePhoto.gridPhoto.isVideo()">
      <span class="oi  col-1"
            [ngClass]="!mediaElement.Paused ? 'oi-media-pause':'oi-media-play'"
            (click)="mediaElement.playPause()"></span>
      <input type="range" [(ngModel)]="mediaElement.VideoProgress"
             min="0" max="100" step="0.1" class="col video-progress">
      <span class="oi  col-1"
            [ngClass]="mediaElement.Muted ? 'oi-volume-off':'oi-volume-high'"
            (click)="mediaElement.mute()"></span>
      <input type="range"
             [(ngModel)]="mediaElement.VideoVolume" min="0" max="1" step="0.1"
             value="1" class="col-2 col-md-1 volume">
    </div>
  </div>
  <app-info-panel *ngIf="activePhoto && infoPanelVisible"
                  id="info-panel"
                  [style.width.px]="infoPanelWidth"
                  [media]="activePhoto.gridPhoto.media"
                  (closed)="hideInfoPanel()">

  </app-info-panel>
</div>