From 399c74ae3cfe88f8ffbd3bee4079f71e07d7733f Mon Sep 17 00:00:00 2001 From: "ducarroz%netscape.com" Date: Fri, 21 Apr 2000 01:20:17 +0000 Subject: [PATCH] More work on autocomplete. Add support for text selection git-svn-id: svn://10.0.0.236/trunk@66633 18797224-902f-48f8-a5cc-f745e15eee43 --- .../resources/skin/autocomplete.xml | 93 +++++++++++-------- .../autocomplete/test/autocomplete_test.xul | 72 ++++++++++++-- 2 files changed, 121 insertions(+), 44 deletions(-) diff --git a/mozilla/xpfe/components/autocomplete/resources/skin/autocomplete.xml b/mozilla/xpfe/components/autocomplete/resources/skin/autocomplete.xml index 8687cb9ce8d..43214c07152 100644 --- a/mozilla/xpfe/components/autocomplete/resources/skin/autocomplete.xml +++ b/mozilla/xpfe/components/autocomplete/resources/skin/autocomplete.xml @@ -5,11 +5,11 @@ xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> - + - - + @@ -31,19 +31,19 @@ - - @@ -54,12 +54,31 @@ ]]> + + + + result.items.Count()) + result.defaultItemIndex = 0; + item = result.items.QueryElementAt(result.defaultItemIndex, Components.interfaces.nsIAutoCompleteItem); //Time to build the new edit field value @@ -69,7 +88,7 @@ match = item.value.toLowerCase(); entry = this.param.value.toLowerCase(); - inputElement = this.param.anonymousContent[0].firstChild.anonymousContent[0].firstChild; + inputElement = this.param.anonymousContent[0].firstChild; if (entry != match) { @@ -77,17 +96,17 @@ { this.param.value = this.param.value + item.value.substring(entry.length, match.length); inputElement.setSelectionRange(entry.length, match.length); + this.param.noDirectMatch = false; } else { - dump("oops, no direct match!\n"); -// this.param.value = this.param.value + " " + item.value; -// inputElement.setSelectionRange(entry.length + 1, this.param.value.length); + this.param.value = this.param.value + " >> " + item.value; + inputElement.setSelectionRange(entry.length, this.param.value.length); + this.param.noDirectMatch = true; } } popupset = this.param.anonymousContent[0].childNodes[1]; - dump("popupset=" + popupset + ", popup=" + popupset.firstChild + "\n"); //Now, build the popup content popupElement = popupset.firstChild.cloneNode(false); @@ -98,11 +117,11 @@ menuitem.setAttribute('id', i); menuitem.setAttribute('value', item.value); popupElement.appendChild(menuitem); + dump(" match=" + item.value + "\n"); } popupset.replaceChild(popupElement, popupset.firstChild); //TODO: Select the default item -// popupset.selectedItem = result.defaultItemIndex; - +// popupset.selectedItem = result.defaultItemIndex; // popupset.firstChild.openPopup(this.param.anonymousContent[0].firstChild, -1, -1, "popup", "bottomleft", "topleft"); }, @@ -113,30 +132,26 @@ - >> startLookup...\n'); - me.autoCompleteSession.onStartLookup(event, me.value, me.lastResult, me.autoCompleteListener); + if (!me.lastResults || me.value != me.lastResults.searchString) + me.autoCompleteSession.onStartLookup(me.value, me.lastResults, me.autoCompleteListener); break; case 'stopLookup': - dump('>>> stopLookup...\n'); //TODO: hide the popup menu now. How do we to that? - me.autoCompleteSession.onStopLookup(event); + me.autoCompleteSession.onStopLookup(); break; case 'autoComplete': - dump('>>> autoComplete...\n'); if (me.autoCompleteTimer) { clearTimeout(me.autoCompleteTimer); me.autoCompleteTimer = 0; } - me.autoCompleteSession.onAutoComplete(event, me.value, me.lastResult, me.autoCompleteListener); + me.autoCompleteSession.onAutoComplete(me.value, me.lastResults, me.autoCompleteListener); me.needToAutocomplete = false; break; } @@ -145,22 +160,25 @@ + @@ -168,16 +186,15 @@ - + - - + diff --git a/mozilla/xpfe/components/autocomplete/test/autocomplete_test.xul b/mozilla/xpfe/components/autocomplete/test/autocomplete_test.xul index 30a1d1f6dcb..f1aeb2bb780 100644 --- a/mozilla/xpfe/components/autocomplete/test/autocomplete_test.xul +++ b/mozilla/xpfe/components/autocomplete/test/autocomplete_test.xul @@ -16,19 +16,35 @@ var AutoCompleteSession = { - onStartLookup: function(event, value, prevResult, listener) + onStartLookup: function(value, prevResult, listener) { dump("Search Session: onStartLookup\n"); + + var results = Components.classes["component://netscape/autocomplete/results"].createInstance(); + results = results.QueryInterface(Components.interfaces.nsIAutoCompleteResults); + results.searchString = value; + results.defaultItemIndex = 0; + results.param = null; + + var item = Components.classes["component://netscape/autocomplete/item"].createInstance(); + item = item.QueryInterface(Components.interfaces.nsIAutoCompleteItem); + item.value = "Jean-Francois Ducarroz"; + item.comment = "[put your comment here]"; + item.className = ""; + item.param = null; + + results.items.AppendElement(item); + listener.onAutoComplete(results, Components.interfaces.nsIAutoCompleteStatus.matchFound); }, - onStopLookup: function(event) + onStopLookup: function() { dump("Search Session: onStopLookup\n"); }, - onAutoComplete: function(event, value, prevResult, listener) + onAutoComplete: function(value, prevResult, listener) { - dump("Search Session: onAutoComplete, value =" + value +"\n"); + dump("Search Session: onAutoComplete, value =" + value + "\n"); var results = Components.classes["component://netscape/autocomplete/results"].createInstance(); results = results.QueryInterface(Components.interfaces.nsIAutoCompleteResults); @@ -58,9 +74,45 @@ var AutoCompleteSession = { } }; +function function1() +{ + var myAutoComplete = document.getElementById("test"); + value = myAutoComplete.value; + match = "Jean-Francois Ducarroz"; + + lmatch = match.toLowerCase(); + lvalue = value.toLowerCase(); + + dump("value = " + lvalue + ", match = " + lmatch + "\n"); + + if (lvalue == lmatch) + dump("exact match\n"); + else + { + dump("substring = " + lmatch.substring(0, lvalue.length) + "\n"); + if (lmatch.substring(0, lvalue.length) == lvalue) + { + dump("Ok, we can merge\n"); + myAutoComplete.value = value + match.substring(value.length, match.length); +// myAutoComplete.anonymousContent[0].firstChild.anonymousContent[0].firstChild.setSelectionRange(value.length, match.length); + } + else + { + dump("oops, no match!\n"); + myAutoComplete.value = value + " " + match; + } + } + +} + function Initialize() { - dump("Initialize\n"); + dump("Initialize!!\n"); + var secondAutoComplete = document.getElementById("test2"); + abSession = secondAutoComplete.autoCompleteSession.QueryInterface(Components.interfaces.nsIAbAutoCompleteSession) + dump("abSession = " + secondAutoComplete + ", abSession = " + secondAutoComplete.autoCompleteSession + "\n"); + abSession.defaultDomain = "mozilla.org"; + var myAutoComplete = document.getElementById("test"); dump("myAutoComplete = " + myAutoComplete + ", session = " + myAutoComplete.autoCompleteSession + "\n"); myAutoComplete.autoCompleteSession = AutoCompleteSession; @@ -68,11 +120,19 @@ function Initialize() + - + +<<<<<<< autocomplete_test.xul +======= +>>>>>>> 1.2