Bug 19623: Move template JavaScript to the footer: Cataloging

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>
This commit is contained in:
Owen Leonard 2017-11-14 17:53:24 +00:00 committed by Jonathan Druart
parent 29f56fd5a0
commit c9839e8495
4 changed files with 289 additions and 283 deletions

View 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' %]
@ -286,4 +211,83 @@
</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' %]

View File

@ -3,126 +3,14 @@
[% 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' %]

View 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' %]

View 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' %]