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

Side by Side Diff: chrome/browser/resources/settings/languages_page/manage_languages_page.js

Issue 1902893003: MD Settings: simplify language model and data binding (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update comment based on other CL feedback Created 4 years, 8 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 /** 5 /**
6 * @fileoverview 'settings-manage-languages-page' is a sub-page for enabling 6 * @fileoverview 'settings-manage-languages-page' is a sub-page for enabling
7 * and disabling languages. 7 * and disabling languages.
8 */ 8 */
9 Polymer({ 9 Polymer({
10 is: 'settings-manage-languages-page', 10 is: 'settings-manage-languages-page',
11 11
12 properties: { 12 properties: {
13 /** 13 /**
14 * Preferences state. 14 * Preferences state.
15 */ 15 */
16 prefs: { 16 prefs: {
17 type: Object, 17 type: Object,
18 notify: true, 18 notify: true,
19 }, 19 },
20 20
21 /** 21 /**
22 * @type {!LanguagesModel|undefined} 22 * @type {!LanguagesModel|undefined}
23 */ 23 */
24 languages: { 24 languages: {
25 type: Object, 25 type: Object,
26 notify: true, 26 notify: true,
27 }, 27 },
28 28
29 /**
30 * @private {!Array<!{code: string, displayName: string,
31 * nativeDisplayName: string, enabled: boolean}>|
32 * undefined}
33 */
34 availableLanguages_: Array,
35
36 /** @private {!LanguageHelper} */ 29 /** @private {!LanguageHelper} */
37 languageHelper_: Object, 30 languageHelper_: Object,
38 }, 31 },
39 32
40 observers: [
41 'enabledLanguagesChanged_(languages.enabledLanguages.*)',
42 ],
43
44 /** @override */ 33 /** @override */
45 created: function() { 34 created: function() {
46 this.languageHelper_ = LanguageHelperImpl.getInstance(); 35 this.languageHelper_ = LanguageHelperImpl.getInstance();
47 }, 36 },
48 37
49 /** 38 /**
39 * @param {!chrome.languageSettingsPrivate.Language} language
40 * @param {!Object} change Polymer change object (provided in the HTML so this
41 * gets called whenever languages.enabled.* changes).
42 * @return {boolean}
43 * @private
44 */
45 isCheckboxChecked_: function(language, change) {
46 return this.languageHelper_.isLanguageEnabled(language.code);
47 },
48
49 /**
50 * Determines whether a language must be enabled. If so, the checkbox in the
51 * available languages list should not be changeable.
52 * @param {!chrome.languageSettingsPrivate.Language} language
53 * @param {!Object} change Polymer change object (provided in the HTML so this
54 * gets called whenever languages.enabled.* changes).
55 * @return {boolean}
56 * @private
57 */
58 isLanguageRequired_: function(language, change) {
59 // This check only applies to enabled languages.
60 if (!this.languageHelper_.isLanguageEnabled(language.code))
61 return false;
62 return !this.languageHelper_.canDisableLanguage(language.code);
63 },
64
65 /**
50 * Handler for removing a language. 66 * Handler for removing a language.
51 * @param {!{model: !{item: !LanguageInfo}}} e 67 * @param {!{model: !{item: !LanguageState}}} e
52 * @private 68 * @private
53 */ 69 */
54 onRemoveLanguageTap_: function(e) { 70 onRemoveLanguageTap_: function(e) {
55 this.languageHelper_.disableLanguage(e.model.item.language.code); 71 this.languageHelper_.disableLanguage(e.model.item.language.code);
56 }, 72 },
57 73
58 /** 74 /**
59 * Handler for checking or unchecking a language item. 75 * Handler for checking or unchecking a language item.
60 * @param {!{model: !{item: !chrome.languageSettingsPrivate.Language}, 76 * @param {!{model: !{item: !chrome.languageSettingsPrivate.Language},
61 * target: !PaperCheckboxElement}} e 77 * target: !PaperCheckboxElement}} e
62 * @private 78 * @private
63 */ 79 */
64 onLanguageCheckboxChange_: function(e) { 80 onLanguageCheckboxChange_: function(e) {
65 var code = e.model.item.code; 81 var code = e.model.item.code;
66 if (e.target.checked) 82 if (e.target.checked)
67 this.languageHelper_.enableLanguage(code); 83 this.languageHelper_.enableLanguage(code);
68 else 84 else
69 this.languageHelper_.disableLanguage(code); 85 this.languageHelper_.disableLanguage(code);
70 }, 86 },
71
72 /**
73 * True if a language is not the current or prospective UI language, ie,
74 * it could be disabled.
75 * @param {string} languageCode
76 * @param {string} prospectiveUILanguageCode
77 * @return {boolean}
78 * @private
79 */
80 canRemoveLanguage_: function(languageCode, prospectiveUILanguageCode) {
81 if (languageCode == navigator.language ||
82 languageCode == prospectiveUILanguageCode) {
83 return false;
84 }
85 return true;
86 },
87
88 /**
89 * Updates the available languages that are bound to the iron-list.
90 * @private
91 */
92 enabledLanguagesChanged_: function() {
93 if (!this.availableLanguages_) {
94 var availableLanguages = [];
95 for (var i = 0; i < this.languages.supportedLanguages.length; i++) {
96 var language = this.languages.supportedLanguages[i];
97 availableLanguages.push({
98 code: language.code,
99 displayName: language.displayName,
100 nativeDisplayName: language.nativeDisplayName,
101 enabled: this.languageHelper_.isLanguageEnabled(language.code),
102 });
103 }
104 // Set the Polymer property after building the full array.
105 this.availableLanguages_ = availableLanguages;
106 } else {
107 // Update the available languages in place.
108 for (var i = 0; i < this.availableLanguages_.length; i++) {
109 this.set('availableLanguages_.' + i + '.enabled',
110 this.languageHelper_.isLanguageEnabled(
111 this.availableLanguages_[i].code));
112 }
113 }
114 },
115 }); 87 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698