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