mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-04-05 21:01:35 +08:00

wcat binaries (http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1466) Orchard.Profiling project to hold some wcat scripts for generating stress-style load and specflow features for generating fixed sets of requests "add profiling data" command in Orchard.DevTools to create a number of samples page and blog content items "build.cmd profiling" target creates build\Profiling web dir from clean build, and execs baseline setup and population via orchard cmdline --HG-- branch : dev
1787 lines
60 KiB
XML
1787 lines
60 KiB
XML
<?xml version="1.0"?>
|
|
|
|
<xsl:stylesheet
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
|
|
xmlns:ms="urn:microsoft-performance"
|
|
exclude-result-prefixes="msxsl"
|
|
version="1.0">
|
|
<xsl:output method='html' indent='yes' standalone='yes' encoding="utf-16"/>
|
|
|
|
<!-- ********** XSL PARAMETERS ********** -->
|
|
|
|
<xsl:param name="defaultTop"/>
|
|
<xsl:param name="defaultLevel"/>
|
|
|
|
<!--***************************************************************************
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
****************************************************************************-->
|
|
|
|
<!-- ********** XSL FUNCTIONS ********** -->
|
|
|
|
<msxsl:script language='JScript' implements-prefix='ms'><![CDATA[
|
|
|
|
var g_tag = 0;
|
|
|
|
function unique( list, index ){
|
|
var check = index - 1;
|
|
|
|
if( check == 0 ){
|
|
return 1;
|
|
}
|
|
|
|
for( var i=0;i<check;i++ ){
|
|
var compare = list.item(i).text;
|
|
if( list.item(check).text == compare ){
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
function top( list, field )
|
|
{
|
|
try{
|
|
var topIndex = 0;
|
|
var topValue = 0;
|
|
var filter = "data[@name = '" + field + "']";
|
|
|
|
for(i=0;i<list.length;i++){
|
|
var node = list.item(i).selectSingleNode( filter );
|
|
if( node ){
|
|
var test = node.text * 1;
|
|
if( test > topValue ){
|
|
topIndex = i;
|
|
topValue = test;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (topIndex+1) * 1;
|
|
|
|
}catch(e){
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
function tag(){
|
|
return ++g_tag;
|
|
}
|
|
|
|
]]></msxsl:script>
|
|
|
|
<xsl:variable name='titles'>
|
|
|
|
<title name="contents">Contents</title>
|
|
<title name="summary">Summary</title>
|
|
<title name="top">Top:</title>
|
|
<title name="topOf">of</title>
|
|
<title name="warnings">Warnings</title>
|
|
<title name="type">Type</title>
|
|
<title name="item">Item</title>
|
|
<title name="warning">Warning</title>
|
|
<title name="help">Help</title>
|
|
<title name="total">Total</title>
|
|
<title name="average">Average</title>
|
|
<title name="recordCount">Transactions: </title>
|
|
<title name="uniqueCount">Total Records: </title>
|
|
|
|
<xsl:for-each select="//titles/title">
|
|
<xsl:copy-of select="."/>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name='tab'><xsl:value-of select="'                '"/></xsl:variable>
|
|
|
|
<xsl:variable name="Top">
|
|
<xsl:choose>
|
|
<xsl:when test="$defaultTop"><xsl:value-of select="$defaultTop"/></xsl:when>
|
|
<xsl:when test="/report/@top"><xsl:value-of select="/report/@top"/></xsl:when>
|
|
<xsl:otherwise>10</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="Level">
|
|
<xsl:choose>
|
|
<xsl:when test="$defaultLevel"><xsl:value-of select="$defaultLevel"/></xsl:when>
|
|
<xsl:when test="/report/@level"><xsl:value-of select="/report/@level"/></xsl:when>
|
|
<xsl:otherwise>1</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:template match="/">
|
|
|
|
<html>
|
|
|
|
<!--***************************************************************************
|
|
|
|
HTML STYLE DEFINITION
|
|
|
|
****************************************************************************-->
|
|
|
|
<style>
|
|
body{ font-family: Verdana,Arial; color: black; margin-left: 1%; margin-right: 1%; }
|
|
td{ font-size: 75%; }
|
|
th{ font-size: 70%; font-weight: bolder; border: 1px solid lightgrey; vertical-align: bottom; }
|
|
hr{ border:1px solid black; }
|
|
a{ cursor:hand; }
|
|
a:link{ color: black; text-decoration: underline; }
|
|
a:visited{ color: black; text-decoration: underline; }
|
|
li { font-size: 130%; }
|
|
li li { font-size: 75%; }
|
|
li li li { font-size: 90%; }
|
|
|
|
.block{ border: solid black 1px; width: 100%; }
|
|
.thin{ border:1px solid black; height:1px;}
|
|
.popup{ position:absolute; z-index:1; background-color:infobackground; border:solid; border-width:1px; border-right-width:2px; border-bottom-width:2px; font-size: x-small;font-weight: normal;text-align: left;padding: 8px; }
|
|
|
|
.h1{ font-size: 110%; font-weight: bolder; }
|
|
.h2{ font-size: 105%; font-weight: bolder; }
|
|
.h3{ font-size: 80%; font-weight: bolder; }
|
|
.h4{ font-size: 60%; font-weight: bolder; }
|
|
|
|
.b1{ background: white; }
|
|
.b2{ background: whitesmoke; }
|
|
.b3{ background: lightgrey; }
|
|
.b4{ background: gray; }
|
|
|
|
.bold{ font-weight: bolder; }
|
|
.italic{ font-style: italic; }
|
|
|
|
.number{ text-align: right; }
|
|
.string{ text-align: left; }
|
|
.info{ font-size: 60%; }
|
|
.icon{ vertical-align: center; text-align: center; font-family: webdings; font-size: 20pt; }
|
|
.code{ font-family: courier; }
|
|
.span{ text-align: center; border-bottom:1px solid lightgrey;}
|
|
|
|
.total{ font-style: normal; }
|
|
.average{ font-style: italic; }
|
|
</style>
|
|
|
|
<body onload='onload();' class='b1'>
|
|
<form>
|
|
|
|
<!--***************************************************************************
|
|
|
|
RUNTIME SCRIPT
|
|
|
|
****************************************************************************-->
|
|
|
|
<script>
|
|
|
|
function onload()
|
|
{
|
|
<xsl:for-each select="//include">
|
|
<xsl:value-of select="document( @document )//@init"/>
|
|
</xsl:for-each>
|
|
}
|
|
|
|
function popup( d )
|
|
{
|
|
|
|
d.style.display = '';
|
|
var x = window.event.x + 12;
|
|
|
|
if( d.clientWidth + x > (document.body.clientWidth-4) ){
|
|
d.style.left = window.event.x - 8 - d.clientWidth;
|
|
d.style.right = window.event.x - 8;
|
|
}else{
|
|
d.style.left = x;
|
|
d.style.right = x + d.clientWidth;
|
|
}
|
|
}
|
|
|
|
function help( url )
|
|
{
|
|
showHelp( url );
|
|
}
|
|
|
|
var cc = "";
|
|
|
|
function compare(elem1, elem2, reverse)
|
|
{
|
|
var sgn = reverse ? -1 : 1;
|
|
|
|
if (elem1.isnum && !elem2.isnum){
|
|
return -1;
|
|
}
|
|
if (elem2.isnum && !elem1.isnum){
|
|
return 1;
|
|
}
|
|
if (elem1.text < elem2.text){
|
|
return -sgn;
|
|
}
|
|
if (elem1.text > elem2.text){
|
|
return sgn;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function sort( t )
|
|
{
|
|
try{
|
|
var tbody = t.tBodies(0);
|
|
var iColumn = window.event.srcElement.cellIndex;
|
|
var reverse;
|
|
var iRowEnd = tbody.rows.length-1;
|
|
var iSortRowCnt;
|
|
|
|
for( var col = 0; col < iColumn; col++ ){
|
|
if( tbody.rows[0].cells[col].colSpan > 1 ){
|
|
iColumn -= (tbody.rows[0].cells[col].colSpan - 1);
|
|
}
|
|
}
|
|
|
|
var key = t.id + "_" + iColumn;
|
|
|
|
if( isNaN( tbody.children[0].children[iColumn].innerText.charAt(0) ) ){
|
|
reverse = false;
|
|
}else{
|
|
reverse = true;
|
|
}
|
|
|
|
if( cc == key ){
|
|
cc = "";
|
|
reverse = !reverse;
|
|
}else{
|
|
cc = key;
|
|
}
|
|
|
|
var t1 = new Array();
|
|
var t2 = new Array();
|
|
var tab1, tab2;
|
|
var i, j;
|
|
var re =/\D/g;
|
|
|
|
iSortRowCnt = 0;
|
|
for (i = 0; i <= iRowEnd; ++i){
|
|
if (tbody.children[i].child == 'true'){
|
|
continue;
|
|
}
|
|
|
|
t1[iSortRowCnt] = new Object();
|
|
if (typeof(tbody.children[i].children[iColumn]) != "undefined"){
|
|
text = tbody.children[i].children[iColumn].innerText;
|
|
}else{
|
|
text = "";
|
|
}
|
|
|
|
if (!isNaN(text.charAt(0))){
|
|
t1[iSortRowCnt].text = eval(text.replace(re, ""));
|
|
t1[iSortRowCnt].isnum = true;
|
|
}else{
|
|
t1[iSortRowCnt].text = text.toLowerCase();
|
|
t1[iSortRowCnt].isnum = false;
|
|
}
|
|
t1[iSortRowCnt].ptr = tbody.children[i];
|
|
iSortRowCnt++;
|
|
}
|
|
|
|
tab2 = t1;
|
|
tab1 = t2;
|
|
for (var iSize = 1; iSize < iSortRowCnt; iSize *= 2){
|
|
var iBeg, iLeft, iRight, iLeftEnd, iRightEnd, iDest;
|
|
|
|
if (tab1 == t2) {
|
|
tab1 = t1;
|
|
tab2 = t2;
|
|
}else{
|
|
tab1 = t2;
|
|
tab2 = t1;
|
|
}
|
|
|
|
for (iBeg = 0; iBeg < iSortRowCnt; iBeg += iSize*2){
|
|
iRight = iBeg+iSize;
|
|
|
|
if (iRight >= iSortRowCnt){
|
|
break;
|
|
}
|
|
|
|
iRightEnd = iRight+iSize-1;
|
|
|
|
if (iRightEnd >= iSortRowCnt){
|
|
iRightEnd = iSortRowCnt-1;
|
|
}
|
|
|
|
iLeftEnd = iRight-1;
|
|
iLeft = iBeg;
|
|
|
|
for (iDest = iLeft; iDest <= iRightEnd; ++iDest){
|
|
if ((iRight > iRightEnd) ||
|
|
(iLeft <= iLeftEnd &&
|
|
compare(tab1[iLeft], tab1[iRight], reverse) <= 0) ){
|
|
tab2[iDest] = tab1[iLeft];
|
|
++iLeft;
|
|
}else{
|
|
tab2[iDest] = tab1[iRight];
|
|
++iRight;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (iDest = iRightEnd+1; iDest < iSortRowCnt; ++iDest){
|
|
tab2[iDest] = tab1[iDest];
|
|
}
|
|
}
|
|
|
|
for (i = iSortRowCnt-1; i >= 0; --i){
|
|
var first = tbody.children[0];
|
|
var insert = tab2[i].ptr, next;
|
|
|
|
if (insert == first) {
|
|
continue;
|
|
}
|
|
|
|
next = insert.nextSibling;
|
|
while ( next && next.child == 'true' ) {
|
|
tbody.insertBefore(insert, first);
|
|
insert = next;
|
|
next = insert.nextSibling;
|
|
}
|
|
tbody.insertBefore(insert, first);
|
|
}
|
|
|
|
}catch(e){
|
|
}
|
|
|
|
if( tbody.mode == "child" ){
|
|
shade( tbody );
|
|
}else{
|
|
show( t );
|
|
}
|
|
|
|
}
|
|
|
|
function show( t )
|
|
{
|
|
var tbody = t.tBodies(0);
|
|
var top = document.all("top_"+t.id).value;
|
|
var count = 0;
|
|
var display = 'none';
|
|
var visible = 0;
|
|
var children = 0;
|
|
var childDisplay = 'none';
|
|
|
|
for( var i=0; i<tbody.rows.length;i++ ){
|
|
|
|
if( tbody.children[i].child != 'true' ){
|
|
children = 0;
|
|
if( count++ < top ){
|
|
display = '';
|
|
visible++;
|
|
}else{
|
|
display = 'none';
|
|
}
|
|
if( tbody.rows[i].cells[0].innerText == '+' || display == 'none' ){
|
|
childDisplay = 'none';
|
|
}else{
|
|
childDisplay = '';
|
|
}
|
|
}else{
|
|
if( children++ > top ){
|
|
display = 'none';
|
|
}else{
|
|
display = childDisplay;
|
|
}
|
|
}
|
|
|
|
tbody.children[i].style.display = display;
|
|
|
|
try{
|
|
document.all( t.id + "_child_" + tbody.children[i].index ).style.display = display;
|
|
}catch(e){
|
|
}
|
|
}
|
|
|
|
document.all("top_"+t.id).value = visible;
|
|
|
|
shade( tbody );
|
|
}
|
|
|
|
function shade( tbody ){
|
|
var p = 0;
|
|
var light;
|
|
var dark;
|
|
|
|
light = "b1";
|
|
dart = "b3";
|
|
|
|
for ( i = 0; i < tbody.rows.length; i++){
|
|
if( tbody.children[i].style.display == '' ){
|
|
if( tbody.children[i].child != 'true' ){
|
|
p++;
|
|
}
|
|
if( p % 2 == 0 ){
|
|
className = light;
|
|
}else{
|
|
className = dart;
|
|
}
|
|
if( tbody.children[i].child != 'true' ){
|
|
tbody.children[i].className = className;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function pressTop( t ){
|
|
if( window.event.keyCode == 13 ){
|
|
show( t );
|
|
window.event.returnValue = false;
|
|
}
|
|
}
|
|
|
|
function folder( d ){
|
|
try{
|
|
e = document.all( "e_" + d.id );
|
|
if( d.style.display == 'none' ){
|
|
d.style.display = '';
|
|
e.innerText = "-";
|
|
}else{
|
|
d.style.display = 'none';
|
|
e.innerText = "+";
|
|
}
|
|
}catch(e){
|
|
alert( e.message );
|
|
}
|
|
}
|
|
|
|
<xsl:for-each select="//include">
|
|
<xsl:value-of select="document( @document )//script"/>
|
|
</xsl:for-each>
|
|
|
|
</script>
|
|
|
|
<!--***************************************************************************
|
|
|
|
REPORT
|
|
|
|
****************************************************************************-->
|
|
|
|
<xsl:for-each select="/report[@name]">
|
|
<table class="block" cellpadding="2">
|
|
<tr>
|
|
<td class="h1">
|
|
<xsl:call-template name='title'/>
|
|
</td>
|
|
</tr>
|
|
<xsl:if test="count(//data[@header])">
|
|
<tr><td><hr/></td></tr>
|
|
<tr>
|
|
<td>
|
|
<table>
|
|
<xsl:for-each select="//data[@header]">
|
|
<tr>
|
|
<td class="h4">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="@header"/>
|
|
</xsl:call-template>:
|
|
</td>
|
|
<td class="info">
|
|
<xsl:call-template name="data"/>
|
|
<xsl:apply-templates select="@warning"/>
|
|
<xsl:apply-templates select="@note"/>
|
|
</td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</xsl:if>
|
|
</table>
|
|
<br/>
|
|
</xsl:for-each>
|
|
|
|
<!-- ********** TABLE OF CONTENTS ********** -->
|
|
|
|
<table class="block">
|
|
<tr><td valign='top'>
|
|
|
|
<table width='100%'>
|
|
<tr>
|
|
<td valign='top' class='h2'>
|
|
<a name="contents" accesskey="c" tabindex="1">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'contents'"/>
|
|
</xsl:call-template>
|
|
</a>
|
|
<hr/>
|
|
</td>
|
|
</tr><tr>
|
|
<td>
|
|
<ul>
|
|
<xsl:if test="//@warning and not(report/section[@name='advice'])">
|
|
<li>
|
|
<font class="bold">
|
|
<a href='#Warnings'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'warnings'"/>
|
|
</xsl:call-template>
|
|
</a>
|
|
</font>
|
|
</li>
|
|
<br/>
|
|
<br/>
|
|
</xsl:if>
|
|
|
|
<xsl:for-each select="report/section[(table[@level <= $Level or not(@level)][item[@level <= $Level or not(@level)][not(@visible='false')]][ not( @visible='false') and not(@section) ] or //table[@level <= $Level or not(@level)][item[@level <= $Level or not(@level)][not(@visible='false')]]/@section=@name ) or (@name='advise' and //@warning)]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<li>
|
|
<font class="bold">
|
|
<xsl:call-template name='title'>
|
|
<xsl:with-param name='nosub' select="1"/>
|
|
</xsl:call-template>
|
|
</font>
|
|
</li>
|
|
<ul>
|
|
<xsl:if test="//@warning and @name='advice'">
|
|
<li>
|
|
<a href='#Warnings'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'warnings'"/>
|
|
</xsl:call-template>
|
|
</a>
|
|
</li>
|
|
</xsl:if>
|
|
|
|
<xsl:variable name="tables" select="table[@level <= $Level or not(@level)][item[@level <= $Level or not(@level)][not(@visible='false')]][not(@visible='false') and not(@section)] | //table[@level <= $Level or not(@level)][item[@level <= $Level or not(@level)][not(@visible='false')]][@section=current()/@name]"/>
|
|
|
|
<xsl:variable name="topics">
|
|
<xsl:for-each select="$tables[@topic]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<xsl:element name="topic">
|
|
<xsl:value-of select="@topic"/>
|
|
</xsl:element>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
|
|
<xsl:for-each select="msxsl:node-set($topics)/topic">
|
|
<xsl:if test="ms:unique( msxsl:node-set($topics)/topic, number(position()) )">
|
|
<xsl:variable name="topic" select="."/>
|
|
<li>
|
|
<font class="bold">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="$topic"/>
|
|
</xsl:call-template>
|
|
</font>
|
|
</li>
|
|
<ul>
|
|
<xsl:for-each select="$tables[@topic=$topic]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<li>
|
|
<a>
|
|
<xsl:attribute name='href'>#<xsl:value-of select='@name'/></xsl:attribute>
|
|
<xsl:call-template name='title'>
|
|
<xsl:with-param name='nosub' select="1"/>
|
|
</xsl:call-template>
|
|
</a>
|
|
</li>
|
|
</xsl:for-each>
|
|
</ul>
|
|
</xsl:if>
|
|
|
|
</xsl:for-each>
|
|
|
|
<xsl:for-each select="$tables[not(@topic)]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<li>
|
|
<a>
|
|
<xsl:attribute name='href'>#<xsl:value-of select='@name'/></xsl:attribute>
|
|
<xsl:call-template name='title'>
|
|
<xsl:with-param name='nosub' select="1"/>
|
|
</xsl:call-template>
|
|
</a>
|
|
</li>
|
|
</xsl:for-each>
|
|
</ul>
|
|
<br/>
|
|
</xsl:for-each>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
|
|
<!-- ********** SUMMARY SECTION ********** -->
|
|
|
|
<xsl:if test="//table[summary]">
|
|
<td valign='top'>
|
|
<table width='100%'>
|
|
<tr>
|
|
<td class='h2'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'summary'"/>
|
|
</xsl:call-template>
|
|
<hr/>
|
|
</td>
|
|
</tr>
|
|
<xsl:for-each select="//table[summary]/summary">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<tr>
|
|
<td>
|
|
<xsl:variable name="summaryTable"><xsl:value-of select="parent::table/@name"/></xsl:variable>
|
|
<table class="block" cellspacing='3px'>
|
|
<tr>
|
|
<xsl:for-each select="data">
|
|
<td>
|
|
<xsl:attribute name='class'><xsl:value-of select='@class'/> bold</xsl:attribute>
|
|
<xsl:choose>
|
|
<xsl:when test='position() = 1'>
|
|
<a>
|
|
<xsl:attribute name='href'>#<xsl:value-of select='$summaryTable'/></xsl:attribute>
|
|
<xsl:call-template name='title'/>
|
|
</a>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:call-template name='title'/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</td>
|
|
</xsl:for-each>
|
|
</tr>
|
|
<tr>
|
|
<xsl:choose>
|
|
<xsl:when test="@find='top'">
|
|
<xsl:variable name='summaryIndex'><xsl:value-of select="ms:top(parent::table/item[(data[@name=current()/@exclude] != current()/@value) or not(current()/@exclude)],string(@field))"/></xsl:variable>
|
|
<xsl:for-each select="data">
|
|
<td>
|
|
<xsl:attribute name="class"><xsl:value-of select="@class"/><xsl:value-of select="' '"/>b3</xsl:attribute>
|
|
<xsl:variable name="format">
|
|
<xsl:choose>
|
|
<xsl:when test="@format"><xsl:value-of select="@format"/></xsl:when>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:if test="position() != 1">
|
|
<xsl:attribute name='width'>40%</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:for-each select="/report/section/table[@name=$summaryTable]/item[data[@name=current()/parent::summary/@exclude] != current()/parent::summary/@value or not(current()/parent::summary/@exclude)][number($summaryIndex)]/data[@name=current()/@name]">
|
|
<xsl:call-template name="data">
|
|
<xsl:with-param name="format" select="$format"/>
|
|
</xsl:call-template>
|
|
</xsl:for-each>
|
|
<xsl:apply-templates select="/report/section/table[@name=$summaryTable]/item[data[@name=current()/parent::summary/@exclude] != current()/parent::summary/@value or not(current()/parent::summary/@exclude)][number($summaryIndex)]/data[@name=current()/@name]/@warning"/>
|
|
<xsl:apply-templates select="/report/section/table[@name=$summaryTable]/item[data[@name=current()/parent::summary/@exclude] != current()/parent::summary/@value or not(current()/parent::summary/@exclude)][number($summaryIndex)]/data[@name=current()/@name]/@note"/>
|
|
</td>
|
|
</xsl:for-each>
|
|
</xsl:when>
|
|
<xsl:when test="@find='average'">
|
|
<td>
|
|
<xsl:attribute name='class'><xsl:value-of select="data/@class"/><xsl:value-of select="' '"/>b3</xsl:attribute>
|
|
<xsl:variable name="format">
|
|
<xsl:choose>
|
|
<xsl:when test="data/@format"><xsl:value-of select="data/@format"/></xsl:when>
|
|
<xsl:otherwise>0.00</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:value-of select="format-number( sum(/report/section/table[@name=$summaryTable]/item[data[@name=current()/@exclude] != current()/@value or not(current()/parent::summary/@exclude)]/data[@name=current()/@field]) div count(/report/section/table[@name=$summaryTable]/item/data[@name=current()/@field]), $format)"/>
|
|
</td>
|
|
</xsl:when>
|
|
<xsl:when test="@find='total'">
|
|
<td>
|
|
<xsl:attribute name="class"><xsl:value-of select="data/@class"/><xsl:value-of select="' '"/>b3</xsl:attribute>
|
|
<xsl:variable name="format">
|
|
<xsl:choose>
|
|
<xsl:when test="data/@format"><xsl:value-of select="data/@format"/></xsl:when>
|
|
<xsl:otherwise>0.00</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:value-of select="format-number( sum(/report/section/table[@name=$summaryTable]/item[data[@name=current()/@exclude] != current()/@value]/data[@name=current()/@field]), $format )"/>
|
|
</td>
|
|
</xsl:when>
|
|
<xsl:when test="@find='field'">
|
|
<xsl:variable name='field'><xsl:value-of select='@field'/></xsl:variable>
|
|
<xsl:variable name='value'><xsl:value-of select='@value'/></xsl:variable>
|
|
|
|
<xsl:for-each select="data">
|
|
<td>
|
|
<xsl:variable name="format">
|
|
<xsl:choose>
|
|
<xsl:when test="@format"><xsl:value-of select="@format"/></xsl:when>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:attribute name="class"><xsl:value-of select="@class"/><xsl:value-of select="' '"/>b3</xsl:attribute>
|
|
<xsl:if test="position() != 1">
|
|
<xsl:attribute name='width'>40%</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:for-each select="/report/section/table[@name=$summaryTable]/item[data[@name=$field]=$value]/data[@name=current()/@name]">
|
|
<xsl:call-template name="data">
|
|
<xsl:with-param name="format" select="$format"/>
|
|
</xsl:call-template>
|
|
</xsl:for-each>
|
|
<xsl:apply-templates select="/report/section/table[@name=$summaryTable]/item[data[@name=$field]=$value]/data[@name=current()/@name]/@warning"/>
|
|
<xsl:apply-templates select="/report/section/table[@name=$summaryTable]/item[data[@name=$field]=$value]/data[@name=current()/@name]/@note"/>
|
|
</td>
|
|
</xsl:for-each>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</table>
|
|
</td>
|
|
</xsl:if>
|
|
</tr>
|
|
</table>
|
|
<br/>
|
|
|
|
<!-- ********** WARNING SECTION ********** -->
|
|
|
|
<xsl:if test="//@warning and not(report/section[@name='advice'])">
|
|
<xsl:call-template name="warning"/>
|
|
</xsl:if>
|
|
|
|
<!-- ********** SECTION HEADER ********** -->
|
|
|
|
<xsl:for-each select="report/section[(table[item[@level <= $Level or not(@level)][not(@visible='false')]][ not( @visible='false') and not(@section) ] or //table[item[@level <= $Level or not(@level)][not(@visible='false')]]/@section=@name ) or (@name='advise' and //@warning) and (@level > $Level or not(@level))]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
|
|
<table class="block" style="page-break-before:always" cellpadding='2' cellspacing='5'>
|
|
<tr>
|
|
<td>
|
|
<xsl:attribute name="class">b3</xsl:attribute>
|
|
<table width='100%'>
|
|
<tr>
|
|
<td class='h1'>
|
|
<xsl:call-template name='title'/>
|
|
|
|
<xsl:apply-templates select="@warning"/>
|
|
<xsl:apply-templates select="@note"/>
|
|
|
|
</td>
|
|
<td align='right'>
|
|
<a href="#top">
|
|
<font style='text-decoration:none;' face="webdings" size="x-small">
|
|
<xsl:value-of select="'5'"/>
|
|
</font>
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br/>
|
|
|
|
<!-- ********** WARNING SECTION ********** -->
|
|
|
|
<xsl:if test="@name='advice'">
|
|
<xsl:call-template name="warning"/>
|
|
</xsl:if>
|
|
|
|
<!-- ********** TABLE ********** -->
|
|
|
|
<xsl:variable name="tables" select="table[item[@level <= $Level or not(@level)][not(@visible='false')]][not(@visible = 'false') and not(@section) and (@level <= $Level or not(@level))] | //table[item[@level <= $Level or not(@level)][not(@visible='false')]][@section=current()/@name and (@level <= $Level or not(@level))]"/>
|
|
|
|
<xsl:variable name="topics">
|
|
<xsl:for-each select="$tables[@topic]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<xsl:element name="topic">
|
|
<xsl:value-of select="@topic"/>
|
|
</xsl:element>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
|
|
<xsl:for-each select="msxsl:node-set($topics)/topic">
|
|
<xsl:if test="ms:unique( msxsl:node-set($topics)/topic, number(position()) )">
|
|
<xsl:variable name="topic" select="."/>
|
|
<table width="100%" style="border: solid gray 1px;">
|
|
<tr><td>
|
|
<table width="100%"><tr>
|
|
<td class="h2 b2">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="$topic"/>
|
|
</xsl:call-template>
|
|
</td>
|
|
</tr></table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br/>
|
|
<xsl:for-each select="$tables[@topic=$topic]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<xsl:apply-templates select="."/>
|
|
</xsl:for-each>
|
|
</xsl:if>
|
|
|
|
</xsl:for-each>
|
|
|
|
<xsl:for-each select="$tables[not(@topic)]">
|
|
<xsl:sort select="not(@key) or @key < 0" data-type="number"/>
|
|
<xsl:sort select="@key" data-type="number"/>
|
|
<xsl:apply-templates select="."/>
|
|
</xsl:for-each>
|
|
|
|
</xsl:for-each>
|
|
|
|
</form>
|
|
</body>
|
|
</html>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ********** TABLE TEMPLATES ********** -->
|
|
|
|
<xsl:template match="table">
|
|
|
|
<xsl:variable name="table"><xsl:value-of select="@name"/></xsl:variable>
|
|
<xsl:variable name="tableId">table_<xsl:value-of select="ms:tag()"/></xsl:variable>
|
|
<a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
|
|
|
|
<!-- ********** SORT SETUP ********** -->
|
|
|
|
|
|
<xsl:variable name="count">
|
|
<xsl:call-template name="itemCount"/>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="totalCount">
|
|
<xsl:choose>
|
|
<xsl:when test="@count">
|
|
<xsl:value-of select="@count"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="count(item[not(@visible='false')])"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="show">
|
|
<xsl:call-template name="show">
|
|
<xsl:with-param name="header" select="header"/>
|
|
</xsl:call-template>
|
|
</xsl:variable>
|
|
|
|
|
|
<!-- ********** TABLE TITLE ********** -->
|
|
|
|
<table class="block" cellspacing='3px'>
|
|
<tr>
|
|
<td>
|
|
<table width='100%'>
|
|
<tr>
|
|
<td class='h2'>
|
|
<xsl:call-template name='title'/>
|
|
|
|
<xsl:apply-templates select="@warning"/>
|
|
<xsl:apply-templates select="@note"/>
|
|
|
|
</td>
|
|
<td align='right' valign='top'>
|
|
<xsl:if test="not(@style)">
|
|
<b>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'top'"/>
|
|
</xsl:call-template>
|
|
</b>
|
|
<xsl:value-of select="' '"/>
|
|
|
|
<input type='text' size='3' class='b1' style="margin:1px;border: none; font-size: 100%;font-family: Verdana,Arial;">
|
|
<xsl:attribute name='id'>top_<xsl:value-of select='$tableId'/></xsl:attribute>
|
|
<xsl:attribute name='onchange'>show(<xsl:value-of select='$tableId'/>)</xsl:attribute>
|
|
<xsl:attribute name='onkeypress'>pressTop(<xsl:value-of select='$tableId'/>)</xsl:attribute>
|
|
<xsl:attribute name='value'>
|
|
<xsl:value-of select="$show"/>
|
|
</xsl:attribute>
|
|
</input>
|
|
<b>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'topOf'"/>
|
|
</xsl:call-template>
|
|
</b>
|
|
<xsl:value-of select="'   '"/>
|
|
<xsl:value-of select="$count"/>
|
|
<xsl:if test="$count < $totalCount">
|
|
<xsl:call-template name="note">
|
|
<xsl:with-param name="text">
|
|
<div nowrap="true">
|
|
<font class="bold">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'uniqueCount'"/>
|
|
</xsl:call-template>
|
|
</font>
|
|
<xsl:value-of select="$totalCount"/>
|
|
</div>
|
|
</xsl:with-param>
|
|
<xsl:with-param name="width" select="'50'"/>
|
|
</xsl:call-template>
|
|
</xsl:if>
|
|
<xsl:value-of select="'     '"/>
|
|
</xsl:if>
|
|
<a href="#top">
|
|
<font style='text-decoration:none;' face="webdings" size="x-small">
|
|
<xsl:value-of select="'5'"/>
|
|
</font>
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<hr/>
|
|
</td>
|
|
</tr>
|
|
|
|
<!-- ********** INLUDE AREA ********** -->
|
|
|
|
<xsl:for-each select='include'>
|
|
<tr>
|
|
<td>
|
|
<xsl:copy-of select='document(@document)//include[@name=current()/@name]'/>
|
|
</td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
|
|
<!-- ********** TABLE BODY ********** -->
|
|
|
|
<tr>
|
|
<td>
|
|
<xsl:choose>
|
|
<xsl:when test="@style='info'">
|
|
<xsl:call-template name="infoTable">
|
|
<xsl:with-param name="Level" select="$Level"/>
|
|
<xsl:with-param name="tableId" select="$tableId"/>
|
|
</xsl:call-template>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:call-template name="colTable">
|
|
<xsl:with-param name="header" select="header"/>
|
|
<xsl:with-param name="id" select="$tableId"/>
|
|
<xsl:with-param name="show" select="$show"/>
|
|
</xsl:call-template>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br/><br/>
|
|
|
|
|
|
</xsl:template>
|
|
|
|
<xsl:template name="show">
|
|
<xsl:param name="header"/>
|
|
|
|
<xsl:variable name="count">
|
|
<xsl:call-template name="itemCount"/>
|
|
</xsl:variable>
|
|
<xsl:variable name="minField">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/threshold[@type='min']"><xsl:value-of select="$header/threshold[@type='min']/@field"/></xsl:when>
|
|
<xsl:otherwise><xsl:value-of select="item[1]/data[1]/@name"/></xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="min">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/threshold[@type='min']"><xsl:value-of select="$header/threshold[@type='min']/@value"/></xsl:when>
|
|
<xsl:otherwise>all</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="octaveField">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/threshold[@type='octave']"><xsl:value-of select="$header/threshold[@type='octave']/@field"/></xsl:when>
|
|
<xsl:otherwise><xsl:value-of select="item[1]/data[1]/@name"/></xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="octave">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/threshold[@type='octave']">
|
|
<xsl:variable name='octaveIndex'><xsl:value-of select="ms:top(item, string($octaveField))"/></xsl:variable>
|
|
<xsl:value-of select="item[number($octaveIndex)]/data[@name=$octaveField] div 2"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>all</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="top">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/threshold[@type='top']"><xsl:value-of select="$header/threshold[@type='top']/@value"/></xsl:when>
|
|
<xsl:otherwise><xsl:value-of select="$Top"/></xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="octaveCount">
|
|
<xsl:choose>
|
|
<xsl:when test="$octave = 'all'">0</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="count(item[@level <= $Level or not(@level)][not(@visible='false')][data[@name = $octaveField] >= $octave])"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="minCount">
|
|
<xsl:choose>
|
|
<xsl:when test="$min = 'all'">0</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="count(item[@level <= $Level or not(@level)][not(@visible='false')][data[@name = $minField] >= $min])"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="show">
|
|
<xsl:choose>
|
|
<xsl:when test="$octaveCount > $top and $octaveCount >= $minCount">
|
|
<xsl:value-of select="$octaveCount"/>
|
|
</xsl:when>
|
|
<xsl:when test="$minCount > $top and $minCount > $octaveCount">
|
|
<xsl:value-of select="$minCount"/>
|
|
</xsl:when>
|
|
<xsl:when test="$top = 'all' or ($top != 'all' and $top > $count)">
|
|
<xsl:value-of select="$count"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="$top"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:value-of select="$show"/>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template name="itemCount">
|
|
<xsl:value-of select="count(item[@level <= $Level or not(@level)][not(@visible='false')])"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="colTable">
|
|
<xsl:param name="mode"/>
|
|
<xsl:param name="id"/>
|
|
<xsl:param name="header"/>
|
|
<xsl:param name="show"/>
|
|
|
|
<xsl:variable name="max">
|
|
<xsl:choose>
|
|
<xsl:when test="string-length($show)">all</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:call-template name="show">
|
|
<xsl:with-param name="header" select="$header"/>
|
|
</xsl:call-template>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="tableId">
|
|
<xsl:choose>
|
|
<xsl:when test="string-length($id)"><xsl:value-of select="$id"/></xsl:when>
|
|
<xsl:otherwise>table_<xsl:value-of select="ms:tag()"/></xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="order1">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/sort[1]/@order"><xsl:value-of select="$header/sort[1]/@order"/></xsl:when>
|
|
<xsl:otherwise>ascending</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="type1">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/sort[1]/@type"><xsl:value-of select="$header/sort[1]/@type"/></xsl:when>
|
|
<xsl:otherwise>number</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="order2">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/sort[2]/@order"><xsl:value-of select="$header/sort[2]/@order"/></xsl:when>
|
|
<xsl:otherwise>ascending</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:variable name="type2">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/sort[2]/@type"><xsl:value-of select="$header/sort[2]/@type"/></xsl:when>
|
|
<xsl:otherwise>number</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<table class="block" style="table-layout:auto" >
|
|
<xsl:attribute name='id'><xsl:value-of select="$tableId"/></xsl:attribute>
|
|
|
|
<thead style="display: table-header-group">
|
|
<xsl:for-each select="$header">
|
|
<tr>
|
|
<xsl:if test="header">
|
|
<td width="1%"/>
|
|
</xsl:if>
|
|
<xsl:apply-templates select="data[@level <= $Level or not(@level)]" mode="header">
|
|
<xsl:with-param name="tableId" select="$tableId"/>
|
|
<xsl:with-param name="sort"><xsl:if test='position()=last()'>true</xsl:if></xsl:with-param>
|
|
</xsl:apply-templates>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<xsl:if test="string-length($mode)">
|
|
<xsl:attribute name='mode'><xsl:value-of select="$mode"/></xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:for-each select="item[ ($max = 'all' or position() <= $max) and not(@visible='false') and (@level <= $Level or not(@level))]">
|
|
<xsl:sort select="data[@name=$header/sort[1]/@field]" order="{$order1}" data-type='{$type1}'/>
|
|
<xsl:sort select="data[@name=$header/sort[2]/@field]" order="{$order2}" data-type='{$type2}'/>
|
|
|
|
<xsl:variable name='background'>
|
|
<xsl:choose>
|
|
<xsl:when test="position() mod 2 = 1">b3</xsl:when>
|
|
<xsl:otherwise>b1</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name='display'>
|
|
<xsl:choose>
|
|
<xsl:when test="not($show)"></xsl:when>
|
|
<xsl:when test="position() <= number($show)">display:''</xsl:when>
|
|
<xsl:otherwise>display:'none'</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<tr>
|
|
<xsl:attribute name="class"><xsl:value-of select="$background"/></xsl:attribute>
|
|
<xsl:attribute name="index"><xsl:value-of select="position()"/></xsl:attribute>
|
|
<xsl:attribute name="style"><xsl:value-of select="$display"/></xsl:attribute>
|
|
<xsl:variable name="rowId" select="generate-id(.)"/>
|
|
<xsl:variable name="state">
|
|
<xsl:choose>
|
|
<xsl:when test="item/@expand='true'">-</xsl:when>
|
|
<xsl:otherwise>+</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<xsl:choose>
|
|
<xsl:when test="item[not(@expand='none')] and $header/header">
|
|
<td>
|
|
<a style="cursor:hand;text-decoration:none;">
|
|
<xsl:attribute name="onclick">folder( c_<xsl:value-of select="$rowId"/> )</xsl:attribute>
|
|
<xsl:call-template name="expand">
|
|
<xsl:with-param name="id">e_c_<xsl:value-of select="$rowId"/></xsl:with-param>
|
|
<xsl:with-param name="state" select="$state"/>
|
|
</xsl:call-template>
|
|
</a>
|
|
</td>
|
|
</xsl:when>
|
|
<xsl:when test="$header/header"><td/>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
|
|
<xsl:apply-templates select="data[not(@visible = 'false') and (@level <= $Level or not(@level))]">
|
|
<xsl:with-param name="header" select="$header"/>
|
|
</xsl:apply-templates>
|
|
|
|
</tr>
|
|
|
|
<xsl:if test="item[not(@expand='none')] and $header/header">
|
|
<tr child="true">
|
|
<xsl:attribute name="id">c_<xsl:value-of select="$rowId"/></xsl:attribute>
|
|
<xsl:attribute name="style">
|
|
<xsl:choose>
|
|
<xsl:when test="$state='-'"><xsl:value-of select="$display"/></xsl:when>
|
|
<xsl:otherwise>display:'none';</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
<td colspan='100'>
|
|
<table width="100%" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<td width="10px"/>
|
|
<td>
|
|
<xsl:call-template name="colTable">
|
|
<xsl:with-param name="header" select="$header/header"/>
|
|
<xsl:with-param name="mode">child</xsl:with-param>
|
|
</xsl:call-template>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</xsl:if>
|
|
|
|
</xsl:for-each>
|
|
</tbody>
|
|
|
|
<xsl:if test="$header/data[@summary]">
|
|
<tfoot>
|
|
<tr>
|
|
|
|
<xsl:variable name="items" select="item"/>
|
|
|
|
<xsl:if test="$header/header">
|
|
<td width="1%"/>
|
|
</xsl:if>
|
|
|
|
<xsl:for-each select="$header[data[@summary]]/data">
|
|
<td>
|
|
<xsl:if test="@summary">
|
|
<xsl:attribute name="style">border-top: 1px solid black;</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:attribute name="colspan"><xsl:value-of select="@span"/></xsl:attribute>
|
|
<xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute>
|
|
|
|
<xsl:variable name='format'>
|
|
<xsl:choose>
|
|
<xsl:when test="@format"><xsl:value-of select="@format"/></xsl:when>
|
|
<xsl:otherwise>0</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:if test='@summary'>
|
|
<xsl:variable name='summary'>
|
|
<xsl:choose>
|
|
<xsl:when test="string-length(.)">
|
|
<xsl:value-of select="format-number( ., $format )"/>
|
|
</xsl:when>
|
|
<xsl:when test="@summary='total'">
|
|
<xsl:value-of select="format-number( sum($items/data[@name=current()/@name]), $format )"/>
|
|
</xsl:when>
|
|
<xsl:when test="@summary='average'">
|
|
<xsl:value-of select="format-number( sum($items/data[@name=current()/@name]) div count($items/data[@name=current()/@name]), $format )"/>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:call-template name="note">
|
|
<xsl:with-param name="anchor">
|
|
<font>
|
|
<xsl:attribute name="class"><xsl:value-of select="@summary"/></xsl:attribute>
|
|
<xsl:value-of select="$summary"/>
|
|
</font>
|
|
</xsl:with-param>
|
|
<xsl:with-param name="text">
|
|
<font>
|
|
<xsl:attribute name="class"><xsl:value-of select="@summary"/></xsl:attribute>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="@summary"/>
|
|
</xsl:call-template>
|
|
</font>
|
|
<xsl:if test="@count">
|
|
<br/>
|
|
<div nowrap="true">
|
|
<font class="bold">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'recordCount'"/>
|
|
</xsl:call-template>
|
|
</font>
|
|
<xsl:value-of select="@count"/>
|
|
</div>
|
|
</xsl:if>
|
|
</xsl:with-param>
|
|
<xsl:with-param name="width" select="50"/>
|
|
</xsl:call-template>
|
|
</xsl:if>
|
|
|
|
</td>
|
|
</xsl:for-each>
|
|
</tr>
|
|
</tfoot>
|
|
</xsl:if>
|
|
</table>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ********** TABLE TEMPLATE (INFO STYLE) ********** -->
|
|
|
|
<xsl:template name="infoTable">
|
|
<xsl:param name="Level"/>
|
|
<xsl:param name="tableId"/>
|
|
|
|
<table class='block'>
|
|
<xsl:attribute name='id'><xsl:value-of select="$tableId"/></xsl:attribute>
|
|
|
|
<xsl:for-each select="item[(@level <= $Level or not(@level))][data[not(@visible='false') and (@level <= $Level or not(@level))]]">
|
|
<xsl:for-each select="data[not(@visible='false') and (@level <= $Level or not(@level))]">
|
|
<tr>
|
|
<td width='12%' class='h4' style='white-space:nowrap;'>
|
|
<xsl:if test='not(@name=preceding-sibling::data/@name)'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="@name"/>
|
|
</xsl:call-template>:
|
|
</xsl:if>
|
|
</td>
|
|
<td class='info'>
|
|
<xsl:if test='position() mod 2=1'>
|
|
<xsl:attribute name='class'>info b3</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:call-template name="data"/>
|
|
|
|
<xsl:apply-templates select="@warning" mode="anchor"/>
|
|
<xsl:apply-templates select="@note"/>
|
|
|
|
</td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
<xsl:if test="position() != last()">
|
|
<tr><td colspan='2'><hr class='thin'/></td></tr>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</table>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ********** ITEM/DATA TEMPLATE ********** -->
|
|
|
|
<xsl:template match="data">
|
|
<xsl:param name="header"/>
|
|
|
|
<xsl:variable name="class">
|
|
<xsl:choose>
|
|
<xsl:when test="@class">
|
|
<xsl:value-of select="@class"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="$header/data[@name=current()/@name]/@class"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<td>
|
|
<xsl:if test="position() != 1 and contains( $class, 'number')">
|
|
<xsl:attribute name="width">8%</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:attribute name="colspan"><xsl:value-of select="@span"/></xsl:attribute>
|
|
<xsl:attribute name="class"><xsl:value-of select="$class"/></xsl:attribute>
|
|
|
|
<xsl:value-of select="substring($tab, string-length($tab) - (@tab * 4) )"/>
|
|
|
|
<xsl:choose>
|
|
<xsl:when test="@calculate or $header/data[@name=current()/@name]/@calculate">
|
|
<xsl:call-template name="calculate-data">
|
|
<xsl:with-param name="header" select="$header"/>
|
|
</xsl:call-template>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:call-template name="data"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:apply-templates select="@warning" mode="anchor"/>
|
|
<xsl:apply-templates select="@note"/>
|
|
|
|
</td>
|
|
</xsl:template>
|
|
|
|
<!-- ********** CALCUTATED DATA TEMPLATE ********** -->
|
|
|
|
<xsl:template name="calculate-data">
|
|
<xsl:param name="header"/>
|
|
|
|
<xsl:variable name="field">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/data[@name=current()/@name]/@field">
|
|
<xsl:value-of select="$header/data[@name=current()/@name]/@field"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="@field"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="calculate">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/data[@name=current()/@name]/@calculate">
|
|
<xsl:value-of select="$header/data[@name=current()/@name]/@calculate"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="@calculate"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="format">
|
|
<xsl:choose>
|
|
<xsl:when test="$header/data[@name=current()/@name]/@format">
|
|
<xsl:value-of select="$header/data[@name=current()/@name]/@format"/>
|
|
</xsl:when>
|
|
<xsl:when test="@format"><xsl:value-of select="@format"/></xsl:when>
|
|
<xsl:otherwise>0.00</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="sum">
|
|
<xsl:value-of select="sum(parent::item/item/data[@name=$field])"/>
|
|
</xsl:variable>
|
|
|
|
<xsl:choose>
|
|
<xsl:when test="$calculate='total'">
|
|
<xsl:value-of select="format-number($sum,$format)"/>
|
|
</xsl:when>
|
|
<xsl:when test="$calculate='average'">
|
|
<xsl:variable name="count">
|
|
<xsl:value-of select="count(parent::item/item/data[@name=$field])"/>
|
|
</xsl:variable>
|
|
<xsl:value-of select="format-number($sum div $count,$format)"/>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
|
|
</xsl:template>
|
|
|
|
<!-- ********** COLUMN HEADER TEMPLATE ********** -->
|
|
|
|
<xsl:template match="data" mode="header">
|
|
<xsl:param name="sort"/>
|
|
<xsl:param name="tableId"/>
|
|
<th class='header'>
|
|
<xsl:attribute name='colspan'><xsl:value-of select="@span"/></xsl:attribute>
|
|
<xsl:attribute name="class">
|
|
<xsl:choose>
|
|
<xsl:when test="not(@class)"></xsl:when>
|
|
<xsl:when test="@class='code' or @class='icon' or @class='string'">
|
|
string
|
|
</xsl:when>
|
|
<xsl:when test="@class='span'">
|
|
span
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
number
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
<xsl:if test="$sort = 'true'">
|
|
<xsl:attribute name="onclick">sort(<xsl:value-of select="$tableId"/>);</xsl:attribute>
|
|
<xsl:attribute name="style">cursor:hand;</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:call-template name='title'/>
|
|
|
|
<xsl:apply-templates select="@warning"/>
|
|
<xsl:apply-templates select="@note"/>
|
|
|
|
</th>
|
|
</xsl:template>
|
|
|
|
<!-- ********** DATA TEMPLATE ********** -->
|
|
|
|
<xsl:template name="data">
|
|
<xsl:param name="format"/>
|
|
|
|
<xsl:choose>
|
|
<xsl:when test="@translate = 'value'">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name='label' select='.'/>
|
|
</xsl:call-template>
|
|
</xsl:when>
|
|
<xsl:when test="string-length($format)">
|
|
<xsl:value-of select='format-number( ., $format )'/>
|
|
</xsl:when>
|
|
<xsl:when test="@format">
|
|
<xsl:value-of select='format-number( ., @format )'/>
|
|
</xsl:when>
|
|
<xsl:when test="ancestor::table/header/data[@name=current()/@name]/@format">
|
|
<xsl:value-of select='format-number( ., ancestor::table/header/data[@name=current()/@name]/@format )'/>
|
|
</xsl:when>
|
|
<xsl:otherwise><xsl:value-of select='.'/></xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:if test="@units">
|
|
<xsl:value-of select="' '"/><xsl:value-of select="@units"/>
|
|
</xsl:if>
|
|
|
|
</xsl:template>
|
|
|
|
<!-- ********** LABEL TEMPLATE ********** -->
|
|
|
|
<xsl:template name="label">
|
|
<xsl:param name="label"/>
|
|
|
|
<xsl:choose>
|
|
<xsl:when test="@translate='false'">
|
|
<xsl:value-of select="$label"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:variable name='title'>
|
|
<xsl:value-of select="msxsl:node-set($titles)/title[@name = $label]"/>
|
|
</xsl:variable>
|
|
<xsl:choose>
|
|
<xsl:when test='string-length($title)'><xsl:value-of select="$title"/></xsl:when>
|
|
<xsl:otherwise><xsl:value-of select="$label"/></xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
|
|
</xsl:template>
|
|
|
|
<!-- ********** TITLE TEMPLATE ********** -->
|
|
|
|
<xsl:template name='title'>
|
|
<xsl:param name='nosub'/>
|
|
|
|
<xsl:variable name="label">
|
|
<xsl:choose>
|
|
<xsl:when test="@title"><xsl:value-of select="@title"/></xsl:when>
|
|
<xsl:otherwise><xsl:value-of select="@name"/></xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="$label"/>
|
|
</xsl:call-template>
|
|
|
|
<xsl:if test="@index">
|
|
<xsl:value-of select="' '"/>
|
|
<xsl:value-of select="@index"/>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="@subtitle and $nosub!='1'">
|
|
<div class="h3">
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="@subtitle"/>
|
|
</xsl:call-template>
|
|
</div>
|
|
</xsl:if>
|
|
|
|
</xsl:template>
|
|
|
|
<!-- ********** WARNING POPUP TEMPLATE ********** -->
|
|
|
|
<xsl:template match="@warning" mode="anchor">
|
|
<a><xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute></a>
|
|
<xsl:apply-templates select="."/>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="@warning">
|
|
<xsl:variable name='id'>w_<xsl:value-of select="generate-id(.)"/><xsl:value-of select="ms:tag()"/>_<xsl:value-of select="@name"/></xsl:variable>
|
|
<a style="cursor:help">
|
|
<xsl:attribute name="onMouseOver">popup(<xsl:value-of select='$id'/>)</xsl:attribute>
|
|
<xsl:attribute name="onMouseOut"><xsl:value-of select='$id'/>.style.display='none'</xsl:attribute>
|
|
<font style="font-weight:bolder;" color="red" face="wingdings" size="x-small"><xsl:value-of select="'O'"/></font>
|
|
</a>
|
|
<div class="popup" style="display:'none';width:300;">
|
|
<xsl:attribute name="id"><xsl:value-of select='$id'/></xsl:attribute>
|
|
<xsl:choose>
|
|
<xsl:when test="/report/warnings/warning[@name=current()]">
|
|
<xsl:copy-of select="/report/warnings/warning[@name=current()]"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="."/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</div>
|
|
</xsl:template>
|
|
|
|
<!-- ********** NOTE POPUP TEMPLATE ********** -->
|
|
|
|
<xsl:template match="@note">
|
|
<xsl:call-template name="note">
|
|
<xsl:with-param name="text">
|
|
<xsl:element name="note"><xsl:value-of select="."/></xsl:element>
|
|
</xsl:with-param>
|
|
<xsl:with-param name="width" select="'300'"/>
|
|
</xsl:call-template>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="note">
|
|
<xsl:param name="text"/>
|
|
<xsl:param name="width"/>
|
|
<xsl:param name="anchor"/>
|
|
|
|
<xsl:variable name='id'>popup_<xsl:value-of select="ms:tag()"/></xsl:variable>
|
|
<a style="cursor:help">
|
|
<xsl:attribute name="onMouseOver">popup(<xsl:value-of select='$id'/>)</xsl:attribute>
|
|
<xsl:attribute name="onMouseOut"><xsl:value-of select='$id'/>.style.display='none'</xsl:attribute>
|
|
<xsl:choose>
|
|
<xsl:when test="$anchor">
|
|
<xsl:copy-of select="$anchor"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<div style="margin-left:3;position:absolute;width:8;height:10;background:infobackground;">
|
|
<div style="position:absolute;top:-5;left:-3;">
|
|
<font style="font-size: 11pt;font-weight:normal;" color="black" face="webdings"><xsl:value-of select="''"/></font>
|
|
</div>
|
|
</div>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</a>
|
|
<div class="popup">
|
|
<xsl:attribute name="style">display:'none';width:<xsl:value-of select="$width"/></xsl:attribute>
|
|
<xsl:attribute name="id"><xsl:value-of select='$id'/></xsl:attribute>
|
|
<xsl:copy-of select="$text"/>
|
|
</div>
|
|
</xsl:template>
|
|
|
|
<!-- ********** WARNINGS TABLE TEMPLATE ********** -->
|
|
|
|
<xsl:template name="warning">
|
|
|
|
<xsl:if test="//@warning">
|
|
<a name="warnings"/>
|
|
<table class="block">
|
|
<tr>
|
|
<td>
|
|
<table width='100%'>
|
|
<tr>
|
|
<td class='h2'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'warnings'"/>
|
|
</xsl:call-template>
|
|
</td>
|
|
<td align='right'>
|
|
<a href="#top">
|
|
<font style='text-decoration:none;' face="webdings" size="x-small">
|
|
<xsl:value-of select="'5'"/>
|
|
</font>
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<hr/></td></tr>
|
|
<tr><td>
|
|
<table width='100%'>
|
|
<tr>
|
|
<xsl:if test="/report/warnings">
|
|
<th class='string'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'type'"/>
|
|
</xsl:call-template>
|
|
</th>
|
|
</xsl:if>
|
|
<th colspan='2' class='string'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'item'"/>
|
|
</xsl:call-template>
|
|
</th>
|
|
<th class='string'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'warning'"/>
|
|
</xsl:call-template>
|
|
</th>
|
|
<xsl:if test="/report/warnings">
|
|
<th class='string'>
|
|
<xsl:call-template name="label">
|
|
<xsl:with-param name="label" select="'help'"/>
|
|
</xsl:call-template>
|
|
</th>
|
|
</xsl:if>
|
|
</tr>
|
|
<xsl:for-each select='//@warning[parent::data]'>
|
|
<xsl:variable name="warning" select="."/>
|
|
<tr>
|
|
<xsl:if test="position() mod 2 = 1"><xsl:attribute name='class'>b3</xsl:attribute></xsl:if>
|
|
<xsl:if test="/report/warnings">
|
|
<td valign='top' align='left' style='white-space:nowrap'>
|
|
<xsl:choose>
|
|
<xsl:when test="/report/warnings/warning[@name=current()]/@type='info'">
|
|
<table><tr><td width="26px" align="center"><xsl:call-template name="infoIcon"/></td><td class="info">Information</td></tr></table>
|
|
</xsl:when>
|
|
<xsl:when test="/report/warnings/warning[@name=current()]/@type='warning' or not(/report/warnings/warning[@name=current()]/@type)">
|
|
<table><tr><td width="26px" align="center"><xsl:call-template name="warningIcon"/></td><td class="info">Warning</td></tr></table>
|
|
</xsl:when>
|
|
<xsl:when test="/report/warnings/warning[@name=current()]/@type='error'">
|
|
<table><tr><td width="26px" align="center"><xsl:call-template name="errorIcon"/></td><td class="info">Error</td></tr></table>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</td>
|
|
</xsl:if>
|
|
<td valign="top" style="white-space:nowrap;padding:6px;" class="h4">
|
|
<xsl:for-each select="parent::data">
|
|
<a>
|
|
<xsl:attribute name='href'>#<xsl:value-of select="$warning"/></xsl:attribute>
|
|
<xsl:call-template name='title'/>
|
|
</a>
|
|
</xsl:for-each>
|
|
</td>
|
|
<td valign="top" class="info" style="padding:6px;">
|
|
<xsl:for-each select="parent::data">
|
|
<xsl:call-template name="data"/>
|
|
</xsl:for-each>
|
|
</td>
|
|
<td>
|
|
<xsl:choose>
|
|
<xsl:when test="/report/warnings/warning[@name=current()]">
|
|
<xsl:copy-of select="/report/warnings/warning[@name=current()]"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="."/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</td>
|
|
<xsl:if test="/report/warnings">
|
|
<td valign='top' align='center' style="padding:2px;">
|
|
<xsl:if test="string-length(/report/warnings/warning[@name=current()]/@url)">
|
|
<a>
|
|
<xsl:attribute name="onclick">help('<xsl:value-of select="/report/warnings/warning[@name=current()]/@url"/>')</xsl:attribute>
|
|
<xsl:call-template name="helpIcon"/>
|
|
</a>
|
|
</xsl:if>
|
|
</td>
|
|
</xsl:if>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</table>
|
|
</td></tr>
|
|
</table>
|
|
<br/>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="infoIcon">
|
|
<div style="position:relative;text-overflow:clip;overflow:hidden;width:22px;height:22px;">
|
|
<font style="font-size:18pt; text-decoration:none;font-weight:normal;color:gray" face="webdings"><xsl:value-of select="'('"/></font>
|
|
<div style="position:absolute;top:-1;left:-1;">
|
|
<font style="font-size:18pt;text-decoration:none;font-weight:normal;color:aliceblue;" face="webdings"><xsl:value-of select="'('"/></font>
|
|
</div>
|
|
<div style="position:absolute;top:0;left:7;">
|
|
<font style="font-size:8pt;text-decoration:none;font-weight:bolder;color:blue;" face="courier">i</font>
|
|
</div>
|
|
</div>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="warningIcon">
|
|
<div style="position:relative;text-overflow:clip;overflow:hidden;width:22px;height:22px;">
|
|
<font style="font-size:19pt;text-decoration:none;font-weight:normal;color:gray" face="webdings"><xsl:value-of select="'ê'"/></font>
|
|
<div style="position:absolute;top:3;left:11;">
|
|
<font style="font-size:8pt;text-decoration:none;font-weight:bolder;color:grey">!</font>
|
|
</div>
|
|
<div style="position:absolute;top:-1;left:-1;">
|
|
<font style="font-size:19pt;text-decoration:none;font-weight:normal;color:yellow;" face="webdings"><xsl:value-of select="'ê'"/></font>
|
|
</div>
|
|
<div style="position:absolute;top:2;left:10;">
|
|
<font style="font-size:8pt;text-decoration:none;font-weight:bolder;color:yellow;">!</font>
|
|
</div>
|
|
</div>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="errorIcon">
|
|
<div style="position:relative;">
|
|
<font style="font-size:16pt;text-decoration:none;font-weight:normal;color:gray" face="webdings"><xsl:value-of select="'n'"/></font>
|
|
<div style="position:absolute;top:-1;left:-1;">
|
|
<font style="font-size:16pt;text-decoration:none;font-weight:normal;color:red" face="webdings"><xsl:value-of select="'n'"/></font>
|
|
</div>
|
|
<div style="position:absolute;top:-1;left:-1;">
|
|
<font style="font-size:16pt;text-decoration:none;font-weight:normal;color:white" face="webdings"><xsl:value-of select="'r'"/></font>
|
|
</div>
|
|
</div>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="helpIcon">
|
|
<div style="position:relative;">
|
|
<font style="font-size:18pt;text-decoration:none;font-weight:normal;" face="webdings"><xsl:value-of select="''"/></font>
|
|
<div style="position:absolute;top:-2;left:7;">
|
|
<font style="font-size:12pt;text-decoration:none;font-weight:bolder;color:yellow;" face="webdings"><xsl:value-of select="'s'"/></font>
|
|
</div>
|
|
</div>
|
|
</xsl:template>
|
|
|
|
<!-- ********** +/- ICON TEMPLATE ********** -->
|
|
|
|
<xsl:template name="expand">
|
|
<xsl:param name="id"/>
|
|
<xsl:param name="state"/>
|
|
<div style="border: solid black 1px; position: relative; width: 11px; height: 11px;">
|
|
<div style="font-size: 8pt;position: absolute; overflow: hidden; width: 8; height: 9; line-height: 9px; top: -1; left: 0;" >
|
|
<xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
|
|
<xsl:value-of select="$state"/>
|
|
</div>
|
|
<div style="position: absolute; overflow: hidden;width: 7; height: 9; line-height: 9px; left: 1; top: -3;" >
|
|
<hr style="height:1px"/>
|
|
</div>
|
|
</div>
|
|
</xsl:template>
|
|
|
|
|
|
</xsl:stylesheet>
|