[PATCH] js: Allow shift-select of checkboxes

Stephen Finucane stephen.finucane at intel.com
Tue Mar 15 04:09:55 AEDT 2016


Allow bulk modification of patches through shift-select of the check
boxes on each line.

This allows for the removal of the 'common.js' file, which was only
being used in one location.

Signed-off-by: Stephen Finucane <stephen.finucane at intel.com>
---
 htdocs/js/bundle.js                                |  6 ++++++
 htdocs/js/common.js                                | 25 ----------------------
 htdocs/js/jquery.checkboxes-1.0.6.min.js           |  1 +
 lib/packages/jquery/jquery.checkboxes-1.0.6.min.js |  1 +
 patchwork/templates/patchwork/patch-list.html      | 14 ++++++++++--
 templates/base.html                                |  2 +-
 6 files changed, 21 insertions(+), 28 deletions(-)
 delete mode 100644 htdocs/js/common.js
 create mode 120000 htdocs/js/jquery.checkboxes-1.0.6.min.js
 create mode 100644 lib/packages/jquery/jquery.checkboxes-1.0.6.min.js

diff --git a/htdocs/js/bundle.js b/htdocs/js/bundle.js
index 0bdf41a..c969d0b 100644
--- a/htdocs/js/bundle.js
+++ b/htdocs/js/bundle.js
@@ -80,3 +80,9 @@ function row_to_patch_id(node)
 
     return id_str.substring(i + 1);
 }
