Modified: websites/production/tapestry/content/tapestry-ioc-overview.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-overview.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-overview.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p>Even today, with 
the overwhelming success of <a class="external-link" 
href="http://www.springframework.org"; rel="nofollow">Spring</a> and the rise of 
smaller, simpler approaches to building applications (in contrast to the 
heavyweight EJB 2.0 approach), many people still have trouble wrapping their 
heads around Inversion of Control.</p><p>Really understanding IoC is a new step 
for many developers. If you can remember back to when you made the transition 
from procedural programming (in C, or BASIC) to object oriented programming, 
you might remember the point where you "got it". The point where it made sense 
to have methods on objects, and data inside objects.</p><p>Inversion of Control 
builds upon those ideas. The goal is to make code more robust (that is, with 
fewer errors), more reusable and much easier to test.</p><p>Prior to IoC 
approaches, most developers were used to a more <em>monolithic</em> design, 
with a few core ob
 jects and a <code>main()</code> method somewhere that starts the ball rolling. 
<code>main()</code> instantiates the first couple of classes, and those classes 
end up instantiating and using all the other classes in the 
system.</p><p>That's an <em>unmanaged</em> system. Most desktop applications 
are unmanaged, so it's a very familiar pattern, and easy to get your head 
around.</p><p>By contrast, web applications are a <em>managed</em> environment. 
You don't write a main(), you don't control startup. You <em>configure</em> the 
Servlet API to tell it about your servlet classes to be instantiated, and their 
life cycle is totally controlled by the servlet container.</p><p>Inversion of 
Control is just a more general application of this approach. The container is 
ultimately responsible for instantiating and configuring the objects you tell 
it about, and running their entire life cycle of those objects.</p><p>Web 
applications are more complicated to write than monolithic applications, largel
 y because of <em>multithreading</em>. Your code will be servicing many 
different users simultaneously across many different threads. This tends to 
complicate the code you write, since some fundamental aspects of object 
oriented development get called into question: in particular, the use of 
<em>internal state</em> (values stored inside instance variables), since in a 
multithreaded environment, that's no longer the safe place it is in traditional 
development. Shared objects plus internal state plus multiple threads equals an 
broken, unpredictable application.</p><p>Frameworks such as Tapestry &#8211; 
both the IoC container, and the web framework itself &#8211; exist to 
help.</p><p>When thinking in terms of IoC, <strong>small is beautiful</strong>. 
What does that mean? It means small classes and small methods are easier to 
code than large ones. At one extreme, we have servlets circa 1997 (and Visual 
Basic before that) with methods a thousand lines long, and no distinction 
between busi
 ness logic and view logic. Everything mixed together into an untestable 
jumble.</p><p>At the other extreme is IoC: small objects, each with a specific 
purpose, collaborating with other small objects.</p><p>Using unit tests, in 
collaboration with tools such as <a class="external-link" 
href="http://easymock.org/"; rel="nofollow">EasyMock</a>, you can have a code 
base that is easy to maintain, easy to extend, and easy to test. And by 
factoring out a lot of <em>plumbing</em> code, your code base will not only be 
easier to work with, it will be smaller.</p><h2 
id="TapestryIoCOverview-LivingontheFrontier">Living on the 
Frontier</h2><p>Coding applications the traditional way is like being a 
homesteader on the American frontier in the 1800's. You're responsible for 
every aspect of your house: every board, every nail, every stick of furniture 
is something you personally created. There <em>is</em> a great comfort in total 
self reliance. Even if your house is small, the windows are a bit drafty
  or the floorboards creak a little, you know exactly <em>why</em> things are 
