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

Side by Side Diff: chrome/test/data/extensions/subscribe_page_action/options.html

Issue 10407017: Convert RSS extension to use manifest version 2 (with CSP protection). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 7 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
1 <!-- 1 <!--
2 * Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this 2 * Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
3 * source code is governed by a BSD-style license that can be found in the 3 * source code is governed by a BSD-style license that can be found in the
4 * LICENSE file. 4 * LICENSE file.
5 --> 5 -->
6 <html> 6 <html>
7 <head> 7 <head>
8 <title></title> 8 <title></title>
9 <link rel="stylesheet" href="style.css" type="text/css" /> 9 <link rel="stylesheet" href="style.css" type="text/css" />
10 <style> 10 <style>
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 .urlAssist { 103 .urlAssist {
104 padding-left: 30px; 104 padding-left: 30px;
105 } 105 }
106 106
107 .status { 107 .status {
108 background-color: #FFF18A; 108 background-color: #FFF18A;
109 } 109 }
110 110
111 </style> 111 </style>
112 <script type="text/javascript" src="common.js"></script> 112 <script type="text/javascript" src="common.js"></script>
113 <script> 113 <script type="text/javascript" src="options.js"></script>
114
115 // Various text messages within the edit dialog.
116 var assistText = chrome.i18n.getMessage("rss_subscription_feed_url_assist");
117
118 // Specifies the index of the item we are editing or -1 if adding new.
119 var editingIndex = -1;
120 // Whether we are currently editing the default item.
121 var editingDefault = false;
122
123 function main() {
124 document.title =
125 chrome.i18n.getMessage("rss_subscription_edit_dialog_title");
126
127 // Make sure the dialog is not visible.
128 document.getElementById('dialogBackground').style.display = "none";
129
130 // Make sure the buttons are disabled to begin with.
131 document.getElementById('editReader').disabled = true;
132 document.getElementById('removeReader').disabled = true;
133 document.getElementById('setDefault').disabled = true;
134
135 if (!storageEnabled) {
136 document.getElementById('addReader').disabled = true;
137 document.getElementById('readerListbox').disabled = true;
138 document.getElementById('alwaysUseDefault').disabled = true;
139 document.getElementById('resetList').disabled = true;
140
141 alert(chrome.i18n.getMessage("rss_subscription_no_localstorage"));
142 return;
143 }
144
145 var feedReaderList;
146 if (window.localStorage.readerList) {
147 feedReaderList = JSON.parse(window.localStorage.readerList);
148 } else {
149 feedReaderList = defaultReaderList();
150 window.localStorage.readerList = JSON.stringify(feedReaderList);
151 }
152
153 // If there is no default, set the first item as default.
154 if (isDefaultReader("") && feedReaderList.length > 0)
155 window.localStorage.defaultReader = feedReaderList[0].url;
156
157 // Populate the list of readers.
158 var readerListbox = document.getElementById('readerListbox');
159 while (readerListbox.options.length > 0)
160 readerListbox.remove(0);
161 for (i = 0; i < feedReaderList.length; ++i) {
162 var description = feedReaderList[i].description;
163 if (isDefaultReader(feedReaderList[i].url))
164 description += " " + chrome.i18n.getMessage("rss_subscription_default");
165 readerListbox.add(new Option(description, feedReaderList[i].url));
166 }
167
168 // Set up the 'show preview?' checkbox.
169 var skipPreview = document.getElementById('alwaysUseDefault');
170 skipPreview.checked = window.localStorage.showPreviewPage == "No";
171 }
172
173 function toggleFeedPreview() {
174 var alwaysUseDefault = document.getElementById('alwaysUseDefault');
175 if (alwaysUseDefault.checked)
176 window.localStorage.showPreviewPage = "No";
177 else
178 delete window.localStorage.showPreviewPage;
179 }
180
181 function setDefault() {
182 var readerListbox = document.getElementById('readerListbox');
183 var selection = readerListbox.options[readerListbox.selectedIndex];
184 window.localStorage.defaultReader = selection.value;
185
186 // Reinititalize the page.
187 main();
188 }
189
190 function resetList() {
191 if (!confirm(chrome.i18n.getMessage(
192 "rss_subscription_reset_list_confirm"))) {
193 return;
194 }
195
196 delete window.localStorage.readerList;
197 delete window.localStorage.defaultReader;
198 delete window.localStorage.showPreviewPage;
199
200 // Reinititalize the page.
201 main();
202 }
203
204 function onSelectionChanged() {
205 var selected = readerListbox.selectedIndex > -1;
206 // To edit a reader something must be selected.
207 document.getElementById('editReader').disabled = !selected;
208 // To set default, the current selection cannot already be default.
209 document.getElementById('setDefault').disabled = !selected ||
210 isDefaultReader(readerListbox[readerListbox.selectedIndex].value);
211 // To remove the selected reader it must not be the last item.
212 document.getElementById('removeReader').disabled =
213 !selected || readerListbox.options.length < 2;
214 }
215
216 function editReader(index) {
217 var readerListbox = document.getElementById('readerListbox');
218
219 if (index == -1) {
220 // Adding a new item, make sure the text boxes are empty.
221 document.getElementById('urlText').value = "";
222 document.getElementById('descriptionText').value = "";
223 editingIndex = -1; // New item.
224 editingDefault = true; // New items become default items.
225 } else if (index == 0) {
226 // Editing some item, find the current item index and store it.
227 editingIndex = readerListbox.selectedIndex;
228 var oldOption = readerListbox.options[editingIndex];
229 document.getElementById('urlText').value = oldOption.value;
230 document.getElementById('descriptionText').value =
231 oldOption.text.replace(
232 ' ' + chrome.i18n.getMessage("rss_subscription_default"), '');
233 editingDefault = isDefaultReader(oldOption.value);
234 }
235
236 showDialog();
237 }
238
239 function removeReader() {
240 var index = readerListbox.selectedIndex;
241 var feedReaderList = JSON.parse(window.localStorage.readerList);
242 var reply =
243 confirm(chrome.i18n.getMessage("rss_subscription_remove_confirm",
244 feedReaderList[index].description));
245 if (reply) {
246 var wasDefault = isDefaultReader(feedReaderList[index].url);
247 // Remove the item from the list.
248 feedReaderList.splice(index, 1);
249 window.localStorage.readerList = JSON.stringify(feedReaderList);
250
251 if (wasDefault)
252 window.localStorage.defaultReader = feedReaderList[0].url;
253 }
254
255 main();
256 }
257
258 /**
259 * Shows the Edit Feed Reader dialog.
260 */
261 function showDialog() {
262 document.getElementById('urlAssist').innerText = assistText;
263 document.getElementById('save').disabled = true;
264
265 // Show the dialog box.
266 document.getElementById('dialogBackground').style.display = "-webkit-box";
267 }
268
269 /**
270 * Hides the Edit Feed Reader dialog.
271 */
272 function hideDialog() {
273 document.getElementById('dialogBackground').style.display = "none";
274 }
275
276 /**
277 * Validates the input in the form (making sure something is entered in both
278 * fields and that %s is not missing from the url field.
279 */
280 function validateInput() {
281 document.getElementById('statusMsg').innerText = "";
282
283 var description = document.getElementById('descriptionText');
284 var url = document.getElementById('urlText');
285
286 var valid = description.value.length > 0 &&
287 url.value.length > 0 &&
288 url.value.indexOf("%s") > -1;
289
290 document.getElementById('save').disabled = !valid;
291 }
292
293 /**
294 * Handler for saving the values.
295 */
296 function save() {
297 // Get the old list.
298 var feedReaderList = JSON.parse(window.localStorage.readerList);
299
300 var url = document.getElementById('urlText').value;
301 var description = document.getElementById('descriptionText').value;
302
303 if (editingIndex == -1) {
304 // Construct a new list.
305 var newFeedList = [];
306
307 // Add the new item.
308 newFeedList.push({ 'url': url, 'description': description });
309
310 for (i = 0; i < feedReaderList.length; ++i)
311 newFeedList.push(feedReaderList[i]);
312
313 feedReaderList = newFeedList;
314 } else {
315 feedReaderList[editingIndex].url = url;
316 feedReaderList[editingIndex].description = description;
317 }
318
319 window.localStorage.readerList = JSON.stringify(feedReaderList);
320
321 // Retain item default status, in case the url changed while editing item.
322 if (editingDefault)
323 window.localStorage.defaultReader = url;
324
325 hideDialog();
326
327 // Reload the values from scratch.
328 main();
329 }
330
331 function init() {
332 i18nReplace('rss_subscription_options');
333 i18nReplaceImpl('addReader', 'rss_subscription_add_reader');
334 i18nReplaceImpl('editReader', 'rss_subscription_edit_reader');
335 i18nReplaceImpl('removeReader', 'rss_subscription_remove_reader');
336 i18nReplaceImpl('setDefault', 'rss_subscription_make_default_reader');
337 i18nReplaceImpl('resetList', 'rss_subscription_reset_list');
338 i18nReplace('rss_subscription_always_use_default');
339 i18nReplaceImpl('dialogHeader', 'rss_subscription_edit_dialog_title');
340 i18nReplace('rss_subscription_feed_description');
341 i18nReplace('rss_subscription_feed_url');
342 i18nReplaceImpl('save', 'rss_subscription_save_button', 'value');
343 i18nReplaceImpl('rss_subscription_close_button',
344 'rss_subscription_close_button', 'value');
345 main();
346 }
347 </script>
348 </head> 114 </head>
349 <body onload="init()"> 115 <body>
350 <table border="0"> 116 <table border="0">
351 <tr> 117 <tr>
352 <td valign="top" width="16"> 118 <td valign="top" width="16">
353 <img src="feed-icon-16x16.png" /> 119 <img src="feed-icon-16x16.png" />
354 </td> 120 </td>
355 <td valign="middle"> 121 <td valign="middle">
356 <strong id="rss_subscription_options"></strong> 122 <strong id="rss_subscription_options"></strong>
357 </td> 123 </td>
358 <td colspan="2"> 124 <td colspan="2">
359 </td> 125 </td>
360 </tr> 126 </tr>
361 <tr> 127 <tr>
362 <td colspan="2"> 128 <td colspan="2">
363 <select id="readerListbox" size="8" style="width:300;" 129 <select id="readerListbox" size="8" style="width:300;"></select>
364 onchange="onSelectionChanged()"></select>
365 </td> 130 </td>
366 <td valign="top"> 131 <td valign="top">
367 <button style="width:100%;" id="addReader" onclick="editReader(-1)" 132 <button style="width:100%;" id="addReader"></button><br />
368 ></button><br /> 133 <button style="width:100%;" id="editReader"></button><br />
369 <button style="width:100%;" id="editReader" onclick="editReader(0)" 134 <button style="width:100%;" id="removeReader"></button><br />
370 ></button><br /> 135 <button style="width:100%;" id="setDefault"></button><br />
371 <button style="width:100%;" id="removeReader" onclick="removeReader()" 136 <button style="width:100%;" id="resetList"></button><br />
372 ></button><br />
373 <button style="width:100%;" id="setDefault" onclick="setDefault()"
374 ></button><br />
375 <button style="width:100%;" id="resetList" onclick="resetList()"
376 ></button><br />
377 </td> 137 </td>
378 <td style="width: 200px;"> 138 <td style="width: 200px;">
379 </td> 139 </td>
380 </tr> 140 </tr>
381 <tr> 141 <tr>
382 <td colspan="4"> 142 <td colspan="4">
383 <input type="checkbox" id="alwaysUseDefault" 143 <input type="checkbox" id="alwaysUseDefault"
384 value="alwaysUseDefault" onchange="toggleFeedPreview()" 144 value="alwaysUseDefault"
385 ><span id="rss_subscription_always_use_default"></span> 145 ><span id="rss_subscription_always_use_default"></span>
386 </td> 146 </td>
387 </tr> 147 </tr>
388 </table> 148 </table>
389 149
390 <div id="dialogBackground"> 150 <div id="dialogBackground">
391 <div id="dialogHBackground"> 151 <div id="dialogHBackground">
392 <div id="dialog"> 152 <div id="dialog">
393 153
394 <div id="dialogHeader"></div> 154 <div id="dialogHeader"></div>
395 155
396 <div id="dialogBody"> 156 <div id="dialogBody">
397 157
398 <div class="dialogRow"> 158 <div class="dialogRow">
399 &nbsp;<div class="status" id="statusMsg"></div> 159 &nbsp;<div class="status" id="statusMsg"></div>
400 </div> 160 </div>
401 161
402 <div class="dialogRow"> 162 <div class="dialogRow">
403 <div id="rss_subscription_feed_description"></div> 163 <div id="rss_subscription_feed_description"></div>
404 <div> 164 <div>
405 <input type="text" id="descriptionText" onkeyup="validateInput()"> 165 <input type="text" id="descriptionText">
406 </div> 166 </div>
407 </div> 167 </div>
408 168
409 <div class="dialogRow"> 169 <div class="dialogRow">
410 <div id="rss_subscription_feed_url"></div> 170 <div id="rss_subscription_feed_url"></div>
411 <div> 171 <div>
412 <input type="text" id="urlText" onkeyup="validateInput()"> 172 <input type="text" id="urlText">
413 </div> 173 </div>
414 </div> 174 </div>
415 175
416 <div class="dialogRow"> 176 <div class="dialogRow">
417 <div id="urlAssist" class="urlAssist"></div> 177 <div id="urlAssist" class="urlAssist"></div>
418 </div> 178 </div>
419 179
420 <div class="dialogRow" id="dialogContentFooter"> 180 <div class="dialogRow" id="dialogContentFooter">
421 <div> 181 <div>
422 <input type="button" id="save" 182 <input type="button" id="save">
423 onclick="save()">
424 </div> 183 </div>
425 <div> 184 <div>
426 <input type="button" 185 <input type="button"
427 id="rss_subscription_close_button" 186 id="rss_subscription_close_button" >
428 onclick="hideDialog()">
429 </div> 187 </div>
430 </div> 188 </div>
431 189
432 </div> <!-- /dialogBody --> 190 </div> <!-- /dialogBody -->
433 191
434 </div> 192 </div>
435 </div> 193 </div>
436 </div> 194 </div>
437 195
438 </body> 196 </body>
439 </html> 197 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698