diff --git a/VIPSWeb/static/css/vipsweb.css b/VIPSWeb/static/css/vipsweb.css
index b2d983cf2fd697b06d1343b3730bf31b8b80b1c2..8a1a3750a7cb9af00f96063917a99093d2147858 100755
--- a/VIPSWeb/static/css/vipsweb.css
+++ b/VIPSWeb/static/css/vipsweb.css
@@ -432,6 +432,17 @@ span.inverseSign {
 	 font-size: 80%;
 }
 
+span.timeseries-label {
+	display: inline-block;
+	background-color: #008136;
+	font-family: monospace;
+	border-radius: 5px;
+	color: #FFFFFF;
+	padding: 3px;
+	text-decoration: none !important;
+	font-size: 80%;
+}
+
 div.second {
 	 /*font-family: "Roboto", Arial, Helvetica, sans-serif;*/
 	 width: 320px;
@@ -782,6 +793,19 @@ td.dateCell {
 	background-color: white;
 }
 
+#observationTimeSeries .label {
+	color: darkgrey;
+	font-size: 1.1em;
+	padding: 0;
+	font-weight: lighter;
+}
+
+#observationTimeSeries .description {
+	padding: 3px;
+	margin-top: 3px;
+	margin-bottom: 15px;
+	font-style: italic;
+}
 
 
 table.messageTable tr, table.messageTable td
diff --git a/observations/locale/bg/LC_MESSAGES/django.po b/observations/locale/bg/LC_MESSAGES/django.po
index bd6ddb647fe3654629595ea1304c70aa0e63630a..99ca44a12030783c36abbd263c5fc66a84b23e78 100644
--- a/observations/locale/bg/LC_MESSAGES/django.po
+++ b/observations/locale/bg/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:04+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -54,16 +54,16 @@ msgstr ""
 msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:91
+#: templates/observations/detail.html:97
 msgid "Observation was not quantified"
 msgstr ""
 
-#: templates/observations/detail.html:95
+#: templates/observations/detail.html:101
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:124
-#: templates/observations/timeseries.html:146
+#: templates/observations/detail.html:130
+#: templates/observations/timeseries.html:156
 msgid "Map view not available"
 msgstr ""
 
@@ -122,3 +122,19 @@ msgstr ""
 #: templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
+
+#: templates/observations/timeseries.html:34
+msgid "Title"
+msgstr ""
+
+#: templates/observations/timeseries.html:36
+msgid "Description"
+msgstr ""
+
+#: templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/bg/LC_MESSAGES/djangojs.po b/observations/locale/bg/LC_MESSAGES/djangojs.po
index 3c2e3db79e57f984398d92f78720e98ee5816315..89037f2a98183fde92c6b04508a166455dc4f57a 100644
--- a/observations/locale/bg/LC_MESSAGES/djangojs.po
+++ b/observations/locale/bg/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:05+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: static/observations/js/observationList.js:185
+#: static/observations/js/observationList.js:187
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:203
+#: static/observations/js/observationList.js:205
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:368
+#: static/observations/js/observationList.js:370
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:638
+#: static/observations/js/observationList.js:640
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:641
+#: static/observations/js/observationList.js:643
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:643
+#: static/observations/js/observationList.js:645
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/bs/LC_MESSAGES/django.po b/observations/locale/bs/LC_MESSAGES/django.po
index eb67e9cd3f73037ab6df6b7c82c1642f9c004ec9..861d1f4c149c0b67a2f05f287c22b98553ce0432 100644
--- a/observations/locale/bs/LC_MESSAGES/django.po
+++ b/observations/locale/bs/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:04+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -55,16 +55,16 @@ msgstr ""
 msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:91
+#: templates/observations/detail.html:97
 msgid "Observation was not quantified"
 msgstr ""
 
-#: templates/observations/detail.html:95
+#: templates/observations/detail.html:101
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:124
-#: templates/observations/timeseries.html:146
+#: templates/observations/detail.html:130
+#: templates/observations/timeseries.html:156
 msgid "Map view not available"
 msgstr ""
 
