OLD | NEW |
| (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 }); | |
OLD | NEW |