[Koha-patches] [PATCH] Bug 5766 - Add configuration for excluding articles from DataTables sorting

Owen Leonard oleonard at myacpl.org
Wed Jul 3 18:41:16 CEST 2013


Client-side table sorting should exclude articles like "a," "an," and
"the" when sorting by title. This patch adds a custom sorting plugin for
use by DataTables and a configuration line to the DataTables string
configuration file which can be translated for any language.

As an example, this patch modifies the patron checkout history template
to use the new sort on the title column.

To test, apply the patch and clear your browser cache to ensure the
revised JavaScript file is loaded. Sort the table by title. Titles
should be sorted regardless of the presences of "a," "an", or "the" at
the beginning of the title.
---
 .../prog/en/includes/datatables-strings.inc        |    1 +
 koha-tmpl/intranet-tmpl/prog/en/js/datatables.js   |   46 +++++++++++++++++++-
 .../prog/en/modules/members/readingrec.tt          |   15 ++++++-
 3 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/datatables-strings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/datatables-strings.inc
index 183f511..7e939fc 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/datatables-strings.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/datatables-strings.inc
@@ -13,5 +13,6 @@
     var MSG_DT_PROCESSING = _("Processing...");
     var MSG_DT_SEARCH = _("Search:");
     var MSG_DT_ZERO_RECORDS = _("No matching records found");
+    var CONFIG_EXCLUDE_ARTICLES_FROM_SORT = _("a an the");
 //]]>
 </script>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js
index 703944e..fc24036 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js
+++ b/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js
@@ -493,4 +493,48 @@ jQuery.extend( jQuery.fn.dataTableExt.oSort, {
     "title-string-desc": function ( a, b ) {
         return ((a < b) ? 1 : ((a > b) ? -1 : 0));
     }
-} );
\ No newline at end of file
+} );
+
+(function() {
+
+    /* Plugin to allow text sorting to ignore articles
+     *
+     * In DataTables config:
+     *     "aoColumns": [
+     *        { "sType": "anti-the" },
+     *      ]
+     * Based on the plugin found here:
+     * http://datatables.net/plug-ins/sorting#anti_the
+     * Modified to exclude HTML tags from sorting
+     * Extended to accept a string of space-separated articles
+     * from a configuration file (in English, "a," "an," and "the")
+     */
+
+    if(CONFIG_EXCLUDE_ARTICLES_FROM_SORT){
+        var articles = CONFIG_EXCLUDE_ARTICLES_FROM_SORT.split(" ");
+        var rpattern = "";
+        for(i=0;i<articles.length;i++){
+            rpattern += "^" + articles[i] + " ";
+            if(i < articles.length - 1){ rpattern += "|"; }
+        }
+        var re = new RegExp(rpattern, "i");
+    }
+
+    jQuery.extend( jQuery.fn.dataTableExt.oSort, {
+        "anti-the-pre": function ( a ) {
+            var x = String(a).replace( /<[\s\S]*?>/g, "" );
+            var y = x.trim();
+            var z = y.replace(re, "").toLowerCase();
+            return z;
+        },
+
+        "anti-the-asc": function ( a, b ) {
+            return ((a < b) ? -1 : ((a > b) ? 1 : 0));
+        },
+
+        "anti-the-desc": function ( a, b ) {
+            return ((a < b) ? 1 : ((a > b) ? -1 : 0));
+        }
+    });
+
+}());
\ No newline at end of file
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt
index 6084357..f488234 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt
@@ -8,13 +8,26 @@
 <script type="text/javascript" src="[% interface %]/[% theme %]/en/js/datatables.js"></script>
 <script type="text/javascript" id="js">
 //<![CDATA[
+
  $(document).ready(function() {
     [% IF (dateformat == 'metric') %]
         dt_add_type_uk_date();
     [% END %]
     $("#table_readingrec").dataTable($.extend(true, {}, dataTablesDefaults, {
         "sPaginationType": "four_button",
-        "aaSorting": []
+        "aaSorting": [],
+        "aoColumns": [
+            null,
+            { "sType": "anti-the" },
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null
+        ]
     }));
  });
 //]]>
-- 
1.7.9.5


More information about the Koha-patches mailing list