jeremy 2002/07/01 01:51:02 Modified: src/scratchpad/webapp/mount/editor README editor.xmap test.xmap src/scratchpad/webapp/mount/editor/docs source.xml tests.xml src/scratchpad/webapp/mount/editor/editor/stylesheets editor-components.xsl editor-page2html.xsl editor2writer.xsl src/scratchpad/webapp/mount/editor/stylesheets simple-page2html.xsl src/scratchpad/webapp/mount/editor/tests include-me.xml make-page.xsl test1.xml test2.xml test3.xml test4.xml Added: src/scratchpad/webapp/mount/editor/editor/docs slash-edit.css src/scratchpad/webapp/mount/editor/tests result7.xml result8.xml test7.xml test8.xml src/scratchpad/webapp/mount/editor/tests/test6 inc.xsl input.xml prepareWrite.xsl src/scratchpad/webapp/mount/editor/tests/test9 inc.xsl input.xml prepareWrite.xsl Log: updated tests and sample editors to match new tag style for SourceWritingTransformer Revision Changes Path 1.7 +1 -9 xml-cocoon2/src/scratchpad/webapp/mount/editor/README Index: README =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/README,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- README 22 Mar 2002 12:09:59 -0000 1.6 +++ README 1 Jul 2002 08:51:01 -0000 1.7 @@ -1,7 +1,7 @@ SourceWritingTransformer - Installation Notes. -Once you have the latest copy of Cocoon 2 from CVS, compile it. +Once you have the latest copy of Cocoon 2.1 HEAD Branch from CVS, compile it. You could use the following command: @@ -10,14 +10,6 @@ This ensures the scratchpad libraries are included in the build. Next, move cocoon.war to your webapps directory, and start TomCat. - -Once cocoon.war file has expanded, copy the directory with the samples from : - - xml-cocoon2/src/scratchpad/webapps/mount/editor - -to: - - webapps/cocoon/mount/editor In your browser go to: 1.9 +8 -5 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor.xmap Index: editor.xmap =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/editor.xmap,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- editor.xmap 28 Jun 2002 07:14:37 -0000 1.8 +++ editor.xmap 1 Jul 2002 08:51:01 -0000 1.9 @@ -212,6 +212,12 @@ <map:read src="editor/images/{2}.gif" mime-type="image/gif"/> </map:match> + <!-- css --> + <map:match pattern="**style"> + <map:read mime-type="text/css" src="editor/docs/slash-edit.css"/> + </map:match> + + <!-- General purpose behaviour pipeline @@ -222,6 +228,7 @@ new(sub-editor-name)/path/to/file - create a new document put(sub-editor-name) - save a modified document from a form submission dir(sub-editor-name)/path/to/directory/ - show a directory listing + pre(sub-editor-name)/path/to/file - preview your changes --> <map:match pattern="*(*)**"> @@ -231,18 +238,14 @@ </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"/> <map:serialize type="xhtml"/> - <!--<map:serialize type="xml"/>--> </map:match> <!-- generic error handlers --> <map:handle-errors> <map:transform src="context://stylesheets/system/error2html.xsl"/> <map:serialize status-code="500"/> - <!--<map:serialize type="xml"/>--> </map:handle-errors> - <!--<map:handle-errors> - <map:serialize status-code="500" type="xml"/> - </map:handle-errors>--> + <map:handle-errors type="404"> <map:transform src="context://stylesheets/system/error2html.xsl"/> <map:serialize/> 1.5 +76 -15 xml-cocoon2/src/scratchpad/webapp/mount/editor/test.xmap Index: test.xmap =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/test.xmap,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- test.xmap 28 Jun 2002 07:14:37 -0000 1.4 +++ test.xmap 1 Jul 2002 08:51:01 -0000 1.5 @@ -21,6 +21,17 @@ </map:serializers> <map:transformers default="xslt"> + <!-- Define 'filewriter' as the name for FileWritingTransformer --> + <!-- You can set up the default Serialiser here --> + <!-- You can also set it in the invocation tag below --> + <!-- or place serializer="serializer-name" in the source:write tag --> + <!-- if you leave it out altogether, 'xml' is used --> + + <map:transformer name="filewriter" logger="sitemap.transformer.tofile" + src="org.apache.cocoon.transformation.SourceWritingTransformer"> + <serializer>my-xml-serializer</serializer> + </map:transformer> + </map:transformers> <map:readers default="resource"/> <map:matchers default="wildcard"/> @@ -30,46 +41,96 @@ <map:pipelines> <map:pipeline> - <!-- the tests --> - <map:match pattern="test/4"> - <map:generate src="tests/test4.xml"/> - <map:transform type="cinclude"/> - <map:transform type="write-source"/> - <map:transform src="stylesheets/simple-page2html.xsl"> - <map:parameter name="view-source" value="tests/test4.xml"/> + + <map:match pattern="test/9"> + <map:generate type="file" src="tests/test9/input.xml"/> + <map:transform type="xslt" src="tests/test9/inc.xsl"/> + <map:transform type="xslt" src="tests/test9/prepareWrite.xsl"/> + <map:transform type="log"> + <map:parameter name="logfile" value="tests/9-before.log"/> + <map:parameter name="append" value="no"/> + </map:transform> <!----> + <map:transform type="filewriter"/> + <map:transform type="log"> + <map:parameter name="logfile" value="tests/9-after.log"/> + <map:parameter name="append" value="no"/> </map:transform> - <map:serialize type="html"/> + <map:transform src="stylesheets/simple-page2html.xsl"> + <map:parameter name="view-source" value="tests/test9/input.xml"/> + </map:transform> + <map:serialize type="html"/> + <!-- <map:serialize type="xml"/> --> + </map:match> + + <map:match pattern="test/6"> + <map:generate type="file" src="tests/test6/input.xml"/> + <map:transform type="xslt" src="tests/test6/inc.xsl"/> + <map:transform type="xslt" src="tests/test6/prepareWrite.xsl"/> + <map:transform type="filewriter"> + <map:parameter name="serializer" value="xml"/> + </map:transform> + <map:transform src="stylesheets/simple-page2html.xsl"> + <map:parameter name="view-source" value="tests/test6/input.xml"/> + </map:transform> + <map:serialize type="html"/> </map:match> <map:match pattern="test/5"> <map:generate src="tests/test5.xml"/> <map:transform src="tests/make-page.xsl"/> - <map:transform type="write-source"> + <map:transform type="log"> + <map:parameter name="logfile" value="tests/5-before.log"/> + <map:parameter name="append" value="no"/> + </map:transform> + <map:transform type="filewriter"> <map:parameter name="serializer" value="xml"/> <!-- invoke the filewriter with 'xml' serializer --> </map:transform> + <map:transform type="log"> + <map:parameter name="logfile" value="tests/5-after.log"/> + <map:parameter name="append" value="no"/> + </map:transform> <map:transform src="stylesheets/simple-page2html.xsl"> <map:parameter name="view-source" value="tests/test5.xml"/> </map:transform> <map:serialize type="html"/> </map:match> + <map:match pattern="test/4"> + <map:generate src="tests/test4.xml"/> + <map:transform type="cinclude"/> + <map:transform type="log"> + <map:parameter name="logfile" value="tests/4-before.log"/> + <map:parameter name="append" value="no"/> + </map:transform> + <map:transform type="filewriter"/> + <map:transform type="log"> + <map:parameter name="logfile" value="tests/4-after.log"/> + <map:parameter name="append" value="no"/> + </map:transform> + <map:transform src="stylesheets/simple-page2html.xsl"> + <map:parameter name="view-source" value="tests/test4.xml"/> + </map:transform> + <map:serialize type="html"/> + </map:match> + <map:match pattern="test/*"> <map:generate src="tests/test{1}.xml"/> <map:transform type="log"> - <map:parameter name="logfile" value="before.log"/> + <map:parameter name="logfile" value="tests/{1}-before.log"/> <map:parameter name="append" value="no"/> - </map:transform> - <map:transform type="write-source"/> + </map:transform><!-- --> + <map:transform type="filewriter"/> <map:transform type="log"> - <map:parameter name="logfile" value="after.log"/> + <map:parameter name="logfile" value="tests/{1}-after.log"/> <map:parameter name="append" value="no"/> </map:transform> <map:transform src="stylesheets/simple-page2html.xsl"> <map:parameter name="view-source" value="tests/test{1}.xml"/> </map:transform> - <map:serialize type="html"/> + <map:serialize type="html"/> + <!-- <map:serialize type="xml"/> --> </map:match> <!-- the results --> @@ -94,4 +155,4 @@ </map:pipelines> </map:sitemap> -<!-- end of file --> +<!-- end of file --> \ No newline at end of file 1.3 +178 -87 xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/source.xml Index: source.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/source.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- source.xml 13 Mar 2002 19:19:42 -0000 1.2 +++ source.xml 1 Jul 2002 08:51:01 -0000 1.3 @@ -5,116 +5,207 @@ <content> <para> - NB: SourceWritingTransformer has replaced FileWritingTransformer. + NB: SourceWritingTransformer has been updated with new tags. </para> <para>Please try the <a href="tests">tests</a></para> <para> - Uses the tag <pre><source:write src="path-to-file" [serializer="serializer-name"]/></pre> + Uses the tags: + + <pre><source:write/> +<source:insert/> + <source:path/> + <source:source/> + <source:replace/> + <source:reinsert/> + <source:fragment/></pre> in the namespace xmlns:source="http://apache.org/cocoon/source/1.0". </para> <para> - The contents of this tag are written to the specified WriteableSource when the document containing it is transformed by SourceWritingTransformer. + The contents of the <code><source:fragment/></code> tag are written to the specified WriteableSource when the document containing it is transformed by SourceWritingTransformer. </para> <para> - The only Source that currently implements WritableSource is FileSource. This means you can only use this Transformer to write to files at the moment. Hopefully other WriteableSource implementations (XMLDB, CVS, Email, SQL, etc.) will be written. + Thankfully, FileSource is no longer the only Source that currently implements WritableSource; there are implementations of WebDAV and Apache Slide WritableSources in the scratchpad. + Hopefully further WriteableSource implementations (XMLDB, CVS, Email, SQL, etc.) will be appear in the future. </para> - <para> - SiteMap: - </para> - - <para> - SourceWritingTransformer is defined using XML like this: - </para> - - <para> -<pre> - <map:transformer name="sourcewriter" logger="sitemap.transformer.filewriter" - src="org.apache.cocoon.transformation.SourceWritingTransformer"> - [<serializer>my-xml-serializer</serializer>] - </map:transformer> -</pre> - </para> - - <para> - A Serializer must be specified somewhere if you are writing to File or some other Source that requires a Serializer. - You can specify the Serializer in 3 different places, - SiteMap Definition, SiteMap Invocation and in the 'serializer attribute of the '<source:write/>' Tag. - In the examples, something surrounded by [ and ] is optional. - </para> - - <para> - The Serializer you want to use has to be defined somewhere in the SiteMap hierarchy, - if you need a special one, set it up how you set up any other Serializer. - </para> - - <para> -<pre> - <map:serializer - name="my-xml-serializer" - mime-type="text/xml" logger="sitemap.serializer.myxml" - src="org.apache.cocoon.serialization.XMLSerializer" - > - <encoding>utf-8</encoding> - <omit-xml-declaration>no</omit-xml-declaration> - </map:serializer> -</pre> - </para> - - - <para> - In the SiteMap, you use XML like this to add SourceWritingTransformer to the pipeline, - again specifying the Serializer to use here is optional. - </para> - - <para> -<pre> - <map:transform type="sourcewriter"> - [<map:parameter name="serialiser" value="my-xml-serialiser"/>] + + <para>Definition:</para> + <pre> + <map:transformer name="tofile" src="org.apache.cocoon.transformation.SourceWritingTransformer"> + <map:parameter name="serializer" value="xml"/> <!-- this is the default Serializer (if your Source needs one, like for instance FileSource) --> + </map:transformer/> + </pre> + + <para>Invocation:</para> + <pre> + <map:transform type="tofile"> + <map:parameter name="serializer" value="xml"/> <!-- you can optionally override the serializer here --> </map:transform> -</pre> - </para> - - <para> - Document: - </para> - - <para> - Something like this XML Fragment somewhere in the Document being processed, - will result in an XML file being written at the location specified, - with the <page/> tag as the Document Root. - </para> - - <para> + </pre> + + <para>The Tags:</para> + <pre> + <source:write create="[true]|false"> - replaces the entire content of an existing asset, if @create is 'true' (default), a new asset will be created if one does not already exist. + <source:source>The System ID of the asset to be written to</source:source> - eg: "docs/blah.xml" or "context://blah.xml" etc. + <source:path>[Optional] XPath to specify how your content is wrapped</source:path> - eg: "doc" (your content is placed inside a <doc/> root tag). NOTE: if this value is omitted, your content MUST have only ONE top-level node. + <source:fragment>The XML Fragment to be written</source:fragment> - eg: "<foo><bar id="dogcow"/></foo>" or "<foo/><bar><dogcow/><bar/>" etc. NOTE: the second example type, can only be used when the <source:path/> tag has been specified. + <source:write> + + <source:insert create="[true]|false" overwrite="[true]|false"> - inserts content into an existing asset, if @create is 'true' (default), a new asset will be created if one does not already exist. If @overwrite is set to 'true' the data is only inserted if the node specified by the 'replacePath' does not exists. + <source:source>The System ID of the asset to be written to</source:source> - eg: "docs/blah.xml" or "context://blah.xml" etc. + <source:path>XPath specifying the node into which the content is inserted</source:path> - eg: "doc" (your content is appended as the last child of the <doc/> root tag), or "doc/section[3]". NOTE: this tag is required in <source:insert/> unlike <source:write/> where it is optional. + <source:replace>[Optional] XPath (relative to <source:path/>) to the node that is replaced by your new content</source:replace> - eg: "foo/bar/dogcow/@status='cut'" (is equivalent to this in XSLT: select="foo[bar/dogcow/@status='cut']"). + <source:reinsert>[Optional] The XPath (relative to <source:replace/>) to backup the overwritten node to</source:reinsert> - eg: "foo/versions" or "/doc/versions/foo". NOTE: If specified and a node is replaced, all children of this replaced node will be reinserted at the given path. + <source:fragment>The XML Fragment to be written</source:fragment> - eg: "<foo><bar id="dogcow"/></foo>" or "<foo/><bar><dogcow/><bar/>" etc. + <source:insert> + </pre> + + + <para>Input XML document example (write):</para> + <pre> + <page> + ... + <source:write xmlns:source="http://apache.org/cocoon/source/1.0"> + <source:source>context://doc/editable/my.xml</source:source> + <source:fragment><page> + <title>Hello World</title> + <content> + <p>This is my first paragraph.</p> + </content> + </page></source:fragment> + </source:write> + ... + </page> + </pre> + + <para>Input XML document example (insert at end):</para> + <pre> + <page> + ... + <source:insert xmlns:source="http://apache.org/cocoon/source/1.0"> + <source:source>context://doc/editable/my.xml</source:source> + <source:path>page/content</source:path> + <source:fragment> + <p>This paragraph gets <emp>inserted</emp>.</p> + <p>With this one, at the end of the content.</p> + </source:fragment> + </source:insert> + ... + </page> + </pre> + + <para>Input XML document example (insert at beginning):</para> + <pre> + <page> + ... + <source:insert> + <source:source>context://doc/editable/my.xml</source:source> + <source:path>page</source:path> + <source:replace>content</source:replace> + <source:reinsert>content</source:reinsert> + <source:fragment> + <content> + <p>This new paragraph gets inserted <emp>before</emp> the other ones.</p> + </content> + </source:fragment> + <source:insert> + ... + </page> + </pre> + + <para>Input XML document example (replace):</para> + <pre> + <page> + ... + <source:insert xmlns:source="http://apache.org/cocoon/source/1.0"> + <source:source>context://doc/editable/my.xml"</source:source> + <source:path>page/content</source:path> + <source:replace>p[1]</source:replace> + <source:fragment> + <p>This paragraph <emp>replaces</emp> the first paragraph.</p> + </source:fragment> + </source:insert> + ... + </page> + </pre> + + <para>Output XML document example:</para> + <pre> + <page> + ... + <sourceResult> + <action>new|overwritten|none</action> + <behaviour>write|insert<behaviour> + <execution>success|failure</execution> + <serializer>xml</serializer> + <source>file:/source/specific/path/to/context/doc/editable/my.xml</source> + </sourceResult> + ... + </page> + </pre> + + +<para> The XPath specification is very complicated. So here is an example for the sitemap:</para> + <pre> + <page xmlns:source="http://apache.org/cocoon/source/1.0"> + ... + <source:insert> + <source:source>sitemap.xmap</source:source> + <source:path>/*[namespace-uri()="http://apache.org/cocoon/sitemap/1.0" and local-name()="sitemap"]/*[namespace-uri()="http://apache.org/cocoon/sitemap/1.0" and local-name()="components"]/*[namespace-uri()="http://apache.org/cocoon/sitemap/1.0" and local-name()="generators"]</source:path> + <source:fragment> + <generator name="file" xmln="http://apache.org/cocoon/sitemap/1.0"> + <test/> + </generator> + </source:fragment> + <source:replace>*[namespace-uri()="http://apache.org/cocoon/sitemap/1.0" and local-name()="generator" and attribute::name="file"]</source:replace> + </source:insert> + ... + </page> + </pre> + + <para>This insert replaces (if it exists) the file generator definition with a new one. + As the sitemap uses namespaces the XPath for the generator is rather complicated. + Due to this it is necessary that the node specified by path exists if namespaces + are used! Otherwise a node with the name * would be created...</para> + +<para>The create attribute of insert. If this is set +to true (default is true), the file is created if it does not exists. +If it is set to false, it is not created, making insert a real insert. +create is only usable for files!</para> +<para>In addition the overwrite attribute is used to check if replacing is allowed. +If overwrite is true (the default) the node is replaced. If it is false +the node is not inserted if the replace node is available.</para> + +<para>[JQ] - the way I understand this, looking at the code: <pre> - <source:write src="docs/result1.xml" [serializer="my-xml-serializer"]> - <page> - <title>SourceWritingTransformer Test Result 1</title> - <content> - <para>Congratulations!</para> - </content> - </page> - </source:write> -</pre> - </para> - - <para> - This XMLFragment (or your equivalent) could have got into the stream by any means available to the Cocoon2 SiteMap. - Generation, Transformation, Aggregation, Inclusion etc. - Again, the serializer attribute is optional. - </para> + if 'replace' is not specified, your 'fragment' is appended as a child of 'path'. + if 'replace' is specified and it exists and 'overwrite' is true, your 'fragment' is inserted in 'path', before 'replace' and then 'replace' is deleted. + if 'replace' is specified and it exists and 'overwrite' is false, no action occurs. + if 'replace' is specified and it does not exist and 'overwrite' is true, your 'fragment' is appended as a child of 'path'. + if 'replace' is specified and it does not exist and 'overwrite' is false, your 'fragment' is appended as a child of 'path'. + if 'reinsert' is specified and it does not exist, no action occurs. +</pre></para> + +<para> The <source:reinsert> option can be used to + reinsert a replaced node at a given path in the new fragment.</para> <para> Known Problems: </para> - <para>If you have an error while editing an existing file, the file will probably be truncated by the process.</para> + <para>Improper namespace handling. Namespace declarations are not copied to the Source, resulting in invalid XML.</para> + <para>I cannot get the 'insert before' example working, which uses the <source:reinsert/> tag.</para> + + <para> + Warning: + </para> + <para>It is not known how robust this transformer is under even moderate load, especially when it comes to more than one person modifying the same file at the same time.</para> </content> </page> 1.4 +19 -7 xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/tests.xml Index: tests.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/tests.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- tests.xml 13 Mar 2002 19:19:42 -0000 1.3 +++ tests.xml 1 Jul 2002 08:51:01 -0000 1.4 @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <page> - <title>SourceWritingTransformer Tests</title> + <title>SourceWritingTransformer Test Suite</title> <content> <para> NB: SourceWritingTransformer has replaced FileWritingTransformer. @@ -10,20 +10,32 @@ Tests: Please run these tests and report any problems. </para> <para> - Test 1: <a href="test/1">Test 1</a>: the basic test, makes <a href="result/1">Result 1</a>. + Test 1: <a href="test/1">Test 1</a>: the basic source:write test, makes <a href="result/1">Result 1</a>. </para> <para> - Test 2: <a href="test/2">Test 2</a>: the namespace test, makes <a href="result/2">Result 2</a>, with the XLink namespace used inside. + Test 2: <a href="test/2">Test 2</a>: the source:write namespace test, makes <a href="result/2">Result 2</a>, with the XLink namespace used inside. <span class="failure">Known to fail</span> (the written file is unparseable, because the namespace declaration is missing). </para> <para> - Test 3: <a href="test/3">Test 3</a>: the new folder test, makes <a href="result/newfolder/3">Result 3</a>, in a new folder. + Test 3: <a href="test/3">Test 3</a>: the source:write new folder test, makes <a href="result/newfolder/3">Result 3</a>, in a new folder. </para> <para> - Test 4: <a href="test/4">Test 4</a>: the XInclude test, makes <a href="result/4">Result 4</a>, having XIncluded the content earlier in the pipeline. + Test 4: <a href="test/4">Test 4</a>: the source:write XInclude test, makes <a href="result/4">Result 4</a>, having XIncluded the content earlier in the pipeline. </para> <para> - Test 5: <a href="test/5">Test 5</a>: the XSLT test, a <a target="source" href="../../view-source?filename=mount/editor/tests/make-page.xsl">StyleSheet</a> makes <a href="result/5">Result 5</a>, from parts of <a href="test/5">Test 5</a>. + Test 5: <a href="test/5">Test 5</a>: the source:write XSLT test, a <a target="source" href="../../view-source?filename=mount/editor/tests/make-page.xsl">StyleSheet</a> makes <a href="result/5">Result 5</a>, from parts of <a href="test/5">Test 5</a>. + </para> + <para> + Test 6: <a href="test/6">Test 6</a>: the source:write read/write test, this is the great news, it was not expected to work, but it does!! This test first reads a file, modifies it then writes it back to the same place. Thanks to Olivier Rossel for contributing this. + </para> + <para> + Test 7: <a href="test/7">Test 7</a>: the source:insert after test, inserts a paragraph after the existing one in <a href="result/7">Result 7</a>. + </para> + <para> + Test 8: <a href="test/8">Test 8</a>: source:insert before test, this test attempts to insert a paragraph before existing ones using source:reinsert, <span class="failure">it currently fails</span>, either because I am using it wrong or the code does not work properly. + </para> + <para> + Test 9: <a href="test/9">Test 9</a>: source:insert replace test, similar to test 6, it updates the contents of a single tag, but this time it inserts, not overwrites. </para> - </content> </page> + 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/docs/slash-edit.css Index: slash-edit.css =================================================================== .title { text-align: center; font-size: 18px; font-weight: bold; font-family: sans-serif,Arial,Tahoma; color: black; background: white; border-color: black; border-width: 10px; } .main { border: 1px solid #0086B2; padding: 0px; margin: 6px; min-width: 630px; } .head { border-bottom: #0086B2; border-width: 0 0 1px 0; border-style: none none solid none; padding: 6px 6px 3px 6px; } .block { padding: 6px; } .confirm { width: 40%; margin-left: 50%; padding: 6px; } .content { border: 1px solid #0086B2; padding: 6px; margin: 1px; } tr { padding: 2px 6px 2px 6px; } .col1 { font-weight: bold; } .error .col1 { padding: 2px 20px 2px 6px; } .error .col2 { color:#BB0000; padding: 2px 20px 2px 6px; } .field { } .notify { font-size: 15px; text-align: left; } .tools { text-align: right; } .tool { padding: 6px; } .notes { font-size: 12px; font-weight: bold; color: white; background: #0086B2; text-align: left; padding: 6px 6px 3px 6px; } .foot { text-align: center; font-size: 12px; margin-top: 50px; } .hspace { margin: 30px; } #left { float: left; } #right { float: right; } #center { text-align: center; } #row { background: #EEFFFF; } .failure { font-weight: bold; color: #BB0000; } .warning { font-weight: bold; color: #BB0000; } .success { font-weight: bold; color: green; } .tab { font-size: 12px; font-weight: bold; color: white; background: #0086B2; padding: 4px 4px 2px 4px; border: 0px solid #0086B2; margin: 1px; } .tab a { text-decoration: none; color: white; } .tab a:visited { text-decoration: none; color: white; } .tab a:link { text-decoration: none; color: white; } .tab a:hover { text-decoration: underline; color: red; } a { text-decoration: none; } a:hover { text-decoration: underline; color: red; } body { font-size: 12px; font-family: sans-serif,Arial,Tahoma; color: black; background: white; } form { font-size: 12px; } textarea { background-color: #EEFFFF; font-size: 12px; font-family: geneva,arial,sans-serif; border-color: #0086B2; border-width: 1px; padding-left: 2px; } textarea.hidden { display: none; } input { background-color: #EEFFFF; font-size: 12px; font-family: geneva,arial,sans-serif; border-color: #0086B2; border-width: 1px; padding-left: 2px; } input.submit { background-color: #0086B2; font-size: 12px; font-family: geneva,arial,sans-serif; border-color: black; border-width: 1px; padding: 2px 6px; font-weight: bold; color: white; } input.button { background-color: #BB0000; font-size: 12px; font-family: geneva,arial,sans-serif; border-color: black; border-width: 1px; padding: 2px 6px; font-weight: bold; color: white; } 1.8 +18 -14 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor-components.xsl Index: editor-components.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor-components.xsl,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- editor-components.xsl 22 Mar 2002 12:10:00 -0000 1.7 +++ editor-components.xsl 1 Jul 2002 08:51:01 -0000 1.8 @@ -113,41 +113,45 @@ </div> </xsl:template> -<!-- outputs the response from WriteableSourceTransformer --> - <xsl:template match="source:write"> +<!-- outputs the response from SourceWritingTransformer --> + <xsl:template match="sourceResult"> <div class="block"> <span class="tab">Writing to Source</span> <div class="content"> <table> <tr> <td class="col1">Result</td> - <td class="col2"><span class="{@result}"><xsl:value-of select="@result"/></span></td> + <td class="col2"><span class="{execution}"><xsl:value-of select="execution"/></span></td> </tr> - <xsl:if test="@result = 'failed'"> - <tr class="error"> - <td class="col1">Error</td> - <td class="col2"><span class="{@result}"><xsl:value-of select="text()"/></span></td> - </tr> + <tr> + <td class="col1">Behaviour</td> + <td class="col2"><xsl:value-of select="behaviour"/></td> + </tr> + <xsl:if test="message"> + <tr> + <td class="col1">Message</td> + <td class="col2"><xsl:value-of select="message"/></td> + </tr> </xsl:if> <tr> <td class="col1">Source</td> - <td class="col2"><xsl:value-of select="@src"/></td> + <td class="col2"><xsl:value-of select="source"/></td> </tr> <tr> <td class="col1">Action</td> <td class="col2"> <xsl:choose> - <xsl:when test="@action = 'none'">None taken</xsl:when> - <xsl:when test="@action = 'new'">New file created</xsl:when> - <xsl:when test="@action = 'overwritten'">Existing file overwritten</xsl:when> + <xsl:when test="action = 'none'">None taken</xsl:when> + <xsl:when test="action = 'new'">New document created</xsl:when> + <xsl:when test="action = 'overwritten'">Existing document overwritten</xsl:when> <xsl:otherwise>Unknown</xsl:otherwise> </xsl:choose> </td> </tr> - <xsl:if test="@serializer"> + <xsl:if test="serializer"> <tr> <td class="col1">Serializer</td> - <td class="col2"><xsl:value-of select="@serializer"/></td> + <td class="col2"><xsl:value-of select="serializer"/></td> </tr> </xsl:if> </table> 1.9 +1 -221 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor-page2html.xsl Index: editor-page2html.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor-page2html.xsl,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- editor-page2html.xsl 22 Mar 2002 12:10:00 -0000 1.8 +++ editor-page2html.xsl 1 Jul 2002 08:51:01 -0000 1.9 @@ -44,228 +44,8 @@ </script> </xsl:if> - - <!-- this will move into a separate file, when it has settled down --> - <style><![CDATA[ + <link type="text/css" rel="stylesheet" href="style"/> - .title - { - text-align: center; - font-size: 18px; - font-weight: bold; - font-family: sans-serif,Arial,Tahoma; - color: black; - background: white; - border-color: black; - border-width: 10px; - } - - .main - { - border: 1px solid #0086B2; - padding: 0px; - margin: 6px; - min-width: 630px; - } - - .head - { - border-bottom: #0086B2; - border-width: 0 0 1px 0; - border-style: none none solid none; - padding: 6px 6px 3px 6px; - } - - .block { padding: 6px; } - - .confirm - { - width: 40%; - margin-left: 50%; - padding: 6px; - } - - .content - { - border: 1px solid #0086B2; - padding: 6px; - margin: 1px; - } - - tr - { - padding: 2px 6px 2px 6px; - } - - - .col1 - { - font-weight: bold; - } - - .error .col1 - { - padding: 2px 20px 2px 6px; - } - - .error .col2 - { - color:#BB0000; - padding: 2px 20px 2px 6px; - } - - .field { } - - .notify - { - font-size: 15px; - text-align: left; - } - - .tools { text-align: right; } - .tool { padding: 6px; } - - .notes - { - font-size: 12px; - font-weight: bold; - color: white; - background: #0086B2; - text-align: left; - padding: 6px 6px 3px 6px; - } - - .foot - { - text-align: center; - font-size: 12px; - margin-top: 50px; - } - - .hspace { margin: 30px; } - #left { float: left; } - #right { float: right; } - #center { text-align: center; } - #row { background: #EEFFFF; } - - .failure - { - font-weight: bold; - color: #BB0000; - } - - .warning - { - font-weight: bold; - color: #BB0000; - } - - .success - { - font-weight: bold; - color: green; - } - - .tab - { - font-size: 12px; - font-weight: bold; - color: white; - background: #0086B2; - padding: 4px 4px 2px 4px; - border: 0px solid #0086B2; - margin: 1px; - } - - .tab a - { - text-decoration: none; - color: white; - } - - .tab a:visited - { - text-decoration: none; - color: white; - } - - .tab a:link - { - text-decoration: none; - color: white; - } - - .tab a:hover - { - text-decoration: underline; - color: red; - } - - a { text-decoration: none; } - - a:hover - { - text-decoration: underline; - color: red; - } - - body - { - font-size: 12px; - font-family: sans-serif,Arial,Tahoma; - color: black; - background: white; - } - - form { font-size: 12px; } - - textarea - { - background-color: #EEFFFF; - font-size: 12px; - font-family: geneva,arial,sans-serif; - border-color: #0086B2; - border-width: 1px; - padding-left: 2px; - } - - textarea.hidden { display: none; } - - input - { - background-color: #EEFFFF; - font-size: 12px; - font-family: geneva,arial,sans-serif; - border-color: #0086B2; - border-width: 1px; - padding-left: 2px; - } - - input.submit - { - background-color: #0086B2; - font-size: 12px; - font-family: geneva,arial,sans-serif; - border-color: black; - border-width: 1px; - padding: 2px 6px; - font-weight: bold; - color: white; - } - - input.button - { - background-color: #BB0000; - font-size: 12px; - font-family: geneva,arial,sans-serif; - border-color: black; - border-width: 1px; - padding: 2px 6px; - font-weight: bold; - color: white; - } - ]]> - </style> </head> <body> <div class="title"><xsl:value-of select="$config/@title"/> - site editor demo</div> 1.4 +9 -5 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor2writer.xsl Index: editor2writer.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor2writer.xsl,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- editor2writer.xsl 22 Mar 2002 12:10:00 -0000 1.3 +++ editor2writer.xsl 1 Jul 2002 08:51:01 -0000 1.4 @@ -28,9 +28,12 @@ <xsl:copy-of select="@*"/> <xsl:choose> <xsl:when test="instance/@behaviour='put'"> - <instance behaviour="{instance/@behaviour}" target="{instance/@target}"><source:write src="{concat($base,instance/@target)}" xml:space="preserve" xmlns:source="http://apache.org/cocoon/source/1.0"> -<xsl:apply-templates select="instance/*"/> - </source:write></instance> + <instance behaviour="{instance/@behaviour}" target="{instance/@target}"> + <source:write xml:space="preserve" xmlns:source="http://apache.org/cocoon/source/1.0"> + <source:source><xsl:value-of select="$base"/><xsl:value-of select="instance/@target"/></source:source> + <source:fragment><xsl:apply-templates select="instance/*"/></source:fragment> + </source:write> + </instance> </xsl:when> <xsl:otherwise> <instance behaviour="{instance/@behaviour}" target="{instance/@target}"> @@ -42,8 +45,9 @@ </editor> </xsl:template> -<!-- copy content - <xsl:template match="para"><para i="t"><xsl:value-of disable-output-escaping="yes" select="text()"/></para></xsl:template> +<!-- copy content ** this copies any tags into the source, when the source is re-parsed, they will be XML. ** + ** this is highly dangerous because no validation takes place !!!!! ** + <xsl:template match="para"><para><xsl:value-of disable-output-escaping="yes" select="text()"/></para></xsl:template> --> <!-- copy anything --> <xsl:template match="@*|node()" priority="-2"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template> 1.5 +29 -21 xml-cocoon2/src/scratchpad/webapp/mount/editor/stylesheets/simple-page2html.xsl Index: simple-page2html.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/stylesheets/simple-page2html.xsl,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- simple-page2html.xsl 22 Mar 2002 12:10:00 -0000 1.4 +++ simple-page2html.xsl 1 Jul 2002 08:51:01 -0000 1.5 @@ -23,7 +23,8 @@ .notes{font-size:12px;font-weight:bold;color:white;background:#0086B2} .result{font-size:12px;color:black} .failure{font-size:12px;font-weight:bold;color:red} - .success{font-size:12px;color:black} + .counter{font-size:72px;font-weight:bold;color:gray} + .success{font-size:12px;font-weight:bold;color:green} .caption{font-size:12px;font-weight:bold;color:black;} textarea{font-size:12px;font-family : geneva,arial,sans-serif;} //-->]]> @@ -56,56 +57,63 @@ </p> </xsl:template> + + <xsl:template match="counter"> + <span class="counter"><xsl:value-of select="."/></span> + </xsl:template> + <xsl:template match="import"> <blockquote style="color:green;"> <xsl:apply-templates/> </blockquote> </xsl:template> - <xsl:template match="source:write"> + <xsl:template match="sourceResult"> <table border="0" cellspacing="0" cellpadding="5" width="100%"> <tr> + <td class="caption">Behaviour</td> + <td class="result"> + <xsl:value-of select="behaviour"/> + </td> + </tr> + <tr> <td class="caption">Result</td> <td class="result"> - <span class="{@result}"> - <xsl:value-of select="@result"/> + <span class="{execution}"> + <xsl:value-of select="execution"/> </span> </td> </tr> - <xsl:if test="@result = 'failed'"> - <tr> - <td class="caption">Error</td> - <td class="result"> - <span class="{@result}"> - <xsl:value-of select="text()"/> - </span> - </td> - </tr> - </xsl:if> + <tr> + <td class="caption">Message</td> + <td class="result"> + <xsl:value-of select="message"/> + </td> + </tr> <tr> <td class="caption">Source</td> <td class="result"> - <xsl:value-of select="@src"/> + <xsl:value-of select="source"/> </td> </tr> - <xsl:if test="@action"> + <xsl:if test="action"> <tr> <td class="caption">Action</td> <td class="result"> <xsl:choose> - <xsl:when test="@action = 'none'">None taken</xsl:when> - <xsl:when test="@action = 'new'">New file created</xsl:when> - <xsl:when test="@action = 'overwritten'">Existing file overwritten</xsl:when> + <xsl:when test="action = 'none'">None taken</xsl:when> + <xsl:when test="action = 'new'">New file created</xsl:when> + <xsl:when test="action = 'overwritten'">Existing file overwritten</xsl:when> <xsl:otherwise>Unknown</xsl:otherwise> </xsl:choose> </td> </tr> </xsl:if> - <xsl:if test="@serializer"> + <xsl:if test="serializer"> <tr> <td class="caption">Serializer</td> <td class="result"> - <xsl:value-of select="@serializer"/> + <xsl:value-of select="serializer"/> </td> </tr> </xsl:if> 1.2 +1 -2 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/include-me.xml Index: include-me.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/include-me.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- include-me.xml 22 Feb 2002 22:15:35 -0000 1.1 +++ include-me.xml 1 Jul 2002 08:51:01 -0000 1.2 @@ -1,10 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> -<page xmlns:xl="http://www.w3.org/1999/xlink"> +<page> <title>Include me in Test Result 4</title> <content> <para>This is an external file that is to be XIncluded by 'test4' to make a new document.</para> - <para>This is an element in the <link xl:to="nowhere">XLink Namespace</link>.</para> <para> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. </para><para> 1.4 +5 -5 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/make-page.xsl Index: make-page.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/make-page.xsl,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- make-page.xsl 13 Mar 2002 19:19:42 -0000 1.3 +++ make-page.xsl 1 Jul 2002 08:51:01 -0000 1.4 @@ -12,21 +12,21 @@ </xsl:template> <xsl:template match="make-page"> - <source:write src="tests/result5.xml" xml:space="preserve"> -<page xmlns:xl="http://www.w3.org/1999/xlink"> + <source:write> + <source:source>tests/result5.xml</source:source> + <source:fragment><page> <title>Result from - <xsl:value-of select="/page/title"/></title> <content> <para>This file was assembled by XSLT from elements in <a target="source" href="../../../view-source?filename=mount/editor/tests/test5.xml">test5</a></para> <para>Here are some paragraphs copied from there: <import> <xsl:for-each select="/page/content/para"> - <xsl:copy><xsl:apply-templates/></xsl:copy> + <xsl:copy><xsl:apply-templates/></xsl:copy> </xsl:for-each> </import> </para> - <para>And <link xl:to="nowhere">here</link> is another fake XLink, for luck</para> </content> -</page> +</page></source:fragment> </source:write> </xsl:template> 1.4 +14 -12 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test1.xml Index: test1.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test1.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- test1.xml 13 Mar 2002 19:19:42 -0000 1.3 +++ test1.xml 1 Jul 2002 08:51:01 -0000 1.4 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<page xmlns:source="http://apache.org/cocoon/source/1.0"> +<page> <title>SourceWritingTransformer Test Page 1</title> <content> <para><b>Test</b>: Basic</para> @@ -9,24 +9,26 @@ <para>The XML is:</para> <para> <pre> - <source:write src="tests/result1.xml"> - <page> - <title>SourceWritingTransformer Test Result 1</title> - <content> - <para>Congratulations!</para> - </content> - </page> - </source:write> +<source:write> + <source:source>tests/result1.xml</source:source> + <source:fragment><page> + <title>SourceWritingTransformer Test Result 1</title> + <content> + <para>Congratulations!</para> + </content> +</page></source:fragment> +</source:write> </pre> </para> -<source:write src="tests/result1.xml"> -<page> +<source:write xmlns:source="http://apache.org/cocoon/source/1.0"> + <source:source>tests/result1.xml</source:source> +<source:fragment><page> <title>SourceWritingTransformer Test Result 1</title> <content> <para>Congratulations!</para> </content> -</page> +</page></source:fragment> </source:write> <para>Have a <a href="../result/1">look!</a></para> 1.4 +13 -11 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test2.xml Index: test2.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test2.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- test2.xml 13 Mar 2002 19:19:42 -0000 1.3 +++ test2.xml 1 Jul 2002 08:51:01 -0000 1.4 @@ -12,28 +12,30 @@ <para>The XML is:</para> <para> <pre> -<source:write src="tests/result2.xml"> - <page xmlns:xl="http://www.w3.org/1999/xlink"> - <title>SourceWritingTransformer Test Result 2</title> - <content> - <para>Congratulations!</para> - <para><link xl:to="test2">I am in the XLink NameSpace</link></para> - </content> - </page> +<source:write src=""> + <source:source>tests/result2.xml</source:source> + <source:fragment><page xmlns:xl="http://www.w3.org/1999/xlink"> + <title>SourceWritingTransformer Test Result 2</title> + <content> + <para>Congratulations!</para> + <para><link xl:to="test/2">I am in the XLink NameSpace</link></para> + </content> +</page></source:fragment> </source:write> </pre> </para> <para>The namespace is: http://www.w3.org/1999/xlink</para> -<source:write src="tests/result2.xml"> -<page xmlns:xl="http://www.w3.org/1999/xlink"> +<source:write src=""> + <source:source>tests/result2.xml</source:source> + <source:fragment><page xmlns:xl="http://www.w3.org/1999/xlink"> <title>SourceWritingTransformer Test Result 2</title> <content> <para>Congratulations!</para> <para><link xl:to="test/2">I am in the XLink NameSpace</link></para> </content> -</page> +</page></source:fragment> </source:write> <para>Have a <a href="../result/2">look!</a></para> 1.4 +12 -10 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test3.xml Index: test3.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test3.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- test3.xml 13 Mar 2002 19:19:42 -0000 1.3 +++ test3.xml 1 Jul 2002 08:51:01 -0000 1.4 @@ -10,24 +10,26 @@ <para>The XML is:</para> <para> <pre> -<source:write src="tests/newfolder/result3.xml"> - <page> - <title>SourceWritingTransformer Test Result 3</title> - <content> - <para>Congratulations!</para> - </content> - </page> +<source:write xmlns:source="http://apache.org/cocoon/source/1.0"> + <source:source>tests/newfolder/result3.xml</source:source> + <source:fragment><page> + <title>SourceWritingTransformer Test Result 3</title> + <content> + <para>Congratulations!</para> + </content> +</page></source:fragment> </source:write> </pre> </para> -<source:write src="tests/newfolder/result3.xml" xmlns:source="http://apache.org/cocoon/source/1.0"> -<page> +<source:write xmlns:source="http://apache.org/cocoon/source/1.0"> + <source:source>tests/newfolder/result3.xml</source:source> + <source:fragment><page> <title>SourceWritingTransformer Test Result 3</title> <content> <para>Congratulations!</para> </content> -</page> +</page></source:fragment> </source:write> <para>Have a <a href="../result/newfolder/3">look!</a></para> 1.4 +6 -4 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test4.xml Index: test4.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test4.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- test4.xml 13 Mar 2002 19:19:42 -0000 1.3 +++ test4.xml 1 Jul 2002 08:51:01 -0000 1.4 @@ -12,14 +12,16 @@ <para>The XML is:</para> <para> <pre> -<source:write src="tests/result4.xml"> - <ci:include src="tests/include.xml"/> +<source:write> + <source:source>tests/result4.xml</source:source> + <source:fragment><ci:include src="tests/include.xml"/></source:fragment> </source:write> </pre> </para> -<source:write src="tests/result4.xml"> -<ci:include src="tests/include-me.xml"/> +<source:write> + <source:source>tests/result4.xml</source:source> + <source:fragment><ci:include src="tests/include-me.xml"/></source:fragment> </source:write> <para>Have a <a href="../result/4">look!</a></para> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/result7.xml Index: result7.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <page> <title>SourceWritingTransformer Test 7</title> <content> <para>This is the original paragraph</para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/result8.xml Index: result8.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <page> <title>SourceWritingTransformer Test 8</title> <content> <para>This is the original paragraph</para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test7.xml Index: test7.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page xmlns:source="http://apache.org/cocoon/source/1.0" > <title>SourceWritingTransformer Test Page 7</title> <content> <para><b>Test</b>: Insert After</para> <para>This test should have written a file called result7.xml, in the same directory as this.</para> <para>The file's content should come from the xml below, being inserted after the original.</para> <para>The XML is:</para> <para> <pre> <source:insert> <source:path>page/content</source:path> <source:source>tests/result7.xml</source:source> <source:fragment><para>Congratulations!</para></source:fragment> </source:insert> </pre> </para> <source:insert> <source:path>page/content</source:path> <source:source>tests/result7.xml</source:source> <source:fragment> <para>Congratulations!</para> </source:fragment> </source:insert> <para>Have a <a href="../result/7">look!</a></para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test8.xml Index: test8.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page xmlns:source="http://apache.org/cocoon/source/1.0" > <title>SourceWritingTransformer Test Page 8</title> <content> <para><b>Test</b>: Insert Before</para> <para>This test should have written a file called result8.xml, in the same directory as this.</para> <para>The file's content should come from the xml below. The paragraph should be inserted before the others.</para> <para>The XML is:</para> <para> <pre> <source:insert> <source:source>tests/result8.xml</source:source> <source:path>page</source:path> <source:replace>content</source:replace> <source:reinsert>content</source:reinsert> <source:fragment> <content> <p>This new paragraph gets inserted <emp>before</emp> the other ones.</p> </content> </source:fragment> </source:insert> </pre> </para> <source:insert> <source:source>tests/result8.xml</source:source> <source:path>page</source:path> <source:replace>content</source:replace> <source:reinsert>content</source:reinsert> <source:fragment> <content> <p>This new paragraph gets inserted <emp>before</emp> the other ones.</p> </content> </source:fragment> </source:insert> <para>Have a <a href="../result/8">look!</a></para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test6/inc.xsl Index: inc.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Default template: copy node, and apply templates for all children --> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <!-- Specific template for foobar: increment the content of the node then copy itself with the new content --> <xsl:template match="counter"> <xsl:variable name="contentNumber" select="number(.)"/> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:value-of select="1+$contentNumber"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test6/input.xml Index: input.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <page> <title>SourceWritingTransformer Test Page 6</title> <content> <para><b>Test</b>: Insert Replace</para> <para>This test replicates <a href="9">test 9</a>, but does a <emp>write</emp>, using xslt to update the document.</para> <para>This test should have incremented a counter in this file "tests/test6/input.xml".</para> <para>The counter is: <counter>0</counter></para> <para>Try <a href="../test/6">again</a>!</para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test6/prepareWrite.xsl Index: prepareWrite.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:source="http://apache.org/cocoon/source/1.0"> <!-- Copies all the input tree into the input.xml file --> <xsl:template match="/"> <xsl:copy-of select="*"/> <source:write> <source:source>tests/test6/input.xml</source:source> <source:fragment><xsl:copy-of select="*"/></source:fragment> </source:write> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test9/inc.xsl Index: inc.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Default template: copy node, and apply templates for all children --> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <!-- Specific template for counter: increment the content of the node then copy itself with the new content --> <xsl:template match="counter"> <xsl:variable name="contentNumber" select="number(.)"/> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:value-of select="1+$contentNumber"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test9/input.xml Index: input.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <page> <title>SourceWritingTransformer Test Page 9</title> <content> <para><b>Test</b>: Insert Replace</para> <para>This test replicates <a href="6">test 6</a>, but this time doing an <emp>insert</emp> instead of a <emp>write</emp>.</para> <para>This test should have incremented a counter in this file "tests/test9/input.xml".</para> <para>The counter is: <counter>0</counter></para> <para> <pre> <source:insert> <source:source>tests/test9/input.xml</source:source> <source:path>page/content/para[4]</source:path> <source:replace>counter</source:replace> <source:fragment><counter>n</counter></source:fragment> </source:insert> </pre> </para> <para>Try <a href="../test/9">again</a>!</para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test9/prepareWrite.xsl Index: prepareWrite.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:source="http://apache.org/cocoon/source/1.0"> <xsl:template match="/"> <page> <xsl:apply-templates select="page/*"/> <source:insert> <source:source>tests/test9/input.xml</source:source> <source:path>page/content/para[4]</source:path> <source:replace>counter</source:replace> <source:fragment><xsl:apply-templates select="/page/content/para[4]/counter"/></source:fragment> </source:insert> </page> </xsl:template> <!-- copy anything --> <xsl:template match="@*|node()" priority="-2"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template> <xsl:template match="text()" priority="-1"><xsl:value-of select="."/></xsl:template> </xsl:stylesheet>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]