html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,issue,performed_via_github_app
https://github.com/simonw/datasette/issues/942#issuecomment-898050457,https://api.github.com/repos/simonw/datasette/issues/942,898050457,IC_kwDOBm6k_c41hymZ,9599,2021-08-12T23:59:53Z,2021-08-12T23:59:53Z,OWNER,"Documentation: https://docs.datasette.io/en/latest/metadata.html#column-descriptions
Live demo: https://latest.datasette.io/fixtures/roadside_attractions
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",681334912,
https://github.com/simonw/datasette/issues/942#issuecomment-898037650,https://api.github.com/repos/simonw/datasette/issues/942,898037650,IC_kwDOBm6k_c41hveS,9599,2021-08-12T23:23:54Z,2021-08-12T23:23:54Z,OWNER,I like this enough that I'm going to ship it as an alpha and try it out on a couple of live projects.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",681334912,
https://github.com/simonw/datasette/issues/942#issuecomment-898037456,https://api.github.com/repos/simonw/datasette/issues/942,898037456,IC_kwDOBm6k_c41hvbQ,9599,2021-08-12T23:23:34Z,2021-08-12T23:23:34Z,OWNER,"Prototype with a `
`:
```diff
diff --git a/datasette/static/app.css b/datasette/static/app.css
index c6be1e9..bf068fd 100644
--- a/datasette/static/app.css
+++ b/datasette/static/app.css
@@ -836,6 +841,16 @@ svg.dropdown-menu-icon {
background-repeat: no-repeat;
}
+dl.column-descriptions dt {
+ font-weight: bold;
+}
+dl.column-descriptions dd {
+ padding-left: 1.5em;
+ white-space: pre-wrap;
+ line-height: 1.1em;
+ color: #666;
+}
+
.anim-scale-in {
animation-name: scale-in;
animation-duration: 0.15s;
diff --git a/datasette/templates/table.html b/datasette/templates/table.html
index 211352b..466e8a4 100644
--- a/datasette/templates/table.html
+++ b/datasette/templates/table.html
@@ -51,6 +51,14 @@
{% block description_source_license %}{% include ""_description_source_license.html"" %}{% endblock %}
+{% if metadata.columns %}
+
+ {% for column_name, column_description in metadata.columns.items() %}
+ {{ column_name }} {{ column_description }}
+ {% endfor %}
+
+{% endif %}
+
{% if filtered_table_rows_count or human_description_en %}
{% if filtered_table_rows_count or filtered_table_rows_count == 0 %}{{ ""{:,}"".format(filtered_table_rows_count) }} row{% if filtered_table_rows_count == 1 %}{% else %}s{% endif %}{% endif %}
{% if human_description_en %}{{ human_description_en }}{% endif %}
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",681334912,
https://github.com/simonw/datasette/issues/942#issuecomment-898022235,https://api.github.com/repos/simonw/datasette/issues/942,898022235,IC_kwDOBm6k_c41hrtb,9599,2021-08-12T22:52:23Z,2021-08-12T22:52:23Z,OWNER,I like this. Need to solve for mobile though where the cog menu isn't visible - I think I'll do that with a definition list at the top of the page.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",681334912,
https://github.com/simonw/datasette/issues/942#issuecomment-898021895,https://api.github.com/repos/simonw/datasette/issues/942,898021895,IC_kwDOBm6k_c41hroH,9599,2021-08-12T22:51:36Z,2021-08-12T22:51:36Z,OWNER,"Prototype:
```diff
diff --git a/datasette/static/app.css b/datasette/static/app.css
index c6be1e9..5ca64cb 100644
--- a/datasette/static/app.css
+++ b/datasette/static/app.css
@@ -784,9 +784,14 @@ svg.dropdown-menu-icon {
font-size: 0.7em;
color: #666;
margin: 0;
- padding: 0;
padding: 4px 8px 4px 8px;
}
+.dropdown-menu .dropdown-column-description {
+ margin: 0;
+ color: #666;
+ padding: 4px 8px 4px 8px;
+ max-width: 20em;
+}
.dropdown-menu li {
border-bottom: 1px solid #ccc;
}
diff --git a/datasette/static/table.js b/datasette/static/table.js
index 991346d..a903112 100644
--- a/datasette/static/table.js
+++ b/datasette/static/table.js
@@ -9,6 +9,7 @@ var DROPDOWN_HTML = ``;
var DROPDOWN_ICON_SVG = `
@@ -166,6 +167,14 @@ var DROPDOWN_ICON_SVG = `
{% for column in display_columns %}
-
+
{% if not column.sortable %}
{{ column.name }}
{% else %}
diff --git a/datasette/views/table.py b/datasette/views/table.py
index 456d806..486a613 100644
--- a/datasette/views/table.py
+++ b/datasette/views/table.py
@@ -125,6 +125,7 @@ class RowTableShared(DataView):
""""""Returns columns, rows for specified table - including fancy foreign key treatment""""""
db = self.ds.databases[database]
table_metadata = self.ds.table_metadata(database, table)
+ column_descriptions = table_metadata.get(""columns"") or {}
column_details = {col.name: col for col in await db.table_column_details(table)}
sortable_columns = await self.sortable_columns_for_table(database, table, True)
pks = await db.primary_keys(table)
@@ -147,6 +148,7 @@ class RowTableShared(DataView):
""is_pk"": r[0] in pks_for_display,
""type"": type_,
""notnull"": notnull,
+ ""description"": column_descriptions.get(r[0]),
}
)
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",681334912,
https://github.com/simonw/datasette/issues/942#issuecomment-897996296,https://api.github.com/repos/simonw/datasette/issues/942,897996296,IC_kwDOBm6k_c41hlYI,9599,2021-08-12T22:01:36Z,2021-08-12T22:01:36Z,OWNER,"I'm going with `""columns"": {""name-of-column"": ""description-of-column""}`.
If I decide to make `""col""` and `""nocol""` available in metadata I'll use those as the keys in the metadata, for consistency with the existing query string parameters.
I'm OK with having both `""columns"": ...` and `""col"": ...` keys in the metadata, even though they could be a tiny bit confusing without the documentation.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",681334912,