You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Thies Edeling <te...@gmail.com> on 2014/06/05 00:41:37 UTC

Support for optgroup ?

Is there any support for optgroup's in Wicket? I can only find some
examples using ListView's and other hacky solutions so I'm guessing there
isn't :) Thanks !

gr
Thies

Re: Support for optgroup ?

Posted by Thies Edeling <te...@gmail.com>.
I just noticed, thanks for the update !


On Thu, Jun 5, 2014 at 8:45 AM, Martin Makundi <
martin.makundi@koodaripalvelut.com> wrote:

> Ah.. and token was:
>   private static final String TOKEN = " value=\"\"";
>
>
>
> 2014-06-05 9:42 GMT+03:00 Martin Makundi <
> martin.makundi@koodaripalvelut.com
> >:
>
> > The optgroup code might be buggy, here is a fresh one:
> >
> >   private String previouslyAppendedOptGroupLabel;
> >   private int choices;
> >
> >   /**
> >    * @see
> >
> org.apache.wicket.markup.html.form.AbstractChoice#onComponentTagBody(org.apache.wicket.markup.MarkupStream,
> > org.apache.wicket.markup.ComponentTag)
> >    */
> >   @Override
> >   protected void onComponentTagBody(MarkupStream markupStream,
> >       ComponentTag openTag) {
> >     previouslyAppendedOptGroupLabel = null;
> >     choices = getChoices().size();
> >     super.onComponentTagBody(markupStream, openTag);
> >   }
> >
> >
> > /**
> >    * @see
> >
> org.apache.wicket.markup.html.form.AbstractChoice#appendOptionHtml(org.apache.wicket.util.string.AppendingStringBuffer,
> > java.lang.Object, int, java.lang.String)
> >    */
> >   @Override
> >   protected void appendOptionHtml(AppendingStringBuffer buffer, T choice,
> >       int index, String selected) {
> >     AppendingStringBuffer tmp = new AppendingStringBuffer(50);
> >     super.appendOptionHtml(tmp, choice, index, selected);
> >
> >     if (getChoiceRenderer() instanceof IStyledChoiceRenderer) {
> >       IStyledChoiceRenderer<T> styledChoiceRenderer =
> > (IStyledChoiceRenderer<T>) getChoiceRenderer();
> >
> >       String currentOptGroupLabel =
> > styledChoiceRenderer.getOptGroupLabel(choice);
> >
> >       if (!Utils.equalsOrNull(currentOptGroupLabel,
> > previouslyAppendedOptGroupLabel)) {
> >         // OptGroup changed
> >         if (previouslyAppendedOptGroupLabel != null) {
> >           endOptGroup(buffer);
> >         }
> >
> >         if (currentOptGroupLabel != null) {
> >           // OptGroup started
> >           int start = tmp.indexOf("<option");
> >           StringBuilder label = new
> > StringBuilder(currentOptGroupLabel.length() + 19);
> >           label.append("<optgroup
> > label=\"").append(currentOptGroupLabel).append("\">");
> >           tmp.insert(start, label);
> >         }
> >       }
> >
> >       if ((currentOptGroupLabel != null) && (index == (choices-1))) {
> >         // Last option group must end too
> >         endOptGroup(tmp);
> >       }
> >
> >       {
> >         String cssClass =
> > styledChoiceRenderer.getOptionCssClassName(choice);
> >         if (cssClass != null) {
> >           int start = tmp.indexOf("<option");
> >           tmp.insert(start + 7, getClass(cssClass));
> >         }
> >       }
> >
> >       previouslyAppendedOptGroupLabel = currentOptGroupLabel;
> >     }
> >
> >     buffer.append(tmp);
> >   }
> >
> >   /**
> >    * @param cssClass
> >    * @return StringBuilder
> >    */
> >   private StringBuilder getClass(String cssClass) {
> >     return new StringBuilder(" class=\"").append(cssClass).append("\"");
> >   }
> >
> >   /**
> >    * @see
> >
> org.apache.wicket.markup.html.form.AbstractSingleSelectChoice#getDefaultChoice(java.lang.Object)
> >    */
> >   @Override
> >   protected CharSequence getDefaultChoice(Object selected) {
> >     CharSequence charSequence = super.getDefaultChoice(selected);
> >
> >     if (charSequence.toString().contains(TOKEN) && (getChoiceRenderer()
> > instanceof IStyledChoiceRenderer)) {
> >       AppendingStringBuffer buffer = new
> > AppendingStringBuffer(charSequence);
> >       IStyledChoiceRenderer<T> styledChoiceRenderer =
> > (IStyledChoiceRenderer<T>) getChoiceRenderer();
> >       String cssClass = styledChoiceRenderer.getOptionCssClassName(null);
> >       if (!Utils.isEmpty(cssClass)) {
> >         buffer.insert(buffer.indexOf(TOKEN), getClass(cssClass));
> >         return buffer;
> >       }
> >     }
> >
> >     return charSequence;
> >   }
> >
> >   /**
> >    * @param tmp
> >    */
> >   private void endOptGroup(AppendingStringBuffer tmp) {
> >     // OptGroup ended
> >     int start = tmp.lastIndexOf("</option>");
> >     tmp.insert(start + 9, "</optgroup>");
> >   }
> >
> >
> > 2014-06-05 9:37 GMT+03:00 Thies Edeling <te...@gmail.com>:
> >
> > thanks!
> >>
> >>
> >> On Thu, Jun 5, 2014 at 1:48 AM, Martin Makundi <
> >> martin.makundi@koodaripalvelut.com> wrote:
> >>
> >> > Look at:
> >> >
> >> >
> >> >
> >>
> http://mail-archives.apache.org/mod_mbox/wicket-users/200912.mbox/%3C303141550912040641r1e00841dudaacfefda94970b9@mail.gmail.com%3E
> >> >
> >> >
> >> > 2014-06-05 1:41 GMT+03:00 Thies Edeling <te...@gmail.com>:
> >> >
> >> > > Is there any support for optgroup's in Wicket? I can only find some
> >> > > examples using ListView's and other hacky solutions so I'm guessing
> >> there
> >> > > isn't :) Thanks !
> >> > >
> >> > > gr
> >> > > Thies
> >> > >
> >> >
> >>
> >
> >
>

