<!--
Copyright (C) 2018 The Android Open Source Project

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.
-->

<dom-module id="gr-opacity-diff-mode">
  <template>
    <style>
      :host {
        display: block;
      }
      img {
        display: block;
        height: var(--img-height);
        margin: auto;
        position: absolute;
        width: var(--img-width);
      }
      #imageRevision {
        opacity: var(--my-opacity-value);
        z-index: 1;
      }
      #imageDivContainer {
        display: flex;
        height: var(--div-height);
        justify-content: space-around;
      }
    </style>
    <div id="imageDivContainer">
      <img id="imageBase"/>
      <img data-opacity$="{{opacityValue}}" id="imageRevision"/>
    </div>
    <div>
      <label>
        <input
            id="scaleSizesToggle"
            on-tap="handleScaleSizesToggle"
            type="checkbox">
        Scale to same size
      </label>
    </div>
    <label for="opacitySlider">Opacity</label>
    <input
      id="opacitySlider"
      max="1.0"
      min="0.0"
      on-input="handleOpacityChange"
      step=".01"
      type="range"
      value="1.0"/>
  </template>
 <script src="gr-opacity-diff-mode.js"></script>
</dom-module>