Home | History | Annotate | Download | only in options
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 cr.define('options', function() {
      6   /** @const */ var DictionaryWordsList =
      7       options.dictionary_words.DictionaryWordsList;
      8   /** @const */ var Page = cr.ui.pageManager.Page;
      9   /** @const */ var PageManager = cr.ui.pageManager.PageManager;
     10 
     11   /**
     12    * Adding and removing words in custom spelling dictionary.
     13    * @constructor
     14    * @extends {cr.ui.pageManager.Page}
     15    */
     16   function EditDictionaryOverlay() {
     17     Page.call(this, 'editDictionary',
     18               loadTimeData.getString('languageDictionaryOverlayPage'),
     19               'language-dictionary-overlay-page');
     20   }
     21 
     22   cr.addSingletonGetter(EditDictionaryOverlay);
     23 
     24   EditDictionaryOverlay.prototype = {
     25     __proto__: Page.prototype,
     26 
     27     /**
     28      * A list of words in the dictionary.
     29      * @type {options.dictionary_words.DictionaryWordsList}
     30      * @private
     31      */
     32     wordList_: null,
     33 
     34     /**
     35      * The input field for searching for words in the dictionary.
     36      * @type {HTMLElement}
     37      * @private
     38      */
     39     searchField_: null,
     40 
     41     /**
     42      * The paragraph of text that indicates that search returned no results.
     43      * @type {HTMLElement}
     44      * @private
     45      */
     46     noMatchesLabel_: null,
     47 
     48     /** @override */
     49     initializePage: function() {
     50       Page.prototype.initializePage.call(this);
     51 
     52       var wordList = $('language-dictionary-overlay-word-list');
     53       DictionaryWordsList.decorate(wordList);
     54       this.wordList_ = assertInstanceof(wordList, DictionaryWordsList);
     55       this.wordList_.onWordListChanged = function() {
     56         this.onWordListChanged_();
     57       }.bind(this);
     58 
     59       this.searchField_ = $('language-dictionary-overlay-search-field');
     60       this.searchField_.onsearch = function(e) {
     61         this.wordList_.search(e.currentTarget.value);
     62       }.bind(this);
     63       this.searchField_.onkeydown = function(e) {
     64         // Don't propagate enter key events. Otherwise the default button will
     65         // activate.
     66         if (e.keyIdentifier == 'Enter')
     67           e.stopPropagation();
     68       };
     69 
     70       this.noMatchesLabel_ = getRequiredElement(
     71           'language-dictionary-overlay-no-matches');
     72 
     73       $('language-dictionary-overlay-done-button').onclick = function(e) {
     74         PageManager.closeOverlay();
     75       };
     76     },
     77 
     78     /**
     79      * Refresh the dictionary words when the page is displayed.
     80      * @override
     81      */
     82     didShowPage: function() {
     83       chrome.send('refreshDictionaryWords');
     84     },
     85 
     86     /**
     87      * Update the view based on the changes in the word list.
     88      * @private
     89      */
     90     onWordListChanged_: function() {
     91       if (this.searchField_.value.length > 0 && this.wordList_.empty) {
     92         this.noMatchesLabel_.hidden = false;
     93         this.wordList_.classList.add('no-search-matches');
     94       } else {
     95         this.noMatchesLabel_.hidden = true;
     96         this.wordList_.classList.remove('no-search-matches');
     97       }
     98     },
     99   };
    100 
    101   EditDictionaryOverlay.setWordList = function(entries) {
    102     EditDictionaryOverlay.getInstance().wordList_.setWordList(entries);
    103   };
    104 
    105   EditDictionaryOverlay.updateWords = function(add_words, remove_words) {
    106     EditDictionaryOverlay.getInstance().wordList_.addWords(add_words);
    107     EditDictionaryOverlay.getInstance().wordList_.removeWords(remove_words);
    108   };
    109 
    110   EditDictionaryOverlay.getWordListForTesting = function() {
    111     return EditDictionaryOverlay.getInstance().wordList_;
    112   };
    113 
    114   return {
    115     EditDictionaryOverlay: EditDictionaryOverlay
    116   };
    117 });
    118