Many OPAC holdings tables are not designed for quick scanning by users. But with JavaScript, we can fix this. Here is the sample holdings table from Chapter 7.
| Location | Call No. | Status | 
|---|---|---|
| Mary Idema Pew - 3rd Floor | PS3562.E353 G6 2015 | DUE 09-17-15 +2 HOLDS | 
| Steelcase Popular Reading | PS3562.E353 G6 2015 c.2 | AVAILABLE | 
| Mary Idema Pew - Popular Reading (1st Floor) | PS3562.E353 G6 2015 c.3 | DUE 10-07-15 | 
<table class="bib_items">
	<tbody>
		<tr class="bibItemsHeader">
			<th width="38%" class="bibItemsHeader">Location</th>
			<th width="38%" class="bibItemsHeader">Call No.</th>
			<th width="24%" class="bibItemsHeader">Status</th>
		</tr>
		<tr class="bibItemsEntry">
			<td width="38%">Mary Idema Pew - 3rd Floor</td>
			<td width="38%">PS3562.E353 G6 2015</td>
			<td width="24%">DUE 09-17-15 +2 HOLDS</td>
		</tr>
		<tr class="bibItemsEntry">
			<td width="38%">Steelcase Popular Reading</td>
			<td width="38%">PS3562.E353 G6 2015 c.2</td>
			<td width="24%">AVAILABLE</td>
		</tr>
		<tr class="bibItemsEntry">
			<td width="38%">Mary Idema Pew - Popular Reading (1st Floor)</td>
			<td width="38%">PS3562.E353 G6 2015 c.3</td>
			<td width="24%">DUE 10-07-15</td>
		</tr>
	</tbody>
</table>The following code scrapes the data from the table and builds a new <ul> element with the data. It also changes the styles of the availability statement depending on whether the item is currently available or not.
var newList = '<ul id="availability-list">';
$('table.bib_items').find('tr.bibItemsEntry').each(function() {
	// Save content to variables
	var location = $(this).find('td:first').text();
	var callNo = $(this).find('td:nth-child(2)').text();
	var availability = $(this).find('td:last').text();
	var avail_classes="availability unavail";
	if(availability.indexOf('AVAILABLE') > -1) {
		avail_classes="availability avail";
	}
	// Build new list item, append to newList
	newList += '<li><span class="' + avail_classes + '">' + availability + '</span> <span class="location">' + location + '</span> <span class="callno">' + callNo + '</span></li>';
});
newList += '</ul>';
$('table.bib_items').css('display','block').html(newList);Below is the drop-down <select> element we use in Illiad to allow users to change default pickup locations. The three letter code at the top in generated automatically by Illiad.
<label for="NVTGC">Preferred Pickup Location</label>
<select id="NVTGC" name="NVTGC">
  <optgroup label="Current pickup location">
    <option value="<#PARAM name="NVTGC">" selected><#PARAM name="NVTGC"></option>
  </optgroup>
  <optgroup label="Select new pickup location">
    <option value="LIB"> Mary Idema Pew Library @ Allendale</option>
    <option value="STEEL">Steelcase Library @ DeVos</option>
    <option value="FREY">Frey Learning Center @ CHS</option>
  </optgroup>
  <optgroup label="Distance Education?">
    <option value="OCS">Ship Books to me</option>
  </optgroup>
</select>We want to change the text of the three letter code to something understandable by our users, so we can use this JavaScript to run a set of conditionals against the selected value:
$('option:contains("LIB")').text('Mary Idema Pew Library @ Allendale');
$('option:contains("STEEL")').text('Steelcase Library @ DeVos');
$('option:contains("FREY")').text('Frey Learning Center @ CHS');
$('option:contains("OCS")').text('Ship Books to Me');Sometimes we need to hide an address until it is needed. Try running the following code in the console, and then select "Ship Books to Me" from the <select> above:
$('#address-fields').hide();
$('select#NVTGC').on('change', function() {
	if($(this).val() == 'OCS') {
		$('#address-fields').slideDown(400);
	} else {
		$('#address-fields').slideUp(400);    
	}
});We found that many of our users on mobile devices expected to have a "clear" button on each <input> to make it easier to clear out the contents of a field. Below are the First and Last Name fields from a form.
<label for="FirstName">First Name</label>
<input id="FirstName" name="FirstName"type="text" value="Matthew">
<span class="FirstName-clear"></span>
<label for="LastName">Last Name</label>
<input id="LastName" name="LastName" type="text" value="Reidsma">
<span class="LastName-clear"></span>To add the clear buttons, we can run the following code in the console. It also applies the styles to the page that position the buttons properly.
$('.clear-button-example').find('input[type="text"]').each(function() {
	var inputID = $(this).attr('id');
	$("#" + inputID + "-clear").addClass('clear-button').text('X').click(function() {
		$('input#' + inputID).val('');
		$('input#' + inputID).focus();
	});
});