OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 cr.define('options', function() { | 5 cr.define('options', function() { |
6 | 6 |
7 var OptionsPage = options.OptionsPage; | 7 var OptionsPage = options.OptionsPage; |
8 var UserImagesGrid = options.UserImagesGrid; | 8 var UserImagesGrid = options.UserImagesGrid; |
9 | 9 |
10 /** @const */ var CUSTOM_WALLPAPER_PREFIX = 'chrome://wallpaper/custom_'; | |
11 | |
10 ///////////////////////////////////////////////////////////////////////////// | 12 ///////////////////////////////////////////////////////////////////////////// |
11 // SetWallpaperOptions class: | 13 // SetWallpaperOptions class: |
12 | 14 |
13 /** | 15 /** |
14 * Encapsulated handling of ChromeOS set wallpaper options page. | 16 * Encapsulated handling of ChromeOS set wallpaper options page. |
15 * @constructor | 17 * @constructor |
16 */ | 18 */ |
17 function SetWallpaperOptions() { | 19 function SetWallpaperOptions() { |
18 OptionsPage.call( | 20 OptionsPage.call( |
19 this, | 21 this, |
(...skipping 18 matching lines...) Expand all Loading... | |
38 var wallpaperGrid = $('wallpaper-grid'); | 40 var wallpaperGrid = $('wallpaper-grid'); |
39 UserImagesGrid.decorate(wallpaperGrid); | 41 UserImagesGrid.decorate(wallpaperGrid); |
40 | 42 |
41 wallpaperGrid.addEventListener('change', | 43 wallpaperGrid.addEventListener('change', |
42 this.handleImageSelected_.bind(this)); | 44 this.handleImageSelected_.bind(this)); |
43 wallpaperGrid.addEventListener('dblclick', | 45 wallpaperGrid.addEventListener('dblclick', |
44 this.handleImageDblClick_.bind(this)); | 46 this.handleImageDblClick_.bind(this)); |
45 wallpaperGrid.addEventListener('activate', | 47 wallpaperGrid.addEventListener('activate', |
46 function() { OptionsPage.closeOverlay() }); | 48 function() { OptionsPage.closeOverlay() }); |
47 | 49 |
50 $('set-custom-wallpaper').addEventListener('click', | |
51 this.handleChooseFile_); | |
52 $('set-wallpaper-layout').addEventListener('change', | |
53 this.handleLayoutChange_); | |
48 $('use-random-wallpaper').onclick = this.handleCheckboxClick_.bind(this); | 54 $('use-random-wallpaper').onclick = this.handleCheckboxClick_.bind(this); |
49 $('set-wallpaper-overlay-confirm').onclick = function() { | 55 $('set-wallpaper-overlay-confirm').onclick = function() { |
50 OptionsPage.closeOverlay(); | 56 OptionsPage.closeOverlay(); |
51 }; | 57 }; |
52 | 58 |
53 // @type {Array.<author: string, url: string, website: string>} | 59 // @type {Array.<author: string, url: string, website: string>} |
54 this.wallpapers_ = []; | 60 this.wallpapers_ = []; |
55 | 61 |
62 // @type {Object} Old user custom wallpaper thumbnail. | |
63 this.oldImage_ = null; | |
64 | |
56 chrome.send('onSetWallpaperPageInitialized'); | 65 chrome.send('onSetWallpaperPageInitialized'); |
57 }, | 66 }, |
58 | 67 |
59 /** | 68 /** |
60 * Called right after the page has been shown to user. | 69 * Called right after the page has been shown to user. |
61 */ | 70 */ |
62 didShowPage: function() { | 71 didShowPage: function() { |
63 $('wallpaper-grid').updateAndFocus(); | 72 $('wallpaper-grid').updateAndFocus(); |
64 // A quick hack to fix issue 118472. This is a general problem of list | 73 // A quick hack to fix issue 118472. This is a general problem of list |
65 // control and options overlay. | 74 // control and options overlay. |
66 // TODO(bshe): Remove this hack when we fixed the general problem which | 75 // TODO(bshe): Remove this hack when we fixed the general problem which |
67 // tracked in issue 118829. | 76 // tracked in issue 118829. |
68 $('wallpaper-grid').redraw(); | 77 $('wallpaper-grid').redraw(); |
69 chrome.send('onSetWallpaperPageShown'); | 78 chrome.send('onSetWallpaperPageShown'); |
70 }, | 79 }, |
71 | 80 |
72 /** | 81 /** |
73 * Called right before the page is hidden. | 82 * Called right before the page is hidden. |
74 */ | 83 */ |
75 willHidePage: function() { | 84 willHidePage: function() { |
76 var wallpaperGrid = $('wallpaper-grid'); | 85 var wallpaperGrid = $('wallpaper-grid'); |
77 wallpaperGrid.blur(); | 86 wallpaperGrid.blur(); |
87 if (this.oldImage_) { | |
88 wallpaperGrid.removeItem(this.oldImage_); | |
89 this.oldImage_ = null; | |
90 } | |
91 $('set-wallpaper-layout').innerText = ''; | |
78 }, | 92 }, |
79 | 93 |
80 /** | 94 /** |
81 * Set attributions of wallpaper with given URL. | 95 * Set attributions of wallpaper with given URL. |
82 * @param {string} url URL of the selected wallpaper. | 96 * @param {string} url URL of the selected wallpaper. |
83 * @private | 97 * @private |
84 */ | 98 */ |
85 setWallpaperAttribution_: function(url) { | 99 setWallpaperAttribution_: function(url) { |
86 for (var i = 0; i < this.wallpapers_.length; i++) { | 100 for (var i = 0; i < this.wallpapers_.length; i++) { |
87 if (this.wallpapers_[i].url == url) { | 101 if (this.wallpapers_[i].url == url) { |
88 $('author-name').textContent = this.wallpapers_[i].author; | 102 $('author-name').textContent = this.wallpapers_[i].author; |
89 $('author-website').textContent = this.wallpapers_[i].website; | 103 $('author-website').textContent = this.wallpapers_[i].website; |
90 return; | 104 return; |
91 } | 105 } |
92 } | 106 } |
93 $('author-name').textContent = ''; | 107 $('author-name').textContent = ''; |
94 $('author-website').textContent = ''; | 108 $('author-website').textContent = ''; |
95 }, | 109 }, |
96 | 110 |
97 /** | 111 /** |
112 * Populate the drop down box for custom wallpaper layouts. | |
James Hawkins
2012/05/09 18:21:25
s/Populate/Populates/
bshe
2012/05/09 20:37:15
Done.
| |
113 * param {string} layouts Available wallpaper layouts. | |
114 * param {number} selectedLayout The value of selected/default layout. | |
115 * @private | |
116 */ | |
117 populateWallpaperLayouts_: function(layouts, selectedLayout) { | |
118 var wallpaperLayout = $('set-wallpaper-layout'); | |
119 var selectedIndex = -1; | |
120 for (var i = 0; i < layouts.length; i++) { | |
121 var option = new Option(layouts[i]['name'], layouts[i]['index']); | |
122 if (selectedLayout == option.value) | |
123 selectedIndex = i; | |
124 wallpaperLayout.appendChild(option); | |
125 } | |
126 if (selectedIndex >= 0) | |
127 wallpaperLayout.selectedIndex = selectedIndex; | |
128 }, | |
129 | |
130 /** | |
131 * Handles "Custom..." button activation. | |
132 * @private | |
133 */ | |
134 handleChooseFile_: function() { | |
135 chrome.send('chooseWallpaper'); | |
136 }, | |
137 | |
138 /** | |
139 * Handle the wallpaper layout setting change. | |
140 * @private | |
141 */ | |
142 handleLayoutChange_: function() { | |
143 var setWallpaperLayout = $('set-wallpaper-layout'); | |
144 var layout = setWallpaperLayout.options[ | |
145 setWallpaperLayout.selectedIndex].value; | |
146 chrome.send('changeWallpaperLayout', [layout]); | |
147 }, | |
148 | |
149 /** | |
98 * Handles image selection change. | 150 * Handles image selection change. |
99 * @private | 151 * @private |
100 */ | 152 */ |
101 handleImageSelected_: function() { | 153 handleImageSelected_: function() { |
102 var wallpaperGrid = $('wallpaper-grid'); | 154 var wallpaperGrid = $('wallpaper-grid'); |
103 var url = wallpaperGrid.selectedItemUrl; | 155 var url = wallpaperGrid.selectedItemUrl; |
104 if (url && | 156 if (url && |
105 !wallpaperGrid.inProgramSelection) { | 157 !wallpaperGrid.inProgramSelection) { |
158 if (url.indexOf(CUSTOM_WALLPAPER_PREFIX) == 0) { | |
159 // User custom wallpaper is selected | |
160 this.isCustom = true; | |
161 // When users select the custom wallpaper thumbnail from picker UI, | |
162 // use the saved layout value and redraw the wallpaper. | |
163 this.handleLayoutChange_(); | |
164 } else { | |
165 this.isCustom = false; | |
166 chrome.send('selectDefaultWallpaper', [url]); | |
167 } | |
106 this.setWallpaperAttribution_(url); | 168 this.setWallpaperAttribution_(url); |
107 chrome.send('selectDefaultWallpaper', [url]); | |
108 } | 169 } |
109 }, | 170 }, |
110 | 171 |
111 /** | 172 /** |
112 * Handles double click on the image grid. | 173 * Handles double click on the image grid. |
113 * @param {Event} e Double click Event. | 174 * @param {Event} e Double click Event. |
114 */ | 175 */ |
115 handleImageDblClick_: function(e) { | 176 handleImageDblClick_: function(e) { |
116 var wallpaperGrid = $('wallpaper-grid'); | 177 var wallpaperGrid = $('wallpaper-grid'); |
117 if (wallpaperGrid.disabled) | 178 if (wallpaperGrid.disabled) |
118 return; | 179 return; |
119 // Close page unless the click target is the grid itself. | 180 // Close page unless the click target is the grid itself. |
120 if (e.target instanceof HTMLImageElement) | 181 if (e.target instanceof HTMLImageElement) |
121 OptionsPage.closeOverlay(); | 182 OptionsPage.closeOverlay(); |
122 }, | 183 }, |
123 | 184 |
124 /** | 185 /** |
125 * Handles click on the "I'm feeling lucky" checkbox. | 186 * Handles click on the "I'm feeling lucky" checkbox. |
126 * @private | 187 * @private |
127 */ | 188 */ |
128 handleCheckboxClick_: function() { | 189 handleCheckboxClick_: function() { |
129 var wallpaperGrid = $('wallpaper-grid'); | 190 var wallpaperGrid = $('wallpaper-grid'); |
130 if ($('use-random-wallpaper').checked) { | 191 if ($('use-random-wallpaper').checked) { |
131 wallpaperGrid.disabled = true; | 192 wallpaperGrid.disabled = true; |
193 $('attribution-label').hidden = false; | |
132 chrome.send('selectRandomWallpaper'); | 194 chrome.send('selectRandomWallpaper'); |
133 wallpaperGrid.classList.add('grayout'); | 195 wallpaperGrid.classList.add('grayout'); |
196 $('set-wallpaper-layout').hidden = true; | |
134 } else { | 197 } else { |
135 wallpaperGrid.disabled = false; | 198 wallpaperGrid.disabled = false; |
136 wallpaperGrid.classList.remove('grayout'); | 199 wallpaperGrid.classList.remove('grayout'); |
137 // Set the wallpaper type to User::DEFAULT. | 200 // Set the wallpaper type to User::DEFAULT. |
138 this.handleImageSelected_(); | 201 this.handleImageSelected_(); |
139 } | 202 } |
140 }, | 203 }, |
141 | 204 |
142 /** | 205 /** |
143 * Selects corresponding wallpaper thumbnail with the given URL and toggle | 206 * Selects corresponding wallpaper thumbnail with the given URL and toggle |
(...skipping 27 matching lines...) Expand all Loading... | |
171 // TODO(bshe): Ideally we should save author and website with the actual | 234 // TODO(bshe): Ideally we should save author and website with the actual |
172 // image (URL) and not use index related storage. This way this data is | 235 // image (URL) and not use index related storage. This way this data is |
173 // stored in one place rather than depending on the index to be | 236 // stored in one place rather than depending on the index to be |
174 // consistent. | 237 // consistent. |
175 for (var i = 0, wallpaper; wallpaper = wallpapers[i]; i++) { | 238 for (var i = 0, wallpaper; wallpaper = wallpapers[i]; i++) { |
176 this.wallpapers_.push(wallpaper); | 239 this.wallpapers_.push(wallpaper); |
177 wallpaperGrid.addItem(wallpaper.url); | 240 wallpaperGrid.addItem(wallpaper.url); |
178 } | 241 } |
179 }, | 242 }, |
180 | 243 |
244 /** | |
245 * Called when user select a valid file from file system. Display layout | |
James Hawkins
2012/05/09 18:21:25
nit: Start method documentation with what the meth
bshe
2012/05/09 20:37:15
Done.
| |
246 * drop down box and disable random mode if enabled. | |
247 */ | |
248 didSelectFile_: function() { | |
249 $('set-wallpaper-layout').hidden = false; | |
250 var wallpaperGrid = $('wallpaper-grid'); | |
251 if ($('random-wallpaper-checkbox').checked) { | |
252 $('random-wallpaper-checkbox').checked = false; | |
253 wallpaperGrid.disabled = false; | |
254 wallpaperGrid.classList.remove('grayout'); | |
255 } | |
256 }, | |
257 | |
258 /** | |
259 * Return url of current user's custom wallpaper thumbnail. | |
James Hawkins
2012/05/09 18:21:25
nit: Returns.
bshe
2012/05/09 20:37:15
Done.
| |
260 * @private | |
261 */ | |
262 currentWallpaperImageUrl_: function() { | |
263 return CUSTOM_WALLPAPER_PREFIX + BrowserOptions.getLoggedInUsername() + | |
264 '?id=' + (new Date()).getTime(); | |
265 }, | |
266 | |
267 /** | |
268 * Update the visibility of attribution-label and set-wallpaper-layout. | |
James Hawkins
2012/05/09 18:21:25
nit: Updates.
bshe
2012/05/09 20:37:15
Done.
| |
269 * @param {boolean} isCustom True if users select custom wallpaper. | |
270 */ | |
271 set isCustom(isCustom) { | |
272 if (isCustom) { | |
273 // Clear attributions for custom wallpaper. | |
274 $('attribution-label').hidden = true; | |
275 // Enable the layout drop down box when custom wallpaper is selected. | |
276 $('set-wallpaper-layout').hidden = false; | |
277 } else { | |
278 $('attribution-label').hidden = false; | |
279 $('set-wallpaper-layout').hidden = true; | |
280 } | |
281 }, | |
282 | |
283 /** | |
284 * Adds or updates custom user wallpaper thumbnail from file. | |
285 * @private | |
286 */ | |
287 setCustomImage_: function() { | |
288 var wallpaperGrid = $('wallpaper-grid'); | |
289 var url = this.currentWallpaperImageUrl_(); | |
290 if (this.oldImage_) { | |
291 this.oldImage_ = wallpaperGrid.updateItem(this.oldImage_, url); | |
292 } else { | |
293 // Insert to the end of wallpaper list. | |
294 var pos = wallpaperGrid.length; | |
295 this.oldImage_ = wallpaperGrid.addItem(url, undefined, undefined, pos); | |
296 } | |
297 | |
298 this.isCustom = true; | |
299 this.setWallpaperAttribution_(''); | |
300 wallpaperGrid.selectedItem = this.oldImage_; | |
301 }, | |
181 }; | 302 }; |
182 | 303 |
183 // Forward public APIs to private implementations. | 304 // Forward public APIs to private implementations. |
184 [ | 305 [ |
185 'setDefaultImages', | 306 'setDefaultImages', |
186 'setSelectedImage' | 307 'setSelectedImage', |
308 'populateWallpaperLayouts', | |
309 'didSelectFile', | |
310 'setCustomImage' | |
187 ].forEach(function(name) { | 311 ].forEach(function(name) { |
188 SetWallpaperOptions[name] = function() { | 312 SetWallpaperOptions[name] = function() { |
189 var instance = SetWallpaperOptions.getInstance(); | 313 var instance = SetWallpaperOptions.getInstance(); |
190 return instance[name + '_'].apply(instance, arguments); | 314 return instance[name + '_'].apply(instance, arguments); |
191 }; | 315 }; |
192 }); | 316 }); |
193 | 317 |
194 // Export | 318 // Export |
195 return { | 319 return { |
196 SetWallpaperOptions: SetWallpaperOptions | 320 SetWallpaperOptions: SetWallpaperOptions |
197 }; | 321 }; |
198 | 322 |
199 }); | 323 }); |
200 | 324 |
OLD | NEW |