Steps to reproduce without bug:

- View a node with inline tagging form displayed.
- Tag with a comma-separated list of tags.
- Visit another page or reload.

Result: As expected, tag list gets parsed, each tag gets added separately.

Steps to reproduce the bug:

- View a node with inline tagging form displayed
- Tag with a comma-separated list of tags and click Add.
- Enter another tag into the text-field and click Add again, without reloading first.

Result: Apart from the single tags that were already created, a "junk tag" is now created that has the entire comma-separated list, as if the list were entered in quotes.

Comments

cburschka’s picture

Title: Adding tags in several stages causes "junk tag" to appear » Possible racing condition when adding tags in quick succession

Repeated testing leads me to suspect this is an AJAX race condition. After you add a new comma separated list of tags, the tags appear, for 1-2 seconds, as a single tag (with a single remove link) under the My Tags heading. After this time, they are replaced by a normal list of tags (the commas disappear, and each turns into its own remove link).

It is possible (though I speak as an AJAX newbie) that if you add a new tag during this crucial time before the list is split up (presumably this happens after a server request), the list will be interpreted as one single tag among several, and not be split up.

If this is the case, the possibilities are:

1.) Fix server-side checking to make sure tag lists get parsed even if several tag lists are sent to the server during the same request
2.) Disable the text field for a few seconds until the tags are properly parsed.

I am clueless about AJAX, however, so I have no chance of working on this.

cburschka’s picture

Further testing shows that the synchronization doesn't always happen after a few seconds, and in fact sometimes does not come at all. In this case, server-side validation is probably crucial, as it would be quite inconvenient to have the form disabled until the next reload, defeating the point of ajax.