Chromium Code Reviews| 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 /** | 5 /** |
| 6 * @fileoverview Card slider implementation. Allows you to create interactions | 6 * @fileoverview Card slider implementation. Allows you to create interactions |
| 7 * that have items that can slide left to right to reveal additional items. | 7 * that have items that can slide left to right to reveal additional items. |
| 8 * Works by adding the necessary event handlers to a specific DOM structure | 8 * Works by adding the necessary event handlers to a specific DOM structure |
| 9 * including a frame, container and cards. | 9 * including a frame, container and cards. |
| 10 * - The frame defines the boundary of one item. Each card will be expanded to | 10 * - The frame defines the boundary of one item. Each card will be expanded to |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 * @param {number} index Index of the card to in the new set of cards to | 179 * @param {number} index Index of the card to in the new set of cards to |
| 180 * navigate to. | 180 * navigate to. |
| 181 */ | 181 */ |
| 182 setCards: function(cards, index) { | 182 setCards: function(cards, index) { |
| 183 assert(index >= 0 && index < cards.length, | 183 assert(index >= 0 && index < cards.length, |
| 184 'Invalid index in CardSlider#setCards'); | 184 'Invalid index in CardSlider#setCards'); |
| 185 this.cards_ = cards; | 185 this.cards_ = cards; |
| 186 | 186 |
| 187 this.updateCardWidths_(); | 187 this.updateCardWidths_(); |
| 188 | 188 |
| 189 // Mark all cards as hidden for accessibility. The selected card will | |
| 190 // be marked visible during selectCard(). | |
| 191 for (var i = 0; i < cards.length; i++) | |
| 192 this.cards_[i].setAttribute('aria-hidden', true); | |
|
Dan Beam
2012/09/14 02:48:38
nit: 2 \s indent, optionally we usually use curlie
aboxhall
2012/09/14 03:50:37
Done.
| |
| 193 | |
| 189 // Jump to the given card index. | 194 // Jump to the given card index. |
| 190 this.selectCard(index); | 195 this.selectCard(index); |
| 191 }, | 196 }, |
| 192 | 197 |
| 193 /** | 198 /** |
| 194 * Updates the width of each card. | 199 * Updates the width of each card. |
| 195 * @private | 200 * @private |
| 196 */ | 201 */ |
| 197 updateCardWidths_: function() { | 202 updateCardWidths_: function() { |
| 198 for (var i = 0, card; card = this.cards_[i]; i++) | 203 for (var i = 0, card; card = this.cards_[i]; i++) |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 343 * @param {!Node} card A card that will be added to the card slider. | 348 * @param {!Node} card A card that will be added to the card slider. |
| 344 * @param {number} index An index at which the given |card| should be | 349 * @param {number} index An index at which the given |card| should be |
| 345 * inserted. Must be positive and less than the number of cards. | 350 * inserted. Must be positive and less than the number of cards. |
| 346 */ | 351 */ |
| 347 addCardAtIndex: function(card, index) { | 352 addCardAtIndex: function(card, index) { |
| 348 assert(card instanceof Node, '|card| isn\'t a Node'); | 353 assert(card instanceof Node, '|card| isn\'t a Node'); |
| 349 this.assertValidIndex_(index); | 354 this.assertValidIndex_(index); |
| 350 this.cards_ = Array.prototype.concat.call( | 355 this.cards_ = Array.prototype.concat.call( |
| 351 this.cards_.slice(0, index), card, this.cards_.slice(index)); | 356 this.cards_.slice(0, index), card, this.cards_.slice(index)); |
| 352 | 357 |
| 358 // Mark the new card as hidden for accessibility. This will be corrected | |
|
Dan Beam
2012/09/14 02:48:38
nit: 1 \s between sentences
aboxhall
2012/09/14 03:50:37
Done.
| |
| 359 // during selectCard() if this is the selected card. | |
| 360 card.setAttribute('aria-hidden', true); | |
| 361 | |
| 353 if (this.currentCard_ == -1) | 362 if (this.currentCard_ == -1) |
| 354 this.currentCard_ = 0; | 363 this.currentCard_ = 0; |
| 355 else if (index <= this.currentCard_) | 364 else if (index <= this.currentCard_) |
| 356 this.selectCard(this.currentCard_ + 1, false, true, true); | 365 this.selectCard(this.currentCard_ + 1, false, true, true); |
| 357 | 366 |
| 358 this.fireAddedEvent_(card, index); | 367 this.fireAddedEvent_(card, index); |
| 359 }, | 368 }, |
| 360 | 369 |
| 361 /** | 370 /** |
| 362 * Append a card to the end of the list. | 371 * Append a card to the end of the list. |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 464 this.assertValidIndex_(newCardIndex); | 473 this.assertValidIndex_(newCardIndex); |
| 465 | 474 |
| 466 var previousCard = this.currentCardValue; | 475 var previousCard = this.currentCardValue; |
| 467 var isChangingCard = | 476 var isChangingCard = |
| 468 !this.cards_[newCardIndex].classList.contains('selected-card'); | 477 !this.cards_[newCardIndex].classList.contains('selected-card'); |
| 469 | 478 |
| 470 if (typeof opt_forceChange != 'undefined' && opt_forceChange) | 479 if (typeof opt_forceChange != 'undefined' && opt_forceChange) |
| 471 isChangingCard = true; | 480 isChangingCard = true; |
| 472 | 481 |
| 473 if (isChangingCard) { | 482 if (isChangingCard) { |
| 474 if (previousCard) | 483 if (previousCard) { |
| 475 previousCard.classList.remove('selected-card'); | 484 previousCard.classList.remove('selected-card'); |
| 485 previousCard.setAttribute('aria-hidden', true); | |
| 486 } | |
| 476 this.currentCard_ = newCardIndex; | 487 this.currentCard_ = newCardIndex; |
| 477 this.currentCardValue.classList.add('selected-card'); | 488 this.currentCardValue.classList.add('selected-card'); |
| 489 this.currentCardValue.setAttribute('aria-hidden', false); | |
| 478 } | 490 } |
| 479 | 491 |
| 480 var willTransitionHappen = this.transformToCurrentCard_(opt_animate); | 492 var willTransitionHappen = this.transformToCurrentCard_(opt_animate); |
| 481 | 493 |
| 482 if (isChangingCard && !opt_dontNotify) { | 494 if (isChangingCard && !opt_dontNotify) { |
| 483 var event = document.createEvent('Event'); | 495 var event = document.createEvent('Event'); |
| 484 event.initEvent('cardSlider:card_changed', true, true); | 496 event.initEvent('cardSlider:card_changed', true, true); |
| 485 event.cardSlider = this; | 497 event.cardSlider = this; |
| 486 event.wasAnimated = !!opt_animate; | 498 event.wasAnimated = !!opt_animate; |
| 487 this.container_.dispatchEvent(event); | 499 this.container_.dispatchEvent(event); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 640 | 652 |
| 641 // Ensure we're at a card bounary | 653 // Ensure we're at a card bounary |
| 642 this.transformToCurrentCard_(true); | 654 this.transformToCurrentCard_(true); |
| 643 }, | 655 }, |
| 644 }; | 656 }; |
| 645 | 657 |
| 646 return { | 658 return { |
| 647 CardSlider: CardSlider | 659 CardSlider: CardSlider |
| 648 }; | 660 }; |
| 649 }); | 661 }); |
| OLD | NEW |