73bcce88
luigser
COMPONENTS
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!--
@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">
<!--
`iron-collapse` creates a collapsible block of content. By default, the content
will be collapsed. Use `opened` or `toggle()` to show/hide the content.
|
e619a3b0
Luigi Serra
Controllet cross ...
|
17
|
<button on-click="toggle">toggle collapse</button>
|
73bcce88
luigser
COMPONENTS
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<iron-collapse id="collapse">
<div>Content goes here...</div>
</iron-collapse>
...
toggle: function() {
this.$.collapse.toggle();
}
`iron-collapse` adjusts the height/width of the collapsible element to show/hide
the content. So avoid putting padding/margin/border on the collapsible directly,
and instead put a div inside and style that.
<style>
.collapse-content {
padding: 15px;
border: 1px solid #dedede;
}
</style>
<iron-collapse>
<div class="collapse-content">
<div>Content goes here...</div>
</div>
</iron-collapse>
@group Iron Elements
@hero hero.svg
@demo demo/index.html
@element iron-collapse
-->
<dom-module id="iron-collapse">
<style>
:host {
display: block;
transition-duration: 300ms;
|
a1a3bc73
Luigi Serra
graphs updates
|
59
|
overflow: auto;
|
73bcce88
luigser
COMPONENTS
|
60
61
62
63
64
65
|
}
:host(.iron-collapse-closed) {
display: none;
}
|
73bcce88
luigser
COMPONENTS
|
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
</style>
<template>
<content></content>
</template>
</dom-module>
<script>
Polymer({
is: 'iron-collapse',
properties: {
/**
* If true, the orientation is horizontal; otherwise is vertical.
*
* @attribute horizontal
*/
horizontal: {
type: Boolean,
value: false,
observer: '_horizontalChanged'
},
/**
* Set opened to true to show the collapse element and to false to hide it.
*
* @attribute opened
*/
opened: {
type: Boolean,
value: false,
notify: true,
observer: '_openedChanged'
|
a1a3bc73
Luigi Serra
graphs updates
|
105
106
107
108
109
110
111
112
113
114
|
},
/**
* Set noAnimation to true to disable animations
*
* @attribute noAnimation
*/
noAnimation: {
type: Boolean
},
|
73bcce88
luigser
COMPONENTS
|
115
116
117
118
119
|
},
hostAttributes: {
role: 'group',
|
a1a3bc73
Luigi Serra
graphs updates
|
120
|
'aria-hidden': 'true',
|
73bcce88
luigser
COMPONENTS
|
121
122
123
124
125
126
127
|
'aria-expanded': 'false'
},
listeners: {
transitionend: '_transitionEnd'
},
|
a1a3bc73
Luigi Serra
graphs updates
|
128
129
130
|
attached: function() {
// It will take care of setting correct classes and styles.
this._transitionEnd();
|
73bcce88
luigser
COMPONENTS
|
131
132
133
134
135
136
137
138
139
140
141
142
|
},
/**
* Toggle the opened state.
*
* @method toggle
*/
toggle: function() {
this.opened = !this.opened;
},
show: function() {
|
a1a3bc73
Luigi Serra
graphs updates
|
143
|
this.opened = true;
|
73bcce88
luigser
COMPONENTS
|
144
145
146
|
},
hide: function() {
|
a1a3bc73
Luigi Serra
graphs updates
|
147
|
this.opened = false;
|
73bcce88
luigser
COMPONENTS
|
148
149
150
|
},
updateSize: function(size, animated) {
|
a1a3bc73
Luigi Serra
graphs updates
|
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
// No change!
if (this.style[this.dimension] === size) {
return;
}
this._updateTransition(false);
// If we can animate, must do some prep work.
if (animated && !this.noAnimation) {
// Animation will start at the current size.
var startSize = this._calcSize();
// For `auto` we must calculate what is the final size for the animation.
// After the transition is done, _transitionEnd will set the size back to `auto`.
if (size === 'auto') {
this.style[this.dimension] = size;
size = this._calcSize();
}
// Go to startSize without animation.
this.style[this.dimension] = startSize;
// Force layout to ensure transition will go. Set offsetHeight to itself
// so that compilers won't remove it.
this.offsetHeight = this.offsetHeight;
// Enable animation.
this._updateTransition(true);
|
73bcce88
luigser
COMPONENTS
|
174
|
}
|
a1a3bc73
Luigi Serra
graphs updates
|
175
176
|
// Set the final size.
this.style[this.dimension] = size;
|
73bcce88
luigser
COMPONENTS
|
177
178
|
},
|
a1a3bc73
Luigi Serra
graphs updates
|
179
180
181
182
183
184
185
|
/**
* enableTransition() is deprecated, but left over so it doesn't break existing code.
* Please use `noAnimation` property instead.
*
* @method enableTransition
* @deprecated since version 1.0.4
*/
|
73bcce88
luigser
COMPONENTS
|
186
|
enableTransition: function(enabled) {
|
a1a3bc73
Luigi Serra
graphs updates
|
187
188
189
190
191
192
|
console.warn('`enableTransition()` is deprecated, use `noAnimation` instead.');
this.noAnimation = !enabled;
},
_updateTransition: function(enabled) {
this.style.transitionDuration = (enabled && !this.noAnimation) ? '' : '0s';
|
73bcce88
luigser
COMPONENTS
|
193
194
195
196
197
198
199
200
|
},
_horizontalChanged: function() {
this.dimension = this.horizontal ? 'width' : 'height';
this.style.transitionProperty = this.dimension;
},
_openedChanged: function() {
|
a1a3bc73
Luigi Serra
graphs updates
|
201
202
203
204
205
206
207
208
|
this.setAttribute('aria-expanded', this.opened);
this.setAttribute('aria-hidden', !this.opened);
this.toggleClass('iron-collapse-closed', false);
this.toggleClass('iron-collapse-opened', false);
this.updateSize(this.opened ? 'auto' : '0px', true);
// Focus the current collapse.
|
e619a3b0
Luigi Serra
Controllet cross ...
|
209
|
if (this.opened) {
|
eb240478
Luigi Serra
public room cards...
|
210
|
this.focus();
|
a1a3bc73
Luigi Serra
graphs updates
|
211
212
213
|
}
if (this.noAnimation) {
this._transitionEnd();
|
e619a3b0
Luigi Serra
Controllet cross ...
|
214
|
}
|
73bcce88
luigser
COMPONENTS
|
215
216
217
218
|
},
_transitionEnd: function() {
if (this.opened) {
|
a1a3bc73
Luigi Serra
graphs updates
|
219
|
this.style[this.dimension] = 'auto';
|
73bcce88
luigser
COMPONENTS
|
220
221
222
|
}
this.toggleClass('iron-collapse-closed', !this.opened);
this.toggleClass('iron-collapse-opened', this.opened);
|
a1a3bc73
Luigi Serra
graphs updates
|
223
|
this._updateTransition(false);
|
73bcce88
luigser
COMPONENTS
|
224
225
226
227
|
},
_calcSize: function() {
return this.getBoundingClientRect()[this.dimension] + 'px';
|
a1a3bc73
Luigi Serra
graphs updates
|
228
|
}
|
73bcce88
luigser
COMPONENTS
|
229
230
231
232
|
});
</script>
|