Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: third_party/polymer/v0_8/components-chromium/iron-collapse/iron-collapse-extracted.js

Issue 1162563004: Upgrade to 1.0 and switch clients to dom-repeat where needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a layout import and remove the gzipped webanimation in reproduce.sh Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 2
3 Polymer({ 3 Polymer({
4 4
5 is: 'iron-collapse', 5 is: 'iron-collapse',
6 6
7 properties: { 7 properties: {
8 8
9 /** 9 /**
10 * If true, the orientation is horizontal; otherwise is vertical. 10 * If true, the orientation is horizontal; otherwise is vertical.
11 * 11 *
12 * @attribute horizontal 12 * @attribute horizontal
13 * @type Boolean
14 * @default false
15 */ 13 */
16 horizontal: { 14 horizontal: {
17 type: Boolean, 15 type: Boolean,
18 value: false, 16 value: false,
19 observer: 'horizontalChanged' 17 observer: '_horizontalChanged'
20 }, 18 },
21 19
22 /** 20 /**
23 * Set opened to true to show the collapse element and to false to hide it . 21 * Set opened to true to show the collapse element and to false to hide it .
24 * 22 *
25 * @attribute opened 23 * @attribute opened
26 * @type Boolean
27 * @default false
28 */ 24 */
29 opened: { 25 opened: {
30 type: Boolean, 26 type: Boolean,
31 value: false, 27 value: false,
32 notify: true, 28 notify: true,
33 observer: 'openedChanged' 29 observer: '_openedChanged'
34 } 30 }
35 31
36 }, 32 },
37 33
34 hostAttributes: {
35 role: 'group',
36 'aria-expanded': 'false',
37 tabindex: 0
38 },
39
38 listeners: { 40 listeners: {
39 transitionend: 'transitionEnd' 41 transitionend: '_transitionEnd'
40 }, 42 },
41 43
42 ready: function() { 44 ready: function() {
43 // Avoid transition at the beginning e.g. page loads and enable 45 // Avoid transition at the beginning e.g. page loads and enable
44 // transitions only after the element is rendered and ready. 46 // transitions only after the element is rendered and ready.
45 this._enableTransition = true; 47 this._enableTransition = true;
46 }, 48 },
47 49
48 horizontalChanged: function() {
49 this.dimension = this.horizontal ? 'width' : 'height';
50 this.style.transitionProperty = this.dimension;
51 },
52
53 openedChanged: function() {
54 this[this.opened ? 'show' : 'hide']();
55 },
56
57 /** 50 /**
58 * Toggle the opened state. 51 * Toggle the opened state.
59 * 52 *
60 * @method toggle 53 * @method toggle
61 */ 54 */
62 toggle: function() { 55 toggle: function() {
63 this.opened = !this.opened; 56 this.opened = !this.opened;
64 }, 57 },
65 58
66 show: function() { 59 show: function() {
67 this.toggleClass('iron-collapse-closed', false); 60 this.toggleClass('iron-collapse-closed', false);
68 this.updateSize('auto', false); 61 this.updateSize('auto', false);
69 var s = this.calcSize(); 62 var s = this._calcSize();
70 this.updateSize('0px', false); 63 this.updateSize('0px', false);
71 // force layout to ensure transition will go 64 // force layout to ensure transition will go
72 this.offsetHeight; 65 this.offsetHeight;
73 this.updateSize(s, true); 66 this.updateSize(s, true);
74 }, 67 },
75 68
76 hide: function() { 69 hide: function() {
77 this.toggleClass('iron-collapse-opened', false); 70 this.toggleClass('iron-collapse-opened', false);
78 this.updateSize(this.calcSize(), false); 71 this.updateSize(this._calcSize(), false);
79 // force layout to ensure transition will go 72 // force layout to ensure transition will go
80 this.offsetHeight; 73 this.offsetHeight;
81 this.updateSize('0px', true); 74 this.updateSize('0px', true);
82 }, 75 },
83 76
84 updateSize: function(size, animated) { 77 updateSize: function(size, animated) {
85 this.enableTransition(animated); 78 this.enableTransition(animated);
86 var s = this.style; 79 var s = this.style;
87 var nochange = s[this.dimension] === size; 80 var nochange = s[this.dimension] === size;
88 s[this.dimension] = size; 81 s[this.dimension] = size;
89 if (animated && nochange) { 82 if (animated && nochange) {
90 this.transitionEnd(); 83 this._transitionEnd();
91 } 84 }
92 }, 85 },
93 86
94 calcSize: function() {
95 return this.getBoundingClientRect()[this.dimension] + 'px';
96 },
97
98 enableTransition: function(enabled) { 87 enableTransition: function(enabled) {
99 this.style.transitionDuration = (enabled && this._enableTransition) ? '' : '0s'; 88 this.style.transitionDuration = (enabled && this._enableTransition) ? '' : '0s';
100 }, 89 },
101 90
102 transitionEnd: function() { 91 _horizontalChanged: function() {
92 this.dimension = this.horizontal ? 'width' : 'height';
93 this.style.transitionProperty = this.dimension;
94 },
95
96 _openedChanged: function() {
97 this[this.opened ? 'show' : 'hide']();
98 this.setAttribute('aria-expanded', this.opened ? 'true' : 'false');
99
100 },
101
102 _transitionEnd: function() {
103 if (this.opened) { 103 if (this.opened) {
104 this.updateSize('auto', false); 104 this.updateSize('auto', false);
105 } 105 }
106 this.toggleClass('iron-collapse-closed', !this.opened); 106 this.toggleClass('iron-collapse-closed', !this.opened);
107 this.toggleClass('iron-collapse-opened', this.opened); 107 this.toggleClass('iron-collapse-opened', this.opened);
108 this.enableTransition(false); 108 this.enableTransition(false);
109 } 109 },
110
111 _calcSize: function() {
112 return this.getBoundingClientRect()[this.dimension] + 'px';
113 },
114
110 115
111 }); 116 });
112 117
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698