@@ -123,3 +123,19 @@ msgstr ""
 #: templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
+
+#: templates/observations/timeseries.html:34
+msgid "Title"
+msgstr ""
+
+#: templates/observations/timeseries.html:36
+msgid "Description"
+msgstr ""
+
+#: templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/bs/LC_MESSAGES/djangojs.po b/observations/locale/bs/LC_MESSAGES/djangojs.po
index 6829abeeab9531e3093ff79fa09ab0248c2abc3e..1e5b96e52cc43404405f9ba950cfc6beadaa0111 100644
--- a/observations/locale/bs/LC_MESSAGES/djangojs.po
+++ b/observations/locale/bs/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:05+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,26 +19,26 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: static/observations/js/observationList.js:185
+#: static/observations/js/observationList.js:187
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:203
+#: static/observations/js/observationList.js:205
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:368
+#: static/observations/js/observationList.js:370
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:638
+#: static/observations/js/observationList.js:640
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:641
+#: static/observations/js/observationList.js:643
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:643
+#: static/observations/js/observationList.js:645
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/de/LC_MESSAGES/django.po b/observations/locale/de/LC_MESSAGES/django.po
index bd6ddb647fe3654629595ea1304c70aa0e63630a..99ca44a12030783c36abbd263c5fc66a84b23e78 100755
--- a/observations/locale/de/LC_MESSAGES/django.po
+++ b/observations/locale/de/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:04+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -54,16 +54,16 @@ msgstr ""
 msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:91
+#: templates/observations/detail.html:97
 msgid "Observation was not quantified"
 msgstr ""
 
-#: templates/observations/detail.html:95
+#: templates/observations/detail.html:101
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:124
-#: templates/observations/timeseries.html:146
+#: templates/observations/detail.html:130
+#: templates/observations/timeseries.html:156
 msgid "Map view not available"
 msgstr ""
 
@@ -122,3 +122,19 @@ msgstr ""
 #: templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
+
+#: templates/observations/timeseries.html:34
+msgid "Title"
+msgstr ""
+
+#: templates/observations/timeseries.html:36
+msgid "Description"
+msgstr ""
+
+#: templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/de/LC_MESSAGES/djangojs.po b/observations/locale/de/LC_MESSAGES/djangojs.po
index 3c2e3db79e57f984398d92f78720e98ee5816315..89037f2a98183fde92c6b04508a166455dc4f57a 100644
--- a/observations/locale/de/LC_MESSAGES/djangojs.po
+++ b/observations/locale/de/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:05+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: static/observations/js/observationList.js:185
+#: static/observations/js/observationList.js:187
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:203
+#: static/observations/js/observationList.js:205
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:368
+#: static/observations/js/observationList.js:370
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:638
+#: static/observations/js/observationList.js:640
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:641
+#: static/observations/js/observationList.js:643
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:643
+#: static/observations/js/observationList.js:645
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/fi/LC_MESSAGES/django.po b/observations/locale/fi/LC_MESSAGES/django.po
index bd6ddb647fe3654629595ea1304c70aa0e63630a..99ca44a12030783c36abbd263c5fc66a84b23e78 100644
--- a/observations/locale/fi/LC_MESSAGES/django.po
+++ b/observations/locale/fi/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:04+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -54,16 +54,16 @@ msgstr ""
 msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:91
+#: templates/observations/detail.html:97
 msgid "Observation was not quantified"
 msgstr ""
 
-#: templates/observations/detail.html:95
+#: templates/observations/detail.html:101
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:124
-#: templates/observations/timeseries.html:146
+#: templates/observations/detail.html:130
+#: templates/observations/timeseries.html:156
 msgid "Map view not available"
 msgstr ""
 
@@ -122,3 +122,19 @@ msgstr ""
 #: templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
