diff --git a/src/core/js/webcaosdb.js b/src/core/js/webcaosdb.js index e9a293f68e058b6c146239318bde78c05a2dac69..bdced2e53f1ab20fc5ce1490f8a9796f32db2672 100644 --- a/src/core/js/webcaosdb.js +++ b/src/core/js/webcaosdb.js @@ -262,13 +262,13 @@ this.transformation = new function() { */ this.retrieveEntityXsl = async function _rEX() { var entityXsl = await transformation.retrieveXsltScript("entity.xsl"); - insertParam(entityXsl, "filesystempath", window.sessionStorage.caosdbBasePath + "FileSystem/"); - insertParam(entityXsl, "entitypath", window.sessionStorage.caosdbBasePath + "Entity/"); - insertParam(entityXsl, "close-char", '×'); + var commonXsl = await transformation.retrieveXsltScript("common.xsl"); var errorXsl = await transformation.retrieveXsltScript('messages.xsl'); - var xslt = transformation.mergeXsltScripts(entityXsl, [errorXsl]); + var xslt = transformation.mergeXsltScripts(entityXsl, [errorXsl, commonXsl]); + insertParam(xslt, "filesystempath", window.sessionStorage.caosdbBasePath + "FileSystem/"); + insertParam(xslt, "entitypath", window.sessionStorage.caosdbBasePath + "Entity/"); + insertParam(xslt, "close-char", '×'); xslt = injectTemplate(xslt, '<xsl:template match="/"><div class="root"><xsl:apply-templates select="Response/*" mode="entities"/></div></xsl:template>'); - xslt = injectTemplate(xslt, '<xsl:template name="make-filesystem-link"> <xsl:param name="href" /> <xsl:param name="display" select="$href" /> <a> <xsl:attribute name="href"><xsl:value-of select="concat($filesystempath,$href)" /></xsl:attribute> <xsl:value-of select="$display" /> </a> </xsl:template> '); return xslt; } diff --git a/src/core/xsl/common.xsl b/src/core/xsl/common.xsl index e166cf9123a30e2806ce9ff8edca86091303a99e..395c22063b8e2cdb6725ee2bd4cc859f9fb7be2c 100644 --- a/src/core/xsl/common.xsl +++ b/src/core/xsl/common.xsl @@ -33,4 +33,54 @@ <xsl:value-of select="$display"/> </a> </xsl:template> + + <xsl:template name="trim"> + <xsl:param name="str"/> + <xsl:call-template name="reverse"> + <xsl:with-param name="str"> + <xsl:call-template name="remove_leading_ws"> + <xsl:with-param name="str"> + <xsl:call-template name="reverse"> + <xsl:with-param name="str"> + <xsl:call-template name="remove_leading_ws"> + <xsl:with-param name="str" select="$str"/> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:template> + + <xsl:template name="remove_leading_ws"> + <xsl:param name="str"/> + <xsl:value-of select="substring($str,string-length(substring-before($str,substring(translate($str, ' 	
', ''), 1, 1))) +1)"/> + </xsl:template> + + <xsl:template name="reverse"> + <xsl:param name="str"/> + <xsl:variable name="length" select="string-length($str)"/> + <xsl:choose> + <xsl:when test="$length < 2"> + <xsl:value-of select="$str"/> + </xsl:when> + <xsl:when test="$length = 2"> + <xsl:value-of select="substring($str,2,1)"/> + <xsl:value-of select="substring($str,1,1)"/> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="center" select="floor($length div 2)"/> + <xsl:call-template name="reverse"> + <xsl:with-param name="str" + select="substring($str,$center+1,$center+1)"/> + </xsl:call-template> + <xsl:call-template name="reverse"> + <xsl:with-param name="str" + select="substring($str,1,$center)"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + </xsl:stylesheet> diff --git a/src/core/xsl/entity.xsl b/src/core/xsl/entity.xsl index 32f563333081cdc5976587cdc28bc2896a5d0478..0ead91d7b0aec1fec56bc31ad910a3bb6b1582b0 100644 --- a/src/core/xsl/entity.xsl +++ b/src/core/xsl/entity.xsl @@ -306,7 +306,11 @@ </xsl:when> <xsl:otherwise> <span class="caosdb-property-text-value"> - <xsl:value-of select="$value"/> + <xsl:call-template name="trim"> + <xsl:with-param name="str"> + <xsl:value-of select="$value"/> + </xsl:with-param> + </xsl:call-template> </span> </xsl:otherwise> </xsl:choose> diff --git a/test/core/index.html b/test/core/index.html index e9833d5682b50c35b827f58e3556f1a305e9d409..dcb38abd86a1e11643245b19dd2f08f7d25101b3 100644 --- a/test/core/index.html +++ b/test/core/index.html @@ -47,6 +47,7 @@ <script src="js/modules/webcaosdb.js.js"></script> <script src="js/modules/caosdb.js.js"></script> <script src="js/modules/webcaosdb.css.js"></script> + <script src="js/modules/common.xsl.js"></script> <script src="js/modules/entity.xsl.js"></script> <script src="js/modules/welcome.xsl.js"></script> <script src="js/modules/query.xsl.js"></script> diff --git a/test/core/js/modules/caosdb.js.js b/test/core/js/modules/caosdb.js.js index 9de2e659bba52dd3d1264e1c18c2c23f87cbcc6a..9c63fbd974eb1eb7e0b01fe05b577951eecd0e64 100644 --- a/test/core/js/modules/caosdb.js.js +++ b/test/core/js/modules/caosdb.js.js @@ -65,13 +65,13 @@ QUnit.module("caosdb.js", { done(); } }; - + this.xml_test_document = str2xml(string_test_document); transformation.transformEntities(this.xml_test_document).then(x => { this.x = x; doneinc(); - }); + }, err => {console.log(err);}); let string_test_document2 = ` @@ -95,7 +95,7 @@ QUnit.module("caosdb.js", { transformation.transformEntities(this.xml_test_document2).then(x => { this.userInfoTest = x; doneinc(); - }); + }, err => {console.log(err);}); } }); @@ -109,6 +109,9 @@ QUnit.module("caosdb.js", { // assert.equal(getUserName(), "max"); // }); +QUnit.test("available", function(assert) { + assert.ok(getProperties, "getProperties"); +}); /** * @author Alexander Schlemmer * Test whether properties are parsed correctly from the document tree. @@ -128,7 +131,7 @@ QUnit.test("getProperties", function(assert) { } assert.equal(this.x.length, 4); - + let ps = getProperties(this.x[0]); assert.equal(ps.length, 1); assert.equal(ps[0].name, "A"); @@ -369,7 +372,7 @@ QUnit.skip("replicationOfEntitiesNoDatatype", function(assert) { transformation.transformEntities(doc).then (x => { ps = getProperties(x[0]); pars = getParents(x[0]); - + assert.equal(getEntityRole(ent), getEntityRole(x[0])); assert.equal(getEntityName(ent), getEntityName(x[0])); assert.equal(getEntityID(ent), getEntityID(x[0])); diff --git a/test/core/js/modules/entity.xsl.js b/test/core/js/modules/entity.xsl.js index d042665d3f34a401d8ab4f720891f79526895225..eb626612e529c158bb6ad7a7e618528d58e24bbf 100644 --- a/test/core/js/modules/entity.xsl.js +++ b/test/core/js/modules/entity.xsl.js @@ -28,15 +28,23 @@ QUnit.module("entity.xsl", { // load entity.xsl var done = assert.async(); var qunit_obj = this; - connection.get("webinterface/xsl/entity.xsl").then(function(data) { - insertParam(data, "entitypath", "/entitypath/"); - insertParam(data, "filesystempath", "/filesystempath/"); - qunit_obj.entityXSL = injectTemplate(data, '<xsl:template name="make-filesystem-link"></xsl:template>'); + _retrieveEntityXSL().then(function(xsl) { + qunit_obj.entityXSL = xsl done(); }); } }); +async function _retrieveEntityXSL() { + var entityXsl = await transformation.retrieveXsltScript("entity.xsl"); + var commonXsl = await transformation.retrieveXsltScript("common.xsl"); + var xsl = transformation.mergeXsltScripts(entityXsl, [commonXsl]); + insertParam(xsl, "entitypath", "/entitypath/"); + insertParam(xsl, "filesystempath", "/filesystempath/"); + return xsl; +} + + /* TESTS */ QUnit.test("availability", function(assert) { assert.ok(this.entityXSL);