BOA is a neat web scripting engine. Its concept is different from all other scripting engines.
It's somewhere along the lines "HTML meets XSLT", although it's been around before XSLT, and
therefore doesn't bear any of it.
|
 |
* Plain HTML is a valid BOA code. Valid BOA code looks like plain HTML.
* BOA is extremely simple in idea, it can be learnt by example in may be few hours. It's simple to
a point where typical developer would actually lack typical features, but it's only a matter
of different approach.
* BOA extends HTML semantics, while retaining it's syntax. This is easy to understand for
a web page designer. On the other hand, the tools that BOA gives a developer allow
for a great amount of flexibility.
* BOA is portable, it runs under Unix (Apache mod) and Windows (ISAPI lib), and comes in GPL source.
|
 |
Here are some relevant links in case you are interested:
|
 |
Developer's introduction to BOA:
http://boa.spidereye.com.au/boadoc/devintro.boa
The official web site:
http://www.spidereye.com/
Downloads and docs:
http://boa.spidereye.com.au/
|
 |
And here is a few actual code samples from this site just to quickly catch your eye:
|
 |
Simple utility tag defined and used:
<deftag name="dot">
<img src="images/dot1x1.gif" width="1" height="1">
</deftag>
...
<td colspan="8" height="6"><dot></td>
...
|
|
Yields:
<td colspan="8" height="6">
<img src="images/dot1x1.gif" width="1" height="1">
</td>
|
 |
Another useful tag, slightly more complex, with expressions and looping:
<deftag name="columns"><arglist widths="text">
<setvar name="widths_list" expr="split('[ ]+', widths)">
<tr>
<loop name="widths_list">
<td height="0" width="{{widths_list-value}}"></td>
</loop>
</tr>
</deftag>
...
<table>
<columns widths="33% 33% *">
...
|
|
Yields:
<table>
<tr>
<td height="0" width="33%"></td>
<td height="0" width="33%"></td>
<td height="0" width="*"></td>
</tr>
|
 |
Server-side caching:
<fileinfo date_modified path="{{cached_filename}}" setvar="cached_modified">
<fileinfo date_modified path="{{original_filename}}" setvar="original_modified">
<if expr="cached_modified >= original_modified">
<readfile path="{{cached_filename}}" setvar="cached_content">
<insert name="cached_content" format="html">
<cancel>
</if>
|
|
Doesn't yield anything visual, but loads up the cached copy of the requested page and delivers it.
|
 |
|