home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / filB1B037F8DE5ECE0089F2D0BF8443D365 < prev    next >
Text File  |  2010-07-12  |  6KB  |  214 lines

  1. const EXTENSION_PATH = Components.classes["@mozilla.org/network/io-service;1"]
  2.                                  .getService(Components.interfaces.nsIIOService)
  3.                                  .newFileURI(__LOCATION__.parent.parent)
  4.                                  .spec;
  5.  
  6. Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
  7.           .getService(Components.interfaces.mozIJSSubScriptLoader)
  8.           .loadSubScript(EXTENSION_PATH + "modules/xb/config.js");
  9.  
  10. Cu.import(EXTENSION_PATH + "modules/xb/XPCOMUtilsEx.jsm");
  11.  
  12. Cu.import(EXTENSION_PATH + "modules/JSON.jsm");
  13.  
  14. // Hack: get last autocomplete result.
  15. let LastResultHack = {
  16.     _result: null, // SimpleAutoCompleteResult
  17.     
  18.     get result() {
  19.         return this._result;
  20.     },
  21.     
  22.     set result(aValue) {
  23.         this._result = aValue;
  24.     },
  25.     
  26.     clear: function LastResultHack_clear() {
  27.         this._result = null;
  28.     },
  29.     
  30.     get lastResult() {
  31.         let result = this.result;
  32.         
  33.         if (result)
  34.             return result._results[result._lastResultIndex];
  35.         
  36.         return null;
  37.     },
  38.     
  39.     getResultForString: function LastResultHack_getResultForString(aString) {
  40.         let result = this.lastResult;
  41.         
  42.         if (result && result.value.toLowerCase() == aString.toLowerCase())
  43.             return result;
  44.         
  45.         return null;
  46.     }
  47. };
  48.  
  49. // Implements nsIAutoCompleteResult
  50. function SimpleAutoCompleteResult(searchString, searchResult,
  51.                                   defaultIndex, errorDescription,
  52.                                   results, comments) {
  53.     this._searchString = searchString;
  54.     this._searchResult = searchResult;
  55.     this._defaultIndex = defaultIndex;
  56.     this._errorDescription = errorDescription;
  57.     this._results = results;
  58.     this._comments = comments;
  59.     
  60.     this._lastResultIndex = -1;
  61. }
  62.  
  63. SimpleAutoCompleteResult.prototype = {
  64.     _searchString: "",
  65.     _searchResult: 0,
  66.     _defaultIndex: 0,
  67.     _errorDescription: "",
  68.     _results: [],
  69.     _comments: [],
  70.     
  71.     get wrappedJSObject() {
  72.         return this;
  73.     },
  74.     
  75.     /**
  76.      * The original search string
  77.      */
  78.     get searchString() {
  79.         return this._searchString;
  80.     },
  81.     
  82.     /**
  83.      * The result code of this result object, either:
  84.      *         RESULT_IGNORED   (invalid searchString)
  85.      *         RESULT_FAILURE   (failure)
  86.      *         RESULT_NOMATCH   (no matches found)
  87.      *         RESULT_SUCCESS   (matches found)
  88.      */
  89.     get searchResult() {
  90.         return this._searchResult;
  91.     },
  92.     
  93.     /**
  94.      * Index of the default item that should be entered if none is selected
  95.      */
  96.     get defaultIndex() {
  97.         return this._defaultIndex;
  98.     },
  99.     
  100.     /**
  101.      * A string describing the cause of a search failure
  102.      */
  103.     get errorDescription() {
  104.         return this._errorDescription;
  105.     },
  106.     
  107.     /**
  108.      * The number of matches
  109.      */
  110.     get matchCount() {
  111.         return this._results.length;
  112.     },
  113.     
  114.     /**
  115.      * Get the value of the result at the given index
  116.      */
  117.     getValueAt: function(aIndex) {
  118.         this._lastResultIndex = aIndex;
  119.         
  120.         return this._results[aIndex].value;
  121.     },
  122.     
  123.     /**
  124.      * Get the comment of the result at the given index
  125.      */
  126.     getCommentAt: function(index) {
  127.         return this._comments[index];
  128.     },
  129.     
  130.     /**
  131.      * Get the style hint for the result at the given index
  132.      */
  133.     getStyleAt: function(index) {
  134.         if (!this._comments[index])
  135.             return null;  // not a category label, so no special styling
  136.         
  137.         if (index == 0)
  138.             return "suggestfirst";  // category label on first line of results
  139.         
  140.         return "suggesthint";   // category label on any other line of results
  141.     },
  142.     
  143.     /**
  144.      * Get the image for the result at the given index
  145.      * The return value is expected to be an URI to the image to display
  146.      */
  147.     getImageAt: function (index) {
  148.         return "";
  149.     },
  150.     
  151.     /**
  152.      * Remove the value at the given index from the autocomplete results.
  153.      * If removeFromDb is set to true, the value should be removed from
  154.      * persistent storage as well.
  155.      */
  156.     removeValueAt: function(index, removeFromDb) {
  157.         this._results.splice(index, 1);
  158.         this._comments.splice(index, 1);
  159.     },
  160.     
  161.     QueryInterface: XPCOMUtilsEx.generateQI([Ci.nsIAutoCompleteResult, Ci.nsISupports])
  162. };
  163.  
  164. // Implements nsIAutoCompleteSearch
  165. function SimpleAutoCompleteSearch() {
  166. }
  167.  
  168. SimpleAutoCompleteSearch.prototype = {
  169.     classDescription: "Custom Yandex.Bar AutoComplete",
  170.     classID: Components.ID("7ec0573a-0738-11df-ab80-979cccaab3b0"),
  171.     contractID: "@mozilla.org/autocomplete/search;1?name=yacustombar-autocomplete",
  172.     QueryInterface: XPCOMUtilsEx.generateQI([Ci.nsIAutoCompleteSearch, Ci.nsISupports]),
  173.     
  174.     get wrappedJSObject() {
  175.         return {
  176.             lastResult: LastResultHack
  177.         }
  178.     },
  179.     
  180.     startSearch: function(aSearchString, aSearchParam, aResult, aListener) {
  181.         LastResultHack.result = null;
  182.         
  183.         if (!aSearchParam.length)
  184.             return;
  185.         
  186.         let results = [];
  187.         let comments = [];
  188.         
  189.         let lowercaseSearchString = aSearchString.toLowerCase();
  190.         
  191.         JSON.parse(aSearchParam).forEach(function(aSearchResult) {
  192.             if (aSearchResult.value.toLowerCase().indexOf(lowercaseSearchString) == 0) {
  193.                 results.push({
  194.                     value: aSearchResult.value,
  195.                     realValue: aSearchResult.realValue,
  196.                 });
  197.                 comments.push(aSearchResult.comment || null);
  198.             }
  199.         });
  200.         
  201.         let newResult = new SimpleAutoCompleteResult(aSearchString, Ci.nsIAutoCompleteResult.RESULT_SUCCESS,
  202.                                                      0, "", results, comments);
  203.         
  204.         LastResultHack.result = newResult;
  205.         
  206.         aListener.onSearchResult(this, newResult);
  207.     },
  208.     
  209.     stopSearch: function() {}
  210. };
  211.  
  212. function NSGetModule(compMgr, fileSpec)
  213.     XPCOMUtilsEx.generateModule([SimpleAutoCompleteSearch]);
  214.