Home | History | Annotate | Download | only in reprojection
      1 <!--
      2 @license
      3 Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
      4 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
      5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
      6 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
      7 Code distributed by Google as part of the polymer project is also
      8 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
      9 -->
     10 <link rel="import" href="../../../polymer/polymer.html">
     11 <link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
     12 <link rel="import" href="../../neon-shared-element-animatable-behavior.html">
     13 <link rel="import" href="../../../paper-styles/typography.html">
     14 <link rel="import" href="../../../paper-styles/color.html">
     15 <link rel="import" href="../shared-styles.html">
     16 
     17 <dom-module id="animated-grid">
     18   <template>
     19     <style include="shared-styles"></style>
     20     <style>
     21 
     22       :host {
     23         display: block;
     24         background: #000;
     25       }
     26 
     27       .tile {
     28         display: inline-block;
     29         float: left;
     30         vertical-align: top;
     31         width: calc(100% / 6);
     32         height: calc(100% / 3);
     33 
     34         @apply(--paper-font-title);
     35         @apply(--layout-vertical);
     36         @apply(--layout-center-center);
     37       }
     38 
     39       .tile:nth-of-type(1) {
     40         width: calc(100% / 3);
     41         height: calc(100% / 3 * 2);
     42       }
     43 
     44       .tile:nth-of-type(4) {
     45         width: calc(100% / 3);
     46       }
     47 
     48       .tile:nth-of-type(5) {
     49         width: calc(100% / 3);
     50         height: calc(100% / 3 * 2);
     51       }
     52 
     53       .tile:nth-of-type(8) {
     54         width: calc(100% / 3);
     55         height: calc(100% / 3);
     56       }
     57 
     58       .tile:nth-of-type(9) {
     59         position: absolute;
     60         top: calc(100% / 3 * 2);
     61         left: 0;
     62         width: calc(100% / 6);
     63         height: calc(100% / 3);
     64       }
     65 
     66       .tile:nth-of-type(10) {
     67         position: absolute;
     68         top: calc(100% / 3 * 2);
     69         left: calc(100% / 6);;
     70         width: calc(100% / 6);
     71         height: calc(100% / 3);
     72       }
     73 
     74     </style>
     75 
     76     <template is="dom-repeat" items="[[config]]">
     77       <div class$="[[_computeTileClass(item.color)]]">
     78         <span>[[item.value]]</span>
     79       </div>
     80     </template>
     81 
     82   </template>
     83 
     84 </dom-module>
     85 
     86 <script>
     87 
     88   Polymer({
     89 
     90     is: 'animated-grid',
     91 
     92     behaviors: [
     93       Polymer.NeonSharedElementAnimatableBehavior
     94     ],
     95 
     96     properties: {
     97 
     98       config: {
     99         type: Array,
    100         value: function() {
    101           return [
    102             {value: 1, color: 'blue'},
    103             {value: 2, color: 'red'},
    104             {value: 3, color: 'blue'},
    105             {value: 4, color: 'green'},
    106             {value: 5, color: 'yellow'},
    107             {value: 6, color: 'blue'},
    108             {value: 7, color: 'red'},
    109             {value: 8, color: 'green'},
    110             {value: 9, color: 'yellow'},
    111             {value: 10, color: 'red'}
    112           ]
    113         }
    114       },
    115 
    116       animationConfig: {
    117         type: Object,
    118         value: function() {
    119           return {
    120             'exit': [{
    121               name: 'ripple-animation',
    122               id: 'ripple',
    123               fromPage: this
    124             }, {
    125               name: 'hero-animation',
    126               id: 'hero',
    127               fromPage: this
    128             }]
    129           }
    130         }
    131       }
    132 
    133     },
    134 
    135     listeners: {
    136       click: '_onClick'
    137     },
    138 
    139     _computeTileClass: function(color) {
    140       return 'tile ' + color + '-300';
    141     },
    142 
    143     _onClick: function(event) {
    144       var target = event.target;
    145       while (target !== this && !target._templateInstance) {
    146         target = target.parentNode;
    147       }
    148 
    149       // configure the page animation
    150       this.sharedElements = {
    151         'hero': target,
    152         'ripple': target
    153       };
    154       this.animationConfig['exit'][0].gesture = {
    155         x: event.x,
    156         y: event.y
    157       };
    158 
    159       this.fire('tile-click', {
    160         tile: target,
    161         data: target._templateInstance.item
    162       });
    163     }
    164 
    165   });
    166 
    167 </script>
    168