Bug 19623: Move template JavaScript to the footer: Cataloging
authorOwen Leonard <oleonard@myacpl.org>
Tue, 14 Nov 2017 17:53:24 +0000 (17:53 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 26 Dec 2017 15:52:33 +0000 (12:52 -0300)
This patch modifies some staff client cataloging templates so that
JavaScript is included in the footer instead of the header.

Several cataloging templates are excluded because they require
significant structural changes: addbiblio.tt, additem.tt, and editor.tt

To test, apply the patch and test the JavaScript-driven features of the
modified templates: All button controls, DataTables functionality, tabs,
etc.

Note that z350_auth_search.tt is tested by performing a Z39.50 search
from the Authorities module.

Signed-off-by: Claire Gravely <claire.gravely@bsz-bw.de>
Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbooks.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/z3950_auth_search.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/z3950_search.tt

index d6d39d8..5293029 100644 (file)
@@ -1,85 +1,10 @@
 [% USE Koha %]
+[% SET footerjs = 1 %]
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Cataloging</title>
 [% INCLUDE 'doc-head-close.inc' %]
-<script type="text/javascript">
-    //<![CDATA[
-
-     $(document).ready(function() {
-        //Set focus to cataloging search
-        $("input[name=q]:eq(0)").focus();
-
-        $("#z3950search").click(function(){
-            PopupZ3950("");
-            return false;
-        });
-
-        $(".z3950searchFw").click(function(){
-            PopupZ3950($(this).prop('id'));
-            return false;
-        });
-        $(".merge-items").on("click",function(e){
-            e.preventDefault();
-            MergeItems();
-        });
-
-        $("#useadvanced").click(function(){
-            $.cookie( 'catalogue_editor_[% USER_INFO.borrowernumber %]', 'advanced', { expires: 365, path: '/' } );
-            return true;
-        });
-
-        $(".previewData").on("click", function(e){
-            e.preventDefault();
-            var ltitle = $(this).text();
-            var page = $(this).attr("href");
-            $("#dataPreviewLabel").text(ltitle);
-            $("#dataPreview .modal-body").load(page + " div");
-            $('#dataPreview').modal({show:true});
-        });
-        $("#dataPreview").on("hidden", function(){
-            $("#dataPreviewLabel").html("");
-            $("#dataPreview .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
-        });
-
-     });
-
-    /* this function open a popup to search on z3950 server.  */
-    function PopupZ3950(fw) {
-        var strQuery = GetZ3950Terms(fw);
-        if(strQuery){
-            window.open("/cgi-bin/koha/cataloguing/z3950_search.pl?biblionumber=[% biblionumber %]"+strQuery,"z3950search",'width=800,height=500,location=yes,toolbar=no,scrollbars=yes,resize=yes');
-        }
-    }
-    /* provide Z3950 search points */
-    function GetZ3950Terms(fw){
-        var strQuery="&frameworkcode=" + fw;
-        [% FOREACH z3950_search_param IN z3950_search_params %]
-            strQuery += "&" + "[% z3950_search_param.name | uri %]" + "=" + "[% z3950_search_param.value | uri %]";
-        [% END %]
-        return strQuery;
-    }
-
-    /**
-     * This function checks if the adequate number of records are checked for merging
-     */
-    function MergeItems() {
-     var checkboxes = $("input:checkbox:checked");
-     if (checkboxes.length < 2) {
-         alert(_("At least two records must be selected for merging."));
-     } else {
-         var params = [];
-         $(checkboxes).each(function() {
-             params.push('biblionumber=' + $(this).val());
-         });
-         var url = '/cgi-bin/koha/cataloguing/merge.pl?' + params.join('&');
-         location.href = url;
-     }
-     return false;
-    }
-
-    //]]>
-</script>
 </head>
+
 <body id="cat_addbooks" class="cat">
 [% INCLUDE 'header.inc' %]
 [% INCLUDE 'cataloging-search.inc' %]
 
 </div>
 </div>
+
+[% MACRO jsinclude BLOCK %]
+    <script type="text/javascript">
+
+         $(document).ready(function() {
+            //Set focus to cataloging search
+            $("input[name=q]:eq(0)").focus();
+
+            $("#z3950search").click(function(){
+                PopupZ3950("");
+                return false;
+            });
+
+            $(".z3950searchFw").click(function(){
+                PopupZ3950($(this).prop('id'));
+                return false;
+            });
+            $(".merge-items").on("click",function(e){
+                e.preventDefault();
+                MergeItems();
+            });
+
+            $("#useadvanced").click(function(){
+                $.cookie( 'catalogue_editor_[% USER_INFO.borrowernumber %]', 'advanced', { expires: 365, path: '/' } );
+                return true;
+            });
+
+            $(".previewData").on("click", function(e){
+                e.preventDefault();
+                var ltitle = $(this).text();
+                var page = $(this).attr("href");
+                $("#dataPreviewLabel").text(ltitle);
+                $("#dataPreview .modal-body").load(page + " div");
+                $('#dataPreview').modal({show:true});
+            });
+            $("#dataPreview").on("hidden", function(){
+                $("#dataPreviewLabel").html("");
+                $("#dataPreview .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
+            });
+
+         });
+
+        /* this function open a popup to search on z3950 server.  */
+        function PopupZ3950(fw) {
+            var strQuery = GetZ3950Terms(fw);
+            if(strQuery){
+                window.open("/cgi-bin/koha/cataloguing/z3950_search.pl?biblionumber=[% biblionumber %]"+strQuery,"z3950search",'width=800,height=500,location=yes,toolbar=no,scrollbars=yes,resize=yes');
+            }
+        }
+        /* provide Z3950 search points */
+        function GetZ3950Terms(fw){
+            var strQuery="&frameworkcode=" + fw;
+            [% FOREACH z3950_search_param IN z3950_search_params %]
+                strQuery += "&" + "[% z3950_search_param.name | uri %]" + "=" + "[% z3950_search_param.value | uri %]";
+            [% END %]
+            return strQuery;
+        }
+
+        /**
+         * This function checks if the adequate number of records are checked for merging
+         */
+        function MergeItems() {
+         var checkboxes = $("input:checkbox:checked");
+         if (checkboxes.length < 2) {
+             alert(_("At least two records must be selected for merging."));
+         } else {
+             var params = [];
+             $(checkboxes).each(function() {
+                 params.push('biblionumber=' + $(this).val());
+             });
+             var url = '/cgi-bin/koha/cataloguing/merge.pl?' + params.join('&');
+             location.href = url;
+         }
+         return false;
+        }
+
+    </script>
+[% END %]
+
 [% INCLUDE 'intranet-bottom.inc' %]
index 464d763..a672811 100644 (file)
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Cataloging &rsaquo; Merging records</title>
 [% INCLUDE 'doc-head-close.inc' %]
-<script type="text/javascript" src="[% interface %]/[% theme %]/js/merge-record.js"></script>
-[% INCLUDE 'merge-record-strings.inc' %]
 <style type="text/css">
 div.record ul, div.record li { float:none; display:block; }
 div#result { margin-top: 1em; }
 /* We use this style "against" the li ui-tabs-nav style automatically applied */
 #dataPreview { width : 80%; } @media (max-width: 767px) { #dataPreview { margin: 0; width : auto; } }
 </style>
-<script type="text/javascript">
-//<![CDATA[
-[% UNLESS (result) %]
-  [% IF (choosereference) %]
-    function changeFramework(fw) {
-        $("#frameworkcode").val(fw);
-    }
-    $(document).ready(function(){
-            $(".previewData").on("click", function(e){
-            e.preventDefault();
-            var ltitle = $(this).text();
-            var page = $(this).attr("href");
-            $("#dataPreviewLabel").text(ltitle);
-            $("#dataPreview .modal-body").load(page + " div");
-            $('#dataPreview').modal({show:true});
-        });
-        $("#dataPreview").on("hidden", function(){
-            $("#dataPreviewLabel").html("");
-            $("#dataPreview .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
-        });
-    });
-  [% ELSE %]
-    function check_mandatory () {
-        var missing = {
-            'fields': [],
-            'subfields': []
-        };
-        for (tag in tagslib) {
-            if (tag == '000' || tag == '001')
-                continue;
-            if (tagslib[tag].mandatory == 1) {
-                if ($("#resultul span.field:contains("+ tag +")").length == 0) {
-                    missing.fields.push(tag);
-                }
-            }
-            for (subfieldcode in tagslib[tag]) {
-                if (subfieldcode == 'lib' || subfieldcode == 'mandatory'
-                || subfieldcode == 'repeatable' || subfieldcode == 'tab'
-                || subfieldcode == '@') {
-                    continue;
-                }
-                if (tagslib[tag][subfieldcode].mandatory == 1 && tagslib[tag][subfieldcode].tab >= 0) {
-                    var fields = $("#resultul span.field:contains("+ tag +")");
-                    $(fields).each(function() {
-                        var subfields = $(this).parents('li').find("span.subfield:contains("+ subfieldcode +")");
-                        if (subfields.length == 0) {
-                            missing.subfields.push( {
-                                'tag': tag,
-                                'subfieldcode': subfieldcode
-                            } );
-                        }
-                    });
-                }
-            }
-        }
-        return missing;
-    }
-
-    // When submiting the form
-    function mergeformsubmit() {
-        var missing = check_mandatory();
-        var alert_msg = '';
-        var error = 0;
-        if (missing.fields.length > 0) {
-            alert_msg += _("Following required fields are missing:") + "\n";
-            for (var i in missing.fields) {
-                alert_msg += "\t- " + missing.fields[i] + "\n";
-                error ++;
-            }
-            alert_msg += "\n";
-        }
-        if (missing.subfields.length > 0) {
-            alert_msg += _("Following required subfields are missing:") + "\n";
-            for (var i in missing.subfields) {
-                var subfield = missing.subfields[i];
-                alert_msg += "\t- " + subfield.tag + "$" + subfield.subfieldcode + "\n";
-                error ++;
-            }
-        }
-
-        if (error != 0) {
-            alert(alert_msg);
-            return false;
-        } else {
-            $("#tabs").remove();
-        }
-    }
-
-$(document).ready(function(){
-    tagslib = [];
-    $.getJSON("/cgi-bin/koha/cataloguing/merge_ajax.pl", {frameworkcode : "[% framework %]" }, function(json) {
-      tagslib = json;
-      rebuild_target($("#tabs"), $("#resultul"));
-    });
-
-    // Creating tabs
-    $("#tabs").tabs();
-
-    // Check all checkboxes in first tab, and uncheck all others to avoid
-    // inconsistencies from a page refresh.
-    $('#tabs div#tabrecord[% ref_biblionumber %]').find('input[type="checkbox"]').prop('checked', true);
-    $('#tabs > div:not("#tabrecord[% ref_biblionumber %]")').find('input[type="checkbox"]').prop('checked', false);
-
-    //Set focus to cataloging search
-    $("input[name=q]:eq(0)").focus();
-});
-
-  [% END %]
-[% END %]
-//]]>
-</script>
 </head>
+
 <body id="cat_merge" class="cat">
 [% INCLUDE 'header.inc' %]
 [% INCLUDE 'cataloging-search.inc' %]
@@ -296,4 +184,118 @@ $(document).ready(function(){
 </div>
 </div>
 
+[% MACRO jsinclude BLOCK %]
+    <script type="text/javascript" src="[% interface %]/[% theme %]/js/merge-record.js"></script>
+    [% INCLUDE 'merge-record-strings.inc' %]
+    <script type="text/javascript">
+        [% UNLESS (result) %]
+          [% IF (choosereference) %]
+            function changeFramework(fw) {
+                $("#frameworkcode").val(fw);
+            }
+            $(document).ready(function(){
+                    $(".previewData").on("click", function(e){
+                    e.preventDefault();
+                    var ltitle = $(this).text();
+                    var page = $(this).attr("href");
+                    $("#dataPreviewLabel").text(ltitle);
+                    $("#dataPreview .modal-body").load(page + " div");
+                    $('#dataPreview').modal({show:true});
+                });
+                $("#dataPreview").on("hidden", function(){
+                    $("#dataPreviewLabel").html("");
+                    $("#dataPreview .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
+                });
+            });
+          [% ELSE %]
+            function check_mandatory () {
+                var missing = {
+                    'fields': [],
+                    'subfields': []
+                };
+                for (tag in tagslib) {
+                    if (tag == '000' || tag == '001')
+                        continue;
+                    if (tagslib[tag].mandatory == 1) {
+                        if ($("#resultul span.field:contains("+ tag +")").length == 0) {
+                            missing.fields.push(tag);
+                        }
+                    }
+                    for (subfieldcode in tagslib[tag]) {
+                        if (subfieldcode == 'lib' || subfieldcode == 'mandatory'
+                        || subfieldcode == 'repeatable' || subfieldcode == 'tab'
+                        || subfieldcode == '@') {
+                            continue;
+                        }
+                        if (tagslib[tag][subfieldcode].mandatory == 1 && tagslib[tag][subfieldcode].tab >= 0) {
+                            var fields = $("#resultul span.field:contains("+ tag +")");
+                            $(fields).each(function() {
+                                var subfields = $(this).parents('li').find("span.subfield:contains("+ subfieldcode +")");
+                                if (subfields.length == 0) {
+                                    missing.subfields.push( {
+                                        'tag': tag,
+                                        'subfieldcode': subfieldcode
+                                    } );
+                                }
+                            });
+                        }
+                    }
+                }
+                return missing;
+            }
+
+            // When submiting the form
+            function mergeformsubmit() {
+                var missing = check_mandatory();
+                var alert_msg = '';
+                var error = 0;
+                if (missing.fields.length > 0) {
+                    alert_msg += _("Following required fields are missing:") + "\n";
+                    for (var i in missing.fields) {
+                        alert_msg += "\t- " + missing.fields[i] + "\n";
+                        error ++;
+                    }
+                    alert_msg += "\n";
+                }
+                if (missing.subfields.length > 0) {
+                    alert_msg += _("Following required subfields are missing:") + "\n";
+                    for (var i in missing.subfields) {
+                        var subfield = missing.subfields[i];
+                        alert_msg += "\t- " + subfield.tag + "$" + subfield.subfieldcode + "\n";
+                        error ++;
+                    }
+                }
+
+                if (error != 0) {
+                    alert(alert_msg);
+                    return false;
+                } else {
+                    $("#tabs").remove();
+                }
+            }
+
+        $(document).ready(function(){
+            tagslib = [];
+            $.getJSON("/cgi-bin/koha/cataloguing/merge_ajax.pl", {frameworkcode : "[% framework %]" }, function(json) {
+              tagslib = json;
+              rebuild_target($("#tabs"), $("#resultul"));
+            });
+
+            // Creating tabs
+            $("#tabs").tabs();
+
+            // Check all checkboxes in first tab, and uncheck all others to avoid
+            // inconsistencies from a page refresh.
+            $('#tabs div#tabrecord[% ref_biblionumber %]').find('input[type="checkbox"]').prop('checked', true);
+            $('#tabs > div:not("#tabrecord[% ref_biblionumber %]")').find('input[type="checkbox"]').prop('checked', false);
+
+            //Set focus to cataloging search
+            $("input[name=q]:eq(0)").focus();
+        });
+
+          [% END %]
+        [% END %]
+    </script>
+[% END %]
+
 [% INCLUDE 'intranet-bottom.inc' %]
index 6e6de65..df1e3d9 100644 (file)
@@ -1,45 +1,8 @@
+[% SET footerjs = 1 %]
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Z39.50 search results</title>
 [% INCLUDE 'doc-head-close.inc' %]
-<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
 <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
-[% INCLUDE 'datatables.inc' %]
-<script type="text/javascript">
-//<![CDATA[
-
-$(document).ready(function(){
-
-    $("#resultst").dataTable($.extend(true, {}, dataTablesDefaults, {
-        "sDom": 't',
-        "aoColumnDefs": [
-            { "aTargets": [ -1,-2 ], "bSortable": false, "bSearchable": false },
-        ],
-        "aaSorting": [[ 1, "asc" ]],
-        "bPaginate": false
-    }));
-        /* Inline edit/delete links */
-        $("td").click(function(event){
-            var $tgt = $(event.target);
-            var row = $(this).parent();
-            $(".linktools").hide();
-            $("tr").removeClass("selected");
-            row.addClass("selected");
-            if($tgt.is("a")||$tgt.is(":nth-child(4)")||$tgt.is(":nth-child(5)")){
-                //Don't show inline links for cells containing links of their own.
-            } else {
-                var position = $(this).offset();
-                var top = position.top+5;
-                var left = position.left+5;
-                $(".linktools",row).show().css("position","absolute").css("top",top).css("left",left);
-            }
-        });
-
-});
-
-//]]>
-</script>
-[% INCLUDE 'z3950_search.inc' %]
-<script type="text/javascript" src="[% interface %]/[% theme %]/js/z3950_search.js"></script>
 <style type="text/css">
 .linktools { background-color:#FFF;border-top:1px solid #DDD; border-left: 1px solid #DDD; border-right: 1px solid #666; border-bottom:1px solid #666;display: none; white-space: nowrap;}
 .linktools a { font-size : 85%; text-decoration:none; padding:.3em;;background-color:#FFF; display:block;float:left;border-right:1px solid #DDD;}
@@ -47,18 +10,20 @@ $(document).ready(function(){
 tr.selected { background-color : #FFFFCC; } tr.selected td { background-color : transparent; } #marcPreview { width : 90%; top: 5%; } .modal-body { max-height: 380px; } .modal-header { padding: 0 14px; } @media (max-width: 767px) { #marcPreview { margin: 0; width : auto; } }
 </style>
 
-    [% IF ( opsearch ) %]
-        <style type="text/css">
-        #custom-doc { width:53em;*width:51.72em;min-width:689px; margin:auto; text-align:left; }
-        </style>
-        </head>
-        <body id="cat_z3950_auth_search" class="cat">
-        <div id="custom-doc" class="yui-t7">
-    [% ELSE %]
-        </head>
-        <body id="cat_z3950_search" class="cat" style="padding:.5em;">
-        <div>
-    [% END %]
+[% IF ( opsearch ) %]
+    <style type="text/css">
+    #custom-doc { width:53em;*width:51.72em;min-width:689px; margin:auto; text-align:left; }
+    </style>
+    </head>
+    <body id="cat_z3950_auth_search" class="cat">
+    <div id="custom-doc" class="yui-t7">
+[% ELSE %]
+    </head>
+
+    <body id="cat_z3950_search" class="cat" style="padding:.5em;">
+    <div>
+[% END %]
+
     <div id="bd">
     [% IF ( opsearch ) %]
         <h2>Z39.50 Authority search points</h2>
@@ -198,5 +163,41 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color :
 
 [% IF ( numberpending ) %]<h3 align="center">Still [% numberpending %] servers to search</h3>[% END %]
 
-</body>
-</html>
+[% MACRO jsinclude BLOCK %]
+    <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
+    [% INCLUDE 'datatables.inc' %]
+    <script type="text/javascript">
+        $(document).ready(function(){
+
+            $("#resultst").dataTable($.extend(true, {}, dataTablesDefaults, {
+                "sDom": 't',
+                "aoColumnDefs": [
+                    { "aTargets": [ -1,-2 ], "bSortable": false, "bSearchable": false },
+                ],
+                "aaSorting": [[ 1, "asc" ]],
+                "bPaginate": false
+            }));
+                /* Inline edit/delete links */
+                $("td").click(function(event){
+                    var $tgt = $(event.target);
+                    var row = $(this).parent();
+                    $(".linktools").hide();
+                    $("tr").removeClass("selected");
+                    row.addClass("selected");
+                    if($tgt.is("a")||$tgt.is(":nth-child(4)")||$tgt.is(":nth-child(5)")){
+                        //Don't show inline links for cells containing links of their own.
+                    } else {
+                        var position = $(this).offset();
+                        var top = position.top+5;
+                        var left = position.left+5;
+                        $(".linktools",row).show().css("position","absolute").css("top",top).css("left",left);
+                    }
+                });
+
+        });
+    </script>
+    [% INCLUDE 'z3950_search.inc' %]
+    <script type="text/javascript" src="[% interface %]/[% theme %]/js/z3950_search.js"></script>
+[% END %]
+
+[% INCLUDE 'popup-bottom.inc' %]
\ No newline at end of file
index 733c6b5..20b1f82 100644 (file)
@@ -1,46 +1,8 @@
+[% SET footerjs = 1 %]
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Z39.50/SRU search results</title>
 [% INCLUDE 'doc-head-close.inc' %]
-<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
 <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
-[% INCLUDE 'datatables.inc' %]
-<script type="text/javascript">
-//<![CDATA[
-
-$(document).ready(function(){
-
-    $("#resultst").dataTable($.extend(true, {}, dataTablesDefaults, {
-        "sDom": 't',
-        "aoColumnDefs": [
-            { "aTargets": [ -1,-2,-3 ], "bSortable": false, "bSearchable": false },
-            { "aTargets": [ 1 ], "sType": "nsb-nse" },
-        ],
-        "aaSorting": [[ 1, "asc" ]],
-        "bPaginate": false
-    }));
-        /* Inline edit/delete links */
-        $("td").click(function(event){
-            var $tgt = $(event.target);
-            var row = $(this).parent();
-            $(".linktools").hide();
-            $("tr").removeClass("selected");
-            row.addClass("selected");
-            if($tgt.is("a")||$tgt.is(":nth-child(8)")||$tgt.is(":nth-child(9)")||$tgt.is(":nth-child(10)")){
-                //Don't show inline links for cells containing links of their own.
-            } else {
-                var position = $(this).offset();
-                var top = position.top+5;
-                var left = position.left+5;
-                $(".linktools",row).show().css("position","absolute").css("top",top).css("left",left);
-            }
-        });
-
-});
-
-//]]>
-</script>
-[% INCLUDE 'z3950_search.inc' %]
-<script type="text/javascript" src="[% interface %]/[% theme %]/js/z3950_search.js"></script>
 <style type="text/css">
 .linktools { background-color:#FFF;border-top:1px solid #DDD; border-left: 1px solid #DDD; border-right: 1px solid #666; border-bottom:1px solid #666;display: none; white-space: nowrap;}
 .linktools a { font-size : 85%; text-decoration:none; padding:.3em;;background-color:#FFF; display:block;float:left;border-right:1px solid #DDD;}
@@ -53,6 +15,7 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color :
           #custom-doc { width:53em;*width:51.72em;min-width:689px; margin:auto; text-align:left; }
    </style>
 </head>
+
 <body id="cat_z3950_search" class="cat">
 
 <div id="custom-doc" class="yui-t7">
@@ -222,6 +185,42 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color :
 </div>
 [% IF ( numberpending ) %]<h3 align="center">Still [% numberpending %] servers to search</h3>[% END %]
 
-</body>
-</html>
+[% MACRO jsinclude BLOCK %]
+    <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
+    <script type="text/javascript" src="[% interface %]/[% theme %]/js/z3950_search.js"></script>
+    [% INCLUDE 'datatables.inc' %]
+    <script type="text/javascript">
+        $(document).ready(function(){
+
+            $("#resultst").dataTable($.extend(true, {}, dataTablesDefaults, {
+                "sDom": 't',
+                "aoColumnDefs": [
+                    { "aTargets": [ -1,-2,-3 ], "bSortable": false, "bSearchable": false },
+                    { "aTargets": [ 1 ], "sType": "nsb-nse" },
+                ],
+                "aaSorting": [[ 1, "asc" ]],
+                "bPaginate": false
+            }));
+                /* Inline edit/delete links */
+                $("td").click(function(event){
+                    var $tgt = $(event.target);
+                    var row = $(this).parent();
+                    $(".linktools").hide();
+                    $("tr").removeClass("selected");
+                    row.addClass("selected");
+                    if($tgt.is("a")||$tgt.is(":nth-child(8)")||$tgt.is(":nth-child(9)")||$tgt.is(":nth-child(10)")){
+                        //Don't show inline links for cells containing links of their own.
+                    } else {
+                        var position = $(this).offset();
+                        var top = position.top+5;
+                        var left = position.left+5;
+                        $(".linktools",row).show().css("position","absolute").css("top",top).css("left",left);
+                    }
+                });
+
+        });
+    </script>
+    [% INCLUDE 'z3950_search.inc' %]
+[% END %]
 
+[% INCLUDE 'popup-bottom.inc' %]