A tab component mixin would fit here nicely :)
so a wrapper does not have to be arround every tab.

Davor Hrg

On Tue, Mar 11, 2008 at 3:34 PM, Howard Lewis Ship <[EMAIL PROTECTED]> wrote:
> You should think not of the Tabs conponent "controlling" the Tab
>  components, but of all of them working together.
>
>  The Tabs component can place an object into the Environment.
>
>  The Tab components can retrieve that object, to "register" themselves
>  so that the Tabs can render the correct markup.
>
>  This is the relationship between Form and TextField (and friends).
>
>
>
>
>  On Tue, Mar 11, 2008 at 6:31 AM, Davor Hrg <[EMAIL PROTECTED]> wrote:
>  > actualy,
>  >  you need not even do anything on the server side for such tabs,
>  >
>  >  this can be easily achieved with a small javascript function.
>  >  go through all children and generate tab controls taking title attribute
>  >  as ctrl text:
>  >
>  >  child.getAttribute("title");
>  >
>  >  for example I have a small hacked up js just for it
>  >  it uses label instead title
>  >
>  >
>  >  var TapestryUtil = {
>  >     createTabs: function(id){
>  >         var elem = $(id);
>  >         var selected = elem.getAttribute("selected");
>  >         var tabs = document.createElement("DIV");
>  >         tabs.className = "minitab";
>  >         var cont = document.createElement("DIV");
>  >         cont.className = "minitab_content";
>  >         var ch;
>  >         while(ch = elem.firstChild){
>  >             elem.removeChild(ch);
>  >             cont.appendChild(ch);
>  >             var code = ch.getAttribute("code");
>  >             var label = ch.getAttribute("label");
>  >
>  >                 var tab = document.createElement("A");
>  >                 tab.href="#"+(code||"");
>  >                 tab.className = "minitab";
>  >                 tab.innerHTML = label || code || "unlabelled";
>  >             tab._refContent = ch;
>  >             tab.onclick = tabClick;
>  >
>  >             if(code != null && selected != "null" && selected == code){
>  >                 ch.style.display == "";
>  >             }else if(selected != null)
>  >                 ch.style.display == "none";
>  >
>  >             if(ch.style.display != "none") tab.className += " 
> selected_minitab";
>  >             tabs.appendChild(tab);
>  >         }
>  >         elem.appendChild(tabs);
>  >         elem.appendChild(cont);
>  >
>  >         function tabClick(){
>  >             var current = this;
>  >             this.blur();
>  >             var ch = current.parentNode.firstChild;
>  >             while(ch){
>  >                 if(ch != current){
>  >                         Element.removeClassName(ch,"selected_minitab");
>  >                         ch._refContent.style.display = "none";
>  >                 }else{
>  >                         Element.addClassName(ch,"selected_minitab");
>  >                         ch._refContent.style.display = "";
>  >                 }
>  >                 ch = ch.nextSibling;
>  >             }
>  >             return false;
>  >         }
>  >     }
>  >
>  >
>  >  };
>  >
>  >  Davor Hrg
>  >
>  >
>  >
>  >
>  >  On Tue, Mar 11, 2008 at 1:15 PM, David Marquis <[EMAIL PROTECTED]> wrote:
>  >  > Hi,
>  >  >
>  >  >  He's having the same problem I had some time ago.
>  >  >  Suppose I want to create a Tab Component and I want to be able to
>  >  >  define it like this in the templates:
>  >  >
>  >  >  <t:tabs t:id="myTabs">
>  >  >    <t:tab t:id="tabOne" title="First tab">
>  >  >        <h1>Body of tab1</h1>
>  >  >        <p>Continuing body...</p>
>  >  >    </t:tab>
>  >  >    <t:tab t:id="tabTwo" title="Second tab">
>  >  >        <h1>Body of tab2</h1>
>  >  >        <p>Continuing body...</p>
>  >  >    </t:tab>
>  >  >  </t:tabs>
>  >  >
>  >  >  If would then like to 'render' this about that way:
>  >  >
>  >  >  <div class="tabs">
>  >  >     <ul class="tabTitles">
>  >  >        <li><a href="." onclick="switchtabs(1);">First tab</li>
>  >  >        <li><a href="." onclick="switchtabs(2);">Second tab</li>
>  >  >     </ul>
>  >  >     <div id="tabOne" class="tab selected">
>  >  >        <h1>Body of tab1</h1>
>  >  >        <p>Continuing body...</p>
>  >  >     </div>
>  >  >     <div id="tabTwo" class="tab">
>  >  >        <h1>Body of tab2</h1>
>  >  >        <p>Continuing body...</p>
>  >  >     </div>
>  >  >  </div>
>  >  >
>  >  >  This is, I think, the most natural way of expressing tabs.
>  >  >  But such a thing is not possible, because the Tabs component cannot
>  >  >  accessing its child Tag components dynamically.
>  >  >  More: if you provide a body for a component (like above), you cannot
>  >  >  provide a template for this same component.
>  >  >
>  >  >  I haven't found a way to implement such a component, and I think I had
>  >  >  about the same initial problem as Christopher : A component cannot
>  >  >  easily access its 'children' defined in the base template, build an
>  >  >  internal model from that, and render using this model and an internal
>  >  >  template.
>  >  >
>  >  >  --
>  >  >  David
>  >  >
>  >  >
>  >  >
>  >  >  On 11-Mar-08, at 6:57 AM, Davor Hrg wrote:
>  >  >
>  >  >  > explain what are zou trzing to achieve, maybe we can offer a 
> different
>  >  >  > approach..
>  >  >  >
>  >  >  > Davor Hrg
>  >  >  >
>  >  >  > On Tue, Mar 11, 2008 at 10:33 AM, Cordenier Christophe
>  >  >  > <[EMAIL PROTECTED]> wrote:
>  >  >  >> Thank you for your answer,
>  >  >  >>
>  >  >  >> But actually my component must access its child in a dynamic way.
>  >  >  >> It will be used in different context for analysis purpose.
>  >  >  >>
>  >  >  >> I've been searching for different ways to access a component body.
>  >  >  >>
>  >  >  >> For exemple, by using "nestedId" at creation time by decorating the
>  >  >  >> PageElementFactory to identify if a component is contained in my
>  >  >  >> component, but the nestedId does not contain the id of the parent
>  >  >  >> component but is only suffixed to the container nested id.
>  >  >  >>
>  >  >  >> By decorating ComponentPageElement and intercepting "addToBody"
>  >  >  >> method call for my component only, but it was not enough for the
>  >  >  >> children and I don't want to generalize the use of these kind of
>  >  >  >> hooks or wrapping mechanism because of the "internal" aspect of the
>  >  >  >> PageElementFactory and ComponentPageElement classes.
>  >  >  >>
>  >  >  >> Best regards,
>  >  >  >> Christophe.
>  >  >  >>
>  >  >  >> -----Message d'origine-----
>  >  >  >> De : Davor Hrg [mailto:[EMAIL PROTECTED]
>  >  >  >> Envoyé : mardi 11 mars 2008 10:08
>  >  >  >> À : Tapestry users
>  >  >  >> Objet : Re: T5 : How to access to a Component Body ?
>  >  >  >>
>  >  >  >>
>  >  >  >>
>  >  >  >> you can not access child components geenricaly,
>  >  >  >> but you can access blocks by id.
>  >  >  >>
>  >  >  >> you can embed components
>  >  >  >> @Component TextField name; //component's class is decided here
>  >  >  >> and in template simply put:
>  >  >  >> <div t:id="name"/>
>  >  >  >>
>  >  >  >>
>  >  >  >> but to access a textfield as Field you can:
>  >  >  >> @InjectComponent private Field name;
>  >  >  >> and then component's class is resolved from the template
>  >  >  >> so in the template you must put:
>  >  >  >> <t:textfield id="name"/>
>  >  >  >>
>  >  >  >>
>  >  >  >> you can not use it like this:
>  >  >  >> @Component private Field name;
>  >  >  >> and in template
>  >  >  >> <t:textfield id="name"/>
>  >  >  >>
>  >  >  >>
>  >  >  >> Davor Hrg
>  >  >  >> On Tue, Mar 11, 2008 at 9:25 AM, Cordenier Christophe
>  >  >  >> <[EMAIL PROTECTED]> wrote:
>  >  >  >>> Hello,
>  >  >  >>>
>  >  >  >>> I'm currently working on a component that needs to access the
>  >  >  >>> content of its body to extract informations like parameters, or
>  >  >  >>> persistent variable used by the components declared in its body.
>  >  >  >>>
>  >  >  >>> Actually, the ComponentResources class allows me to access the
>  >  >  >>> container of a component, but it appears that a child is not
>  >  >  >>> "contained in" the component.
>  >  >  >>> This should have helped me from a down-top view.
>  >  >  >>>
>  >  >  >>> And I didn't find any method to access the body of a component.
>  >  >  >>>
>  >  >  >>> Does anyone knows a way to access the children of a component ?
>  >  >  >>>
>  >  >  >>> Best Regards,
>  >  >  >>> Christophe Cordenier.
>  >  >  >>>
>  >  >  >>>
>  >  >  >>> Ce message et les pi?ces jointes sont confidentiels et r?serv?s ?
>  >  >  >>> l'usage exclusif de ses destinataires. Il peut ?galement ?tre prot?
>  >  >  >>> g? par le secret professionnel. Si vous recevez ce message par
>  >  >  >>> erreur, merci d'en avertir imm?diatement l'exp?diteur et de le d?
>  >  >  >>> truire. L'int?grit? du message ne pouvant ?tre assur?e sur
>  >  >  >>> Internet, la responsabilit? du groupe Atos Origin ne pourra ?tre
>  >  >  >>> recherch?e quant au contenu de ce message. Bien que les meilleurs
>  >  >  >>> efforts soient faits pour maintenir cette transmission exempte de
>  >  >  >>> tout virus, l'exp?diteur ne donne aucune garantie ? cet ?gard et
>  >  >  >>> sa responsabilit? ne saurait ?tre recherch?e pour tout dommage r?
>  >  >  >>> sultant d'un virus transmis.
>  >  >  >>>
>  >  >  >>> This e-mail and the documents attached are confidential and
>  >  >  >>> intended solely for the addressee; it may also be privileged. If
>  >  >  >>> you receive this e-mail in error, please notify the sender
>  >  >  >>> immediately and destroy it. As its integrity cannot be secured on
>  >  >  >>> the Internet, the Atos Origin group liability cannot be triggered
>  >  >  >>> for the message content. Although the sender endeavours to
>  >  >  >>> maintain a computer virus-free network, the sender does not
>  >  >  >>> warrant that this transmission is virus-free and will not be
>  >  >  >>> liable for any damages resulting from any virus transmitted.
>  >  >  >>>
>  >  >  >>>
>  >  >  >>> 
> ---------------------------------------------------------------------
>  >  >  >>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>  >  >  >>> For additional commands, e-mail: [EMAIL PROTECTED]
>  >  >  >>>
>  >  >  >>>
>  >  >  >>
>  >  >  >> 
> ---------------------------------------------------------------------
>  >  >  >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>  >  >  >> For additional commands, e-mail: [EMAIL PROTECTED]
>  >  >  >>
>  >  >  >>
>  >  >  >>
>  >  >  >>
>  >  >  >> Ce message et les pièces jointes sont confidentiels et réservés à
>  >  >  >> l'usage exclusif de ses destinataires. Il peut également être
>  >  >  >> protégé par le secret professionnel. Si vous recevez ce message par
>  >  >  >> erreur, merci d'en avertir immédiatement l'expéditeur et de le
>  >  >  >> détruire. L'intégrité du message ne pouvant être assurée sur
>  >  >  >> Internet, la responsabilité du groupe Atos Origin ne pourra être
>  >  >  >> recherchée quant au contenu de ce message. Bien que les meilleurs
>  >  >  >> efforts soient faits pour maintenir cette transmission exempte de
>  >  >  >> tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa
>  >  >  >> responsabilité ne saurait être recherchée pour tout dommage
>  >  >  >> résultant d'un virus transmis.
>  >  >  >>
>  >  >  >>
>  >  >  >>
>  >  >  >> This e-mail and the documents attached are confidential and
>  >  >  >> intended solely for the addressee; it may also be privileged. If
>  >  >  >> you receive this e-mail in error, please notify the sender
>  >  >  >> immediately and destroy it. As its integrity cannot be secured on
>  >  >  >> the Internet, the Atos Origin group liability cannot be triggered
>  >  >  >> for the message content. Although the sender endeavours to maintain
>  >  >  >> a computer virus-free network, the sender does not warrant that
>  >  >  >> this transmission is virus-free and will not be liable for any
>  >  >  >> damages resulting from any virus transmitted.
>  >  >  >>
>  >  >  >>
>  >  >  >> 
> ---------------------------------------------------------------------
>  >  >  >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>  >  >  >> For additional commands, e-mail: [EMAIL PROTECTED]
>  >  >  >>
>  >  >  >>
>  >  >  >
>  >  >  > ---------------------------------------------------------------------
>  >  >  > To unsubscribe, e-mail: [EMAIL PROTECTED]
>  >  >  > For additional commands, e-mail: [EMAIL PROTECTED]
>  >  >  >
>  >  >
>  >  >
>  >
>  >  ---------------------------------------------------------------------
>  >  To unsubscribe, e-mail: [EMAIL PROTECTED]
>  >  For additional commands, e-mail: [EMAIL PROTECTED]
>  >
>  >
>
>
>
>  --
>  Howard M. Lewis Ship
>
>  Creator Apache Tapestry and Apache HiveMind
>
>
>
>  ---------------------------------------------------------------------
>  To unsubscribe, e-mail: [EMAIL PROTECTED]
>  For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to