OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 cr.define('options', function() { | 5 cr.define('options', function() { |
6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; | 6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; |
7 /** @const */ var Grid = cr.ui.Grid; | 7 /** @const */ var Grid = cr.ui.Grid; |
8 /** @const */ var GridItem = cr.ui.GridItem; | 8 /** @const */ var GridItem = cr.ui.GridItem; |
9 /** @const */ var GridSelectionController = cr.ui.GridSelectionController; | 9 /** @const */ var GridSelectionController = cr.ui.GridSelectionController; |
10 /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; | 10 /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 | 59 |
60 UserImagesGridItem.prototype = { | 60 UserImagesGridItem.prototype = { |
61 __proto__: GridItem.prototype, | 61 __proto__: GridItem.prototype, |
62 | 62 |
63 /** @inheritDoc */ | 63 /** @inheritDoc */ |
64 decorate: function() { | 64 decorate: function() { |
65 GridItem.prototype.decorate.call(this); | 65 GridItem.prototype.decorate.call(this); |
66 var imageEl = cr.doc.createElement('img'); | 66 var imageEl = cr.doc.createElement('img'); |
67 imageEl.src = this.dataItem.url; | 67 imageEl.src = this.dataItem.url; |
68 imageEl.title = this.dataItem.title || ''; | 68 imageEl.title = this.dataItem.title || ''; |
69 var label = imageEl.src.replace(/(.*\/|\.png)/g, ''); | |
70 imageEl.setAttribute('aria-label', label.replace(/_/g, ' ')); | |
71 if (typeof this.dataItem.clickHandler == 'function') | 69 if (typeof this.dataItem.clickHandler == 'function') |
72 imageEl.addEventListener('mousedown', this.dataItem.clickHandler); | 70 imageEl.addEventListener('mousedown', this.dataItem.clickHandler); |
73 // Remove any garbage added by GridItem and ListItem decorators. | 71 // Remove any garbage added by GridItem and ListItem decorators. |
74 this.textContent = ''; | 72 this.textContent = ''; |
75 this.appendChild(imageEl); | 73 this.appendChild(imageEl); |
76 if (typeof this.dataItem.decorateFn == 'function') | 74 if (typeof this.dataItem.decorateFn == 'function') |
77 this.dataItem.decorateFn(this); | 75 this.dataItem.decorateFn(this); |
| 76 this.setAttribute('role', 'option'); |
78 } | 77 } |
79 }; | 78 }; |
80 | 79 |
81 /** | 80 /** |
82 * Creates a selection controller that wraps selection on grid ends | 81 * Creates a selection controller that wraps selection on grid ends |
83 * and translates Enter presses into 'activate' events. | 82 * and translates Enter presses into 'activate' events. |
84 * @param {cr.ui.ListSelectionModel} selectionModel The selection model to | 83 * @param {cr.ui.ListSelectionModel} selectionModel The selection model to |
85 * interact with. | 84 * interact with. |
86 * @param {cr.ui.Grid} grid The grid to interact with. | 85 * @param {cr.ui.Grid} grid The grid to interact with. |
87 * @constructor | 86 * @constructor |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 | 134 |
136 /** @inheritDoc */ | 135 /** @inheritDoc */ |
137 decorate: function() { | 136 decorate: function() { |
138 Grid.prototype.decorate.call(this); | 137 Grid.prototype.decorate.call(this); |
139 this.dataModel = new ArrayDataModel([]); | 138 this.dataModel = new ArrayDataModel([]); |
140 this.itemConstructor = UserImagesGridItem; | 139 this.itemConstructor = UserImagesGridItem; |
141 this.selectionModel = new ListSingleSelectionModel(); | 140 this.selectionModel = new ListSingleSelectionModel(); |
142 this.inProgramSelection_ = false; | 141 this.inProgramSelection_ = false; |
143 this.addEventListener('dblclick', this.handleDblClick_.bind(this)); | 142 this.addEventListener('dblclick', this.handleDblClick_.bind(this)); |
144 this.addEventListener('change', this.handleChange_.bind(this)); | 143 this.addEventListener('change', this.handleChange_.bind(this)); |
| 144 this.setAttribute('role', 'listbox'); |
145 }, | 145 }, |
146 | 146 |
147 /** | 147 /** |
148 * Handles double click on the image grid. | 148 * Handles double click on the image grid. |
149 * @param {Event} e Double click Event. | 149 * @param {Event} e Double click Event. |
150 * @private | 150 * @private |
151 */ | 151 */ |
152 handleDblClick_: function(e) { | 152 handleDblClick_: function(e) { |
153 // If a child element is double-clicked and not the grid itself, handle | 153 // If a child element is double-clicked and not the grid itself, handle |
154 // this as 'Enter' keypress. | 154 // this as 'Enter' keypress. |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 UserImagesGrid.ButtonImages = { | 651 UserImagesGrid.ButtonImages = { |
652 TAKE_PHOTO: 'chrome://theme/IDR_BUTTON_USER_IMAGE_TAKE_PHOTO', | 652 TAKE_PHOTO: 'chrome://theme/IDR_BUTTON_USER_IMAGE_TAKE_PHOTO', |
653 CHOOSE_FILE: 'chrome://theme/IDR_BUTTON_USER_IMAGE_CHOOSE_FILE', | 653 CHOOSE_FILE: 'chrome://theme/IDR_BUTTON_USER_IMAGE_CHOOSE_FILE', |
654 PROFILE_PICTURE: 'chrome://theme/IDR_PROFILE_PICTURE_LOADING' | 654 PROFILE_PICTURE: 'chrome://theme/IDR_PROFILE_PICTURE_LOADING' |
655 }; | 655 }; |
656 | 656 |
657 return { | 657 return { |
658 UserImagesGrid: UserImagesGrid | 658 UserImagesGrid: UserImagesGrid |
659 }; | 659 }; |
660 }); | 660 }); |
OLD | NEW |