+
+#: templates/observations/timeseries.html:34
+msgid "Title"
+msgstr ""
+
+#: templates/observations/timeseries.html:36
+msgid "Description"
+msgstr ""
+
+#: templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/fi/LC_MESSAGES/djangojs.po b/observations/locale/fi/LC_MESSAGES/djangojs.po
index 3c2e3db79e57f984398d92f78720e98ee5816315..89037f2a98183fde92c6b04508a166455dc4f57a 100644
--- a/observations/locale/fi/LC_MESSAGES/djangojs.po
+++ b/observations/locale/fi/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:05+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: static/observations/js/observationList.js:185
+#: static/observations/js/observationList.js:187
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:203
+#: static/observations/js/observationList.js:205
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:368
+#: static/observations/js/observationList.js:370
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:638
+#: static/observations/js/observationList.js:640
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:641
+#: static/observations/js/observationList.js:643
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:643
+#: static/observations/js/observationList.js:645
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/nb/LC_MESSAGES/django.mo b/observations/locale/nb/LC_MESSAGES/django.mo
index 9fc6cf3260d71eb6ad11ff6a79cb07acf3bb3107..c85bd2f6014c28a4e67c3addb43da994d7dcceb4 100755
Binary files a/observations/locale/nb/LC_MESSAGES/django.mo and b/observations/locale/nb/LC_MESSAGES/django.mo differ
diff --git a/observations/locale/nb/LC_MESSAGES/django.po b/observations/locale/nb/LC_MESSAGES/django.po
index 33c379f0611ec062e67f79985e53fb9d62c77cec..241e5a0d454628444c69d940eb86f008abade9b5 100755
--- a/observations/locale/nb/LC_MESSAGES/django.po
+++ b/observations/locale/nb/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:04+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: 2024-06-06 13:42+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -55,16 +55,16 @@ msgstr "Observasjonsdato"
 msgid "Observation data"
 msgstr "Observasjonsdata"
 
-#: templates/observations/detail.html:91
+#: templates/observations/detail.html:97
 msgid "Observation was not quantified"
 msgstr "Observasjonen ble ikke kvantifisert"
 
-#: templates/observations/detail.html:95
+#: templates/observations/detail.html:101
 msgid "Illustrations"
 msgstr "Illustrasjoner"
 
-#: templates/observations/detail.html:124
-#: templates/observations/timeseries.html:146
+#: templates/observations/detail.html:130
+#: templates/observations/timeseries.html:156
 msgid "Map view not available"
 msgstr "Kartvisning ikke tilgjengelig"
 
@@ -124,5 +124,21 @@ msgstr "Se detaljer"
 msgid "Time series"
 msgstr "Tidsserie"
 
+#: templates/observations/timeseries.html:34
+msgid "Title"
+msgstr "Tittel"
+
+#: templates/observations/timeseries.html:36
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: templates/observations/timeseries.html:38
+msgid "Location"
+msgstr "Sted"
+
+#: templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr "Antall observasjoner"
+
 #~ msgid "Observer"
 #~ msgstr "Observatør"
diff --git a/observations/locale/nb/LC_MESSAGES/djangojs.po b/observations/locale/nb/LC_MESSAGES/djangojs.po
index 973b8e1e70440cdcf872c139f807ae59517eab6e..1960c5cd9e7c535e9c5ef8c7aff24b6d971af1e1 100644
--- a/observations/locale/nb/LC_MESSAGES/djangojs.po
+++ b/observations/locale/nb/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:05+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: static/observations/js/observationList.js:185
+#: static/observations/js/observationList.js:187
 msgid "Observation(s) found at location"
 msgstr "Observasjon(er) funnet på lokalitet"
 
-#: static/observations/js/observationList.js:203
+#: static/observations/js/observationList.js:205
 msgid "in"
 msgstr "i"
 
-#: static/observations/js/observationList.js:368
+#: static/observations/js/observationList.js:370
 msgid "Details"
 msgstr "Detaljer"
 
-#: static/observations/js/observationList.js:638
+#: static/observations/js/observationList.js:640
 msgid "Days since observation"
 msgstr "Dager siden observasjon"
 
-#: static/observations/js/observationList.js:641
+#: static/observations/js/observationList.js:643
 msgid "Days"
 msgstr "Dager"
 
-#: static/observations/js/observationList.js:643
+#: static/observations/js/observationList.js:645
 msgid "Older"
 msgstr "Eldre"
