<!--
@license
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<link rel="import" href="../../../polymer/polymer.html">
<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
<link rel="import" href="../../../paper-styles/shadow.html">
<link rel="import" href="../../neon-animatable-behavior.html">

<dom-module id="full-view">
  <template>
    <style>
      :host {
        @apply(--layout-vertical);
      }

      .main {
        background: white;
        @apply(--layout-flex);
        @apply(--layout-scroll);
        @apply(--shadow-elevation-8dp);
      }

      .image-container {
        position: relative;
        width: 100%;
        padding-bottom: 100%;
      }

      .image {
        position: absolute;
        width: 100%;
        height: 100%;
        background: repeating-linear-gradient(
          45deg,
          #f5f5f5,
          #f5f5f5 8px,
          #e0e0e0 8px,
          #e0e0e0 16px
        );
      }
    </style>
    <paper-toolbar class="medium-tall">
      <paper-icon-button id="button" icon="clear" on-click="_onClearButtonClick"></paper-icon-button>
    </paper-toolbar>

    <div id="main" class="main">
      <div class="image-container">
        <div class="image">
        </div>
      </div>
    </div>
    
  </template>
</dom-module>

<script>

  Polymer({

    is: 'full-view',

    behaviors: [
      Polymer.NeonAnimatableBehavior
    ],

    properties: {

      sharedElements: {
        type: Object,
        value: function() {
          return {
            'hero': this.$.main
          };
        }
      },

      animationConfig: {
        type: Object,
        value: function() {
          return {
            'entry': [{
              name: 'fade-in-animation',
              node: this.$.button
            }, {
              name: 'hero-animation',
              id: 'hero',
              toPage: this
            }],

            'exit': [{
              name: 'fade-out-animation',
              node: this.$.button
            }, {
              name: 'scale-down-animation',
              node: this.$.main,
              transformOrigin: '50% 50%',
              axis: 'y'
            }]

          }
        }
      }

    },

    _onClearButtonClick: function() {
      this.fire('close');
    }

  });

</script>
