Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / subscribe_page_action / options.js
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.
4
5 // Various text messages within the edit dialog.
6 var assistText = chrome.i18n.getMessage("rss_subscription_feed_url_assist");
7
8 // Specifies the index of the item we are editing or -1 if adding new.
9 var editingIndex = -1;
10 // Whether we are currently editing the default item.
11 var editingDefault = false;
12
13 function main() {
14   document.title = chrome.i18n.getMessage("rss_subscription_edit_dialog_title");
15
16   // Make sure the dialog is not visible.
17   document.getElementById('dialogBackground').style.display = "none";
18
19   // Make sure the buttons are disabled to begin with.
20   document.getElementById('editReader').disabled = true;
21   document.getElementById('removeReader').disabled = true;
22   document.getElementById('setDefault').disabled = true;
23
24   if (!storageEnabled) {
25     document.getElementById('addReader').disabled = true;
26     document.getElementById('readerListbox').disabled = true;
27     document.getElementById('alwaysUseDefault').disabled = true;
28     document.getElementById('resetList').disabled = true;
29
30     alert(chrome.i18n.getMessage("rss_subscription_no_localstorage"));
31     return;
32   }
33
34   var feedReaderList;
35   if (window.localStorage.readerList) {
36     feedReaderList = JSON.parse(window.localStorage.readerList);
37   } else {
38     feedReaderList = defaultReaderList();
39     window.localStorage.readerList = JSON.stringify(feedReaderList);
40   }
41
42   // If there is no default, set the first item as default.
43   if (isDefaultReader("") && feedReaderList.length > 0)
44     window.localStorage.defaultReader = feedReaderList[0].url;
45
46   // Populate the list of readers.
47   var readerListbox = document.getElementById('readerListbox');
48   while (readerListbox.options.length > 0)
49     readerListbox.remove(0);
50   for (i = 0; i < feedReaderList.length; ++i) {
51     var description = feedReaderList[i].description;
52     if (isDefaultReader(feedReaderList[i].url))
53       description += " " + chrome.i18n.getMessage("rss_subscription_default");
54     readerListbox.add(new Option(description, feedReaderList[i].url));
55   }
56
57   // Set up the 'show preview?' checkbox.
58   var skipPreview = document.getElementById('alwaysUseDefault');
59   skipPreview.checked = window.localStorage.showPreviewPage == "No";
60 }
61
62 function toggleFeedPreview() {
63   var alwaysUseDefault = document.getElementById('alwaysUseDefault');
64   if (alwaysUseDefault.checked)
65     window.localStorage.showPreviewPage = "No";
66   else
67     delete window.localStorage.showPreviewPage;
68 }
69
70 function setDefault() {
71   var readerListbox = document.getElementById('readerListbox');
72   var selection = readerListbox.options[readerListbox.selectedIndex];
73   window.localStorage.defaultReader = selection.value;
74
75   // Reinititalize the page.
76   main();
77 }
78
79 function resetList() {
80   if (!confirm(chrome.i18n.getMessage("rss_subscription_reset_list_confirm"))) {
81     return;
82   }
83
84   delete window.localStorage.readerList;
85   delete window.localStorage.defaultReader;
86   delete window.localStorage.showPreviewPage;
87
88   // Reinititalize the page.
89   main();
90 }
91
92 function onSelectionChanged() {
93   var selected = readerListbox.selectedIndex > -1;
94   // To edit a reader something must be selected.
95   document.getElementById('editReader').disabled = !selected;
96   // To set default, the current selection cannot already be default.
97   document.getElementById('setDefault').disabled = !selected ||
98       isDefaultReader(readerListbox[readerListbox.selectedIndex].value);
99   // To remove the selected reader it must not be the last item.
100   document.getElementById('removeReader').disabled =
101       !selected || readerListbox.options.length < 2;
102 }
103
104 function editReader(index) {
105   var readerListbox = document.getElementById('readerListbox');
106
107   if (index == -1) {
108     // Adding a new item, make sure the text boxes are empty.
109     document.getElementById('urlText').value = "";
110     document.getElementById('descriptionText').value = "";
111     editingIndex = -1;  // New item.
112     editingDefault = true;  // New items become default items.
113   } else if (index == 0) {
114     // Editing some item, find the current item index and store it.
115     editingIndex = readerListbox.selectedIndex;
116     var oldOption = readerListbox.options[editingIndex];
117     document.getElementById('urlText').value = oldOption.value;
118     document.getElementById('descriptionText').value =
119         oldOption.text.replace(
120             ' ' + chrome.i18n.getMessage("rss_subscription_default"), '');
121     editingDefault = isDefaultReader(oldOption.value);
122   }
123
124   showDialog();
125 }
126
127 function removeReader() {
128   var index = readerListbox.selectedIndex;
129   var feedReaderList = JSON.parse(window.localStorage.readerList);
130   var reply =
131     confirm(chrome.i18n.getMessage("rss_subscription_remove_confirm",
132                                    feedReaderList[index].description));
133   if (reply) {
134     var wasDefault = isDefaultReader(feedReaderList[index].url);
135     // Remove the item from the list.
136     feedReaderList.splice(index, 1);
137     window.localStorage.readerList = JSON.stringify(feedReaderList);
138
139     if (wasDefault)
140       window.localStorage.defaultReader = feedReaderList[0].url;
141   }
142
143   main();
144 }
145
146 /**
147  * Shows the Edit Feed Reader dialog.
148  */
149 function showDialog() {
150   document.getElementById('urlAssist').innerText = assistText;
151   document.getElementById('save').disabled = true;
152
153   // Show the dialog box.
154   document.getElementById('dialogBackground').style.display = "-webkit-box";
155 }
156
157 /**
158  * Hides the Edit Feed Reader dialog.
159  */
160 function hideDialog() {
161   document.getElementById('dialogBackground').style.display = "none";
162 }
163
164 /**
165  * Validates the input in the form (making sure something is entered in both
166  * fields and that %s is not missing from the url field.
167  */
168 function validateInput() {
169   document.getElementById('statusMsg').innerText = "";
170
171   var description = document.getElementById('descriptionText');
172   var url = document.getElementById('urlText');
173
174   var valid = (description.value.length > 0 &&
175                url.value.length > 0 &&
176                url.value.indexOf("%s") > -1);
177
178   document.getElementById('save').disabled = !valid;
179 }
180
181 /**
182  * Handler for saving the values.
183  */
184 function save() {
185   // Get the old list.
186   var feedReaderList = JSON.parse(window.localStorage.readerList);
187
188   var url = document.getElementById('urlText').value;
189   var description = document.getElementById('descriptionText').value;
190
191   if (editingIndex == -1) {
192     // Construct a new list.
193     var newFeedList = [];
194
195     // Add the new item.
196     newFeedList.push({ 'url': url, 'description': description });
197
198     for (i = 0; i < feedReaderList.length; ++i)
199       newFeedList.push(feedReaderList[i]);
200
201     feedReaderList = newFeedList;
202   } else {
203     feedReaderList[editingIndex].url = url;
204     feedReaderList[editingIndex].description = description;
205   }
206
207   window.localStorage.readerList = JSON.stringify(feedReaderList);
208
209   // Retain item default status, in case the url changed while editing item.
210   if (editingDefault)
211     window.localStorage.defaultReader = url;
212
213   hideDialog();
214
215   // Reload the values from scratch.
216   main();
217 }
218
219 function listen(id, eventType, method) {
220   document.getElementById(id).addEventListener(eventType, method);
221 }
222
223 document.addEventListener('DOMContentLoaded', function () {
224   // Localize.
225   i18nReplace('rss_subscription_options');
226   i18nReplaceImpl('addReader', 'rss_subscription_add_reader');
227   i18nReplaceImpl('editReader', 'rss_subscription_edit_reader');
228   i18nReplaceImpl('removeReader', 'rss_subscription_remove_reader');
229   i18nReplaceImpl('setDefault', 'rss_subscription_make_default_reader');
230   i18nReplaceImpl('resetList', 'rss_subscription_reset_list');
231   i18nReplace('rss_subscription_always_use_default');
232   i18nReplaceImpl('dialogHeader', 'rss_subscription_edit_dialog_title');
233   i18nReplace('rss_subscription_feed_description');
234   i18nReplace('rss_subscription_feed_url');
235   i18nReplaceImpl('save', 'rss_subscription_save_button', 'value');
236   i18nReplaceImpl('rss_subscription_close_button',
237                   'rss_subscription_close_button', 'value');
238   // Init event listeners.
239   listen('readerListbox', 'change', onSelectionChanged);
240   listen('addReader', 'click', function () { editReader(-1); });
241   listen('editReader', 'click', function () { editReader(0); });
242   listen('removeReader', 'click', removeReader);
243   listen('setDefault', 'click', setDefault);
244   listen('resetList', 'click', resetList);
245   listen('alwaysUseDefault', 'change', toggleFeedPreview);
246   listen('descriptionText', 'keyup', validateInput);
247   listen('urlText', 'keyup', validateInput);
248   listen('save', 'click', save);
249   listen('rss_subscription_close_button', 'click', hideDialog);
250
251   // Reload the values from scratch.
252   main();
253 });