Home | History | Annotate | Download | only in front_end
      1 /*
      2  * Copyright (C) 2013 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 /**
     32  * @interface
     33  */
     34 WebInspector.CompletionDictionary = function() { }
     35 
     36 WebInspector.CompletionDictionary.prototype = {
     37     /**
     38      * @param {string} word
     39      */
     40     addWord: function(word) { },
     41 
     42     /**
     43      * @param {string} word
     44      */
     45     removeWord: function(word) { },
     46 
     47     /**
     48      * @param {string} word
     49      * @return {boolean}
     50      */
     51     hasWord: function(word) { },
     52 
     53     /**
     54      * @param {string} prefix
     55      * @return {Array.<string>}
     56      */
     57     wordsWithPrefix: function(prefix) { },
     58 
     59     /**
     60      * @param {string} word
     61      * @return {number}
     62      */
     63     wordCount: function(word) { }
     64 }
     65 
     66 /**
     67  * @constructor
     68  * @implements {WebInspector.CompletionDictionary}
     69  */
     70 WebInspector.SampleCompletionDictionary = function() {
     71     this._words = {};
     72 }
     73 
     74 WebInspector.SampleCompletionDictionary.prototype = {
     75     /**
     76      * @param {string} word
     77      */
     78     addWord: function(word)
     79     {
     80         if (!this._words[word])
     81             this._words[word] = 1;
     82         else
     83             ++this._words[word];
     84     },
     85 
     86     /**
     87      * @param {string} word
     88      */
     89     removeWord: function(word)
     90     {
     91         if (!this._words[word])
     92             return;
     93         if (this._words[word] === 1)
     94             delete this._words[word];
     95         else
     96             --this._words[word];
     97     },
     98 
     99     /**
    100      * @param {string} prefix
    101      * @return {Array.<string>}
    102      */
    103     wordsWithPrefix: function(prefix)
    104     {
    105         var words = [];
    106         for(var i in this._words) {
    107             if (i.startsWith(prefix))
    108                 words.push(i);
    109         }
    110         return words;
    111     },
    112 
    113     /**
    114      * @param {string} word
    115      * @return {boolean}
    116      */
    117     hasWord: function(word)
    118     {
    119         return !!this._words[word];
    120     },
    121 
    122     /**
    123      * @param {string} word
    124      * @return {number}
    125      */
    126     wordCount: function(word)
    127     {
    128         return this._words[word] ? this._words[word] : 0;
    129     }
    130 }
    131