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
3 // found in the LICENSE file.
5 cr.define('options', function() {
6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
7 /** @const */ var List = cr.ui.List;
8 /** @const */ var ListItem = cr.ui.ListItem;
9 /** @const */ var DeletableItem = options.DeletableItem;
10 /** @const */ var DeletableItemList = options.DeletableItemList;
13 * Creates a new ignored protocol / content handler list item.
15 * Accepts values in the form
16 * ['mailto', 'http://www.thesite.com/%s', 'www.thesite.com'],
17 * @param {Object} entry A dictionary describing the handlers for a given
20 * @extends {cr.ui.DeletableItemList}
22 function IgnoredHandlersListItem(entry) {
23 var el = cr.doc.createElement('div');
25 el.__proto__ = IgnoredHandlersListItem.prototype;
30 IgnoredHandlersListItem.prototype = {
31 __proto__: DeletableItem.prototype,
34 decorate: function() {
35 DeletableItem.prototype.decorate.call(this);
38 var protocolElement = document.createElement('div');
39 protocolElement.textContent = this.dataItem[0];
40 protocolElement.className = 'handlers-type-column';
41 this.contentElement_.appendChild(protocolElement);
44 var hostElement = document.createElement('div');
45 hostElement.textContent = this.dataItem[2];
46 hostElement.className = 'handlers-site-column';
47 hostElement.title = this.dataItem[1];
48 this.contentElement_.appendChild(hostElement);
53 var IgnoredHandlersList = cr.ui.define('list');
55 IgnoredHandlersList.prototype = {
56 __proto__: DeletableItemList.prototype,
58 createItem: function(entry) {
59 return new IgnoredHandlersListItem(entry);
62 deleteItemAtIndex: function(index) {
63 chrome.send('removeIgnoredHandler', [this.dataModel.item(index)]);
67 * The length of the list.
70 return this.dataModel.length;
74 * Set the protocol handlers displayed by this list. See
75 * IgnoredHandlersListItem for an example of the format the list should
78 * @param {Object} list A list of ignored protocol handlers.
80 setHandlers: function(list) {
81 this.dataModel = new ArrayDataModel(list);
88 * Creates a new protocol / content handler list item.
90 * Accepts values in the form
91 * { protocol: 'mailto',
93 * ['mailto', 'http://www.thesite.com/%s', 'www.thesite.com'],
97 * @param {Object} entry A dictionary describing the handlers for a given
100 * @extends {cr.ui.ListItem}
102 function HandlerListItem(entry) {
103 var el = cr.doc.createElement('div');
105 el.__proto__ = HandlerListItem.prototype;
110 HandlerListItem.prototype = {
111 __proto__: ListItem.prototype,
113 buildWidget_: function(data, delegate) {
115 var protocolElement = document.createElement('div');
116 protocolElement.textContent = data.protocol;
117 protocolElement.className = 'handlers-type-column';
118 this.appendChild(protocolElement);
120 // Handler selection.
121 var handlerElement = document.createElement('div');
122 var selectElement = document.createElement('select');
123 var defaultOptionElement = document.createElement('option');
124 defaultOptionElement.selected = data.default_handler == -1;
125 defaultOptionElement.textContent =
126 loadTimeData.getString('handlers_none_handler');
127 defaultOptionElement.value = -1;
128 selectElement.appendChild(defaultOptionElement);
130 for (var i = 0; i < data.handlers.length; ++i) {
131 var optionElement = document.createElement('option');
132 optionElement.selected = i == data.default_handler;
133 optionElement.textContent = data.handlers[i][2];
134 optionElement.value = i;
135 selectElement.appendChild(optionElement);
138 selectElement.addEventListener('change', function(e) {
139 var index = e.target.value;
141 this.classList.add('none');
142 delegate.clearDefault(data.protocol);
144 handlerElement.classList.remove('none');
145 delegate.setDefault(data.handlers[index]);
148 handlerElement.appendChild(selectElement);
149 handlerElement.className = 'handlers-site-column';
150 if (data.default_handler == -1)
151 this.classList.add('none');
152 this.appendChild(handlerElement);
155 var removeElement = document.createElement('div');
156 removeElement.textContent =
157 loadTimeData.getString('handlers_remove_link');
158 removeElement.addEventListener('click', function(e) {
159 var value = selectElement ? selectElement.value : 0;
160 delegate.removeHandler(value, data.handlers[value]);
162 removeElement.className = 'handlers-remove-column handlers-remove-link';
163 this.appendChild(removeElement);
167 decorate: function() {
168 ListItem.prototype.decorate.call(this);
171 removeHandler: function(index, handler) {
172 chrome.send('removeHandler', [handler]);
174 setDefault: function(handler) {
175 chrome.send('setDefault', [handler]);
177 clearDefault: function(protocol) {
178 chrome.send('clearDefault', [protocol]);
182 this.buildWidget_(this.dataItem, delegate);
187 * Create a new passwords list.
189 * @extends {cr.ui.List}
191 var HandlersList = cr.ui.define('list');
193 HandlersList.prototype = {
194 __proto__: List.prototype,
197 createItem: function(entry) {
198 return new HandlerListItem(entry);
202 * The length of the list.
205 return this.dataModel.length;
209 * Set the protocol handlers displayed by this list.
210 * See HandlerListItem for an example of the format the list should take.
212 * @param {Object} list A list of protocols with their registered handlers.
214 setHandlers: function(list) {
215 this.dataModel = new ArrayDataModel(list);
220 IgnoredHandlersListItem: IgnoredHandlersListItem,
221 IgnoredHandlersList: IgnoredHandlersList,
222 HandlerListItem: HandlerListItem,
223 HandlersList: HandlersList,