Java - Thymeleaf - HTML: Цвет букв с использованием регистра переключателя: нежелательный абзац / новая строка - PullRequest
0 голосов
/ 09 декабря 2018

Я работаю над биологической базой данных, состоящей из генов, белков и анализов.Используя Spring Boot и Thymeleaf, я хочу создать веб-визуализацию.Каждый ген показан на странице с именем, описанием и последовательностью.Последовательность состоит из букв A, T, G и C. Я хочу раскрасить эти буквы (работы).Но каждая буква пишется в новой строке вместо текста, который пишется до тех пор, пока строка не будет заполнена (а затем до следующей строки и т. Д.).В gene.html я использовал small-tag при определении цветов (пробовал p раньше и хотя это и стало причиной моей проблемы), но использование small не помогло.

Надеюсь, фрагмент кодаЯ предоставляю достаточно (если нет, скажите мне, что вам нужно)

gene.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
    <title>Gene</title>
    <meta http-equiv="Content-Type" content="content/html; charset=UTF-8">
</head>

<body>
<!--import header-->
<header th:include="header"></header>

    <div id="main">
        <!--GeneID as page heading -->
        <h2 th:text="'Gene: '+${identifier}"></h2>
        <!--Gene description -->
        <p th:text="${description}"></p>
        <br/>
        <!-- Sequence -->
        <h3 th:text="'Sequence:'"></h3>
        <!-- For each char in sequence-->
        <th:block th:each="char:${sequence}">
            <!--Print the char. Possibility to color encode the bases utilizing switch/case
            <small th:text="${char}"></small> -->
            <div th:switch="${char}">
                <div th:case="'A'">
                    <small  style="color: blue" th:text="${char}"></small>
                </div>
                <div th:case="'T'">
                    <small  style="color: yellow" th:text="${char}"></small>
                </div>
                <div th:case="'C'">
                    <small  style="color: forestgreen" th:text="${char}"></small>
                </div>
                <div th:case="'G'">
                    <small  style="color: red" th:text="${char}"></small>
                </div>
            </div>

        </th:block>

        <br/>
        <br/>
        <!--Protein encoded by gene -->
        <h3>Protein:</h3>
        <a th:href="${'protein?id='+protein}" th:text="${protein}"></a>
    </div>

</body>
</html>

GeneController.java

package gui.spring.controller;

import db.sample.Gene;
import db.sample.Protein;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Optional;
import static main.Main.query;

/**
 * @author Miriam Mueller
 * @since 05-12-2018
 * @version 1.0
 * Class to handle view of one Gene. Gene name, description and sequence are shown. The encoded protein is linked.
 */
@Controller
public class GeneController {
    //All calls of localhost:8080/gene get to this controller
    @RequestMapping(value = "/gene", method = RequestMethod.GET)
    public String einGenAnzeigen(Model model, @RequestParam(value="id") String id) {

        model.addAttribute("geneSize",query.getGenes().size());
        model.addAttribute("proteinSize",query.getProteins().size());
        model.addAttribute("assaySize",query.getAssays().size());
        Optional<Gene> gene = query.getGeneByName(id);

        if(gene.isPresent()) {
            // if gene exists
            String description = gene.get().getDesc();
            String[] arraySeq = gene.get().getSequence().split("(?!^)");
            Protein protein = query.getGeneByName(id).get().getProtein();
            model.addAttribute("identifier", gene.get().getIdentifier()); //GenID
            model.addAttribute("sequence",arraySeq); //gene sequence
            model.addAttribute("description",description); //description
            model.addAttribute("protein",protein.getIdentifier()); //encoded protein
        }else{
            // error messages, if no gene with called id exists
            model.addAttribute("gene", "There is no Gene with this ID.");
            model.addAttribute("protein","There is no Gene with this ID.Therefore, no reference protein was found.");
            model.addAttribute("sequence","");
            model.addAttribute("description","");
        }

        // name of html-template
        return "gene";
    }
}

Спасибо за ваше время и усилия:)

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

вы можете использовать стиль float: left, чтобы заставить ваши блоки div выстраиваться в соответствии с вашими желаниями.

Я бы предложил вам использовать внешнюю таблицу стилей для хранения ваших стилей.Затем вы можете установить различные классы для ваших генов и стилизовать их таким образом.Это намного проще, чем пытаться управлять ими в HTML.И тогда вы можете избавиться от этого оператора th:switch.

Создайте файл main.css в resources/static/css/ со следующим содержанием (в качестве примера)

div.gene {
    border: 1px solid #999;
    float: left;
    height: 14px;
    width: 14px;
    text-align: center;
    font-size: 12px;
}

div.A {
    color: blue;
}

div.T {
    color: yellow;
}

div.C {
    color: forestgreen;
}

div.G {
    color: red;
}

и добавьте следующеевнутри тега <head> вашего html гена, чтобы он мог получить файл css

<link rel="stylesheet" href="/css/main.css" />

Измените ваш gene.html, добавив классы

replace

    <div th:switch="${char}">
        <div th:case="'A'">
            <small  style="color: blue" th:text="${char}"></small>
        </div>
        <div th:case="'T'">
            <small  style="color: yellow" th:text="${char}"></small>
        </div>
        <div th:case="'C'">
            <small  style="color: forestgreen" th:text="${char}"></small>
        </div>
        <div th:case="'G'">
            <small  style="color: red" th:text="${char}"></small>
        </div>
    </div>

с

    <div th:class="${'gene ' + char}" th:text="${char}"/>

Это добавит класс 'gene' и класс с символом гена (например, 'A') к div.Затем CSS имеет стили для гена, которые являются общими для всех, и стили для символа, которые являются специфическими (то есть цвет)

0 голосов
/ 09 декабря 2018

Происходит то, что элемент div является элементом block , что означает, что они будут складываться вертикально, а не горизонтально.Например, в качестве вашего хода последовательность:

    <th:block th:each="char:${sequence}">
        <!--Print the char. Possibility to color encode the bases utilizing switch/case
        <small th:text="${char}"></small> -->
        <div th:switch="${char}">
            <div th:case="'A'">
                <small  style="color: blue" th:text="${char}"></small>
            </div>
            <div th:case="'T'">
                <small  style="color: yellow" th:text="${char}"></small>
            </div>
            <div th:case="'C'">
                <small  style="color: forestgreen" th:text="${char}"></small>
            </div>
            <div th:case="'G'">
                <small  style="color: red" th:text="${char}"></small>
            </div>
        </div>

    </th:block>

каждый отдельный div будет отображаться в новой строке.Вы можете отобразить их встроенными, либо изменив display на этих div'ах на inline или inline-block

        <div th:case="'A'" style="display:inline-block;">
            <small  style="color: blue" th:text="${char}"></small>
        </div>
        <div th:case="'T'" style="display:inline-block;">
            <small  style="color: yellow" th:text="${char}"></small>
        </div>
        <div th:case="'C'" style="display:inline-block;">
            <small  style="color: forestgreen" th:text="${char}"></small>
        </div>
        <div th:case="'G'" style="display:inline-block;">
            <small  style="color: red" th:text="${char}"></small>
        </div>

, либо используя другой элемент, для которого по умолчанию отображается не block например span,Удаление div's также будет работать, поскольку small также является встроенным элементом.

...