diff --git a/observations/locale/vi/LC_MESSAGES/django.po b/observations/locale/vi/LC_MESSAGES/django.po
index de9d9ca18b7130f969afac08e023f8acbab7ac23..276a0ae2e1b135125e4268318bef68bf12c7cdc8 100644
--- a/observations/locale/vi/LC_MESSAGES/django.po
+++ b/observations/locale/vi/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:04+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -54,16 +54,16 @@ msgstr ""
 msgid "Observation data"
 msgstr ""
 
-#: templates/observations/detail.html:91
+#: templates/observations/detail.html:97
 msgid "Observation was not quantified"
 msgstr ""
 
-#: templates/observations/detail.html:95
+#: templates/observations/detail.html:101
 msgid "Illustrations"
 msgstr ""
 
-#: templates/observations/detail.html:124
-#: templates/observations/timeseries.html:146
+#: templates/observations/detail.html:130
+#: templates/observations/timeseries.html:156
 msgid "Map view not available"
 msgstr ""
 
@@ -122,3 +122,19 @@ msgstr ""
 #: templates/observations/timeseries.html:28
 msgid "Time series"
 msgstr ""
+
+#: templates/observations/timeseries.html:34
+msgid "Title"
+msgstr ""
+
+#: templates/observations/timeseries.html:36
+msgid "Description"
+msgstr ""
+
+#: templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: templates/observations/timeseries.html:40
+msgid "Number of observations"
+msgstr ""
diff --git a/observations/locale/vi/LC_MESSAGES/djangojs.po b/observations/locale/vi/LC_MESSAGES/djangojs.po
index 2a64a40ef806ee11401abfd15cd46664162a264c..d1ebf6019d24291d482a5f6aad20b666a488975e 100644
--- a/observations/locale/vi/LC_MESSAGES/djangojs.po
+++ b/observations/locale/vi/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:05+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: static/observations/js/observationList.js:185
+#: static/observations/js/observationList.js:187
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:203
+#: static/observations/js/observationList.js:205
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:368
+#: static/observations/js/observationList.js:370
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:638
+#: static/observations/js/observationList.js:640
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:641
+#: static/observations/js/observationList.js:643
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:643
+#: static/observations/js/observationList.js:645
 msgid "Older"
 msgstr ""
diff --git a/observations/locale/zh_Hans/LC_MESSAGES/django.po b/observations/locale/zh_Hans/LC_MESSAGES/django.po
index 8b41e939b5314377cc801ad242480ce83fbbb739..e1347943641bdb16b2ba875b74da3b3eadbbc065 100755
--- a/observations/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/observations/locale/zh_Hans/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:04+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: 2016-10-27 11:26+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -55,18 +55,18 @@ msgstr "观测时间"
 msgid "Observation data"
 msgstr "观测数据"
 
-#: templates/observations/detail.html:91
+#: templates/observations/detail.html:97
 msgid "Observation was not quantified"
 msgstr "观测没有定量化"
 
-#: templates/observations/detail.html:95
+#: templates/observations/detail.html:101
 #, fuzzy
 #| msgid "Observations"
 msgid "Illustrations"
 msgstr "观测"
 
-#: templates/observations/detail.html:124
-#: templates/observations/timeseries.html:146
+#: templates/observations/detail.html:130
+#: templates/observations/timeseries.html:156
 msgid "Map view not available"
 msgstr ""
 
@@ -128,5 +128,23 @@ msgstr "看细节"
 msgid "Time series"
 msgstr ""
 
+#: templates/observations/timeseries.html:34
+msgid "Title"
+msgstr ""
+
+#: templates/observations/timeseries.html:36
+msgid "Description"
+msgstr ""
+
+#: templates/observations/timeseries.html:38
+msgid "Location"
+msgstr ""
+
+#: templates/observations/timeseries.html:40
+#, fuzzy
+#| msgid "Date of observation"
+msgid "Number of observations"
+msgstr "观测时间"
+
 #~ msgid "Observer"
 #~ msgstr "观测者"
diff --git a/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po b/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po
index 2a64a40ef806ee11401abfd15cd46664162a264c..d1ebf6019d24291d482a5f6aad20b666a488975e 100644
--- a/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po
+++ b/observations/locale/zh_Hans/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-18 15:05+0200\n"
+"POT-Creation-Date: 2024-06-21 14:19+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,26 +18,26 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: static/observations/js/observationList.js:185
+#: static/observations/js/observationList.js:187
 msgid "Observation(s) found at location"
 msgstr ""
 
-#: static/observations/js/observationList.js:203
+#: static/observations/js/observationList.js:205
 msgid "in"
 msgstr ""
 
-#: static/observations/js/observationList.js:368
+#: static/observations/js/observationList.js:370
 msgid "Details"
 msgstr ""
 
-#: static/observations/js/observationList.js:638
+#: static/observations/js/observationList.js:640
 msgid "Days since observation"
 msgstr ""
 
-#: static/observations/js/observationList.js:641
+#: static/observations/js/observationList.js:643
 msgid "Days"
 msgstr ""
 
-#: static/observations/js/observationList.js:643
+#: static/observations/js/observationList.js:645
 msgid "Older"
 msgstr ""
diff --git a/observations/static/observations/js/observationList.js b/observations/static/observations/js/observationList.js
index 635bb919b38b7d06606e6e873cd422c8d9eb59c5..a8bf87ae61c3029ac20ee9c7b0f4da5db9e773bd 100644
--- a/observations/static/observations/js/observationList.js
+++ b/observations/static/observations/js/observationList.js
@@ -351,19 +351,19 @@ var renderObservationTable = function(data)
         tbodyHTML.push("<td>" + obs.cropOrganismName + "</td>");
         tbodyHTML.push("<td>" + obs.observationHeading + "</td>");
 
-        if (obs.observationTimeSeriesId) {
+        if (obs.observationTimeSeriesLabel) {
           tbodyHTML.push(
-              "<td><a href='/observations/timeseries/" + obs.observationTimeSeriesId + "' target='new'><i class='fa fa-list'/></a></td>"
+              "<td><a href='/observations/timeseries/" + obs.observationTimeSeriesId + "' target='new'><span class='timeseries-label'/> " + obs.observationTimeSeriesLabel + "</a></td>"
           );
         } else {
           tbodyHTML.push("<td></td>");
         }
 
         if(Object.keys(measuredVal).length != 0){
-            tbodyHTML.push("<td><a tabindex='0' class='btn btn-lg' role='button' data-toggle='popover' data-placement='left' data-trigger='focus' data-html='true' data-content='" + printVal.join("<br/>").replace("'","&apos;") + "' ><i class='fa fa-balance-scale' aria-hidden='true' </i></a></td>")
+            tbodyHTML.push("<td><a tabindex='0' role='button' data-toggle='popover' data-placement='left' data-trigger='focus' data-html='true' data-content='" + printVal.join("<br/>").replace("'","&apos;") + "' ><span class='fa fa-balance-scale' aria-hidden='true'/></a></td>")
         } else{
-                tbodyHTML.push("<td></td>")
-            }
+            tbodyHTML.push("<td></td>")
+        }
         
         tbodyHTML.push("<td><a href='/observations/" + obs.observationId + "' target='new'>" + gettext("Details") + "</a></td>");
         tbodyHTML.push("</tr>");
diff --git a/observations/templates/observations/timeseries.html b/observations/templates/observations/timeseries.html
index 33a21db712e7a5a284bc056ac3c6cc1d69d7860e..a7a591a2444f480d851417bd859379d25dfb845e 100644
--- a/observations/templates/observations/timeseries.html
+++ b/observations/templates/observations/timeseries.html
@@ -22,17 +22,20 @@
 {% load i18n %}
 {% block title%}{% trans "Time series" %}{%endblock%}
 {% block content %}
-    <div class="singleBlockContainer">
+    <div id="observationTimeSeries" class="singleBlockContainer">
         <div class="row">
             <div class="col-md-6">
