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

Side by Side Diff: chrome/browser/resources/options/extension_list.js

Issue 8359008: Improve extension settings accessibility. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * A lookup helper function to find the first node that has an id (starting 9 * A lookup helper function to find the first node that has an id (starting
10 * at |node| and going up the parent chain). 10 * at |node| and going up the parent chain).
(...skipping 21 matching lines...) Expand all
32 32
33 /** @inheritDoc */ 33 /** @inheritDoc */
34 decorate: function() { 34 decorate: function() {
35 this.initControlsAndHandlers_(); 35 this.initControlsAndHandlers_();
36 36
37 var showingDetails = []; 37 var showingDetails = [];
38 var showingWarning = []; 38 var showingWarning = [];
39 this.deleteExistingExtensionNodes_(showingDetails, showingWarning); 39 this.deleteExistingExtensionNodes_(showingDetails, showingWarning);
40 40
41 this.showExtensionNodes_(showingDetails, showingWarning); 41 this.showExtensionNodes_(showingDetails, showingWarning);
42
43 // Support full keyboard accessibility without making things ugly
44 // for users who click, by hiding some focus outlines when the user
45 // clicks anywhere, but showing them when the user presses any key.
46 document.body.classList.add('hide-some-focus-outlines');
47 document.addEventListener('click', function(e) {
48 document.body.classList.add('hide-some-focus-outlines');
49 return true;
50 }, true);
51 document.addEventListener('keydown', function(e) {
52 document.body.classList.remove('hide-some-focus-outlines');
53 return true;
54 }, true);
Finnur 2011/10/21 09:35:46 I think decorate is called more than once, so why
dmazzoni 2011/10/21 16:29:38 Done.
42 }, 55 },
43 56
44 /** 57 /**
45 * Initializes the controls (toggle section and button) and installs 58 * Initializes the controls (toggle section and button) and installs
46 * handlers. 59 * handlers.
47 * @private 60 * @private
48 */ 61 */
49 initControlsAndHandlers_: function() { 62 initControlsAndHandlers_: function() {
50 // Make sure developer mode section is set correctly as per saved setting. 63 // Make sure developer mode section is set correctly as per saved setting.
51 var toggleButton = $('toggle-dev-on'); 64 var toggleButton = $('toggle-dev-on');
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 wrapper.appendChild(vboxOuter); 164 wrapper.appendChild(vboxOuter);
152 165
153 var hbox = this.ownerDocument.createElement('div'); 166 var hbox = this.ownerDocument.createElement('div');
154 hbox.classList.add('hbox'); 167 hbox.classList.add('hbox');
155 vboxOuter.appendChild(hbox); 168 vboxOuter.appendChild(hbox);
156 169
157 // Add a container div for the zippy, so we can extend the hit area. 170 // Add a container div for the zippy, so we can extend the hit area.
158 var container = this.ownerDocument.createElement('div'); 171 var container = this.ownerDocument.createElement('div');
159 // Clicking anywhere on the div expands/collapses the details. 172 // Clicking anywhere on the div expands/collapses the details.
160 container.classList.add('extension-zippy-container'); 173 container.classList.add('extension-zippy-container');
174 container.href = '#';
Finnur 2011/10/21 09:35:46 container is a div...
dmazzoni 2011/10/21 16:29:38 Oops! As you can see, I initially experimented wit
175 container.title = expanded ?
176 localStrings.getString('extensionSettingsHideDetails') :
177 localStrings.getString('extensionSettingsShowDetails');
178 container.tabIndex = 0;
179 container.setAttribute('role', 'button');
180 container.setAttribute('aria-controls', extension.id + '_details');
Finnur 2011/10/21 09:35:46 aria-controls? what's that?
dmazzoni 2011/10/21 16:29:38 http://www.w3.org/TR/wai-aria/states_and_propertie
181 container.setAttribute('aria-expanded', expanded);
161 container.addEventListener('click', this.handleZippyClick_.bind(this)); 182 container.addEventListener('click', this.handleZippyClick_.bind(this));
183 container.addEventListener('keydown',
184 this.handleZippyKeyDown_.bind(this));
162 hbox.appendChild(container); 185 hbox.appendChild(container);
163 186
164 // On the far left we have the zippy icon. 187 // On the far left we have the zippy icon.
165 var div = this.ownerDocument.createElement('div'); 188 var div = this.ownerDocument.createElement('div');
166 div.id = id + '_zippy'; 189 div.id = id + '_zippy';
167 div.classList.add('extension-zippy-default'); 190 div.classList.add('extension-zippy-default');
168 div.classList.add(expanded ? 'extension-zippy-expanded' : 191 div.classList.add(expanded ? 'extension-zippy-expanded' :
169 'extension-zippy-collapsed'); 192 'extension-zippy-collapsed');
170 container.appendChild(div); 193 container.appendChild(div);
171 194
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 */ 568 */
546 getExtensionWithId_: function(id) { 569 getExtensionWithId_: function(id) {
547 for (var i = 0; i < this.data_.extensions.length; ++i) { 570 for (var i = 0; i < this.data_.extensions.length; ++i) {
548 if (this.data_.extensions[i].id == id) 571 if (this.data_.extensions[i].id == id)
549 return this.data_.extensions[i]; 572 return this.data_.extensions[i];
550 } 573 }
551 return null; 574 return null;
552 }, 575 },
553 576
554 /** 577 /**
578 * Handles a key down on the zippy icon.
579 * @param {Event} e Key event.
580 * @private
581 */
582 handleZippyKeyDown_: function(e) {
583 if (e.keyCode == 13 || e.keyCode == 32) // Enter or Space
Finnur 2011/10/21 09:35:46 nit: End all comments with punctuation marks (peri
dmazzoni 2011/10/21 16:29:38 Done.
584 this.handleZippyClick_(e);
585 },
586
587 /**
555 * Handles the mouseclick on the zippy icon (that expands and collapses the 588 * Handles the mouseclick on the zippy icon (that expands and collapses the
556 * details section). 589 * details section).
557 * @param {Event} e Change event. 590 * @param {Event} e Mouse event.
558 * @private 591 * @private
559 */ 592 */
560 handleZippyClick_: function(e) { 593 handleZippyClick_: function(e) {
561 var node = findIdNode(e.target.parentNode); 594 var node = findIdNode(e.target.parentNode);
562 var iter = this.firstChild; 595 var iter = this.firstChild;
563 while (iter) { 596 while (iter) {
564 var zippy = $(iter.id + '_zippy'); 597 var zippy = $(iter.id + '_zippy');
565 var details = $(iter.id + '_details'); 598 var details = $(iter.id + '_details');
599 var container = zippy.parentElement;
566 if (iter.id == node.id) { 600 if (iter.id == node.id) {
567 // Toggle visibility. 601 // Toggle visibility.
568 if (iter.classList.contains('extension-list-item-expanded')) { 602 if (iter.classList.contains('extension-list-item-expanded')) {
569 // Hide yo kids! Hide yo wife! 603 // Hide yo kids! Hide yo wife!
570 zippy.classList.remove('extension-zippy-expanded'); 604 zippy.classList.remove('extension-zippy-expanded');
571 zippy.classList.add('extension-zippy-collapsed'); 605 zippy.classList.add('extension-zippy-collapsed');
572 details.classList.remove('extension-details-visible'); 606 details.classList.remove('extension-details-visible');
573 details.classList.add('extension-details-hidden'); 607 details.classList.add('extension-details-hidden');
574 iter.classList.remove('extension-list-item-expanded'); 608 iter.classList.remove('extension-list-item-expanded');
575 iter.classList.add('extension-list-item-collaped'); 609 iter.classList.add('extension-list-item-collaped');
610 container.setAttribute('aria-expanded', 'false');
611 container.title =
612 localStrings.getString('extensionSettingsShowDetails');
613 var detailsControls = details.querySelectorAll('a, input');
614 for (var i = 0; i < detailsControls.length; i++)
615 detailsControls[i].tabIndex = -1;
576 616
577 // Hide yo incognito warning. 617 // Hide yo incognito warning.
578 var butterBar = 618 var butterBar =
579 this.querySelector('#' + iter.id + '_incognitoWarning'); 619 this.querySelector('#' + iter.id + '_incognitoWarning');
580 if (!(butterBar === null)) 620 if (!(butterBar === null))
581 butterBar.hidden = true; 621 butterBar.hidden = true;
582 } else { 622 } else {
583 // Show the contents. 623 // Show the contents.
584 zippy.classList.remove('extension-zippy-collapsed'); 624 zippy.classList.remove('extension-zippy-collapsed');
585 zippy.classList.add('extension-zippy-expanded'); 625 zippy.classList.add('extension-zippy-expanded');
586 details.classList.remove('extension-details-hidden'); 626 details.classList.remove('extension-details-hidden');
587 details.classList.add('extension-details-visible'); 627 details.classList.add('extension-details-visible');
588 iter.classList.remove('extension-list-item-collaped'); 628 iter.classList.remove('extension-list-item-collaped');
589 iter.classList.add('extension-list-item-expanded'); 629 iter.classList.add('extension-list-item-expanded');
630 container.setAttribute('aria-expanded', 'true');
631 container.title =
632 localStrings.getString('extensionSettingsHideDetails');
633 var detailsControls = details.querySelectorAll('a, input');
634 for (var i = 0; i < detailsControls.length; i++)
635 detailsControls[i].tabIndex = 0;
590 } 636 }
591 } 637 }
592 iter = iter.nextSibling; 638 iter = iter.nextSibling;
593 } 639 }
594 }, 640 },
595 641
596 /** 642 /**
597 * Handles the mouse-up and keyboard-up events. This is used to limit the 643 * Handles the mouse-up and keyboard-up events. This is used to limit the
598 * number of items to show in the list, when the user is searching for items 644 * number of items to show in the list, when the user is searching for items
599 * with the search box. Otherwise, if one match is found, the whole list of 645 * with the search box. Otherwise, if one match is found, the whole list of
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 ]); 772 ]);
727 } 773 }
728 } 774 }
729 }, 775 },
730 }; 776 };
731 777
732 return { 778 return {
733 ExtensionsList: ExtensionsList 779 ExtensionsList: ExtensionsList
734 }; 780 };
735 }); 781 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698