| <?xml version="1.0"?> |
| |
| <!-- |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| --> |
| |
| <!-- --> |
| <!-- Default XSL stylesheet for use by com.lotus.xsl.server#DefaultApplyXSL. --> |
| <!-- --> |
| <!-- This stylesheet mimics the default behavior of IE when XML data is displayed --> |
| <!-- without a corresponding XSL stylesheet. This stylesheet uses JavaScript --> |
| <!-- to accommodate node expansion and contraction. --> |
| <!-- --> |
| |
| <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" |
| xmlns="http://www.w3.org/TR/REC-html40"> |
| |
| <xsl:output method="html" indent="no"/> |
| <xsl:strip-space elements="*"/> |
| |
| <xsl:template match="/"> |
| <HTML> |
| <HEAD> |
| <STYLE type="text/css"> |
| BODY {font:x-small 'Verdana'; margin-right:1.5em} |
| <!-- container for expanding/collapsing content --> |
| .c {cursor:hand} |
| <!-- button - contains +/-/nbsp --> |
| .b {color:red; font-family:'Courier New'; font-weight:bold; text-decoration:none} |
| <!-- element container --> |
| .e {margin-left:1em; text-indent:-1em; margin-right:1em} |
| <!-- comment or cdata --> |
| .k {margin-left:1em; text-indent:-1em; margin-right:1em} |
| <!-- tag --> |
| .t {color:#990000} |
| <!-- tag in xsl namespace --> |
| .xt {color:#990099} |
| <!-- attribute in xml or xmlns namespace --> |
| .ns {color:red} |
| <!-- markup characters --> |
| .m {color:blue} |
| <!-- text node --> |
| .tx {font-weight:bold} |
| <!-- multi-line (block) cdata --> |
| .db {text-indent:0px; margin-left:1em; margin-top:0px; margin-bottom:0px; |
| padding-left:.3em; border-left:1px solid #CCCCCC; font:small Courier} |
| <!-- single-line (inline) cdata --> |
| .di {font:small Courier} |
| <!-- DOCTYPE declaration --> |
| .d {color:blue} |
| <!-- pi --> |
| .pi {color:blue} |
| <!-- multi-line (block) comment --> |
| .cb {text-indent:0px; margin-left:1em; margin-top:0px; margin-bottom:0px; |
| padding-left:.3em; font:small Courier; color:#888888} |
| <!-- single-line (inline) comment --> |
| .ci {font:small Courier; color:#888888} |
| PRE {margin:0px; display:inline} |
| </STYLE> |
| |
| <SCRIPT type="text/javascript"><xsl:comment><![CDATA[ |
| // Detect and switch the display of CDATA and comments from an inline view |
| // to a block view if the comment or CDATA is multi-line. |
| function f(e) |
| { |
| // if this element is an inline comment, and contains more than a single |
| // line, turn it into a block comment. |
| if (e.className == "ci") { |
| if (e.children(0).innerText.indexOf("\n") > 0) |
| fix(e, "cb"); |
| } |
| |
| // if this element is an inline cdata, and contains more than a single |
| // line, turn it into a block cdata. |
| if (e.className == "di") { |
| if (e.children(0).innerText.indexOf("\n") > 0) |
| fix(e, "db"); |
| } |
| |
| // remove the id since we only used it for cleanup |
| e.id = ""; |
| } |
| |
| // Fix up the element as a "block" display and enable expand/collapse on it |
| function fix(e, cl) |
| { |
| // change the class name and display value |
| e.className = cl; |
| e.style.display = "block"; |
| |
| // mark the comment or cdata display as a expandable container |
| j = e.parentElement.children(0); |
| j.className = "c"; |
| |
| // find the +/- symbol and make it visible - the dummy link enables tabbing |
| k = j.children(0); |
| k.style.visibility = "visible"; |
| k.href = "#"; |
| } |
| |
| // Change the +/- symbol and hide the children. This function works on "element" |
| // displays |
| function ch(e) |
| { |
| // find the +/- symbol |
| mark = e.children(0).children(0); |
| |
| // if it is already collapsed, expand it by showing the children |
| if (mark.innerText == "+") |
| { |
| mark.innerText = "-"; |
| for (var i = 1; i < e.children.length; i++) |
| e.children(i).style.display = "block"; |
| } |
| |
| // if it is expanded, collapse it by hiding the children |
| else if (mark.innerText == "-") |
| { |
| mark.innerText = "+"; |
| for (var i = 1; i < e.children.length; i++) |
| e.children(i).style.display="none"; |
| } |
| } |
| |
| // Change the +/- symbol and hide the children. This function work on "comment" |
| // and "cdata" displays |
| function ch2(e) |
| { |
| // find the +/- symbol, and the "PRE" element that contains the content |
| mark = e.children(0).children(0); |
| contents = e.children(1); |
| |
| // if it is already collapsed, expand it by showing the children |
| if (mark.innerText == "+") |
| { |
| mark.innerText = "-"; |
| // restore the correct "block"/"inline" display type to the PRE |
| if (contents.className == "db" || contents.className == "cb") |
| contents.style.display = "block"; |
| else contents.style.display = "inline"; |
| } |
| |
| // if it is expanded, collapse it by hiding the children |
| else if (mark.innerText == "-") |
| { |
| mark.innerText = "+"; |
| contents.style.display = "none"; |
| } |
| } |
| |
| // Handle a mouse click |
| function cl() |
| { |
| e = window.event.srcElement; |
| |
| // make sure we are handling clicks upon expandable container elements |
| if (e.className != "c") |
| { |
| e = e.parentElement; |
| if (e.className != "c") |
| { |
| return; |
| } |
| } |
| e = e.parentElement; |
| |
| // call the correct funtion to change the collapse/expand state and display |
| if (e.className == "e") |
| ch(e); |
| if (e.className == "k") |
| ch2(e); |
| } |
| |
| // Erase bogus link info from the status window |
| function h() |
| { |
| window.status=" "; |
| } |
| |
| // Set the onclick handler |
| document.onclick = cl; |
| |
| ]]>//</xsl:comment></SCRIPT> |
| </HEAD> |
| |
| <BODY class="st"><xsl:apply-templates/></BODY> |
| |
| </HTML> |
| </xsl:template> |
| |
| <!-- Templates for each node type follows. The output of each template has a similar structure |
| to enable script to walk the result tree easily for handling user interaction. --> |
| |
| <!-- Template for pis not handled elsewhere --> |
| <xsl:template match="processing-instruction()"> |
| <DIV class="e"> |
| <SPAN class="b"> </SPAN> |
| <SPAN class="m"><?</SPAN><SPAN class="pi"><xsl:value-of select="name(.)"/> <xsl:value-of select="."/></SPAN><SPAN class="m">?></SPAN> |
| </DIV> |
| </xsl:template> |
| |
| <!-- Template for the XML declaration. Need a separate template because the pseudo-attributes |
| are actually exposed as attributes instead of just element content, as in other pis |
| <xsl:template match="processing-instruction('xml')"> |
| <DIV class="e"> |
| <SPAN class="b"> </SPAN> |
| <SPAN class="m"><?</SPAN><SPAN class="pi">xml <xsl:for-each select="@*"><xsl:value-of select="name(.)"/>="<xsl:value-of select="."/>" </xsl:for-each></SPAN><SPAN class="m">?></SPAN> |
| </DIV> |
| </xsl:template> |
| --> |
| |
| <!-- Template for attributes not handled elsewhere --> |
| <xsl:template match="@*"><SPAN class="t"><xsl:text> </xsl:text><xsl:value-of select="name(.)"/></SPAN><SPAN class="m">="</SPAN><B><xsl:value-of select="."/></B><SPAN class="m">"</SPAN></xsl:template> |
| |
| <!-- Template for attributes in the xmlns or xml namespace |
| <xsl:template match="@xmlns:*|@xmlns|@xml:*"><SPAN class="ns"> <xsl:value-of select="name(.)"/></SPAN><SPAN class="m">="</SPAN><B class="ns"><xsl:value-of select="."/></B><SPAN class="m">"</SPAN></xsl:template> |
| --> |
| |
| <!-- Template for text nodes --> |
| <xsl:template match="text()"> |
| <xsl:choose><xsl:when test="name(.) = '#cdata-section'"><xsl:call-template name="cdata"/></xsl:when> |
| <xsl:otherwise><DIV class="e"> |
| <SPAN class="b"> </SPAN> |
| <SPAN class="tx"><xsl:value-of select="."/></SPAN> |
| </DIV></xsl:otherwise></xsl:choose> |
| </xsl:template> |
| |
| <!-- Template for comment nodes --> |
| <xsl:template match="comment()"> |
| <DIV class="k"> |
| <SPAN><A class="b" onclick="return false" onfocus="h()" STYLE="visibility:hidden">-</A> <SPAN class="m"><!--</SPAN></SPAN> |
| <SPAN id="clean" class="ci"><PRE><xsl:value-of select="."/></PRE></SPAN> |
| <SPAN class="b"> </SPAN> <SPAN class="m">--></SPAN> |
| <SCRIPT>f(clean);</SCRIPT></DIV> |
| </xsl:template> |
| |
| <!-- Template for cdata nodes --> |
| <xsl:template name="cdata"> |
| <DIV class="k"> |
| <SPAN><A class="b" onclick="return false" onfocus="h()" STYLE="visibility:hidden">-</A> <SPAN class="m"><![CDATA[</SPAN></SPAN> |
| <SPAN id="clean" class="di"><PRE><xsl:value-of select="."/></PRE></SPAN> |
| <SPAN class="b"> </SPAN> <SPAN class="m">]]></SPAN> |
| <SCRIPT>f(clean);</SCRIPT></DIV> |
| </xsl:template> |
| |
| <!-- Template for elements not handled elsewhere (leaf nodes) --> |
| <xsl:template match="*"> |
| <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em"> |
| <SPAN class="b"> </SPAN> |
| <SPAN class="m"><</SPAN><SPAN class="t"><xsl:value-of select="name(.)"/></SPAN> <xsl:apply-templates select="@*"/><SPAN class="m"> /></SPAN> |
| </DIV></DIV> |
| </xsl:template> |
| |
| <!-- Template for elements with comment, pi and/or cdata children |
| <xsl:template match="*[comment() or processing-instruction() or cdata()]"> |
| <DIV class="e"> |
| <DIV class="c"><A href="#" onclick="return false" onfocus="h()" class="b">-</A> <SPAN class="m"><</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="name(.)"/></SPAN><xsl:apply-templates select="@*"/> <SPAN class="m">></SPAN></DIV> |
| <DIV><xsl:apply-templates/> |
| <DIV><SPAN class="b"> </SPAN> <SPAN class="m"></</SPAN><SPAN><xsl:attribute name="class"><xsl:if test="xsl:*">x</xsl:if>t</xsl:attribute><xsl:value-of select="name(.)"/></SPAN><SPAN class="m">></SPAN></DIV> |
| </DIV></DIV> |
| </xsl:template> --> |
| |
| <!-- Template for elements with only text children --> |
| <xsl:template match="*[text() and not(comment() or processing-instruction() or *)]"> |
| <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em"> |
| <SPAN class="b"> </SPAN> <SPAN class="m"><</SPAN><SPAN class="t"><xsl:value-of select="name(.)"/></SPAN><xsl:apply-templates select="@*"/> |
| <SPAN class="m">></SPAN><SPAN class="tx"><xsl:value-of select="."/></SPAN><SPAN class="m"></</SPAN><SPAN class="t"><xsl:value-of select="name(.)"/></SPAN><SPAN class="m">></SPAN> |
| </DIV></DIV> |
| </xsl:template> |
| |
| <!-- Template for elements with element children --> |
| <xsl:template match="*[*]"> |
| <DIV class="e"> |
| <DIV class="c" STYLE="margin-left:1em;text-indent:-2em"><A href="#" onclick="return false" onfocus="h()" class="b">-</A> <SPAN class="m"><</SPAN><SPAN class="t"><xsl:value-of select="name(.)"/></SPAN><xsl:apply-templates select="@*"/><SPAN class="m">></SPAN></DIV> |
| <DIV><xsl:apply-templates/> |
| <DIV><SPAN class="b"> </SPAN><SPAN class="m"></</SPAN><SPAN class="t"><xsl:value-of select="name(.)"/></SPAN><SPAN class="m">></SPAN></DIV> |
| </DIV></DIV> |
| </xsl:template> |
| |
| </xsl:stylesheet> |