diff --git a/datasette/templates/table.html b/datasette/templates/table.html
index 187f0143db..7246ff5d43 100644
--- a/datasette/templates/table.html
+++ b/datasette/templates/table.html
@@ -42,7 +42,7 @@
{{ metadata.get("title") or table }}{% if is_view %} (view){% endif %}{% if
{% if count or human_description_en %}
{% if count == count_limit + 1 %}>{{ "{:,}".format(count_limit) }} rows
- {% if allow_execute_sql and query.sql %} count all rows{% endif %}
+ {% if allow_execute_sql and query.sql %} count all{% endif %}
{% elif count or count == 0 %}{{ "{:,}".format(count) }} row{% if count == 1 %}{% else %}s{% endif %}{% endif %}
{% if human_description_en %}{{ human_description_en }}{% endif %}
@@ -180,7 +180,7 @@ Advanced export
document.addEventListener('DOMContentLoaded', function() {
const countLink = document.querySelector('a.count-sql');
if (countLink) {
- countLink.addEventListener('click', function(ev) {
+ countLink.addEventListener('click', async function(ev) {
ev.preventDefault();
// Replace countLink with span with same style attribute
const span = document.createElement('span');
@@ -189,14 +189,23 @@ Advanced export
countLink.replaceWith(span);
countLink.setAttribute('disabled', 'disabled');
let url = countLink.href.replace(/(\?|$)/, '.json$1');
- fetch(url)
- .then(response => response.json())
- .then(data => {
- const count = data['rows'][0]['count(*)'];
- const formattedCount = count.toLocaleString();
- span.closest('h3').textContent = formattedCount + ' rows';
- })
- .catch(error => countLink.textContent = 'error');
+ try {
+ const response = await fetch(url);
+ console.log({response});
+ const data = await response.json();
+ console.log({data});
+ if (!response.ok) {
+ console.log('throw error');
+ throw new Error(data.title || data.error);
+ }
+ const count = data['rows'][0]['count(*)'];
+ const formattedCount = count.toLocaleString();
+ span.closest('h3').textContent = formattedCount + ' rows';
+ } catch (error) {
+ console.log('Update', span, 'with error message', error);
+ span.textContent = error.message;
+ span.style.color = 'red';
+ }
});
}
});