// 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-languages-page' is the settings page
* for language and input method settings.
*
* @group Chrome Settings Elements
* @element settings-languages-page
*/
(function() {
'use strict';
Polymer({
is: 'settings-languages-page',
properties: {
/**
* The current active route.
*/
currentRoute: {
type: Object,
notify: true,
},
/**
* Preferences state.
*/
prefs: {
type: Object,
notify: true,
},
/**
* Read-only reference to the languages model provided by the
* 'settings-languages' instance.
* @type {LanguagesModel|undefined}
*/
languages: {
type: Object,
notify: true,
},
},
/** @private {!LanguageHelper} */
languageHelper_: LanguageHelperImpl.getInstance(),
/**
* Handler for clicking a language on the main page, which selects the
* language as the prospective UI language on Chrome OS and Windows.
* @param {!{model: !{item: !LanguageInfo}}} e
*/
onLanguageTap_: function(e) {
// Only change the UI language on platforms that allow it.
if (!cr.isChromeOS && !cr.isWindows)
return;
// Taps on the paper-icon-button are handled in onShowLanguageDetailTap_.
if (e.target.tagName == 'PAPER-ICON-BUTTON')
return;
// Set the prospective UI language. This won't take effect until a restart.
if (e.model.item.language.supportsUI)
this.languageHelper_.setUILanguage(e.model.item.language.code);
},
/**
* Handler for enabling or disabling spell check.
* @param {!{target: Element, model: !{item: !LanguageInfo}}} e
*/
onSpellCheckChange_: function(e) {
this.languageHelper_.toggleSpellCheck(e.model.item.language.code,
e.target.checked);
},
/** @private */
onBackTap_: function() {
this.$.pages.back();
},
/**
* Opens the Manage Languages page.
* @private
*/
onManageLanguagesTap_: function() {
this.$.pages.setSubpageChain(['manage-languages']);
this.forceRenderList_('settings-manage-languages-page');
},
/**
* Opens the Language Detail page for the language.
* @param {!{model: !{item}}} e
* @private
*/
onShowLanguageDetailTap_: function(e) {
this.$.languageSelector.select(e.model.item);
this.$.pages.setSubpageChain(['language-detail']);
},
/**
* Opens the Custom Dictionary page.
* @private
*/
onEditDictionaryTap_: function() {
this.$.pages.setSubpageChain(['edit-dictionary']);
this.forceRenderList_('settings-edit-dictionary-page');
},
/**
* Checks whether the prospective UI language (the pref that indicates what
* language to use in Chrome) matches the current language. This pref is only
* on Chrome OS and Windows; we don't control the UI language elsewhere.
* @param {string} languageCode The language code identifying a language.
* @param {string} prospectiveUILanguage The prospective UI language.
* @return {boolean} True if the given language matches the prospective UI
* pref (which may be different from the actual UI language).
* @private
*/
isProspectiveUILanguage_: function(languageCode, prospectiveUILanguage) {
return languageCode == this.languageHelper_.getProspectiveUILanguage();
},
/**
* @param {string} id The input method ID.
* @param {string} currentId The ID of the currently enabled input method.
* @return {boolean} True if the IDs match.
* @private
*/
isCurrentInputMethod_: function(id, currentId) {
assert(cr.isChromeOS);
return id == currentId;
},
/**
* HACK(michaelpg): This is necessary to show the list when navigating to
* the sub-page. Remove this function when PolymerElements/neon-animation#60
* is fixed.
* @param {string} tagName Name of the element containing the .
*/
forceRenderList_: function(tagName) {
this.$$(tagName).$$('iron-list').fire('iron-resize');
},
});
})();