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

Unified Diff: chrome/browser/resources/options/deletable_item_list.js

Issue 5685003: DOMUI Prefs: Add a deletable item list type, and use it for startup pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments Created 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options/deletable_item_list.js
diff --git a/chrome/browser/resources/options/deletable_item_list.js b/chrome/browser/resources/options/deletable_item_list.js
new file mode 100644
index 0000000000000000000000000000000000000000..fac7c82025484d59573338046c47487fce5cb13c
--- /dev/null
+++ b/chrome/browser/resources/options/deletable_item_list.js
@@ -0,0 +1,120 @@
+// Copyright (c) 2010 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('options', function() {
+ const List = cr.ui.List;
+ const ListItem = cr.ui.ListItem;
+
+ /**
+ * Wraps a list item to make it deletable, adding a button that will trigger a
+ * call to deleteItemAtIndex(index) in the list.
+ * @param {!ListItem} baseItem The list element to wrap.
+ */
+ function DeletableListItem(baseItem) {
+ var el = cr.doc.createElement('div');
+ el.baseItem_ = baseItem;
+ DeletableListItem.decorate(el);
+ return el;
+ }
+
+ /**
+ * Decorates an element as a deletable list item.
+ * @param {!HTMLElement} el The element to decorate.
+ */
+ DeletableListItem.decorate = function(el) {
+ el.__proto__ = DeletableListItem.prototype;
+ el.decorate();
+ };
+
+ DeletableListItem.prototype = {
+ __proto__: ListItem.prototype,
+
+ /**
+ * The list item being wrapped to make in deletable.
+ * @type {!ListItem}
+ * @private
+ */
+ baseItem_: null,
+
+ /** @inheritDoc */
+ decorate: function() {
+ ListItem.prototype.decorate.call(this);
+
+ this.className = 'deletable-item';
+ var contentEl = this.ownerDocument.createElement('div');
+ contentEl.appendChild(this.baseItem_);
+ var closeButtonEl = this.ownerDocument.createElement('button');
+ closeButtonEl.className = 'close-button';
+ var self = this;
arv (Not doing code reviews) 2010/12/14 19:07:41 self is no longer used
stuartmorgan 2010/12/14 22:09:50 Done.
+
+ this.appendChild(contentEl);
+ this.appendChild(closeButtonEl);
+ },
+
+ /**
+ * Returns the list item being wrapped to make in deletable.
+ * @return {!ListItem} The list item being wrapped
+ */
+ get contentItem() {
+ return this.baseItem_;
+ }
+ };
+
+ var DeletableItemList = cr.ui.define('list');
+
+ DeletableItemList.prototype = {
+ __proto__: List.prototype,
+
+ /** @inheritDoc */
+ decorate: function() {
+ List.prototype.decorate.call(this);
+ this.addEventListener('click', this.handleClick_);
+ },
+
+ /** @inheritDoc */
+ createItem: function(value) {
+ var baseItem = this.createItemContents(value);
+ return new DeletableListItem(baseItem);
+ },
+
+ /**
+ * Creates a new list item to use as the main row contents for |value|.
+ * Subclasses should override this instead of createItem.
+ * @param {*} value The value to use for the item.
+ * @return {!ListItem} The newly created list item.
+ */
+ createItemContents: function(value) {
+ List.prototype.createItem.call(this, value);
+ },
+
+ /**
+ * Callback for onclick events.
+ * @param {Event} e The click event object.
+ * @private
+ */
+ handleClick_: function(e) {
+ if (this.disabled)
+ return;
+
+ var target = e.target;
+ if (target.className == 'close-button') {
+ var listItem = this.getListItemContainingElement_(target);
arv (Not doing code reviews) 2010/12/14 19:07:41 Where is getListItemContainingElement_ defined? S
stuartmorgan 2010/12/14 22:09:50 Oops, victim of refactoring. This part of the logi
+ if (listItem)
+ this.deleteItemAtIndex(this.getIndexOfListItem(listItem));
+ }
+ },
+
+ /**
+ * Called when an item should be deleted; subclasses are responsible for
+ * implementing.
+ * @param {number} index The indexd of the item that is being deleted.
+ */
+ deleteItemAtIndex: function(index) {
+ },
+ };
+
+ return {
+ DeletableItemList: DeletableItemList
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698