Didn't think of that approach, looks good.  But to clear up my previous 
suggestion since I guess I wasn't clear enough and its useful in other 
situations also, you need to _override_ getAssociatedMarkupStream(boolean), not 
just call it.

public static final String JAVASCRIPT_PLACEHOLDER = "%JS_HERE%";
public MarkupStream getAssociatedMarkupStream(boolean throwEx) {
  String jsToInsert = ... // create your java script
  String html = ... // read HTML file via getClass().getResource
  html = html.replace(JAVASCRIPT_PLACEHOLDER, jsToInsert);
  IResourceStream srs = new StringResourceStream(html);
  MarkupResourceStream mrs = new MarkupResourceStream(srs);
  Markup markup = new SimpleMarkupLoader().loadMarkup(this, mrs, null, true);
  return new MarkupStream(markup);
}

and your panel

<wicket:panel>
<!-- some markup here -->
%JS_HERE%
<!-- more markup -->
</wicket:panel>

Craig
  _____  

From: Anton Veretennikov [mailto:anton.veretenni...@gmail.com]
To: users@wicket.apache.org
Sent: Sat, 10 Oct 2009 11:24:12 -0400
Subject: Re: how to inject arbitrary javascript code to a component markup?

For example I use this markup:
  
  <script wicket:id="focusScript"></script>
  
  and associate it with simple class:
  
  public class FocusScript extends Label {
  
    public FocusScript(String id, String focusFieldMarkupId, boolean selectAll) 
{
      super(id, getFocusScript(focusFieldMarkupId, selectAll));
      setEscapeModelStrings(false);
    }
  
    @Override
    protected void onComponentTag(ComponentTag tag) {
      tag.put("language", "javascript");
      tag.put("type", "text/javascript");
      super.onComponentTag(tag);
    }
  
    @Override
    protected void onComponentTagBody(MarkupStream markupStream,
  ComponentTag openTag) {
      super.onComponentTagBody(markupStream, openTag);
      checkComponentTag(openTag, "script");
    }
  
    public static String getFocusScript(String focusFieldMarkupId,
  boolean selectAll) {
      return "document.getElementById('" + focusFieldMarkupId + "').focus();" +
              (selectAll?("document.getElementById('" +
  focusFieldMarkupId + "').select()"):"");
    }
  
  
  }
  
  
  On Sat, Oct 10, 2009 at 11:11 PM, Igor Vaynberg <igor.vaynb...@gmail.com> 
wrote:
  > can you not just use a label whose model is the "<script>...</script>" 
string?
  >
  > -igor
  >
  > On Sat, Oct 10, 2009 at 5:34 AM, Paul Huang <paulhuan...@gmail.com> wrote:
  >> Suppose I write my own wicket component called XYZ that have the following
  >> markup
  >>
  >> <wicket:panel>
  >> <div wicket:id="id_xxx">
  >> ....
  >> </div>
  >> </wicket:panel>
  >>
  >> How can I inject some js code into this markup so when it's rendered in a
  >> page, I got something like
  >>
  >> <wicket:panel>
  >> <div wicket:id="id_xxx">
  >>  <script type="text/javascript">
  >>     var data=["abc", "efg"];
  >>     document.write(data[0]);
  >> </script>
  >> .....
  >> <div>
  >> <wicket:panel>
  >>
  >> You may ask why I dont simply keep the js code into the component markup
  >> "XYZ.html", this is because the value of "data" variable will be provided 
by
  >> the user and is not fixed.
  >>
  >
  > ---------------------------------------------------------------------
  > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  > For additional commands, e-mail: users-h...@wicket.apache.org
  >
  >
  
  ---------------------------------------------------------------------
  To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
  For additional commands, e-mail: users-h...@wicket.apache.org
  
    

Reply via email to