Closed Bug 63320 Opened 24 years ago Closed 16 years ago

Double clicking on text field to bring up a list of possible entries

Categories

(Toolkit :: Form Manager, defect, P3)

x86
Windows NT
defect

Tracking

()

RESOLVED WONTFIX

People

(Reporter: morse, Unassigned)

References

Details

Attachments

(3 files)

There is code in contentAreaClick.js for prefilling a single textfield when it 
is double clicked on.  That file also contains code for bringing up a list of 
possible values in the case that there is more than one.  However there were 
some problems with bringing up the list, so that code is commented out.  The 
consequence is that if there is more than one value, the first value will be 
prefilled and the user has no choice about that.

This bug report is to get the commented-out code working properly.

(Note: this is an offshoot of bug 48982)
Status: NEW → ASSIGNED
Whiteboard: [w]
Blocks: 48860
Just interested in following progress :)
Netscape Nav triage team: this is a Netscape beta stopper.
Keywords: nsbeta1
Priority: -- → P2
Attaching patch.

Decided not to implement it with double click after all.  Rather, the menu comes 
up when you single-click on a textfield for which there are saved values.  And 
that means that we no longer need the field to be automatically prefilled with a 
double-click -- it's simpler to do a single click and then select the value you 
want from the pop-up menu that appears.

The changes are as follows:

rdf/content/public/nsIXULPopupListener.h
  define "prefill" popup type
rdf/content/src/nsXULAtoms.inc
  define atom for "prefill" popup type
rdf/content/src/nsXULPopupListener.cpp
  "prefill" menu to close on keydown
rdf/content/src/nsXULElement.cpp
  install key-down handler for "prefill" menu, remove assert
layout/xul/base/src/nsPopupSetFrame.cpp
  don't install keyboard navigator for "prefill" menu

xpfe/browser/resources/content/navigator.xul
  add elements for "prefill" menu
xpfe/communicator/resources/content/contentAreaClick.js
  removed doubleclick code for prefilling
xpfe/communicator/resources/content/prefillList.xul
  xul file for "prefill" menu (new file)
xpfe/communicator/resources/content/nsPrefillMenu.js
  js file for "prefill" menu (new file)
xpfe/communicator/jar.mn
  installs the two new files into the jar file
Single click is correct, but only if the control already has focus. (So a 
double-click, which Blake reported as IE's behavior in bug 48982, is equal to 
focusing the field and then single-clicking it.)

I'm not that good at reading JS code, and I can't try the patch myself, but 
there are several things which appear to be wrong with it (these are partly 
based on discussions I had with Blake in IRC):
* you should not create a new XUL atom, you should use the existing auto-fill
  widget (as used in Navigator's address field, and in the message composition
  window);
* the menu should only show items which begin with the text that is already in
  the field (so you can filter the items by typing the first couple of
  characters of the string you want to use);
* it's not clear whether the items in the menu are sorted alphabetically (they
  should be).

For bonus points, make these changes to the autofill widget (these would not be 
necessary for this bug to be marked fixed, but should be implemented 
eventually):
* make it resizable (no matter whether it's used here in HTML forms, or in the
  address field, or wherever) -- Ben Goodger has the code for doing this;
* allow an item to be deleted from the menu by highlighting it and pressing
  Backspace or Delete.
I have to disagree with many of the points you are making.

1. Why should single click work only if the element has focus?  This requires 
the user to know (1) that there might be some values saved for this field and 
(2) that by clicking on it again the user can make the list of these values 
appear.  The way I have implemented it is that when the user clicks on a field 
to start to fill it out, he will suddenly be presented with possible values to 
use.  He needs to know nothing special and he gets a pleasant surprise.  The 
next step is to make the menu popup when the user tabs to the field (instead of 
clicking on it) but I can't tackle that until after this gets approved and 
checked in.

