зеркало из https://github.com/mozilla/pjs.git
209 строки
6.6 KiB
JavaScript
209 строки
6.6 KiB
JavaScript
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is a service that enabled preference autocomplete
|
|
*
|
|
* The Initial Developer of the Original Code is IBM Corp.
|
|
* Portions created by the Initial Developer are Copyright (C) 2005
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
|
|
const PREF_AUTOCOMPLETE_SEARCH_CONTRACTID = "@mozilla.org/autocomplete/search;1?name=prefs";
|
|
const PREF_AUTOCOMPLETE_SEARCH_CLSID = Components.ID('{f0747ed9-764a-4501-a7e5-4d1493605430}');
|
|
|
|
const nsIAutoCompleteSearch = Components.interfaces.nsIAutoCompleteSearch;
|
|
|
|
const gPrefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
|
|
const gPrefBranch = gPrefService.getBranch(null).QueryInterface(Components.interfaces.nsIPrefBranch2);
|
|
|
|
function PrefAutoCompleteSearchHandler() {}
|
|
PrefAutoCompleteSearchHandler.prototype =
|
|
{
|
|
/* nsISupports */
|
|
QueryInterface : function handler_QI(iid) {
|
|
if (iid.equals(Components.interfaces.nsISupports))
|
|
return this;
|
|
|
|
if (nsIAutoCompleteSearch && iid.equals(nsIAutoCompleteSearch))
|
|
return this;
|
|
|
|
throw Components.results.NS_ERROR_NO_INTERFACE;
|
|
},
|
|
|
|
/* nsIAutoCompleteSearch */
|
|
startSearch : function startSearch(searchString, searchParam, previousResult, listener) {
|
|
var simpleresult;
|
|
if ("@mozilla.org/autocomplete/simple-result;1" in Components.classes) {
|
|
var result = Components.classes["@mozilla.org/autocomplete/simple-result;1"].createInstance();
|
|
simpleresult = result.QueryInterface(Components.interfaces.nsIAutoCompleteSimpleResult);
|
|
} else {
|
|
simpleresult = new AutoCompleteSimpleResult();
|
|
}
|
|
simpleresult.setSearchString(searchString);
|
|
simpleresult.setDefaultIndex(0);
|
|
var prefCount = { value: 0 };
|
|
var prefArray = gPrefBranch.getChildList("", prefCount);
|
|
prefArray = prefArray.sort();
|
|
for (var i = 0; i < prefCount.value; ++i)
|
|
{
|
|
if (prefArray[i].indexOf(searchString) == 0) {
|
|
simpleresult.appendMatch(prefArray[i], "");
|
|
}
|
|
}
|
|
if (simpleresult.matchCount > 0) {
|
|
simpleresult.setSearchResult(Components.interfaces.nsIAutoCompleteResult.RESULT_SUCCESS);
|
|
} else {
|
|
simpleresult.setSearchResult(Components.interfaces.nsIAutoCompleteResult.RESULT_NOMATCH);
|
|
}
|
|
listener.onSearchResult(this, simpleresult);
|
|
},
|
|
|
|
stopSearch : function stopSearch() {
|
|
}
|
|
};
|
|
|
|
|
|
var PrefAutoCompleteSearchFactory =
|
|
{
|
|
createInstance : function(outer, iid)
|
|
{
|
|
if (outer != null) {
|
|
throw Components.results.NS_ERROR_NO_AGGREGATION;
|
|
}
|
|
|
|
return new PrefAutoCompleteSearchHandler().QueryInterface(iid);
|
|
}
|
|
};
|
|
|
|
|
|
var PrefAutoCompleteSearchModule =
|
|
{
|
|
registerSelf : function(compMgr, fileSpec, location, type)
|
|
{
|
|
compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
|
|
|
|
compMgr.registerFactoryLocation(PREF_AUTOCOMPLETE_SEARCH_CLSID,
|
|
"Preference Auto Complete Search",
|
|
PREF_AUTOCOMPLETE_SEARCH_CONTRACTID,
|
|
fileSpec,
|
|
location,
|
|
type);
|
|
},
|
|
|
|
unregisterSelf : function(compMgr, fileSpec, location)
|
|
{
|
|
compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
|
|
|
|
compMgr.unregisterFactoryLocation(PREF_AUTOCOMPLETE_SEARCH_CLSID, fileSpec);
|
|
},
|
|
|
|
getClassObject : function(compMgr, cid, iid)
|
|
{
|
|
if (cid.equals(PREF_AUTOCOMPLETE_SEARCH_CLSID)) {
|
|
return PrefAutoCompleteSearchFactory;
|
|
}
|
|
|
|
if (!iid.equals(Components.interfaces.nsIFactory)) {
|
|
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
throw Components.results.NS_ERROR_NO_INTERFACE;
|
|
},
|
|
|
|
canUnload : function(compMgr)
|
|
{
|
|
return true;
|
|
}
|
|
};
|
|
|
|
|
|
function NSGetModule(compMgr, fileSpec) {
|
|
return PrefAutoCompleteSearchModule;
|
|
}
|
|
|
|
|
|
function AutoCompleteSimpleResult() {
|
|
/* nsIAutoCompleteResult */
|
|
this.searchString = "";
|
|
this.searchResult = this.RESULT_NOMATCH;
|
|
this.defaultIndex = -1;
|
|
this.errorDescription = "";
|
|
this.matchCount = 0;
|
|
/* nsIAutoCompleteSimpleResult */
|
|
this.values = new Array();
|
|
this.comments = new Array();
|
|
}
|
|
|
|
AutoCompleteSimpleResult.prototype = {
|
|
/* nsIAutoCompleteResult */
|
|
RESULT_IGNORED: 1,
|
|
RESULT_FAILURE: 2,
|
|
RESULT_NOMATCH: 3,
|
|
RESULT_SUCCESS: 4,
|
|
|
|
getValueAt : function getValueAt(index) {
|
|
return this.values[index];
|
|
},
|
|
|
|
getCommentAt : function getCommentAt(index) {
|
|
return this.comments[index];
|
|
},
|
|
|
|
getStyleAt : function getStyleAt(index) {
|
|
},
|
|
|
|
removeValueAt : function removeValueAt(rowIndex, removeFromDb) {
|
|
this.values.splice(rowIndex, 1);
|
|
},
|
|
|
|
/* nsIAutoCompleteSimpleResult */
|
|
setSearchString : function setSearchString(aSearchString) {
|
|
this.searchString = aSearchString;
|
|
},
|
|
|
|
setErrorDescription : function setErrorDescription(aErrorDescription) {
|
|
this.errorDescription = aErrorDescription;
|
|
},
|
|
|
|
setDefaultIndex : function setDefaultIndex(aDefaultIndex) {
|
|
this.defaultIndex = aDefaultIndex;
|
|
},
|
|
|
|
setSearchResult : function setSearchResult(aSearchResult) {
|
|
this.searchResult = aSearchResult;
|
|
},
|
|
|
|
appendMatch : function appendMatch(aValue, aComment) {
|
|
this.values.push(aValue);
|
|
this.comments.push(aComment);
|
|
this.matchCount++;
|
|
}
|
|
}
|
|
|