blob: 9dda84c1c79f0155300df81b267535a4037a7cc8 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview 'settings-manage-languages-page' is a sub-page for enabling
* and disabling languages.
*
* @group Chrome Settings Elements
* @element settings-manage-languages-page
*/
Polymer({
is: 'settings-manage-languages-page',
properties: {
/**
* Preferences state.
*/
prefs: {
type: Object,
notify: true,
},
/**
* @type {!LanguagesModel|undefined}
*/
languages: {
type: Object,
notify: true,
},
/**
* @private {!Array<!{code: string, displayName: string,
* nativeDisplayName: string, enabled: boolean}>|
* undefined}
*/
availableLanguages_: Array,
},
observers: [
'enabledLanguagesChanged_(languages.enabledLanguages.*)',
],
/**
* Handler for removing a language.
* @param {!{model: !{item: !LanguageInfo}}} e
* @private
*/
onRemoveLanguageTap_: function(e) {
this.$.languages.disableLanguage(e.model.item.language.code);
},
/**
* Handler for adding a language.
* @param {!{model: {item: !chrome.languageSettingsPrivate.Language}}} e
* @private
*/
onAddLanguageTap_: function(e) {
this.$.languages.enableLanguage(e.model.item.code);
},
/**
* True if a language is not the current or prospective UI language.
* @param {string} languageCode
* @param {!Array<!LanguageInfo>} prospectiveUILanguage
* @return {boolean}
* @private
*/
canRemoveLanguage_: function(languageCode, prospectiveUILanguage) {
if (languageCode == navigator.language ||
languageCode == prospectiveUILanguage) {
return false;
}
assert(this.languages.enabledLanguages.length > 1);
return true;
},
/**
* Updates the available languages that are bound to the iron-list.
* @private
*/
enabledLanguagesChanged_: function() {
if (!this.availableLanguages_) {
var availableLanguages = [];
for (var i = 0; i < this.languages.supportedLanguages.length; i++) {
var language = this.languages.supportedLanguages[i];
availableLanguages.push({
code: language.code,
displayName: language.displayName,
nativeDisplayName: language.nativeDisplayName,
enabled: this.$.languages.isEnabled(language.code)
});
}
// Set the Polymer property after building the full array.
this.availableLanguages_ = availableLanguages;
} else {
// Update the available languages in place.
for (var i = 0; i < this.availableLanguages_.length; i++) {
this.set('availableLanguages_.' + i + '.enabled',
this.$.languages.isEnabled(this.availableLanguages_[i].code));
}
}
},
});