+
+function confirm_delete(type, name)
+{
+    return confirm("Are you sure you want to delete the " + type +
+                   " '" + name + "'?");
+}
diff --git a/htdocs/js/common.js b/htdocs/js/common.js
deleted file mode 100644
index f725693..0000000
--- a/htdocs/js/common.js
+++ /dev/null
@@ -1,25 +0,0 @@
-
-function confirm_delete(type, name)
-{
-	return confirm("Are you sure you want to delete the " + type +
-			" '" + name + "'?");
-}
-
-function select_all(obj)
-{
-	var value = obj.checked;
-	var form = obj.form;
-
-	select_all_checkbox = obj;
-
-	for (var i = 0; i < form.elements.length; i++ ) {
-		var element = form.elements[i];
-		if (element.type != 'checkbox') {
-			continue;
-		}
-		if (element.name.substring(0, 9) != 'patch_id:') {
-			continue;
-		}
-		element.checked = value;
-	}
-}
diff --git a/htdocs/js/jquery.checkboxes-1.0.6.min.js b/htdocs/js/jquery.checkboxes-1.0.6.min.js
new file mode 120000
index 0000000..dfef5d4
--- /dev/null
+++ b/htdocs/js/jquery.checkboxes-1.0.6.min.js
@@ -0,0 +1 @@
+../../lib/packages/jquery/jquery.checkboxes-1.0.6.min.js
\ No newline at end of file
diff --git a/lib/packages/jquery/jquery.checkboxes-1.0.6.min.js b/lib/packages/jquery/jquery.checkboxes-1.0.6.min.js
new file mode 100644
index 0000000..b8ab064
--- /dev/null
+++ b/lib/packages/jquery/jquery.checkboxes-1.0.6.min.js
@@ -0,0 +1 @@
+/*! checkboxes.js v1.0.6 | (c) 2013, 2014 Rubens Mariuzzo | http://github.com/rmariuzzo/checkboxes.js/LICENSE */"use strict";!function(a){var b=function(a){this.$context=a};b.prototype.check=function(){this.$context.find(":checkbox").filter(":not(:disabled)").prop("checked",!0)},b.prototype.uncheck=function(){this.$context.find(":checkbox").filter(":not(:disabled)").prop("checked",!1)},b.prototype.toggle=function(){this.$context.find(":checkbox").filter(":not(:disabled)").each(function(){var b=a(this);b.prop("checked",!b.is(":checked"))})},b.prototype.max=function(a){if(a>0){var b=this;this.$context.on("click.checkboxes.max",":checkbox",function(){b.$context.find(":checked").length===a?b.$context.find(":checkbox:not(:checked)").prop("disabled",!0):b.$context.find(":checkbox:not(:checked)").prop("disabled",!1)})}else this.$context.off("click.checkboxes")},b.prototype.range=function(b){if(b){var c=this;this.$context.on("click.checkboxes.range",":checkbox",function(b){var d=a(b.target);if(b.shiftKey&&c.$last){var e=c.$context.find(":checkbox"),f=e.index(c.$last),g=e.index(d),h=Math.min(f,g),i=Math.max(f,g)+1;e.slice(h,i).filter(":not(:disabled)").prop("checked",d.prop("checked"))}c.$last=d})}else this.$context.off("click.checkboxes.range")};var c=a.fn.checkboxes;a.fn.checkboxes=function(c){var d=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=a(this),f=e.data("checkboxes");f||e.data("checkboxes",f=new b(e,"object"==typeof c&&c)),"string"==typeof c&&f[c]&&f[c].apply(f,d)})},a.fn.checkboxes.Constructor=b,a.fn.checkboxes.noConflict=function(){return a.fn.checkboxes=c,this};var d=function(b){var c=a(b.target),d=c.attr("href"),e=a(c.data("context")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=c.data("action");e&&f&&(c.is(":checkbox")||b.preventDefault(),e.checkboxes(f))},e=function(){a("[data-toggle^=checkboxes]").each(function(){var b=a(this),c=b.data();delete c.toggle;for(var d in c)b.checkboxes(d,c[d])})};a(document).on("click.checkboxes.data-api","[data-toggle^=checkboxes]",d),a(document)!
 .on("rea
dy.checkboxes.data-api",e)}(window.jQuery);
\ No newline at end of file
diff --git a/patchwork/templates/patchwork/patch-list.html b/patchwork/templates/patchwork/patch-list.html
index 66149c3..167363e 100644
--- a/patchwork/templates/patchwork/patch-list.html
+++ b/patchwork/templates/patchwork/patch-list.html
@@ -40,18 +40,28 @@
 <script type="text/javascript">
 $(document).ready(function() {
     $('#patchlist').stickyTableHeaders();
+
+    $('#check-all').change(function(e) {
+        if(this.checked) {
+            $('#patchlist').checkboxes('check');
+        } else {
+            $('#patchlist').checkboxes('uncheck');
+        }
+        e.preventDefault();
+    });
 });
 </script>
 <form method="post">
 {% csrf_token %}
 <input type="hidden" name="form" value="patchlistform"/>
 <input type="hidden" name="project" value="{{project.id}}"/>
-<table class="table table-hover table-condensed pw-list" id="patchlist">
+<table id="patchlist" class="table table-hover table-condensed pw-list"
+       data-toggle="checkboxes" data-range="true">
  <thead>
   <tr>
    {% if user.is_authenticated %}
    <th>
-    <input type="checkbox" onChange="select_all(this)"/>
+    <input type="checkbox" id="check-all"/>
    </th>
    {% endif %}
 
diff --git a/templates/base.html b/templates/base.html
index 8e101dd..0e9dd0f 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -7,9 +7,9 @@
   <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}"/>
   <link rel="stylesheet" type="text/css" href="{% static "css/selectize.bootstrap3.css" %}"/>
   <link rel="stylesheet" type="text/css" href="{% static "css/style.css" %}"/>
-  <script type="text/javascript" src="{% static "js/common.js" %}"></script>
   <script type="text/javascript" src="{% static "js/jquery-1.10.1.min.js" %}"></script>
   <script type="text/javascript" src="{% static "js/jquery.stickytableheaders.min.js" %}"></script>
+  <script type="text/javascript" src="{% static "js/jquery.checkboxes-1.0.6.min.js" %}"></script>
   <!-- IE8 support of HTML5 elements and media queries -->
   <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
   <!--[if lt IE 9]>
-- 
2.0.0



More information about the Patchwork mailing list