--- /dev/null
+[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = "Configure Authority Browse Axes" %]
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
+ <div>Browse Axes</div>
+ <div>
+ <button dojoType="dijit.form.Button" onClick="aba_grid.showCreateDialog()">New Browse Axis</button>
+ <button dojoType="dijit.form.Button" onClick="aba_grid.deleteSelected()">Delete Selected</button>
+ </div>
+ </div>
+ <div>
+ <table jsId="aba_grid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight="true"
+ defaultCellWidth="'auto'"
+ fieldOrder="['code','name','description','sorter']"
+ suppressEditFields="['id']"
+ query="{id: '*'}"
+ fmClass="aba"
+ editOnEnter="true">
+ </table>
+ </div>
+</div>
+<script type="text/javascript">
+ dojo.require("openils.widget.AutoGrid");
+
+ function my_init() {
+ aba_grid.overrideWidgetArgs.sorter = {
+ "dijitArgs": {"query": {"sorter": "t"}}
+ };
+ aba_grid.loadAll({"order_by": {"aba": "code"}});
+ }
+
+ openils.Util.addOnLoad(my_init);
+</script>
+[% END %]
--- /dev/null
+[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = "Configure Browse Axis-Authority Field Maps" %]
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
+ <div>Browse Axis-Authority Field Maps</div>
+ <div>
+ <button dojoType="dijit.form.Button" onClick="abaafm_grid.showCreateDialog()">New Browse Axis-Authority Field Map</button>
+ <button dojoType="dijit.form.Button" onClick="abaafm_grid.deleteSelected()">Delete Selected</button>
+ </div>
+ </div>
+ <div id="authority-field-metadata-holder" class="hidden">
+ Showing only browse axis-authority field maps linked to authority field:
+ <a id="authority-field-metadata"></a>
+ </div>
+ <div>
+ <table jsId="abaafm_grid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight="true"
+ defaultCellWidth="'auto'"
+ suppressEditFields="['id']"
+ fieldOrder="['axis','field']"
+ query="{id: '*'}"
+ fmClass="abaafm"
+ editOnEnter="true">
+ </table>
+ </div>
+</div>
+<script type="text/javascript"
+ src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
+<script type="text/javascript">
+ dojo.require("openils.widget.AutoGrid");
+ dojo.require("openils.CGI");
+ dojo.require("openils.PermaCrud");
+
+ dojo.requireLocalization("openils.authority", "authority");
+ var localeStrings =
+ dojo.i18n.getLocalization("openils.authority", "authority");
+
+ var cgi, pcrud;
+
+ function my_init() {
+ var authority_field, control_set_id;
+ var where = {"id": {"!=": null}};
+
+ cgi = new openils.CGI();
+ pcrud = new openils.PermaCrud();
+
+ authority_field = cgi.param("acsaf");
+ control_set_id = cgi.param("acs");
+
+ if (authority_field) {
+ /* This block not only limits the scope of our search for abaafm
+ objects, but makes sure that we create/update only abaafm's
+ that link back to the authority field (acsaf) we're interested
+ in. */
+ authority_field = pcrud.retrieve("acsaf", authority_field);
+ where.field = authority_field.id();
+ render_authority_field_metadata(authority_field, control_set_id);
+
+ abaafm_grid.overrideEditWidgets.field =
+ new dijit.form.TextBox({"disabled": true});
+ abaafm_grid.overrideEditWidgets.field.shove =
+ {"create": authority_field.id()};
+ }
+
+ abaafm_grid.loadAll({"order_by": {"abaafm": "axis"}}, where);
+ }
+
+ openils.Util.addOnLoad(my_init);
+</script>
+[% END %]
--- /dev/null
+[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = "Configure Authority Control Sets" %]
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
+ <div>Control Sets</div>
+ <div>
+ <button dojoType="dijit.form.Button" onClick="acs_grid.showCreateDialog()">New Control Set</button>
+ <button dojoType="dijit.form.Button" onClick="acs_grid.deleteSelected()">Delete Selected</button>
+ </div>
+ </div>
+ <div>
+ <table jsId="acs_grid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight="true"
+ defaultCellWidth="'auto'"
+ fieldOrder="['name','description','id']"
+ suppressEditFields="['id']"
+ query="{id: '*'}"
+ fmClass="acs"
+ editOnEnter="true">
+ <thead>
+ <tr>
+ <th name="Other properties"
+ field="id" formatter="format_acs_id"></th>
+ </tr>
+ </thead>
+ </table>
+</div>
+
+<script type="text/javascript">
+ dojo.require("openils.widget.AutoGrid");
+ dojo.require("openils.CGI");
+ dojo.requireLocalization("openils.authority", "authority");
+ var localeStrings =
+ dojo.i18n.getLocalization("openils.authority", "authority");
+ var acs_cache = {};
+ var cgi;
+
+ function format_acs_id(id) {
+ if (id) {
+ var tlen = acs_cache[id].thesauri() ?
+ acs_cache[id].thesauri().length : 0;
+ var alen = acs_cache[id].authority_fields() ?
+ acs_cache[id].authority_fields().length : 0;
+
+ return "<a href='" + oilsBasePath +
+ "/conify/global/cat/authority/thesaurus?acs=" + id + "'>" +
+ dojo.string.substitute(localeStrings.THESAURI, [tlen]) +
+ "</a> " + " <a href='" + oilsBasePath +
+ "/conify/global/cat/authority/control_set_authority_field?acs=" +
+ id + "'>" +
+ dojo.string.substitute(localeStrings.AUTHORITY_FIELDS, [alen]) +
+ "</a>";
+ }
+ }
+
+ function acs_grid_loader() {
+ acs_cache = {};
+ acs_grid.resetStore();
+ acs_grid.showLoadProgressIndicator();
+ fieldmapper.standardRequest(
+ ["open-ils.cat", "open-ils.cat.authority.control_set.retrieve"], {
+ "async": true,
+ "params": [acs_grid.displayLimit, acs_grid.displayOffset, cgi.param("focus")],
+ "onresponse": function(r) {
+ if (r = openils.Util.readResponse(r)) {
+ acs_cache[r.id()] = r;
+ acs_grid.store.newItem(r.toStoreItem());
+ }
+ },
+ "oncomplete": function() {
+ acs_grid.hideLoadProgressIndicator();
+ }
+ }
+ );
+ }
+
+ openils.Util.addOnLoad(
+ function() {
+ cgi = new openils.CGI();
+
+ acs_grid.onPostCreate = function(obj) {acs_cache[obj.id()] = obj;};
+ acs_grid.dataLoader = acs_grid_loader;
+ acs_grid_loader();
+ }
+ );
+</script>
+[% END %]
--- /dev/null
+[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = "Configure Authority Authority Fields" %]
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
+ <div>Authority Fields</div>
+ <div>
+ <button dojoType="dijit.form.Button" onClick="acsaf_grid.showCreateDialog()">New Authority Field</button>
+ <button dojoType="dijit.form.Button" onClick="acsaf_grid.deleteSelected()">Delete Selected</button>
+ </div>
+ </div>
+ <div id="control-set-metadata-holder" class="hidden">
+ Showing only authority fields linked to control set:
+ <a id="control-set-metadata"></a>
+ </div>
+ <div>
+ <table jsId="acsaf_grid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight="true"
+ defaultCellWidth="'12%'"
+ fieldOrder="['id','name','description','main_entry','control_set','tag','sf_list','bib_fields','axis_maps']"
+ suppressEditFields="['id']"
+ query="{id: '*'}"
+ fmClass="acsaf"
+ editOnEnter="true">
+ <thead>
+ <tr>
+ <th field="bib_fields" name="Controlled Bib Fields"
+ get="get_just_id" formatter="format_bib_fields"></th>
+ <th field="axis_maps" name="Axes"
+ get="get_just_id" formatter="format_axis_maps"></th>
+ </tr>
+ </thead>
+ </table>
+ </div>
+</div>
+<script type="text/javascript"
+ src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
+<script type="text/javascript">
+ dojo.require("openils.widget.AutoGrid");
+ dojo.require("openils.CGI");
+ dojo.require("openils.PermaCrud");
+
+ dojo.requireLocalization("openils.authority", "authority");
+ var localeStrings =
+ dojo.i18n.getLocalization("openils.authority", "authority");
+
+ var cgi, pcrud, control_set;
+ var acsaf_cache = {};
+
+ function acsaf_grid_loader() {
+ acsaf_cache = {};
+ acsaf_grid.resetStore();
+ acsaf_grid.showLoadProgressIndicator();
+ fieldmapper.standardRequest(
+ ["open-ils.cat",
+ "open-ils.cat.authority.control_set_authority_field.retrieve"],{
+ "async": true,
+ "params": [
+ acsaf_grid.displayLimit, acsaf_grid.displayOffset,
+ control_set.id(), cgi.param("focus")
+ ],
+ "onresponse": function(r) {
+ if (r = openils.Util.readResponse(r)) {
+ acsaf_cache[r.id()] = r;
+ acsaf_grid.store.newItem(r.toStoreItem());
+ }
+ },
+ "oncomplete": function() {
+ acsaf_grid.hideLoadProgressIndicator();
+ }
+ }
+ );
+ }
+
+ function get_just_id(row_index, item) {
+ if (item) return this.grid.store.getValue(item, "id");
+ }
+
+ function format_axis_maps(id) {
+ if (id) {
+ var text = acsaf_cache[id].axis_maps().map(
+ function(f) { return f.axis().name(); }
+ ).sort().join(", ") || localeStrings.NONE_LINK;
+ var href = "browse_axis_authority_field_map?";
+ if (control_set)
+ href += "acs=" + control_set.id() + "&";
+ href += "acsaf=" + id;
+ return "<a href='" + href + "'>" + text + "</a>";
+ }
+ }
+
+ function format_bib_fields(id) {
+ if (id) {
+ var text = acsaf_cache[id].bib_fields().map(
+ function(f) { return f.tag(); }
+ ).sort().join(", ") || localeStrings.NONE_LINK;
+ var href = "control_set_bib_field?";
+ if (control_set)
+ href += "acs=" + control_set.id() + "&";
+ href += "acsaf=" + id;
+ return "<a href='" + href + "'>" + text + "</a>";
+ }
+ }
+
+ function my_init() {
+ cgi = new openils.CGI();
+ pcrud = new openils.PermaCrud();
+
+ control_set = cgi.param("acs");
+ if (control_set) {
+ control_set = pcrud.retrieve("acs", control_set);
+ render_control_set_metadata(control_set);
+
+ acsaf_grid.overrideEditWidgets.control_set =
+ new dijit.form.TextBox({"disabled": true});
+ acsaf_grid.overrideEditWidgets.control_set.shove =
+ {"create": control_set.id()};
+ }
+
+ acsaf_grid.onPostCreate = function(o) {
+ o.bib_fields([]);
+ o.axis_maps([]);
+ acsaf_cache[o.id()] = o;
+ };
+
+ acsaf_grid.dataLoader = acsaf_grid_loader;
+ acsaf_grid_loader();
+ }
+
+ openils.Util.addOnLoad(my_init);
+</script>
+[% END %]
--- /dev/null
+[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = "Configure Authority Control Set Bib Fields" %]
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
+ <div>Control Set Bib Fields</div>
+ <div>
+ <button dojoType="dijit.form.Button" onClick="acsbf_grid.showCreateDialog()">New Control Set Bib Field</button>
+ <button dojoType="dijit.form.Button" onClick="acsbf_grid.deleteSelected()">Delete Selected</button>
+ </div>
+ </div>
+ <div id="authority-field-metadata-holder" class="hidden">
+ Showing only control set bib fields linked to authority field:
+ <a id="authority-field-metadata"></a>
+ </div>
+ <div>
+ <table jsId="acsbf_grid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight="true"
+ defaultCellWidth="'auto'"
+ suppressEditFields="['id']"
+ fieldOrder="['tag','authority_field']"
+ query="{id: '*'}"
+ fmClass="acsbf"
+ editOnEnter="true">
+ </table>
+ </div>
+</div>
+<script type="text/javascript"
+ src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
+<script type="text/javascript">
+ dojo.require("openils.widget.AutoGrid");
+ dojo.require("openils.CGI");
+ dojo.require("openils.PermaCrud");
+
+ dojo.requireLocalization("openils.authority", "authority");
+ var localeStrings =
+ dojo.i18n.getLocalization("openils.authority", "authority");
+
+ var cgi, pcrud;
+
+ function my_init() {
+ var authority_field, control_set_id;
+ var where = {"id": {"!=": null}};
+
+ cgi = new openils.CGI();
+ pcrud = new openils.PermaCrud();
+
+ authority_field = cgi.param("acsaf");
+ control_set_id = cgi.param("acs");
+
+ if (authority_field) {
+ /* This block not only limits the scope of our search for acsbf
+ objects, but makes sure that we create/update only acsbf's
+ that link back to the authority field (acsaf) we're interested
+ in. */
+ authority_field = pcrud.retrieve("acsaf", authority_field);
+ where.authority_field = authority_field.id();
+ render_authority_field_metadata(authority_field, control_set_id);
+
+ acsbf_grid.overrideEditWidgets.authority_field =
+ new dijit.form.TextBox({"disabled": true});
+ acsbf_grid.overrideEditWidgets.authority_field.shove =
+ {"create": authority_field.id()};
+ }
+
+ acsbf_grid.loadAll({"order_by": {"acsbf": "tag"}}, where);
+ }
+
+ openils.Util.addOnLoad(my_init);
+</script>
+[% END %]
--- /dev/null
+[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = "Configure Authority Thesauri" %]
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
+ <div>Thesauri</div>
+ <div>
+ <button dojoType="dijit.form.Button" onClick="at_grid.showCreateDialog()">New Thesaurus</button>
+ <button dojoType="dijit.form.Button" onClick="at_grid.deleteSelected()">Delete Selected</button>
+ </div>
+ </div>
+ <div id="control-set-metadata-holder" class="hidden">
+ Showing only thesauri linked to control set:
+ <a id="control-set-metadata"></a>
+ </div>
+ <div>
+ <table jsId="at_grid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight="true"
+ defaultCellWidth="'auto'"
+ fieldOrder="['code','control_set','name','description']"
+ suppressEditFields="['id']"
+ query="{id: '*'}"
+ fmClass="at"
+ editOnEnter="true">
+ <thead>
+ <tr>
+ <th field="control_set" get="get_control_set"
+ formatter="format_control_set"></th>
+ </tr>
+ </thead>
+ </table>
+ </div>
+</div>
+<script type="text/javascript"
+ src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
+<script type="text/javascript">
+ dojo.require("openils.widget.AutoGrid");
+ dojo.require("openils.CGI");
+ dojo.require("openils.PermaCrud");
+
+ dojo.requireLocalization("openils.authority", "authority");
+ var localeStrings =
+ dojo.i18n.getLocalization("openils.authority", "authority");
+
+ var cgi, pcrud;
+ var control_set;
+
+ function get_control_set(rowidx, item) {
+ if (item) {
+ /* I'm /sure/ there's a better way to do the following */
+ this._tmp = openils.widget.AutoGrid.defaultGetter;
+ var ordinary = this._tmp(rowidx, item);
+ delete this._tmp;
+
+ if (control_set) {
+ return ordinary;
+ } else {
+ var id = this.grid.store.getValue(item, "control_set");
+ return {
+ "id": id, "text": ordinary
+ };
+ }
+ }
+ }
+
+ function format_control_set(f) {
+ if (typeof f == "object") {
+ return '<a href="' + oilsBasePath +
+ '/conify/global/cat/authority/control_set?focus=' + f.id +
+ '">' + f.text + "</a>";
+ } else {
+ return f;
+ }
+
+ }
+
+ function my_init() {
+ var where = {"code": {"!=": null}};
+
+ cgi = new openils.CGI();
+ pcrud = new openils.PermaCrud();
+
+ control_set = cgi.param("acs");
+ if (control_set) {
+ control_set = pcrud.retrieve("acs", control_set);
+ where.control_set = control_set.id();
+ render_control_set_metadata(control_set);
+
+ at_grid.overrideEditWidgets.control_set =
+ new dijit.form.TextBox({"disabled": true});
+ at_grid.overrideEditWidgets.control_set.shove =
+ {"create": control_set.id()};
+ }
+
+ at_grid.loadAll({"order_by": {"at": "code"}}, where);
+ }
+
+ openils.Util.addOnLoad(my_init);
+</script>
+[% END %]
--- /dev/null
+[% WRAPPER default/base.tt2 %]
+[% ctx.page_title = 'Vandelay Match Sets' %]
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
+ <div>[% ctx.page_title %]</div>
+ <div>
+ <button dojoType="dijit.form.Button"
+ onClick="vms_grid.showCreateDialog()">New Match Set</button>
+ <button dojoType="dijit.form.Button"
+ onClick="vms_grid.deleteSelected()">Delete Selected</button>
+ </div>
+ </div>
+ <div>
+ Show sets owned at or below:
+ <select dojoType="openils.widget.OrgUnitFilteringSelect"
+ jsId="context_org_selector"></select>
+ </div>
+ <table jsId="vms_grid"
+ dojoType="openils.widget.AutoGrid"
+ query="{id: '*'}"
+ defaultCellWidth="'16em'"
+ fmClass="vms"
+ fieldorder="['name', 'owner']"
+ suppressEditFields="['id']"
+ showPaginator="true"
+ editOnEnter="true">
+ <thead>
+ <tr>
+ <th field="name" get="field_plus_id" formatter="tree_editor_link"></th>
+ <th field="owner" get="openils.widget.AutoGrid.orgUnitGetter">
+ </th>
+ </tr>
+ </thead>
+ </table>
+</div>
+<div class="hidden">
+ <select dojoType="dijit.form.FilteringSelect" jsId="mtype_selector">
+ [%# for the origin of these hard coded options, see the definition
+ of vandelay.match_set.mtype in 012.schema.vandelay.sql %]
+ <option value="biblio">biblio</option>
+ <option value="authority">authority</option>
+ <!-- XXX: nah <option value="mfhd">mfhd</option> -->
+ </select>
+</div>
+
+<script type="text/javascript">
+ dojo.require("dijit.form.FilteringSelect");
+ dojo.require("openils.widget.AutoGrid");
+ dojo.require("openils.widget.OrgUnitFilteringSelect");
+
+ var context_org;
+
+ function load_grid(search) {
+ if (!search) search = {"id": {"!=": null}};
+
+ vms_grid.loadAll({"order_by": {"vms": "name"}}, search);
+ }
+
+ function field_plus_id(rowIndex, item) {
+ if (!item) return null;
+ var datum = {};
+ datum[this.field] = this.grid.store.getValue(item, this.field);
+ datum.id = this.grid.store.getValue(item, "id");
+ return datum;
+ }
+
+ function tree_editor_link(datum) {
+ if (!datum) return "";
+ return '<a href="[% ctx.base_path %]/eg/conify/global/vandelay/match_set_tree?match_set=' +
+ datum.id + '">' + datum.name + '</a>';
+ }
+
+ openils.Util.addOnLoad(
+ function() {
+ new openils.User().buildPermOrgSelector(
+ "ADMIN_IMPORT_MATCH_SET", context_org_selector,
+ null, function() {
+ context_org_selector.onChange = function() {
+ context_org = this.attr("value");
+ vms_grid.resetStore();
+ load_grid({
+ "owner": aou.descendantNodeList(context_org, true)
+ });
+ };
+ }
+ );
+
+ vms_grid.overrideEditWidgets.mtype = mtype_selector;
+ vms_grid.overrideEditWidgets.mtype.shove = {"create": "biblio"};
+ load_grid();
+ }
+ );
+</script>
+[% END %]
--- /dev/null
+[% WRAPPER 'default/base.tt2' %]
+[% ctx.page_title = 'Vandelay Match Set Editor' %]
+<style type="text/css">
+ h1 { margin: 1ex 0; }
+ .outer { clear: both; margin-bottom: 1ex; }
+ .space-me input { margin: 0 1em; }
+ button { margin: 0 0.5em; }
+ input[type=submit] { padding: 0 0.5em; }
+ #tree-here { margin-bottom: 1.5em; }
+ #vms-table { padding-bottom: 2ex; }
+ #vms-table th { text-align: right; }
+ #vms-table td { padding-left: 1em; }
+ #src-pane { float: left; width: 49%; }
+ #tree-pane { float: right; width: 50%; }
+ #submit-row { clear: both; text-align: center; padding-top: 1.5ex; }
+ #submit-row hr { margin: 1.5ex 0; }
+ #expr-preview-row { margin: 2ex 0; }
+ #expr-preview {
+ font-family: monospace;
+ font-size: 125%;
+ font-weight: bold;
+ background-color: #000066;
+ color: white;
+ }
+ .node-editor { margin-bottom: 1.5ex; }
+ .node-editor td { padding: 0.5ex; }
+ li { background-color: #ddd; }
+ .replace-mode { background-color: #990; color: #fff; }
+</style>
+<h1>[% ctx.page_title %]</h1>
+<table id="vms-table">
+ <tbody>
+ <tr>
+ <th>Match set name:</th>
+ <td><strong id="vms-name"></strong></td>
+ </tr>
+ <tr>
+ <th>Owning Library:</th>
+ <td id="vms-owner"></td>
+ </tr>
+ <tr>
+ <th>Type:</th>
+ <td id="vms-mtype"></td>
+ </tr>
+ </tbody>
+</table>
+<hr />
+<!-- XXX TODO
+ give some indication of which match set we're editing the tree for
+ -->
+<table class="hidden">
+ <tr quality-controls="1">
+ <td>
+ <label for="value-input">Value:</label>
+ </td>
+ <td>
+ <input id="value-input" type="text" fmfield="value" />
+ </td>
+ </tr>
+ <tr consistent-controls="1">
+ <td>
+ <label for="quality-input"
+ title="A relative number representing the impact of this expression on the score of the overall record match"><!-- XXX tooltipize -->
+ Match Score
+ </label>
+ </td>
+ <td>
+ <input id="quality-input" type="text" value="1"
+ size="4" maxlength="3" fmfield="quality" />
+ </td>
+ </tr>
+ <tr point-controls="1">
+ <td>
+ <label for="negate-input">Negate?</label>
+ </td>
+ <td>
+ <input id="negate-input" type="checkbox" fmfield="negate" />
+ </td>
+ </tr>
+</table>
+<div class="outer">
+ <div id="expr-preview-row">
+ <em>Your Expression:</em>
+ <span id="expr-preview"></span>
+ </div>
+ <div id="vmsp-buttons">
+ Add new
+ <button onclick="node_editor.add('svf');">Record Attribute</button>
+ <button onclick="node_editor.add('tag');">MARC Tag and Subfield</button>
+ <button onclick="node_editor.add('bool_op');">Boolean Operator</button>
+ </div>
+</div>
+<div class="outer" style="margin-top: 2ex;">
+ <div id="src-pane">
+ <div><big>Working Match Point</big></div>
+ <div>
+ <form id="node-editor-container" onsubmit="return false;"></form>
+ </div>
+ <ul id="src-here"></ul>
+ </div>
+
+ <div id="tree-pane">
+ <div><big>Your Expression</big></div>
+ <div id="tree-here"></div>
+ <div>
+ <button id="deleter" onclick="delete_selected_in_tree()">
+ Delete Selected Node
+ </button>
+ <button id="replacer" onclick="replace_mode()"></button>
+ </div>
+ </div>
+</div>
+<div id="submit-row">
+ <button onclick="save_tree()">Save Changes To Expression</button>
+</div>
+<hr />
+<div id="quality-editor-wrapper">
+ <div>
+ <div style="float: left; width: 50%;">
+ <big>Quality Metrics for this Match Set</big>
+ </div>
+ <div style="float: right; width: 49%; text-align: right;">
+ <button onclick="qnode_editor.add('svf')">
+ Record Attribute
+ </button>
+ <button onclick="qnode_editor.add('tag')">
+ MARC Tag and Subfield
+ </button>
+ <button onclick="vmsq_grid.deleteSelected()">
+ Delete Selected Metrics
+ </button>
+ </div>
+ </div>
+ <br style="clear: both;" />
+ <table id="qnode-editor-container"></table>
+ <table jsId="vmsq_grid"
+ dojoType="openils.widget.AutoGrid"
+ query="{id: '*'}"
+ defaultCellWidth="'17%'"
+ fmClass="vmsq"
+ fieldOrder="['quality','svf','tag','subfield','value']"
+ suppressFields="['match_set']"
+ showPaginator="true"
+ editOnEnter="false">
+ </table>
+</div>
+<div jsId="progress_dialog" dojoType="openils.widget.ProgressDialog"></div>
+<script type="text/javascript"
+ src="[% ctx.media_prefix %]/js/ui/default/conify/global/vandelay/match_set.js"></script>
+[% END %]
--- /dev/null
+[% # This is the stand-alone call-number browser. This mainly wraps around
+ # the same guts as the "shelf browser" part of a record results page.
+
+ PROCESS "default/opac/parts/header.tt2";
+ PROCESS "default/opac/parts/misc_util.tt2";
+ WRAPPER "default/opac/parts/base.tt2";
+ INCLUDE "default/opac/parts/topnav.tt2";
+ ctx.page_title = l("Call Number Browse"); %]
+ <div id="search-wrapper">
+ [% INCLUDE "default/opac/parts/printnav.tt2" %]
+ [% INCLUDE "default/opac/parts/searchbar.tt2" %]
+ </div>
+ <div id="content-wrapper">
+ <div id="main-content">
+ <div class="cnbrowse_div">
+ [% INCLUDE "default/opac/parts/record/cnbrowse.tt2" %]
+ </div>
+ <div class="common-full-pad"></div>
+ </div>
+ </div>
+[% END %]
--- /dev/null
+<form id="adv_search_form" action="[% ctx.opac_root %]/results" method="GET">
+ <div class="header_middle">[% l("Expert Search") %]</div>
+ <input type="hidden" name="_special" value="1" />
+ <table class="expert-search">
+ <tbody id="adv_expert_rows_here">
+ <tr id="adv_expert_row">
+ <th>[% l("Tag:") %]</th>
+ <td><input type="text" name="tag" size="3" /></td>
+ <th>[% l("Subfield:") %]</th>
+ <td><input type="text" name="subfield" size="1" /></td>
+ <th>[% l("Value:") %]</th>
+ <td><input type="text" name="term" size="16" /></td>
+ <td>
+ <a href="javascript:;" class="row-remover"
+ title="[% l('Remove row') %]" alt="[% l('Remove row') %]"
+ onclick='return killRowIfAtLeast(1, this);'><img src="[% ctx.media_prefix %]/images/adv_row_close_btn.png" /></a>
+ </td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td colspan="2"><a href="javascript:addExpertRow();">[ [% l("Add row") %] ]</a></td>
+ <td colspan="4">
+ <input type="image" src="[% ctx.media_prefix %]/images/search_btn.gif" alt="[% l('Search') %]" title="[% l('Search') %]" />
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+</form>
--- /dev/null
+<form id="adv_search_form" action="[% ctx.opac_root %]/results" method="GET">
+ <div class="header_middle">[% l("Numeric Search") %]</div>
+ <input type="hidden" name="contains" value="contains" />
+ <input type="hidden" name="_special" value="1" />
+ <table>
+ <tr>
+ <td>
+ <select name="qtype">
+ <option value="identifier|isbn">[% l('ISBN') %]</option>
+ <option value="identifier|issn">[% l('ISSN') %]</option>
+ <option value="identifier|bib_cn">[% l('Bib Call Number') %]</option>
+ <option value="cnbrowse">[% l('Call Number (Shelf Browse)') %]</option>
+ <option value="identifier|lccn">[% l('LCCN') %]</option>
+ <option value="identifier|tcn">[% l('TCN') %]</option>
+ <option value="item_barcode">[% l('Item Barcode') %]</option>
+ </select>
+ </td>
+ <td>
+ <input type="text" name="query" size="16" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="right">
+ <input type="image" alt="[% l('Search') %]"
+ src="[% ctx.media_prefix %]/images/search_btn.gif" />
+ </td>
+ </table>
+</form>
--- /dev/null
+[%
+ # XXX It might be cleaner to move this into its own file or something.
+ #
+ # The following hash should have fail_parts as keys and user/patron-friendly
+ # strings as values. If the system returns an event with a fail_part when
+ # you attempt to place a hold and the fail part matches something in this
+ # hash, this is the message that will be displayed to the user. Wait until
+ # these are used to pass them through l() for i18n.
+
+ FAIL_PART_MSG_MAP = {
+ "actor.usr.barred" => "The patron is barred",
+ "asset.copy.circulate" => "The item does not circulate",
+ "asset.copy_location.circulate" => "Items from this shelving location do not circulate",
+ "asset.copy.status" => "The item cannot circulate at this time",
+ "circ.holds.target_skip_me" => "The item's circulation library does not fulfill holds",
+ "config.circ_matrix_circ_mod_test" => "The patron has too many items of this type checked out",
+ "config.circ_matrix_test.available_copy_hold_ratio" => "The available item-to-hold ratio is too low",
+ "config.circ_matrix_test.circulate" => "Circulation rules reject this item as non-circulatable",
+ "config.circ_matrix_test.total_copy_hold_ratio" => "The total item-to-hold ratio is too low",
+ "config.hold_matrix_test.holdable" => "Hold rules reject this item as unholdable",
+ "config.hold_matrix_test.max_holds" => "The patron has reached the maximum number of holds",
+ "config.rule_age_hold_protect.prox" => "The item is too new to transit this far",
+ "no_item" => "The system could not find this item",
+ "no_ultimate_items" => "The system could not find any items to match this hold request",
+ "no_matchpoint" => "System rules do not define how to handle this item",
+ "no_user" => "The system could not find this patron",
+ "transit_range" => "The item cannot transit this far"
+ };
+
+
+ # This works like the above has, but instead of fail_parts for keys, use
+ # the textcode of the event. This will only be consulted for events
+ # that do not have a fail_part matching something in the above hash.
+ # Wait until these are used to pass them through l() for i18n.
+
+ EVENT_MSG_MAP = {
+ };
+%]
--- /dev/null
+[%- IF ctx.page == "record";
+ prev_next_root = "/record/" _ ctx.bre_id _ extras_propagator;
+ELSE;
+ cn = CGI.param('cn') | uri;
+ prev_next_root = "/cnbrowse?cn=" _ cn;
+END -%]
+<div id='cn_browse' class='cn_browser'>
+ <div id='cn_browse_div'>
+ <div class='color_4'>
+ <span>[% l("You are now browsing") %]</span>
+ <strong>[% ctx.browsing_ou.name %]</strong>
+ </div>
+ <table class='data_grid bookshelf' width='100%'>
+ <thead>
+ <tr>
+ <td>
+ <a id='cn_browse_prev' class='classic_link' href="[% ctx.opac_root _ prev_next_root _ '&cnoffset=' _ ((CGI.param('cnoffset') || 0) - 1) _ '&expand=cnbrowse#cnbrowse' %]"<b>[%
+ l("<< Previous Page")
+ %]</b></a>
+ </td>
+ <td colspan='1' align='center'>[% l("Shelf Browser") %]</td>
+ <td>
+ <a id='cn_browse_next' class='classic_link' href="[% ctx.opac_root _ prev_next_root _ '&cnoffset=' _ ((CGI.param('cnoffset') || 0) + 1) _ '&expand=cnbrowse#cnbrowse' %]"<b>[%
+ l("Next Page >>")
+ %]</b></a>
+ </td>
+ </tr>
+ </thead>
+ <tbody id='cn_tbody'>
+ [% tr_open = 0; FOR cn IN ctx.browsed_call_numbers %]
+ [%- IF loop.index % 3 == 0; tr_open = 1 %]
+ <tr class='cn_browse_row'>
+ [% END -%]
+ <td class='cn_browse_item' width='25%' valign='top'>
+ [% rec_attrs = {marc_xml => cn.record.marc};
+ PROCESS get_marc_attrs args=rec_attrs;
+ ident = rec_attrs.isbn_clean || rec_attrs.upc;
+ IF ident %]
+ <a href="[% ctx.opac_root %]/record/[% cn.record.id _ extras_propagator %]"><img height='60' width='50'
+ class='cn_browse_info' name='cn_browse_pic' border='0'
+ src="[% ctx.media_prefix %]/opac/extras/ac/jacket/small/[% ident %]" /></a>
+ [% END %]
+ <div class='cn_browse_info bold' name='cn_browse_cn'>[% cn.label %]</div>
+ <div class='cn_browse_info'>
+ <a name='cn_browse_title' class='classic_link' href="[% ctx.opac_root %]/record/[% cn.record.id _ extras_propagator %]">[% rec_attrs.title %]</a>
+ </div>
+ [% IF rec_attrs.author %]<div class='cn_browse_info'>
+ <a name='cn_browse_author' class='classic_link'
+ href="[% ctx.opac_root %]/results?qtype=author&query=[%- rec_attrs.author | replace('[,\.:;]', '') | uri %]&loc=[% CGI.param('loc') | uri %]">[% rec_attrs.author %]</a>
+ </div>[% END %]
+ <div class='cn_browse_info' name='cn_browse_lib'>[% cn.owning_lib.name %]</div>
+ </td>
+ [% IF loop.index % 3 == 2; tr_open = 0 %]
+ </tr>
+ [% END %]
+ [% END; IF tr_open %]</tr>[% END %]
+ </tbody>
+ </table>
+ </div>
+</div>
--- /dev/null
+<div class='rdetail_extras_div'>
+ [% IF attrs.summary %]
+ <div class='rdetail-extras-summary'>
+ <strong>[% l('Summary: ') %]</strong>[% attrs.summary %]
+ </div>
+ [% END %]
+
+ <!-- Embedded content cafe iframe -->
+ [% ident = attrs.isbn_clean || attrs.upc %]
+ <iframe width="100%" height="400" frameborder="0"
+ src="http[% CGI.https ? 's' : '' %]://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=[%-
+ ENV.OILS_CONTENT_CAFE_USER %]&Password=[% ENV.OILS_CONTENT_CAFE_PASS %]&ItemKey=[% ident %]&Options=Y" >
+ </iframe>
+</div>
+
--- /dev/null
+
+<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
+ <button dojoType='dijit.form.Button'
+ onclick="displayGlobalDiv('vl-queue-div');">↖ &vandelay.back.to.import.queue;</button>
+</div>
+
+<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
+ <div id='vl-import-error-record' class='hidden'>
+ <h1>Import Errors</h1><br/>
+ <table>
+ <tbody>
+ <tr><td>ID</td><td id='vl-error-id'/></tr>
+ <tr><td>Import Error</td><td id='vl-error-import-error'/></tr>
+ <tr><td>Error Detail</td><td id='vl-error-error-detail'/></tr>
+ <tr><td>Title</td><td id='vl-error-title'/></tr>
+ <tr><td>Author</td><td id='vl-error-author'/></tr>
+ <tr><td>ISBN</td><td id='vl-error-isbn'/></tr>
+ <tr><td>ISSN</td><td id='vl-error-issn'/></tr>
+ <tr><td>UPC</td><td id='vl-error-upc'/></tr>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
+ <div class='hidden' id='vl-import-error-grid-some'>
+ <table jsId="vlImportErrorGrid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight='true'
+ fieldOrder="['barcode', 'call_number', 'owning_lib', 'import_error', 'error_detail']"
+ query="{id: '*'}"
+ hidePaginator='true'
+ showColumnPicker='true'
+ columnPickerPrefix='"vandelay.item.import_error"'
+ fmClass='vii'>
+ <thead>
+ <tr>
+ <th field='owning_lib' get='vlGetOrg'/>
+ <th field='circ_lib' get='vlGetOrg'/>
+ </tr>
+ </thead>
+ </table>
+ </div>
+</div>
+<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
+ <div class='hidden' id='vl-import-error-grid-all'>
+ <h1>Import Items</h1><br/>
+ <input dojoType='dijit.form.CheckBox' jsId='vlImportItemsShowErrors' onchange='vlLoadErrorUIAll();'/>
+ <span>Limit to Import Failures</span>
+ <table width='100%'><tr><td width='100%' align='right'>
+ <select id='vl-item-export-options' style='margin-right: 10px;'>
+ <!-- TODO I18N -->
+ <option value=''>Export Items As...</option>
+ <option value='print'>Print</option>
+ <option value='csv'>CSV</option>
+ <option value='email'>Email</option>
+ </select>
+ </td></tr></table>
+ <table jsId="vlAllImportErrorGrid"
+ dojoType="openils.widget.AutoGrid"
+ autoHeight='true'
+ fieldOrder="['barcode', 'call_number', 'owning_lib', 'import_error', 'error_detail']"
+ query="{id: '*'}"
+ showPaginator='true'
+ showColumnPicker='true'
+ columnPickerPrefix='"vandelay.item.import_error"'
+ fmClass='vii'>
+ <thead>
+ <tr>
+ <th field='owning_lib' get='vlGetOrg'/>
+ <th field='circ_lib' get='vlGetOrg'/>
+ </tr>
+ </thead>
+ </table>
+ </div>
+</div>
+
+++ /dev/null
-[% WRAPPER default/base.tt2 %]
-[% ctx.page_title = "Configure Authority Browse Axes" %]
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
- <div>Browse Axes</div>
- <div>
- <button dojoType="dijit.form.Button" onClick="aba_grid.showCreateDialog()">New Browse Axis</button>
- <button dojoType="dijit.form.Button" onClick="aba_grid.deleteSelected()">Delete Selected</button>
- </div>
- </div>
- <div>
- <table jsId="aba_grid"
- dojoType="openils.widget.AutoGrid"
- autoHeight="true"
- defaultCellWidth="'auto'"
- fieldOrder="['code','name','description','sorter']"
- suppressEditFields="['id']"
- query="{id: '*'}"
- fmClass="aba"
- editOnEnter="true">
- </table>
- </div>
-</div>
-<script type="text/javascript">
- dojo.require("openils.widget.AutoGrid");
-
- function my_init() {
- aba_grid.overrideWidgetArgs.sorter = {
- "dijitArgs": {"query": {"sorter": "t"}}
- };
- aba_grid.loadAll({"order_by": {"aba": "code"}});
- }
-
- openils.Util.addOnLoad(my_init);
-</script>
-[% END %]
+++ /dev/null
-[% WRAPPER default/base.tt2 %]
-[% ctx.page_title = "Configure Browse Axis-Authority Field Maps" %]
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
- <div>Browse Axis-Authority Field Maps</div>
- <div>
- <button dojoType="dijit.form.Button" onClick="abaafm_grid.showCreateDialog()">New Browse Axis-Authority Field Map</button>
- <button dojoType="dijit.form.Button" onClick="abaafm_grid.deleteSelected()">Delete Selected</button>
- </div>
- </div>
- <div id="authority-field-metadata-holder" class="hidden">
- Showing only browse axis-authority field maps linked to authority field:
- <a id="authority-field-metadata"></a>
- </div>
- <div>
- <table jsId="abaafm_grid"
- dojoType="openils.widget.AutoGrid"
- autoHeight="true"
- defaultCellWidth="'auto'"
- suppressEditFields="['id']"
- fieldOrder="['axis','field']"
- query="{id: '*'}"
- fmClass="abaafm"
- editOnEnter="true">
- </table>
- </div>
-</div>
-<script type="text/javascript"
- src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
-<script type="text/javascript">
- dojo.require("openils.widget.AutoGrid");
- dojo.require("openils.CGI");
- dojo.require("openils.PermaCrud");
-
- dojo.requireLocalization("openils.authority", "authority");
- var localeStrings =
- dojo.i18n.getLocalization("openils.authority", "authority");
-
- var cgi, pcrud;
-
- function my_init() {
- var authority_field, control_set_id;
- var where = {"id": {"!=": null}};
-
- cgi = new openils.CGI();
- pcrud = new openils.PermaCrud();
-
- authority_field = cgi.param("acsaf");
- control_set_id = cgi.param("acs");
-
- if (authority_field) {
- /* This block not only limits the scope of our search for abaafm
- objects, but makes sure that we create/update only abaafm's
- that link back to the authority field (acsaf) we're interested
- in. */
- authority_field = pcrud.retrieve("acsaf", authority_field);
- where.field = authority_field.id();
- render_authority_field_metadata(authority_field, control_set_id);
-
- abaafm_grid.overrideEditWidgets.field =
- new dijit.form.TextBox({"disabled": true});
- abaafm_grid.overrideEditWidgets.field.shove =
- {"create": authority_field.id()};
- }
-
- abaafm_grid.loadAll({"order_by": {"abaafm": "axis"}}, where);
- }
-
- openils.Util.addOnLoad(my_init);
-</script>
-[% END %]
+++ /dev/null
-[% WRAPPER default/base.tt2 %]
-[% ctx.page_title = "Configure Authority Control Sets" %]
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
- <div>Control Sets</div>
- <div>
- <button dojoType="dijit.form.Button" onClick="acs_grid.showCreateDialog()">New Control Set</button>
- <button dojoType="dijit.form.Button" onClick="acs_grid.deleteSelected()">Delete Selected</button>
- </div>
- </div>
- <div>
- <table jsId="acs_grid"
- dojoType="openils.widget.AutoGrid"
- autoHeight="true"
- defaultCellWidth="'auto'"
- fieldOrder="['name','description','id']"
- suppressEditFields="['id']"
- query="{id: '*'}"
- fmClass="acs"
- editOnEnter="true">
- <thead>
- <tr>
- <th name="Other properties"
- field="id" formatter="format_acs_id"></th>
- </tr>
- </thead>
- </table>
-</div>
-
-<script type="text/javascript">
- dojo.require("openils.widget.AutoGrid");
- dojo.require("openils.CGI");
- dojo.requireLocalization("openils.authority", "authority");
- var localeStrings =
- dojo.i18n.getLocalization("openils.authority", "authority");
- var acs_cache = {};
- var cgi;
-
- function format_acs_id(id) {
- if (id) {
- var tlen = acs_cache[id].thesauri() ?
- acs_cache[id].thesauri().length : 0;
- var alen = acs_cache[id].authority_fields() ?
- acs_cache[id].authority_fields().length : 0;
-
- return "<a href='" + oilsBasePath +
- "/conify/global/cat/authority/thesaurus?acs=" + id + "'>" +
- dojo.string.substitute(localeStrings.THESAURI, [tlen]) +
- "</a> " + " <a href='" + oilsBasePath +
- "/conify/global/cat/authority/control_set_authority_field?acs=" +
- id + "'>" +
- dojo.string.substitute(localeStrings.AUTHORITY_FIELDS, [alen]) +
- "</a>";
- }
- }
-
- function acs_grid_loader() {
- acs_cache = {};
- acs_grid.resetStore();
- acs_grid.showLoadProgressIndicator();
- fieldmapper.standardRequest(
- ["open-ils.cat", "open-ils.cat.authority.control_set.retrieve"], {
- "async": true,
- "params": [acs_grid.displayLimit, acs_grid.displayOffset, cgi.param("focus")],
- "onresponse": function(r) {
- if (r = openils.Util.readResponse(r)) {
- acs_cache[r.id()] = r;
- acs_grid.store.newItem(r.toStoreItem());
- }
- },
- "oncomplete": function() {
- acs_grid.hideLoadProgressIndicator();
- }
- }
- );
- }
-
- openils.Util.addOnLoad(
- function() {
- cgi = new openils.CGI();
-
- acs_grid.onPostCreate = function(obj) {acs_cache[obj.id()] = obj;};
- acs_grid.dataLoader = acs_grid_loader;
- acs_grid_loader();
- }
- );
-</script>
-[% END %]
+++ /dev/null
-[% WRAPPER default/base.tt2 %]
-[% ctx.page_title = "Configure Authority Authority Fields" %]
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
- <div>Authority Fields</div>
- <div>
- <button dojoType="dijit.form.Button" onClick="acsaf_grid.showCreateDialog()">New Authority Field</button>
- <button dojoType="dijit.form.Button" onClick="acsaf_grid.deleteSelected()">Delete Selected</button>
- </div>
- </div>
- <div id="control-set-metadata-holder" class="hidden">
- Showing only authority fields linked to control set:
- <a id="control-set-metadata"></a>
- </div>
- <div>
- <table jsId="acsaf_grid"
- dojoType="openils.widget.AutoGrid"
- autoHeight="true"
- defaultCellWidth="'12%'"
- fieldOrder="['id','name','description','main_entry','control_set','tag','sf_list','bib_fields','axis_maps']"
- suppressEditFields="['id']"
- query="{id: '*'}"
- fmClass="acsaf"
- editOnEnter="true">
- <thead>
- <tr>
- <th field="bib_fields" name="Controlled Bib Fields"
- get="get_just_id" formatter="format_bib_fields"></th>
- <th field="axis_maps" name="Axes"
- get="get_just_id" formatter="format_axis_maps"></th>
- </tr>
- </thead>
- </table>
- </div>
-</div>
-<script type="text/javascript"
- src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
-<script type="text/javascript">
- dojo.require("openils.widget.AutoGrid");
- dojo.require("openils.CGI");
- dojo.require("openils.PermaCrud");
-
- dojo.requireLocalization("openils.authority", "authority");
- var localeStrings =
- dojo.i18n.getLocalization("openils.authority", "authority");
-
- var cgi, pcrud, control_set;
- var acsaf_cache = {};
-
- function acsaf_grid_loader() {
- acsaf_cache = {};
- acsaf_grid.resetStore();
- acsaf_grid.showLoadProgressIndicator();
- fieldmapper.standardRequest(
- ["open-ils.cat",
- "open-ils.cat.authority.control_set_authority_field.retrieve"],{
- "async": true,
- "params": [
- acsaf_grid.displayLimit, acsaf_grid.displayOffset,
- control_set.id(), cgi.param("focus")
- ],
- "onresponse": function(r) {
- if (r = openils.Util.readResponse(r)) {
- acsaf_cache[r.id()] = r;
- acsaf_grid.store.newItem(r.toStoreItem());
- }
- },
- "oncomplete": function() {
- acsaf_grid.hideLoadProgressIndicator();
- }
- }
- );
- }
-
- function get_just_id(row_index, item) {
- if (item) return this.grid.store.getValue(item, "id");
- }
-
- function format_axis_maps(id) {
- if (id) {
- var text = acsaf_cache[id].axis_maps().map(
- function(f) { return f.axis().name(); }
- ).sort().join(", ") || localeStrings.NONE_LINK;
- var href = "browse_axis_authority_field_map?";
- if (control_set)
- href += "acs=" + control_set.id() + "&";
- href += "acsaf=" + id;
- return "<a href='" + href + "'>" + text + "</a>";
- }
- }
-
- function format_bib_fields(id) {
- if (id) {
- var text = acsaf_cache[id].bib_fields().map(
- function(f) { return f.tag(); }
- ).sort().join(", ") || localeStrings.NONE_LINK;
- var href = "control_set_bib_field?";
- if (control_set)
- href += "acs=" + control_set.id() + "&";
- href += "acsaf=" + id;
- return "<a href='" + href + "'>" + text + "</a>";
- }
- }
-
- function my_init() {
- cgi = new openils.CGI();
- pcrud = new openils.PermaCrud();
-
- control_set = cgi.param("acs");
- if (control_set) {
- control_set = pcrud.retrieve("acs", control_set);
- render_control_set_metadata(control_set);
-
- acsaf_grid.overrideEditWidgets.control_set =
- new dijit.form.TextBox({"disabled": true});
- acsaf_grid.overrideEditWidgets.control_set.shove =
- {"create": control_set.id()};
- }
-
- acsaf_grid.onPostCreate = function(o) {
- o.bib_fields([]);
- o.axis_maps([]);
- acsaf_cache[o.id()] = o;
- };
-
- acsaf_grid.dataLoader = acsaf_grid_loader;
- acsaf_grid_loader();
- }
-
- openils.Util.addOnLoad(my_init);
-</script>
-[% END %]
+++ /dev/null
-[% WRAPPER default/base.tt2 %]
-[% ctx.page_title = "Configure Authority Control Set Bib Fields" %]
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
- <div>Control Set Bib Fields</div>
- <div>
- <button dojoType="dijit.form.Button" onClick="acsbf_grid.showCreateDialog()">New Control Set Bib Field</button>
- <button dojoType="dijit.form.Button" onClick="acsbf_grid.deleteSelected()">Delete Selected</button>
- </div>
- </div>
- <div id="authority-field-metadata-holder" class="hidden">
- Showing only control set bib fields linked to authority field:
- <a id="authority-field-metadata"></a>
- </div>
- <div>
- <table jsId="acsbf_grid"
- dojoType="openils.widget.AutoGrid"
- autoHeight="true"
- defaultCellWidth="'auto'"
- suppressEditFields="['id']"
- fieldOrder="['tag','authority_field']"
- query="{id: '*'}"
- fmClass="acsbf"
- editOnEnter="true">
- </table>
- </div>
-</div>
-<script type="text/javascript"
- src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
-<script type="text/javascript">
- dojo.require("openils.widget.AutoGrid");
- dojo.require("openils.CGI");
- dojo.require("openils.PermaCrud");
-
- dojo.requireLocalization("openils.authority", "authority");
- var localeStrings =
- dojo.i18n.getLocalization("openils.authority", "authority");
-
- var cgi, pcrud;
-
- function my_init() {
- var authority_field, control_set_id;
- var where = {"id": {"!=": null}};
-
- cgi = new openils.CGI();
- pcrud = new openils.PermaCrud();
-
- authority_field = cgi.param("acsaf");
- control_set_id = cgi.param("acs");
-
- if (authority_field) {
- /* This block not only limits the scope of our search for acsbf
- objects, but makes sure that we create/update only acsbf's
- that link back to the authority field (acsaf) we're interested
- in. */
- authority_field = pcrud.retrieve("acsaf", authority_field);
- where.authority_field = authority_field.id();
- render_authority_field_metadata(authority_field, control_set_id);
-
- acsbf_grid.overrideEditWidgets.authority_field =
- new dijit.form.TextBox({"disabled": true});
- acsbf_grid.overrideEditWidgets.authority_field.shove =
- {"create": authority_field.id()};
- }
-
- acsbf_grid.loadAll({"order_by": {"acsbf": "tag"}}, where);
- }
-
- openils.Util.addOnLoad(my_init);
-</script>
-[% END %]
+++ /dev/null
-[% WRAPPER default/base.tt2 %]
-[% ctx.page_title = "Configure Authority Thesauri" %]
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
- <div>Thesauri</div>
- <div>
- <button dojoType="dijit.form.Button" onClick="at_grid.showCreateDialog()">New Thesaurus</button>
- <button dojoType="dijit.form.Button" onClick="at_grid.deleteSelected()">Delete Selected</button>
- </div>
- </div>
- <div id="control-set-metadata-holder" class="hidden">
- Showing only thesauri linked to control set:
- <a id="control-set-metadata"></a>
- </div>
- <div>
- <table jsId="at_grid"
- dojoType="openils.widget.AutoGrid"
- autoHeight="true"
- defaultCellWidth="'auto'"
- fieldOrder="['code','control_set','name','description']"
- suppressEditFields="['id']"
- query="{id: '*'}"
- fmClass="at"
- editOnEnter="true">
- <thead>
- <tr>
- <th field="control_set" get="get_control_set"
- formatter="format_control_set"></th>
- </tr>
- </thead>
- </table>
- </div>
-</div>
-<script type="text/javascript"
- src="[% ctx.media_prefix %]/js/ui/default/conify/global/cat/authority/common.js"></script>
-<script type="text/javascript">
- dojo.require("openils.widget.AutoGrid");
- dojo.require("openils.CGI");
- dojo.require("openils.PermaCrud");
-
- dojo.requireLocalization("openils.authority", "authority");
- var localeStrings =
- dojo.i18n.getLocalization("openils.authority", "authority");
-
- var cgi, pcrud;
- var control_set;
-
- function get_control_set(rowidx, item) {
- if (item) {
- /* I'm /sure/ there's a better way to do the following */
- this._tmp = openils.widget.AutoGrid.defaultGetter;
- var ordinary = this._tmp(rowidx, item);
- delete this._tmp;
-
- if (control_set) {
- return ordinary;
- } else {
- var id = this.grid.store.getValue(item, "control_set");
- return {
- "id": id, "text": ordinary
- };
- }
- }
- }
-
- function format_control_set(f) {
- if (typeof f == "object") {
- return '<a href="' + oilsBasePath +
- '/conify/global/cat/authority/control_set?focus=' + f.id +
- '">' + f.text + "</a>";
- } else {
- return f;
- }
-
- }
-
- function my_init() {
- var where = {"code": {"!=": null}};
-
- cgi = new openils.CGI();
- pcrud = new openils.PermaCrud();
-
- control_set = cgi.param("acs");
- if (control_set) {
- control_set = pcrud.retrieve("acs", control_set);
- where.control_set = control_set.id();
- render_control_set_metadata(control_set);
-
- at_grid.overrideEditWidgets.control_set =
- new dijit.form.TextBox({"disabled": true});
- at_grid.overrideEditWidgets.control_set.shove =
- {"create": control_set.id()};
- }
-
- at_grid.loadAll({"order_by": {"at": "code"}}, where);
- }
-
- openils.Util.addOnLoad(my_init);
-</script>
-[% END %]
+++ /dev/null
-[% WRAPPER default/base.tt2 %]
-[% ctx.page_title = 'Vandelay Match Sets' %]
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
- <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class="oils-header-panel">
- <div>[% ctx.page_title %]</div>
- <div>
- <button dojoType="dijit.form.Button"
- onClick="vms_grid.showCreateDialog()">New Match Set</button>
- <button dojoType="dijit.form.Button"
- onClick="vms_grid.deleteSelected()">Delete Selected</button>
- </div>
- </div>
- <div>
- Show sets owned at or below:
- <select dojoType="openils.widget.OrgUnitFilteringSelect"
- jsId="context_org_selector"></select>
- </div>
- <table jsId="vms_grid"
- dojoType="openils.widget.AutoGrid"
- query="{id: '*'}"
- defaultCellWidth="'16em'"
- fmClass="vms"
- fieldorder="['name', 'owner']"
- suppressEditFields="['id']"
- showPaginator="true"
- editOnEnter="true">
- <thead>
- <tr>
- <th field="name" get="field_plus_id" formatter="tree_editor_link"></th>
- <th field="owner" get="openils.widget.AutoGrid.orgUnitGetter">
- </th>
- </tr>
- </thead>
- </table>
-</div>
-<div class="hidden">
- <select dojoType="dijit.form.FilteringSelect" jsId="mtype_selector">
- [%# for the origin of these hard coded options, see the definition
- of vandelay.match_set.mtype in 012.schema.vandelay.sql %]
- <option value="biblio">biblio</option>
- <option value="authority">authority</option>
- <!-- XXX: nah <option value="mfhd">mfhd</option> -->
- </select>
-</div>
-
-<script type="text/javascript">
- dojo.require("dijit.form.FilteringSelect");
- dojo.require("openils.widget.AutoGrid");
- dojo.require("openils.widget.OrgUnitFilteringSelect");
-
- var context_org;
-
- function load_grid(search) {
- if (!search) search = {"id": {"!=": null}};
-
- vms_grid.loadAll({"order_by": {"vms": "name"}}, search);
- }
-
- function field_plus_id(rowIndex, item) {
- if (!item) return null;
- var datum = {};
- datum[this.field] = this.grid.store.getValue(item, this.field);
- datum.id = this.grid.store.getValue(item, "id");
- return datum;
- }
-
- function tree_editor_link(datum) {
- if (!datum) return "";
- return '<a href="[% ctx.base_path %]/eg/conify/global/vandelay/match_set_tree?match_set=' +
- datum.id + '">' + datum.name + '</a>';
- }
-
- openils.Util.addOnLoad(
- function() {
- new openils.User().buildPermOrgSelector(
- "ADMIN_IMPORT_MATCH_SET", context_org_selector,
- null, function() {
- context_org_selector.onChange = function() {
- context_org = this.attr("value");
- vms_grid.resetStore();
- load_grid({
- "owner": aou.descendantNodeList(context_org, true)
- });
- };
- }
- );
-
- vms_grid.overrideEditWidgets.mtype = mtype_selector;
- vms_grid.overrideEditWidgets.mtype.shove = {"create": "biblio"};
- load_grid();
- }
- );
-</script>
-[% END %]
+++ /dev/null
-[% WRAPPER 'default/base.tt2' %]
-[% ctx.page_title = 'Vandelay Match Set Editor' %]
-<style type="text/css">
- h1 { margin: 1ex 0; }
- .outer { clear: both; margin-bottom: 1ex; }
- .space-me input { margin: 0 1em; }
- button { margin: 0 0.5em; }
- input[type=submit] { padding: 0 0.5em; }
- #tree-here { margin-bottom: 1.5em; }
- #vms-table { padding-bottom: 2ex; }
- #vms-table th { text-align: right; }
- #vms-table td { padding-left: 1em; }
- #src-pane { float: left; width: 49%; }
- #tree-pane { float: right; width: 50%; }
- #submit-row { clear: both; text-align: center; padding-top: 1.5ex; }
- #submit-row hr { margin: 1.5ex 0; }
- #expr-preview-row { margin: 2ex 0; }
- #expr-preview {
- font-family: monospace;
- font-size: 125%;
- font-weight: bold;
- background-color: #000066;
- color: white;
- }
- .node-editor { margin-bottom: 1.5ex; }
- .node-editor td { padding: 0.5ex; }
- li { background-color: #ddd; }
- .replace-mode { background-color: #990; color: #fff; }
-</style>
-<h1>[% ctx.page_title %]</h1>
-<table id="vms-table">
- <tbody>
- <tr>
- <th>Match set name:</th>
- <td><strong id="vms-name"></strong></td>
- </tr>
- <tr>
- <th>Owning Library:</th>
- <td id="vms-owner"></td>
- </tr>
- <tr>
- <th>Type:</th>
- <td id="vms-mtype"></td>
- </tr>
- </tbody>
-</table>
-<hr />
-<!-- XXX TODO
- give some indication of which match set we're editing the tree for
- -->
-<table class="hidden">
- <tr quality-controls="1">
- <td>
- <label for="value-input">Value:</label>
- </td>
- <td>
- <input id="value-input" type="text" fmfield="value" />
- </td>
- </tr>
- <tr consistent-controls="1">
- <td>
- <label for="quality-input"
- title="A relative number representing the impact of this expression on the score of the overall record match"><!-- XXX tooltipize -->
- Match Score
- </label>
- </td>
- <td>
- <input id="quality-input" type="text" value="1"
- size="4" maxlength="3" fmfield="quality" />
- </td>
- </tr>
- <tr point-controls="1">
- <td>
- <label for="negate-input">Negate?</label>
- </td>
- <td>
- <input id="negate-input" type="checkbox" fmfield="negate" />
- </td>
- </tr>
-</table>
-<div class="outer">
- <div id="expr-preview-row">
- <em>Your Expression:</em>
- <span id="expr-preview"></span>
- </div>
- <div id="vmsp-buttons">
- Add new
- <button onclick="node_editor.add('svf');">Record Attribute</button>
- <button onclick="node_editor.add('tag');">MARC Tag and Subfield</button>
- <button onclick="node_editor.add('bool_op');">Boolean Operator</button>
- </div>
-</div>
-<div class="outer" style="margin-top: 2ex;">
- <div id="src-pane">
- <div><big>Working Match Point</big></div>
- <div>
- <form id="node-editor-container" onsubmit="return false;"></form>
- </div>
- <ul id="src-here"></ul>
- </div>
-
- <div id="tree-pane">
- <div><big>Your Expression</big></div>
- <div id="tree-here"></div>
- <div>
- <button id="deleter" onclick="delete_selected_in_tree()">
- Delete Selected Node
- </button>
- <button id="replacer" onclick="replace_mode()"></button>
- </div>
- </div>
-</div>
-<div id="submit-row">
- <button onclick="save_tree()">Save Changes To Expression</button>
-</div>
-<hr />
-<div id="quality-editor-wrapper">
- <div>
- <div style="float: left; width: 50%;">
- <big>Quality Metrics for this Match Set</big>
- </div>
- <div style="float: right; width: 49%; text-align: right;">
- <button onclick="qnode_editor.add('svf')">
- Record Attribute
- </button>
- <button onclick="qnode_editor.add('tag')">
- MARC Tag and Subfield
- </button>
- <button onclick="vmsq_grid.deleteSelected()">
- Delete Selected Metrics
- </button>
- </div>
- </div>
- <br style="clear: both;" />
- <table id="qnode-editor-container"></table>
- <table jsId="vmsq_grid"
- dojoType="openils.widget.AutoGrid"
- query="{id: '*'}"
- defaultCellWidth="'17%'"
- fmClass="vmsq"
- fieldOrder="['quality','svf','tag','subfield','value']"
- suppressFields="['match_set']"
- showPaginator="true"
- editOnEnter="false">
- </table>
-</div>
-<div jsId="progress_dialog" dojoType="openils.widget.ProgressDialog"></div>
-<script type="text/javascript"
- src="[% ctx.media_prefix %]/js/ui/default/conify/global/vandelay/match_set.js"></script>
-[% END %]
+++ /dev/null
-[% # This is the stand-alone call-number browser. This mainly wraps around
- # the same guts as the "shelf browser" part of a record results page.
-
- PROCESS "default/opac/parts/header.tt2";
- PROCESS "default/opac/parts/misc_util.tt2";
- WRAPPER "default/opac/parts/base.tt2";
- INCLUDE "default/opac/parts/topnav.tt2";
- ctx.page_title = l("Call Number Browse"); %]
- <div id="search-wrapper">
- [% INCLUDE "default/opac/parts/printnav.tt2" %]
- [% INCLUDE "default/opac/parts/searchbar.tt2" %]
- </div>
- <div id="content-wrapper">
- <div id="main-content">
- <div class="cnbrowse_div">
- [% INCLUDE "default/opac/parts/record/cnbrowse.tt2" %]
- </div>
- <div class="common-full-pad"></div>
- </div>
- </div>
-[% END %]
+++ /dev/null
-<form id="adv_search_form" action="[% ctx.opac_root %]/results" method="GET">
- <div class="header_middle">[% l("Expert Search") %]</div>
- <input type="hidden" name="_special" value="1" />
- <table class="expert-search">
- <tbody id="adv_expert_rows_here">
- <tr id="adv_expert_row">
- <th>[% l("Tag:") %]</th>
- <td><input type="text" name="tag" size="3" /></td>
- <th>[% l("Subfield:") %]</th>
- <td><input type="text" name="subfield" size="1" /></td>
- <th>[% l("Value:") %]</th>
- <td><input type="text" name="term" size="16" /></td>
- <td>
- <a href="javascript:;" class="row-remover"
- title="[% l('Remove row') %]" alt="[% l('Remove row') %]"
- onclick='return killRowIfAtLeast(1, this);'><img src="[% ctx.media_prefix %]/images/adv_row_close_btn.png" /></a>
- </td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <td colspan="2"><a href="javascript:addExpertRow();">[ [% l("Add row") %] ]</a></td>
- <td colspan="4">
- <input type="image" src="[% ctx.media_prefix %]/images/search_btn.gif" alt="[% l('Search') %]" title="[% l('Search') %]" />
- </td>
- </tr>
- </tfoot>
- </table>
-</form>
+++ /dev/null
-<form id="adv_search_form" action="[% ctx.opac_root %]/results" method="GET">
- <div class="header_middle">[% l("Numeric Search") %]</div>
- <input type="hidden" name="contains" value="contains" />
- <input type="hidden" name="_special" value="1" />
- <table>
- <tr>
- <td>
- <select name="qtype">
- <option value="identifier|isbn">[% l('ISBN') %]</option>
- <option value="identifier|issn">[% l('ISSN') %]</option>
- <option value="identifier|bib_cn">[% l('Bib Call Number') %]</option>
- <option value="cnbrowse">[% l('Call Number (Shelf Browse)') %]</option>
- <option value="identifier|lccn">[% l('LCCN') %]</option>
- <option value="identifier|tcn">[% l('TCN') %]</option>
- <option value="item_barcode">[% l('Item Barcode') %]</option>
- </select>
- </td>
- <td>
- <input type="text" name="query" size="16" />
- </td>
- </tr>
- <tr>
- <td colspan="2" align="right">
- <input type="image" alt="[% l('Search') %]"
- src="[% ctx.media_prefix %]/images/search_btn.gif" />
- </td>
- </table>
-</form>
+++ /dev/null
-[%
- # XXX It might be cleaner to move this into its own file or something.
- #
- # The following hash should have fail_parts as keys and user/patron-friendly
- # strings as values. If the system returns an event with a fail_part when
- # you attempt to place a hold and the fail part matches something in this
- # hash, this is the message that will be displayed to the user. Wait until
- # these are used to pass them through l() for i18n.
-
- FAIL_PART_MSG_MAP = {
- "actor.usr.barred" => "The patron is barred",
- "asset.copy.circulate" => "The item does not circulate",
- "asset.copy_location.circulate" => "Items from this shelving location do not circulate",
- "asset.copy.status" => "The item cannot circulate at this time",
- "circ.holds.target_skip_me" => "The item's circulation library does not fulfill holds",
- "config.circ_matrix_circ_mod_test" => "The patron has too many items of this type checked out",
- "config.circ_matrix_test.available_copy_hold_ratio" => "The available item-to-hold ratio is too low",
- "config.circ_matrix_test.circulate" => "Circulation rules reject this item as non-circulatable",
- "config.circ_matrix_test.total_copy_hold_ratio" => "The total item-to-hold ratio is too low",
- "config.hold_matrix_test.holdable" => "Hold rules reject this item as unholdable",
- "config.hold_matrix_test.max_holds" => "The patron has reached the maximum number of holds",
- "config.rule_age_hold_protect.prox" => "The item is too new to transit this far",
- "no_item" => "The system could not find this item",
- "no_ultimate_items" => "The system could not find any items to match this hold request",
- "no_matchpoint" => "System rules do not define how to handle this item",
- "no_user" => "The system could not find this patron",
- "transit_range" => "The item cannot transit this far"
- };
-
-
- # This works like the above has, but instead of fail_parts for keys, use
- # the textcode of the event. This will only be consulted for events
- # that do not have a fail_part matching something in the above hash.
- # Wait until these are used to pass them through l() for i18n.
-
- EVENT_MSG_MAP = {
- };
-%]
+++ /dev/null
-[%- IF ctx.page == "record";
- prev_next_root = "/record/" _ ctx.bre_id _ extras_propagator;
-ELSE;
- cn = CGI.param('cn') | uri;
- prev_next_root = "/cnbrowse?cn=" _ cn;
-END -%]
-<div id='cn_browse' class='cn_browser'>
- <div id='cn_browse_div'>
- <div class='color_4'>
- <span>[% l("You are now browsing") %]</span>
- <strong>[% ctx.browsing_ou.name %]</strong>
- </div>
- <table class='data_grid bookshelf' width='100%'>
- <thead>
- <tr>
- <td>
- <a id='cn_browse_prev' class='classic_link' href="[% ctx.opac_root _ prev_next_root _ '&cnoffset=' _ ((CGI.param('cnoffset') || 0) - 1) _ '&expand=cnbrowse#cnbrowse' %]"<b>[%
- l("<< Previous Page")
- %]</b></a>
- </td>
- <td colspan='1' align='center'>[% l("Shelf Browser") %]</td>
- <td>
- <a id='cn_browse_next' class='classic_link' href="[% ctx.opac_root _ prev_next_root _ '&cnoffset=' _ ((CGI.param('cnoffset') || 0) + 1) _ '&expand=cnbrowse#cnbrowse' %]"<b>[%
- l("Next Page >>")
- %]</b></a>
- </td>
- </tr>
- </thead>
- <tbody id='cn_tbody'>
- [% tr_open = 0; FOR cn IN ctx.browsed_call_numbers %]
- [%- IF loop.index % 3 == 0; tr_open = 1 %]
- <tr class='cn_browse_row'>
- [% END -%]
- <td class='cn_browse_item' width='25%' valign='top'>
- [% rec_attrs = {marc_xml => cn.record.marc};
- PROCESS get_marc_attrs args=rec_attrs;
- ident = rec_attrs.isbn_clean || rec_attrs.upc;
- IF ident %]
- <a href="[% ctx.opac_root %]/record/[% cn.record.id _ extras_propagator %]"><img height='60' width='50'
- class='cn_browse_info' name='cn_browse_pic' border='0'
- src="[% ctx.media_prefix %]/opac/extras/ac/jacket/small/[% ident %]" /></a>
- [% END %]
- <div class='cn_browse_info bold' name='cn_browse_cn'>[% cn.label %]</div>
- <div class='cn_browse_info'>
- <a name='cn_browse_title' class='classic_link' href="[% ctx.opac_root %]/record/[% cn.record.id _ extras_propagator %]">[% rec_attrs.title %]</a>
- </div>
- [% IF rec_attrs.author %]<div class='cn_browse_info'>
- <a name='cn_browse_author' class='classic_link'
- href="[% ctx.opac_root %]/results?qtype=author&query=[%- rec_attrs.author | replace('[,\.:;]', '') | uri %]&loc=[% CGI.param('loc') | uri %]">[% rec_attrs.author %]</a>
- </div>[% END %]
- <div class='cn_browse_info' name='cn_browse_lib'>[% cn.owning_lib.name %]</div>
- </td>
- [% IF loop.index % 3 == 2; tr_open = 0 %]
- </tr>
- [% END %]
- [% END; IF tr_open %]</tr>[% END %]
- </tbody>
- </table>
- </div>
-</div>
+++ /dev/null
-<div class='rdetail_extras_div'>
- [% IF attrs.summary %]
- <div class='rdetail-extras-summary'>
- <strong>[% l('Summary: ') %]</strong>[% attrs.summary %]
- </div>
- [% END %]
-
- <!-- Embedded content cafe iframe -->
- [% ident = attrs.isbn_clean || attrs.upc %]
- <iframe width="100%" height="400" frameborder="0"
- src="http[% CGI.https ? 's' : '' %]://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=[%-
- ENV.OILS_CONTENT_CAFE_USER %]&Password=[% ENV.OILS_CONTENT_CAFE_PASS %]&ItemKey=[% ident %]&Options=Y" >
- </iframe>
-</div>
-
+++ /dev/null
-
-<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
- <button dojoType='dijit.form.Button'
- onclick="displayGlobalDiv('vl-queue-div');">↖ &vandelay.back.to.import.queue;</button>
-</div>
-
-<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
- <div id='vl-import-error-record' class='hidden'>
- <h1>Import Errors</h1><br/>
- <table>
- <tbody>
- <tr><td>ID</td><td id='vl-error-id'/></tr>
- <tr><td>Import Error</td><td id='vl-error-import-error'/></tr>
- <tr><td>Error Detail</td><td id='vl-error-error-detail'/></tr>
- <tr><td>Title</td><td id='vl-error-title'/></tr>
- <tr><td>Author</td><td id='vl-error-author'/></tr>
- <tr><td>ISBN</td><td id='vl-error-isbn'/></tr>
- <tr><td>ISSN</td><td id='vl-error-issn'/></tr>
- <tr><td>UPC</td><td id='vl-error-upc'/></tr>
- </tbody>
- </table>
- </div>
-</div>
-
-<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
- <div class='hidden' id='vl-import-error-grid-some'>
- <table jsId="vlImportErrorGrid"
- dojoType="openils.widget.AutoGrid"
- autoHeight='true'
- fieldOrder="['barcode', 'call_number', 'owning_lib', 'import_error', 'error_detail']"
- query="{id: '*'}"
- hidePaginator='true'
- showColumnPicker='true'
- columnPickerPrefix='"vandelay.item.import_error"'
- fmClass='vii'>
- <thead>
- <tr>
- <th field='owning_lib' get='vlGetOrg'/>
- <th field='circ_lib' get='vlGetOrg'/>
- </tr>
- </thead>
- </table>
- </div>
-</div>
-<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
- <div class='hidden' id='vl-import-error-grid-all'>
- <h1>Import Items</h1><br/>
- <input dojoType='dijit.form.CheckBox' jsId='vlImportItemsShowErrors' onchange='vlLoadErrorUIAll();'/>
- <span>Limit to Import Failures</span>
- <table width='100%'><tr><td width='100%' align='right'>
- <select id='vl-item-export-options' style='margin-right: 10px;'>
- <!-- TODO I18N -->
- <option value=''>Export Items As...</option>
- <option value='print'>Print</option>
- <option value='csv'>CSV</option>
- <option value='email'>Email</option>
- </select>
- </td></tr></table>
- <table jsId="vlAllImportErrorGrid"
- dojoType="openils.widget.AutoGrid"
- autoHeight='true'
- fieldOrder="['barcode', 'call_number', 'owning_lib', 'import_error', 'error_detail']"
- query="{id: '*'}"
- showPaginator='true'
- showColumnPicker='true'
- columnPickerPrefix='"vandelay.item.import_error"'
- fmClass='vii'>
- <thead>
- <tr>
- <th field='owning_lib' get='vlGetOrg'/>
- <th field='circ_lib' get='vlGetOrg'/>
- </tr>
- </thead>
- </table>
- </div>
-</div>
-