not-quite perfect.</p><p>Flash forward to modern cities or modern suburbia and 
it's a whole different story. Houses are built to specification from design 
plans, made from common materials, by many specializing tradespeople. 
Construction codes dictate how plumbing, wiring and framing should be 
performed. A home-owner may not even know how to drive a nail, but can still 
take comfort in draft-free windows, solid floors and working plumbing.</p><p>To 
extend the metaphor, a house in a town is not alone and self-reliant the way a 
frontier house is. The town house is situated on a street, in a neighborhood, 
within a town. The town provides services (utilities, police, fire control, 
streets and sewers) to houses in a uniform way. Each house just needs to 
connect up to those services.</p><h2 
id="TapestryIoCOverview-TheWorldoftheContainer">The World of the 
Container</h2><p>So the IoC container is the "town" and in t
 he world of the IoC container, everything has a name, a place, and a 
relationship to everything else in the container. Tapestry calls this world 
"The Registry".</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
draggable="false" src="tapestry-ioc-overview.data/ioc-overview.png" 
data-image-src="https://cwiki.apache.org/confluence/download/attachments/23338486/ioc-overview.png?version=1&amp;modificationDate=1290980234000&amp;api=v2";></span></p><p>Here
 we're seeing a few services from the built-in Tapestry IoC module, and a few 
of the services from the Tapestry web framework module. In fact, there are over 
100 services, all interrelated, in the Registry ... and that's before you add 
your own to the mix. The IoC Registry treats all the services uniformly, 
regardless of whether they are part of Tapestry, or part of your application, 
or part of an add-on library.</p><p>Tapestry IoC's job is to make all of these 
service
 s available to each other, and to the outside world. The outside world could 
be a standalone application, or it could be an application built on top of the 
Tapestry web framework.</p><h2 
id="TapestryIoCOverview-ServiceLifeCycle">Service Life Cycle</h2><p>Tapestry 
services are <em>lazy</em>, which means they are not fully instantiated until 
they are absolutely needed. Often, what looks like a service is really a proxy 
object ... the first time any method of the proxy is invoked, the actual 
service is instantiated and initialized (Tapestry uses the term 
<em>realized</em> for this process). Of course, this is all absolutely 
thread-safe.</p><p>Initially a service is <em>defined</em>, meaning some module 
has defined the service. Later, the service will be <em>virtual</em>, meaning a 
proxy has been created. This occurs most often because some other service 
<em>depends</em> on it, but hasn't gotten around to invoking methods on it. 
Finally, a service that is ready to use is <em>realized</e
 m>. What's nice is that your code neither knows nor cares about the life cycle 
of the service, because of the magic of the proxy.</p><p>In fact, when a 
Tapestry web application starts up, before it services its first request, only 
about 20% of the services have been realized; the remainder are defined or 
virtual.</p><h2 id="TapestryIoCOverview-Classvs.Service">Class vs. 
Service</h2><p>A Tapestry service is more than just a class. First of all, it 
is a combination of an <em>interface</em> that defines the operations of the 
service, and an <em>implementation class</em> that implements the 
interface.</p><p>Why this extra division? Having a service interface is what 
lets Tapestry create proxies and perform other operations. It's also a very 
good practice to code to an interface, rather than a specific implementation. 
You'll often be surprised at the kinds of things you can accomplish by 
substituting one implementation for another.</p><p>Tapestry is also very aware 
that a service will ha
 ve dependencies on other services. It may also have other needs ... for 
example, in Tapestry IoC, the container provides services with access to 
Loggers.</p><p>Tapestry IoC also has support for other configuration that may 
be provided to services when they are realized.</p><h2 
id="TapestryIoCOverview-DependencyInjection">Dependency Injection</h2><p>Main 
Article: <a href="injection.html">Injection</a></p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p>Even today, with 
the overwhelming success of <a class="external-link" 
href="http://www.springframework.org"; rel="nofollow">Spring</a> and the rise of 
smaller, simpler approaches to building applications (in contrast to the 
heavyweight EJB 2.0 approach), many people still have trouble wrapping their 
heads around Inversion of Control.</p><p>Really understanding IoC is a new step 
for many developers. If you can remember back to when you made the transition 
from procedural programming (in C, or BASIC) to object oriented programming, 
you might remember the point where you "got it". The point where it made sense 
to have methods on objects, and data inside objects.</p><p>Inversion of Control 
builds upon those ideas. The goal is to make code more robust (that is, with 
fewer errors), more reusable and much easier to test.</p><p>Prior to IoC 
approaches, most developers were used to a more <em>monolithic</em> design, 
with a few core ob
 jects and a <code>main()</code> method somewhere that starts the ball rolling. 
