blob: b709740ff7e83b3795da2e4520f8419fff6694bf [file] [log] [blame]
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/cr_checkbox/cr_checkbox.html">
<link rel="import" href="chrome://resources/html/action_link.html">
<link rel="import" href="chrome://resources/html/action_link_css.html">
<link rel="import" href="chrome://resources/html/assert.html">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/html/cr/ui/focus_without_ink.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-icons/iron-icons.html">
<link rel="import" href="chrome://resources/polymer/v1_0/neon-animation/neon-animatable.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
<link rel="import" href="chrome://resources/cr_elements/cr_action_menu/cr_action_menu.html">
<link rel="import" href="chrome://resources/cr_elements/cr_expand_button/cr_expand_button.html">
<link rel="import" href="chrome://resources/cr_elements/cr_lazy_render/cr_lazy_render.html">
<link rel="import" href="chrome://resources/cr_elements/cr_toggle/cr_toggle.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html">
<link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="add_languages_dialog.html">
<link rel="import" href="languages.html">
<link rel="import" href="../controls/settings_toggle_button.html">
<link rel="import" href="../lifetime_browser_proxy.html">
<link rel="import" href="../route.html">
<link rel="import" href="../settings_page/settings_animated_pages.html">
<link rel="import" href="../settings_page/settings_subpage.html">
<link rel="import" href="../settings_shared_css.html">
<if expr="not is_macosx">
<link rel="import" href="edit_dictionary_page.html">
</if>
<if expr="chromeos">
<link rel="import" href="manage_input_methods_page.html">
</if>
<dom-module id="settings-languages-page">
<template>
<style include="settings-shared action-link">
#languagesCollapse .list-item.selected {
min-height: var(--settings-row-two-line-min-height);
}
.explain-selected {
color: var(--google-green-700);
font-weight: initial;
margin-top: 4px;
}
cr-action-menu.complex .dropdown-item {
min-height: 36px;
}
cr-action-menu:not(.complex) hr {
display: none;
}
cr-action-menu.complex hr {
/* Override user-agent border and margin. */
border: none;
/* TODO(michaelpg): Update to whatever variable is used for the darker,
* full-width separators: crbug.com/649547. */
border-top: var(--settings-separator-line);
margin: 6px 0 0 0;
}
cr-checkbox.dropdown-item {
--cr-action-menu-disabled-item-opacity: 0.38;
-webkit-margin-start: 0;
}
.icon-external {
/* The negative margin messes up the outline border. These are in an
indented list so this looks fine until moved: crbug.com/708286. */
-webkit-margin-end: 0;
}
#uiLanguageItem:focus,
#offerTranslations:focus {
background-color: transparent;
}
#uiLanguageItem span {
line-height: 20px;
}
#uiLanguageItem cr-policy-indicator {
float: right;
margin-left: 20px;
}
.name-with-error-list {
padding: 14px 0;
}
.name-with-error-list div {
color: var(--google-red-500);
margin-top: 8px;
}
.error-icon {
@apply --cr-icon-height-width;
--iron-icon-fill-color: var(--google-red-700);
-webkit-margin-end: 8px;
}
.name-with-error-list[disabled] {
pointer-events: none;
}
</style>
<settings-languages languages="{{languages}}" prefs="{{prefs}}"
language-helper="{{languageHelper}}">
</settings-languages>
<settings-animated-pages id="pages" section="languages"
focus-config="[[focusConfig_]]">
<neon-animatable route-path="default">
<div class$="settings-box first [[getLanguageListTwoLine_()]]"
actionable on-click="toggleExpandButton_">
<div class="start">
<div>$i18n{languagesListTitle}</div>
<if expr="chromeos or is_win">
<div class="secondary">
[[getProspectiveUILanguageName_(languages.prospectiveUILanguage)]]
</div>
</if>
</div>
<cr-expand-button expanded="{{languagesOpened_}}"
alt="$i18n{languagesExpandA11yLabel}">
</cr-expand-button>
</div>
<iron-collapse id="languagesCollapse" opened="[[languagesOpened_]]">
<span class="settings-box first"
hidden="[[isHelpTextHidden_(languages.enabled.*)]]">
<span>$i18n{orderLanguagesInstructions}</span>
<if expr="chromeos">
<a href="$i18n{languagesLearnMoreURL}" target="_blank">
$i18n{learnMore}
</a>
</if>
</span>
<div class="list-frame vertical-list">
<template is="dom-repeat" items="[[languages.enabled]]">
<div class$="list-item [[getLanguageItemClass_(
item.language.code, language.prospectiveUILanguage)]]">
<div class="start">
<div title="[[item.language.nativeDisplayName]]">
[[item.language.displayName]]
</div>
<if expr="chromeos or is_win">
<div class="explain-selected"
hidden="[[!isProspectiveUILanguage_(
item.language.code,
languages.prospectiveUILanguage)]]">
$i18n{isDisplayedInThisLanguage}
</div>
</if>
</div>
<if expr="chromeos or is_win">
<template is="dom-if" if="[[isRestartRequired_(
item.language.code, languages.prospectiveUILanguage)]]">
<paper-button on-click="onRestartTap_">
$i18n{restart}
</paper-button>
</template>
</if>
<paper-icon-button-light class="icon-more-vert">
<button title="$i18n{moreActions}"
id="more-[[item.language.code]]" on-click="onDotsTap_">
</button>
</paper-icon-button-light>
</div>
</template>
<div class="list-item">
<a is="action-link" class="list-button" id="addLanguages"
on-click="onAddLanguagesTap_">
$i18n{addLanguages}
</a>
</div>
</div>
<settings-toggle-button id="offerTranslateOtherLanguages"
class="first" pref="{{prefs.translate.enabled}}"
label="$i18n{offerToEnableTranslate}">
</settings-toggle-button>
</iron-collapse>
<if expr="chromeos">
<div id="manageInputMethodsSubpageTrigger"
class="settings-box two-line" actionable
on-click="toggleExpandButton_">
<div class="start">
<div>$i18n{inputMethodsListTitle}</div>
<div class="secondary">
[[getInputMethodName_(languages.inputMethods.currentId)]]
</div>
</div>
<cr-expand-button expanded="{{inputMethodsOpened_}}"
alt="$i18n{inputMethodsExpandA11yLabel}">
</cr-expand-button>
</div>
<iron-collapse id="inputMethodsCollapse"
opened="[[inputMethodsOpened_]]">
<div class="list-frame vertical-list">
<template is="dom-repeat"
items="[[languages.inputMethods.enabled]]">
<div class$="list-item [[getInputMethodItemClass_(
item.id, languages.inputMethods.currentId)]]"
on-click="onInputMethodTap_" on-keypress="onInputMethodTap_"
actionable tabindex="0">
<div class="start">
<div>[[item.displayName]]</div>
<div class="explain-selected"
hidden="[[!isCurrentInputMethod_(
item.id, languages.inputMethods.currentId)]]">
$i18n{inputMethodEnabled}
</div>
</div>
<paper-icon-button-light class="icon-external"
hidden="[[!item.hasOptionsPage]]">
<button on-click="onInputMethodOptionsTap_"></button>
</paper-icon-button-light>
</div>
</template>
<div class="list-item" on-click="onManageInputMethodsTap_"
actionable>
<div class="start" id="manageInputMethods">
$i18n{manageInputMethods}
</div>
<paper-icon-button-light class="subpage-arrow">
<button aria-label="$i18n{manageInputMethods}"
aria-describedby="customSpelling"></button>
</paper-icon-button-light>
</div>
</div>
<settings-toggle-button
pref="{{prefs.settings.language.ime_menu_activated}}"
label="$i18n{showImeMenu}">
</settings-toggle-button>
</iron-collapse>
</if>
<if expr="not is_macosx">
<div id="spellCheckSubpageTrigger"
class$="settings-box [[getSpellCheckListTwoLine_(
spellCheckSecondaryText_)]]"
actionable$="[[!spellCheckDisabled_]]"
on-click="toggleExpandButton_">
<div class="start">
<div>$i18n{spellCheckListTitle}</div>
<div class="secondary">[[spellCheckSecondaryText_]]</div>
</div>
<!-- |enable_spellchecking| may be set by policy, but if it's enabled,
we shouldn't display the policy indicator. -->
<template is="dom-if" if="[[spellCheckDisabled_]]" restamp>
<cr-policy-pref-indicator
pref="[[prefs.browser.enable_spellchecking]]">
</cr-policy-pref-indicator>
</template>
<template is="dom-if" if="[[!spellCheckDisabled_]]" restamp>
<cr-expand-button expanded="{{spellCheckOpened_}}"
alt="$i18n{spellCheckExpandA11yLabel}">
</cr-expand-button>
</template>
</div>
<iron-collapse id="spellCheckCollapse" opened="[[spellCheckOpened_]]">
<div class="list-frame vertical-list">
<template is="dom-repeat" items="[[spellCheckLanguages_]]">
<div class="list-item">
<div class="start name-with-error-list"
on-click="onSpellCheckNameClick_" actionable
disabled$="[[isSpellCheckNameClickDisabled_(item,
item.*)]]">
[[item.language.displayName]]
<div hidden="[[!errorsGreaterThan_(
item.downloadDictionaryFailureCount, 0)]]">
<iron-icon class="error-icon" icon="error">
</iron-icon>
$i18n{languagesDictionaryDownloadError}
</div>
<div hidden="[[!errorsGreaterThan_(
item.downloadDictionaryFailureCount, 1)]]">
$i18n{languagesDictionaryDownloadErrorHelp}
</div>
</div>
<paper-button on-click="onRetryDictionaryDownloadClick_"
hidden="[[!errorsGreaterThan_(
item.downloadDictionaryFailureCount, 0)]]">
$i18n{retry}
</paper-button>
<template is="dom-if" if="[[!item.isManaged]]">
<cr-toggle on-change="onSpellCheckChange_"
disabled="[[!item.language.supportsSpellcheck]]"
checked="[[item.spellCheckEnabled]]"
aria-label$="[[item.language.displayName]]"
hidden="[[errorsGreaterThan_(
item.downloadDictionaryFailureCount, 0)]]">
</cr-toggle>
</template>
<template is="dom-if" if="[[item.isManaged]]">
<cr-policy-pref-indicator
pref="[[prefs.spellcheck.forced_dictionaries]]"
hidden="[[errorsGreaterThan_(
item.downloadDictionaryFailureCount, 0)]]">
</cr-policy-pref-indicator>
</template>
</div>
</template>
<div class="list-item" on-click="onEditDictionaryTap_" actionable>
<div class="start" id="customSpelling">
$i18n{manageSpellCheck}
</div>
<paper-icon-button-light class="subpage-arrow">
<button aria-label="$i18n{manageSpellCheck}"
aria-describedby="customSpelling"></button>
</paper-icon-button-light>
</div>
</div>
</iron-collapse>
</if>
<cr-lazy-render id="menu">
<template>
<cr-action-menu
class$="[[getMenuClass_(prefs.translate.enabled.value)]]">
<if expr="chromeos or is_win">
<cr-checkbox id="uiLanguageItem" slot="item"
class="dropdown-item"
checked="[[isProspectiveUILanguage_(
detailLanguage_.language.code,
languages.prospectiveUILanguage)]]"
on-change="onUILanguageChange_"
disabled="[[disableUILanguageCheckbox_(
detailLanguage_, languages.prospectiveUILanguage)]]">
<span>$i18n{displayInThisLanguage}</span>
<cr-policy-indicator indicator-type="[[
getPolicyIndicatorStatus_(
detailLanguage_.language)]]">
</cr-policy-indicator>
</cr-checkbox>
</if>
<cr-checkbox id="offerTranslations" slot="item"
class="dropdown-item"
checked="[[detailLanguage_.translateEnabled]]"
on-change="onTranslateCheckboxChange_"
hidden="[[!prefs.translate.enabled.value]]"
disabled="[[disableTranslateCheckbox_(
detailLanguage_.language, languages.translateTarget)]]">
$i18n{offerToTranslateInThisLanguage}
</cr-checkbox>
<hr slot="item">
<button slot="item" class="dropdown-item" role="menuitem"
on-click="onMoveToTopTap_"
hidden="[[isNthLanguage_(
0, detailLanguage_, languages.enabled.*)]]">
$i18n{moveToTop}
</button>
<button slot="item" class="dropdown-item" role="menuitem"
on-click="onMoveUpTap_"
hidden="[[!showMoveUp_(detailLanguage_,
languages.enabled.*)]]">
$i18n{moveUp}
</button>
<button slot="item" class="dropdown-item" role="menuitem"
on-click="onMoveDownTap_"
hidden="[[!showMoveDown_(
detailLanguage_, languages.enabled.*)]]">
$i18n{moveDown}
</button>
<button slot="item" class="dropdown-item" role="menuitem"
on-click="onRemoveLanguageTap_"
hidden="[[!detailLanguage_.removable]]">
$i18n{removeLanguage}
</button>
</cr-action-menu>
</template>
</cr-lazy-render>
</neon-animatable>
<if expr="chromeos">
<template is="dom-if" route-path="/inputMethods">
<settings-subpage
associated-control="[[$$('#manageInputMethodsSubpageTrigger')]]"
page-title="$i18n{manageInputMethodsPageTitle}">
<settings-manage-input-methods-page languages="{{languages}}"
language-helper="[[languageHelper]]">
</settings-manage-input-methods-page>
</settings-subpage>
</template>
</if>
<if expr="not is_macosx">
<template is="dom-if" route-path="/editDictionary">
<settings-subpage
associated-control="[[$$('#spellCheckSubpageTrigger')]]"
page-title="$i18n{editDictionaryPageTitle}">
<settings-edit-dictionary-page></settings-edit-dictionary-page>
</settings-subpage>
</template>
</if>
</settings-animated-pages>
<template is="dom-if" if="[[showAddLanguagesDialog_]]" restamp>
<settings-add-languages-dialog languages="{{languages}}"
language-helper="[[languageHelper]]">
</settings-add-languages-dialog>
</template>
</template>
<script src="languages_page.js"></script>
</dom-module>