Author: bdelacretaz
Date: Fri Dec 7 09:19:57 2007
New Revision: 602157
URL: http://svn.apache.org/viewvc?rev=602157&view=rev
Log:
Reworked the index.html and javascript.html explanation pages (assuming lots of
people are going to play with microsling over the weekend ;-)
Added:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/javascript.html
- copied, changed from r602107,
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/server-side-javascript.html
Removed:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/server-side-javascript.html
Modified:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/content-creation-forms.html
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/erb-scripts.html
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/freemarker-scripts.html
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/index.html
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/velocity-scripts.html
Modified:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/content-creation-forms.html
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/webapp/content-creation-forms.html?rev=602157&r1=602156&r2=602157&view=diff
==============================================================================
---
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/content-creation-forms.html
(original)
+++
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/content-creation-forms.html
Fri Dec 7 09:19:57 2007
@@ -27,7 +27,7 @@
and displays it using an <em>html</em> extension.
</p>
<p>
- See the <em>Velocity scripts</em> and <em>server-side Javascript</em>
pages for how to
+ See the <a href="javascript.html">javascript</a> info page for how to
render the content using templates and scripts.
</p>
<p>
Modified:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/erb-scripts.html
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/webapp/erb-scripts.html?rev=602157&r1=602156&r2=602157&view=diff
==============================================================================
---
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/erb-scripts.html
(original)
+++
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/erb-scripts.html
Fri Dec 7 09:19:57 2007
@@ -9,6 +9,9 @@
<div class="note">
<a href="../">back to homepage</a>
</div>
+ <p>
+ (this page might not be up to date)
+ </p>
<p>
Scripts found by the <code>SlingScriptResolver</code> using the
<code>.erb</code> extension are executed by
the <code>ErbScriptEngine</code>.
Modified:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/freemarker-scripts.html
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/webapp/freemarker-scripts.html?rev=602157&r1=602156&r2=602157&view=diff
==============================================================================
---
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/freemarker-scripts.html
(original)
+++
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/freemarker-scripts.html
Fri Dec 7 09:19:57 2007
@@ -9,6 +9,11 @@
<div class="note">
<a href="index.html">back to homepage</a>
</div>
+
+ <p>
+ (this page might not be up to date)
+ </p>
+
<p>
Scripts found by the <code>SlingScriptResolver</code> using the
<code>.ftl</code> extension are executed by
the <code>FreemarkerScriptEngine</code>.
Modified:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/index.html
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/webapp/index.html?rev=602157&r1=602156&r2=602157&view=diff
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/webapp/index.html
(original)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/webapp/index.html
Fri Dec 7 09:19:57 2007
@@ -6,41 +6,67 @@
<body>
<h1>microsling homepage</h1>
+ <h2>Overview</h2>
<p>
- <em>Sling request processing, reduced to the max!</em>
+ microsling started as "back to basics" rewrite of Sling (which is
heavier, using OSGi, and
+ at the time was much harder to understand).
+ </p>
+ <p>
+ As I write this (early December 2007), microsling is perfectly usable
to create scripted
+ JCR-based applications (it runs <a
href="http://dev.day.com">dev.day.com</a> for example).
+ We have decided to focus on javascript, using it for either server-side
+ or client side templates (see links below), or for handling other HTTP
requests besides GET.
+ </p>
+ <p>
+ The microjax.js client-side javascript library provides a simple
javascript "proxy" on the
+ JCR repository.
</p>
-
- <h2>Overview</h2>
<p>
- The goal of microsling is to demonstrate the Sling HTTP
- request processing in the simplest possible way, to help the
- community converge on the goals and architecture of this
- module.
+ Documentation and examples are scarce for now, but the automated tests
(both unit and integration tests)
+ are extensive and up to date, if you can read simple java code they
might help.
</p>
- <h2>microsling test links</h2>
+ <h2>microsling main test links</h2>
<ul>
<li>
+ <a href="content-creation-forms.html">
+ Content creation forms
+ </a>. Start here: use this page to create content and test the rendering
mechanisms, and then have a look
+ at the <a href="javascript.html">javascript</a> info page for rendering.
+ </li>
+ <li>
+ <a href="javascript.html">
+ Server-side and client-side javascript templates
+ </a>: explains how to use server-side javascript and javascript-based
ESP and ECT templates to render content
+ </li>
+ <li>
Automated testing of the <a href="microjax/test/microjax-test.html">
microjax
</a> client-side javascript "JCR proxy" library.
</li>
- <li>
- <a href="content-creation-forms.html">
- Content creation forms
- </a>: use this page to create content and test the rendering mechanisms.
- </li>
+ </ul>
+
+ <h2>more test links</h2>
+ <p>
+ Script engines are (almost) pluggable, so we support various templating
and scripting languages.
+ But our focus is definitely on javascript, as it allows using the same
language on both the server
+ and client sides.
+ </p>
+ <ul>
+ <li>
+ <a href="repository-info">repository-info</a>, dumps the JCR repository
+ properties.
+ </li>
+ <li>
+ <a href="repository/default">WebDAV mount point</a>: use this URL to
mount
+ the repository via WebDAV (login = admin/admin).
+ </li>
<li>
<a href="velocity-scripts.html">
Velocity templates
</a>: explains how to use Velocity templates to render content.
</li>
<li>
- <a href="server-side-javascript.html">
- Server-side javascript and ESP templates
- </a>: explains how to use server-side javascript and javascript-based
ESP templates to process requests.
- </li>
- <li>
<a href="freemarker-scripts.html">
FreeMarker templates
</a>: explains how to use FreeMarker templates to render content.
@@ -52,106 +78,5 @@
</li>
</ul>
- <h2>Show me the code</h2>
- <p>
- Here's a brief description of how microsling processes HTTP requests.
Follow the links to the source code
- for more details.
- <ul>
- <li>
- The main <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/servlet/MicroSlingServlet.java?view=markup">MicroSlingServlet</a>
- handles HTTP requests. That's probably where you want to
- start studying the code.
- </li>
- <li>
- <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/api/RequestFilter.java?view=markup">RequestFilter</a>
- objects process the incoming requests before passing them on to
SlingServlet objects
- which do the actual processing.
- <ul>
- <li>
- The
- <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/resource/ResourceResolverFilter.java?view=markup">ResourceResolverFilter</a>
- selects the <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/api/Resource.java?view=markup">Resource</a>
(currently a JCR Node, OCM is not used yet) to process.
- </li>
- <li>
- The <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/contenttype/ResponseContentTypeResolverFilter.java?view=markup">ResponseContentTypeResolverFilter</a>
- computes the desired <em>Content-Type</em> for the
response, so that rendering scripts or SlingServlets know what output format to
generate.
- </li>
- </ul>
- Other filters would include
- Locale selection, client capabilities analysis, etc.
-
- </li>
- <li>
- After applying the RequestFilters, the MicroSlingServlet selects a
- <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/api/SlingServlet.java?view=markup">SlingServlet</a>
to process the request.
- The first SlingServlet where canProcess(...) returns true is used.
- </li>
- <li>
- The <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/requestcontext/SlingRequestContext.java?view=markup">SlingRequestContext</a>
is
- stored as a request attribute, and gives access to Sling-specific
objects (Resource, repository Session, etc.) used for request processing.
- </li>
- <li>
- A few SlingServlet classes are implemented (source code <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/slingservlets/">here</a>):
- <ul>
- <li>
- The SlingPostServlet allows Nodes to be created by POSTing to URLs
ending
- with ".sling".
- </li>
- <li>
- The VelocityTemplatesServlet and RhinoJavascriptServlet execute
server-side scripts in those
- languages to process requests.
- </li>
- <li>
- The DefaultSlingServlet is used when no other SlingServlet wants
the request.
- </li>
- </ul>
- </li>
- <li>
- The <a
href="http://svn.apache.org/viewvc/incubator/sling/whiteboard/microsling/src/main/java/org/apache/sling/microsling/scripting/SlingScriptResolver.java?view=markup">SlingScriptResolver</a>
- is used by the scripting SlingServlet classes to locate scripts in the
repository.
- See comments in that class for how script paths are computed based on
the Resource's resourceType and the
- request method and extension.
- </li>
- <li>
- Rendering scripts can generate various output formats, for example a
Velocity script named "get.xml.vlt" will
- cause a page with <em>Content-Type=text/xml</em> to be generated by
the VelocityTemplatesServlet.
- </li>
- <li>
- The microsling architecture allows
- additional scripting engines (JSP, JRuby, BSF,...) to be plugged in
easily - and this would
- of course be much easier with OSGi.
- </li>
- <li>
- We'll probably need a ResponseFilter interface at some point, but for
now it's not needed. It could be useful
- to apply "rendering standards" to the output, adding
header/footers/glitter to HTML pages for example.
- </li>
- </ul>
- <p>
- If you have followed the links to source code in the above descriptions,
you've seen most or all of the interesting
- microsling source code. What's remaining are a few simple support
classes.
- </p>
- </p>
-
- <h2>No OSGi</h2>
- <p>
- To keep things simple, microsling does <em>not</em> use OSGi.
- We will of course continue to use OSGi in the real Sling, and there are
many
- places in the code which say <em>TODO - use OSGi plugins here</em>.
Keeping things
- "static" for this example makes it easier to concentrate on the basics.
- </p>
-
- <h2>More test links</h2>
- <p>
- <ul>
- <li>
- <a href="repository-info">repository-info</a>, dumps the JCR repository
- properties.
- </li>
- <li>
- <a href="repository/default">WebDAV mount point</a>: use this URL to
mount
- the repository via WebDAV (login = admin/admin).
- </li>
- </ul>
- </p>
</body>
</html>
Copied:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/javascript.html
(from r602107,
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/server-side-javascript.html)
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/webapp/javascript.html?p2=incubator/sling/trunk/microsling/microsling-core/src/main/webapp/javascript.html&p1=incubator/sling/trunk/microsling/microsling-core/src/main/webapp/server-side-javascript.html&r1=602107&r2=602157&rev=602157&view=diff
==============================================================================
---
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/server-side-javascript.html
(original)
+++
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/javascript.html
Fri Dec 7 09:19:57 2007
@@ -1,52 +1,40 @@
<html>
<head>
- <title>microsling server-side javascript and ESP templates</title>
+ <title>Use of javascript in microsling</title>
<link rel="stylesheet" href="microsling.css"/>
</head>
<body>
- <h1>microsling server-side javascript and ESP templates</h1>
+ <h1>Use of javascript in microsling</h1>
<div class="note">
<a href="index.html">back to homepage</a>
</div>
+ <h2>Scripting basics</h2>
<p>
- Server-side javascript code and javascript-based ESP templates can be used
by microsling to process requests.
- The scripts are located by the
- <a
href="http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/MicroslingScriptResolver.java?view=markup">MicroslingScriptResolver</a>
- , as for the <a href="velocity-scripts.html">Velocity templates</a> (see
that
- page for more details about how this resolution works).
- </p>
- <p>
- Scripts can either:
- <ul>
- <li>
- Have the <em>.esp</em> extension to use the microsling
<em>ECMAscript Server Pages</em> syntax
- described below.
- </li>
- <li>
- Have the <em>.js</em> extension to use "raw" javascript.
- </li>
- </ul>
- </p>
- <p>
- Server-side javascript support is implemented by the
- <a
href="http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/rhino/RhinoJavascriptEngine.java?view=markup">RhinoJavascriptEngine</a>.
- </p>
- <p>
- To test this, remove or rename <a href="velocity-scripts.html">Velocity
templates</a>
- if you played with them before (Velocity has priority due to the order in
which the SlingServlet classes
- are setup), and store one of the scripts shown
- below under <em>/sling/scripts/microsling/example/</em>, using the
filenames shown in comments in the scripts below.
+ Scripts are located based on the <em>sling:resourceType</em> property
of nodes (and some other variants, but for
+ now we'll leave it at that).
+ </p>
+ <p>
+ If you created content with the microsling test content creation form,
rendering scripts should be stored
+ in the repository under <em>/sling/scripts/microsling/example/</em>.
Mount the repository with WebDAV to
+ do that, see the WebDAV link on the <a href="index.html">homepage</a>.
+ </p>
+ <p>
+ To activate a script, remove or rename any existing templates in there,
and store one of the scripts shown
+ below there, using the filenames shown in comments in the scripts below.
</p>
<p>
Content nodes created with the <a
href="content-creation-forms.html">Content creation forms</a>
should then be displayed in HTML, with a layout defined by the example
scripts.
</p>
<p>
- As for the Velocity templates, other output formats can be generated, for
example by renaming the ESP template
- to <em>plain.esp</em> (as the Content-type for text is
<em>text/plain</em>), modifying it to output plain text
- and using a <em>.txt</em> extension in the request.
+ Other output formats can be generated, for example by renaming the ESP
template
+ to <em>txt.esp</em>, modifying it to output plain text
+ and using a <em>.txt</em> extension in the request. Or xml, or any other
extension.
+ </p>
+ <p>
+ TODO explain selectors, default scripts location, non-GET requests, etc.
</p>
<h2>ECMAscript Server Pages (ESP)</h2>
@@ -86,9 +74,37 @@
%>
</body>
</html></pre>
+
+ <h2>Ecmascript Client Templates (ECT)</h2>
+ <p>
+ If you prefer to waste your client's CPUs for rendering, ECT templates
use the same syntax as ESP, but generate
+ javascript rendering code that's executed on the client, and include in
the response both a JSON version of the
+ data and a basic HTML rendering that is used for search engines, for
example.
+ </p>
+ <p>
+ See <a
href="https://issues.apache.org/jira/browse/SLING-114">SLING-114</a> for more
info.
+ </p>
+ <p>
+ For now, here's a simplistic ECT example. Make sure to have a look at
what's sent to the browser!
+ </p>
+ <pre><!-- Store this as html.ect in the appropriate scripts directory -->
+ currentNode.title = <b> <%= currentNode.title %> </b>
+</p>
+<p>
+ currentNode.text = <em> <%= currentNode.text %> </em> (changed)
+</p>
+
+<%
+ // if present, this function is called by body.onLoad
+ function onLoad() {
+ document.title = currentNode.title;
+ }
+%></pre>
+
<h2>Raw javascript</h2>
<p>
- Raw javascript is probably more useful to handle the POST, PUT or
DELETE methods.
+ Raw javascript is probably more useful to handle the POST, PUT or
DELETE methods. To do that, name
+ the script after the method name, uppercased, i.e. <em>POST.js</em>.
</p>
<h3>Javascript example</h3>
@@ -107,7 +123,7 @@
<h2>Directory listing example</h2>
<p>
Store the following template under
- <code>sling/scripts/NODETYPES/nt/unstructured/html.esp</code> to render a
simple
+ <code>sling/scripts/nt/unstructured/html.esp</code> to render a simple
directory listing for <em>nt:unstructured</em> nodes which do not have a
<code>slingComponentId</code> property.
</p>
Modified:
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/velocity-scripts.html
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/webapp/velocity-scripts.html?rev=602157&r1=602156&r2=602157&view=diff
==============================================================================
---
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/velocity-scripts.html
(original)
+++
incubator/sling/trunk/microsling/microsling-core/src/main/webapp/velocity-scripts.html
Fri Dec 7 09:19:57 2007
@@ -10,6 +10,10 @@
<a href="index.html">back to homepage</a>
</div>
<p>
+ (this page might not be up to date)
+ </p>
+
+ <p>
When processing requests, the <em>VelocityTemplatesServlet</em> ask the
<em>SlingScriptResolver</em>
for scripts with the <em>.vlt</em> extension.
</p>