From: <rd...@us...> - 2008-07-02 08:01:39
|
Revision: 1360 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=1360&view=rev Author: rdewit Date: 2008-07-02 01:01:37 -0700 (Wed, 02 Jul 2008) Log Message: ----------- Improved adding/deleting nodes. Though not perfect, it works quite well now. Modified Paths: -------------- sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms-common.xsl sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms.xsl Modified: sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms-common.xsl =================================================================== --- sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms-common.xsl 2008-07-02 04:45:19 UTC (rev 1359) +++ sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms-common.xsl 2008-07-02 08:01:37 UTC (rev 1360) @@ -80,7 +80,11 @@ </xsl:choose> </xsl:variable> - <xf:repeat nodeset="{name()}" class="complex node gmd:*"> + <xf:repeat nodeset="geonet:child[@name='{$childLocalName}' and @prefix='{$childPrefix}' and not (../*[name() = '{$childName}'])]" class="complex node gmd:*"> + TESTING + </xf:repeat> + + <xf:repeat nodeset="{name()}|geonet:child[@name='{$childLocalName}' and @prefix='{$childPrefix}' and not (../*[name() = '{$childName}'])]" class="complex node gmd:*"> <xsl:call-template name="create_add_button"> <xsl:with-param name="grandparent" select="$grandParentName"/> <xsl:with-param name="parent" select="$parentName"/> @@ -145,7 +149,7 @@ <!-- Simple node --> <xsl:otherwise> - <xf:repeat nodeset="{name()}|geonet:child[@name='{$childLocalName}' and @prefix='{$childPrefix}']"> + <xf:repeat nodeset="{name()}|geonet:child[@name='{$childLocalName}' and @prefix='{$childPrefix}']" id="{saxon:path()}"> <xh:p> <xf:group ref="." class="gn-subgroup"> <xsl:choose> @@ -230,6 +234,16 @@ <xf:setvalue ref="instance('snippet-request')/child" value="concat('{$child}','')"/> <xf:send submission="get-snippet"/> <xf:action ev:event="xforms-submit-done"> + + <!-- remove all geonet:element elements before putting node in document --> + <xf:action ev:event="DOMActivate" while="count(instance('snippet')//geonet:element) > 0"> + <xf:delete nodeset="instance('snippet')//geonet:element"/> + </xf:action> + <!-- remove all text() elements (whitespace) before putting node in document --> + <xf:action ev:event="DOMActivate" while="count(instance('snippet')//text()) > 0"> + <xf:delete nodeset="instance('snippet')//text()"/> + </xf:action> + <xf:insert context="." nodeset="{$child}" at="last()" position="after" origin="instance('snippet')"/> </xf:action> @@ -351,16 +365,43 @@ <!-- Text input field --> <xsl:template match="gco:CharacterString|gco:Date|gco:Real|gmd:URL|gco:Integer|gco:Distance"> - <xsl:variable name="parentNodeName" select="name(..)"/> + <xsl:variable name="parentName" select="name(..)"/> <xsl:variable name="parentLocalName" select="local-name(..)"/> <xsl:variable name="parentPrefix" select="substring-before(name(..),':')"/> - <xsl:variable name="grandParentNodeName" select="name(../..)"/> - <xsl:variable name="labelNode" select="$labels-doc/labels/element[@name=$parentNodeName]"/> + <xsl:variable name="labelNode" select="$labels-doc/labels/element[@name=$parentName]"/> <xsl:variable name="label" select="$labelNode/label"/> <xsl:variable name="description" select="$labelNode/description"/> <xsl:variable name="example" select="$labelNode/example"/> <xsl:variable name="minVal" select="following-sibling::geonet:element/@min"/> + <xsl:variable name="greatGreatGrandParentName"> + <xsl:choose> + <xsl:when test="name(../../../..)"> + <xsl:value-of select="name(../../../..)"/> + </xsl:when> + <xsl:otherwise>/</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="greatGrandParentName"> + <xsl:choose> + <xsl:when test="name(../../..)"> + <xsl:value-of select="name(../../..)"/> + </xsl:when> + <xsl:otherwise>/</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="grandParentName"> + <xsl:choose> + <xsl:when test="name(../..)"> + <xsl:value-of select="name(../..)"/> + </xsl:when> + <xsl:otherwise>/</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- create xpath for current node --> <xsl:variable name="xpath"> <xsl:for-each select="ancestor::*"> @@ -372,25 +413,60 @@ <!-- Attribute does exist: show control --> <xf:input ref="{name()}"> - <xf:label ref="instance('labels')/element[@name='{$parentNodeName}']/label" class="input-label"/> - <xf:hint ref="instance('labels')/element[@name='{$parentNodeName}']/description"/> + <xf:label ref="instance('labels')/element[@name='{$parentName}']/label" class="input-label"/> + <xf:hint ref="instance('labels')/element[@name='{$parentName}']/description"/> <!-- - <xf:help ref="instance('labels')/element[@name='{$parentNodeName}']/example"/> + <xf:help ref="instance('labels')/element[@name='{$parentName}']/example"/> --> </xf:input> <!-- delete button --> - <xf:group ref="{name()}[count(../../{$parentNodeName}) > {$minVal}]"> + <xf:group ref="{name()}[count(../../{$parentName}) > {$minVal}]"> + <xf:trigger> + <xf:label>Delete <xf:output value="instance('labels')/element[@name='{$parentName}']/label"/></xf:label> + <xf:action ev:event="DOMActivate"> + <!-- + <xf:insert context="." nodeset="{$child}" at="last()" position="after" origin="instance('snippets')/snippet[@id = '{$snippet-id}']/*"/> + --> + <!-- If there was no geonet:child for this node, create one. We'll need it when we delete the last one --> + <xf:action while="not(../../geonet:child[@name='{$parentLocalName}' and @prefix='{$parentPrefix}'])"> + <xf:setvalue ref="instance('snippet-request')/grandparent" value="concat('{$greatGreatGrandParentName}','')"/> + <xf:setvalue ref="instance('snippet-request')/parent" value="concat('{$greatGrandParentName}','')"/> + <xf:setvalue ref="instance('snippet-request')/child" value="concat('{$grandParentName}','')"/> + + <xf:send submission="get-snippet"/> + + <xf:action ev:event="xforms-submit-done"> + + <!-- use the xpath of the parent node as the id to find where we are in the repeat --> + <xsl:variable name="dirname_xpath"> + <xsl:call-template name="dirname"> + <xsl:with-param name="path" select="saxon:path()"/> + </xsl:call-template> + </xsl:variable> + + <xf:insert context="../.." nodeset="{$parentName}" at="index('{$dirname_xpath}')" position="after" + origin="instance('snippet')//geonet:child[@name='{$parentLocalName}' and @prefix='{$parentPrefix}']"/> + </xf:action> + + <!-- Delete the node --> + <xf:delete context=".."/> + + </xf:action> + </xf:action> + </xf:trigger> + + <!-- OLD <xf:trigger> <xf:label>Delete</xf:label> <xf:action ev:event="DOMActivate"> - <!-- - <xf:insert context="../.." nodeset="{$parentNodeName}" at="index('{name(../..)}/{$parentNodeName}')" position="after" origin="instance('snippets')/snippet[@id = '{$grandParentNodeName}']//geonet:child[@name='{$parentLocalName}' and @prefix='{$parentPrefix}']"/> - --> - <xf:insert context="../.." nodeset="{$parentNodeName}" at="last()" position="after" origin="instance('snippets')/snippet//geonet:child[@name='{$parentLocalName}' and @prefix='{$parentPrefix}']"/> + <xf:insert context="../.." nodeset="{$parentName}" at="index('{name(../..)}/{$parentName}')" position="after" origin="instance('snippets')/snippet[@id = '{$grandparentName}']//geonet:child[@name='{$parentLocalName}' and @prefix='{$parentPrefix}']"/> + <xf:insert context="../.." nodeset="{$parentName}" at="last()" position="after" origin="instance('snippets')/snippet//geonet:child[@name='{$parentLocalName}' and @prefix='{$parentPrefix}']"/> <xf:delete context=".."/> </xf:action> </xf:trigger> + --> + </xf:group> </xsl:template> Modified: sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms.xsl =================================================================== --- sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms.xsl 2008-07-02 04:45:19 UTC (rev 1359) +++ sandbox/geonetworkui/BlueNetMEST/web/geonetwork/xsl/conversion/export/xml_xforms.xsl 2008-07-02 08:01:37 UTC (rev 1360) @@ -28,6 +28,7 @@ <xsl:param name="codelists" select="concat($geonetwork-location,'/xml/schemas/',$schema,'/loc/',$loc,'/codelists.xml')"/> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> + <xsl:include href="xml_xforms-common.xsl"/> <xsl:include href="xml_xforms-header-footer.xsl"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |