params.app = 'PatronDisplay';
params.clamshell_node = document.getElementById('ClamShell_main');
params.patron_items_node = document.getElementById('PatronItems_main');
+ params.commandset_node = document.getElementById('universal_cmds');
params.popupset_node = document.getElementById('universal_popupset');
mw.focus_widget( document, 'PatronNavBar_refresh' );
mw.OpenILS_init(params);"
function patron_display_status_init(p) {
sdump('D_PATRON_DISPLAY_STATUS',"TESTING: patron_display_status.js: " + mw.G['main_test_variable'] + '\n');
- if (p.app_shell) p.w.app_shell = p.app_shell;
-
- p.w.patron_name_label = get_widget( p.w.document, p.patron_name_label );
+ p.patron_name_label = get_widget( p.w.document, p.patron_name_label );
if (p.show_name) {
sdump('D_PATRON_DISPLAY_STATUS','Showing name label\n');
p.w.patron_name_label.hidden = false;
p.patron_items_cols = circ_cols();
- p.paged_tree = paged_tree_init( { 'w' : p.w, 'node' : p.node, 'popupset_node' : p.popupset_node, 'cmd_next' : p.cmd_next, 'cmd_prev' : p.cmd_prev, 'cols' : p.patron_items_cols, 'hide_nav' : true, 'hits_per_page' : '9999', 'debug' : p.app } );
+ p.paged_tree = paged_tree_init( { 'w' : p.w, 'node' : p.node, 'popupset_node' : p.popupset_node, 'cols' : p.patron_items_cols, 'hide_nav' : true, 'hits_per_page' : '9999', 'debug' : p.app } );
p.add_patron_items = p.paged_tree.add_rows;
p.clear_patron_items = p.paged_tree.clear_tree;
}
p.map_patron_items_to_cols = function (patron_items, treeitem) {
- sdump('D_PATRON_ITEMS','p.map_patron_items_to_cols()\n');
+ sdump('D_PATRON_ITEMS','p.map_patron_items_to_cols( ' + patron_items + ',' + treeitem + ')\n');
patron_items_tree_map_patron_items_to_cols(p, patron_items, treeitem);
}
function patron_search_init(p) {
sdump('D_PATRON_SEARCH',"TESTING: patron_search.js: " + mw.G['main_test_variable'] + '\n');
- sdump('D_TRACE_ENTER',arg_dump(arguments));
+ sdump('D_CONSTRUCTOR',arg_dump(arguments));
+
+ /* gives: p.clamshell, p.right_panel, p.left_panel */
+ patron_search_clamshell_init(p);
+
+ /* gives: p.search_form */
+ patron_search_patron_search_form_init(p);
+
+ /* gives: p.search_results */
+ patron_search_patron_search_results_init(p);
- p.w.crazy_search = function (crazy_search_hash) {
- sdump('D_TRACE_ENTER',arg_dump(arguments));
- sdump('D_TRACE_EXIT',arg_dump(arguments));
- return patron_search( p.w, crazy_search_hash );
+ p.crazy_search = function (crazy_search_hash) {
+ return patron_search( crazy_search_hash );
};
-
- p.w.result_tree = spawn_patron_search_results(
- p.w.document,
- 'new_iframe',
- get_widget(p.w.document,p.right_panel), {
- 'onload' : patron_init_after_patron_search_results(p)
+
+ p.w.document.getElementById('PatronSearch_retrieve_button').addEventListener(
+ 'command',
+ function (ev) {
+ spawn_patron_display(
+ p.w.app_shell,'new_tab','main_tabbox',
+ {
+ 'patron' : retrieve_patron_by_id(
+ p._patron.id()
+ )
+ }
+ );
}
+ ,false
);
-
sdump('D_TRACE_EXIT',arg_dump(arguments));
return;
}
-function patron_search(search_win, crazy_search_hash) {
+function patron_search_clamshell_init(p) {
+ p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
+ p.left_panel = p.clamshell.first_deck;
+ p.right_panel = p.clamshell.second_deck;
+}
+
+function patron_search_patron_search_form_init(p) {
+ p.search_form = patron_search_form_init( { 'w' : p.w, 'node' : p.patron_search_form_node, 'debug' : p.ap } );
+ p.search_form.register_search_callback(
+ function (ev) {
+ sdump('D_PATRON_SEARCH','Submitted: ' + js2JSON(p.search_form.crazy_search_hash) + '\n');
+ if (p.crazy_search) {
+ p.search_results.clear_patrons();
+ p.search_results.add_patrons(
+ p.crazy_search( p.search_form.crazy_search_hash )
+ );
+ }
+ }
+ );
+}
+
+function patron_search_patron_search_results_init(p) {
+ p.search_results = patron_search_results_init( { 'w' : p.w, 'node' : p.patron_search_results_node, 'popupset_node' : p.popupset_node, 'debug' : p.app } );
+
+ p.redraw_search_results = function() {
+ p.search_results.clear_search_results();
+ if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
+ for (var i = 0; i < p._patron.checkouts().length; i++) {
+ p.search_results.add_search_results( [ i ] );
+ }
+ }
+
+ p.search_results.register_patron_select_callback(
+ function (ev) {
+ sdump('D_PATRON_SEARCH','Firing patron_select_callback\n');
+ var patrons = get_list_from_tree_selection( p.search_results.paged_tree.tree );
+ p._patron = retrieve_patron_by_id( patrons[ patrons.length - 1 ].getAttribute('record_id') )
+ render_fm( p.w.document, { 'au' : p._patron } );
+ }
+ );
+ p.search_results.register_flesh_patron_function(
+ function (treeitem) {
+ sdump('D_PATRON_SEARCH','Firing flesh_patron_function\n');
+ var record_id = treeitem.getAttribute('record_id');
+ retrieve_patron_by_id(
+ record_id,
+ function (request) {
+ sdump('D_PATRON_SEARCH','flesh_patron callback\n');
+ try {
+ var patron = request.getResultObject();
+ sdump('D_PATRON_SEARCH','patron = ' + js2JSON( patron ) + '\n');
+ try {
+ p.search_results.map_patron_to_cols( patron, treeitem );
+ } catch(E) {
+ sdump('D_ERROR','map in flesh_patron callback\n' + E+ '\n');
+ }
+ } catch(E) {
+ sdump('D_ERROR','flesh_patron callback\n' + E+ '\n');
+ }
+ sdump('D_PATRON_SEARCH','leaving flesh_patron callback\n');
+ }
+ );
+ }
+ );
+ p.search_results.register_context_builder(
+ function (ev) {
+ sdump('D_PATRON_DISPLAY','Firing context_builder\n');
+ empty_widget(p.search_results.paged_tree.popup);
+ var search_results = get_list_from_tree_selection( p.search_results.paged_tree.tree );
+ var menuitem;
+
+ /*** PATRON DISPLAY ***/
+ menuitem = p.search_results.paged_tree.w.document.createElement('menuitem');
+ p.search_results.paged_tree.popup.appendChild( menuitem );
+ menuitem.setAttribute('label',getString('patron.context_display'));
+ menuitem.addEventListener(
+ 'command',
+ function (ev) {
+ sdump('D_PATRON_DISPLAY','Firing renew context\n');
+ for (var i = 0; i < search_results.length; i++) {
+ spawn_patron_display(
+ p.w.app_shell,'new_tab','main_tabbox',
+ {
+ 'patron' : retrieve_patron_by_id(
+ search_results[i].getAttribute('record_id')
+ )
+ }
+ );
+ }
+ },
+ false
+ );
+ }
+ );
+}
+
+function patron_search(crazy_search_hash) {
sdump('D_PATRON_SEARCH',arg_dump(arguments));
sdump('D_TRACE_ENTER',arg_dump(arguments));
var result = [];
return result;
}
-function patron_init_after_patron_search_form(p) {
- sdump('D_PATRON_SEARCH',arg_dump(arguments));
- sdump('D_TRACE_ENTER',arg_dump(arguments));
- sdump('D_TRACE_EXIT',arg_dump(arguments));
- return function(form_w) {
- sdump('D_PATRON_SEARCH',arg_dump(arguments));
- sdump('D_TRACE_ENTER',arg_dump(arguments));
- form_w.register_search_callback(
- function (ev) {
- sdump('D_PATRON_SEARCH','Submitted: ' +
- js2JSON(form_w.crazy_search_hash) + '\n');
- if (p.w.crazy_search) {
- p.w.result_tree.clear_patrons();
- p.w.result_tree.add_patrons(
- p.w.crazy_search( form_w.crazy_search_hash )
- );
- }
- }
- );
- consider_Timeout(
- function () {
- sdump('D_TIMEOUT','******** timeout occurred after patron_search_form in patron_search.js\n');
- form_w.status_w = spawn_patron_display_status(
- form_w.document,
- 'new_iframe',
- form_w.selection_canvas,
- { 'show_name' : true, 'show_retrieve_button' : true, 'app_shell' : p.w.app_shell }
- );
- }, 1
- );
- sdump('D_TRACE_EXIT',arg_dump(arguments));
- return;
- };
-}
-
-function patron_init_after_patron_search_results(p) {
- sdump('D_PATRON_SEARCH',arg_dump(arguments));
- sdump('D_TRACE_ENTER',arg_dump(arguments));
- sdump('D_TRACE_EXIT',arg_dump(arguments));
- return function(results_w) {
- sdump('D_PATRON_SEARCH',arg_dump(arguments));
- sdump('D_TRACE_ENTER',arg_dump(arguments));
- results_w.register_patron_select_callback(
- function (ev) {
- sdump('D_PATRON_SEARCH','Firing patron_select_callback\n');
- var patrons = get_list_from_tree_selection( results_w.tree_win.tree );
- p.w.search_form.status_w.display_patron(
- retrieve_patron_by_id( patrons[ patrons.length - 1 ].getAttribute('record_id') )
- );
- }
- );
- results_w.register_flesh_patron_function(
- function (treeitem) {
- sdump('D_PATRON_SEARCH',arg_dump(arguments));
- user_async_request(
- 'open-ils.actor',
- 'open-ils.actor.user.fleshed.retrieve',
- [ G.auth_ses[0], treeitem.getAttribute('record_id') ],
- function (request) {
- sdump('D_PATRON_SEARCH','In flesh_patron_function: ' + arg_dump(arguments));
- try {
- var patron = request.getResultObject();
- sdump('D_PATRON_SEARCH','patron = ' + js2JSON( patron ) + '\n');
- results_w.map_patron_to_cols( patron, treeitem );
- } catch(E) {
- sdump('D_ERROR',js2JSON(E) + '\n');
- }
- }
- );
- }
- );
- results_w.register_context_builder(
- function (ev) {
- empty_widget(results_w.tree_win.popup);
- var patrons = get_list_from_tree_selection( results_w.tree_win.tree );
- var menuitem = results_w.tree_win.document.createElement('menuitem');
- results_w.tree_win.popup.appendChild( menuitem );
- menuitem.setAttribute('label','Open in tab');
- menuitem.addEventListener(
- 'command',
- function (ev) {
- for (var i = 0; i < patrons.length; i++) {
- spawn_patron_display(
- p.w.app_shell,'new_tab','main_tabbox',
- {
- 'patron' : retrieve_patron_by_id(
- patrons[i].getAttribute('record_id')
- )
- }
- );
- }
- },
- false
- );
- }
- );
- sdump('D_TRACE_EXIT',arg_dump(arguments));
- return;
- };
-}
<page id="patron_search_win"
orient="vertical" style="overflow: auto" width="800" height="500"
sizemode="maximized" persist="width height"
- onload="params.clamshell = 'PatronSearch_clamshell';
- params.right_panel = 'PatronSearch_right_panel';
- params.w = window;
+ onload="params.w = window;
params.app = 'PatronSearch';
+ params.clamshell_node = document.getElementById('ClamShell_main');
+ params.patron_display_status_node = document.getElementById('PatronDisplayStatus_main');
+ params.patron_search_form_node = document.getElementById('PatronSearchForm_main');
+ params.patron_search_results_node = document.getElementById('PatronSearchResults_main');
+ params.popupset_node = document.getElementById('universal_popupset');
+ mw.focus_widget( document, 'pst1' );
mw.OpenILS_init(params);"
onunload="mw.OpenILS_exit(params);"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
function patron_search_form_init(p) {
sdump('D_PATRON_SEARCH_FORM',"TESTING: patron_search_form.js: " + mw.G['main_test_variable'] + '\n');
- p.w.crazy_search_hash = {}; // hash[ field ] = { 'value' : ???, 'group' : ??? }
+ sdump('D_CONSTRUCTOR',arg_dump(arguments));
- var nl = p.w.document.getElementsByTagName('textbox');
- for (var i = 0; i < nl.length; i++)
+ p.crazy_search_hash = {}; // hash[ field ] = { 'value' : ???, 'group' : ??? }
+
+ var nl = p.node.getElementsByTagName('textbox');
+ for (var i = 0; i < nl.length; i++) {
nl[i].addEventListener(
'change',
function (ev) {
return patron_search_form_textbox_handler(
- p.w.document,
ev.target,
- p.w.crazy_search_hash); },
- false);
-
- p.w.selection_canvas = get_widget( p.w.document, p.selection_canvas );
+ p.crazy_search_hash
+ );
+ },false
+ );
+ }
- var search_command = p.w.document.getElementById('cmd_search');
- var clear_command = p.w.document.getElementById('cmd_clear');
+ var search_button = p.node.getElementsByAttribute('name','button_search')[0];
+ var clear_button = p.node.getElementsByAttribute('name','button_clear')[0];
- p.w.register_search_callback = function (f) { search_command.addEventListener( 'command',f,false ); };
+ p.register_search_callback = function (f) { search_button.addEventListener( 'command',f,false ); };
- if (clear_command)
- clear_command.addEventListener(
+ if (clear_button) {
+ clear_button.addEventListener(
'command',
function (ev) {
- var nl = p.w.document.getElementsByTagName('textbox');
+ var nl = p.node.getElementsByTagName('textbox');
for (var i = 0; i < nl.length; i++)
nl[i].value = '';
- p.w.crazy_search_hash = {}; },
- false);
- else
- sdump('D_PATRON_SEARCH_FORM',"No cmd_clear element.\n");
+ p.crazy_search_hash = {};
+ },false
+ );
+ } else {
+ sdump('D_PATRON_SEARCH_FORM',"No name=button_clear element.\n");
+ }
- consider_Timeout(
- function() {
- sdump('D_TIMEOUT','******** timeout occurred in patron_search_form.js\n');
- if (p.onload) {
- try {
- sdump('D_TRACE','trying psuedo-onload: ' + p.onload + '\n');
- p.onload(p.w);
- } catch(E) {
- sdump('D_ERROR', js2JSON(E) + '\n' );
- }
- }
- }, 0
- );
- return;
+ return p;
}
-function patron_search_form_textbox_handler(doc,textbox,search_hash) {
+function patron_search_form_textbox_handler(textbox,search_hash) {
sdump('D_PATRON_SEARCH_FORM',arg_dump(arguments));
- textbox = get_widget(doc,textbox);
var field = textbox.getAttribute('field');
var group = textbox.getAttribute('group');
var value = textbox.value;
sizemode="maximized" persist="width height"
onload="params.w = window;
params.app = 'PatronSearchForm';
- params.selection_canvas = 'PatronSearchForm_selection';
mw.OpenILS_init(params);"
onunload="mw.OpenILS_exit(params);"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<command id="cmd_broken" oncommand="
alert('Not Yet Implemented'); "/>
- <command id="cmd_patron_search_form_search" />
- <command id="cmd_patron_search_form_clear" />
-
</commandset>
<!-- main widget for patron_search_form -->
<caption id="psgf_gbc" label='&patron_search_form.caption;' />
<grid id="psg" />
</groupbox>
- <groupbox id="PatronDisplayStatus_groupbox">
+ <groupbox id="PatronDisplayStatus_groupbox" name="selection_canvas"/>
</box>
<!-- group 0 = user group 1 = address group 2 = phone, ident -->
</row>
<row id="psr12">
<spacer id="pss12"/>
- <button id="psb12" label="&patron_search_form.search.label;" accesskey="&patron_search_form.search.accesskey;" command="cmd_search"/>
+ <button id="psb12" label="&patron_search_form.search.label;" accesskey="&patron_search_form.search.accesskey;" name="button_search"/>
</row>
<row id="psr13">
<spacer id="pss13"/>
- <button id="psb13" label="&patron_search_form.clear.label;" accesskey="&patron_search_form.clear.accesskey;" command="cmd_clear"/>
+ <button id="psb13" label="&patron_search_form.clear.label;" accesskey="&patron_search_form.clear.accesskey;" name="button_clear"/>
</row>
</rows>
</grid>
</box>
<deck id="ClamShell_first_deck">
- <box id="PatronSearchForm_main">
+ <box id="PatronSearchForm_main"/>
</deck>
<deck id="ClamShell_second_deck">
-
+ <box id="PatronSearchResults_main"/>
</deck>
-<hbox id="PatronSearch_DisplayStatus_insert1"/>
+<hbox id="PatronSearch_DisplayStatus_insert1">
<label id="PatronSearch_patron_name" class="patronNameMedium"
tooltiptext="&patron_display.name.label;"
value=" "
render="true" fm_class="au"
render_value="patron_get_full_name($$)" />
</hbox>
-<hbox id="PatronSearch_DisplayStatus_insert2"/>
+<hbox id="PatronSearch_DisplayStatus_insert2">
<button id="PatronSearch_retrieve_button"
label="&patron_navbar.retrieve;"
accesskey="&patron_navbar.retrieve.accesskey;"/>
sdump('D_PATRON_SEARCH_RESULTS',"TESTING: patron_search_results.js: " + mw.G['main_test_variable'] + '\n');
sdump('D_TRACE_ENTER',arg_dump(arguments));
- p.w.patron_cols = [
+ p.patron_cols = [
{
'id' : 'id_col', 'label' : getString('au_label_id'), 'flex' : 1,
'primary' : true, 'hidden' : false, 'fm_field_render' : '.id()'
}
];
- p.w.tree_win = spawn_paged_tree(
- p.w.document, 'new_iframe', p.paged_tree, {
- 'cols' : p.w.patron_cols,
- 'onload' : patron_search_results_init_after_paged_tree(p)
- }
- );
+ p.paged_tree = paged_tree_init( { 'w' : p.w, 'node' : p.node, 'popupset_node' : p.popupset_node, 'cols' : p.patron_cols, 'debug' : p.app } );
+ p.add_patrons = p.paged_tree.add_rows;
+ p.clear_patrons = p.paged_tree.clear_tree;
- p.w.register_patron_select_callback = function (f) {
- p.w._patron_select_callback = f;
+ p.register_patron_select_callback = function (f) {
+ sdump('D_PATRON_SEARCH_RESULTS','p.register_patron_select_callback(' + f + ')\n');
+ p.paged_tree.register_select_callback( f );
}
- p.w.register_flesh_patron_function = function (f) {
- p.w._flesh_patron_function = f;
+ p.register_flesh_patron_function = function (f) {
+ sdump('D_PATRON_SEARCH_RESULTS','p.register_flesh_patron_function(' + f + ')\n');
+ p.paged_tree.register_flesh_row_function( f );
}
- p.w.register_context_builder = function (f) {
- p.w._context_function = f;
+ p.register_context_builder = function (f) {
+ sdump('D_PATRON_SEARCH_RESULTS','p.register_context_builder(' + f + ')\n');
+ p.paged_tree.register_context_builder( f );
}
- p.w.map_patron_to_cols = function (patron, treeitem) {
+ p.map_patron_to_cols = function (patron, treeitem) {
+ sdump('D_PATRON_SEARCH_RESULTS','p.map_patron_to_cols(' + patron + ',' + treeitem + ')\n');
patron_search_results_map_patron_to_cols(p, patron, treeitem);
}
- consider_Timeout(
- function() {
- sdump('D_TIMEOUT','******** timeout occurred in patron_search_results.js\n');
- if (p.onload) {
- try {
- sdump('D_TRACE','trying psuedo-onload: ' + p.onload + '\n');
- p.onload(p.w);
- } catch(E) {
- sdump('D_ERROR', js2JSON(E) + '\n' );
- }
- }
- }, 0
- );
- sdump('D_TRACE_EXIT',arg_dump(arguments));
- return;
-}
-
-function patron_search_results_init_after_paged_tree(p) {
- sdump('D_PATRON_SEARCH_RESULTS',arg_dump(arguments));
- sdump('D_TRACE_ENTER',arg_dump(arguments));
- var result = function (tree_win) {
- sdump('D_TRACE_ENTER',arg_dump(arguments));
- sdump('D_PATRON_SEARCH_RESULTS',arg_dump(arguments));
- tree_win.register_select_callback( p.w._patron_select_callback );
- tree_win.register_flesh_row_function( p.w._flesh_patron_function );
- tree_win.register_context_builder( p.w._context_function );
- p.w.add_patrons = tree_win.add_rows;
- p.w.clear_patrons = tree_win.clear_tree;
- sdump('D_TRACE_EXIT',arg_dump(arguments));
- return;
- };
sdump('D_TRACE_EXIT',arg_dump(arguments));
- return result;
+ return p;
}
function patron_search_results_map_patron_to_cols(p, patron, treeitem) {
sdump('D_PATRON_SEARCH_RESULTS',arg_dump(arguments));
sdump('D_TRACE_ENTER',arg_dump(arguments));
var cols = new Array();
- for (var i = 0; i < p.w.patron_cols.length; i++) {
- var hash = p.w.patron_cols[i];
+ for (var i = 0; i < p.patron_cols.length; i++) {
+ var hash = p.patron_cols[i];
sdump('D_PATRON_SEARCH_RESULTS','Considering ' + js2JSON(hash) + '\n');
var cmd = 'patron'+hash.fm_field_render;
sdump('D_PATRON_SEARCH_RESULTS','cmd = ' + cmd + '\n');
cols.push( col );
}
sdump('D_PATRON_SEARCH_RESULTS','cols = ' + js2JSON(cols) + '\n');
- p.w.tree_win.map_cols_to_treeitem( cols, treeitem );
+ p.paged_tree.map_cols_to_treeitem( cols, treeitem );
sdump('D_TRACE_EXIT',arg_dump(arguments));
}
}
}
-function retrieve_patron_by_barcode( barcode ) {
+function retrieve_patron_by_barcode( barcode, f ) {
sdump('D_PATRON_UTILS',arg_dump(arguments));
if (!barcode) return null;
- return retrieve_patron_by_method( barcode, 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode' );
+ return retrieve_patron_by_method( barcode, 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode', f );
}
-function retrieve_patron_by_id( id ) {
+function retrieve_patron_by_id( id, f ) {
sdump('D_PATRON_UTILS',arg_dump(arguments));
if (!id) return null;
- return retrieve_patron_by_method( id, 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve' );
+ return retrieve_patron_by_method( id, 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', f );
}
-function retrieve_patron_by_method( id, app, method ) {
+function retrieve_patron_by_method( id, app, method, f ) {
sdump('D_PATRON_UTILS',arg_dump(arguments));
if (!id) return null;
- try {
- var au = user_request(
- app,
- method,
- [ mw.G.auth_ses[0], id ]
- )[0];
- return au;
- } catch(E) {
- handle_error(E);
- return null;
+ if (f) {
+ try {
+ user_async_request(
+ app,
+ method,
+ [ mw.G.auth_ses[0], id ],
+ f
+ );
+ } catch(E) {
+ sdump('D_ERROR',E);
+ }
+ } else {
+ try {
+ var au = user_request(
+ app,
+ method,
+ [ mw.G.auth_ses[0], id ]
+ )[0];
+ return au;
+ } catch(E) {
+ sdump('D_ERROR',E);
+ return null;
+ }
}
}
}
function user_async_request(app,name,params,func) {
- sdump('D_SES','=-=-=-=-= user_async_request: ' + js2JSON(func) + '\n');
- sdump('D_SES','request '+(app)+' '+(name)+' '+js2JSON(params)+'\n');
+ sdump('D_SES','=-=-=-=-= user_async_request:\n');
+ sdump('D_SES','request '+(app)+' '+(name)+' '+js2JSON(params)+ ' ' + func + '\n');
var request = new RemoteRequest( app, name );
for(var index in params) {
request.addParam(params[index]);
circ.context_checkin=Check In
circ.context_renew=Renew
circ.context_opac=Show Title in OPAC
-circ.context_editor=Edit Copy
+circ.context_edit=Edit Copy
+patron.context_display=Retrieve Patron
au_label_id=Record ID
au_label_prefix=Prefix