<code>main()</code> instantiates the first couple of classes, and those classes 
end up instantiating and using all the other classes in the 
system.</p><p>That's an <em>unmanaged</em> system. Most desktop applications 
are unmanaged, so it's a very familiar pattern, and easy to get your head 
around.</p><p>By contrast, web applications are a <em>managed</em> environment. 
You don't write a main(), you don't control startup. You <em>configure</em> the 
Servlet API to tell it about your servlet classes to be instantiated, and their 
life cycle is totally controlled by the servlet container.</p><p>Inversion of 
Control is just a more general application of this approach. The container is 
ultimately responsible for instantiating and configuring the objects you tell 
it about, and running their entire life cycle of those objects.</p><p>Web 
applications are more complicated to write than monolithic applications, largel
 y because of <em>multithreading</em>. Your code will be servicing many 
different users simultaneously across many different threads. This tends to 
complicate the code you write, since some fundamental aspects of object 
oriented development get called into question: in particular, the use of 
<em>internal state</em> (values stored inside instance variables), since in a 
multithreaded environment, that's no longer the safe place it is in traditional 
development. Shared objects plus internal state plus multiple threads equals an 
broken, unpredictable application.</p><p>Frameworks such as Tapestry &#8211; 
both the IoC container, and the web framework itself &#8211; exist to 
help.</p><p>When thinking in terms of IoC, <strong>small is beautiful</strong>. 
What does that mean? It means small classes and small methods are easier to 
code than large ones. At one extreme, we have servlets circa 1997 (and Visual 
Basic before that) with methods a thousand lines long, and no distinction 
between busi
 ness logic and view logic. Everything mixed together into an untestable 
jumble.</p><p>At the other extreme is IoC: small objects, each with a specific 
purpose, collaborating with other small objects.</p><p>Using unit tests, in 
collaboration with tools such as <a class="external-link" 
href="http://easymock.org/"; rel="nofollow">EasyMock</a>, you can have a code 
base that is easy to maintain, easy to extend, and easy to test. And by 
factoring out a lot of <em>plumbing</em> code, your code base will not only be 
easier to work with, it will be smaller.</p><h2 
id="TapestryIoCOverview-LivingontheFrontier">Living on the 
Frontier</h2><p>Coding applications the traditional way is like being a 
homesteader on the American frontier in the 1800's. You're responsible for 
every aspect of your house: every board, every nail, every stick of furniture 
is something you personally created. There <em>is</em> a great comfort in total 
self reliance. Even if your house is small, the windows are a bit drafty
  or the floorboards creak a little, you know exactly <em>why</em> things are 
not-quite perfect.</p><p>Flash forward to modern cities or modern suburbia and 
it's a whole different story. Houses are built to specification from design 
plans, made from common materials, by many specializing tradespeople. 
Construction codes dictate how plumbing, wiring and framing should be 
performed. A home-owner may not even know how to drive a nail, but can still 
take comfort in draft-free windows, solid floors and working plumbing.</p><p>To 
extend the metaphor, a house in a town is not alone and self-reliant the way a 
frontier house is. The town house is situated on a street, in a neighborhood, 
within a town. The town provides services (utilities, police, fire control, 
streets and sewers) to houses in a uniform way. Each house just needs to 
connect up to those services.</p><h2 
id="TapestryIoCOverview-TheWorldoftheContainer">The World of the 
Container</h2><p>So the IoC container is the "town" and in t
 he world of the IoC container, everything has a name, a place, and a 
