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

Side by Side Diff: chrome/browser/resources/ntp_search/tile_page.js

Issue 11438009: NTP5: Refactoring appData to use Tile's data implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressing Dan's comments Created 8 years 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) 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('ntp', function() { 5 cr.define('ntp', function() {
6 'use strict'; 6 'use strict';
7 7
8 8
9 /** 9 /**
10 * The maximum gap from the edge of the scrolling area which will display 10 * The maximum gap from the edge of the scrolling area which will display
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 this.reset(); 71 this.reset();
72 }, 72 },
73 73
74 /** 74 /**
75 * Resets the tile DOM. 75 * Resets the tile DOM.
76 */ 76 */
77 reset: function() { 77 reset: function() {
78 }, 78 },
79 79
80 /** 80 /**
81 * Update the appearance of this tile according to |data|. 81 * The data for this Tile.
82 * @param {Object} data A dictionary of relevant data for the page. 82 * @param {Object} data A dictionary of relevant data for the page.
83 */ 83 */
84 setData: function(data) { 84 set data(data) {
85 // TODO(pedrosimonetti): Remove data.filler usage everywhere. 85 // TODO(pedrosimonetti): Remove data.filler usage everywhere.
86 if (!data || data.filler) { 86 if (!data || data.filler) {
87 if (this.data_) 87 if (this.data_)
88 this.reset(); 88 this.reset();
89 return; 89 return;
90 } 90 }
91 91
92 this.data_ = data; 92 this.data_ = data;
93 } 93 },
94 }; 94 };
95 95
96 var TileGetters = { 96 var TileGetters = {
97 /** 97 /**
98 * The TileCell associated to this Tile. 98 * The TileCell associated to this Tile.
99 * @type {TileCell} 99 * @type {TileCell}
100 */ 100 */
101 'tileCell': function() { 101 'tileCell': function() {
102 return findAncestorByClass(this, 'tile-cell'); 102 return findAncestorByClass(this, 'tile-cell');
103 }, 103 },
104 104
105 /** 105 /**
106 * The index of the Tile. 106 * The index of the Tile.
107 * @type {number} 107 * @type {number}
108 */ 108 */
109 'index': function() { 109 'index': function() {
110 assert(this.tileCell); 110 assert(this.tileCell);
111 return this.tileCell.index; 111 return this.tileCell.index;
112 }, 112 },
113
114 /**
115 * Tile data object.
116 * @type {Object}
117 */
118 'data': function() {
119 return this.data_;
120 }
121 }; 113 };
122 114
123 //---------------------------------------------------------------------------- 115 //----------------------------------------------------------------------------
124 // TileCell 116 // TileCell
125 //---------------------------------------------------------------------------- 117 //----------------------------------------------------------------------------
126 118
127 /** 119 /**
128 * Creates a new TileCell object. A TileCell represents a cell in the 120 * Creates a new TileCell object. A TileCell represents a cell in the
129 * TilePage's grid. A TilePage uses TileCells to position Tiles in the proper 121 * TilePage's grid. A TilePage uses TileCells to position Tiles in the proper
130 * place and to animate them individually. Each TileCell is associated to 122 * place and to animate them individually. Each TileCell is associated to
(...skipping 28 matching lines...) Expand all
159 this.className = 'tile-cell'; 151 this.className = 'tile-cell';
160 this.assign(tile); 152 this.assign(tile);
161 }, 153 },
162 154
163 /** 155 /**
164 * The index of the TileCell. 156 * The index of the TileCell.
165 * @type {number} 157 * @type {number}
166 */ 158 */
167 get index() { 159 get index() {
168 return Array.prototype.indexOf.call(this.tilePage.tiles_, 160 return Array.prototype.indexOf.call(this.tilePage.tiles_,
169 this.firstChild); 161 this.tile);
170 }, 162 },
171 163
172 /** 164 /**
165 * The Tile associated to this TileCell.
166 * @type {Tile}
Dan Beam 2012/12/07 05:05:31 nit: you should assert(this.firstElementChild) and
pedro (no code reviews) 2012/12/07 21:54:55 We cannot do that because sometimes we use |if (ce
167 */
168 get tile() {
169 return this.firstElementChild;
170 },
171
172 /**
173 * The TilePage associated to this TileCell. 173 * The TilePage associated to this TileCell.
174 * @type {TilePage} 174 * @type {TilePage}
175 */ 175 */
176 get tilePage() { 176 get tilePage() {
177 return findAncestorByClass(this, 'tile-page'); 177 return findAncestorByClass(this, 'tile-page');
178 }, 178 },
179 179
180 /** 180 /**
181 * Assigns a Tile to the this TileCell. 181 * Assigns a Tile to the this TileCell.
182 * @type {TilePage} 182 * @type {TilePage}
183 */ 183 */
184 assign: function(tile) { 184 assign: function(tile) {
185 if (this.firstChild) 185 if (this.tile)
186 this.replaceChild(tile, this.firstChild); 186 this.replaceChild(tile, this.tile);
187 else 187 else
188 this.appendChild(tile); 188 this.appendChild(tile);
189 }, 189 },
190 190
191 /** 191 /**
192 * Called when an app is removed from Chrome. Animates its disappearance. 192 * Called when an app is removed from Chrome. Animates its disappearance.
193 * @param {boolean=} opt_animate Whether the animation should be animated. 193 * @param {boolean=} opt_animate Whether the animation should be animated.
194 */ 194 */
195 doRemove: function(opt_animate) { 195 doRemove: function(opt_animate) {
196 if (opt_animate) 196 this.tilePage.removeTile(this.tile, false);
197 this.firstChild.classList.add('removing-tile-contents');
198 else
199 this.tilePage.removeTile(this, false);
200 }, 197 },
201 }; 198 };
202 199
203 //---------------------------------------------------------------------------- 200 //----------------------------------------------------------------------------
204 // TilePage 201 // TilePage
205 //---------------------------------------------------------------------------- 202 //----------------------------------------------------------------------------
206 203
207 /** 204 /**
208 * Creates a new TilePage object. This object contains tiles and controls 205 * Creates a new TilePage object. This object contains tiles and controls
209 * their layout. 206 * their layout.
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 var data = dataList[i]; 471 var data = dataList[i];
475 var tile = tiles[i]; 472 var tile = tiles[i];
476 473
477 // TODO(pedrosimonetti): What do we do when there's no tile here? 474 // TODO(pedrosimonetti): What do we do when there's no tile here?
478 if (!tile) 475 if (!tile)
479 return; 476 return;
480 477
481 if (i >= dataList.length) 478 if (i >= dataList.length)
482 tile.reset(); 479 tile.reset();
483 else 480 else
484 tile.setData(data); 481 tile.data = data;
485 } 482 }
486 }, 483 },
487 484
488 /** 485 /**
489 * Sets the dataList that will be used to create Tiles. This method will 486 * Sets the dataList that will be used to create Tiles. This method will
490 * create/remove necessary/unnecessary tiles, render the grid when the 487 * create/remove necessary/unnecessary tiles, render the grid when the
491 * number of tiles has changed, and finally will call |updateTiles_| which 488 * number of tiles has changed, and finally will call |updateTiles_| which
492 * will in turn render the individual tiles. 489 * will in turn render the individual tiles.
493 * @param {Array} dataList The array of data. 490 * @param {Array} dataList The array of data.
494 */ 491 */
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 tileCell = tileRowTiles[col]; 629 tileCell = tileRowTiles[col];
633 } else { 630 } else {
634 var span = cr.doc.createElement('span'); 631 var span = cr.doc.createElement('span');
635 tileCell = new TileCell(span, this.config); 632 tileCell = new TileCell(span, this.config);
636 } 633 }
637 634
638 // Render Tiles. 635 // Render Tiles.
639 if (tile < tileCount) { 636 if (tile < tileCount) {
640 tileCell.classList.remove('filler'); 637 tileCell.classList.remove('filler');
641 tileElement = tiles[tile]; 638 tileElement = tiles[tile];
642 if (!tileCell.firstChild) 639 if (!tileCell.tile)
643 tileCell.appendChild(tileElement); 640 tileCell.appendChild(tileElement);
644 else if (tileElement != tileCell.firstChild) 641 else if (tileElement != tileCell.tile)
645 tileCell.replaceChild(tileElement, tileCell.firstChild); 642 tileCell.replaceChild(tileElement, tileCell.tile);
646 } else if (!tileCell.classList.contains('filler')) { 643 } else if (!tileCell.classList.contains('filler')) {
647 tileCell.classList.add('filler'); 644 tileCell.classList.add('filler');
648 tileElement = cr.doc.createElement('span'); 645 tileElement = cr.doc.createElement('span');
649 tileElement.className = 'tile'; 646 tileElement.className = 'tile';
650 if (tileCell.firstChild) 647 if (tileCell.tile)
651 tileCell.replaceChild(tileElement, tileCell.firstChild); 648 tileCell.replaceChild(tileElement, tileCell.tile);
652 else 649 else
653 tileCell.appendChild(tileElement); 650 tileCell.appendChild(tileElement);
654 } 651 }
655 652
656 if (!tileRowTiles[col]) 653 if (!tileRowTiles[col])
657 tileRow.appendChild(tileCell); 654 tileRow.appendChild(tileCell);
658 } 655 }
659 } 656 }
660 657
661 // Remove excessive tile rows from the tile grid. 658 // Remove excessive tile rows from the tile grid.
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
850 847
851 var repositioningStartIndex = index; 848 var repositioningStartIndex = index;
852 var repositioningEndIndex = tileCount - (extraTileData ? 1 : 0); 849 var repositioningEndIndex = tileCount - (extraTileData ? 1 : 0);
853 850
854 this.initializeRepositioningAnimation_(index, repositioningEndIndex); 851 this.initializeRepositioningAnimation_(index, repositioningEndIndex);
855 852
856 var restoredData = newDataList[index]; 853 var restoredData = newDataList[index];
857 var tileBeingRestored = createTile(this, restoredData); 854 var tileBeingRestored = createTile(this, restoredData);
858 tileCells[index].appendChild(tileBeingRestored); 855 tileCells[index].appendChild(tileBeingRestored);
859 856
860 var extraTile = extraCell.firstChild; 857 var extraTile = extraCell.tile;
861 858
862 this.executeRepositioningAnimation_(tileBeingRestored, extraTile, 859 this.executeRepositioningAnimation_(tileBeingRestored, extraTile,
863 repositioningStartIndex, repositioningEndIndex, false); 860 repositioningStartIndex, repositioningEndIndex, false);
864 861
865 // Cleans up the animation. 862 // Cleans up the animation.
866 var onPositioningTransitionEnd = function(e) { 863 var onPositioningTransitionEnd = function(e) {
867 var propertyName = e.propertyName; 864 var propertyName = e.propertyName;
868 if (!(propertyName == '-webkit-transform' || 865 if (!(propertyName == '-webkit-transform' ||
869 propertyName == 'opacity')) { 866 propertyName == 'opacity')) {
870 return; 867 return;
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 * a tile filler will be created. 1065 * a tile filler will be created.
1069 * @param {TilePage} tilePage A TilePage. 1066 * @param {TilePage} tilePage A TilePage.
1070 * @param {Object=} opt_data The data that will be used to create the tile. 1067 * @param {Object=} opt_data The data that will be used to create the tile.
1071 * @return {Tile} The new tile. 1068 * @return {Tile} The new tile.
1072 */ 1069 */
1073 function createTile(tilePage, opt_data) { 1070 function createTile(tilePage, opt_data) {
1074 var tile; 1071 var tile;
1075 if (opt_data) { 1072 if (opt_data) {
1076 // If there's data, the new tile will be a real one (not a filler). 1073 // If there's data, the new tile will be a real one (not a filler).
1077 tile = new tilePage.TileClass(tilePage.config); 1074 tile = new tilePage.TileClass(tilePage.config);
1078 tile.setData(opt_data); 1075 tile.data = opt_data;
1079 } else { 1076 } else {
1080 // Otherwise, it will be a fake filler tile. 1077 // Otherwise, it will be a fake filler tile.
1081 tile = cr.doc.createElement('span'); 1078 tile = cr.doc.createElement('span');
1082 tile.className = 'tile'; 1079 tile.className = 'tile';
1083 } 1080 }
1084 return tile; 1081 return tile;
1085 } 1082 }
1086 1083
1087 /** 1084 /**
1088 * Fades a tile. 1085 * Fades a tile.
1089 * @param {Tile} tile A Tile. 1086 * @param {Tile} tile A Tile.
1090 * @param {boolean} isFadeIn Whether to fade-in the tile. If |isFadeIn| is 1087 * @param {boolean} isFadeIn Whether to fade-in the tile. If |isFadeIn| is
1091 * false, then the tile is going to fade-out. 1088 * false, then the tile is going to fade-out.
1092 */ 1089 */
1093 function fadeTile(tile, isFadeIn) { 1090 function fadeTile(tile, isFadeIn) {
1094 var className = 'animate-hide-tile'; 1091 var className = 'animate-hide-tile';
1095 tile.classList.add(className); 1092 tile.classList.add(className);
1096 if (isFadeIn) { 1093 if (isFadeIn) {
1097 // Forces a reflow to ensure that the fade-out animation will work. 1094 // Forces a reflow to ensure that the fade-out animation will work.
1098 tile.scrollTop; 1095 tile.scrollTop;
1099 tile.classList.remove(className); 1096 tile.classList.remove(className);
1100 } 1097 }
1101 } 1098 }
1102 1099
1103 return { 1100 return {
1104 Tile: Tile, 1101 Tile: Tile,
1105 TilePage: TilePage, 1102 TilePage: TilePage,
1106 }; 1103 };
1107 }); 1104 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698