[ 
https://issues.apache.org/jira/browse/WICKET-1716?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Peter Ertl updated WICKET-1716:
-------------------------------

    Attachment: wicket-autocompleter-with-css-class-for-1.4.x.patch
                wicket-autocompleter-with-css-class-for-1.3.x.patch

> make autocompleter more customizable
> ------------------------------------
>
>                 Key: WICKET-1716
>                 URL: https://issues.apache.org/jira/browse/WICKET-1716
>             Project: Wicket
>          Issue Type: New Feature
>          Components: wicket-extensions
>            Reporter: Peter Ertl
>         Attachments: wicket-autocompleter-with-css-class-for-1.3.x.patch, 
> wicket-autocompleter-with-css-class-for-1.4.x.patch
>
>
> disclaimer: Excuse this somehow large explanation :-(
> Problems in current wicket autocompleter implementation (including patch)
> Wicket will by default make the width of the autocompleter the same as the 
> width of the related input field. This is often useful but also can be really 
> nasty sometimes. Imagine you have a input control to enter the ISBN of a book 
> (size: 13 digits). While typing any parts of the book's title, author, genre, 
> year or ISBN the autocompleter should popup a list of book entries like which 
> contains the matching input string:
>   autocompleter output (structure)
>   --- item 1 ---
>   ISBN 1
>   AUTHOR 1
>   TITLE 1
>   GENRE 1
>   YEAR 1 
>   --- item 2 ---
>   ISBN 2
>   AUTHOR 2
>   TITLE 2
>   GENRE 2
>   YEAR 2
>   --------------
>   ...
>   --- item n ---
> When pressing enter the input field will be filled with the ISBN of the 
> currently selected book.
> BTW since WICKET-488 is resolved the other read-only fields of the form will 
> contain title, author, etc. (Thanks, Igor!! :-)
> Now the problem: Typically the autocompleter entry (especially the book 
> title) will be a lot a longer than the 13 digit ISBN number. The only chance 
> is to make the wicket autocompleter selection as large as required is to make 
> the input field ridiculously long (something like 80 chars or even more). 
> This is really ugly and wastes a lot of space in the user interface for no 
> reason. Also it will confuse the user who thinks the input really needs to be 
> that long.
> Typically wicket's autocompleter markup looks like this:
>  HTML
>   <div id="isbn1-autocomplete-container" style="overflow: auto; position: 
> absolute; left: 8px; top: 30px; width: 155px;" class="wicket-aa-container">
>         <div class="wicket-aa" id="text1-autocomplete">
>                 <ul>
>                     <li class="selected" textvalue="978-1932394986">.....</li>
>                     <li textvalue="978-1932394222">.....</li>
>                     ....
>                     <li textvalue="978-1932311186">.....</li>
>                 </ul>
>         </div>
>   </div>
> The 'style' attribute in the <div> contains 'width:155px' and is impossible 
> to override from CSS because 'style' is "stronger" (the 'cascading' in css).
> So I attached a patch to enable / disable the adjustment of the width to the 
> input field.
>   JAVA
>     final AutoCompleteSettings opts = new AutoCompleteSettings();
>     opts.setAdjustInputWidth(false);
>     field.add(new AutoCompleteBehavior(renderer, opts)
>     ...
> The markup will now look like this:
>   HTML
>     <div id="isbn1-autocomplete-container" style="overflow: auto; position: 
> absolute; left: 8px; top: 30px;" class="wicket-aa-container">
> Notice the lack of the 'width' attribute...
> Now to resolve problem #1 you could write:
>   MYSTYLE.CSS
>     .wicket-aa-container {
>       width: 600px; 
>     }
> However this will not only grow the great book autocompleter to the desired 
> width but also other autocompleters ever being used on that as well. Also you 
> can _NOT_ do this:
>   MYSTYLE.CSS
>     #isbn1-autocomplete-container {
>       width: 600px;
>     }
> Because a linked stylesheet is typically static (and cached by the browser) 
> and the DOM id of the autocompleter is generated dynamically. I don't 
> consider generating dynamic CSS an option for such a simple problem.
> So what would be just great is the possibility to add an extra css class to 
> the container tag:
>   JAVA
>     final AutoCompleteSettings opts = new AutoCompleteSettings();
>     opts.setCssClassName("book-autocompleter");
>     opts.setAdjustInputWidth(false);
>     field.add(new AutoCompleteBehavior(renderer, opts)
>     ...
>   HTML
>     <div id="isbn1-autocomplete-container" style="overflow: auto; position: 
> absolute; left: 8px; top: 30px;" class="wicket-aa-container 
> book-autocompleter">
> You will immediately notice the additional class name 'book-autocompleter'
>   MYSTYLE.CSS
>     .book-autocompleter {
>       width: 600px;
>     }
> To summarize my patch:
> To extra methods in 
> org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings
>   /**
>    * Sets an CSS class name to add to the autocompleter markup container
>    * <p/>
>    * This makes it easier to have multiple autocompleters in your application
>    * with different style and layout.
>    *
>    * @param cssClassName valid CSS class name
>    */
>   public void setCssClassName(final String cssClassName)
>   /**
>    * Adjust the width of the autocompleter selection window to the width of 
> the related input field.
>    * <p/>
>    * Otherwise the size will depend on the default browser behavior and CSS.
>    *
>     * @param adjustInputWidth  <code>true</code> if the autocompleter should 
> have the same size  as
>    *                           the input field, <code>false</code> for 
> default browser behavior
>    */
>     public void setAdjustInputWidth(final boolean adjustInputWidth)
> Unless you call these methods the autocompleter will behave exactly as before 
> so this will not break previous code.
> Would be just great to see this patch applied :-)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to