relationship to everything else in the container. Tapestry calls this world 
"The Registry".</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
draggable="false" src="tapestry-ioc-overview.data/ioc-overview.png" 
data-image-src="https://cwiki.apache.org/confluence/download/attachments/23338486/ioc-overview.png?version=1&amp;modificationDate=1290980234000&amp;api=v2";></span></p><p>Here
 we're seeing a few services from the built-in Tapestry IoC module, and a few 
of the services from the Tapestry web framework module. In fact, there are over 
100 services, all interrelated, in the Registry ... and that's before you add 
your own to the mix. The IoC Registry treats all the services uniformly, 
regardless of whether they are part of Tapestry, or part of your application, 
or part of an add-on library.</p><p>Tapestry IoC's job is to make all of these 
service
 s available to each other, and to the outside world. The outside world could 
be a standalone application, or it could be an application built on top of the 
Tapestry web framework.</p><h2 
id="TapestryIoCOverview-ServiceLifeCycle">Service Life Cycle</h2><p>Tapestry 
services are <em>lazy</em>, which means they are not fully instantiated until 
they are absolutely needed. Often, what looks like a service is really a proxy 
object ... the first time any method of the proxy is invoked, the actual 
service is instantiated and initialized (Tapestry uses the term 
<em>realized</em> for this process). Of course, this is all absolutely 
thread-safe.</p><p>Initially a service is <em>defined</em>, meaning some module 
has defined the service. Later, the service will be <em>virtual</em>, meaning a 
proxy has been created. This occurs most often because some other service 
<em>depends</em> on it, but hasn't gotten around to invoking methods on it. 
Finally, a service that is ready to use is <em>realized</e
 m>. What's nice is that your code neither knows nor cares about the life cycle 
of the service, because of the magic of the proxy.</p><p>In fact, when a 
Tapestry web application starts up, before it services its first request, only 
about 20% of the services have been realized; the remainder are defined or 
virtual.</p><h2 id="TapestryIoCOverview-Classvs.Service">Class vs. 
Service</h2><p>A Tapestry service is more than just a class. First of all, it 
is a combination of an <em>interface</em> that defines the operations of the 
service, and an <em>implementation class</em> that implements the 
interface.</p><p>Why this extra division? Having a service interface is what 
lets Tapestry create proxies and perform other operations. It's also a very 
good practice to code to an interface, rather than a specific implementation. 
You'll often be surprised at the kinds of things you can accomplish by 
substituting one implementation for another.</p><p>Tapestry is also very aware 
that a service will ha
 ve dependencies on other services. It may also have other needs ... for 
example, in Tapestry IoC, the container provides services with access to 
Loggers.</p><p>Tapestry IoC also has support for other configuration that may 
be provided to services when they are realized.</p><h2 
id="TapestryIoCOverview-DependencyInjection">Dependency Injection</h2><p>Main 
Article: <a href="injection.html">Injection</a></p><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/tapestry-tutorial.html
==============================================================================
--- websites/production/tapestry/content/tapestry-tutorial.html (original)
+++ websites/production/tapestry/content/tapestry-tutorial.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent">                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/templating-and-markup-faq.html
==============================================================================
--- websites/production/tapestry/content/templating-and-markup-faq.html 
(original)
+++ websites/production/tapestry/content/templating-and-markup-faq.html Fri Feb 
28 18:18:17 2025
@@ -155,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="TemplatingandMarkupFAQ-TemplatingandMarkup">Templating and 
Markup</h1><p>Main Article: <a href="component-templates.html">Component 
Templates</a></p><h2 
id="TemplatingandMarkupFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1740593576322 {padding: 0px;}
-div.rbtoc1740593576322 ul {margin-left: 0px;}
-div.rbtoc1740593576322 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1740766376853 {padding: 0px;}
+div.rbtoc1740766376853 ul {margin-left: 0px;}
+div.rbtoc1740766376853 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1740593576322">
+/*]]>*/</style></p><div class="toc-macro rbtoc1740766376853">
 <ul class="toc-indentation"><li><a 
