Bug 15692 - Move some patron entry form JavaScript into members.js

We should strive to keep as much JavaScript as possible out of templates
in order to keep things modular and maximize the benefits of browser
caching. This patch moves JavaScript out of the patron entry template

Two other minor edits: Missing semicolons added on the advice of JSHint.

To test, apply the patch and confirm that the following interactions
still work on the patron entry form:

1. clear_entry(): With ExtendedPatronAttributes enabled, the "Clear"
   link next to any attribute form field should work to clear the field.

2. clone_entry(): With ExtendedPatronAttributes enabled and a repeatable
   attribute defined, it should be possible to click the "New" link to
   add another instance of that attribute's entry field.

3. update_category_code(): With ExtendedPatronAttributes enabled and an
   attribute defined which is limited to a single patron category,
   changing the patron category selection should correctly show or hide the
   attribute entry form.

4. select_user(): When adding or editing a patron with a "Child"
   category it should be possible to search for and select a guarantor
   to add to the record by clicking the "Set to patron" button.
   Selecting a new guarantor should change the text of the button from
   "Set to patron" to "Change."

5. noEnterSubmit(): This function should be correctly preventing you
   from hitting "ENTER" in any form field to submit the form.

6. guarantordelete(): When adding or editing a patron with a "Child"
   category, it should be possible to clear existing guarantor
   information by clicking the "Delete" button. Clicking the "Delete"
   button should change the text of the adjacent button to "Set to
   patron."

7. select_city(): With one or more cities defined it should be possible
   to use the drop-down menu of cities to populate the city, state, zip,
   and country fields.

8. Date of birth entry should have a maximum date limit of yesterday.
   The drop-down menu of years should go back 100 years.

9. Client-side validation rules should be in effect, requiring that a
   valid email address be entered in the primary email, secondary email,
   and alternate address email fields.

10.When editing a patron, the "Add manual restriction" link should
   display the form for adding a manual restriction, and clicking the
   "Cancel" link should hide it.

Signed-off-by: Marc Véron <veron@veron.ch>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com
This commit is contained in:
Owen Leonard 2016-01-28 10:20:07 -05:00 committed by Brendan Gallagher
parent ad63a6b8da
commit 004727fbbf
2 changed files with 136 additions and 130 deletions

View file

