Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
urgi-is
FAIDARE
Commits
a1a1b70c
Commit
a1a1b70c
authored
Aug 27, 2021
by
Jean-Baptiste Nizet
Committed by
Exbrayat Cédric
Sep 02, 2021
Browse files
feat: implement styling
parent
8bbe24fb
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
backend/src/main/resources/static/assets/images/logo.png
0 → 100644
View file @
a1a1b70c
35.4 KB
backend/src/main/resources/templates/fragments/institute.html
View file @
a1a1b70c
...
...
@@ -11,7 +11,7 @@ Its unique argument (institute) is an InstituteVO
<th:block
th:fragment=
"institute(institute)"
>
<div
class=
"text-center py-2"
th:if=
"${institute.logo}"
>
<img
th:src=
"${institute.logo}"
th:alt=
"${institute.instituteName}"
/>
<img
class=
"img-fluid"
th:src=
"${institute.logo}"
th:alt=
"${institute.instituteName}"
/>
</div>
<div
th:replace=
"fragments/row::text-row(label='Code', text=${institute.instituteCode})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Acronym', text=${institute.acronym})"
></div>
...
...
backend/src/main/resources/templates/fragments/map.html
View file @
a1a1b70c
...
...
@@ -10,7 +10,7 @@ to display
-->
<div
th:fragment=
"map"
id=
"map-container"
class=
"d-none"
>
<div
id=
"map"
class=
"border rounded"
></div>
<div
class=
"map-legend mt-1"
>
<div
class=
"map-legend mt-1
small
"
>
<img
th:src=
"@{/assets/images/marker-icon-red.png}"
id=
"red"
/>
<label
for=
"red"
class=
"me-2"
>
Origin site
</label>
<img
th:src=
"@{/assets/images/marker-icon-blue.png}"
id=
"blue"
/>
...
...
backend/src/main/resources/templates/fragments/row.html
View file @
a1a1b70c
...
...
@@ -19,7 +19,7 @@ into a block with the condition:
</th:block>
-->
<div
th:fragment=
"row(label, content)"
class=
"row
py-2
"
>
<div
th:fragment=
"row(label, content)"
class=
"row
f-row
"
>
<div
class=
"col-md-4 label pb-1 pb-md-0"
th:text=
"${label}"
></div>
<div
class=
"col"
>
<th:block
th:replace=
"${content}"
/>
...
...
@@ -40,7 +40,7 @@ into a block with the condition:
<div th:replace="fragments/row::text-row(label='Some label', text=${someTextExpression})"></div>
</th:block>
-->
<div
th:fragment=
"text-row(label, text)"
th:unless=
"${#strings.isEmpty(text)}"
class=
"row
py-2
"
>
<div
th:fragment=
"text-row(label, text)"
th:unless=
"${#strings.isEmpty(text)}"
class=
"row
f-row
"
>
<div
class=
"col-md-4 label pb-1 pb-md-0"
th:text=
"${label}"
></div>
<div
class=
"col"
th:text=
"${text}"
></div>
</div>
...
...
backend/src/main/resources/templates/fragments/source.html
View file @
a1a1b70c
...
...
@@ -16,7 +16,7 @@ The entityType argument is a string, which is used in the message
<th:block
th:if=
"${source != null}"
>
<div
th:replace=
"fragments/row::row(label='Source', content=~{::.source})"
>
<a
class=
"source"
target=
"_blank"
th:href=
"${source.url}"
>
<img
style=
"max-height: 60px;"
th:src=
"${source.image}"
th:alt=
"${source.name} + ' logo'"
/>
<img
class=
"img-fluid"
style=
"max-height: 60px;"
th:src=
"${source.image}"
th:alt=
"${source.name} + ' logo'"
/>
</a>
</div>
</th:block>
...
...
backend/src/main/resources/templates/fragments/xrefs.html
View file @
a1a1b70c
...
...
@@ -9,12 +9,11 @@ Reusable fragment displaying a cross references section, with its title.
The unique argument (crossReferences) is a List<XRefDocumentVO>
-->
<div
th:fragment=
"xrefs(crossReferences)"
th:if=
"${!#lists.isEmpty(crossReferences)}"
>
<div
class=
"f-card"
th:fragment=
"xrefs(crossReferences)"
th:if=
"${!#lists.isEmpty(crossReferences)}"
>
<h2>
Cross references
</h2>
<div
class=
"table-responsive scroll-big-table table-card-body"
>
<div
class=
"card"
>
<table
class=
"table table-sm table-striped"
>
<div
class=
"f-card-body"
>
<div
class=
"scroll-table-container scroll-table-container-big"
>
<table
class=
"table table-sm table-striped table-sticky table-responsive-sm"
>
<thead>
<tr>
<th
scope=
"col"
>
Name
</th>
...
...
@@ -28,13 +27,12 @@ The unique argument (crossReferences) is a List<XRefDocumentVO>
<td><a
th:href=
"${crossRef.url}"
target=
"_blank"
th:text=
"${crossRef.name}"
></a></td>
<td
th:text=
"${crossRef.databaseName}"
></td>
<td
th:text=
"${crossRef.entryType}"
></td>
<td
th:text=
"${#strings.abbreviate(crossRef.description, 120)}"
></td>
<td
style=
"min-width: 30rem;"
th:text=
"${#strings.abbreviate(crossRef.description, 120)}"
></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
...
...
backend/src/main/resources/templates/germplasm.html
View file @
a1a1b70c
This diff is collapsed.
Click to expand it.
backend/src/main/resources/templates/layout/main.html
View file @
a1a1b70c
...
...
@@ -12,18 +12,17 @@
</head>
<body>
<div
class=
"container"
>
<header>
Common header
</header>
<nav
class=
"navbar navbar-expand-lg navbar-light bg-light"
>
<div
class=
"container"
>
<span
class=
"navbar-brand py-0"
>
<img
th:src=
"@{/assets/images/logo.png}"
style=
"height: 40px"
/>
</span>
</div>
</nav>
<div
class=
"container mt-3"
>
<div
th:replace=
"${content}"
>
<p>
Layout content
</p>
</div>
<footer>
common footer
</footer>
</div>
<script
type=
"text/javascript"
th:src=
"@{/assets/script.js}"
></script>
<script
type=
"text/javascript"
th:replace=
"${script}"
></script>
...
...
backend/src/main/resources/templates/site.html
View file @
a1a1b70c
...
...
@@ -15,48 +15,55 @@
<div
th:replace=
"fragments/map::map"
></div>
<th:block
th:if=
"${model.site.uri != null && !model.site.uri.startsWith('urn:')}"
>
<div
th:replace=
"fragments/row::text-row(label='Permanent unique identifier', text=${model.site.uri})"
></div>
</th:block>
<div
class=
"f-card mt-4"
>
<h2>
Details
</h2>
<div
class=
"f-card-body"
>
<th:block
th:if=
"${model.site.uri != null && !model.site.uri.startsWith('urn:')}"
>
<div
th:replace=
"fragments/row::text-row(label='Permanent unique identifier', text=${model.site.uri})"
></div>
</th:block>
<div
th:replace=
"fragments/source::source(source=${model.source}, url=${model.site.url}, entityType='site')"
></div>
<div
th:replace=
"fragments/source::source(source=${model.source}, url=${model.site.url}, entityType='site')"
></div>
<div
th:replace=
"fragments/row::text-row(label='Abbreviation', text=${model.site.abbreviation})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Type', text=${model.site.locationType})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Status', text=${model.siteStatus})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Institution/Landowner', text=${model.site.instituteName})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Institution address', text=${model.site.instituteAddress})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Coordinates precision', text=${model.coordinatesPrecision})"
></div>
<th:block
th:if=
"${model.site.latitude}"
>
<div
th:replace=
"fragments/row::text-row(label='Latitude', text=${#coordinates.formatLatitude(model.site.latitude)})"
></div>
</th:block>
<th:block
th:if=
"${model.site.longitude}"
>
<div
th:replace=
"fragments/row::text-row(label='Longitude', text=${#coordinates.formatLongitude(model.site.longitude)})"
></div>
</th:block>
<div
th:replace=
"fragments/row::text-row(label='Geographical location', text=${model.geographicalLocation})"
></div>
<th:block
th:if=
"${model.site.countryName != null && model.geographicalLocation == null}"
>
<div
th:replace=
"fragments/row::text-row(label='Country name', text=${model.site.countryName})"
></div>
</th:block>
<div
th:replace=
"fragments/row::text-row(label='Abbreviation', text=${model.site.abbreviation})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Type', text=${model.site.locationType})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Status', text=${model.siteStatus})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Institution/Landowner', text=${model.site.instituteName})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Institution address', text=${model.site.instituteAddress})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Coordinates precision', text=${model.coordinatesPrecision})"
></div>
<th:block
th:if=
"${model.site.latitude}"
>
<div
th:replace=
"fragments/row::text-row(label='Latitude', text=${#coordinates.formatLatitude(model.site.latitude)})"
></div>
</th:block>
<th:block
th:if=
"${model.site.longitude}"
>
<div
th:replace=
"fragments/row::text-row(label='Longitude', text=${#coordinates.formatLongitude(model.site.longitude)})"
></div>
</th:block>
<div
th:replace=
"fragments/row::text-row(label='Geographical location', text=${model.geographicalLocation})"
></div>
<th:block
th:if=
"${model.site.countryName != null && model.geographicalLocation == null}"
>
<div
th:replace=
"fragments/row::text-row(label='Country name', text=${model.site.countryName})"
></div>
</th:block>
<th:block
th:if=
"${model.site.countryCode != null && model.geographicalLocation == null}"
>
<div
th:replace=
"fragments/row::text-row(label='Country code', text=${model.site.countryName})"
></div>
</th:block>
<th:block
th:if=
"${model.site.countryCode != null && model.geographicalLocation == null}"
>
<div
th:replace=
"fragments/row::text-row(label='Country code', text=${model.site.countryName})"
></div>
</th:block>
<div
th:replace=
"fragments/row::text-row(label='Altitude', text=${model.site.altitude})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Slope', text=${model.slope})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Exposure', text=${model.exposure})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Topography', text=${model.topography})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Environment type', text=${model.environmentType})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Distance to city', text=${model.distanceToCity})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Direction from city', text=${model.directionFromCity})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Comment', text=${model.comment})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Altitude', text=${model.site.altitude})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Slope', text=${model.slope})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Exposure', text=${model.exposure})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Topography', text=${model.topography})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Environment type', text=${model.environmentType})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Distance to city', text=${model.distanceToCity})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Direction from city', text=${model.directionFromCity})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Comment', text=${model.comment})"
></div>
</div>
</div>
<
th:block
th:unless=
"${#lists.isEmpty(model.additionalInfoProperties)}"
>
<
div
class=
"f-card"
th:unless=
"${#lists.isEmpty(model.additionalInfoProperties)}"
>
<h2>
Additional info
</h2>
<th:block
th:each=
"prop : ${model.additionalInfoProperties}"
>
<div
th:replace=
"fragments/row::text-row(label=${prop.key}, text=${prop.value})"
></div>
</th:block>
</th:block>
<div
class=
"f-card-body"
>
<th:block
th:each=
"prop : ${model.additionalInfoProperties}"
>
<div
th:replace=
"fragments/row::text-row(label=${prop.key}, text=${prop.value})"
></div>
</th:block>
</div>
</div>
<div
th:replace=
"fragments/xrefs::xrefs(crossReferences=${model.crossReferences})"
></div>
</main>
...
...
backend/src/main/resources/templates/study.html
View file @
a1a1b70c
...
...
@@ -15,51 +15,53 @@
<div
th:replace=
"fragments/map::map"
></div>
<h2>
Identification
</h2>
<div
th:replace=
"fragments/row::text-row(label='Name', text=${model.study.studyName})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Identifier', text=${model.study.studyDbId})"
></div>
<div
th:replace=
"fragments/source::source(source=${model.source}, url=${model.study.url}, entityType='study')"
></div>
<div
th:replace=
"fragments/row::text-row(label='Project name', text=${model.study.programName})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Description', text=${model.study.studyDescription})"
></div>
<th:block
th:if=
"${model.study.active != null}"
>
<div
th:replace=
"fragments/row::text-row(label='Active', text=${model.study.active ? 'Yes' : 'No'})"
></div>
</th:block>
<th:block
th:unless=
"${#lists.isEmpty(model.study.seasons)}"
>
<div
th:replace=
"fragments/row::text-row(label='Seasons', text=${#strings.listJoin(model.study.seasons, ',')})"
></div>
</th:block>
<th:block
th:if=
"${model.study.startDate != null && model.study.endDate != null}"
>
<div
th:replace=
"fragments/row::text-row(label='Date', text=${'From ' + #dates.format(model.study.startDate, 'yyyy-MM-dd') + ' to ' + #dates.format(model.study.endDate, 'yyyy-MM-dd') })"
></div>
</th:block>
<th:block
th:if=
"${model.study.startDate != null && model.study.endDate == null}"
>
<div
th:replace=
"fragments/row::text-row(label='Date', text=${'Started on ' + #dates.format(model.study.startDate, 'yyyy-MM-dd')})"
></div>
</th:block>
<th:block
th:if=
"${model.study.locationDbId}"
>
<div
th:replace=
"fragments/row::row(label='Location name', content=~{::#location})"
>
<a
id=
"location"
th:href=
"@{/sites/{siteId}(siteId=${model.study.locationDbId})}"
th:text=
"${model.study.locationName}"
></a>
<div
class=
"f-card mt-4"
>
<h2>
Identification
</h2>
<div
class=
"f-card-body"
>
<div
th:replace=
"fragments/row::text-row(label='Name', text=${model.study.studyName})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Identifier', text=${model.study.studyDbId})"
></div>
<div
th:replace=
"fragments/source::source(source=${model.source}, url=${model.study.url}, entityType='study')"
></div>
<div
th:replace=
"fragments/row::text-row(label='Project name', text=${model.study.programName})"
></div>
<div
th:replace=
"fragments/row::text-row(label='Description', text=${model.study.studyDescription})"
></div>
<th:block
th:if=
"${model.study.active != null}"
>
<div
th:replace=
"fragments/row::text-row(label='Active', text=${model.study.active ? 'Yes' : 'No'})"
></div>
</th:block>
<th:block
th:unless=
"${#lists.isEmpty(model.study.seasons)}"
>
<div
th:replace=
"fragments/row::text-row(label='Seasons', text=${#strings.listJoin(model.study.seasons, ',')})"
></div>
</th:block>
<th:block
th:if=
"${model.study.startDate != null && model.study.endDate != null}"
>
<div
th:replace=
"fragments/row::text-row(label='Date', text=${'From ' + #dates.format(model.study.startDate, 'yyyy-MM-dd') + ' to ' + #dates.format(model.study.endDate, 'yyyy-MM-dd') })"
></div>
</th:block>
<th:block
th:if=
"${model.study.startDate != null && model.study.endDate == null}"
>
<div
th:replace=
"fragments/row::text-row(label='Date', text=${'Started on ' + #dates.format(model.study.startDate, 'yyyy-MM-dd')})"
></div>
</th:block>
<th:block
th:if=
"${model.study.locationDbId}"
>
<div
th:replace=
"fragments/row::row(label='Location name', content=~{::#location})"
>
<a
id=
"location"
th:href=
"@{/sites/{siteId}(siteId=${model.study.locationDbId})}"
th:text=
"${model.study.locationName}"
></a>
</div>
</th:block>
<th:block
th:unless=
"${#lists.isEmpty(model.study.dataLinks)}"
>
<div
th:replace=
"fragments/row::row(label='Data files', content=~{::#data-files})"
>
<ul
id=
"data-files"
class=
"list-unstyled"
>
<li
th:each=
"dataLink : ${model.study.dataLinks}"
>
<a
target=
"_blank"
th:href=
"${dataLink.url}"
th:text=
"${dataLink.name}"
></a>
</li>
</ul>
</div>
</th:block>
</div>
</th:block>
<th:block
th:unless=
"${#lists.isEmpty(model.study.dataLinks)}"
>
<div
th:replace=
"fragments/row::row(label='Data files', content=~{::#data-files})"
>
<ul
id=
"data-files"
class=
"list-unstyled"
>
<li
th:each=
"dataLink : ${model.study.dataLinks}"
>
<a
target=
"_blank"
th:href=
"${dataLink.url}"
th:text=
"${dataLink.name}"
></a>
</li>
</ul>
</div>
</th:block>
</div>
<
th:block
th:unles=
"${#lists.isEmpty(model.germplasms)}"
>
<
div
class=
"f-card"
th:unles=
"${#lists.isEmpty(model.germplasms)}"
>
<h2>
Genotype
</h2>
<div
class=
"table-responsive scroll-table table-card-body"
>
<div
class=
"card"
>
<table
class=
"table table-sm table-striped"
>
<div
class=
"f-card-body"
>
<div
class=
"scroll-table-container scroll-table-container-big"
>
<table
class=
"table table-sm table-striped table-sticky table-responsive-sm"
>
<thead>
<tr>
<th
scope=
"col"
>
Accession number
</th>
...
...
@@ -79,13 +81,13 @@
</table>
</div>
</div>
</
th:block
>
</
div
>
<
th:block
th:unless=
"${#lists.isEmpty(model.variables)}"
>
<
div
class=
"f-card"
th:unless=
"${#lists.isEmpty(model.variables)}"
>
<h2>
Variables
</h2>
<div
class=
"
table-responsive scroll-table table
-card-body"
>
<div
class=
"
card
"
>
<table
class=
"table table-sm table-striped"
>
<div
class=
"
f
-card-body"
>
<div
class=
"
scroll-table-container
"
>
<table
class=
"table table-sm table-striped
table-sticky table-responsive-sm
"
>
<thead>
<tr>
<th
scope=
"col"
>
Variable ID
</th>
...
...
@@ -110,13 +112,13 @@
</table>
</div>
</div>
</
th:block
>
</
div
>
<
th:block
th:unless=
"${#lists.isEmpty(model.trials)}"
>
<
div
class=
"f-card"
th:unless=
"${#lists.isEmpty(model.trials)}"
>
<h2>
Data Set
</h2>
<div
class=
"
table-responsive scroll-big-table table
-card-body"
>
<div
class=
"
card
"
>
<table
class=
"table table-sm table-striped"
>
<div
class=
"
f
-card-body"
>
<div
class=
"
scroll-table-container scroll-table-container-big
"
>
<table
class=
"table table-sm table-striped
table-sticky table-responsive-sm
"
>
<thead>
<tr>
<th
scope=
"col"
>
Name
</th>
...
...
@@ -144,13 +146,13 @@
</table>
</div>
</div>
</
th:block
>
</
div
>
<
th:block
th:unless=
"${#lists.isEmpty(model.study.contacts)}"
>
<
div
class=
"f-card"
th:unless=
"${#lists.isEmpty(model.study.contacts)}"
>
<h2>
Contact
</h2>
<div
class=
"
table-responsive scroll-table table
-card-body"
>
<div
class=
"
card
"
>
<table
class=
"table table-sm table-striped"
>
<div
class=
"
f
-card-body"
>
<div
class=
"
scroll-table-container
"
>
<table
class=
"table table-sm table-striped
table-sticky table-responsive-sm
"
>
<thead>
<tr>
<th
scope=
"col"
>
Role
</th>
...
...
@@ -170,23 +172,23 @@
</table>
</div>
</div>
</
th:block
>
</
div
>
<
th:block
th:unless=
"${#lists.isEmpty(model.additionalInfoProperties)}"
>
<
div
class=
"f-card"
th:unless=
"${#lists.isEmpty(model.additionalInfoProperties)}"
>
<h2>
Additional information
</h2>
<div
class=
"
table-responsive scroll-table table
-card-body"
>
<div
class=
"
card
"
>
<table
class=
"table table-sm
table-striped
"
>
<div
class=
"
f
-card-body"
>
<div
class=
"
scroll-table-container
"
>
<table
class=
"table table-sm"
>
<tbody>
<tr
th:each=
"row : ${model.additionalInfoProperties}"
>
<t
d
style=
"width:
50%;
"
th:text=
"${row.key}"
></t
d
>
<t
h
class=
"label"
style=
"width:
33.33%
"
th:text=
"${row.key}"
scope=
"row"
></t
h
>
<td
th:text=
"${row.value}"
></td>
</tr>
</tbody>
</table>
</div>
</div>
</
th:block
>
</
div
>
<div
th:replace=
"fragments/xrefs::xrefs(crossReferences=${model.crossReferences})"
></div>
</main>
...
...
web/src/style/style.scss
View file @
a1a1b70c
$headings-color
:
#0f6191
;
$border-color
:
#0f6e9f
;
$link-color
:
#0f6fa1
;
$link-decoration
:
none
;
$link-hover-decoration
:
underline
;
$enable-shadows
:
true
;
$table-border-color
:
#dee2e6
;
$table-group-separator-color
:
$table-border-color
;
@import
'custom-bootstrap'
;
@import
'~leaflet/dist/leaflet.css'
;
@import
'~leaflet.markercluster/dist/MarkerCluster.css'
;
@import
'~leaflet.markercluster/dist/MarkerCluster.Default.css'
;
.label
{
font-weight
:
500
;
a
[
role
=
button
]
{
color
:
$link-color
!
important
;
}
.f-row
{
border-top
:
1px
solid
$gray-300
;
padding
:
0
.5rem
0
;
.label
{
font-weight
:
700
;
}
}
.f-card
{
border
:
1px
solid
$border-color
;
border-radius
:
0
.25rem
;
margin
:
0
.5rem
0
;
h2
{
font-size
:
$h4-font-size
;
padding
:
0
.5rem
1rem
;
background-image
:
repeating-linear-gradient
(
#0f96cd
,
#0f6191
,
#0f76a5
);
color
:
$white
;
}
.f-card-body
{
padding
:
0
.25rem
1rem
;
.f-row
:first-of-type
{
border-top
:
0
;
}
}
}
.popover
{
max-width
:
min
(
80vw
,
600px
);
max-width
:
min
(
80vw
,
500px
);
}
.popover-header
{
font-weight
:
700
;
}
#map
{
...
...
@@ -19,3 +58,34 @@
height
:
1
.5rem
;
}
.content-overflow
{
max-height
:
200px
;
overflow-y
:
auto
;
overflow-x
:
hidden
;
&
.content-overflow-big
{
max-height
:
275px
;
}
}
.scroll-table-container
{
max-height
:
200px
;
overflow-y
:
auto
;
padding-top
:
0
;
&
.scroll-table-container-big
{
max-height
:
500px
;
}
}
.table-sticky
{
width
:
100%
;
thead
th
{
position
:
sticky
;
position
:
-
webkit-sticky
;
top
:
0
;
background-color
:
white
;
border-top-width
:
0
;
th
{
padding-top
:
0
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment