]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
'mpe mode': click to copy patch IDs
authorDaniel Axtens <dja@axtens.net>
Mon, 27 Mar 2017 05:42:51 +0000 (16:42 +1100)
committerStephen Finucane <stephen@that.guru>
Sat, 15 Apr 2017 11:51:43 +0000 (12:51 +0100)
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 <mpe@ellerman.id.au>
Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephen@that.guru>
patchwork/forms.py
patchwork/migrations/0019_userprofile_show_ids.py [new file with mode: 0644]
patchwork/models.py
patchwork/templates/patchwork/patch-list.html

index f42a224fe75eff3d35c3ddef7de6c593a8458afc..0dd11857b16e38988419807a46293e098ca76a2f 100644 (file)
@@ -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 (file)
index 0000000..d924184
--- /dev/null
@@ -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'),
+        ),
+    ]
index 05c6976664f89c00f840f82b35997627c84291fb..a336219aeff53381170e2d3a15869d22f795bf1c 100644 (file)
@@ -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):
index 4b979ac0de0132862178a7ba745ef4a5f774b0dc..cdc368f1e75878ae07bc1a55082b5c675ace8562 100644 (file)
@@ -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 }}