| OLD | NEW |
| 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-languages-page' is the settings page | 6 * @fileoverview 'settings-languages-page' is the settings page |
| 7 * for language and input method settings. | 7 * for language and input method settings. |
| 8 */ | 8 */ |
| 9 cr.exportPath('settings'); | 9 cr.exportPath('settings'); |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 * @type {!LanguagesModel|undefined} | 35 * @type {!LanguagesModel|undefined} |
| 36 */ | 36 */ |
| 37 languages: { | 37 languages: { |
| 38 type: Object, | 38 type: Object, |
| 39 notify: true, | 39 notify: true, |
| 40 }, | 40 }, |
| 41 | 41 |
| 42 /** @type {!LanguageHelper} */ | 42 /** @type {!LanguageHelper} */ |
| 43 languageHelper: Object, | 43 languageHelper: Object, |
| 44 | 44 |
| 45 // <if expr="not is_macosx"> | 45 // <if expr="not is_macosx"> |
| 46 /** @private */ | 46 /** @private */ |
| 47 spellCheckSecondaryText_: { | 47 spellCheckSecondaryText_: { |
| 48 type: String, | 48 type: String, |
| 49 value: '', | 49 value: '', |
| 50 computed: 'getSpellCheckSecondaryText_(languages.enabled.*)', | 50 computed: 'getSpellCheckSecondaryText_(languages.enabled.*)', |
| 51 }, | 51 }, |
| 52 // </if> | 52 // </if> |
| 53 | 53 |
| 54 /** | 54 /** |
| 55 * The language to display the details for. | 55 * The language to display the details for. |
| 56 * @type {!LanguageState|undefined} | 56 * @type {!LanguageState|undefined} |
| 57 * @private | 57 * @private |
| 58 */ | 58 */ |
| 59 detailLanguage_: Object, | 59 detailLanguage_: Object, |
| 60 | 60 |
| 61 /** @private */ | 61 /** @private */ |
| 62 showAddLanguagesDialog_: Boolean, | 62 showAddLanguagesDialog_: Boolean, |
| 63 | 63 |
| 64 /** @private {!Map<string, string>} */ | 64 /** @private {!Map<string, string>} */ |
| 65 focusConfig_: { | 65 focusConfig_: { |
| 66 type: Object, | 66 type: Object, |
| 67 value: function() { | 67 value: function() { |
| 68 var map = new Map(); | 68 var map = new Map(); |
| 69 // <if expr="not is_macosx"> | 69 // <if expr="not is_macosx"> |
| 70 map.set( | 70 map.set( |
| 71 settings.Route.EDIT_DICTIONARY.path, | 71 settings.Route.EDIT_DICTIONARY.path, |
| 72 '#spellCheckCollapse .subpage-arrow'); | 72 '#spellCheckCollapse .subpage-arrow'); |
| 73 // </if> | 73 // </if> |
| 74 // <if expr="chromeos"> | 74 // <if expr="chromeos"> |
| 75 map.set( | 75 map.set( |
| 76 settings.Route.INPUT_METHODS.path, | 76 settings.Route.INPUT_METHODS.path, |
| 77 '#inputMethodsCollapse .subpage-arrow'); | 77 '#inputMethodsCollapse .subpage-arrow'); |
| 78 // </if> | 78 // </if> |
| 79 return map; | 79 return map; |
| 80 }, | 80 }, |
| 81 }, | 81 }, |
| 82 }, | 82 }, |
| 83 | 83 |
| 84 /** | 84 /** |
| 85 * Stamps and opens the Add Languages dialog, registering a listener to | 85 * Stamps and opens the Add Languages dialog, registering a listener to |
| 86 * disable the dialog's dom-if again on close. | 86 * disable the dialog's dom-if again on close. |
| 87 * @param {!Event} e | 87 * @param {!Event} e |
| 88 * @private | 88 * @private |
| (...skipping 27 matching lines...) Expand all Loading... |
| 116 /** | 116 /** |
| 117 * @param {!LanguageState} language | 117 * @param {!LanguageState} language |
| 118 * @return {boolean} True if the "Move to top" option for |language| should be | 118 * @return {boolean} True if the "Move to top" option for |language| should be |
| 119 * visible. | 119 * visible. |
| 120 * @private | 120 * @private |
| 121 */ | 121 */ |
| 122 showMoveUp_: function(language) { | 122 showMoveUp_: function(language) { |
| 123 // "Move up" is a no-op for the top language, and redundant with | 123 // "Move up" is a no-op for the top language, and redundant with |
| 124 // "Move to top" for the 2nd language. | 124 // "Move to top" for the 2nd language. |
| 125 return !this.isNthLanguage_(0, language) && | 125 return !this.isNthLanguage_(0, language) && |
| 126 !this.isNthLanguage_(1, language); | 126 !this.isNthLanguage_(1, language); |
| 127 }, | 127 }, |
| 128 | 128 |
| 129 /** | 129 /** |
| 130 * @param {!LanguageState} language | 130 * @param {!LanguageState} language |
| 131 * @return {boolean} True if the "Move down" option for |language| should be | 131 * @return {boolean} True if the "Move down" option for |language| should be |
| 132 * visible. | 132 * visible. |
| 133 * @private | 133 * @private |
| 134 */ | 134 */ |
| 135 showMoveDown_: function(language) { | 135 showMoveDown_: function(language) { |
| 136 return !this.isNthLanguage_(this.languages.enabled.length - 1, language); | 136 return !this.isNthLanguage_(this.languages.enabled.length - 1, language); |
| 137 }, | 137 }, |
| 138 | 138 |
| 139 /** | 139 /** |
| 140 * @param {!Object} change Polymer change object for languages.enabled.*. | 140 * @param {!Object} change Polymer change object for languages.enabled.*. |
| 141 * @return {boolean} True if there are less than 2 languages. | 141 * @return {boolean} True if there are less than 2 languages. |
| 142 */ | 142 */ |
| 143 isHelpTextHidden_: function(change) { | 143 isHelpTextHidden_: function(change) { |
| 144 return this.languages.enabled.length <= 1; | 144 return this.languages.enabled.length <= 1; |
| 145 }, | 145 }, |
| 146 | 146 |
| 147 // <if expr="chromeos"> | 147 // <if expr="chromeos"> |
| 148 /** | 148 /** |
| 149 * Applies Chrome OS session tweaks to the menu. | 149 * Applies Chrome OS session tweaks to the menu. |
| 150 * @param {!CrActionMenuElement} menu | 150 * @param {!CrActionMenuElement} menu |
| 151 * @private | 151 * @private |
| 152 */ | 152 */ |
| 153 tweakMenuForCrOS_: function(menu) { | 153 tweakMenuForCrOS_: function(menu) { |
| 154 // In a CrOS multi-user session, the primary user controls the UI language. | 154 // In a CrOS multi-user session, the primary user controls the UI language. |
| 155 // TODO(michaelpg): The language selection should not be hidden, but should | 155 // TODO(michaelpg): The language selection should not be hidden, but should |
| 156 // show a policy indicator. crbug.com/648498 | 156 // show a policy indicator. crbug.com/648498 |
| 157 if (this.isSecondaryUser_()) | 157 if (this.isSecondaryUser_()) |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 | 195 |
| 196 /** | 196 /** |
| 197 * Opens the input method extension's options page in a new tab (or focuses | 197 * Opens the input method extension's options page in a new tab (or focuses |
| 198 * an existing instance of the IME's options). | 198 * an existing instance of the IME's options). |
| 199 * @param {!{model: !{item: chrome.languageSettingsPrivate.InputMethod}}} e | 199 * @param {!{model: !{item: chrome.languageSettingsPrivate.InputMethod}}} e |
| 200 * @private | 200 * @private |
| 201 */ | 201 */ |
| 202 onInputMethodOptionsTap_: function(e) { | 202 onInputMethodOptionsTap_: function(e) { |
| 203 this.languageHelper.openInputMethodOptions(e.model.item.id); | 203 this.languageHelper.openInputMethodOptions(e.model.item.id); |
| 204 }, | 204 }, |
| 205 // </if> | 205 // </if> |
| 206 | 206 |
| 207 // <if expr="chromeos or is_win"> | 207 // <if expr="chromeos or is_win"> |
| 208 /** | 208 /** |
| 209 * @return {boolean} True for a secondary user in a multi-profile session. | 209 * @return {boolean} True for a secondary user in a multi-profile session. |
| 210 * @private | 210 * @private |
| 211 */ | 211 */ |
| 212 isSecondaryUser_: function() { | 212 isSecondaryUser_: function() { |
| 213 return cr.isChromeOS && loadTimeData.getBoolean('isSecondaryUser'); | 213 return cr.isChromeOS && loadTimeData.getBoolean('isSecondaryUser'); |
| 214 }, | 214 }, |
| 215 | 215 |
| 216 /** | 216 /** |
| 217 * @param {string} languageCode The language code identifying a language. | 217 * @param {string} languageCode The language code identifying a language. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 */ | 257 */ |
| 258 onUILanguageChange_: function(e) { | 258 onUILanguageChange_: function(e) { |
| 259 // We don't support unchecking this checkbox. TODO(michaelpg): Ask for a | 259 // We don't support unchecking this checkbox. TODO(michaelpg): Ask for a |
| 260 // simpler widget. | 260 // simpler widget. |
| 261 assert(e.target.checked); | 261 assert(e.target.checked); |
| 262 this.languageHelper.setProspectiveUILanguage( | 262 this.languageHelper.setProspectiveUILanguage( |
| 263 this.detailLanguage_.language.code); | 263 this.detailLanguage_.language.code); |
| 264 | 264 |
| 265 this.closeMenuSoon_(); | 265 this.closeMenuSoon_(); |
| 266 }, | 266 }, |
| 267 // </if> | 267 // </if> |
| 268 | 268 |
| 269 /** | 269 /** |
| 270 * @param {!chrome.languageSettingsPrivate.Language} language | 270 * @param {!chrome.languageSettingsPrivate.Language} language |
| 271 * @param {string} targetLanguageCode The default translate target language. | 271 * @param {string} targetLanguageCode The default translate target language. |
| 272 * @return {boolean} True if the translate checkbox should be disabled. | 272 * @return {boolean} True if the translate checkbox should be disabled. |
| 273 * @private | 273 * @private |
| 274 */ | 274 */ |
| 275 disableTranslateCheckbox_: function(language, targetLanguageCode) { | 275 disableTranslateCheckbox_: function(language, targetLanguageCode) { |
| 276 if (!language.supportsTranslate) | 276 if (!language.supportsTranslate) |
| 277 return true; | 277 return true; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 306 if (translateEnabled || cr.isChromeOS || cr.isWindows) | 306 if (translateEnabled || cr.isChromeOS || cr.isWindows) |
| 307 return 'complex'; | 307 return 'complex'; |
| 308 return ''; | 308 return ''; |
| 309 }, | 309 }, |
| 310 | 310 |
| 311 /** | 311 /** |
| 312 * Moves the language to the top of the list. | 312 * Moves the language to the top of the list. |
| 313 * @private | 313 * @private |
| 314 */ | 314 */ |
| 315 onMoveToTopTap_: function() { | 315 onMoveToTopTap_: function() { |
| 316 /** @type {!CrActionMenuElement} */(this.$.menu.get()).close(); | 316 /** @type {!CrActionMenuElement} */ (this.$.menu.get()).close(); |
| 317 this.languageHelper.moveLanguageToFront(this.detailLanguage_.language.code); | 317 this.languageHelper.moveLanguageToFront(this.detailLanguage_.language.code); |
| 318 }, | 318 }, |
| 319 | 319 |
| 320 /** | 320 /** |
| 321 * Moves the language up in the list. | 321 * Moves the language up in the list. |
| 322 * @private | 322 * @private |
| 323 */ | 323 */ |
| 324 onMoveUpTap_: function() { | 324 onMoveUpTap_: function() { |
| 325 /** @type {!CrActionMenuElement} */(this.$.menu.get()).close(); | 325 /** @type {!CrActionMenuElement} */ (this.$.menu.get()).close(); |
| 326 this.languageHelper.moveLanguage(this.detailLanguage_.language.code, -1); | 326 this.languageHelper.moveLanguage(this.detailLanguage_.language.code, -1); |
| 327 }, | 327 }, |
| 328 | 328 |
| 329 /** | 329 /** |
| 330 * Moves the language down in the list. | 330 * Moves the language down in the list. |
| 331 * @private | 331 * @private |
| 332 */ | 332 */ |
| 333 onMoveDownTap_: function() { | 333 onMoveDownTap_: function() { |
| 334 /** @type {!CrActionMenuElement} */(this.$.menu.get()).close(); | 334 /** @type {!CrActionMenuElement} */ (this.$.menu.get()).close(); |
| 335 this.languageHelper.moveLanguage(this.detailLanguage_.language.code, 1); | 335 this.languageHelper.moveLanguage(this.detailLanguage_.language.code, 1); |
| 336 }, | 336 }, |
| 337 | 337 |
| 338 /** | 338 /** |
| 339 * Disables the language. | 339 * Disables the language. |
| 340 * @private | 340 * @private |
| 341 */ | 341 */ |
| 342 onRemoveLanguageTap_: function() { | 342 onRemoveLanguageTap_: function() { |
| 343 /** @type {!CrActionMenuElement} */(this.$.menu.get()).close(); | 343 /** @type {!CrActionMenuElement} */ (this.$.menu.get()).close(); |
| 344 this.languageHelper.disableLanguage(this.detailLanguage_.language.code); | 344 this.languageHelper.disableLanguage(this.detailLanguage_.language.code); |
| 345 }, | 345 }, |
| 346 | 346 |
| 347 // <if expr="chromeos or is_win"> | 347 // <if expr="chromeos or is_win"> |
| 348 /** | 348 /** |
| 349 * Checks whether the prospective UI language (the pref that indicates what | 349 * Checks whether the prospective UI language (the pref that indicates what |
| 350 * language to use in Chrome) matches the current language. This pref is used | 350 * language to use in Chrome) matches the current language. This pref is used |
| 351 * only on Chrome OS and Windows; we don't control the UI language elsewhere. | 351 * only on Chrome OS and Windows; we don't control the UI language elsewhere. |
| 352 * @param {string} languageCode The language code identifying a language. | 352 * @param {string} languageCode The language code identifying a language. |
| 353 * @param {string} prospectiveUILanguage The prospective UI language. | 353 * @param {string} prospectiveUILanguage The prospective UI language. |
| 354 * @return {boolean} True if the given language matches the prospective UI | 354 * @return {boolean} True if the given language matches the prospective UI |
| 355 * pref (which may be different from the actual UI language). | 355 * pref (which may be different from the actual UI language). |
| 356 * @private | 356 * @private |
| 357 */ | 357 */ |
| 358 isProspectiveUILanguage_: function(languageCode, prospectiveUILanguage) { | 358 isProspectiveUILanguage_: function(languageCode, prospectiveUILanguage) { |
| 359 return languageCode == prospectiveUILanguage; | 359 return languageCode == prospectiveUILanguage; |
| 360 }, | 360 }, |
| 361 | 361 |
| 362 /** | 362 /** |
| 363 * @param {string} prospectiveUILanguage | 363 * @param {string} prospectiveUILanguage |
| 364 * @return {string} | 364 * @return {string} |
| 365 * @private | 365 * @private |
| 366 */ | 366 */ |
| 367 getProspectiveUILanguageName_: function(prospectiveUILanguage) { | 367 getProspectiveUILanguageName_: function(prospectiveUILanguage) { |
| 368 return this.languageHelper.getLanguage(prospectiveUILanguage).displayName; | 368 return this.languageHelper.getLanguage(prospectiveUILanguage).displayName; |
| 369 }, | 369 }, |
| 370 // </if> | 370 // </if> |
| 371 | 371 |
| 372 /** | 372 /** |
| 373 * @return {string} | 373 * @return {string} |
| 374 * @private | 374 * @private |
| 375 */ | 375 */ |
| 376 getLanguageListTwoLine_: function() { | 376 getLanguageListTwoLine_: function() { |
| 377 return cr.isChromeOS || cr.isWindows ? 'two-line' : ''; | 377 return cr.isChromeOS || cr.isWindows ? 'two-line' : ''; |
| 378 }, | 378 }, |
| 379 | 379 |
| 380 // <if expr="not is_macosx"> | 380 // <if expr="not is_macosx"> |
| 381 /** | 381 /** |
| 382 * Returns the secondary text for the spell check subsection based on the | 382 * Returns the secondary text for the spell check subsection based on the |
| 383 * enabled spell check languages, listing at most 2 languages. | 383 * enabled spell check languages, listing at most 2 languages. |
| 384 * @return {string} | 384 * @return {string} |
| 385 * @private | 385 * @private |
| 386 */ | 386 */ |
| 387 getSpellCheckSecondaryText_: function() { | 387 getSpellCheckSecondaryText_: function() { |
| 388 var enabledSpellCheckLanguages = | 388 var enabledSpellCheckLanguages = |
| 389 this.languages.enabled.filter(function(languageState) { | 389 this.languages.enabled.filter(function(languageState) { |
| 390 return languageState.spellCheckEnabled && | 390 return languageState.spellCheckEnabled && |
| 391 languageState.language.supportsSpellcheck; | 391 languageState.language.supportsSpellcheck; |
| 392 }); | 392 }); |
| 393 switch (enabledSpellCheckLanguages.length) { | 393 switch (enabledSpellCheckLanguages.length) { |
| 394 case 0: | 394 case 0: |
| 395 return ''; | 395 return ''; |
| 396 case 1: | 396 case 1: |
| 397 return enabledSpellCheckLanguages[0].language.displayName; | 397 return enabledSpellCheckLanguages[0].language.displayName; |
| 398 case 2: | 398 case 2: |
| 399 return loadTimeData.getStringF( | 399 return loadTimeData.getStringF( |
| 400 'spellCheckSummaryTwoLanguages', | 400 'spellCheckSummaryTwoLanguages', |
| 401 enabledSpellCheckLanguages[0].language.displayName, | 401 enabledSpellCheckLanguages[0].language.displayName, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 426 | 426 |
| 427 /** | 427 /** |
| 428 * Handler for enabling or disabling spell check. | 428 * Handler for enabling or disabling spell check. |
| 429 * @param {!{target: Element, model: !{item: !LanguageState}}} e | 429 * @param {!{target: Element, model: !{item: !LanguageState}}} e |
| 430 */ | 430 */ |
| 431 onSpellCheckChange_: function(e) { | 431 onSpellCheckChange_: function(e) { |
| 432 var item = e.model.item; | 432 var item = e.model.item; |
| 433 if (!item.language.supportsSpellcheck) | 433 if (!item.language.supportsSpellcheck) |
| 434 return; | 434 return; |
| 435 | 435 |
| 436 this.languageHelper.toggleSpellCheck(item.language.code, | 436 this.languageHelper.toggleSpellCheck( |
| 437 !item.spellCheckEnabled); | 437 item.language.code, !item.spellCheckEnabled); |
| 438 }, | 438 }, |
| 439 | 439 |
| 440 /** | 440 /** |
| 441 * @return {string} | 441 * @return {string} |
| 442 * @private | 442 * @private |
| 443 */ | 443 */ |
| 444 getSpellCheckListTwoLine_: function() { | 444 getSpellCheckListTwoLine_: function() { |
| 445 return this.spellCheckSecondaryText_.length ? 'two-line' : ''; | 445 return this.spellCheckSecondaryText_.length ? 'two-line' : ''; |
| 446 }, | 446 }, |
| 447 // </if> | 447 // </if> |
| 448 | 448 |
| 449 /** | 449 /** |
| 450 * Returns either the "selected" class, if the language matches the | 450 * Returns either the "selected" class, if the language matches the |
| 451 * prospective UI language, or an empty string. Languages can only be | 451 * prospective UI language, or an empty string. Languages can only be |
| 452 * selected on Chrome OS and Windows. | 452 * selected on Chrome OS and Windows. |
| 453 * @param {string} languageCode The language code identifying a language. | 453 * @param {string} languageCode The language code identifying a language. |
| 454 * @param {string} prospectiveUILanguage The prospective UI language. | 454 * @param {string} prospectiveUILanguage The prospective UI language. |
| 455 * @return {string} The class name for the language item. | 455 * @return {string} The class name for the language item. |
| 456 * @private | 456 * @private |
| 457 */ | 457 */ |
| 458 getLanguageItemClass_: function(languageCode, prospectiveUILanguage) { | 458 getLanguageItemClass_: function(languageCode, prospectiveUILanguage) { |
| 459 if ((cr.isChromeOS || cr.isWindows) && | 459 if ((cr.isChromeOS || cr.isWindows) && |
| 460 languageCode == prospectiveUILanguage) { | 460 languageCode == prospectiveUILanguage) { |
| 461 return 'selected'; | 461 return 'selected'; |
| 462 } | 462 } |
| 463 return ''; | 463 return ''; |
| 464 }, | 464 }, |
| 465 | 465 |
| 466 // <if expr="chromeos"> | 466 // <if expr="chromeos"> |
| 467 /** | 467 /** |
| 468 * @param {string} id The input method ID. | 468 * @param {string} id The input method ID. |
| 469 * @param {string} currentId The ID of the currently enabled input method. | 469 * @param {string} currentId The ID of the currently enabled input method. |
| 470 * @return {boolean} True if the IDs match. | 470 * @return {boolean} True if the IDs match. |
| 471 * @private | 471 * @private |
| 472 */ | 472 */ |
| 473 isCurrentInputMethod_: function(id, currentId) { | 473 isCurrentInputMethod_: function(id, currentId) { |
| 474 assert(cr.isChromeOS); | 474 assert(cr.isChromeOS); |
| 475 return id == currentId; | 475 return id == currentId; |
| 476 }, | 476 }, |
| 477 | 477 |
| 478 /** | 478 /** |
| 479 * @param {string} id The input method ID. | 479 * @param {string} id The input method ID. |
| 480 * @param {string} currentId The ID of the currently enabled input method. | 480 * @param {string} currentId The ID of the currently enabled input method. |
| 481 * @return {string} The class for the input method item. | 481 * @return {string} The class for the input method item. |
| 482 * @private | 482 * @private |
| 483 */ | 483 */ |
| 484 getInputMethodItemClass_: function(id, currentId) { | 484 getInputMethodItemClass_: function(id, currentId) { |
| 485 assert(cr.isChromeOS); | 485 assert(cr.isChromeOS); |
| 486 return this.isCurrentInputMethod_(id, currentId) ? 'selected' : ''; | 486 return this.isCurrentInputMethod_(id, currentId) ? 'selected' : ''; |
| 487 }, | 487 }, |
| 488 | 488 |
| 489 getInputMethodName_: function(id) { | 489 getInputMethodName_: function(id) { |
| 490 assert(cr.isChromeOS); | 490 assert(cr.isChromeOS); |
| 491 var inputMethod = this.languages.inputMethods.enabled.find( | 491 var inputMethod = |
| 492 function(inputMethod) { | 492 this.languages.inputMethods.enabled.find(function(inputMethod) { |
| 493 return inputMethod.id == id; | 493 return inputMethod.id == id; |
| 494 }); | 494 }); |
| 495 return inputMethod ? inputMethod.displayName : ''; | 495 return inputMethod ? inputMethod.displayName : ''; |
| 496 }, | 496 }, |
| 497 // </if> | 497 // </if> |
| 498 | 498 |
| 499 /** | 499 /** |
| 500 * @param {!Event} e | 500 * @param {!Event} e |
| 501 * @private | 501 * @private |
| 502 */ | 502 */ |
| 503 onDotsTap_: function(e) { | 503 onDotsTap_: function(e) { |
| 504 // Set a copy of the LanguageState object since it is not data-bound to the | 504 // Set a copy of the LanguageState object since it is not data-bound to the |
| 505 // languages model directly. | 505 // languages model directly. |
| 506 this.detailLanguage_ = /** @type {!LanguageState} */(Object.assign( | 506 this.detailLanguage_ = /** @type {!LanguageState} */ (Object.assign( |
| 507 {}, | 507 {}, |
| 508 /** @type {!{model: !{item: !LanguageState}}} */(e).model.item)); | 508 /** @type {!{model: !{item: !LanguageState}}} */ (e).model.item)); |
| 509 | 509 |
| 510 // Ensure the template has been stamped. | 510 // Ensure the template has been stamped. |
| 511 var menu = /** @type {?CrActionMenuElement} */( | 511 var menu = /** @type {?CrActionMenuElement} */ (this.$.menu.getIfExists()); |
| 512 this.$.menu.getIfExists()); | |
| 513 if (!menu) { | 512 if (!menu) { |
| 514 menu = /** @type {!CrActionMenuElement} */(this.$.menu.get()); | 513 menu = /** @type {!CrActionMenuElement} */ (this.$.menu.get()); |
| 515 // <if expr="chromeos"> | 514 // <if expr="chromeos"> |
| 516 this.tweakMenuForCrOS_(menu); | 515 this.tweakMenuForCrOS_(menu); |
| 517 // </if> | 516 // </if> |
| 518 } | 517 } |
| 519 | 518 |
| 520 menu.showAt(/** @type {!Element} */ (e.target)); | 519 menu.showAt(/** @type {!Element} */ (e.target)); |
| 521 }, | 520 }, |
| 522 | 521 |
| 523 /** | 522 /** |
| 524 * Closes the shared action menu after a short delay, so when a checkbox is | 523 * Closes the shared action menu after a short delay, so when a checkbox is |
| 525 * tapped it can be seen to change state before disappearing. | 524 * tapped it can be seen to change state before disappearing. |
| 526 * @private | 525 * @private |
| 527 */ | 526 */ |
| 528 closeMenuSoon_: function() { | 527 closeMenuSoon_: function() { |
| 529 var menu = /** @type {!CrActionMenuElement} */(this.$.menu.get()); | 528 var menu = /** @type {!CrActionMenuElement} */ (this.$.menu.get()); |
| 530 setTimeout(function() { | 529 setTimeout(function() { |
| 531 if (menu.open) | 530 if (menu.open) |
| 532 menu.close(); | 531 menu.close(); |
| 533 }, settings.kMenuCloseDelay); | 532 }, settings.kMenuCloseDelay); |
| 534 }, | 533 }, |
| 535 | 534 |
| 536 // <if expr="chromeos or is_win"> | 535 // <if expr="chromeos or is_win"> |
| 537 /** | 536 /** |
| 538 * Handler for the restart button. | 537 * Handler for the restart button. |
| 539 * @private | 538 * @private |
| 540 */ | 539 */ |
| 541 onRestartTap_: function() { | 540 onRestartTap_: function() { |
| 542 // <if expr="chromeos"> | 541 // <if expr="chromeos"> |
| 543 settings.LifetimeBrowserProxyImpl.getInstance().signOutAndRestart(); | 542 settings.LifetimeBrowserProxyImpl.getInstance().signOutAndRestart(); |
| 544 // </if> | 543 // </if> |
| 545 // <if expr="is_win"> | 544 // <if expr="is_win"> |
| 546 settings.LifetimeBrowserProxyImpl.getInstance().restart(); | 545 settings.LifetimeBrowserProxyImpl.getInstance().restart(); |
| 547 // </if> | 546 // </if> |
| 548 }, | 547 }, |
| 549 // </if> | 548 // </if> |
| 550 | 549 |
| 551 /** | 550 /** |
| 552 * Toggles the expand button within the element being listened to. | 551 * Toggles the expand button within the element being listened to. |
| 553 * @param {!Event} e | 552 * @param {!Event} e |
| 554 * @private | 553 * @private |
| 555 */ | 554 */ |
| 556 toggleExpandButton_: function(e) { | 555 toggleExpandButton_: function(e) { |
| 557 // The expand button handles toggling itself. | 556 // The expand button handles toggling itself. |
| 558 var expandButtonTag = 'CR-EXPAND-BUTTON'; | 557 var expandButtonTag = 'CR-EXPAND-BUTTON'; |
| 559 if (e.target.tagName == expandButtonTag) | 558 if (e.target.tagName == expandButtonTag) |
| 560 return; | 559 return; |
| 561 | 560 |
| 562 /** @type {!CrExpandButtonElement} */ | 561 /** @type {!CrExpandButtonElement} */ |
| 563 var expandButton = e.currentTarget.querySelector(expandButtonTag); | 562 var expandButton = e.currentTarget.querySelector(expandButtonTag); |
| 564 assert(expandButton); | 563 assert(expandButton); |
| 565 expandButton.expanded = !expandButton.expanded; | 564 expandButton.expanded = !expandButton.expanded; |
| 566 }, | 565 }, |
| 567 }); | 566 }); |
| 568 })(); | 567 })(); |
| OLD | NEW |