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

Side by Side Diff: chrome/browser/resources/options/handler_options_list.js

Issue 9814030: get rid of old options pages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more fixes Created 8 years, 9 months 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
(Empty)
1 // Copyright (c) 2011 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.
4
5 cr.define('options', function() {
6 const ArrayDataModel = cr.ui.ArrayDataModel;
7 const List = cr.ui.List;
8 const ListItem = cr.ui.ListItem;
9 const HandlerOptions = options.HandlerOptions;
10 const DeletableItem = options.DeletableItem;
11 const DeletableItemList = options.DeletableItemList;
12
13 const localStrings = new LocalStrings();
14
15 /**
16 * Creates a new ignored protocol / content handler list item.
17 *
18 * Accepts values in the form
19 * ['mailto', 'http://www.thesite.com/%s', 'The title of the protocol'],
20 * @param {Object} entry A dictionary describing the handlers for a given
21 * protocol.
22 * @constructor
23 * @extends {cr.ui.DeletableItemList}
24 */
25 function IgnoredHandlersListItem(entry) {
26 var el = cr.doc.createElement('div');
27 el.dataItem = entry;
28 el.__proto__ = IgnoredHandlersListItem.prototype;
29 el.decorate();
30 return el;
31 }
32
33 IgnoredHandlersListItem.prototype = {
34 __proto__: DeletableItem.prototype,
35
36 /** @inheritDoc */
37 decorate: function() {
38 DeletableItem.prototype.decorate.call(this);
39
40 // Protocol.
41 var protocolElement = document.createElement('div');
42 protocolElement.textContent = this.dataItem[0];
43 protocolElement.className = 'handlers-type-column';
44 this.contentElement_.appendChild(protocolElement);
45
46 // Site title.
47 var titleElement = document.createElement('div');
48 titleElement.textContent = this.dataItem[2];
49 titleElement.className = 'handlers-site-column';
50 titleElement.title = this.dataItem[1];
51 this.contentElement_.appendChild(titleElement);
52 },
53 };
54
55
56 var IgnoredHandlersList = cr.ui.define('list');
57
58 IgnoredHandlersList.prototype = {
59 __proto__: DeletableItemList.prototype,
60
61 createItem: function(entry) {
62 return new IgnoredHandlersListItem(entry);
63 },
64
65 deleteItemAtIndex: function(index) {
66 chrome.send('removeIgnoredHandler', [this.dataModel.item(index)]);
67 },
68
69 /**
70 * The length of the list.
71 */
72 get length() {
73 return this.dataModel.length;
74 },
75
76 /**
77 * Set the protocol handlers displayed by this list. See
78 * IgnoredHandlersListItem for an example of the format the list should
79 * take.
80 *
81 * @param {Object} list A list of ignored protocol handlers.
82 */
83 setHandlers: function(list) {
84 this.dataModel = new ArrayDataModel(list);
85 },
86 };
87
88
89
90 /**
91 * Creates a new protocol / content handler list item.
92 *
93 * Accepts values in the form
94 * { protocol: 'mailto',
95 * handlers: [
96 * ['mailto', 'http://www.thesite.com/%s', 'The title of the protocol'],
97 * ...,
98 * ],
99 * }
100 * @param {Object} entry A dictionary describing the handlers for a given
101 * protocol.
102 * @constructor
103 * @extends {cr.ui.ListItem}
104 */
105 function HandlerListItem(entry) {
106 var el = cr.doc.createElement('div');
107 el.dataItem = entry;
108 el.__proto__ = HandlerListItem.prototype;
109 el.decorate();
110 return el;
111 }
112
113 HandlerListItem.prototype = {
114 __proto__: ListItem.prototype,
115
116 buildWidget_: function(data, delegate) {
117 // Protocol.
118 var protocolElement = document.createElement('div');
119 protocolElement.textContent = data.protocol;
120 protocolElement.className = 'handlers-type-column';
121 this.appendChild(protocolElement);
122
123 // Handler selection.
124 var handlerElement = document.createElement('div');
125 var selectElement = document.createElement('select');
126 var defaultOptionElement = document.createElement('option');
127 defaultOptionElement.selected = data.default_handler == -1;
128 defaultOptionElement.textContent =
129 localStrings.getString('handlers_none_handler');
130 defaultOptionElement.value = -1;
131 selectElement.appendChild(defaultOptionElement);
132
133 for (var i = 0; i < data.handlers.length; ++i) {
134 var optionElement = document.createElement('option');
135 optionElement.selected = i == data.default_handler;
136 optionElement.textContent = data.handlers[i][2];
137 optionElement.value = i;
138 selectElement.appendChild(optionElement);
139 }
140
141 selectElement.addEventListener('change', function (e) {
142 var index = e.target.value;
143 if (index == -1) {
144 this.classList.add('none');
145 delegate.clearDefault(data.protocol);
146 } else {
147 handlerElement.classList.remove('none');
148 delegate.setDefault(data.handlers[index]);
149 }
150 });
151 handlerElement.appendChild(selectElement);
152 handlerElement.className = 'handlers-site-column';
153 if (data.default_handler == -1)
154 this.classList.add('none');
155 this.appendChild(handlerElement);
156
157 // Remove link.
158 var removeElement = document.createElement('div');
159 removeElement.textContent =
160 localStrings.getString('handlers_remove_link');
161 removeElement.addEventListener('click', function (e) {
162 var value = selectElement ? selectElement.value : 0;
163 delegate.removeHandler(value, data.handlers[value]);
164 });
165 removeElement.className = 'handlers-remove-column handlers-remove-link';
166 this.appendChild(removeElement);
167 },
168
169 /** @inheritDoc */
170 decorate: function() {
171 ListItem.prototype.decorate.call(this);
172
173 var self = this;
174 var delegate = {
175 removeHandler: function(index, handler) {
176 chrome.send('removeHandler', [handler]);
177 },
178 setDefault: function(handler) {
179 chrome.send('setDefault', [handler]);
180 },
181 clearDefault: function(protocol) {
182 chrome.send('clearDefault', [protocol]);
183 },
184 };
185
186 this.buildWidget_(this.dataItem, delegate);
187 },
188 };
189
190 /**
191 * Create a new passwords list.
192 * @constructor
193 * @extends {cr.ui.List}
194 */
195 var HandlersList = cr.ui.define('list');
196
197 HandlersList.prototype = {
198 __proto__: List.prototype,
199
200 /** @inheritDoc */
201 createItem: function(entry) {
202 return new HandlerListItem(entry);
203 },
204
205 /**
206 * The length of the list.
207 */
208 get length() {
209 return this.dataModel.length;
210 },
211
212 /**
213 * Set the protocol handlers displayed by this list.
214 * See HandlerListItem for an example of the format the list should take.
215 *
216 * @param {Object} list A list of protocols with their registered handlers.
217 */
218 setHandlers: function(list) {
219 this.dataModel = new ArrayDataModel(list);
220 },
221 };
222
223 return {
224 IgnoredHandlersListItem: IgnoredHandlersListItem,
225 IgnoredHandlersList: IgnoredHandlersList,
226 HandlerListItem: HandlerListItem,
227 HandlersList: HandlersList,
228 };
229 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698