diff --git a/build.properties.d/00_default.properties b/build.properties.d/00_default.properties index af9b94ab0079ee6ab6241ac6869b8b59a33cff5f..d7e81457236d33995e0f21d72488c33198ce4caa 100644 --- a/build.properties.d/00_default.properties +++ b/build.properties.d/00_default.properties @@ -45,7 +45,7 @@ # relative file path in the webui to the logo. The actual files resides in # `./src/core/pics/caosdb_logo_medium.png`, relative to the build directory. BUILD_NAVBAR_LOGO=pics/caosdb_logo_medium.png -# The name CaosDB is shown right of the logo image. +# The name CaosDB is shown to the right of the logo image. BUILD_NAVBAR_BRAND_NAME=CaosDB ############################################################################## @@ -54,3 +54,8 @@ BUILD_NAVBAR_BRAND_NAME=CaosDB # Link to the data policy statement document. BUILD_FOOTER_DATA_POLICY_HREF=https://indiscale.com/?page_id=156 + +# Custom footer elements can be placed here (will be placed inside a <div> +# element). +BUILD_FOOTER_CUSTOM_ELEMENT_ONE= +BUILD_FOOTER_CUSTOM_ELEMENT_TWO= diff --git a/makefile b/makefile index 2814d5a5ad31c210661edc8717dadb5c04b1b672..b1072187d2e34ffd4bb318110a04a0e7e700be87 100644 --- a/makefile +++ b/makefile @@ -115,6 +115,11 @@ run-qunit: [ $$(cat .server_done) -eq 0 ] cp-ext: + # TODO FIXME Base path for not-XSL-expanded files + mkdir -p $(PUBLIC_DIR)/html + for f in $(wildcard $(SRC_EXT_DIR)/html/*) ; do \ + echo "y" | cp -i -r "$$(realpath "$$f")" $(PUBLIC_DIR)/html/ ; \ + done for f in $(wildcard $(SRC_EXT_DIR)/js/*) ; do \ echo "y" | cp -i -r "$$f" $(PUBLIC_DIR)/js/ ; \ sed -i "/JS_EXTENSIONS/a \<xsl:element name=\"script\"><xsl:attribute name=\"src\"><xsl:value-of select=\"concat\(\$$basepath, 'webinterface/${BUILD_NUMBER}$${f#$(SRC_EXT_DIR)}'\)\" /></xsl:attribute></xsl:element>" $(PUBLIC_DIR)/xsl/main.xsl ; \ @@ -122,10 +127,10 @@ cp-ext: for f in $(wildcard $(SRC_EXT_DIR)/css/*) ; do \ echo "y" | cp -i -r "$$f" $(PUBLIC_DIR)/css/ ; \ sed -i "/CSS_EXTENSIONS/a \<xsl:element name=\"link\"><xsl:attribute name=\"rel\">stylesheet</xsl:attribute><xsl:attribute name=\"href\"><xsl:value-of select=\"concat\(\$$basepath, 'webinterface/${BUILD_NUMBER}$${f#$(SRC_EXT_DIR)}'\)\" /></xsl:attribute></xsl:element>" $(PUBLIC_DIR)/xsl/main.xsl ; \ - done - mkdir -p $(PUBLIC_DIR)/html - for f in $(wildcard $(SRC_EXT_DIR)/html/*) ; do \ - echo "y" | cp -i -r "$$(realpath "$$f")" $(PUBLIC_DIR)/html/ ; \ + for html in $(PUBLIC_DIR)/html/* ; do \ + echo "$$html"; \ + sed -i "/CSS_EXTENSIONS/a \ <link rel=\"stylesheet\" href=\"$${basepath}/webinterface/${BUILD_NUMBER}$${f#$(SRC_EXT_DIR)}\">" "$$html" ; \ + done \ done for f in $(wildcard $(SRC_EXT_DIR)/pics/*) ; do \ echo "y" | cp -i -r "$$(realpath "$$f")" $(PUBLIC_DIR)/pics/ ; \ diff --git a/src/core/css/webcaosdb.css b/src/core/css/webcaosdb.css index 61649e0343a0c6e80678bb9c93fd93312d1ab443..beb8ab76b7922cd092f9467621199b57817866db 100644 --- a/src/core/css/webcaosdb.css +++ b/src/core/css/webcaosdb.css @@ -21,6 +21,16 @@ * ** end header */ @CHARSET "UTF-8"; + +body { + display: flex; + flex-direction: column; +} + +.caosdb-v-main-col { + flex-grow: 1; +} + .caosdb-v-show-only-child { display: none; } @@ -36,6 +46,11 @@ .caosdb-property-text-value { white-space: pre-line; } + +.caosdb-clickable:hover { + cursor: pointer; +} + .caosdb-comment-annotation-text h1 { font-size: 24px; } @@ -52,10 +67,18 @@ font-size: 16px; } +.caosdb-f-main { + display: flex; +} +.caosdb-f-main-entities { + width: unset; + min-width: 50vw; +} + .caosdb-show-preview-button, .caosdb-hide-preview-button { position: absolute; - top: 5px; - left: -5px; + top: 2px; + left: -8px; } .caosdb-entity-heading-attr { @@ -102,6 +125,10 @@ h5 { text-decoration: none; } +.navbar-fixed-top, .navbar-fixed-bottom { + position: sticky; +} + .caosdb-property-name { font-weight: bold; margin-left: 8px; @@ -116,10 +143,6 @@ h5 { margin-top: 5px; } -#subnav { - height: 60px; -} - .caosdb-square::before { content: ""; display: block; @@ -135,9 +158,13 @@ h5 { } .caosdb-parent-name { - font-weight: bold; - margin-right: 12px; + margin: 0 0.4em; font-size: 14px; + color: black; +} + +.caosdb-label-name { + font-weight: bold; } /* lists of values */ @@ -209,7 +236,7 @@ h5 { .caosdb-subproperty-divider { margin: 4px 0px; - border-top: 1px solid #dddddd + border-top: 1px solid #dddddd; } .caosdb-prop-label { @@ -236,7 +263,10 @@ h5 { padding-left: 0px; } .caosdb-v-edit-panel { + position: sticky; + top: 20px; padding: 0px; + width: unset; } .caosdb-prop-list-group>.list-group-item { @@ -265,8 +295,7 @@ h5 { .caosdb-label-record { background-color: #F92108; - margin-right: 8px; - margin-top: -4px; + margin: -4px 0.2em 0 0.4em; } .caosdb-label-recordtype { @@ -299,25 +328,32 @@ h5 { padding-top: 2px; padding-bottom: 2px; background-color: #f5f5f5; - color: #7c7c7c + color: #7c7c7c; } .caosdb-parents-heading { padding-top: 2px; padding-bottom: 2px; background-color: #f5f5f5; - color: #7c7c7c + color: #7c7c7c; } .caosdb-comments-heading { padding-top: 2px; padding-bottom: 2px; background-color: #f5f5f5; - color: #7c7c7c + color: #7c7c7c; } .caosdb-parent-item { + border: 1px solid #666; + border-radius: 1ex; + padding: .3ex .2em .3ex; + margin: 0 0.5em; +} +.caosdb-f-parent-list { + margin: 0 0.5em 0 auto; } .caosdb-unit { @@ -475,3 +511,17 @@ input[type="file"] { max-height: 80vh; overflow-y: auto; } + +footer { + background-color: lightgrey; + padding: 0.5em; +} + +.caosdb-footer-element { + margin: 1em; +} + +.caosdb-bulletsep { + margin-left: 2ch; + margin-right: 2ch; +} diff --git a/src/core/html/imprint.html b/src/core/html/imprint.html new file mode 100644 index 0000000000000000000000000000000000000000..ec9ae6a397f79bfda8f89b0630c9b487f33b09c7 --- /dev/null +++ b/src/core/html/imprint.html @@ -0,0 +1,33 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"/> + <title>Imprint</title> + <script src="/webinterface/${BUILD_NUMBER}/js/jquery.js"></script> + <script src="/webinterface/${BUILD_NUMBER}/js/footer.js"></script> + + <link rel="stylesheet" href="https://localhost:10443/webinterface/${BUILD_NUMBER}/css/bootstrap.css"> + <link rel="stylesheet" href="https://localhost:10443/webinterface/${BUILD_NUMBER}/css/webcaosdb.css"> + <link rel="stylesheet" href="https://localhost:10443/webinterface/${BUILD_NUMBER}/css/dropzone.css"> + <link rel="stylesheet" href="https://localhost:10443/webinterface/${BUILD_NUMBER}/css/tour.css"> + <link rel="stylesheet" href="https://localhost:10443/webinterface/${BUILD_NUMBER}/css/leaflet.css"> + <link rel="stylesheet" href="https://localhost:10443/webinterface/${BUILD_NUMBER}/css/leaflet-coordinates.css"> + <link rel="stylesheet" href="https://localhost:10443/webinterface/${BUILD_NUMBER}/css/bootstrap-select.css"> + <!--CSS_EXTENSIONS--> + </head> + <body style="width: 80%; margin: auto;"> + <h1>Imprint</h1> + <p>The entity responsible for running this service is:</p> + <p>Please contact the system administrator and ask them to enter the correct + information here.</p> + <h1>Liability notice</h1> + <p>The authors of the software are not responsible for the way it is + provided to the public or used otherwise.</p> + <h1>Trademark notice</h1> + <p>The names "CaosDB" and "IndiScale" are registered trademarks owned by + IndiScale GmbH. Permissive uses for the name "CaosDB" can be + found <a href="https://gitlab.com/caosdb/">in the sources</a>.</p> + <footer> + </footer> + </body> +</html> diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js index 1aa5626744150bdd1ba7eda6f0875f5378b30b7e..c9605dc2665ef4b7f3215b97d0950b296b16ff79 100644 --- a/src/core/js/edit_mode.js +++ b/src/core/js/edit_mode.js @@ -48,19 +48,12 @@ var edit_mode = new function() { edit_mode.enter_edit_mode(); edit_mode.toggle_edit_panel(); } - this.scroll_edit_panel(); - window.onscroll = this.scroll_edit_panel; $('.caosdb-f-edit').css("transition", "top 1s"); } else { window.localStorage.removeItem("edit_mode"); } } - // TODO: do all these listener need to be part of edit_mode or can they be - // declared with "var" - this.scroll_edit_panel = function(e) { - $('.caosdb-f-edit').css("top", document.documentElement.scrollTop); - } this.dragstart = function(e) { e.dataTransfer.setData("text/plain", e.target.id); diff --git a/src/core/js/ext_map.js b/src/core/js/ext_map.js index e28b1101d4d310b68de2042c5f1f844b76ec7ea3..7340d4339ac4a6889a03563fafcee23948b7357c 100644 --- a/src/core/js/ext_map.js +++ b/src/core/js/ext_map.js @@ -427,7 +427,7 @@ var caosdb_map = new function() { $(panel).hide(); - $('#subnav').first().after(panel); + $('nav').first().after(panel); logger.trace("leave init_map_panel"); return panel; diff --git a/src/core/js/footer.js b/src/core/js/footer.js new file mode 100644 index 0000000000000000000000000000000000000000..79f3ed0ecb382534d7c997ce0bc230178792f677 --- /dev/null +++ b/src/core/js/footer.js @@ -0,0 +1,60 @@ +/* + * ** header v3.0 + * This file is a part of the CaosDB Project. + * + * Copyright (C) 2019 IndiScale GmbH (info@indiscale.com) + * Copyright (C) 2019 Daniel Hornung (d.hornung@indiscale.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * ** end header + */ +'use strict'; + +/** + * Call initially. + * + * TODO refactor to async function for better readability. + * @return + */ +function footer_initOnDocumentReady() { + + var xhr = new XMLHttpRequest() + + // TODO Refactor and use transformation.retrieveXsltScript, + // + // Event better use the transformation module for injecting an entry point, + // because this implementation does not allow for non-HTML content in the + // caosdb-footer template. + xhr.open("GET", "/webinterface/${BUILD_NUMBER}/xsl/footer.xsl"); + xhr.addEventListener('load', function() { + if (this.status != 200) { + // TODO use proper logging framework (log.getLogger("footer.js");) + console.log(this.status); + return; + } + var footer_xsl = this.responseXML; + + var foot_content = $('[name = "caosdb-footer"]', footer_xsl)[0]; + var fragment = document.createRange().createContextualFragment( + foot_content.innerHTML); + var footer = $("footer")[0]; + footer.appendChild(fragment); + + }); + xhr.send(); + +} + +$(document).ready(footer_initOnDocumentReady); diff --git a/src/core/js/query_shortcuts.js b/src/core/js/query_shortcuts.js index 9d0bdf3eece6541b48ce4fae1888f096a6603d9c..1b4765cebfd3d95faf2beb9b5e948fba4456de2b 100644 --- a/src/core/js/query_shortcuts.js +++ b/src/core/js/query_shortcuts.js @@ -953,7 +953,6 @@ var query_shortcuts = new function() { $(panel).find(".caosdb-f-shortcuts-toolbox-button").toggle(); $(panel).find(".caosdb-f-shortcuts-panel-body").toggle() - navbar.update_subnav_height(); } diff --git a/src/core/js/webcaosdb.js b/src/core/js/webcaosdb.js index 77b9229fc6eeca42cd9a9127e53acc4a12d98f56..a66e699605844d6b1160b25bb68913de9722354c 100644 --- a/src/core/js/webcaosdb.js +++ b/src/core/js/webcaosdb.js @@ -93,19 +93,12 @@ this.navbar = new function() { $("nav.navbar-fixed-top") .on("shown.bs.collapse", function(e) { logger.trace("navbar expands", e); - navbar.update_subnav_height(); }) .on("hidden.bs.collapse", function(e) { logger.trace("navbar shrinks", e); - navbar.update_subnav_height(); }); } - this.update_subnav_height = function() { - var height = $("nav.navbar-fixed-top").height(); - $("#subnav").animate({"height": height + 10 + "px"}, 200); - } - } diff --git a/src/core/webcaosdb.xsl b/src/core/webcaosdb.xsl index 0a98d7b52721ed05726b5d759e6839435cdceb23..de4bdc9a5728da61799b05b23f5030ed25dfbc4a 100644 --- a/src/core/webcaosdb.xsl +++ b/src/core/webcaosdb.xsl @@ -5,8 +5,9 @@ * * Copyright (C) 2018 Research Group Biomedical Physics, * Max-Planck-Institute for Dynamics and Self-Organization Göttingen + * Copyright (C) 2019 IndiScale GmbH * Copyright (C) 2019 Timm Fitschen (t.fitschen@indiscale.com) - * Copyright (C) 2019 IndiScale GmbH (info@indiscale.com) + * Copyright (C) 2019 Daniel Hornung (d.hornung@indiscale.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -23,37 +24,35 @@ * * ** end header --> -<xsl:stylesheet version="1.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> - <xsl:output method="html" /> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:output method="html" /> - <xsl:include href="xsl/main.xsl" /> - <xsl:include href="xsl/navbar.xsl" /> - <xsl:include href="xsl/messages.xsl" /> - <xsl:include href="xsl/query.xsl" /> - <xsl:include href="xsl/entity.xsl" /> - <xsl:include href="xsl/filesystem.xsl" /> - - <xsl:template match="/"> - <html lang="en"> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <xsl:call-template name="caosdb-head-title" /> - <xsl:call-template name="caosdb-head-css" /> - <xsl:call-template name="caosdb-head-js" /> - </head> - <body> - <xsl:call-template name="caosdb-top-navbar" /> - <xsl:call-template name="paging-panel"/> - <xsl:call-template name="caosdb-data-container" /> - <xsl:call-template name="paging-panel"/> - </body> - <footer> - See data policy statement - <a href="${BUILD_FOOTER_DATA_POLICY_HREF}">here </a> - </footer> - </html> - </xsl:template> + <xsl:include href="xsl/main.xsl" /> + <xsl:include href="xsl/navbar.xsl" /> + <xsl:include href="xsl/messages.xsl" /> + <xsl:include href="xsl/query.xsl" /> + <xsl:include href="xsl/entity.xsl" /> + <xsl:include href="xsl/filesystem.xsl" /> + <xsl:include href="xsl/footer.xsl" /> + <xsl:template match="/"> + <html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <xsl:call-template name="caosdb-head-title" /> + <xsl:call-template name="caosdb-head-css" /> + <xsl:call-template name="caosdb-head-js" /> + </head> + <body> + <xsl:call-template name="caosdb-top-navbar" /> + <xsl:call-template name="paging-panel"/> + <xsl:call-template name="caosdb-data-container" /> + <xsl:call-template name="paging-panel"/> + <footer> + <xsl:call-template name="caosdb-footer"/> + </footer> + </body> + </html> + </xsl:template> </xsl:stylesheet> diff --git a/src/core/xsl/entity.xsl b/src/core/xsl/entity.xsl index 5fc967a32680c166165bd0ed980f5f5384dc9a1c..621755604a87b9bb7fbb9d8125ce414a11757d32 100644 --- a/src/core/xsl/entity.xsl +++ b/src/core/xsl/entity.xsl @@ -20,29 +20,34 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. * * ** end header ---><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + --> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <!-- These little colored Rs, RTs, Ps, and Fs which hilite the beginning of a new entity. --> <xsl:template match="Property" mode="entity-heading-label"> - <span class="label caosdb-f-entity-role caosdb-label-property" data-entity-role="Property">P</span> + <span class="label caosdb-f-entity-role caosdb-label-property" + data-entity-role="Property" title="This entity is a Property.">P</span> </xsl:template> <xsl:template match="Record" mode="entity-heading-label"> - <span class="label caosdb-f-entity-role caosdb-label-record" data-entity-role="Record">R</span> + <span class="label caosdb-f-entity-role caosdb-label-record" + data-entity-role="Record" title="This entity is a Record.">R</span> </xsl:template> <xsl:template match="RecordType" mode="entity-heading-label"> - <span class="label caosdb-f-entity-role caosdb-label-recordtype" data-entity-role="RecordType">RT</span> + <span class="label caosdb-f-entity-role caosdb-label-recordtype" + data-entity-role="RecordType" title="This entity is a Record Type.">RT</span> </xsl:template> <xsl:template match="File" mode="entity-heading-label"> - <span class="label caosdb-f-entity-role caosdb-label-file" data-entity-role="File">F</span> + <span class="label caosdb-f-entity-role caosdb-label-file" + data-entity-role="File" title="This entity is a File.">F</span> </xsl:template> <xsl:template match="@id" mode="backreference-link"> - <a class="caosdb-backref-link label caosdb-id-button" title="Find all referencing entities."> + <a class="caosdb-backref-link label caosdb-id-button" title="Find all entities which reference this one."> <xsl:attribute name="href"> <xsl:value-of select="concat($entitypath, '?P=0L10&query=FIND+Entity+which+references+', current())"/> </xsl:attribute> - <span class="glyphicon glyphicon-share-alt flipped-horiz-icon"/> Backref - </a> + <span class="glyphicon glyphicon-share-alt flipped-horiz-icon"/> References + </a> <span class="spacer"/> </xsl:template> <!-- special entity properties like type, checksum, path... --> @@ -93,6 +98,8 @@ <xsl:attribute name="data-entity-id"> <xsl:value-of select="@id"/> </xsl:attribute> + <!-- A page-unique ID for this entity --> + <xsl:variable name="entityid" select="concat('entity_',generate-id())"/> <div class="panel-heading caosdb-entity-panel-heading"> <xsl:attribute name="data-entity-datatype"> <xsl:value-of select="@datatype"/> @@ -112,7 +119,7 @@ <xsl:value-of select="generate-id()"/> </xsl:attribute> <span class="caosdb-f-parent-actions-panel"></span> - <a class="caosdb-parent-name"> + <a class="caosdb-parent-name" title="Go to this parent of the Entity."> <xsl:attribute name="href"> <xsl:value-of select="concat($entitypath, @id)"/> </xsl:attribute> @@ -122,13 +129,22 @@ </xsl:for-each> </xsl:if> </span> - <strong class="caosdb-label-name"> + <a class="caosdb-label-name" title="Open this Entity separately."> + <xsl:attribute name="href"> + <xsl:value-of select="concat($entitypath, @id)"/> + </xsl:attribute> <xsl:value-of select="@name"/> - </strong> + </a> </h5> </div> <div class="col-sm-4 text-right"> <h5> + <!-- Button for expanding/collapsing the comments section--> + <span class="caosdb-clickable glyphicon glyphicon-comment" data-toggle="collapse" title="Comments" style="margin-right: 10px;"> + <xsl:attribute name="data-target"> + <xsl:value-of select="concat('#', 'comment_', $entityid)"/> + </xsl:attribute> + </span> <xsl:apply-templates mode="backreference-link" select="@id"/> <span class="label caosdb-id caosdb-id-button"> <xsl:value-of select="@id"/> @@ -174,11 +190,12 @@ <xsl:with-param name="path" select="@path"/> </xsl:call-template> </xsl:if> - <!-- Annotations --> - <xsl:call-template name="annotation-section"> - <xsl:with-param name="entityId" select="@id"/> - </xsl:call-template> </div> + <!-- Annotations --> + <xsl:call-template name="annotation-section"> + <xsl:with-param name="entityId" select="@id"/> + <xsl:with-param name="collapseId" select="concat('comment_', $entityid)"/> + </xsl:call-template> </div> </xsl:template> <!-- Thumbnails of images --> @@ -261,7 +278,7 @@ <div class="col-sm-4"> <h5> <xsl:if test="@*[not(contains('+cuid+id+name+',concat('+',name(),'+')))]"> - <span class="glyphicon glyphicon-collapse-down" data-toggle="collapse" style="margin-right: 10px;"> + <span class="glyphicon glyphicon-collapse-down caosdb-clickable" data-toggle="collapse" style="margin-right: 10px;"> <xsl:attribute name="data-target"> <xsl:value-of select="concat('#',$collapseid)"/> </xsl:attribute> @@ -456,11 +473,16 @@ <!-- ANNOTATIONS --> <xsl:template name="annotation-section"> <xsl:param name="entityId"/> - <ul class="list-group caosdb-annotation-section"> + <xsl:param name="collapseId"/> + <ul class="collapse list-group caosdb-annotation-section"> <xsl:attribute name="data-entity-id"> <xsl:value-of select="$entityId"/> </xsl:attribute> + <xsl:attribute name="id"> + <xsl:value-of select="$collapseId"/> + </xsl:attribute> <li class="list-group-item caosdb-comments-heading"> + <span class="glyphicon glyphicon-comment" style="margin-right: 1em;"/> <strong class="small">Comments</strong> <button class="btn btn-link btn-xs pull-right caosdb-new-comment-button"> <strong>add new comment</strong> diff --git a/src/core/xsl/footer.xsl b/src/core/xsl/footer.xsl new file mode 100644 index 0000000000000000000000000000000000000000..0b034e9d5a3b170305b85567f34732ac04755f91 --- /dev/null +++ b/src/core/xsl/footer.xsl @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * ** header v3.0 + * This file is a part of the CaosDB Project. + * + * Copyright (C) 2019 IndiScale GmbH + * Copyright (C) 2019 Daniel Hornung (d.hornung@indiscale.com) + * Copyright (C) 2019 Timm Fitschen (t.fitschen@indiscale.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * ** end header +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:output method="html"/> + + <xsl:template name="caosdb-footer"> + <div class="caosdb-footer-element" id="caosdb-footer-element-custom-1"> + ${BUILD_FOOTER_CUSTOM_ELEMENT_ONE} + </div> + <div class="caosdb-footer-element" id="AGPL-notice"> + This server runs free software licensed under the <a + href="https://www.gnu.org/licenses/agpl-3.0.en.html" + target="_blank">AGPL-v3</a>, you can obtain the sources <a + href="https://gitlab.com/caosdb" target="_blank">here</a>. + </div> + <div class="caosdb-footer-element" id="caosdb-footer-element-custom-2"> + ${BUILD_FOOTER_CUSTOM_ELEMENT_TWO} + </div> + <div class="caosdb-footer-element"> + <a href="${BUILD_FOOTER_DATA_POLICY_HREF}">Data Policy</a><span class="caosdb-bulletsep">•</span><a href="/webinterface/${BUILD_NUMBER}/html/imprint.html">Imprint/Impressum</a> + </div> + </xsl:template> +</xsl:stylesheet> diff --git a/src/core/xsl/main.xsl b/src/core/xsl/main.xsl index abbf61b0362e9012198abd039c90ac1408035ecc..cd0ff0d770802793779a7cc836e144a7122ca111 100644 --- a/src/core/xsl/main.xsl +++ b/src/core/xsl/main.xsl @@ -7,6 +7,7 @@ * Max-Planck-Institute for Dynamics and Self-Organization Göttingen * Copyright (C) 2019 IndiScale GmbH (info@indiscale.com) * Copyright (C) 2019 Timm Fitschen (t.fitschen@indiscale.com) + * Copyright (C) 2019 Daniel Hornung (d.hornung@indiscale.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -133,7 +134,7 @@ </xsl:attribute> </xsl:element> <script> - $(document).ready(() => paging.initPaging(window.location.href, <xsl:value-of select="/Response/@count"/> )); + $(document).ready(() => paging.initPaging(window.location.href, <xsl:value-of select="/Response/@count"/> )); </script> <xsl:element name="script"> <xsl:attribute name="src"> @@ -219,7 +220,7 @@ </xsl:template> <xsl:template name="caosdb-data-container"> <div class="container caosdb-f-main"> - <div class="row"> + <div class="row caosdb-v-main-col"> <div class="panel-group caosdb-f-main-entities"> <xsl:apply-templates select="/Response/UserInfo"/> <xsl:apply-templates mode="top-level-data" select="/Response/*"/> @@ -231,12 +232,12 @@ <xsl:call-template name="welcome"/> </xsl:if> </div> - <div class="panel panel-warning caosdb-f-edit caosdb-v-edit-panel caosdb-v-edit-panel hidden"> - <div class="panel-heading"> - <h3 class="panel-title">Edit Mode Toolbox</h3> - </div> - <div class="caosdb-f-edit-panel-body panel-body"></div> + </div> + <div class="panel panel-warning caosdb-f-edit caosdb-v-edit-panel caosdb-v-edit-panel hidden"> + <div class="panel-heading"> + <h3 class="panel-title">Edit Mode Toolbox</h3> </div> + <div class="caosdb-f-edit-panel-body panel-body"></div> </div> </div> </xsl:template> diff --git a/src/core/xsl/navbar.xsl b/src/core/xsl/navbar.xsl index ca5aea7cf552fb717003b61f858a816a41d94dbd..a0b299e7668ca87153761396f7b93a61e9169978 100644 --- a/src/core/xsl/navbar.xsl +++ b/src/core/xsl/navbar.xsl @@ -42,6 +42,11 @@ </li> </xsl:template> <xsl:template name="caosdb-top-navbar"> + <!-- Some general settings first, current context should be the <body> node. --> + <xsl:if test="count(/Response/*)<2 and not(/Response/Error|/Response/Info|/Response/Warning)"> + <xsl:attribute name="class">caosdb-welcome</xsl:attribute> + </xsl:if> + <!-- Now the header follows. --> <nav class="navbar navbar-default navbar-fixed-top"> <div class="container-fluid"> <div class="navbar-header"> @@ -51,10 +56,10 @@ <span class="icon-bar"></span> </button> <a class="navbar-brand"> - <xsl:if test="${BUILD_NAVBAR_BRAND_NAME} != ''"> - <xsl:attribute name="class">caosdb-logo</xsl:attribute> - </xsl:if> <xsl:element name="img"> + <xsl:if test="'${BUILD_NAVBAR_BRAND_NAME}' != ''"> + <xsl:attribute name="class">caosdb-logo</xsl:attribute> + </xsl:if> <xsl:attribute name="src"> <xsl:value-of select="concat($basepath,'webinterface/${BUILD_NUMBER}/${BUILD_NAVBAR_LOGO}')"/> </xsl:attribute> @@ -145,7 +150,6 @@ <xsl:with-param name="class" select="'alert-info'"/> </xsl:apply-templates> </nav> - <div class="container" id="subnav"/> </xsl:template> <xsl:template match="Role" name="caosdb-user-roles"> <div class="caosdb-user-role">