From f838d96d2f4e99c22818533375689367d0923fa0 Mon Sep 17 00:00:00 2001 From: "ducarroz%netscape.com" Date: Fri, 12 May 2000 05:40:20 +0000 Subject: [PATCH] Fix few problems: Don't autocomplete after user press backspace or delete. If resutl contains only one match and default item is 0, don't show the popup menu. If the default item is -1, don't touch at the user input. Correctly detect when popup menu is open. --- .../resources/skin/autocomplete.xml | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/xpfe/components/autocomplete/resources/skin/autocomplete.xml b/xpfe/components/autocomplete/resources/skin/autocomplete.xml index 5b92f403e5ae..47d505b3c876 100644 --- a/xpfe/components/autocomplete/resources/skin/autocomplete.xml +++ b/xpfe/components/autocomplete/resources/skin/autocomplete.xml @@ -12,7 +12,7 @@ - + @@ -89,31 +89,35 @@ result.defaultItemIndex = 0; var inputElement = me.anonymousContent[0].firstChild; - var item = result.items.QueryElementAt(result.defaultItemIndex, Components.interfaces.nsIAutoCompleteItem); //Time to build the new edit field value //First, check if the search string correspond to the current value of the field, else ignore it if (result.searchString != inputElement.value) return; - var match = item.value.toLowerCase(); - var entry = inputElement.value.toLowerCase(); + var item = null; + if (result.defaultItemIndex != -1) + { + item = result.items.QueryElementAt(result.defaultItemIndex, Components.interfaces.nsIAutoCompleteItem); + var match = item.value.toLowerCase(); + var entry = inputElement.value.toLowerCase(); - if (entry != match) - { - if (match.substring(0, entry.length) == entry) - { - inputElement.value = inputElement.value + item.value.substring(entry.length, match.length); - inputElement.setSelectionRange(entry.length, match.length); - me.noDirectMatch = false; - } - else - { - inputElement.value = inputElement.value + " >> " + item.value; - inputElement.setSelectionRange(entry.length, inputElement.value.length); - me.noDirectMatch = true; - } - } + if (entry != match) + { + if (match.substring(0, entry.length) == entry) + { + inputElement.value = inputElement.value + item.value.substring(entry.length, match.length); + inputElement.setSelectionRange(entry.length, match.length); + me.noDirectMatch = false; + } + else + { + inputElement.value = inputElement.value + " >> " + item.value; + inputElement.setSelectionRange(entry.length, inputElement.value.length); + me.noDirectMatch = true; + } + } + } //Now, build the popup content if (me.displayMenu == "false") @@ -131,11 +135,14 @@ // dump(" match=" + item.value + "\n"); } popupset.replaceChild(popupElement, popupset.firstChild); + if (result.defaultItemIndex != -1) + { //TODO: Select the default item // popupset.selectedItem = result.defaultItemIndex; + } me.privatefunc.selectedItemIndex = result.defaultItemIndex; - popupset.firstChild.openPopup(me.anonymousContent[0].firstChild, -1, -1, "popup", "bottomleft", "topleft"); -dump("OPEN POPUP\n"); + if (result.defaultItemIndex != 0 || result.items.Count() != 1) + popupset.firstChild.openPopup(me.anonymousContent[0].firstChild, -1, -1, "popup", "bottomleft", "topleft"); }, param: this @@ -219,11 +226,8 @@ dump("OPEN POPUP\n"); closePopupMenu: function(me) { popup = document.getElementById("ac_menupopup"); - if (popup /*&& popup.getAttribute("menuactive") == "true"*/) //TODO: need to now if menu is open or not - { -dump("CLOSE POPUP\n"); + if (popup && me.menuOpen == "true") popup.closePopup(); - } }, cleanupInputField: function(me) { @@ -274,19 +278,6 @@ dump("CLOSE POPUP\n"); } }, - processKeyUp: function(me, event) { - if (me.disableAutocomplete == "true") - return; - - switch (event.keyCode) - { - case 8: /*vk_back*/ - case 46: /*vk_delete*/ - me.privatefunc.closePopupMenu(me); - break; - } - }, - processKeyPress: function(me, event) { if (me.disableAutocomplete == "true") return; @@ -299,12 +290,16 @@ dump("CLOSE POPUP\n"); } var popup = document.getElementById("ac_menupopup"); - //TODO: need to now if menu is open or not -// if (popup && popup.getAttribute("menuactive") != "true") -// popup = null; + if (popup && me.menuOpen != "true") + popup = null; switch (event.keyCode) { + case 8: /*vk_back*/ + case 46: /*vk_delete*/ + me.privatefunc.closePopupMenu(me); + return; + case 13 /*vk_return*/: me.privatefunc.finishAutoComplete(me, event); return; @@ -320,6 +315,12 @@ dump("CLOSE POPUP\n"); case 37 /*vk_left*/: case 39 /*vk_right*/: + if (popup) + { + me.privatefunc.closePopupMenu(me); + event.preventDefault(); + event.preventBubble(); + } me.privatefunc.cleanupInputField(me); break; @@ -349,7 +350,6 @@ dump("CLOSE POPUP\n"); -