Re: Support for optgroup ?

Posted by Martin Makundi <ma...@koodaripalvelut.com>.
Ah.. and token was:
  private static final String TOKEN = " value=\"\"";



2014-06-05 9:42 GMT+03:00 Martin Makundi <martin.makundi@koodaripalvelut.com
>:

> The optgroup code might be buggy, here is a fresh one:
>
>   private String previouslyAppendedOptGroupLabel;
>   private int choices;
>
>   /**
>    * @see
> org.apache.wicket.markup.html.form.AbstractChoice#onComponentTagBody(org.apache.wicket.markup.MarkupStream,
> org.apache.wicket.markup.ComponentTag)
>    */
>   @Override
>   protected void onComponentTagBody(MarkupStream markupStream,
>       ComponentTag openTag) {
>     previouslyAppendedOptGroupLabel = null;
>     choices = getChoices().size();
>     super.onComponentTagBody(markupStream, openTag);
>   }
>
>
> /**
>    * @see
> org.apache.wicket.markup.html.form.AbstractChoice#appendOptionHtml(org.apache.wicket.util.string.AppendingStringBuffer,
> java.lang.Object, int, java.lang.String)
>    */
>   @Override
>   protected void appendOptionHtml(AppendingStringBuffer buffer, T choice,
>       int index, String selected) {
>     AppendingStringBuffer tmp = new AppendingStringBuffer(50);
>     super.appendOptionHtml(tmp, choice, index, selected);
>
>     if (getChoiceRenderer() instanceof IStyledChoiceRenderer) {
>       IStyledChoiceRenderer<T> styledChoiceRenderer =
> (IStyledChoiceRenderer<T>) getChoiceRenderer();
>
>       String currentOptGroupLabel =
> styledChoiceRenderer.getOptGroupLabel(choice);
>
>       if (!Utils.equalsOrNull(currentOptGroupLabel,
> previouslyAppendedOptGroupLabel)) {
>         // OptGroup changed
>         if (previouslyAppendedOptGroupLabel != null) {
>           endOptGroup(buffer);
>         }
>
>         if (currentOptGroupLabel != null) {
>           // OptGroup started
>           int start = tmp.indexOf("<option");
>           StringBuilder label = new
> StringBuilder(currentOptGroupLabel.length() + 19);
>           label.append("<optgroup
> label=\"").append(currentOptGroupLabel).append("\">");
>           tmp.insert(start, label);
>         }
>       }
>
>       if ((currentOptGroupLabel != null) && (index == (choices-1))) {
>         // Last option group must end too
>         endOptGroup(tmp);
>       }
>
>       {
>         String cssClass =
> styledChoiceRenderer.getOptionCssClassName(choice);
>         if (cssClass != null) {
>           int start = tmp.indexOf("<option");
>           tmp.insert(start + 7, getClass(cssClass));
>         }
>       }
>
>       previouslyAppendedOptGroupLabel = currentOptGroupLabel;
>     }
>
>     buffer.append(tmp);
>   }
>
>   /**
>    * @param cssClass
>    * @return StringBuilder
>    */
>   private StringBuilder getClass(String cssClass) {
>     return new StringBuilder(" class=\"").append(cssClass).append("\"");
>   }
>
>   /**
>    * @see
> org.apache.wicket.markup.html.form.AbstractSingleSelectChoice#getDefaultChoice(java.lang.Object)
>    */
>   @Override
>   protected CharSequence getDefaultChoice(Object selected) {
>     CharSequence charSequence = super.getDefaultChoice(selected);
>
>     if (charSequence.toString().contains(TOKEN) && (getChoiceRenderer()
> instanceof IStyledChoiceRenderer)) {
>       AppendingStringBuffer buffer = new
> AppendingStringBuffer(charSequence);
>       IStyledChoiceRenderer<T> styledChoiceRenderer =
> (IStyledChoiceRenderer<T>) getChoiceRenderer();
>       String cssClass = styledChoiceRenderer.getOptionCssClassName(null);
>       if (!Utils.isEmpty(cssClass)) {
>         buffer.insert(buffer.indexOf(TOKEN), getClass(cssClass));
>         return buffer;
>       }
>     }
>
>     return charSequence;
>   }
>
>   /**
>    * @param tmp
>    */
>   private void endOptGroup(AppendingStringBuffer tmp) {
>     // OptGroup ended
>     int start = tmp.lastIndexOf("</option>");
>     tmp.insert(start + 9, "</optgroup>");
>   }
>
>
> 2014-06-05 9:37 GMT+03:00 Thies Edeling <te...@gmail.com>:
>
> thanks!
>>
>>
>> On Thu, Jun 5, 2014 at 1:48 AM, Martin Makundi <
>> martin.makundi@koodaripalvelut.com> wrote:
>>
>> > Look at:
>> >
>> >
>> >
>> http://mail-archives.apache.org/mod_mbox/wicket-users/200912.mbox/%3C303141550912040641r1e00841dudaacfefda94970b9@mail.gmail.com%3E
>> >
>> >
>> > 2014-06-05 1:41 GMT+03:00 Thies Edeling <te...@gmail.com>:
>> >
>> > > Is there any support for optgroup's in Wicket? I can only find some
>> > > examples using ListView's and other hacky solutions so I'm guessing
>> there
>> > > isn't :) Thanks !
>> > >
>> > > gr
>> > > Thies
>> > >
>> >
>>
>
>