2. The existing auto-complete (it's not autfill) widget is for a xul element 
which the navigator's address field is.  In the current case, the element to be 
filled in is an html element appearing in the website's content, so the existing 
auto-complete widget is not applicable.

3. The menu that I have implemented is not for autocompletion but rather for 
autofilling.  Before the user ever types in any characters, the menu should 
appear and show him some possible choices.  Once he starts typing characters, he 
has effectively told us that he doesn't want to use the saved choices and so the 
menu should disappear.  Keep in mind that in the vast majority of cases there is 
only one saved value for each schema, so the metaphor of autcomplete doesn't 
really apply here.

4. No, the items should not be alphabetised but rather should be sorted by 
most-recently used.  I took great pains to always keep the list ordered that 
way.
The patches look ok to me.
The design seems simple, straightforward and intuitive.
r: pnunn
No, this is not okay.  Pam, there are clearly many points of contention about 
this patch, and an ongoing UI discussion.  Why would you go and review it 
without addressing any of the open issues?  If Netscape 6 isn't the best 
testimony to what happens when you implement first and consider usability later 
then I don't know what is.  Please read 
http://mozilla.org/hacking/reviewers.html about reviewing, especially the parts 
about examining context and looking at the big picture.  I already see some 
issues just from glancing at the patch (e.g. not following convential naming 
schemes -- prefillList.xul instead of prefillListOverlay.xul).

Morse, please do not go and find another reviewer because I didn't respond in 
one day (you first e-mailed me yesterday), especially during the holiday 
period, when hardly anyone is around.  Module owner should be ready and willing 
to listen to criticism about patches.  Why are you so anxious to check this 
in?  I appreciate your hard work, but I would much have this done correctly the 
first time then to infinitely split off more bugs until it's done right (bug 
48860).

On to the points at hand...

(1) Surprises are hardly ever pleasant in user interfaces, and this is probably 
no exception.  Clicking once in a textfield should focus it.  Having a menu 
drop down every time I did that would soon get annoying...

(2) This sounds like an "it's not currently possible" excuse, not a "it 
can't/shouldn't be done".  Autocompletion should be one generic service that 
takes a generic resources (e.g. an rdf datasource) and handles the rest on its 
own.  I would be glad to help do this; I've even been considering starting an 
Autocompletion project, along with the help of others.  Matthew has agreed to 
provide UI specs.

(3) Why has he effectively told us that?

> Keep in mind that in the vast majority of cases there is only one saved value 
> for each schema, so the metaphor of autcomplete doesn't really apply here.

Why is this, when IE helpfully provides many choices for each?  This is a 
problem.

4. I appreciate your effort to allow chronological sorting, but that's not 
justification for doing it.  The ultimate goal here is maximum usability for 
the user, not less work for the developer, as harsh as that sounds.  If I'm 
trying to find an item in a list (and you are, hence the whole point of this 
feature), which is going to help me more -- an alphabetized list, or a list 
sorted by most recently used values?  Chronology is irrelevant in this case.  I 
might need to prefill a value that I last filled in last year, or yesterday.

No, I'm not just going to say "r=blake" and split off 3 more bugs to get this 
right again. Autocompletion and form manager and password manager got in their 
current states (not following any spec, inconsistent implementations, infinite 
user interfaces, unreusable and non-generic modules) by doing exactly that, by 
rushing to get things checked in, by an unwillingness to partake in any kind of 
extended usability discussion, and by a general feeling of anxiety that has 
gotten in the way of the ultimate goal: what's best for the user.  I would 
expect more from two module owners.
gee, I didn't realize we had to clear all 
code changes through the great Blake Ross?
I thought maybe some other mozilla people might
be able to have opinions, too.
-p
Well, gee, considering I was asked *yesterday* to review this, only to find 
that I was brushed aside today for another reviewer who hasn't even taken part 
in the discussion here?  Yes, you generally clear code changes with the person 
you asked to review.  I also filed the initial bug.

Yes, I'd love to hear input from other people in the community.  That's why 
I've been discussing it with them for hours on IRC.  That's why I said "let's 
slow down and work this out."  That's why I asked Matthew two write a spec for 
this.  But you, apparently, do not, since you went ahead and reviewed this 
anyways.

One of the main reasons I'm so angry about this is that you did a similar thing 
in bug 62727 -- namely, you ignored the ongoing discussion in favor of 
reviewing the patch anyways.  You also stopped to wonder aloud why any time was 
being spent discussing these wording changes.  For someone who has expressed an 
interest in hearing the opinions of other contributors, I'd love to hear your 
explanation for why you went and reviewed a patch without acknowledging such 
inpute.  That patch was highly trivial and non-urgent.  Perhaps such anxiety 
was acceptable in the pre-6.0 days because of the tight, hurried schedule, but 
it's a new release cycle for Netscape now.  That sets a bad precedent.

Renominating for beta1 since this can't really be a beta stopper (new feature), 
and I'd rather spend more time on this to get it right.
Play nice, kids.

