I have just tried your patch and I noticed a problem. The problem is that "<< me >>" in the assignee list is removed by your patch. I think this is a big problem because "<< me >>" is very useful and probably many people use it.

This improvement looks very nice and it'll improve Redmine UI/UX. I'm wondering if it is possible to make this implementation like a widget or JS function that can be reused easily in other parts from Redmine (eg: selects, add watchers, plugins).

The screenshots look nice indeed. However, in my view1 there are some issues with this patch series in its current state2:

I'll start by saying that I agree with what Marius wrote in note#7: "[...] if it is possible to make this implementation like a widget or JS function that can be reused easily in other parts from Redmine (eg: selects, add watchers, plugins)". I actually think it might even be a requirement.

This functionality is only implemented in the issues/_attributes.html.erb partial, while there are:

one: more current uses of principals_options_for_select that (might) need the same functionality:

ProjectsHelper#project_default_assigned_to_options

issues/bulk_edit.html.erb view

issue_categories/_form.html.erb view

two: other similar parts of the current Redmine core code and indeed even plugins that could benefit from this change (again referring to Marius' quote here) [two other practical use-cases I though of were the user custom fields and even version selects (with the second one I'm thinking especially about the currently sometimes very long lists)].This becomes a problem (duplication) when the same functionality is being implemented in those other places too. Because of that it would be better if most of the implementation (logic) is outside of the views/partials. I haven't looked up what the possibilities here exactly are but what about an ApplicationHelper#principals_options_for_autocomplete or something? And what about some extraction/abstraction into (at least) (a) reusable JS function(s)?

And btw: what about the raw usage? Is is safe? I'd have to look into it more closely.

What about some top-padding for the groups separator? Maybe a little less padding around the items themselfs? Maybe style the separator like the other opt-group implementations in Redmine3 by omitting the dashes and making the label bold. I should keep the icon in this case.

I see several CSS styles and li element styles. Does this affect themes/themeability? Transfer to application.css? Responsive styling ok? I haven't tested it.

This is I think the biggest problem currently: this patch misses an equivalent of :required => @issue.required_attribute?('assigned_to_id') introduced in r9977 for #703 and #3521.

All in all, I don't think that these patches are ready for integration yet.

1 disclaimer one: I don't consider myself a JavaScript guru.

2 disclaimer two: I haven't actually run this code myself (yet); I only did a (superficial) visual review of the patches from note#12.