Home | History | Annotate | Download | only in demo
      1 <!doctype html>
      2 <!--
      3 @license
      4 Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
      5 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
      6 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
      7 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
      8 Code distributed by Google as part of the polymer project is also
      9 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
     10 -->
     11 <html>
     12 
     13 <head>
     14 
     15   <title>iron-fit-behavior demo</title>
     16 
     17   <meta charset="utf-8">
     18   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     19   <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
     20 
     21   <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
     22   <link rel="import" href="simple-fit.html">
     23   <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
     24   <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
     25 
     26   <style is="custom-style" include="demo-pages-shared-styles">
     27     .centered {
     28       min-width: 500px;
     29     }
     30     demo-snippet {
     31       --demo-snippet-code: {
     32         max-height: 250px;
     33       }
     34     }
     35   </style>
     36 
     37 </head>
     38 
     39 <body unresolved class="centered">
     40   <h3>
     41     An element with <code>IronFitBehavior</code> can be centered in
     42     <code>fitInto</code> or positioned around a <code>positionTarget</code>
     43   </h3>
     44   <demo-snippet>
     45     <template>
     46       <style>
     47         .target {
     48           cursor: pointer;
     49           text-align: center;
     50           display: inline-block;
     51           box-sizing: border-box;
     52           border: 1px solid;
     53           width: 100px;
     54           padding: 20px 0;
     55           margin: 5px;
     56         }
     57 
     58         #myFit {
     59           z-index: 10;
     60           padding: 20px;
     61           overflow: auto;
     62           min-width: 100px;
     63           min-height: 100px;
     64         }
     65 
     66         button {
     67           background-color: white;
     68           border-radius: 5px;
     69           border-width: 1px;
     70         }
     71         
     72         button.selected {
     73           background-color: #b3e5fc;
     74         }
     75       </style>
     76       <template is="dom-bind">
     77         <template is="dom-repeat" items="[[containers]]">
     78           <div class="target" on-tap="updatePositionTarget">Target</div>
     79         </template>
     80         <simple-fit id="myFit" auto-fit-on-attach>
     81           <h2>Align</h2>
     82           <p>
     83             <button on-tap="updateAlign" vertical-align="top">top</button>
     84             <button on-tap="updateAlign" vertical-align="bottom">bottom</button>
     85             <button on-tap="updateAlign" vertical-align="auto">auto</button>
     86             <button on-tap="updateAlign" vertical-align>null</button>
     87           </p>
     88           <p>
     89             <button on-tap="updateAlign" horizontal-align="left">left</button>
     90             <button on-tap="updateAlign" horizontal-align="right">right</button>
     91             <button on-tap="updateAlign" horizontal-align="auto">auto</button>
     92             <button on-tap="updateAlign" horizontal-align>null</button>
     93           </p>
     94           <button on-tap="toggleNoOverlap">no overlap</button>
     95           <button on-tap="toggleDynamicAlign">dynamic align</button>
     96         </simple-fit>
     97         <script>
     98           var defaultTarget = Polymer.dom(myFit).parentNode;
     99           var template = document.querySelector('template[is="dom-bind"]');
    100 
    101           template.containers = new Array(30);
    102 
    103           template.updatePositionTarget = function(e) {
    104             var target = Polymer.dom(e).rootTarget;
    105             target = myFit.positionTarget === target ? defaultTarget : target;
    106             myFit.positionTarget.style.backgroundColor = '';
    107             target.style.backgroundColor = 'orange';
    108             myFit.positionTarget = target;
    109             template.refit();
    110           };
    111 
    112           template._raf = null;
    113           template.refit = function() {
    114             template._raf && window.cancelAnimationFrame(template._raf);
    115             template._raf = window.requestAnimationFrame(function() {
    116               template._raf = null;
    117               myFit.refit();
    118             });
    119           };
    120 
    121           template.updateAlign = function(e) {
    122             var target = Polymer.dom(e).rootTarget;
    123             if (target.hasAttribute('horizontal-align')) {
    124               myFit.horizontalAlign = target.getAttribute('horizontal-align');
    125               var children = target.parentNode.querySelectorAll('[horizontal-align]');
    126               for (var i = 0; i < children.length; i++) {
    127                 toggleClass(children[i], 'selected', children[i] === target);
    128               }
    129             }
    130             if (target.hasAttribute('vertical-align')) {
    131               myFit.verticalAlign = target.getAttribute('vertical-align');
    132               var children = target.parentNode.querySelectorAll('[vertical-align]');
    133               for (var i = 0; i < children.length; i++) {
    134                 toggleClass(children[i], 'selected', children[i] === target);
    135               }
    136             }
    137             template.refit();
    138           };
    139 
    140           template.toggleNoOverlap = function(e) {
    141             myFit.noOverlap = !myFit.noOverlap;
    142             toggleClass(Polymer.dom(e).rootTarget, 'selected', myFit.noOverlap);
    143             template.refit();
    144           };
    145 
    146           template.toggleDynamicAlign = function(e) {
    147             myFit.dynamicAlign = !myFit.dynamicAlign;
    148             toggleClass(Polymer.dom(e).rootTarget, 'selected', myFit.dynamicAlign);
    149             template.refit();
    150           };
    151 
    152           // Listen for resize and scroll on window.
    153           window.addEventListener('resize', template.refit);
    154           window.addEventListener('scroll', template.refit);
    155 
    156           function toggleClass(element, cssClass, condition) {
    157             element.classList[condition ? 'add' : 'remove'](cssClass);
    158           }
    159         </script>
    160       </template>
    161     </template>
    162   </demo-snippet>
    163 
    164 </body>
    165 
    166 </html>
    167