OLD | NEW |
| (Empty) |
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.g
ithub.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/CONTRI
BUTORS.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/PATEN
TS.txt | |
9 --> | |
10 | |
11 <link rel="import" href="../polymer/polymer.html"> | |
12 <link rel="import" href="../iron-flex-layout/classes/iron-flex-layout.html"> | |
13 <link rel="import" href="../paper-styles/paper-styles.html"> | |
14 | |
15 <!-- | |
16 `paper-dialog-scrollable` implements a scrolling area used in a Material Design
dialog. It shows | |
17 a divider at the top and/or bottom indicating more content, depending on scroll
position. Use this | |
18 together with elements implementing `Polymer.PaperDialogBehavior`. | |
19 | |
20 <paper-dialog-impl> | |
21 <h2>Header</h2> | |
22 <paper-dialog-scrollable> | |
23 Lorem ipsum... | |
24 </paper-dialog-scrollable> | |
25 <div class="buttons"> | |
26 <paper-button>OK</paper-button> | |
27 </div> | |
28 </paper-dialog-impl> | |
29 | |
30 It shows a top divider after scrolling if it is not the first child in its paren
t container, | |
31 indicating there is more content above. It shows a bottom divider if it is scrol
lable and it is not | |
32 the last child in its parent container, indicating there is more content below.
The bottom divider | |
33 is hidden if it is scrolled to the bottom. | |
34 | |
35 @group Paper Elements | |
36 @element paper-dialog-scrollable | |
37 @demo demo/index.html | |
38 @hero hero.svg | |
39 --> | |
40 | |
41 <dom-module id="paper-dialog-scrollable"> | |
42 | |
43 <style> | |
44 | |
45 :host { | |
46 display: block; | |
47 position: relative; | |
48 } | |
49 | |
50 :host(.is-scrolled:not(:first-child))::before { | |
51 content: ''; | |
52 position: absolute; | |
53 top: 0; | |
54 left: 0; | |
55 right: 0; | |
56 height: 1px; | |
57 background: var(--divider-color); | |
58 } | |
59 | |
60 :host(.can-scroll:not(.scrolled-to-bottom):not(:last-child))::after { | |
61 content: ''; | |
62 position: absolute; | |
63 bottom: 0; | |
64 left: 0; | |
65 right: 0; | |
66 height: 1px; | |
67 background: var(--divider-color); | |
68 } | |
69 | |
70 .scrollable { | |
71 padding: 0 24px; | |
72 | |
73 @apply(--layout-scroll); | |
74 | |
75 @apply(--paper-dialog-scrollable); | |
76 } | |
77 </style> | |
78 | |
79 <template> | |
80 <div id="scrollable" class="scrollable"> | |
81 <content></content> | |
82 </div> | |
83 </template> | |
84 | |
85 </dom-module> | |
86 | |
87 <script> | |
88 | |
89 (function() { | |
90 | |
91 Polymer({ | |
92 | |
93 is: 'paper-dialog-scrollable', | |
94 | |
95 properties: { | |
96 | |
97 /** | |
98 * The dialog element that implements `Polymer.PaperDialogBehavior` contai
ning this element. | |
99 */ | |
100 dialogElement: { | |
101 type: Object, | |
102 value: function() { | |
103 return this.parentNode; | |
104 } | |
105 } | |
106 | |
107 }, | |
108 | |
109 listeners: { | |
110 'scrollable.scroll': '_onScroll', | |
111 'iron-resize': '_onIronResize' | |
112 }, | |
113 | |
114 /** | |
115 * Returns the scrolling element. | |
116 */ | |
117 get scrollTarget() { | |
118 return this.$.scrollable; | |
119 }, | |
120 | |
121 attached: function() { | |
122 this.classList.add('no-padding'); | |
123 // Set itself to the overlay sizing target | |
124 this.dialogElement.sizingTarget = this.scrollTarget; | |
125 // If the host is sized, fit the scrollable area to the container. Otherwi
se let it be | |
126 // its natural size. | |
127 requestAnimationFrame(function() { | |
128 if (this.offsetHeight > 0) { | |
129 this.$.scrollable.classList.add('fit'); | |
130 } | |
131 this._scroll(); | |
132 }.bind(this)); | |
133 }, | |
134 | |
135 _scroll: function() { | |
136 this.toggleClass('is-scrolled', this.scrollTarget.scrollTop > 0); | |
137 this.toggleClass('can-scroll', this.scrollTarget.offsetHeight < this.scrol
lTarget.scrollHeight); | |
138 this.toggleClass('scrolled-to-bottom', | |
139 this.scrollTarget.scrollTop + this.scrollTarget.offsetHeight >= this.scr
ollTarget.scrollHeight); | |
140 }, | |
141 | |
142 _onScroll: function() { | |
143 this._scroll(); | |
144 } | |
145 | |
146 }) | |
147 | |
148 })(); | |
149 | |
150 </script> | |
OLD | NEW |