First, talking about things in a bug (or a newsgroup first, if the discussion is
too free-wheeling and large to fit in an unthreaded format with a six-line
textarea for data entry!) doesn't slow anyone down significantly from "shipping"
(else the ship date better be tomorrow or in a few days), and should not be a
cause for anxiety or rancor.

Ok, my comments:

We are trying to unify HTML, XML, and XUL content sinks and DOMs, so I don't
think morse's reasoning in objection (2) leads us in the right direction. We
should share mechanism and reduce footprint here, if at all possible, by reusing
existing autocomplete machinery for this autofill multiple-choice case.  Cc'ing
hyatt and waterson for advice.

What's more, if there are multiple possible completions for autofill, based on a
prefix of one or two characters that I have typed, I might well like to see the
remaining choices narrowed down as I type.  This is exactly the problem that the
existing autocomplete machinery implements.

I do think morse's MRU algorithm could turn out to be handier for common cases,
and not less usable than a lexicographic sort for very short (2-4? mpt help me)
choice-lists. Should the algorithm be MRU for short lists, lexicographic sort
for long ones?

/be
I disagree with blake.

My main focus is developing a usable software product
in a finite amount of time, not discussing how many
different ways we can reword an already understandable,
reasonable user message.

-pn
Keywords: nsbeta1
This bug was nominated as nsbeta1 by the triage team.  See knous' comment on 
12-21.
Keywords: nsbeta1
I was renominating it the only way I know how to.  I think they made a mistake, 
since this is a new feature...
a side comment (hopefully not too much fuel for this fire) since I was asked to
sr= this - I don't understand why we're inventing a third type of popup in C++..
why can't there be a XUL solution to this? I can't sr= this until we hear back
from hyatt.
Heh, just collided with alecf, who apparantly was struck by a similar thought.

This sounds like you're re-inventing the combo-box, but without the drop-down
arrow.
It may be that a XUL solution is not possible until XBLified form controls are 
developed well enough to be used by default. But that's not my area.

Now, back to the UI problems. First, invocation. Like Blake said, surprises are 
almost always bad in a UI. A single click to open the menu is unacceptable 
because it would obscure other elements in many fields, and leave novice users 
with no obvious way of hiding the menu. For example, if I wanted to change the 
`Summary' field of this bug report but clicked in the `URL' field by mistake, 
the `Summary' field would get covered with a menu of the various URLs I had 
entered for bugs in the past. This would be ok on a second click (since I'm 
clicking again, I'm obviously expecting something extra to happen, and I'm 
prepared to do a third click to hide the menu again), but on a first click it 
would be highly annoying.

Secondly, I think Steve is trying to make a distinction between `autofill' and 
`autocomplete' where such a distinction means nothing to the user. The menu 
should only show options that begin with the characters already entered in the 
field; when the field is empty, this is obviously equal to the total collection 
of options. I would be surprised if the number of options was *usually* only 
one; for Bugzilla, on-line reference tools, and so on, I would expect it to 
offer more than one, and this may mean that the autofill algorithm is being too 
`smart'. For example, what if I want to look up the same word in a number of 
different online dictionaries? Or if I want to look up the same title in a 
number of different online bookstores? Or if I want to do a Web search to find 
reviews of a book that I couldn't find reviewed in any online bookstore? Is 
this menu not going to help me, because the fields in each are considered to be 
in different schemata?

And finally, ordering. Chronological ordering would perhaps be marginally 
better than alphabetical ordering, *if* you were sure that the menu would never 
have more than 6~8 items in it -- only because it would require fewer 
keypresses on average to select the item you wanted, not because it would be 
any easier to scan. But since the menu will often have more than 6~8 items (in 
the search field of your favorite Web search engine, for instance), it would be 
best just to use alphabetical order consistently. (Using two different ordering 
schemes, depending on the length of the menu, would be more confusing than time-
saving.)
In reply to Mathew Thomas' comments:

> surprises are almost always bad in a UI

By your argument, tool tips are bad because they also came up as a surprise (the 
user simply moved the mouse to a certain point and a tip popped up).

The other side of that coin is that undiscoverable features are completely 
useless in a UI.  What would make the user ever suspect that if he wants to see 
a list of possible values, he should double-click on the field.  When he 
single-clicks on the field is the time that he is about to enter information so 
that is the time that he would like to see previously-saved values if any.

