If 'Show Patch IDs' is turned on in settings, add an extra column to the patch list, with buttons showing the patch IDs. The buttons copy the patch IDs to the clipboard.
JavaScript inspired by https://github.com/Triforcey/clip-j and many many StackOverflow answers. Suggested-by: Michael Ellerman <[email protected]> Signed-off-by: Daniel Axtens <[email protected]> --- patchwork/forms.py | 5 ++++- patchwork/migrations/0019_userprofile_show_ids.py | 20 ++++++++++++++++++ patchwork/models.py | 3 +++ patchwork/templates/patchwork/patch-list.html | 25 +++++++++++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 patchwork/migrations/0019_userprofile_show_ids.py diff --git a/patchwork/forms.py b/patchwork/forms.py index f42a224fe75e..0dd11857b16e 100644 --- a/patchwork/forms.py +++ b/patchwork/forms.py @@ -107,7 +107,10 @@ class UserProfileForm(forms.ModelForm): class Meta: model = UserProfile - fields = ['items_per_page'] + fields = ['items_per_page', 'show_ids'] + labels = { + 'show_ids': 'Show Patch IDs:' + } def _get_delegate_qs(project, instance=None): diff --git a/patchwork/migrations/0019_userprofile_show_ids.py b/patchwork/migrations/0019_userprofile_show_ids.py new file mode 100644 index 000000000000..d924184ea527 --- /dev/null +++ b/patchwork/migrations/0019_userprofile_show_ids.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.6 on 2017-03-26 20:59 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('patchwork', '0018_add_event_model'), + ] + + operations = [ + migrations.AddField( + model_name='userprofile', + name='show_ids', + field=models.BooleanField(default=False, help_text=b'Show click-to-copy patch IDs in the list view'), + ), + ] diff --git a/patchwork/models.py b/patchwork/models.py index 05c6976664f8..a336219aeff5 100644 --- a/patchwork/models.py +++ b/patchwork/models.py @@ -138,6 +138,9 @@ class UserProfile(models.Model): items_per_page = models.PositiveIntegerField( default=100, null=False, blank=False, help_text='Number of items to display per page') + show_ids = models.BooleanField( + default=False, + help_text='Show click-to-copy patch IDs in the list view') @property def name(self): diff --git a/patchwork/templates/patchwork/patch-list.html b/patchwork/templates/patchwork/patch-list.html index 4b979ac0de01..cdc368f1e758 100644 --- a/patchwork/templates/patchwork/patch-list.html +++ b/patchwork/templates/patchwork/patch-list.html @@ -50,6 +50,18 @@ $(document).ready(function() { e.preventDefault(); }); }); + +{% if user.is_authenticated and user.profile.show_ids %} +function copyToClipboard(patch_id) { + input = document.createElement('input'); + input.setAttribute('type', 'text'); + input.setAttribute('value', patch_id); + input = document.body.appendChild(input); + input.select(); + document.execCommand('copy'); + input.remove(); +} +{% endif %} </script> <form method="post"> {% csrf_token %} @@ -65,6 +77,12 @@ $(document).ready(function() { </th> {% endif %} + {% if user.is_authenticated and user.profile.show_ids %} + <th> + ID + </th> + {% endif %} + <th> {% ifequal order.name "name" %} <a class="colactive" href="{% listurl order=order.reversed_name %}"> @@ -175,6 +193,13 @@ $(document).ready(function() { <input type="checkbox" name="patch_id:{{patch.id}}"/> </td> {% endif %} + {% if user.is_authenticated and user.profile.show_ids %} + <td> + <button type="button" class="btn btn-xs" + onClick="javascript:copyToClipboard('{{patch.id}}');" + title="Copy to Clipboard">{{ patch.id }}</button> + </td> + {% endif %} <td> <a href="{% url 'patch-detail' patch_id=patch.id %}"> {{ patch.name|default:"[no subject]"|truncatechars:100 }} -- 2.9.3 _______________________________________________ Patchwork mailing list [email protected] https://lists.ozlabs.org/listinfo/patchwork
