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

Side by Side Diff: ui/file_manager/audio_player/elements/control_panel.js

Issue 1176483002: AudioPlayer.app: Migrate to Polymer 1.0. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 (function() { 5 (function() {
6 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * Moves |target| element above |anchor| element, in order to match the 9 * Moves |target| element above |anchor| element, in order to match the
10 * bottom lines. 10 * bottom lines.
11 * @param {HTMLElement} target Target element. 11 * @param {HTMLElement} target Target element.
12 * @param {HTMLElement} anchor Anchor element. 12 * @param {HTMLElement} anchor Anchor element.
13 */ 13 */
14 function matchBottomLine(target, anchor) { 14 function matchBottomLine(target, anchor) {
15 var targetRect = target.getBoundingClientRect(); 15 var targetRect = target.getBoundingClientRect();
16 var anchorRect = anchor.getBoundingClientRect(); 16 var anchorRect = anchor.getBoundingClientRect();
17 17
18 var pos = { 18 var pos = {
19 left: anchorRect.left + anchorRect.width / 2 - targetRect.width / 2, 19 left: anchorRect.left + anchorRect.width / 2 - targetRect.width / 2,
20 bottom: window.innerHeight - anchorRect.bottom, 20 bottom: window.innerHeight - anchorRect.bottom,
21 }; 21 };
22 22
23 target.style.position = 'fixed'; 23 target.style.position = 'fixed';
24 target.style.left = pos.left + 'px'; 24 target.style.left = pos.left + 'px';
25 target.style.bottom = pos.bottom + 'px'; 25 target.style.bottom = pos.bottom + 'px';
26 } 26 }
27 27
28 /** 28 /**
29 * Converts the time into human friendly string.
30 * @param {number} time Time to be converted.
31 * @return {string} String representation of the given time
32 */
33 function time2string(time) {
34 return ~~(time / 60000) + ':' + ('0' + ~~(time / 1000 % 60)).slice(-2);
35 }
36
37 /**
38 * @constructor 29 * @constructor
39 * @extends {PolymerElement} 30 * @extends {PolymerElement}
40 */ 31 */
41 var ControlPanelElement = function() {}; 32 var ControlPanelElement = function() {};
42 33
43 ControlPanelElement.prototype = { 34 ControlPanelElement.prototype = {
35 is: 'control-panel',
36
37 properties: {
38 /**
39 * Flag whether the audio is playing or paused. True if playing, or false
40 * paused.
41 */
42 playing: {
43 type: Boolean,
44 notify: true
45 },
46
47 /**
48 * Current elapsed time in the current music in millisecond.
49 */
50 time: {
51 type: Number,
52 value: 0,
53 notify: true
54 },
55
56 /**
57 * Total length of the current music in millisecond.
58 */
59 duration: {
60 type: Number,
61 value: 0,
62 notify: true
yawano 2015/06/10 05:47:48 notify: false? Since this is property is bound as
fukino 2015/06/10 06:24:03 Yes, you are right. Done.
63 },
64
65 /**
66 * Whether the shuffle button is ON.
67 */
68 shuffle: {
69 type: Boolean,
70 notify: true
71 },
72
73 /**
74 * Whether the repeat button is ON.
75 */
76 repeat: {
77 type: Boolean,
78 notify: true
79 },
80
81 /**
82 * The audio volume. 0 is silent, and 100 is maximum loud.
83 */
84 volume: {
85 type: Number,
86 notify: true
87 },
88
89 /**
90 * Whether the expanded button is ON.
91 */
92 expanded: {
93 type: Boolean,
94 notify: true
95 },
96
97 /**
98 * Whether the volume slider is expanded or not.
99 */
100 volumeSliderShown: {
101 type: Boolean,
102 value: false,
yawano 2015/06/10 05:47:48 nit: Why some properties have default value and so
fukino 2015/06/10 06:24:03 Basically, it was based on whether we have default
yawano 2015/06/10 06:46:18 SGTM.
103 notify: true
104 }
105 },
106
44 /** 107 /**
45 * Initializes an element. This method is called automatically when the 108 * Initializes an element. This method is called automatically when the
46 * element is ready. 109 * element is ready.
47 */ 110 */
48 ready: function() { 111 ready: function() {
49 var onFocusoutBound = this.onVolumeControllerFocusout_.bind(this); 112 var onFocusoutBound = this.onVolumeControllerFocusout_.bind(this);
50 113
51 this.volumeSlider = this.$.volumeSlider; 114 this.volumeSlider = this.$.volumeSlider;
52 this.volumeButton = this.$.volumeButton; 115 this.volumeButton = this.$.volumeButton;
53 this.volumeContainer = this.$.volumeContainer; 116 this.volumeContainer = this.$.volumeContainer;
54 117
55 this.volumeSlider.addEventListener('focusout', onFocusoutBound); 118 this.volumeSlider.addEventListener('focusout', onFocusoutBound);
56 this.volumeButton.addEventListener('focusout', onFocusoutBound); 119 this.volumeButton.addEventListener('focusout', onFocusoutBound);
57 }, 120 },
58 121
59 /** 122 /**
60 * Model object of the Audio Player.
61 * @type {AudioPlayerModel}
62 */
63 model: null,
64
65 /**
66 * Invoked when the model changed.
67 * @param {AudioPlayerModel} oldValue Old Value.
68 * @param {AudioPlayerModel} newValue New Value.
69 */
70 modelChanged: function(oldValue, newValue) {
71 this.volumeSlider.model = newValue;
72 },
73
74 /**
75 * Current elapsed time in the current music in millisecond.
76 * @type {number}
77 */
78 time: 0,
79
80 /**
81 * String representation of 'time'.
82 * @type {number}
83 * @private
84 */
85 get timeString_() {
86 return time2string(this.time);
87 },
88
89 /**
90 * Total length of the current music in millisecond.
91 * @type {number}
92 */
93 duration: 0,
94
95 /**
96 * String representation of 'duration'.
97 * @type {string}
98 * @private
99 */
100 get durationString_() {
101 return time2string(this.duration);
102 },
103
104 /**
105 * Flag whether the volume slider is expanded or not.
106 * @type {boolean}
107 */
108 volumeSliderShown: false,
109
110 /**
111 * Flag whether the audio is playing or paused. True if playing, or false
112 * paused.
113 * @type {boolean}
114 */
115 playing: false,
116
117 /**
118 * Invoked when the next button is clicked. 123 * Invoked when the next button is clicked.
119 */ 124 */
120 nextClick: function() { 125 nextClick: function() {
121 this.fire('next-clicked'); 126 this.fire('next-clicked');
122 }, 127 },
123 128
124 /** 129 /**
125 * Invoked when the play button is clicked. 130 * Invoked when the play button is clicked.
126 */ 131 */
127 playClick: function() { 132 playClick: function() {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 * @private 172 * @private
168 */ 173 */
169 showVolumeController_: function(show) { 174 showVolumeController_: function(show) {
170 if (show) { 175 if (show) {
171 matchBottomLine(this.$.volumeContainer, this.$.volumeButton); 176 matchBottomLine(this.$.volumeContainer, this.$.volumeButton);
172 this.volumeContainer.style.visibility = 'visible'; 177 this.volumeContainer.style.visibility = 'visible';
173 } else { 178 } else {
174 this.volumeContainer.style.visibility = 'hidden'; 179 this.volumeContainer.style.visibility = 'hidden';
175 } 180 }
176 }, 181 },
182
183 /**
184 * Converts the time into human friendly string.
185 * @param {number} time Time to be converted.
186 * @return {string} String representation of the given time
187 */
188 time2string_: function(time) {
189 return ~~(time / 60000) + ':' + ('0' + ~~(time / 1000 % 60)).slice(-2);
190 },
191
192 /**
193 * Computes state for play button based on 'playing' property.
194 * @return {string}
195 */
196 computePlayState_: function(playing) {
197 return playing ? "playing" : "ended";
198 },
199
200 /**
201 * Computes style for '.filled' element of progress bar.
202 * @return {string}
203 */
204 computeProgressBarStyle_: function(time, duration) {
205 return 'width: ' + (time / duration * 100) + '%;';
206 }
177 }; 207 };
178 208
179 Polymer('control-panel', ControlPanelElement.prototype); 209 Polymer(ControlPanelElement.prototype);
180 })(); // Anonymous closure 210 })(); // Anonymous closure
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698