> A single click to open the menu is unacceptable because it would obscure
> other elements in many fields.

Not if the list is hardly ever longer than one or two which I still contend that 
it is.  For example, how many last-names do you think the average user has?

> For example, if I wanted to change the `Summary' field of this bug report
> but clicked in the `URL' field by mistake, the `Summary' field would get
> covered with a menu of the various URLs I had entered for bugs in the past.

That's certainly not the way the form-manager feature is intended to be used.  
Neither "summary field" nor "url field" appear as recognizable schema to form 
manager (see the list of recognizable schema presented in 
tasks->privacy->form-manager->view-stored-data).  So when I user goes to submit 
a bugzilla form, he will never be asked if he wants to save those values.  He 
can save them manually (from the edit or context menu) but that would be a 
strange thing to do.  And if he hadn't done such a saving, there would be no 
values for URL and so no menu appears when he clicks on the URL field.

Keep in mind that this is not autocompletion where all values are saved 
automatically whenever you fill them into a field.  Here the user has to take 
some action each time he wants a value saved.  With autocompletion I would agree 
with you that you will quickly accumulate many values for each field.  With 
autofill (and it's need for an explicit action to do a save), that is not the 
case.

> I think Steve is trying to make a distinction between `autofill' and 
> `autocomplete' where such a distinction means nothing to the user.

Yes I am makins such a distinction.  Although the user might not understand the 
terms, he would certainly be aware of the differences in these two features.  
One is a feature requiring him to explicitly take an action when he 
wants to save a value and the other collects saved values behind his back.

> The menu should only show options that begin with the characters already
> entered in the field; when the field is empty, this is obviously equal to
> the total collection of options.

Again, this would be true of an autocompletion feature but not an autofill one.  
For autofill, the user has saved possibly one (and in rare cases two) values for 
a field.  When he first enters the field he would like to see any possible saved 
values from which to chose.  Once he starts typing he has decided that he 
doesn't want to use one of the saved values and so has no further need for the 
list.

> For example, what if I want to look up the same word in a number of
> different online dictionaries? Or if I want to look up the same title in a
> number of different online bookstores? Or if I want to do a Web search to
> find reviews of a book that I couldn't find reviewed in any online bookstore?
> Is this menu not going to help me, because the fields in each are considered
> to be in different schemata?

The answer to you last question is "yes", form-manager will not help you here.  
Let me explain why and give some history.

Form manager attempts to determine the schema for each field and its storage 
consists of the schema/value pair.  The question then comes up as to what to do 
is we can't determine the schema.  We certainly want this field to be 
pre-fillable the next time the user returns to this site.

My original idea was to save it as fieldname/value in this case and then reuse 
it whenever the user encountered that fieldname on any site.  But product 
marketing presented a convincing case against doing so.  A banking site might 
use "ss" as the field name for "social security number" and a shoestore site 
might use it for "shoe size".  Certainly you don't want to prefill the users 
social security number onto the shoestore's site.

So I changed the implementation as follows.  Instead of storing the information 
as fieldname/value, I store it as url:fieldname/value.  Now that value will be 
prefilled only on the original site for which it was captured, whereas schemas 
that I can recognized will be prefilled across sites.

So let's return to the example you sited.  Each of the fields you sited are not 
in the set of schema that we recognize.  So those values would not be shared 
across sites.

> And finally, ordering. Chronological ordering would perhaps be marginally
> better than alphabetical ordering

Once again the issue boils down to size.  If you have more than five items saved 
for a particular schema, then you are using form manager in a very 
unconventional way.  The original name for form-manager was "wallet" and the 
idea was that you carried certain personal information in your wallet (social 
security card, driver's license, credit card, etc) and you would like to avoid 
having to retype that same information on every website you visit.  So the 
"wallet" feature, upon request, would enter that information for you.  You have 
only one social security number.  You have only one driver's license number.  
You might have two or three credit card numbers so here's a case where you could 
get more than one saved value.  But in that case there is probably one number 
that you use most often so you would want to see the list sorted by 
most-recently used.

I mentioned above that I took great pains to keep the list sorted by MRU and one 
of the commentors above misinterpreted that as an excuse for not changing it:

      I appreciate your effort to allow chronological sorting, but that's not
      justification for doing it.  The ultimate goal here is maximum usability
      for the user, not less work for the developer, as harsh as that sounds.

On the contrary, I was not looking for "less work" when I chose to use the MRU 
algorithm -- rather I chose to use do the extra work because I felt (and still 
feel) that the most-recently used value is probably the when the user would want 
to use next.

I hope these comments help to clarify some of the issues.
bugs are not the place to argue whether or not a bug should or should not be
fixed - take this up on a newsgroup and let's keep the traffic in this bug
relevant to HOW to fix this bug, such as if using C++ is the appropriate method
here.
Whiteboard: [w]
Note that this should also be possible using only keyboard and not mouse (or 
any other pointing device).
Trying to get this bug back on track.  I requested a super-review on this from 
alecf and his response was:

     "I don't understand why we're inventing a third type of popup in C++..
      why can't there be a XUL solution to this? I can't sr= this until we
      hear back from hyatt."

Dave, can you please comment on Alec's questions so we can make some progress on 
this one.  Is there anything that I should be doing to move this along?
Patching the XUL popup listener is absolutely not allowed.  I will not approve
any patch that alters the popup listener in this way.
As module owner of nsXULPopupListener, I will not allow a checkin that creates a
new kind of popup.  This is a hack.
This bug should simply be tabled for 6.5 and be marked as dependent on XBL form
controls.  With XBL form controls, textfields could have a dropdown menu (like
Internet Explorer) built in to them.

Hacking the XUL popup listener will only work for Seamonkey, and it won't work
in embedding.  If we take the time to do this right (using XBL form controls and
thinking more about what UI should be presented), then I think we'll be much
better off.
Some comments on the patch, and the UI: 

- the positioning of the prefill menu is not skinable. Skins can change the font 
and the size of textfields, and so the code used to lower the position of the 
popup is likely to be incorrect in some cases. 
- the files are located in an inappropriate place in the source tree. All wallet 
code must be completely self contained inside extensions/wallet. 

As for UI, I have not applied the patch but I have some simple questions (I may 
apply the patch later today). - 
- the single click popup action, does this interfere with click to focus of the 
field, or click selection in the field (selecting text) or multiple click 
selection of words and the entire field? The UI that is posed should not obscure 
the textfield in anyway so as to prevent such editing operations.

The code issues raised by David Hyatt and myself are enough to make the patch in 
its current form fail r= and sr=. I will try the patch and experiment with the 
UI before issuing a judgement as UI module owner. 
as the other module owner for popups, I totally agree with hyatt. Nothing in 
this patch enhances the toolkit for applications, but simply adds a browser-
specific feature and should be done outside the realm of the toolkit.

adding myself to the cc list.
Target Milestone: --- → mozilla0.9
I stopped watching soaps.  Need my intake.
Target Milestone: mozilla0.9 → mozilla1.0
Per vishy's request, here is my recommendation for this bug regarding nsbeta1.

Currently there is no means of discovery for the form manager unless either this 
feature is implemented or the form-manager toolbar (bug 23095) is restored 
(commenting-out removed).  That is why I nominated this for nsbeta1 originally.  
However I don't realistically see this feature being implemented in the near 
future.  So I'm at a loss as to whether to which recommendation to make here 
(nsbeta1+ or nsbeta1-).
since we do not have a proper solution here in the timeframe for mozilla0.9.1, 
we will nsbeta1- this bug. 
Keywords: nsbeta1nsbeta1-
Target Milestone: mozilla1.0 → mozilla1.1
adding self to cc list
Priority: P2 → P3
Target Milestone: mozilla1.1alpha → mozilla1.2alpha
Target Milestone: mozilla1.2alpha → mozilla1.3alpha
This might be related to bug 180924.

Reassigning to new module owner dveditz.
Assignee: morse → dveditz
Status: ASSIGNED → NEW
Target Milestone: mozilla1.3alpha → ---
As Mozilla stores tens of irrelevant data items along with the relevant ones for
a field, it would be extremely useful if there was a drop-down as suggested here.
Assignee: dveditz → nobody
Filter on "Nobody_NScomTLD_20080620"
QA Contact: tpreston → form-manager
Product: Core → Toolkit
QA Contact: form-manager → form.manager
This 8 year old flamewar is no longer relevant. The old code has been replaced by satchel and password manager, and thing issues no longer apply. Lest any daring young necromancer feel strongly about some random point here, please file new bugs.
Status: NEW → RESOLVED
Closed: 16 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: