Dear Wiki user, You have subscribed to a wiki page or wiki category on "Tapestry Wiki" for change notification.
The following page has been changed by BenGidley: http://wiki.apache.org/tapestry/Tapestry5HowToXhtml The comment on the change is: Adding 5.1 instructions ------------------------------------------------------------------------------ + Tapestry by default generates HTML or XML depending on the content type of your application. + + The method varies by version + + * [#50 Tapestry 5.0 < 13] + * [#5013 Tapestry 5.0 > 13] + * [#51 Tapestry 5.1] + + + == Tapestry 5.0 < 13 == + Step 1: create your own implementation of MarkupWriterFactory: @@ -71, +82 @@ }}} + == Tapestry 5.0 > 13 == + The version above does not work for last version of T5 (something like above 5.0.13). This is an adaptation of the code working with 5.0.14 : 1/ Replace the XhtmlMarkupWriterFactoryImpl by this one : @@ -140, +153 @@ } }}} + + == Tapestry 5.1 == + + Create a class XhtmlMarkupWriterFactory to replace the marker factory + + + {{{ + public class XhtmlMarkupWriterFactory implements MarkupWriterFactory { + private class XhtmlMarkupModel extends AbstractMarkupModel { + private final Set<String> DONT_ABRV = new HashSet<String>( + Arrays.asList("script", "div", "span", "p", "textarea", "select")); + + public EndTagStyle getEndTagStyle(String element) { + boolean isDontAbr = DONT_ABRV.contains(element); + return isDontAbr ? EndTagStyle.REQUIRE : EndTagStyle.ABBREVIATE; + + } + + public XhtmlMarkupModel() { + this(false); + } + + public XhtmlMarkupModel(boolean useApostropheForAttributes) { + super(useApostropheForAttributes); + } + + /** + * Returns true. + */ + public boolean isXML() { + return true; + } + } + + private final PageContentTypeAnalyzer analyzer; + + private final RequestPageCache cache; + + + private final MarkupModel xmlModel = new XhtmlMarkupModel(); + + private final MarkupModel xmlPartialModel = new XhtmlMarkupModel(true); + + public XhtmlMarkupWriterFactory(PageContentTypeAnalyzer analyzer, RequestPageCache cache) { + this.analyzer = analyzer; + this.cache = cache; + } + + public MarkupWriter newMarkupWriter(ContentType contentType) { + return newMarkupWriter(contentType, false); + } + + public MarkupWriter newPartialMarkupWriter(ContentType contentType) { + return newMarkupWriter(contentType, true); + } + + @SuppressWarnings({ "UnusedDeclaration" }) + private MarkupWriter newMarkupWriter(ContentType contentType, boolean partial) { + boolean isHTML = contentType.getMimeType().equalsIgnoreCase("text/html"); + + MarkupModel model = partial + ? (xmlPartialModel) + : (xmlModel); + + // The charset parameter sets the encoding attribute of the XML declaration, if + // not null and if using the XML model. + + return new MarkupWriterImpl(model, contentType.getCharset()); + } + + public MarkupWriter newMarkupWriter(String pageName) { + Page page = cache.get(pageName); + + ContentType contentType = analyzer.findContentType(page); + + return newMarkupWriter(contentType); + } + + } + }}} + + Then add to your AppModule + + {{{ + public static void contributeAlias( + Configuration<AliasContribution<MarkupWriterFactory>> configuration, PageContentTypeAnalyzer analyzer, + RequestPageCache cache) { + + configuration.add(AliasContribution.create(MarkupWriterFactory.class, + new XhtmlMarkupWriterFactory(analyzer, cache))); + } + }}} + --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tapestry.apache.org For additional commands, e-mail: dev-h...@tapestry.apache.org