| 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 DeletableItemList = options.DeletableItemList; | 6 /** @const */ var DeletableItemList = options.DeletableItemList; |
| 7 /** @const */ var DeletableItem = options.DeletableItem; | 7 /** @const */ var DeletableItem = options.DeletableItem; |
| 8 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; | 8 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; |
| 9 /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; | 9 /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; |
| 10 | 10 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 * when the page is zoomed. See the similar calculation in @{code cr.ui.List}. | 50 * when the page is zoomed. See the similar calculation in @{code cr.ui.List}. |
| 51 * This version also accounts for the animation done in this file. | 51 * This version also accounts for the animation done in this file. |
| 52 * @param {Element} item The item to get the height of. | 52 * @param {Element} item The item to get the height of. |
| 53 * @return {number} The height of the item, calculated with zooming in mind. | 53 * @return {number} The height of the item, calculated with zooming in mind. |
| 54 */ | 54 */ |
| 55 function getItemHeight(item) { | 55 function getItemHeight(item) { |
| 56 var height = item.style.height; | 56 var height = item.style.height; |
| 57 // Use the fixed animation target height if set, in case the element is | 57 // Use the fixed animation target height if set, in case the element is |
| 58 // currently being animated and we'd get an intermediate height below. | 58 // currently being animated and we'd get an intermediate height below. |
| 59 if (height && height.substr(-2) == 'px') | 59 if (height && height.substr(-2) == 'px') |
| 60 return parseInt(height.substr(0, height.length - 2)); | 60 return parseInt(height.substr(0, height.length - 2), 10); |
| 61 return item.getBoundingClientRect().height; | 61 return item.getBoundingClientRect().height; |
| 62 } | 62 } |
| 63 | 63 |
| 64 /** | 64 /** |
| 65 * Create tree nodes for the objects in the data array, and insert them all | 65 * Create tree nodes for the objects in the data array, and insert them all |
| 66 * into the given list using its @{code splice} method at the given index. | 66 * into the given list using its @{code splice} method at the given index. |
| 67 * @param {Array.<Object>} data The data objects for the nodes to add. | 67 * @param {Array.<Object>} data The data objects for the nodes to add. |
| 68 * @param {number} start The index at which to start inserting the nodes. | 68 * @param {number} start The index at which to start inserting the nodes. |
| 69 * @return {Array.<CookieTreeNode>} An array of CookieTreeNodes added. | 69 * @return {Array.<CookieTreeNode>} An array of CookieTreeNodes added. |
| 70 */ | 70 */ |
| 71 function spliceTreeNodes(data, start, list) { | 71 function spliceTreeNodes(data, start, list) { |
| 72 var nodes = data.map(function(x) { return new CookieTreeNode(x); }); | 72 var nodes = data.map(function(x) { return new CookieTreeNode(x); }); |
| 73 // Insert [start, 0] at the beginning of the array of nodes, making it | 73 // Insert [start, 0] at the beginning of the array of nodes, making it |
| 74 // into the arguments we want to pass to @{code list.splice} below. | 74 // into the arguments we want to pass to @{code list.splice} below. |
| 75 nodes.splice(0, 0, start, 0); | 75 nodes.splice(0, 0, start, 0); |
| 76 list.splice.apply(list, nodes); | 76 list.splice.apply(list, nodes); |
| 77 // Remove the [start, 0] prefix and return the array of nodes. | 77 // Remove the [start, 0] prefix and return the array of nodes. |
| 78 nodes.splice(0, 2); | 78 nodes.splice(0, 2); |
| 79 return nodes; | 79 return nodes; |
| 80 } | 80 } |
| 81 | 81 |
| 82 /** | 82 /** |
| 83 * Adds information about an app that protects this data item to the | 83 * Adds information about an app that protects this data item to the |
| 84 * @{code element}. | 84 * |element|. |
| 85 * @param {Element} element The DOM element the information should be | 85 * @param {Element} element The DOM element the information should be |
| 86 appended to. | 86 appended to. |
| 87 * @param {{id: string, name: string}} appInfo Information about an app. | 87 * @param {{id: string, name: string}} appInfo Information about an app. |
| 88 */ | 88 */ |
| 89 function addAppInfo(element, appInfo) { | 89 function addAppInfo(element, appInfo) { |
| 90 var img = element.ownerDocument.createElement('img'); | 90 var img = element.ownerDocument.createElement('img'); |
| 91 img.src = 'chrome://extension-icon/' + appInfo.id + '/16/1'; | 91 img.src = 'chrome://extension-icon/' + appInfo.id + '/16/1'; |
| 92 element.title = loadTimeData.getString('label_protected_by_apps') + | 92 element.title = loadTimeData.getString('label_protected_by_apps') + |
| 93 ' ' + appInfo.name; | 93 ' ' + appInfo.name; |
| 94 img.className = 'protecting-app'; | 94 img.className = 'protecting-app'; |
| 95 element.appendChild(img); | 95 element.appendChild(img); |
| 96 } | 96 } |
| 97 | 97 |
| 98 var parentLookup = {}; | 98 var parentLookup = {}; |
| 99 var lookupRequests = {}; | 99 var lookupRequests = {}; |
| 100 | 100 |
| 101 /** | 101 /** |
| 102 * Creates a new list item for sites data. Note that these are created and | 102 * Creates a new list item for sites data. Note that these are created and |
| 103 * destroyed lazily as they scroll into and out of view, so they must be | 103 * destroyed lazily as they scroll into and out of view, so they must be |
| 104 * stateless. We cache the expanded item in @{code CookiesList} though, so it | 104 * stateless. We cache the expanded item in @{code CookiesList} though, so it |
| 105 * can keep state. (Mostly just which item is selected.) | 105 * can keep state. (Mostly just which item is selected.) |
| 106 * @param {Object} origin Data used to create a cookie list item. | 106 * @param {Object} origin Data used to create a cookie list item. |
| 107 * @param {CookiesList} list The list that will contain this item. | 107 * @param {options.CookiesList} list The list that will contain this item. |
| 108 * @constructor | 108 * @constructor |
| 109 * @extends {DeletableItem} | 109 * @extends {options.DeletableItem} |
| 110 */ | 110 */ |
| 111 function CookieListItem(origin, list) { | 111 function CookieListItem(origin, list) { |
| 112 var listItem = new DeletableItem(null); | 112 var listItem = new DeletableItem(null); |
| 113 listItem.__proto__ = CookieListItem.prototype; | 113 listItem.__proto__ = CookieListItem.prototype; |
| 114 | 114 |
| 115 listItem.origin = origin; | 115 listItem.origin = origin; |
| 116 listItem.list = list; | 116 listItem.list = list; |
| 117 listItem.decorate(); | 117 listItem.decorate(); |
| 118 | 118 |
| 119 // This hooks up updateOrigin() to the list item, makes the top-level | 119 // This hooks up updateOrigin() to the list item, makes the top-level |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 if (!this.classList.contains('measure-items')) | 222 if (!this.classList.contains('measure-items')) |
| 223 this.disableAnimation_(); | 223 this.disableAnimation_(); |
| 224 this.itemsChild.style.height = ''; | 224 this.itemsChild.style.height = ''; |
| 225 // This will force relayout in order to calculate the new heights. | 225 // This will force relayout in order to calculate the new heights. |
| 226 var itemsHeight = getItemHeight(this.itemsChild); | 226 var itemsHeight = getItemHeight(this.itemsChild); |
| 227 var fixedHeight = getItemHeight(this) + itemsHeight - this.itemsHeight_; | 227 var fixedHeight = getItemHeight(this) + itemsHeight - this.itemsHeight_; |
| 228 this.itemsChild.style.height = this.itemsHeight_ + 'px'; | 228 this.itemsChild.style.height = this.itemsHeight_ + 'px'; |
| 229 // Force relayout before enabling animation, so that if we have | 229 // Force relayout before enabling animation, so that if we have |
| 230 // changed things since the last layout, they will not be animated | 230 // changed things since the last layout, they will not be animated |
| 231 // during subsequent layouts. | 231 // during subsequent layouts. |
| 232 /** @suppress {suspiciousCode} */ |
| 232 this.itemsChild.offsetHeight; | 233 this.itemsChild.offsetHeight; |
| 233 this.classList.remove('measure-items'); | 234 this.classList.remove('measure-items'); |
| 234 this.itemsChild.style.height = itemsHeight + 'px'; | 235 this.itemsChild.style.height = itemsHeight + 'px'; |
| 235 this.style.height = fixedHeight + 'px'; | 236 this.style.height = fixedHeight + 'px'; |
| 236 }, | 237 }, |
| 237 | 238 |
| 238 /** | 239 /** |
| 239 * Updates the origin summary to reflect changes in its items. | 240 * Updates the origin summary to reflect changes in its items. |
| 240 * Both CookieListItem and CookieTreeNode implement this API. | 241 * Both CookieListItem and CookieTreeNode implement this API. |
| 241 * This implementation scans the descendants to update the text. | 242 * This implementation scans the descendants to update the text. |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 /** | 335 /** |
| 335 * Get the currently selected cookie node ("cookie bubble") index. | 336 * Get the currently selected cookie node ("cookie bubble") index. |
| 336 * @type {number} | 337 * @type {number} |
| 337 */ | 338 */ |
| 338 get selectedIndex() { | 339 get selectedIndex() { |
| 339 return this.selectedIndex_; | 340 return this.selectedIndex_; |
| 340 }, | 341 }, |
| 341 | 342 |
| 342 /** | 343 /** |
| 343 * Set the currently selected cookie node ("cookie bubble") index to | 344 * Set the currently selected cookie node ("cookie bubble") index to |
| 344 * @{code itemIndex}, unselecting any previously selected node first. | 345 * |itemIndex|, unselecting any previously selected node first. |
| 345 * @param {number} itemIndex The index to set as the selected index. | 346 * @param {number} itemIndex The index to set as the selected index. |
| 346 */ | 347 */ |
| 347 set selectedIndex(itemIndex) { | 348 set selectedIndex(itemIndex) { |
| 348 // Get the list index up front before we change anything. | 349 // Get the list index up front before we change anything. |
| 349 var index = this.list.getIndexOfListItem(this); | 350 var index = this.list.getIndexOfListItem(this); |
| 350 // Unselect any previously selected item. | 351 // Unselect any previously selected item. |
| 351 if (this.selectedIndex_ >= 0) { | 352 if (this.selectedIndex_ >= 0) { |
| 352 var item = this.itemList_[this.selectedIndex_]; | 353 var item = this.itemList_[this.selectedIndex_]; |
| 353 if (item && item.div) | 354 if (item && item.div) |
| 354 item.div.removeAttribute('selected'); | 355 item.div.removeAttribute('selected'); |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 if (parent && parent instanceof CookieTreeNode) | 671 if (parent && parent instanceof CookieTreeNode) |
| 671 return parent.pathId + ',' + this.data.id; | 672 return parent.pathId + ',' + this.data.id; |
| 672 return this.data.id; | 673 return this.data.id; |
| 673 }, | 674 }, |
| 674 }; | 675 }; |
| 675 | 676 |
| 676 /** | 677 /** |
| 677 * Creates a new cookies list. | 678 * Creates a new cookies list. |
| 678 * @param {Object=} opt_propertyBag Optional properties. | 679 * @param {Object=} opt_propertyBag Optional properties. |
| 679 * @constructor | 680 * @constructor |
| 680 * @extends {DeletableItemList} | 681 * @extends {options.DeletableItemList} |
| 681 */ | 682 */ |
| 682 var CookiesList = cr.ui.define('list'); | 683 var CookiesList = cr.ui.define('list'); |
| 683 | 684 |
| 684 CookiesList.prototype = { | 685 CookiesList.prototype = { |
| 685 __proto__: DeletableItemList.prototype, | 686 __proto__: DeletableItemList.prototype, |
| 686 | 687 |
| 687 /** @override */ | 688 /** @override */ |
| 688 decorate: function() { | 689 decorate: function() { |
| 689 DeletableItemList.prototype.decorate.call(this); | 690 DeletableItemList.prototype.decorate.call(this); |
| 690 this.classList.add('cookie-list'); | 691 this.classList.add('cookie-list'); |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 918 parent.clear(); | 919 parent.clear(); |
| 919 this.addByParent_(parent, 0, children); | 920 this.addByParent_(parent, 0, children); |
| 920 parent.endBatchUpdates(); | 921 parent.endBatchUpdates(); |
| 921 }, | 922 }, |
| 922 }; | 923 }; |
| 923 | 924 |
| 924 return { | 925 return { |
| 925 CookiesList: CookiesList | 926 CookiesList: CookiesList |
| 926 }; | 927 }; |
| 927 }); | 928 }); |
| OLD | NEW |