blob: 74d9faa0b79855fde2dc563ca4daf8e03eb0d3f5 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('extensions', function() {
var ItemList = Polymer({
is: 'extensions-item-list',
behaviors: [
Polymer.NeonAnimatableBehavior,
Polymer.IronResizableBehavior
],
properties: {
/** @type {Array<!chrome.developerPrivate.ExtensionInfo>} */
items: Array,
/** @type {extensions.ItemDelegate} */
delegate: Object,
inDevMode: {
type: Boolean,
value: false,
},
filter: String,
},
listeners: {
'list.extension-item-size-changed': 'itemSizeChanged_',
},
ready: function() {
/** @type {extensions.AnimationHelper} */
this.animationHelper = new extensions.AnimationHelper(this, this.$.list);
this.animationHelper.setEntryAnimation(extensions.Animation.FADE_IN);
this.animationHelper.setExitAnimation(extensions.Animation.HERO);
},
/**
* Called when a subpage for a given item is about to be shown.
* @param {string} id
*/
willShowItemSubpage: function(id) {
this.sharedElements = {hero: this.$$('#' + id)};
},
/**
* Updates the size for a given item.
* @param {CustomEvent} e
* @private
* @suppress {checkTypes} Closure doesn't know $.list is an IronList.
*/
itemSizeChanged_: function(e) {
this.$.list.updateSizeForItem(e.detail.item);
},
/**
* Called right before an item enters the detailed view.
* @param {CustomEvent} e
* @private
*/
showItemDetails_: function(e) {
this.sharedElements = {hero: e.detail.element};
},
/**
* Computes the list of items to be shown.
* @param {Object} changeRecord The changeRecord for |items|.
* @param {string} filter The updated filter string.
* @return {Array<!chrome.developerPrivate.ExtensionInfo>}
* @private
*/
computeShownItems_: function(changeRecord, filter) {
return this.items.filter(function(item) {
return item.name.toLowerCase().includes(this.filter.toLowerCase());
}, this);
},
});
return {
ItemList: ItemList,
};
});