Re: Support for optgroup ?

Posted by Martin Makundi <ma...@koodaripalvelut.com>.
The optgroup code might be buggy, here is a fresh one:

  private String previouslyAppendedOptGroupLabel;
  private int choices;

  /**
   * @see
org.apache.wicket.markup.html.form.AbstractChoice#onComponentTagBody(org.apache.wicket.markup.MarkupStream,
org.apache.wicket.markup.ComponentTag)
   */
  @Override
  protected void onComponentTagBody(MarkupStream markupStream,
      ComponentTag openTag) {
    previouslyAppendedOptGroupLabel = null;
    choices = getChoices().size();
    super.onComponentTagBody(markupStream, openTag);
  }


/**
   * @see
org.apache.wicket.markup.html.form.AbstractChoice#appendOptionHtml(org.apache.wicket.util.string.AppendingStringBuffer,
java.lang.Object, int, java.lang.String)
   */
  @Override
  protected void appendOptionHtml(AppendingStringBuffer buffer, T choice,
      int index, String selected) {
    AppendingStringBuffer tmp = new AppendingStringBuffer(50);
    super.appendOptionHtml(tmp, choice, index, selected);

    if (getChoiceRenderer() instanceof IStyledChoiceRenderer) {
      IStyledChoiceRenderer<T> styledChoiceRenderer =
(IStyledChoiceRenderer<T>) getChoiceRenderer();

      String currentOptGroupLabel =
styledChoiceRenderer.getOptGroupLabel(choice);

      if (!Utils.equalsOrNull(currentOptGroupLabel,
previouslyAppendedOptGroupLabel)) {
        // OptGroup changed
        if (previouslyAppendedOptGroupLabel != null) {
          endOptGroup(buffer);
        }

        if (currentOptGroupLabel != null) {
          // OptGroup started
          int start = tmp.indexOf("<option");
          StringBuilder label = new
StringBuilder(currentOptGroupLabel.length() + 19);
          label.append("<optgroup
label=\"").append(currentOptGroupLabel).append("\">");
          tmp.insert(start, label);
        }
      }

      if ((currentOptGroupLabel != null) && (index == (choices-1))) {
        // Last option group must end too
        endOptGroup(tmp);
      }

      {
        String cssClass =
styledChoiceRenderer.getOptionCssClassName(choice);
        if (cssClass != null) {
          int start = tmp.indexOf("<option");
          tmp.insert(start + 7, getClass(cssClass));
        }
      }

      previouslyAppendedOptGroupLabel = currentOptGroupLabel;
    }

    buffer.append(tmp);
  }

  /**
   * @param cssClass
   * @return StringBuilder
   */
  private StringBuilder getClass(String cssClass) {
    return new StringBuilder(" class=\"").append(cssClass).append("\"");
  }

  /**
   * @see
org.apache.wicket.markup.html.form.AbstractSingleSelectChoice#getDefaultChoice(java.lang.Object)
   */
  @Override
  protected CharSequence getDefaultChoice(Object selected) {
    CharSequence charSequence = super.getDefaultChoice(selected);

    if (charSequence.toString().contains(TOKEN) && (getChoiceRenderer()
instanceof IStyledChoiceRenderer)) {
      AppendingStringBuffer buffer = new
AppendingStringBuffer(charSequence);
      IStyledChoiceRenderer<T> styledChoiceRenderer =
(IStyledChoiceRenderer<T>) getChoiceRenderer();
      String cssClass = styledChoiceRenderer.getOptionCssClassName(null);
      if (!Utils.isEmpty(cssClass)) {
        buffer.insert(buffer.indexOf(TOKEN), getClass(cssClass));
        return buffer;
      }
    }

    return charSequence;
  }

  /**
   * @param tmp
   */
  private void endOptGroup(AppendingStringBuffer tmp) {
    // OptGroup ended
    int start = tmp.lastIndexOf("</option>");
    tmp.insert(start + 9, "</optgroup>");
  }


