⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maketree.xsl

📁 Copyright&copy 2004 Sergiu Dumitriu, Marta G&icirc rdea, C&#259 t&#259 lin Hri&#355 cu Permission is
💻 XSL
字号:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Template: MakeTree.xsl

Outputs the diagram tree
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/2000/svg" xmlns:UML="org.omg.xmi.namespace.UML">
	<xsl:output media-type="image/svg+xml" method="xml" indent="yes"/>

	<!-- MakeTreeScript -->
	<xsl:template name="MakeTree">
		<script type="text/ecmascript"><xsl:text disable-output-escaping="yes">&lt;![CDATA[<![CDATA[
/*****
*
*   AntiZoomAndPan.js
*
*   copyright 2002, Kevin Lindsey
*
*****/

AntiZoomAndPan.VERSION = "1.2"

/*****
*
*   constructor
*
*****/
function AntiZoomAndPan() {
    this.init();
}


/*****
*
*   init
*
*****/
AntiZoomAndPan.prototype.init = function() {
    var svgRoot = svgDocument.documentElement;

    // Initialize properties;
    this.svgNodes = new Array();
    this.x_trans  = 0;
    this.y_trans  = 0;
    this.scale    = 1;
    this.lastTM   = svgRoot.createSVGMatrix();

    // Setup event listeners to capture zoom and scroll events
    svgRoot.addEventListener('SVGZoom',   this, false);
    svgRoot.addEventListener('SVGScroll', this, false);
    svgRoot.addEventListener('SVGResize', this, false);
};


/*****
*
*   appendNode
*
*****/
AntiZoomAndPan.prototype.appendNode = function(svgNode) {
    // Add node to a array
    this.svgNodes.push(svgNode);
};


/*****
*
*   removeNode
*
*****/
AntiZoomAndPan.prototype.removeNode = function(svgNode) {
    // Remove node if found
    for ( var i = 0; i < this.svgNodes.length; i++ ) {
        if ( this.svgNodes[i] === svgNode ) {
            this.svgNodes.splice(i, 1);
            break;
        }
    }
};


/*****
*
*   Event Handlers
*
*****/

/*****
*
*   handleEvent
*
*****/
AntiZoomAndPan.prototype.handleEvent = function(e) {
    var type = e.type;

    if ( this[type] == null )
        throw new Error("Unsupported event type: " + type);

    this[type](e);
};


/*****
*
*   SVGZoom
*
*****/
AntiZoomAndPan.prototype.SVGZoom = function(e) {
    // Update current transform
    this.update();
};


/*****
*
*   SVGScroll
*
*****/
AntiZoomAndPan.prototype.SVGScroll = function(e) {
    // Update current transform
    this.update();
};


/*****
*
*   SVGResize
*
*****/
AntiZoomAndPan.prototype.SVGResize = function(e) {
    // Update current transform
    this.update();
};


/*****
*
*   update
*
*****/
AntiZoomAndPan.prototype.update = function() {
    if ( this.svgNodes.length > 0 ) {
        var svgRoot = svgDocument.documentElement;
        var viewbox = ( window.ViewBox != null )
            ? new ViewBox(svgRoot)
            : null;
        var matrix  = ( viewbox != null )
            ? viewbox.getTM()
            : svgRoot.createSVGMatrix();
        var trans   = svgRoot.currentTranslate;

        // Set the scale factor to leave object at original size
        matrix = matrix.scale( 1.0 / svgRoot.currentScale);

        // Get the current pan settings
        matrix = matrix.translate(-trans.x, -trans.y);

        // Apply combined transforms to all managed nodes
        for ( var i = 0; i < this.svgNodes.length; i++ ) {
            var node = this.svgNodes[i];
            var CTM  = matrix.multiply( this.lastTM.multiply(node.getCTM()) );

            var transform = "matrix(" +
                [ CTM.a, CTM.b, CTM.c,
                  CTM.d, CTM.e, CTM.f  ].join(",") + ")";

            this.svgNodes[i].setAttributeNS(null, "transform", transform);
        }

        this.lastTM = matrix.inverse();
    }
};
		]]>]]&gt;
		</xsl:text>


		</script>
		<script><xsl:text disable-output-escaping="yes">&lt;![CDATA[<![CDATA[
        var azap = new AntiZoomAndPan();

        function initAzap(e) {
            if ( window.svgDocument == null )
                svgDocument = e.target.ownerDocument;
            var Tree = svgDocument.getElementById("DiagramTree");
            azap.appendNode(Tree);

            // This update is need to initialize all mananged nodes
            // Really this is a hack to get around this "feature" of the code
            azap.update();
        }
		]]>]]&gt;
		</xsl:text>
		</script>
		<!-- Main Tree group -->
		<g id="DiagramTree">
			<svg width="200" font-weight="bold" font-size="13" fill="#FFFFE3" onload="initAzap();">
				<!-- Background -->
				<rect width="200" height="100%" fill="black" stroke="none" stroke-width="2"/>
				<!-- Tree root -->
				<a><text>
					<tspan id="TreeRootP" x="10" dy="20" onclick="show('TreeRoot')">+</tspan>
					<tspan id="TreeRootM" x="10" dy="20" display="none" onclick="hide('TreeRoot')">-</tspan>
					<tspan x="20" dy="0" onclick="treeNodeClick('TreeRoot')"><xsl:value-of select="//UML:Model/@name"/></tspan>
					<tspan id="TreeRoot" display="none">
	
						<!-- Contained Class diagrams -->
						<xsl:if test="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'ClassDiagram']">
							<tspan id="ClassDiagramsP" x="20" dy="20" onclick="show('ClassDiagrams')">+</tspan>
							<tspan id="ClassDiagramsM" x="20" dy="20" display="none" onclick="hide('ClassDiagrams')">-</tspan>
							<tspan x="30" dy="0" onclick="treeNodeClick('ClassDiagrams')">Class Diagrams</tspan>
							<tspan id="ClassDiagrams" display="none">
								<xsl:for-each select="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'ClassDiagram']">
									<tspan id="{@xmi.id}T" x="40" dy="20" onclick="showDiagram('{@xmi.id}')" onmouseover="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFF')" onmouseout="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFFFE3')"><xsl:value-of select="@name"/></tspan>
								</xsl:for-each>
							</tspan>
						</xsl:if>
	
						<!-- Contained UseCase diagrams -->
						<xsl:if test="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'UseCaseDiagram']">
							<tspan id="UseCaseDiagramsP" x="20" dy="20" onclick="show('UseCaseDiagrams')">+</tspan>
							<tspan id="UseCaseDiagramsM" x="20" dy="20" display="none" onclick="hide('UseCaseDiagrams')">-</tspan>
							<tspan x="30" dy="0" onclick="treeNodeClick('UseCaseDiagrams')">UseCase Diagrams</tspan>
							<tspan id="UseCaseDiagrams" display="none">
								<xsl:for-each select="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'UseCaseDiagram']">
									<tspan id="{@xmi.id}T" x="40" dy="20" onclick="showDiagram('{@xmi.id}')" onmouseover="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFF')" onmouseout="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFFFE3')"><xsl:value-of select="@name"/></tspan>
								</xsl:for-each>
							</tspan>
						</xsl:if>
	
						<!-- Contained State diagrams -->
						<xsl:if test="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'StateDiagram']">
							<tspan id="StateDiagramsP" x="20" dy="20" onclick="show('StateDiagrams')">+</tspan>
							<tspan id="StateDiagramsM" x="20" dy="20" display="none" onclick="hide('StateDiagrams')">-</tspan>
							<tspan x="30" dy="0" onclick="treeNodeClick('StateDiagrams')">State Diagrams</tspan>
							<tspan id="StateDiagrams" display="none">
								<xsl:for-each select="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'StateDiagram']">
									<tspan id="{@xmi.id}T" x="40" dy="20" onclick="showDiagram('{@xmi.id}')" onmouseover="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFF')" onmouseout="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFFFE3')"><xsl:value-of select="@name"/></tspan>
								</xsl:for-each>
							</tspan>
						</xsl:if>
	
						<!-- Contained Activity diagrams -->
						<xsl:if test="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'ActivityDiagram']">
							<tspan id="ActivityDiagramsP" x="20" dy="20" onclick="show('ActivityDiagrams')">+</tspan>
							<tspan id="ActivityDiagramsM" x="20" dy="20" display="none" onclick="hide('ActivityDiagrams')">-</tspan>
							<tspan x="30" dy="0" onclick="treeNodeClick('ActivityDiagrams')">Activity Diagrams</tspan>
							<tspan id="ActivityDiagrams" display="none">
								<xsl:for-each select="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'ActivityDiagram']">
									<tspan id="{@xmi.id}T" x="40" dy="20" onclick="showDiagram('{@xmi.id}')" onmouseover="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFF')" onmouseout="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFFFE3')"><xsl:value-of select="@name"/></tspan>
								</xsl:for-each>
							</tspan>
						</xsl:if>
	
						<!-- Contained Collaboration diagrams -->
						<xsl:if test="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'CollaborationDiagram']">
							<tspan id="CollaborationDiagramsP" x="20" dy="20" onclick="show('CollaborationDiagrams')">+</tspan>
							<tspan id="CollaborationDiagramsM" x="20" dy="20" display="none" onclick="hide('CollaborationDiagrams')">-</tspan>
							<tspan x="30" dy="0" onclick="treeNodeClick('CollaborationDiagrams')">Collaboration Diagrams</tspan>
							<tspan id="CollaborationDiagrams" display="none">
								<xsl:for-each select="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'CollaborationDiagram']">
									<tspan id="{@xmi.id}T" x="40" dy="20" onclick="showDiagram('{@xmi.id}')" onmouseover="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFF')" onmouseout="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFFFE3')"><xsl:value-of select="@name"/></tspan>
								</xsl:for-each>
							</tspan>
						</xsl:if>
	
						<!-- Contained Sequence diagrams -->
						<xsl:if test="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'SequenceDiagram']">
							<tspan id="SequenceDiagramsP" x="20" dy="20" onclick="show('SequenceDiagrams')">+</tspan>
							<tspan id="SequenceDiagramsM" x="20" dy="20" display="none" onclick="hide('SequenceDiagrams')">-</tspan>
							<tspan x="30" dy="0" onclick="treeNodeClick('SequenceDiagrams')">Sequence Diagrams</tspan>
							<tspan id="SequenceDiagrams" display="none">
								<xsl:for-each select="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'SequenceDiagram']">
									<tspan id="{@xmi.id}T" x="40" dy="20" onclick="showDiagram('{@xmi.id}')" onmouseover="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFF')" onmouseout="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFFFE3')"><xsl:value-of select="@name"/></tspan>
								</xsl:for-each>
							</tspan>
						</xsl:if>
	
						<!-- Contained Deployment diagrams -->
						<xsl:if test="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'DeploymentDiagram']">
							<tspan id="DeploymentDiagramsP" x="20" dy="20" onclick="show('DeploymentDiagrams')">+</tspan>
							<tspan id="DeploymentDiagramsM" x="20" dy="20" display="none" onclick="hide('DeploymentDiagrams')">-</tspan>
							<tspan x="30" dy="0" onclick="treeNodeClick('DeploymentDiagrams')">Deployment Diagrams</tspan>
							<tspan id="DeploymentDiagrams" display="none">
								<xsl:for-each select="/XMI/XMI.content/UML:Diagram[UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'DeploymentDiagram']">
									<tspan id="{@xmi.id}T" x="40" dy="20" onclick="showDiagram('{@xmi.id}')" onmouseover="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFF')" onmouseout="document.getElementById('{@xmi.id}T').setAttribute('fill', '#FFFFE3')"><xsl:value-of select="@name"/></tspan>
								</xsl:for-each>
							</tspan>
						</xsl:if>
					</tspan>
				</text></a>
			</svg>
		</g>
	</xsl:template>
</xsl:stylesheet>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -