From f7d55f70512d69ced372b7e345fc510aabb598a8 Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Mon, 15 Jul 2024 16:02:42 +0100 Subject: [PATCH 1/9] Add related name for copyeditor files BirkbeckCTP/typesteting#166 --- src/copyediting/models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/copyediting/models.py b/src/copyediting/models.py index e212629195..6333bbe0af 100644 --- a/src/copyediting/models.py +++ b/src/copyediting/models.py @@ -51,7 +51,11 @@ class CopyeditAssignment(models.Model): date_decided = models.DateTimeField(null=True, blank=True) files_for_copyediting = models.ManyToManyField('core.File', related_name='files_for_copyediting') - copyeditor_files = models.ManyToManyField('core.File', blank=True) + copyeditor_files = models.ManyToManyField( + 'core.File', + blank=True, + related_name='copyeditor_files', + ) copyeditor_completed = models.DateTimeField(blank=True, null=True) copyedit_reopened = models.DateTimeField(blank=True, null=True) From 8b17e10e3298bbb4a77f9e40a76843d9d2516892 Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Mon, 15 Jul 2024 16:04:11 +0100 Subject: [PATCH 2/9] Add Galley.detail to display more info BirkbeckCTP/typesetting#166 --- src/core/models.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/models.py b/src/core/models.py index 2d9953ca63..eb6bc5e05d 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -8,6 +8,7 @@ import statistics import json from datetime import timedelta +from django.utils.html import format_html import pytz from hijack.signals import hijack_started, hijack_ended import warnings @@ -32,7 +33,7 @@ from django.dispatch import receiver from django.urls import reverse from django.utils.functional import cached_property -from django.template.defaultfilters import linebreaksbr +from django.template.defaultfilters import date import swapper from core import files, validators @@ -1225,6 +1226,17 @@ def unlink_files(self): def __str__(self): return "{0} ({1})".format(self.id, self.label) + def detail(self): + return format_html( + 'Galley {}, {}, modified {}, linked to file {} - {}', + self.pk, + self.label, + self.file.last_modified.strftime('%Y-%m-%d %H:%M'), + self.file.pk, + self.file.pk, + self.file.original_filename, + ) + def render(self, recover=False): return files.render_xml( self.file, self.article, From d2c65df78bafaf45b23424dc18837baf4a344ee0 Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Mon, 15 Jul 2024 16:52:54 +0100 Subject: [PATCH 3/9] Add a template tag for a uuid4 BirkbeckCTP/typesetting#166 --- src/core/templatetags/uuid.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/core/templatetags/uuid.py diff --git a/src/core/templatetags/uuid.py b/src/core/templatetags/uuid.py new file mode 100644 index 0000000000..34fe02e2dc --- /dev/null +++ b/src/core/templatetags/uuid.py @@ -0,0 +1,8 @@ +from django import template +from uuid import uuid4 + +register = template.Library() + +@register.simple_tag +def short_uuid4(): + return f'u{str(uuid4())[:8]}' From 2fc5d9eff875f0497289040bd712723d5a6efed7 Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Mon, 15 Jul 2024 16:56:48 +0100 Subject: [PATCH 4/9] Set of buttons for easy input of date fields BirkbeckCTP/typesetting#166 --- src/core/templatetags/due_dates.py | 17 ++++ .../admin/core/widgets/soon_date_buttons.html | 86 +++++++++++++++++++ .../admin/elements/publish/pubdate.html | 1 + 3 files changed, 104 insertions(+) create mode 100644 src/core/templatetags/due_dates.py create mode 100644 src/templates/admin/core/widgets/soon_date_buttons.html diff --git a/src/core/templatetags/due_dates.py b/src/core/templatetags/due_dates.py new file mode 100644 index 0000000000..d5d6f75c58 --- /dev/null +++ b/src/core/templatetags/due_dates.py @@ -0,0 +1,17 @@ +from django import template +from django.utils import timezone + + +register = template.Library() + +@register.simple_tag +def due_date(days=0, input_type="date"): + """ + Get a string representing today's date or the now datetime, + with an offset of X days. + """ + due = timezone.now() + timezone.timedelta(days=days) + if input_type == "date": + return due.strftime("%Y-%m-%d") + elif input_type == "datetime-local": + return due.strftime("%Y-%m-%dT%H:%M") diff --git a/src/templates/admin/core/widgets/soon_date_buttons.html b/src/templates/admin/core/widgets/soon_date_buttons.html new file mode 100644 index 0000000000..ff8ffba79c --- /dev/null +++ b/src/templates/admin/core/widgets/soon_date_buttons.html @@ -0,0 +1,86 @@ +{% comment %} +Easily fill in a date or datetime field. + +date_input_id - str: the id of the input these buttons should control. + +Usage: + +{% include "admin/core/widgets/soon_date_buttons.html" with date_input_id="due" %} + + + +{% endcomment %} + +{% load uuid %} +{% load due_dates %} + +{% short_uuid4 as pid %} + +
+ + + + + + + + +
+ diff --git a/src/templates/admin/elements/publish/pubdate.html b/src/templates/admin/elements/publish/pubdate.html index ad87a5546c..b796673920 100644 --- a/src/templates/admin/elements/publish/pubdate.html +++ b/src/templates/admin/elements/publish/pubdate.html @@ -19,6 +19,7 @@
Publication Date/Time
{% endif %}
{% csrf_token %} + {% include "admin/core/widgets/soon_date_buttons.html" with date_input_id=pub_date_form.date_published.id_for_label input_type="datetime-local" %} {{ pub_date_form|foundation }}
From 14c980b9379380602dd452a3d0f2413f2790d920 Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Mon, 15 Jul 2024 17:12:38 +0100 Subject: [PATCH 5/9] Upgrade check_all widget to component BirkbeckCTP/janeway#166 --- src/static/admin/js/check_all.js | 4 +- .../admin/core/widgets/select_all.html | 44 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/templates/admin/core/widgets/select_all.html diff --git a/src/static/admin/js/check_all.js b/src/static/admin/js/check_all.js index 1e0ad43c05..b7745e5ebe 100755 --- a/src/static/admin/js/check_all.js +++ b/src/static/admin/js/check_all.js @@ -1,3 +1,5 @@ +// Deprecated. Use select_all.html instead. + $("#checkall").click(function () { $('input:checkbox').not(this).prop('checked', this.checked); - }); \ No newline at end of file + }); diff --git a/src/templates/admin/core/widgets/select_all.html b/src/templates/admin/core/widgets/select_all.html new file mode 100644 index 0000000000..7370d62a3b --- /dev/null +++ b/src/templates/admin/core/widgets/select_all.html @@ -0,0 +1,44 @@ +{% comment %} +Easily select or deselect all the checkboxes for a given field. + +Make sure to wrap this widget and the checkboxes in fieldset. + +Usage: + +
+ Which colours? + {% include "admin/core/widgets/select_all.html" %} + + +
+ +{% endcomment %} + +{% load uuid %} + +{% short_uuid4 as pid %} + +
+ + +
+ From c6753633f628fc11a81888ae110a5a6de3f9ecce Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Mon, 15 Jul 2024 17:21:43 +0100 Subject: [PATCH 6/9] Allow multiple datatables on one page BirkbeckCTP/typesetting#166 --- src/templates/admin/elements/datatables.html | 22 +++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/templates/admin/elements/datatables.html b/src/templates/admin/elements/datatables.html index 4618f76d0c..399e22a2a5 100644 --- a/src/templates/admin/elements/datatables.html +++ b/src/templates/admin/elements/datatables.html @@ -5,15 +5,17 @@ \ No newline at end of file + From 65db427a3a243764f21dc0abcb89d358f89c45ff Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Wed, 17 Jul 2024 16:15:55 +0100 Subject: [PATCH 7/9] Simplify Galley.detail method to avoid timezone issue #166 --- src/core/models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/core/models.py b/src/core/models.py index eb6bc5e05d..481d6b22d3 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -1228,10 +1228,8 @@ def __str__(self): def detail(self): return format_html( - 'Galley {}, {}, modified {}, linked to file {} - {}', - self.pk, + '{} galley linked to file {}: {}', self.label, - self.file.last_modified.strftime('%Y-%m-%d %H:%M'), self.file.pk, self.file.pk, self.file.original_filename, From e899375da9052103dc9b61f2e72e59e6c9040201 Mon Sep 17 00:00:00 2001 From: Joseph Muller Date: Wed, 24 Jul 2024 14:53:27 +0100 Subject: [PATCH 8/9] Do not shorten uuid4 --- src/core/templatetags/uuid.py | 4 ++-- src/templates/admin/core/widgets/select_all.html | 2 +- src/templates/admin/core/widgets/soon_date_buttons.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/templatetags/uuid.py b/src/core/templatetags/uuid.py index 34fe02e2dc..81aa7bb4dd 100644 --- a/src/core/templatetags/uuid.py +++ b/src/core/templatetags/uuid.py @@ -4,5 +4,5 @@ register = template.Library() @register.simple_tag -def short_uuid4(): - return f'u{str(uuid4())[:8]}' +def get_uuid4(): + return f'u{str(uuid4())}' diff --git a/src/templates/admin/core/widgets/select_all.html b/src/templates/admin/core/widgets/select_all.html index 7370d62a3b..d5418efc55 100644 --- a/src/templates/admin/core/widgets/select_all.html +++ b/src/templates/admin/core/widgets/select_all.html @@ -16,7 +16,7 @@ {% load uuid %} -{% short_uuid4 as pid %} +{% get_uuid4 as pid %}