2014-06-05 9:37 GMT+03:00 Thies Edeling <te...@gmail.com>:

> thanks!
>
>
> On Thu, Jun 5, 2014 at 1:48 AM, Martin Makundi <
> martin.makundi@koodaripalvelut.com> wrote:
>
> > Look at:
> >
> >
> >
> http://mail-archives.apache.org/mod_mbox/wicket-users/200912.mbox/%3C303141550912040641r1e00841dudaacfefda94970b9@mail.gmail.com%3E
> >
> >
> > 2014-06-05 1:41 GMT+03:00 Thies Edeling <te...@gmail.com>:
> >
> > > Is there any support for optgroup's in Wicket? I can only find some
> > > examples using ListView's and other hacky solutions so I'm guessing
> there
> > > isn't :) Thanks !
> > >
> > > gr
> > > Thies
> > >
> >
>

Re: Support for optgroup ?

Posted by Thies Edeling <te...@gmail.com>.
thanks!


On Thu, Jun 5, 2014 at 1:48 AM, Martin Makundi <
martin.makundi@koodaripalvelut.com> wrote:

> Look at:
>
>
> http://mail-archives.apache.org/mod_mbox/wicket-users/200912.mbox/%3C303141550912040641r1e00841dudaacfefda94970b9@mail.gmail.com%3E
>
>
> 2014-06-05 1:41 GMT+03:00 Thies Edeling <te...@gmail.com>:
>
> > Is there any support for optgroup's in Wicket? I can only find some
> > examples using ListView's and other hacky solutions so I'm guessing there
> > isn't :) Thanks !
> >
> > gr
> > Thies
> >
>

Re: Support for optgroup ?

Posted by Martin Makundi <ma...@koodaripalvelut.com>.
Look at:

http://mail-archives.apache.org/mod_mbox/wicket-users/200912.mbox/%3C303141550912040641r1e00841dudaacfefda94970b9@mail.gmail.com%3E


2014-06-05 1:41 GMT+03:00 Thies Edeling <te...@gmail.com>:

> Is there any support for optgroup's in Wicket? I can only find some
> examples using ListView's and other hacky solutions so I'm guessing there
> isn't :) Thanks !
>
> gr
> Thies
>