@ -143,10 +143,80 @@ function Dopop(link) {
}
function Dopopguarantor(link) {
var newin=window.open(link,'popup','width=600,height=400,resizable=no,toolbar=false,scrollbars=yes,top');
}
function clear_entry(node) {
var original = $(node).parent();
$("textarea", original).attr('value', '');
$("select", original).attr('value', '');
}
function clone_entry(node) {
var original = $(node).parent();
var clone = original.clone();
var newId = 50 + parseInt(Math.random() * 100000);
$("input,select,textarea", clone).attr('id', function() {
return this.id.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
});
$("input,select,textarea", clone).attr('name', function() {
return this.name.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
});
$("label", clone).attr('for', function() {
return $(this).attr("for").replace(/patron_attr_\d+/, 'patron_attr_' + newId);
});
$("input#patron_attr_" + newId, clone).attr('value','');
$("select#patron_attr_" + newId, clone).attr('value','');
$(original).after(clone);
return false;
}
function update_category_code(category_code) {
if ( $(category_code).is("select") ) {
category_code = $("#categorycode_entry").find("option:selected").val();
}
var mytables = $(".attributes_table");
$(mytables).find("li").hide();
$(mytables).find(" li[data-category_code='"+category_code+"']").show();
$(mytables).find(" li[data-category_code='']").show();
}
function select_user(borrowernumber, borrower) {
var form = $('#entryform').get(0);
if (form.guarantorid.value) {
$("#contact-details").find('a').remove();
$("#contactname, #contactfirstname").parent().find('span').remove();
}
var id = borrower.borrowernumber;
form.guarantorid.value = id;
$('#contact-details')
.show()
.find('span')
.after('<a target="blank" href="/cgi-bin/koha/members/moremember.pl?borrowernumber=' + id + '">' + id + '</a>');
$(form.contactname)
.val(borrower.surname)
.before('<span>' + borrower.surname + '</span>').get(0).type = 'hidden';
$(form.contactfirstname)
.val(borrower.firstname)
.before('<span>' + borrower.firstname + '</span>').get(0).type = 'hidden';
form.streetnumber.value = borrower.streetnumber;
form.address.value = borrower.address;
form.address2.value = borrower.address2;
form.city.value = borrower.city;
form.state.value = borrower.state;
form.zipcode.value = borrower.zipcode;
form.country.value = borrower.country;
form.branchcode.value = borrower.branchcode;
form.guarantorsearch.value = LABEL_CHANGE;
return 0;
}
$(document).ready(function(){
if($("#yesdebarred").is(":checked")){
$("#debarreduntil").show();
@ -165,4 +235,67 @@ $(document).ready(function(){
$(mandatory_fields).each(function(){
$("[name='"+this+"']").attr('required', 'required');
});
$("fieldset.rows input, fieldset.rows select").addClass("noEnterSubmit");
$("#guarantordelete").click(function() {
$("#contact-details").hide().find('a').remove();
$("#guarantorid, #contactname, #contactfirstname").each(function () { this.value = ""; });
$("#contactname, #contactfirstname")
.each(function () { this.type = 'text'; })
.parent().find('span').remove();
$("#guarantorsearch").val(LABEL_SET_TO_PATRON);
});
$("#select_city").change(function(){
var myRegEx=new RegExp(/(.*)\|(.*)\|(.*)\|(.*)/);
document.form.select_city.value.match(myRegEx);
document.form.zipcode.value=RegExp.$1;
document.form.city.value=RegExp.$2;
document.form.state.value=RegExp.$3;
document.form.country.value=RegExp.$4;
});
$("#dateofbirth").datepicker({ maxDate: "-1D", yearRange: "c-120:" });
$("#entryform").validate({
rules: {
email: {
email: true
},
emailpro: {
email: true
},
B_email: {
email: true
}
},
submitHandler: function(form) {
$("body, form input[type='submit'], form button[type='submit'], form a").addClass('waiting');
if (form.beenSubmitted)
return false;
else
form.beenSubmitted = true;
form.submit();
}
});
var mrform = $("#manual_restriction_form");
var mrlink = $("#add_manual_restriction");
mrform.hide();
mrlink.on("click",function(e){
$(this).hide();
mrform.show();
e.preventDefault();
});
$("#cancel_manual_restriction").on("click",function(e){
$('#debarred_expiration').val('');
$('#add_debarment').val(0);
$('#debarred_comment').val('');
mrlink.show();
mrform.hide();
e.preventDefault();
});
});

View file

@ -7,23 +7,6 @@
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
$("fieldset.rows input, fieldset.rows select").addClass("noEnterSubmit");
$("#guarantordelete").click(function() {
$("#contact-details").hide().find('a').remove();
$("#guarantorid, #contactname, #contactfirstname").each(function () { this.value = "" });
$("#contactname, #contactfirstname")
.each(function () { this.type = 'text' })
.parent().find('span').remove();
$("#guarantorsearch").val(_("Set to patron"));
});
$("#select_city").change(function(){
var myRegEx=new RegExp(/(.*)\|(.*)\|(.*)\|(.*)/);
document.form.select_city.value.match(myRegEx);
document.form.zipcode.value=RegExp.$1;
document.form.city.value=RegExp.$2;
document.form.state.value=RegExp.$3;
document.form.country.value=RegExp.$4;
});
[% IF categorycode %]
update_category_code( "[% categorycode %]" );
@ -33,120 +16,8 @@
update_category_code( category_code );
}
[% END %]
$("#dateofbirth").datepicker({ maxDate: "-1D", yearRange: "c-120:" });
$("#entryform").validate({
rules: {
email: {
email: true
},
emailpro: {
email: true
},
B_email: {
email: true
}
},
submitHandler: function(form) {
$("body, form input[type='submit'], form button[type='submit'], form a").addClass('waiting');
if (form.beenSubmitted)
return false;
else
form.beenSubmitted = true;
form.submit();
}
});
var mrform = $("#manual_restriction_form");
var mrlink = $("#add_manual_restriction");
mrform.hide();
mrlink.on("click",function(e){
$(this).hide();
mrform.show();
e.preventDefault();
});
$("#cancel_manual_restriction").on("click",function(e){
$('#debarred_expiration').val('');
$('#add_debarment').val(0);
$('#debarred_comment').val('');
mrlink.show();
mrform.hide();
e.preventDefault();
});
});
function clear_entry(node) {
var original = $(node).parent();
$("textarea", original).attr('value', '');
$("select", original).attr('value', '');
}
function clone_entry(node) {
var original = $(node).parent();
var clone = original.clone();
var newId = 50 + parseInt(Math.random() * 100000);
$("input,select,textarea", clone).attr('id', function() {
return this.id.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
});
$("input,select,textarea", clone).attr('name', function() {
return this.name.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
});
$("label", clone).attr('for', function() {
return $(this).attr("for").replace(/patron_attr_\d+/, 'patron_attr_' + newId);
});
$("input#patron_attr_" + newId, clone).attr('value','');
$("select#patron_attr_" + newId, clone).attr('value','');
$(original).after(clone);
return false;
}
function update_category_code(category_code) {
if ( $(category_code).is("select") ) {
category_code = $("#categorycode_entry").find("option:selected").val();
}
var mytables = $(".attributes_table");
$(mytables).find("li").hide();
$(mytables).find(" li[data-category_code='"+category_code+"']").show();
$(mytables).find(" li[data-category_code='']").show();
}
function select_user(borrowernumber, borrower) {
var form = $('#entryform').get(0);
if (form.guarantorid.value) {
$("#contact-details").find('a').remove();
$("#contactname, #contactfirstname").parent().find('span').remove();
}
var id = borrower.borrowernumber;
form.guarantorid.value = id;
$('#contact-details')
.show()
.find('span')
.after('<a target="blank" href="/cgi-bin/koha/members/moremember.pl?borrowernumber=' + id + '">' + id + '</a>');
$(form.contactname)
.val(borrower.surname)
.before('<span>' + borrower.surname + '</span>').get(0).type = 'hidden';
$(form.contactfirstname)
.val(borrower.firstname)
.before('<span>' + borrower.firstname + '</span>').get(0).type = 'hidden';
form.streetnumber.value = borrower.streetnumber;
form.address.value = borrower.address;
form.address2.value = borrower.address2;
form.city.value = borrower.city;
form.state.value = borrower.state;
form.zipcode.value = borrower.zipcode;
form.country.value = borrower.country;
form.branchcode.value = borrower.branchcode;
form.guarantorsearch.value = _("Change");
return 0;
}
var MSG_SEPARATOR = _("Separator must be / in field %s");
var MSG_INCORRECT_DAY = _("Invalid day entered in field %s");
var MSG_INCORRECT_MONTH = _("Invalid month entered in field %s");
@ -157,6 +28,8 @@
var MSG_DUPLICATE_SUSPICION = _("Please confirm whether this is a duplicate patron");
var MSG_PASSWORD_MISMATCH = _("The passwords entered do not match");
var MSG_PASSWORD_CONTAINS_TRAILING_SPACES = _("Password contains leading and/or trailing spaces.");
var LABEL_CHANGE = _("Change");
var LABEL_SET_TO_PATRON = _("Set to patron");
//]]>
</script>
<script type="text/javascript" src="[% themelang %]/js/members.js"></script>