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 // TODO(kochi): Generalize the notification as a component and put it | 5 // TODO(kochi): Generalize the notification as a component and put it |
6 // in js/cr/ui/notification.js . | 6 // in js/cr/ui/notification.js . |
7 | 7 |
8 cr.define('options', function() { | 8 cr.define('options', function() { |
9 /** @const */ var OptionsPage = options.OptionsPage; | 9 /** @const */ var OptionsPage = options.OptionsPage; |
10 /** @const */ var LanguageList = options.LanguageList; | 10 /** @const */ var LanguageList = options.LanguageList; |
| 11 /** @const */ var ThirdPartyImeConfirmOverlay = |
| 12 options.ThirdPartyImeConfirmOverlay; |
11 | 13 |
12 /** | 14 /** |
13 * Spell check dictionary download status. | 15 * Spell check dictionary download status. |
14 * @type {Enum} | 16 * @type {Enum} |
15 */ | 17 */ |
16 /** @const*/ var DOWNLOAD_STATUS = { | 18 /** @const*/ var DOWNLOAD_STATUS = { |
17 IN_PROGRESS: 1, | 19 IN_PROGRESS: 1, |
18 FAILED: 2 | 20 FAILED: 2 |
19 }; | 21 }; |
20 | 22 |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 var inputMethodTemplate = $('language-options-input-method-template'); | 313 var inputMethodTemplate = $('language-options-input-method-template'); |
312 | 314 |
313 for (var i = 0; i < inputMethods.length; i++) { | 315 for (var i = 0; i < inputMethods.length; i++) { |
314 var inputMethod = inputMethods[i]; | 316 var inputMethod = inputMethods[i]; |
315 var element = inputMethodTemplate.cloneNode(true); | 317 var element = inputMethodTemplate.cloneNode(true); |
316 element.id = ''; | 318 element.id = ''; |
317 element.languageCodeSet = inputMethod.languageCodeSet; | 319 element.languageCodeSet = inputMethod.languageCodeSet; |
318 | 320 |
319 var input = element.querySelector('input'); | 321 var input = element.querySelector('input'); |
320 input.inputMethodId = inputMethod.id; | 322 input.inputMethodId = inputMethod.id; |
| 323 input.imeProvider = inputMethod.extensionName; |
321 var span = element.querySelector('span'); | 324 var span = element.querySelector('span'); |
322 span.textContent = inputMethod.displayName; | 325 span.textContent = inputMethod.displayName; |
323 | 326 |
324 if (inputMethod.optionsPage) { | 327 if (inputMethod.optionsPage) { |
325 var button = document.createElement('button'); | 328 var button = document.createElement('button'); |
326 button.textContent = loadTimeData.getString('configure'); | 329 button.textContent = loadTimeData.getString('configure'); |
327 button.inputMethodId = inputMethod.id; | 330 button.inputMethodId = inputMethod.id; |
328 button.onclick = function(inputMethodId, e) { | 331 button.onclick = function(inputMethodId, e) { |
329 chrome.send('inputMethodOptionsOpen', [inputMethodId]); | 332 chrome.send('inputMethodOptionsOpen', [inputMethodId]); |
330 }.bind(this, inputMethod.id); | 333 }.bind(this, inputMethod.id); |
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 }, | 819 }, |
817 | 820 |
818 /** | 821 /** |
819 * Handles input method checkbox's click event. | 822 * Handles input method checkbox's click event. |
820 * @param {Event} e Click event. | 823 * @param {Event} e Click event. |
821 * @private | 824 * @private |
822 */ | 825 */ |
823 handleCheckboxClick_: function(e) { | 826 handleCheckboxClick_: function(e) { |
824 var checkbox = e.target; | 827 var checkbox = e.target; |
825 | 828 |
| 829 // Third party IMEs require additional confirmation prior to enabling due |
| 830 // to privacy risk. |
| 831 if (/^_ext_ime_/.test(checkbox.inputMethodId) && checkbox.checked) { |
| 832 var confirmationCallback = this.handleCheckboxUpdate_.bind(this, |
| 833 checkbox); |
| 834 var cancellationCallback = function() { |
| 835 checkbox.checked = false; |
| 836 }; |
| 837 ThirdPartyImeConfirmOverlay.showConfirmationDialog({ |
| 838 extension: checkbox.imeProvider, |
| 839 confirm: confirmationCallback, |
| 840 cancel: cancellationCallback |
| 841 }); |
| 842 } else { |
| 843 this.handleCheckboxUpdate_(checkbox); |
| 844 } |
| 845 }, |
| 846 |
| 847 /** |
| 848 * Updates active IMEs based on change in state of a checkbox for an input |
| 849 * method. |
| 850 * @param {!Element} checkbox Updated checkbox element. |
| 851 * @private |
| 852 */ |
| 853 handleCheckboxUpdate_: function(checkbox) { |
826 if (checkbox.inputMethodId.match(/^_ext_ime_/)) { | 854 if (checkbox.inputMethodId.match(/^_ext_ime_/)) { |
827 this.updateEnabledExtensionsFromCheckboxes_(); | 855 this.updateEnabledExtensionsFromCheckboxes_(); |
828 this.saveEnabledExtensionPref_(); | 856 this.saveEnabledExtensionPref_(); |
829 return; | 857 return; |
830 } | 858 } |
831 if (this.preloadEngines_.length == 1 && !checkbox.checked) { | 859 if (this.preloadEngines_.length == 1 && !checkbox.checked) { |
832 // Don't allow disabling the last input method. | 860 // Don't allow disabling the last input method. |
833 this.showNotification_( | 861 this.showNotification_( |
834 loadTimeData.getString('pleaseAddAnotherInputMethod'), | 862 loadTimeData.getString('pleaseAddAnotherInputMethod'), |
835 loadTimeData.getString('okButton')); | 863 loadTimeData.getString('okButton')); |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1328 | 1356 |
1329 LanguageOptions.onComponentManagerInitialized = function(componentImes) { | 1357 LanguageOptions.onComponentManagerInitialized = function(componentImes) { |
1330 LanguageOptions.getInstance().appendComponentExtensionIme_(componentImes); | 1358 LanguageOptions.getInstance().appendComponentExtensionIme_(componentImes); |
1331 }; | 1359 }; |
1332 | 1360 |
1333 // Export | 1361 // Export |
1334 return { | 1362 return { |
1335 LanguageOptions: LanguageOptions | 1363 LanguageOptions: LanguageOptions |
1336 }; | 1364 }; |
1337 }); | 1365 }); |
OLD | NEW |