Hi Matej. Have you read the the forwarded part of the last message?

Because that is where I explained the behavior. Basically in Firefox if I
replace a panel with two subpanels the second subpanel doesn't get replaced.
Please check out the message bellow, the one I forwarded.

If you see the org/apache/wicket/ajax/wicket-ajax.js in
wicket-1.3.0-beta4.jar. You will see the code for the *
Wicket.replaceOuterHtml*

In there, I understand that there are two main things going on:

1) There is some code that it is not used and so, in our version we
commented it.

2) And most important, we fixed a the issue for us by moving the nodes in
the tree herarchy that appears wrongly in the get *
range.createContextualFragment*() function from the Gecko (firefox) engine.
If there are many subpanels, the range uncorrectly parses the content,
resulting in a fragment that contains many childs instead of one.

The HTML is explained bellow, if that explanation fails I'll try to send you
a file. ok?

Our function basically call the *Wicket.replaceOuterHtml=function(){ blah,
blah* to replace the one in the framework with the fixed one. And we call
the replacement on a window.setTimeOut() on the specific page in which we
have the panel with subpanels.

thanks,

f(t)



On 10/30/07, Matej Knopp <[EMAIL PROTECTED]> wrote:
>
> Sorry, I'm not sure I follow.
>
> there is some code in replaceOuterHtml that seems redundant so it could
> be like this:
>
> Wicket.replaceOuterHtml = function(element, text) {
>
>     if (Wicket.Browser.isIE()) {
>        Wicket.replaceOuterHtmlIE(element, text);
>     } else if (Wicket.Browser.isSafari() || Wicket.Browser.isOpera()) {
>        Wicket.replaceOuterHtmlSafari(element, text);
>     } else /* GECKO */ {
>        // create range and fragment
>         var range = element.ownerDocument.createRange();
>         range.selectNode(element);
>        var fragment = range.createContextualFragment(text);
>
>         element.parentNode.replaceChild(fragment, element);
>     }
> }
>
> Still I'm not sure what the problem is that your code solves. Can you
> please provide me a html file where the replaceOuterHtml call fails?
>
> -Matej
>
>
> Francisco Diaz Trepat - gmail  wrote / napĂ­sal(a):
> > Hi a cowerker here might have found something here. We have fix the
> issue by
> > replacing the *Wicket.replaceOuterHtml* function.
> >
> > Could this be a BUG?
> >
> > I have forwarded the initial message that explains the behavior.
> >
> > Here is the code that fixed our problem:
> >
> > f(t)
> >
> >
> >
> > //
> >
> --------------------------------------------------------------------------------
> > // Hack that demonstrates a possible fix for a problem with Gecko based
> > browsers.
> > // The problem happens in this line:
> > //    var fragment = range.createContextualFragment(text);
> > // If there are many subpanels, the range uncorrectly parses the
> content,
> > resulting
> > // in a fragment that contains many childs instead of one.
> > // The first child is the first subpanel, and the rest are the other
> > subpanels,
> > // which are incorrectly hang at the same level as the main panel,
> instead
> > of being
> > // childs of it.
> >
> > function replaceWicketReplaceOuterHtml() {
> >   Wicket.replaceOuterHtml = function(element, text) {
> >     if (Wicket.Browser.isIE()) {
> >       Wicket.replaceOuterHtmlIE(element, text);
> >     } else if (Wicket.Browser.isSafari() || Wicket.Browser.isOpera()) {
> >       Wicket.replaceOuterHtmlSafari(element, text);
> >     } else /* GECKO */ {
> >       // create range and fragment
> >       var range = element.ownerDocument.createRange();
> >       range.selectNode(element);
> >       var fragment = range.createContextualFragment(text);
> >
> >       // The following code seems useless, and then is commented out
> >         // get the elements to be added
> >         //var elements = new Array();
> >         //for (var i = 0; i < fragment.childNodes.length; ++i)
> >         //elements.push(fragment.childNodes[i]);
> >
> >       // move additional subnodes to the correct place in the dom
> >       if (fragment.childNodes.length > 1) {
> >         // the for clause intentionally starts from 1,
> >         // to fix only the wrongly hanging subnodes.
> >         for (var i = 1; i < fragment.childNodes.length; ++i) {
> >           var otherNode = fragment.childNodes[i];
> >
> >           fragment.childNodes[0].childNodes[0].appendChild(otherNode);
> >         }
> >       }
> >
> >       element.parentNode.replaceChild(fragment, element);
> >     }
> >   }
> > }
> >
> > window.setTimeout(replaceWicketReplaceOuterHtml, 1000);
> > //
> >
> --------------------------------------------------------------------------------
> >
> >
> > ---------- Forwarded message ----------
> > From: Francisco Diaz Trepat - gmail <[EMAIL PROTECTED]>
> > Date: Oct 23, 2007 10:27 PM
> > Subject: Re: Ajax Panel Replacement Issue on Fireforx only (Kind of
> Complex
> > Scenario)
> > To: users@wicket.apache.org
> >
> > Thanks Matej, I will but further ahead. I'll try to see what is going on
> > with more detail by using FIREBUG toolbar or something of the sort.
> >
> >
> >
> >
> > If everything else fails I'll provide a QuickStart.
> >
> >
> > Thanks,
> > f(t)
> >
> > On 10/23/07, Matej Knopp <[EMAIL PROTECTED]> wrote:
> >> Can you provide a quickstart?
> >>
> >> -Matej
> >>
> >> On 10/23/07, Francisco Diaz Trepat - gmail
> >> <[EMAIL PROTECTED]> wrote:
> >>> Hi. I'm going to try to explain the best that I can and without
> posting
> >> code
> >>> at first the issue that is happening.
> >>>
> >>> I have the following panels A and C. A has two instances of B nested
> >> inside
> >>> of it. C is empty:
> >>>
> >>> [
> >>>
> >>> ==PANEL-A==
> >>>
> >>>     [
> >>>
> >>>     ==PANEL-B1==
> >>>
> >>>     ]
> >>>
> >>>     [
> >>>
> >>>     ==PANEL-B2==
> >>>
> >>>     ]
> >>>
> >>> ]
> >>>
> >>>
> >>> [
> >>> ==PANEL-C==
> >>> ]
> >>>
> >>> What happens is that on another Panel that represent the Page content,
> >> lets
> >>> call it ContentPanel I need to toggle between panels A and C with the
> >> click
> >>> of an Ajax Link.
> >>>
> >>> The first state is with panel C that it is empty (actually with lots
> of
> >>> HiddenFields, but empty visually). On click I need to Show the A panel
> >> that
> >>> has viewable content. Finally on another click I need to go back to
> the
> >>> original state of C panel.
> >>>
> >>> So far so good. The issue is as follows:
> >>>
> >>> The problem happens on Firefox only (latest version 2.0.0.8) (on IE 6
> >> and 7
> >>> it is not an issue as everything works fine).
> >>>
> >>> What happens is that I click on the link, and panel A shows perfectly.
> >> But
> >>> when I click again to put the C panel back, the A panel gets Partially
> >>> removed, that is panel A's first panel B instance B1 gets removed, but
> >> B2 is
> >>> not removed and it is still visible, plus I get the C panel, as C
> panel
> >>> doesn't have viewable content it doesn't add to the visual problem.
> >> *Ej*:
> >>> [
> >>>
> >>> ==PANEL-A==
> >>>
> >>>
> >>>     [
> >>>
> >>>     ==PANEL-B2==
> >>>
> >>>     ]
> >>>
> >>> ]
> >>>
> >>> [
> >>> ==PANEL-C==
> >>> ]
> >>>
> >>> Now If I click again, I get Panel A with "2 instances of B2" as panel
> B2
> >> was
> >>> not removed.
> >>> [
> >>>
> >>> ==PANEL-A==
> >>>
> >>>     [
> >>>
> >>>     ==PANEL-B1==
> >>>
> >>>     ]
> >>>
> >>>     [
> >>>
> >>>     ==PANEL-B2==
> >>>
> >>>     ]
> >>>
> >>>     [
> >>>
> >>>     ==PANEL-B2==
> >>>
> >>>     ]
> >>>
> >>> ]
> >>>
> >>> So and so forth every click and click, I get panel A partially removed
> >> and
> >>> when added again I have another instance of B2 as it is never removed.
> >>>
> >>>
> >>>
> >>> Any Ideas?
> >>>
> >>> thanks,
> >>>
> >>> f(t)
> >>>
> >> ---------------------------------------------------------------------
> >> 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