href="#TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&#160;inmytemplate?">Why
 do I get a SAXParseException when I use an HTML entity, such as &amp;nbsp; in 
my template?</a></li><li><a 
href="#TemplatingandMarkupFAQ-Whydosomeimagesinmypageshowupasbrokenlinks?">Why 
do some images in my page show up as broken links?</a></li><li><a 
href="#TemplatingandMarkupFAQ-What'sthedifferencebetweenidandt:id?">What's the 
difference between id and t:id?</a></li><li><a 
href="#TemplatingandMarkupFAQ-WhydomyimagesandstylesheetsendupwithaweirdURLslike/assets/meta/zeea17aee26bc0cae/layout/layout.css?">Why
 do my images and stylesheets end up with a weird URLs like 
/assets/meta/zeea17aee26bc0cae/layout/layout.css?</a></li><li><a 
href="#TemplatingandMarkupFAQ-HowdoIaddaCSSclasstoaTapestrycomponent?">How do I 
add a CSS class to a Tapestry component?</a></li></ul>
 </div><h2 
id="TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&amp;nbsp;inmytemplate?">Why
 do I get a SAXParseException when I use an HTML entity, such as 
<code>&amp;nbsp;</code> in my template?</h2><p>Tapestry uses a standard SAX 
parser to read your templates. This means that your templates must be <em>well 
formed</em>: open and close tags must balance, attribute values must be quoted, 
and entities must be declared. The easiest way to accomplish this is to add a 
DOCTYPE to your the top of your template:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre><code class="language-xml">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
1.0 Strict//EN"