-                <h1>{% trans "Time series" %}</h1>
-                <p><a href="/observations" class="btn btn-default back" role="button">{% trans "View all observations" %}</a></p>
-                <h4>{% trans "Organism" %}</h4>
-                <p id="organismName"></p>
-                <h4>{% trans "Crop" %}</h4>
-                <p id="cropOrganismName"></p>
-                <h2 id="timeSeriesName"></h2>
-                <p id="timeSeriesDescription"></p>
+                <p style=""><a href="/observations" class="btn btn-default back" role="button">{% trans "View all observations" %}</a></p>
+                <h1>{% trans "Time series" %} <span id="timeSeriesName"></span></h1>
+                <div class="description" id="timeSeriesDescription"></div>
+                <p class="label">{% trans "Organism" %}</p>
+                <p class="value" id="organismName"></p>
+                <p class="label">{% trans "Crop" %}</p>
+                <p class="value" id="cropOrganismName"></p>
+                <p class="label">{% trans "Location" %}</p>
+                <p class="value" id="timeSeriesLocation"></p>
+                <p class="label">{% trans "Number of observations" %}</p>
+                <p class="value" id="observationCount"></p>
             </div>
             <div class="col-md-6">
                 <div id="observationViewMap" class="map" style="height: 400px;"></div>
@@ -60,16 +63,15 @@
         $(document).ready(function() {
             var uuidParam = settings.userUuid != null ? "?userUUID=" + settings.userUuid : "";
             $.getJSON( "/vipslogicproxy/rest/observationtimeseries/{{observation_time_series_id}}/" + uuidParam , function( observationTimeSeries ) {
-                //console.log(observation);
                 document.getElementById("organismName").innerHTML = getLocalizedOrganismName(observationTimeSeries.organism) + " <i>(" + observationTimeSeries.organism.latinName + ")</i>";
                 document.getElementById("cropOrganismName").innerHTML = getLocalizedOrganismName(observationTimeSeries.cropOrganism) + " <i>(" + observationTimeSeries.cropOrganism.latinName + ")</i>";
                 document.getElementById("timeSeriesName").innerHTML = observationTimeSeries.name;
                 document.getElementById("timeSeriesDescription").innerHTML = observationTimeSeries.description;
-
-                console.info("observationTimeSeries", observationTimeSeries);
+                document.getElementById("timeSeriesLocation").innerHTML = observationTimeSeries.locationPointOfInterest.name;
 
                 let observations = [];
                 $.getJSON( "/vipslogicproxy/rest/observation/list/filter/{{ organization_id }}?observationTimeSeriesId={{ observation_time_series_id }}", function( observations ) {
+                    document.getElementById("observationCount").innerHTML = observations.length;
                     initTable(observations);
                 });
 
@@ -106,7 +108,6 @@
             Object.keys(dataSchema['properties']).forEach(function(key) {
                 dataVars[key] = dataSchema['properties'][key]['title']
             });
-            console.info("dataSchema", dataSchema);
 
             const table = document.createElement("table");
             table.className = "table table-striped"
@@ -116,7 +117,9 @@
             const headers = Object.keys(observations[0]);
 
             const dateCell = headerRow.insertCell();
-            dateCell.outerHTML = "<th>" + gettext("Observasjonsdato") + "</th>";
+            dateCell.outerHTML = "<th>" + gettext("Date") + "</th>";
+            const titleCell = headerRow.insertCell();
+            titleCell.outerHTML = "<th>" + gettext("Title") + "</th>";
 
             Object.keys(dataVars).forEach((key, index) => {
                 const dataCell = headerRow.insertCell();
@@ -128,6 +131,8 @@
                 const row = tbody.insertRow(rowIndex);
                 const dateCell = row.insertCell();
                 dateCell.outerHTML = "<td><a href='/observations/" +observation.observationId + "'>" + getStandardFormattedDate(observation.timeOfObservation) + "</a></td>";
+                const titleCell = row.insertCell();
+                titleCell.outerHTML = "<td>" + observation.observationHeading + "</td>";
 
                 Object.keys(dataVars).forEach((key, index) => {
                     const dataCell = row.insertCell();