OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 /** | 5 /** |
6 * @fileoverview Element which shows toasts. | 6 * @fileoverview Element which shows toasts. |
7 */ | 7 */ |
8 cr.define('bookmarks', function() { | 8 cr.define('bookmarks', function() { |
9 | 9 |
10 var ToastManager = Polymer({ | 10 var ToastManager = Polymer({ |
11 is: 'bookmarks-toast-manager', | 11 is: 'bookmarks-toast-manager', |
12 | 12 |
13 properties: { | 13 properties: { |
14 duration: { | 14 duration: { |
15 type: Number, | 15 type: Number, |
16 value: 0, | 16 value: 0, |
17 }, | 17 }, |
18 | 18 |
19 /** @private */ | 19 /** @private */ |
20 open_: { | 20 open_: { |
21 type: Boolean, | 21 type: Boolean, |
22 reflectToAttribute: true, | 22 observer: 'openChanged_', |
| 23 value: false, |
23 }, | 24 }, |
24 | 25 |
25 /** @private */ | 26 /** @private */ |
26 showUndo_: Boolean, | 27 showUndo_: Boolean, |
27 }, | 28 }, |
28 | 29 |
29 /** @private {bookmarks.TimerProxy} */ | 30 /** @private {bookmarks.TimerProxy} */ |
30 timerProxy_: new bookmarks.TimerProxy(), | 31 timerProxy_: new bookmarks.TimerProxy(), |
31 | 32 |
32 /** @private {number|null} */ | 33 /** @private {number|null} */ |
33 hideTimeoutId_: null, | 34 hideTimeoutId_: null, |
34 | 35 |
35 /** @override */ | 36 /** @override */ |
36 attached: function() { | 37 attached: function() { |
37 assert(ToastManager.instance_ == null); | 38 assert(ToastManager.instance_ == null); |
38 ToastManager.instance_ = this; | 39 ToastManager.instance_ = this; |
| 40 Polymer.RenderStatus.afterNextRender(this, function() { |
| 41 Polymer.IronA11yAnnouncer.requestAvailability(); |
| 42 }); |
39 }, | 43 }, |
40 | 44 |
41 /** @override */ | 45 /** @override */ |
42 detached: function() { | 46 detached: function() { |
43 ToastManager.instance_ = null; | 47 ToastManager.instance_ = null; |
44 }, | 48 }, |
45 | 49 |
46 /** | 50 /** |
47 * @param {string} label The label to display inside the toast. | 51 * @param {string} label The label to display inside the toast. |
48 * @param {boolean} showUndo Whether the undo button should be shown. | 52 * @param {boolean} showUndo Whether the undo button should be shown. |
(...skipping 26 matching lines...) Expand all Loading... |
75 this.showInternal_(showUndo); | 79 this.showInternal_(showUndo); |
76 }, | 80 }, |
77 | 81 |
78 /** | 82 /** |
79 * @param {boolean} showUndo Whether the undo button should be shown. | 83 * @param {boolean} showUndo Whether the undo button should be shown. |
80 * @private | 84 * @private |
81 */ | 85 */ |
82 showInternal_: function(showUndo) { | 86 showInternal_: function(showUndo) { |
83 this.open_ = true; | 87 this.open_ = true; |
84 this.showUndo_ = showUndo; | 88 this.showUndo_ = showUndo; |
| 89 this.fire('iron-announce', {text: this.$.content.textContent}); |
85 | 90 |
86 if (!this.duration) | 91 if (!this.duration) |
87 return; | 92 return; |
88 | 93 |
89 if (this.hideTimeoutId_ != null) | 94 if (this.hideTimeoutId_ != null) |
90 this.timerProxy_.clearTimeout(this.hideTimeoutId_); | 95 this.timerProxy_.clearTimeout(this.hideTimeoutId_); |
91 | 96 |
92 this.hideTimeoutId_ = this.timerProxy_.setTimeout(function() { | 97 this.hideTimeoutId_ = this.timerProxy_.setTimeout(function() { |
93 this.open_ = false; | 98 this.hide(); |
94 this.hideTimeoutId_ = null; | 99 this.hideTimeoutId_ = null; |
95 }.bind(this), this.duration); | 100 }.bind(this), this.duration); |
96 }, | 101 }, |
97 | 102 |
98 hide: function() { | 103 hide: function() { |
99 this.open_ = false; | 104 this.open_ = false; |
| 105 // Hide the undo button to prevent it from being accessed with tab. |
| 106 this.showUndo_ = false; |
100 }, | 107 }, |
101 | 108 |
102 /** @private */ | 109 /** @private */ |
103 onUndoTap_: function() { | 110 onUndoTap_: function() { |
104 // Will hide the toast. | 111 // Will hide the toast. |
105 this.fire('command-undo'); | 112 this.fire('command-undo'); |
106 }, | 113 }, |
| 114 |
| 115 /** @private */ |
| 116 openChanged_: function() { |
| 117 this.$.toast.setAttribute('aria-hidden', String(!this.open_)); |
| 118 }, |
107 }); | 119 }); |
108 | 120 |
109 /** @private {?bookmarks.ToastManager} */ | 121 /** @private {?bookmarks.ToastManager} */ |
110 ToastManager.instance_ = null; | 122 ToastManager.instance_ = null; |
111 | 123 |
112 /** @return {!bookmarks.ToastManager} */ | 124 /** @return {!bookmarks.ToastManager} */ |
113 ToastManager.getInstance = function() { | 125 ToastManager.getInstance = function() { |
114 return assert(ToastManager.instance_); | 126 return assert(ToastManager.instance_); |
115 }; | 127 }; |
116 | 128 |
117 return { | 129 return { |
118 ToastManager: ToastManager, | 130 ToastManager: ToastManager, |
119 }; | 131 }; |
120 }); | 132 }); |
OLD | NEW |