package fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component;

import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.IMarkupFragment;
import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.MarkupFactory;
import org.apache.wicket.markup.html.panel.FragmentMarkupSourcingStrategy;
import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
import org.apache.wicket.markup.html.panel.Panel;

public class DelegatedMarkupPanel extends Panel {

	private static final long serialVersionUID = -5918955824552499431L;

	private final Class<?> markupClazz;

	public DelegatedMarkupPanel(String id, Class<?> markupClazz) {
		super(id);
		this.markupClazz = markupClazz;
	}

	@Override
	public Markup getAssociatedMarkup() {
		return MarkupFactory.get().getMarkup((MarkupContainer) findParent(markupClazz), markupClazz, false);
	}

	@Override
	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
		return new FragmentMarkupSourcingStrategy(getId(), null) {
			@Override
			public IMarkupFragment chooseMarkup(Component component) {
				return getAssociatedMarkup();
			}
		};
	}

}

package fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component;

import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.IMarkupFragment;
import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.MarkupException;
import org.apache.wicket.markup.MarkupFactory;
import org.apache.wicket.markup.MarkupNotFoundException;
import org.apache.wicket.markup.html.panel.FragmentMarkupSourcingStrategy;
import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
import org.apache.wicket.markup.html.panel.Panel;

public class DelegatedMarkupPanel extends Panel {

	private static final long serialVersionUID = -5918955824552499431L;

	private final Class<?> markupClazz;

	public DelegatedMarkupPanel(String id, Class<?> markupClazz) {
		super(id);
		this.markupClazz = markupClazz;
	}

	@Override
	public Markup getAssociatedMarkup() {
		return MarkupFactory.get().getMarkup((MarkupContainer) findParent(markupClazz), markupClazz, false);
	}

	@Override
	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
		final String markupId = getId();
		return new FragmentMarkupSourcingStrategy(markupId, null) {
			@Override
			public IMarkupFragment chooseMarkup(Component component) {
				return getAssociatedMarkup();
			}
			
			/*
			 * Same implementation as in FragmentMarkupSourcingStrategy, with just one difference: we allow the use of any
			 * tag on the fragment definition, not just wicket:fragment. See the comment "OVERRIDDEN HERE" below.
			 */
			@Override
			public IMarkupFragment getMarkup(MarkupContainer container, Component child) {
				// Get the markup to search for the fragment markup
				IMarkupFragment markup = chooseMarkup(container);
				if (markup == null)
				{
					throw new MarkupException("The fragments markup provider has no associated markup. " +
						"No markup to search for fragment markup with id: " + markupId);
				}

				// Search for the fragment markup
				IMarkupFragment childMarkup = markup.find(markupId);
				if (childMarkup == null)
				{
					// There is one more option if the markup provider has associated markup
					MarkupContainer markupProvider = getMarkupProvider(container);
					Markup associatedMarkup = markupProvider.getAssociatedMarkup();
					if (associatedMarkup != null)
					{
						markup = associatedMarkup;
						if (markup != null)
						{
							childMarkup = markup.find(markupId);
						}
					}
				}

				if (childMarkup == null)
				{
					throw new MarkupNotFoundException("No Markup found for Fragment '" + markupId
							+ "' in providing markup container " + getMarkupProvider(container));
				}
				// OVERRIDDEN HERE: we want to allow the use of any tag, not just wicket:fragment
//				else
//				{
//					MarkupElement fragmentTag = childMarkup.get(0);
//					if ((fragmentTag instanceof WicketTag && ((WicketTag)fragmentTag).isFragementTag()) == false)
//					{
//						throw new MarkupNotFoundException("Markup found for Fragment '" + markupId
//								+ "' in providing markup container " + getMarkupProvider(container)
//								+ " is not a fragment tag");
//					}
//				}

				if (child == null)
				{
					return childMarkup;
				}

				// search for the child inside the fragment markup
				return childMarkup.find(child.getId());
			}
		};
	}

}

Fix pour le problème sur le DelegatedMarkupPanel lors du passage à wicket 6.13.0.