Modified: websites/production/tapestry/content/type-coercion.html
==============================================================================
--- websites/production/tapestry/content/type-coercion.html (original)
+++ websites/production/tapestry/content/type-coercion.html Fri Feb 28 18:18:17 
2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p><strong>Type 
Coercion</strong> is the conversion of one type of object to a another object 
of a different type with similar content. Tapestry frequently must coerce 
objects from one type to another. A common example is the coercion of string 
"5" into an integer 5 or a double 5.0.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p><strong>Type 
Coercion</strong> is the conversion of one type of object to a another object 
of a different type with similar content. Tapestry frequently must coerce 
objects from one type to another. A common example is the coercion of string 
"5" into an integer 5 or a double 5.0.</p><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/typescript.html
==============================================================================
--- websites/production/tapestry/content/typescript.html (original)
+++ websites/production/tapestry/content/typescript.html Fri Feb 28 18:18:17 
2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div 
id="ConfluenceContent"><p><strong>TypeScript</strong> (<a class="external-link" 
href="https://en.wikipedia.org/wiki/TypeScript"; 
rel="nofollow">https://en.wikipedia.org/wiki/TypeScript</a>) is a language that 
compiles down to JavaScript.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div 
id="ConfluenceContent"><p><strong>TypeScript</strong> (<a class="external-link" 
href="https://en.wikipedia.org/wiki/TypeScript"; 
rel="nofollow">https://en.wikipedia.org/wiki/TypeScript</a>) is a language that 
compiles down to JavaScript.</p><div class="aui-label" style="float:right" 
title="Related Articles">
 
 
 

Modified: 
websites/production/tapestry/content/unit-testing-pages-or-components.html
==============================================================================
--- websites/production/tapestry/content/unit-testing-pages-or-components.html 
(original)
+++ websites/production/tapestry/content/unit-testing-pages-or-components.html 
Fri Feb 28 18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p>Tapestry provides 
support for easily <strong>unit testing your pages and components</strong>. 
Follow the simple steps below.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p>Tapestry provides 
support for easily <strong>unit testing your pages and components</strong>. 
Follow the simple steps below.</p><div class="aui-label" style="float:right" 
title="Related Articles">
 
 
 

Modified: 
websites/production/tapestry/content/using-jsr-330-standard-annotations.html
==============================================================================
--- 
websites/production/tapestry/content/using-jsr-330-standard-annotations.html 
(original)
+++ 
websites/production/tapestry/content/using-jsr-330-standard-annotations.html 
Fri Feb 28 18:18:17 2025
@@ -160,15 +160,7 @@
 
 
 
-</div><strong>JSR-330 annotations</strong> can be used for injection in 
Tapestry 5.3 and later.                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+</div><strong>JSR-330 annotations</strong> can be used for injection in 
Tapestry 5.3 and later.<div class="aui-label" style="float:right" 
title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/whatistapestry-v2.html
==============================================================================
--- websites/production/tapestry/content/whatistapestry-v2.html (original)
+++ websites/production/tapestry/content/whatistapestry-v2.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent">                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="error"><span class="error">Error</span> CSS Stylesheet macro - URL 
'whatistapestry.data/Chat.png' is not on the allowlist. If you want to include 
this content, contact your Confluence administrator to request adding this URL 
to the <a 
href="https://confluence.atlassian.com/doc/configuring-the-whitelist-381255821.html";>Allowlist</a>.</div><div
 class="row" id="whatIs"><h3 id="whatIsTapestryv2-WhatisTapestry?">What is 
Tapestry?</h3><div class="col-md-6"><div id="is-polyglot"><h4 
id="whatIsTapestryv2-PureJavaandPolyglot">Pure Java and Polyglot</h4><p>Written 
in pure Java: code your pages and components in Java, Groovy or Scala.</p></div>
+                            <div id="ConfluenceContent"><div 
class="error"><span class="error">Error</span> CSS Stylesheet macro - URL 
'whatistapestry.data/Chat.png' is not on the allowlist. If you want to include 
this content, contact your Confluence administrator to request adding this URL 
to the <a 
href="https://confluence.atlassian.com/doc/configuring-the-whitelist-381255821.html";>Allowlist</a>.</div><div
 class="row" id="whatIs"><h3 id="whatIsTapestryv2-WhatisTapestry?">What is 
Tapestry?</h3><div class="col-md-6"><div id="is-polyglot"><h4 
id="whatIsTapestryv2-PureJavaandPolyglot">Pure Java and Polyglot</h4><p>Written 
in pure Java: code your pages and components in Java, Groovy or Scala.</p></div>
 
 
 <div id="is-productive"><h4 id="whatIsTapestryv2-HighlyProductive">Highly 
Productive</h4><p>Live class reloading means that the time between seeing an 
error and providing the fix is seconds, not minutes.</p></div>

Modified: websites/production/tapestry/content/whatistapestry.html
==============================================================================
--- websites/production/tapestry/content/whatistapestry.html (original)
+++ websites/production/tapestry/content/whatistapestry.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><div class="row" 
id="whatIs"><h3 id="whatIsTapestry-WhatisTapestry?">What is Tapestry?</h3><div 
class="col-md-6">                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div id="is-polyglot"><h4 id="whatIsTapestry-PureJavaandPolyglot">Pure Java 
and Polyglot</h4><p>Written in pure Java: code your pages and components in 
Java, Groovy or Scala.</p></div>
+                            <div id="ConfluenceContent"><div class="row" 
id="whatIs"><h3 id="whatIsTapestry-WhatisTapestry?">What is Tapestry?</h3><div 
class="col-md-6"><div id="is-polyglot"><h4 
id="whatIsTapestry-PureJavaandPolyglot">Pure Java and Polyglot</h4><p>Written 
in pure Java: code your pages and components in Java, Groovy or Scala.</p></div>
 
 
 <div id="is-productive"><h4 id="whatIsTapestry-HighlyProductive">Highly 
Productive</h4><p>Live class reloading means that the time between seeing an 
error and providing the fix is seconds, not minutes.</p></div>


Reply via email to