From 6a898516e8552655590ae9d297a8d725ff9e486d Mon Sep 17 00:00:00 2001 From: Jeff Davis Date: Mon, 11 Mar 2024 12:42:22 -0700 Subject: [PATCH 01/16] LP#2019211: remove remoteauth.cgi The remoteauth.cgi script is obsolete now that we have an EZProxy integration method that uses auth profiles. Release-Note: Removes obsolete remoteauth.cgi example script. Signed-off-by: Jeff Davis Signed-off-by: Galen Charlton Signed-off-by: Jane Sandberg --- Open-ILS/examples/remoteauth.cgi | 92 -------------------------------- 1 file changed, 92 deletions(-) delete mode 100755 Open-ILS/examples/remoteauth.cgi diff --git a/Open-ILS/examples/remoteauth.cgi b/Open-ILS/examples/remoteauth.cgi deleted file mode 100755 index 67c7b5c795..0000000000 --- a/Open-ILS/examples/remoteauth.cgi +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/perl - -# This CGI script might be useful for providing an easy way for EZproxy to authenticate -# users against an Evergreen instance. -# -# For example, if you modify your eg.conf by adding this: -# Alias "/cgi-bin/ezproxy/" "/openils/var/cgi-bin/ezproxy/" -# -# AddHandler cgi-script .pl -# AllowOverride None -# Options +ExecCGI -# allow from all -# -# -# and make that directory and copy remoteauth.cgi to it: -# mkdir /openils/var/cgi-bin/ezproxy/ -# cp remoteauth.cgi /openils/var/cgi-bin/ezproxy/ -# -# Then you could add a line like this to the users.txt of your EZproxy instance: -# -# ::external=https://hostname/cgi-bin/ezproxy/remoteauth.cgi,post=user=^u&passwd=^p -# - -#use strict; -use warnings; - -use CGI; -use Digest::MD5 qw(md5_hex); - -use OpenSRF::EX qw(:try); -use OpenSRF::System; -use OpenSRF::AppSession; - -my $bootstrap = '/openils/conf/opensrf_core.xml'; -my $cgi = new CGI; -my $u = $cgi->param('user'); -my $usrname = $cgi->param('usrname'); -my $barcode = $cgi->param('barcode'); -my $agent = $cgi->param('agent'); # optional, but preferred -my $p = $cgi->param('passwd'); - -print $cgi->header(-type=>'text/html', -expires=>'-1d'); - -OpenSRF::AppSession->ingress('remoteauth'); -OpenSRF::System->bootstrap_client( config_file => $bootstrap ); - -if (!($u || $usrname || $barcode) || !$p) { - print '+INCOMPLETE'; -} else { - my $nametype; - if ($usrname) { - $u = $usrname; - $nametype = 'username'; - } elsif ($barcode) { - $u = $barcode; - $nametype = 'barcode'; - } else { - $nametype = 'username'; - my $regex_response = OpenSRF::AppSession - ->create('open-ils.actor') - ->request('open-ils.actor.ou_setting.ancestor_default', 1, 'opac.barcode_regex') - ->gather(1); - if ($regex_response) { - my $regexp = $regex_response->{'value'}; - $nametype = 'barcode' if ($u =~ qr/$regexp/); - } - } - my $seed = OpenSRF::AppSession - ->create('open-ils.auth') - ->request( 'open-ils.auth.authenticate.init', $u ) - ->gather(1); - if ($seed) { - my $response = OpenSRF::AppSession - ->create('open-ils.auth') - ->request( 'open-ils.auth.authenticate.verify', - { $nametype => $u, password => md5_hex($seed . md5_hex($p)), type => 'opac', agent => $agent }) - ->gather(1); - if ($response) { - if ($response->{ilsevent} == 0) { - print '+VALID'; - } else { - print '+NO'; - } - } else { - print '+BACKEND_ERROR'; - } - } else { - print '+BACKEND_ERROR'; - } -} - -1; -- 2.43.2 From 780393f2c9d64408cafd4138c076eb4b5b9ed215 Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Wed, 31 Jan 2024 14:09:49 -0500 Subject: [PATCH 02/16] LP#2051874: new tool to help create release notes extract_release_notes_from_commits.pl, found in docs/tools in the source tree, looks for release note, author, committer, reviewer, and sponsor information from a stream of commits in the branch specified by the --current-branch option from the commit that is the common ancestor of the branch specified by --prev-release-branch, which will normally be a tag branch for a previous release. The output (sent to standard output) is AsciiDoc suitable for pasting in release notes listing the short release notes (as entered in Release-note tags in the commit messages), the contributors (defined as patch authors, committers, and reviewers from the Signed-off-by tags in the commit messages) and sponsors (from the Sponsored-by tags in the commit messages). The output of this script should be proofread before publishing release notes. Usage: --prev-release-branch= Branch identifying the previous release to compare against. Would be something like origin/tags/rel_3_12_0 --current-branch= Branch to look for commits on. If not specified, defaults to "HEAD" --help Print this help message To test ------- [1] Ensure that your Git checkout is up to date. [2] Run the tool and compare its output with what you would expect from a manual inspection of the Git commit log. Release-note: New development tool to help prepare release notes using information from Git commits. Signed-off-by: Galen Charlton Signed-off-by: Andrea Buntz Neiman Signed-off-by: Jane Sandberg --- .../extract_release_notes_from_commits.pl | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100755 docs/tools/extract_release_notes_from_commits.pl diff --git a/docs/tools/extract_release_notes_from_commits.pl b/docs/tools/extract_release_notes_from_commits.pl new file mode 100755 index 0000000000..37f2ed4399 --- /dev/null +++ b/docs/tools/extract_release_notes_from_commits.pl @@ -0,0 +1,145 @@ +#!/usr/bin/perl + +# Copyright (C) 2024 Equinox Open Library Initiative, Inc. +# Author: Galen Charlton +# +# License: +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +use strict; +use warnings; + +use Getopt::Long; + +my $branch = "HEAD"; +my $prev; +my $show_help; + +GetOptions( + 'prev-release-branch=s' => \$prev, + 'current-branch=s' => \$branch, + 'help' => \$show_help, +); + +my $help = qq($0: extract release note entries from Git + +This utility looks for release note, author, committer, +reviewer, and sponsor information from a stream of commits +in the branch specified by the --current-branch option +from the commit that is the common ancestor of the branch +specified by --prev-release-branch, which will normally be +a tag branch for a previous release. + +The output (sent to standard output) is AsciiDoc suitable for +pasting in release notes listing the short release notes (as +entered in Release-note tags in the commit messages), the +contributors (defined as patch authors, committers, and reviewers +from the Signed-off-by tags in the commit messages) and sponsors +(from the Sponsored-by tags in the commit messages). + +The output of this script should be proofread before publishing +release notes. + +Usage: + +--prev-release-branch= + Branch identifying the previous release to compare + against. Would be something like origin/tags/rel_3_12_0 +--current-branch= + Branch to look for commits on. If not specified, defaults + to "HEAD" +--help + Print this help message +); + +if ($show_help) { + print $help; + exit 0; +} + +unless ($prev) { + print STDERR "Error: missing option --prev-release-branch\n\n"; + print STDERR $help; + exit 1; +} + +my $merge_base = `git merge-base $prev $branch`; +chomp $merge_base; +my $commits = `git log ${merge_base}..${branch} -z --pretty=fuller --reverse`; + +my %authors = (); +my %committers = (); +my %reviewers = (); +my %sponsors = (); + +print "==== Miscellaneous Release Notes ====\n\n"; +foreach my $commit (split /\0/, $commits, -1) { + my @lines = split /\n/, $commit, -1; + + shift @lines; # ignore the first ilne + my ($author) = (shift(@lines) =~ /^Author:\s+(.*?) Date: Wed, 21 Feb 2024 08:09:06 -0500 Subject: [PATCH 03/16] LP#2051874: various improvements * Tighten up parsing of Release-notes: tags per a suggestion from Jason Stephenson * Recognize Co-authored-by tags * Recognize Signed-off-by tags that do not have email addresses * Put bug number at the end of the notes to follow current practice Signed-off-by: Galen Charlton Signed-off-by: Andrea Buntz Neiman Signed-off-by: Jane Sandberg --- .../extract_release_notes_from_commits.pl | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/tools/extract_release_notes_from_commits.pl b/docs/tools/extract_release_notes_from_commits.pl index 37f2ed4399..c6ec3e638c 100755 --- a/docs/tools/extract_release_notes_from_commits.pl +++ b/docs/tools/extract_release_notes_from_commits.pl @@ -85,7 +85,7 @@ print "==== Miscellaneous Release Notes ====\n\n"; foreach my $commit (split /\0/, $commits, -1) { my @lines = split /\n/, $commit, -1; - shift @lines; # ignore the first ilne + shift @lines; # ignore the first line my ($author) = (shift(@lines) =~ /^Author:\s+(.*?) Date: Thu, 4 Apr 2024 14:24:23 +0000 Subject: [PATCH 04/16] LP1843940 - Permission Tree Display Sort Order Applies a descending sort by permission.grp_tree_display_entry.position to the pgtde pcrud call Release-Note: Fixes custom permission tree display sort in the patron registration/edit screen Signed-off-by: Michele Morgan Signed-off-by: Terran McCanna Signed-off-by: Jane Sandberg --- .../eg2/src/app/staff/share/patron/profile-select.component.ts | 2 +- Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/staff/share/patron/profile-select.component.ts b/Open-ILS/src/eg2/src/app/staff/share/patron/profile-select.component.ts index 6063c105f1..209497839a 100644 --- a/Open-ILS/src/eg2/src/app/staff/share/patron/profile-select.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/share/patron/profile-select.component.ts @@ -95,7 +95,7 @@ export class ProfileSelectComponent implements ControlValueAccessor, OnInit { return this.pcrud.search('pgtde', {org: this.org.ancestors(this.auth.user().ws_ou(), true)}, - {flesh: 1, flesh_fields: {'pgtde': ['grp']}}, + {flesh: 1, flesh_fields: {'pgtde': ['grp', 'children']}, 'order_by':{'pgtde':'position desc'}}, {atomic: true} ).toPromise().then(groups => { diff --git a/Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js b/Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js index 2765a31a9a..5e739e5a55 100644 --- a/Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js +++ b/Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js @@ -516,7 +516,7 @@ angular.module('egCoreMod') service.searchPermGroupEntries = function(org) { return egCore.pcrud.search('pgtde', {org: org, parent: null}, - {flesh: -1, flesh_fields: {pgtde: ['grp', 'children']}}, {atomic: true} + {flesh: -1, flesh_fields: {pgtde: ['grp', 'children']}, 'order_by':{'pgtde':'position desc'}}, {atomic: true} ).then(function(treeArray) { if (!treeArray.length && egCore.org.get(org).parent_ou()) { return service.searchPermGroupEntries(egCore.org.get(org).parent_ou()); -- 2.43.2 From 6f5460a1d50935ab9bf6db783f308794cfcc5916 Mon Sep 17 00:00:00 2001 From: Stephanie Leary Date: Tue, 19 Dec 2023 16:04:35 +0000 Subject: [PATCH 05/16] LP2042879 Shelving Location Groups Admin accessibility Fixes duplicate groups in the All Shelving Locations list. Corrects various accessibility issues in Admin > Local > Shelving Location Groups: * Keyboard support for all buttons, including up/down arrow key support for drag and drop * Labels for all inputs, including checkboxes * List and table markup, to provide context and navigation options for screen reader users * Headings, for screen reader navigation * Responsive layout to allow content to reflow when text is zoomed in This also revises the drag and drop logic so that the position numbers increment from the last unchanged position rather than their previous value (which could result in unnecessarily large numbers). Release-note: Refactors Shelving Location Groups Admin for accessibility Signed-off-by: Stephanie Leary Signed-off-by: Terran McCanna Signed-off-by: blake Signed-off-by: Steven Mayo Signed-off-by: Shula Link --- .../shelving_location_groups.component.css | 57 ++++ .../shelving_location_groups.component.html | 295 +++++++++--------- .../shelving_location_groups.component.ts | 178 +++++++---- 3 files changed, 320 insertions(+), 210 deletions(-) create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.css diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.css b/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.css new file mode 100644 index 0000000000..322ccc4103 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.css @@ -0,0 +1,57 @@ +.list-striped.list-border { + border-top: 2px solid currentColor; +} + +.list-striped li:nth-child(odd) { + background-color: rgba(0, 0, 100, 0.05); +} + +li .form-check { + margin-bottom: 0; +} + +table { + --bs-table-striped-bg: rgba(0, 0, 100, 0.05); + --bs-table-active-bg: rgba(var(--bs-blue-rgb), 0.15); +} + +tbody th, +tbody td { + vertical-align: middle; +} + +table .numeric { + font-variant-numeric: tabular-nums lining-nums; + padding-right: 2rem; + text-align: right; +} + +tr.drag-target th, +tr.drag-target td { + border-top: 2px solid var(--bs-primary); + background-color: rgba(var(--bs-blue-rgb), 0.15); +} + +.actions .btn-group { + display: flex; + gap: 0.5rem; + justify-content: flex-end; + align-items: center; +} + +th .btn-link, +.actions .btn-group .btn-link { + padding: 0; + margin: 0; +} + +.actions .btn-group > .btn.btn-link { + flex-basis: min-content; + flex-grow: 0; +} + +tr.locationGroup:hover, +.btn-move:hover, +.btn-move:focus { + cursor: move; +} \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.html b/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.html index 4954a1674c..d424a97aa3 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.html +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.html @@ -1,167 +1,158 @@ - - + + -
- - +
+
+
+ + +
+
+
+ +
+
-

Location groups can be re-ordered by dragging and dropping.

-
-
-
-
- - -
- -
- New Location Group -
-
-
-
- Name -
-
- Pos -
-
- Visible? -
-
-
-
- -
-
- {{group.name}} -
-
- {{group.name}} -
-
- {{group.posit}} -
-
- - Visible - - - Not Visible - -
-
- - Edit - - - Edit - - - Delete - - - Delete - - - - - - - - -
-
-
-
- -
-
- Remove → -
-
-
- - - - - - - -
- +
  • +
    + - -
  • -
    -
    -
    - - -
    -
    - ← Add -
    + +
    + + +
    -
    - - - - - - - - - -
    - - -
    + +
    +

    All Shelving Locations

    + +
      +
    • +
      + + +
      +
    • +
    +
    + @@ -177,6 +168,4 @@ text="Error when trying to remove from Group Entries"> - - \ No newline at end of file + text="Error when trying to change Location Group Order"> \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.ts index 74bf29f6dd..1115effc12 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/shelving_location_groups/shelving_location_groups.component.ts @@ -1,4 +1,5 @@ import {Component, OnInit, Input, ViewChild} from '@angular/core'; +import {finalize} from 'rxjs/operators'; import {IdlService, IdlObject} from '@eg/core/idl.service'; import {OrgService} from '@eg/core/org.service'; import {PcrudService} from '@eg/core/pcrud.service'; @@ -8,7 +9,8 @@ import {ToastService} from '@eg/share/toast/toast.service'; import {PermService} from '@eg/core/perm.service'; @Component({ - templateUrl: './shelving_location_groups.component.html' + templateUrl: './shelving_location_groups.component.html', + styleUrls: ['./shelving_location_groups.component.css'] }) export class ShelvingLocationGroupsComponent implements OnInit { @@ -22,6 +24,9 @@ export class ShelvingLocationGroupsComponent implements OnInit { selectedLocationGroup: IdlObject; permissions: number[]; hasPermission = false; + _loadingShelvingLocations = false; + _loadingGroupEntries = false; + _loadingLocationGroups = false; draggedElement: IdlObject; dragTarget: IdlObject; defaultNewRecord: IdlObject; @@ -137,23 +142,26 @@ export class ShelvingLocationGroupsComponent implements OnInit { }; loadLocationGroups = () => { + if (this._loadingLocationGroups) {return;} + this._loadingLocationGroups = true; this.locationGroups = []; this.pcrud.search('acplg', {owner: this.selectedOrgId}, { flesh: 1, flesh_fields: {acplg: ['opac_visible', 'pos', 'name']}, order_by: {acplg: 'owner'} - }).subscribe(data => { - this.processLocationGroup(data); - this.locationGroups.push(data); - }, (error: unknown) => { - console.debug(error); - }, () => { - this.sortLocationGroups(); - if (this.locationGroups.length) { - this.markAsSelected(this.locationGroups[0]); - } - this.loadGroupEntries(); - }); + }).pipe(finalize(() => this._loadingLocationGroups = false)) + .subscribe(data => { + this.processLocationGroup(data); + this.locationGroups.push(data); + }, (error: unknown) => { + console.debug(error); + }, () => { + this.sortLocationGroups(); + if (this.locationGroups.length) { + this.markAsSelected(this.locationGroups[0]); + } + this.loadGroupEntries(); + }); }; changeSelectedLocationGroup = (group) => { @@ -169,26 +177,31 @@ export class ShelvingLocationGroupsComponent implements OnInit { }; loadGroupEntries = () => { + if (this._loadingGroupEntries) {return;} + this._loadingGroupEntries = true; this.groupEntries = []; this.pcrud.search('acplgm', {lgroup: this.selectedLocationGroupId}, { flesh: 1, flesh_fields: {acplgm: ['location']}, order_by: {acplgm: ['location']} - }).subscribe(data => { - data.name = data.location().name(); - data.shortname = this.org.get(data.location().owning_lib()).shortname(); - // remove all non-alphanumeric chars to make label a valid id - data.label = (data.shortname + data.name).replace(/\W/g, ''); - data.checked = false; - this.groupEntries.push(data); - }, (error: unknown) => { - console.debug(error); - }, () => { - this.loadShelvingLocations(); - }); + }).pipe(finalize(() => this._loadingGroupEntries = false)) + .subscribe(data => { + data.name = data.location().name(); + data.shortname = this.org.get(data.location().owning_lib()).shortname(); + // remove all non-alphanumeric chars to make label a valid id + data.label = (data.shortname + data.name).replace(/\W/g, ''); + data.checked = false; + this.groupEntries.push(data); + }, (error: unknown) => { + console.debug(error); + }, () => { + this.loadShelvingLocations(); + }); }; loadShelvingLocations = () => { + if (this._loadingShelvingLocations) {return;} + this._loadingShelvingLocations = true; let orgList = this.org.fullPath(this.selectedOrgId, false); orgList.sort(function(a, b) { return a.ou_type().depth() < b.ou_type().depth() ? -1 : 1; @@ -200,6 +213,7 @@ export class ShelvingLocationGroupsComponent implements OnInit { (group) => group.location().id()); this.shelvingLocations = []; this.pcrud.search('acpl', {owning_lib : orgList, deleted: 'f'}) + .pipe(finalize(() => this._loadingShelvingLocations = false)) .subscribe(data => { data.name = data.name(); data.shortname = this.org.get(data.owning_lib()).shortname(); @@ -211,7 +225,7 @@ export class ShelvingLocationGroupsComponent implements OnInit { } else { data.hidden = true; } - this.shelvingLocations.push(data); + if (!data.hidden) {this.shelvingLocations.push(data);} }, (error: unknown) => { console.debug(error); }, () => { @@ -230,10 +244,20 @@ export class ShelvingLocationGroupsComponent implements OnInit { }); }; - addEntries = () => { - const checkedEntries = this.shelvingLocations.filter((entry) => { + addEntryCount() { + if (this.entriesToAdd() && this.entriesToAdd().length > 0) {return this.entriesToAdd().length;} + } + + entriesToAdd() { + if (!this.shelvingLocations) {return;} + + return this.shelvingLocations.filter((entry) => { return entry.checked; }); + } + + addEntries = () => { + const checkedEntries = this.entriesToAdd(); checkedEntries.forEach((entry) => { const newGroupEntry = this.idl.create('acplgm'); newGroupEntry.location(entry); @@ -259,10 +283,20 @@ export class ShelvingLocationGroupsComponent implements OnInit { }); }; - removeEntries = () => { - const checkedEntries = this.groupEntries.filter((entry) => { + removeEntryCount() { + if (this.entriesToRemove() && this.entriesToRemove().length > 0) {return this.entriesToRemove().length;} + } + + entriesToRemove() { + if (!this.groupEntries) {return;} + + return this.groupEntries.filter((entry) => { return entry.checked; }); + } + + removeEntries = () => { + const checkedEntries = this.entriesToRemove(); this.pcrud.remove(checkedEntries).subscribe( idRemoved => { idRemoved = parseInt(idRemoved, 10); @@ -300,6 +334,28 @@ export class ShelvingLocationGroupsComponent implements OnInit { this.checkCurrentPermissions(); }; + moveUp($event, group, index) { + $event.preventDefault(); + if (index === 0) { + return; + } + + this.draggedElement = group; + this.assignNewPositions(index, index - 1); + setTimeout($event.target.focus()); + } + + moveDown($event, group, index) { + $event.preventDefault(); + if (index === this.locationGroups.length - 1) { + return; + } + + this.draggedElement = group; + this.assignNewPositions(index, index + 1); + setTimeout($event.target.focus()); + } + onDragStart = (event, locationGroup) => { this.draggedElement = locationGroup; }; @@ -310,39 +366,43 @@ export class ShelvingLocationGroupsComponent implements OnInit { onDragEnter = (event, locationGroup) => { this.dragTarget = locationGroup; - // remove border where we previously were dragging - if (event.relatedTarget) { - event.relatedTarget.parentElement.style.borderTop = 'none'; - } - // add border above target location group - if (event.target.parentElement !== null) { - if (event.target.parentElement.classList.contains('locationGroup')) { - event.target.parentElement.style.borderTop = '1px solid black'; - } - } }; onDragDrop = (event, index) => { // do nothing if element is dragged onto itself - if (this.draggedElement !== this.dragTarget) { - this.assignNewPositions(index); + if (this.draggedElement === this.dragTarget) { + this.dragTarget = null; + return; } - event.target.parentElement.style.borderTop = 'none'; + + const moveFrom = this.locationGroups.indexOf(this.draggedElement); + const moveTo = this.locationGroups.indexOf(this.dragTarget); + // clear styles before everything else this.draggedElement = null; this.dragTarget = null; + this.assignNewPositions(moveFrom, moveTo); }; - assignNewPositions (index) { - const endingPos = this.dragTarget.posit; + assignNewPositions(moveFrom, moveTo) { + if (moveTo > this.locationGroups.length) { + moveTo = this.locationGroups.length; + } + // console.debug("Moving ", moveFrom, " to ", moveTo); + this.locationGroups.splice(moveTo, 0, this.locationGroups.splice(moveFrom, 1)[0]); + + // find the position of the group before the first one we changed + let newPosition = -1; + const firstIndex = Math.min(moveFrom, moveTo); + if (firstIndex > 0) { + newPosition = this.locationGroups[firstIndex - 1].posit; + } + + const lastIndex = Math.max(moveFrom, moveTo); + const locationGroupsToUpdate = []; - this.draggedElement.pos(endingPos); - this.draggedElement.posit = endingPos; - locationGroupsToUpdate.push(this.draggedElement); - // add 1 to the position of all groups after the one we inserted - for (let i = index; i < this.locationGroups.length; i++) { - // we already processed the item being dragged; skip it - if (this.locationGroups[i] === this.draggedElement) { continue; } - const newPosition = this.locationGroups[i].posit + 1; + // add 1 to the position of all groups from the earliest one we changed + for (let i = firstIndex; i <= lastIndex; i++) { + newPosition++; this.locationGroups[i].pos(newPosition); this.locationGroups[i].posit = newPosition; locationGroupsToUpdate.push(this.locationGroups[i]); @@ -363,11 +423,15 @@ export class ShelvingLocationGroupsComponent implements OnInit { () => { this.sortLocationGroups(); if (errorHappened) { - this.changeOrderFailure.current().then(msg => - this.toast.warning(msg)); + this.changeOrderFailure.current().then(msg => { + this.toast.warning(msg); + console.debug(msg); + }); } else { - this.changeOrderSuccess.current().then(msg => - this.toast.success(msg)); + this.changeOrderSuccess.current().then(msg => { + this.toast.success(msg); + console.debug(msg); + }); } } ); -- 2.43.2 From ca9699bf9ad3adbd1eaa691400a69deff43ba473 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Tue, 20 Feb 2024 12:47:10 -0500 Subject: [PATCH 06/16] LP2054454 Skip Redis Pass Propogation when Unneeded Avoid error messages from ./configure when no redis accounts file is present. -- To test: autoreconf -i ./configure --prefix=/openils --sysconfdir=/openils/conf -- If no redis accounts file is present, you should only see this in the config.log: configure:14146: result: Skipping Redis accounts password propagation Release-note: Remove unnecessary error message from ./configure installation step. Signed-off-by: Bill Erickson Signed-off-by: Jane Sandberg --- configure.ac | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/configure.ac b/configure.ac index 4729f7dc3a..765e3b9293 100644 --- a/configure.ac +++ b/configure.ac @@ -212,13 +212,19 @@ AC_ARG_WITH([redis-accounts], [REDIS_ACCOUNTS=$sysconfdir/redis-accounts.txt]) AC_SUBST([REDIS_ACCOUNTS]) -OPENSRF_BUS_PASSWORD=$(grep 'ACL SETUSER opensrf on >' ${REDIS_ACCOUNTS} | cut -d'>' -f2) -GATEWAY_BUS_PASSWORD=$(grep 'ACL SETUSER gateway on >' ${REDIS_ACCOUNTS} | cut -d'>' -f2) -ROUTER_BUS_PASSWORD=$(grep 'ACL SETUSER router on >' ${REDIS_ACCOUNTS} | cut -d'>' -f2) - -AC_SUBST([OPENSRF_BUS_PASSWORD]) -AC_SUBST([GATEWAY_BUS_PASSWORD]) -AC_SUBST([ROUTER_BUS_PASSWORD]) +# Skip password propagation if there is no password field. +AC_CHECK_FILE( + [$REDIS_ACCOUNTS], + [ + OPENSRF_BUS_PASSWORD=$(grep 'ACL SETUSER opensrf on >' ${REDIS_ACCOUNTS} | cut -d'>' -f2), + GATEWAY_BUS_PASSWORD=$(grep 'ACL SETUSER gateway on >' ${REDIS_ACCOUNTS} | cut -d'>' -f2), + ROUTER_BUS_PASSWORD=$(grep 'ACL SETUSER router on >' ${REDIS_ACCOUNTS} | cut -d'>' -f2), + AC_SUBST([OPENSRF_BUS_PASSWORD]), + AC_SUBST([GATEWAY_BUS_PASSWORD]), + AC_SUBST([ROUTER_BUS_PASSWORD]) + ], + [AC_MSG_RESULT(Skipping Redis accounts password propagation)] +) AM_CONDITIONAL(CHECK_TESTS, test x$enable_tests = xyes) -- 2.43.2 From ea6561296e8bac5a083b49bdd5066485420a9e72 Mon Sep 17 00:00:00 2001 From: Terran McCanna Date: Mon, 8 Apr 2024 13:08:30 -0400 Subject: [PATCH 07/16] LP1839878 Max Fine Rule Field Order This applies a more user-friendly field order to the Admin > Server Admin > Circulatiuon Max Fine Rules page columns and modal. (Prior to this, the order was alphabetical.) Release-note: Re-orders fields on Server Administration > Circulation Max Fine Rules Signed-off-by: Terran McCanna Signed-off-by: Jane Sandberg --- .../src/eg2/src/app/staff/admin/server/routing.module.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts index dc5ca4f416..55f13b38e2 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts @@ -43,6 +43,14 @@ const routes: Routes = [{ }, { path: 'config/print_template', component: PrintTemplateComponent +}, { + path: 'config/rule_max_fine', + component: BasicAdminPageComponent, + data: [{ + schema: 'config', + table: 'rule_max_fine', + fieldOrder: 'name,amount,is_percent,id' + }] }, { path: 'config/rule_recurring_fine', component: BasicAdminPageComponent, -- 2.43.2 From b035bfded7ab018708e1f19b3a2d30fc64dd1f50 Mon Sep 17 00:00:00 2001 From: Terran McCanna Date: Mon, 8 Apr 2024 12:51:00 -0400 Subject: [PATCH 08/16] LP1839875 Circulation Duration Rule Fields - User-Friendly Order This applies a user-friendly order to the Administration > Server Administration > Circulation Duration Rules columns and modal. (Prior to this change, the fields displayed in alphabetical order.) Release-note: Re-orders Server Admin > Circulation Duration Rules fields Signed-off-by: Terran McCanna Signed-off-by: Jane Sandberg --- .../src/eg2/src/app/staff/admin/server/routing.module.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts index 55f13b38e2..39e8e7da66 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts @@ -59,6 +59,14 @@ const routes: Routes = [{ table: 'rule_recurring_fine', fieldOrder: 'name,low,normal,high,recurrence_interval,grace_period' }] +}, { + path: 'config/rule_circ_duration', + component: BasicAdminPageComponent, + data: [{ + schema: 'config', + table: 'rule_circ_duration', + fieldOrder: 'name,shrt,normal,extended,max_renewals,max_auto_renewals' + }] }, { path: 'config/z3950_source', component: BasicAdminPageComponent, -- 2.43.2 From 36517f2ff881b0efc7197b232eade41c115355d5 Mon Sep 17 00:00:00 2001 From: Terran McCanna Date: Mon, 8 Apr 2024 16:16:32 -0400 Subject: [PATCH 09/16] LP2052641 Statistical Popularity Badge Editor Field Order This adjusts the order the fields appear in the grid columns and in the modal for Administration > Local Administration > Statistical Popularity Badges to match the order they are described in the Evergreen documentation. Release-note: Reorders the fields for Local Admin > Statistical Popularity Badges Signed-off-by: Terran McCanna Signed-off-by: Jane Sandberg --- .../eg2/src/app/staff/admin/local/routing.module.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts index 48c6464015..a5b0649b3f 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts @@ -80,6 +80,16 @@ const routes: Routes = [{ }, { path: 'config/ui_staff_portal_page_entry', component: AdminStaffPortalPageComponent +}, { + path: 'rating/badge', + component: BasicAdminPageComponent, + data: [{ + schema: 'rating', + table: 'badge', + fieldOrder: 'name,description,scope,weight,horizon_age,importance_age,importance_interval,' + + 'importance_scale,percentile,attr_filter,circ_mod_filter,src_filter,loc_grp_filter,' + + 'recalc_interval,fixed_rating,discard,last_calc,popularity_parameter' + }] }, { path: 'action/survey', loadChildren: () => -- 2.43.2 From f078afb24f89ae4a15066fc43419dfce503cbda1 Mon Sep 17 00:00:00 2001 From: Jane Sandberg Date: Wed, 17 Apr 2024 07:57:34 -0700 Subject: [PATCH 10/16] LP2052641 follow-up: use spaces instead of tab to keep lint happy Signed-off-by: Jane Sandberg --- Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts index a5b0649b3f..dc75ffc51c 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts @@ -87,7 +87,7 @@ const routes: Routes = [{ schema: 'rating', table: 'badge', fieldOrder: 'name,description,scope,weight,horizon_age,importance_age,importance_interval,' + - 'importance_scale,percentile,attr_filter,circ_mod_filter,src_filter,loc_grp_filter,' + + 'importance_scale,percentile,attr_filter,circ_mod_filter,src_filter,loc_grp_filter,' + 'recalc_interval,fixed_rating,discard,last_calc,popularity_parameter' }] }, { -- 2.43.2 From 17296d7fea50856a7313cf1976c9348fdd3b2a19 Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Tue, 26 Mar 2024 10:38:25 -0400 Subject: [PATCH 11/16] LP#1949214: do not jump-on-single-hit when doing metarecord search in staff catalog This patch fixes an issue where the staff catalog search would attempt to jump to a bib record whose ID was the same as the metarecord when doing a metarecord ("Group Formats/Editions") search that returns a single hit. Unlike the OPAC, this patch does not attempt to jump to the bib when the single metarecord has only one constituent record. To test ------- [1] Turn on the "Jump to details on 1 hit (staff client)" library setting. [2] Perform a metarecord search in the staff catalog that results in a single hit. Observe that the staff catalog jumps to an incorrect record (or no record at all). [3] Apply the patch and repeat step to. This time, the catalog should display the correct search results without attempting to jump to a single record. [4] Verify that the patch does not break jumping to the record when doing a non-metarecord search that returns a single hit. Release-note: Fixes problem where the staff catalog could attempt to jump to an incorrect record when performing a metarecord search that returns a single result. Signed-off-by: Galen Charlton Signed-off-by: Jane Sandberg --- .../app/staff/catalog/result/results.component.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts b/Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts index bad3f498b6..779e872bc6 100644 --- a/Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts @@ -88,12 +88,18 @@ export class ResultsComponent implements OnInit, OnDestroy { } } - // Jump to record page if only a single hit is returned - // and the jump is enabled by library setting + // For non-metarecord searches, jump to record page if only a + // single hit is returned and the jump is enabled by library setting. + // Unlike the OPAC version of jump-on-single-hit, the staff version + // does not attempt to jump to the bib if it is the single member + // of a sole metarecord returned by a metarecord search. jumpIfNecessary() { const ids = this.searchContext.currentResultIds(); - if (this.staffCat.jumpOnSingleHit && ids.length === 1) { - // this.router.navigate(['/staff/catalog/record/' + ids[0], { queryParams: this.catUrl.toUrlParams(this.searchContext) }]); + if ( + this.staffCat.jumpOnSingleHit && + ids.length === 1 && + !this.searchContext.termSearch.isMetarecordSearch() + ) { this.router.navigate(['/staff/catalog/record/' + ids[0]], {queryParamsHandling: 'merge'}); } } -- 2.43.2 From d177bf3a21e0a26bde8a1b4a03189e4b8a9a2193 Mon Sep 17 00:00:00 2001 From: Stephanie Leary Date: Tue, 5 Dec 2023 23:23:28 +0000 Subject: [PATCH 12/16] LP1615805 No inputs after submit in patron search (Angular) Updates the source order of the Angular Circulation patron search form's reset and submit buttons to the end so that no input fields appear after the submit button, as required for accessibility. This results in an awkward tabbing order for sighted users, but is intended as an interim step toward better accessibility while we rethink the overall design of the form. The visual layout of the form has not changed at desktop sizes, but there are now phone and tablet layouts as well. Release-note: Moves submit button to end of Angular patron search form Signed-off-by: Stephanie Leary --- .../staff/share/patron/search.component.css | 58 +++++++ .../staff/share/patron/search.component.html | 157 +++++++----------- .../staff/share/patron/search.component.ts | 3 +- 3 files changed, 121 insertions(+), 97 deletions(-) create mode 100644 Open-ILS/src/eg2/src/app/staff/share/patron/search.component.css diff --git a/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.css b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.css new file mode 100644 index 0000000000..514947cf9c --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.css @@ -0,0 +1,58 @@ +.patron-search-container { + container-type: inline-size; +} + +/* mobile-first layout: flexbox */ +.patron-search-form { + display: flex; + flex-wrap: wrap; + align-items: start; + gap: 0.5rem; +} + +/* Bootstrap sm breakpoint */ +@container (min-width: 576px) { + .patron-search-form > * { + flex-basis: 40%; + } + + .actions-more { + position: absolute; + right: 0; + top: 0; + } +} + +/* not a Bootstrap breakpoint, but where col-lg-9 can break */ +@container (min-width: 680px) { + .patron-search-form { + display: grid; + grid-template-columns: repeat(5, 1fr) max-content; + } + + .form-expanded .patron-search-form { + grid-template-rows: repeat(5, auto); + } + + .actions-more { + position: revert; + } +} + +/* place in the next to last column, first row */ +.actions-search { + grid-row: 1; + grid-column: 5; +} + +/* place in the next to last column, second row */ +.form-expanded .actions-reset { + grid-row: 2; + grid-column: 5; +} + +/* place in the last column, spanning all rows */ +.actions-more { + grid-column: 6; + grid-row: 1 / 5; +} \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.html b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.html index db05743ead..0a95c53a75 100644 --- a/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.html +++ b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.html @@ -4,129 +4,98 @@ -
    -
    -
    - +
    + +
    + +
    + + -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    + -
    -
    + -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    +
    -
    -
    -
    +
    + +
    + +
    +
    diff --git a/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts index c6a7335bf6..33d7a15f81 100644 --- a/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/share/patron/search.component.ts @@ -46,7 +46,8 @@ export interface PatronSearch { @Component({ selector: 'eg-patron-search', - templateUrl: './search.component.html' + templateUrl: './search.component.html', + styleUrls: ['search.component.css'] }) export class PatronSearchComponent implements OnInit, AfterViewInit { -- 2.43.2 From 1adc7abcde9ae5afd24f8feac68074279785e1e5 Mon Sep 17 00:00:00 2001 From: Stephanie Leary Date: Wed, 6 Dec 2023 17:45:53 +0000 Subject: [PATCH 13/16] LP1615805 No inputs after submit in patron search (AngularJS) Updates the source order of the AngularJS patron search form's reset and submit buttons to the end so that no input fields appear after the submit button, as required for accessibility. This results in an awkward tabbing order for sighted users, but is intended as an interim step toward better accessibility while we rethink the overall design of the form. The visual layout of the form has not changed at desktop sizes, but there are now phone and tablet layouts as well. The Reset button now uses the .btn-destroy style. Release-note: Moves submit button to end of AngularJS patron search form Signed-off-by: Stephanie Leary --- Open-ILS/src/templates/staff/css/circ.css.tt2 | 57 +++++- .../staff/share/t_patron_search_form.tt2 | 165 ++++++------------ 2 files changed, 112 insertions(+), 110 deletions(-) diff --git a/Open-ILS/src/templates/staff/css/circ.css.tt2 b/Open-ILS/src/templates/staff/css/circ.css.tt2 index 5a921017bc..ae4b5694d9 100644 --- a/Open-ILS/src/templates/staff/css/circ.css.tt2 +++ b/Open-ILS/src/templates/staff/css/circ.css.tt2 @@ -48,8 +48,6 @@ but the ones I'm finding aren't quite cutting it..*/ } /* let search form elements fill their containers w/ slight padding */ -#patron-search-form-row {margin-left: 0px;} -#patron-search-form div.col-md-2 { padding: 2px; } #patron-search-form input:not([type="checkbox"]) { width: 100%; } #patron-search-form .eg-org-selector, #patron-search-form .eg-org-selector button, @@ -59,6 +57,61 @@ but the ones I'm finding aren't quite cutting it..*/ text-align: left } +.patron-search-container { + container-type: inline-size; +} + +/* mobile-first layout: flexbox */ +.patron-search-form { + display: flex; + flex-wrap: wrap; + align-items: start; + gap: 0.5rem; +} + +/* Bootstrap sm breakpoint */ +@container (min-width: 576px) { + .patron-search-form > * { + flex-basis: 40%; + } + + .actions-more { + position: absolute; + right: 0; + top: 0; + } +} + +/* not a Bootstrap breakpoint, but where col-lg-9 can break */ +@container (min-width: 680px) { + .patron-search-form { + display: grid; + grid-template-columns: repeat(5, 1fr) max-content; + grid-template-rows: repeat(5, auto); + } + + .actions-more { + position: revert; + } +} + +/* place in the next to last column, first row */ +.actions-search { + grid-row: 1; + grid-column: 5; +} + +/* place in the next to last column, second row */ +.actions-reset { + grid-row: 2; + grid-column: 5; +} + +/* place in the last column, spanning all rows */ +.actions-more { + grid-column: 6; + grid-row: 1 / 5; +} #patron-payments-spreadsheet { margin-top: 10px; diff --git a/Open-ILS/src/templates/staff/share/t_patron_search_form.tt2 b/Open-ILS/src/templates/staff/share/t_patron_search_form.tt2 index 2152cab70c..efad3248e3 100644 --- a/Open-ILS/src/templates/staff/share/t_patron_search_form.tt2 +++ b/Open-ILS/src/templates/staff/share/t_patron_search_form.tt2 @@ -1,122 +1,74 @@ - - -
    -
    +
    -
    + +
    + + +
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - -
    - - -
    - - -
    -
    - -
    -
    - -
    -
    - + + -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    +
    -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    +
    -
    + +
    +
    + + +
    -- 2.43.2 From b8187f846ad02bbf9582f98f249ab42c7b05279e Mon Sep 17 00:00:00 2001 From: Stephanie Leary Date: Tue, 9 Apr 2024 14:53:25 +0000 Subject: [PATCH 14/16] LP1915464 Angular Form Field Order - Hold Policies Attempts to apply some logical order to the extensive field list for Administration > Local Administration > Hold Policies (as opposed to the fields being displayed alphabetically). New order is roughly Description - Active - Owning & Circ Libs - Record & Item Info - User Info - Hold Info - Transit Info. Release-note: Reorders fields for Local Admin > Hold Policies Signed-off-by: Terran McCanna Signed-off-by: Stephanie Leary Signed-off-by: Michele Morgan Signed-off-by: Jane Sandberg --- .../eg2/src/app/staff/admin/local/routing.module.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts index dc75ffc51c..0b1d9634f0 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts @@ -14,7 +14,16 @@ const routes: Routes = [{ }, { path: 'config/hold_matrix_matchpoint', component: BasicAdminPageComponent, - data: [{schema: 'config', table: 'hold_matrix_matchpoint', disableOrgFilter: true}] + data: [{ + schema: 'config', + table: 'hold_matrix_matchpoint', + disableOrgFilter: true, + fieldOrder: 'description,active,item_owning_ou,item_circ_ou,circ_modifier,' + + 'marc_type,marc_form,marc_bib_level,marc_vr_format,ref_flag,item_age,' + + 'user_home_ou,usr_grp,stop_blocked_user,holdable,age_hold_protect_rule,' + + 'max_holds,include_frozen_holds,request_ou,pickup_ou,requestor_grp,' + + 'strict_ou_match,transit_range,distance_is_from_owner,id' + }] }, { path: 'actor/address_alert', component: AddressAlertComponent -- 2.43.2 From 290ddfcd6273b0d33ab04e9fef141a2a1ee6c7e5 Mon Sep 17 00:00:00 2001 From: Stephanie Leary Date: Tue, 9 Apr 2024 14:53:43 +0000 Subject: [PATCH 15/16] LP1915464 Hold Policies Modal Field Group Styling Adds the IDL class name to the fieldmapper editor form classes to allow styles for individual fields. Applies new styling (extra space and a dotted line) to the first row of each logical section of the Hold Policies modal. Release-note: Adds field group styling option to fieldmapper editor Signed-off-by: Stephanie Leary Signed-off-by: Terran McCanna Signed-off-by: Michele Morgan Signed-off-by: Jane Sandberg --- .../share/fm-editor/fm-editor.component.css | 19 +++++++++++++++++++ .../share/fm-editor/fm-editor.component.html | 4 ++-- .../app/staff/admin/local/routing.module.ts | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.css b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.css index 4ed7983915..5ea45f7890 100644 --- a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.css +++ b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.css @@ -20,3 +20,22 @@ .input-group-text .material-icons { line-height: inherit; } + +/* Extra styling for logical field grouping on specific modals. In the Hold Policies +example below, chmm is the fieldmapper's class ID and item_owning_ou is the first +field name in a section that should have special row styling. */ + +.row { + --section-border: 2px dotted var(--bs-gray-900); + --section-padding: 2.5rem; +} + +/* Modal for Local Admin > Hold Policies */ +.chmm .row.item_owning_ou, +.chmm .row.user_home_ou, +.chmm .row.holdable, +.chmm .row.requestor_grp { + border-top: var(--section-border); + padding-top: var(--section-padding); +} + diff --git a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.html b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.html index f4af6004d0..40686c7da2 100644 --- a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.html +++ b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.html @@ -19,7 +19,7 @@
    -
    +
    diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts index 0b1d9634f0..d77a5fedac 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts @@ -21,8 +21,8 @@ const routes: Routes = [{ fieldOrder: 'description,active,item_owning_ou,item_circ_ou,circ_modifier,' + 'marc_type,marc_form,marc_bib_level,marc_vr_format,ref_flag,item_age,' + 'user_home_ou,usr_grp,stop_blocked_user,holdable,age_hold_protect_rule,' + - 'max_holds,include_frozen_holds,request_ou,pickup_ou,requestor_grp,' + - 'strict_ou_match,transit_range,distance_is_from_owner,id' + 'max_holds,include_frozen_holds,request_ou,pickup_ou,,strict_ou_match,' + + 'transit_range,distance_is_from_owner,requestor_grp,id' }] }, { path: 'actor/address_alert', -- 2.43.2 From ef6866aed7253542a31fb62786afd00ca6e8d522 Mon Sep 17 00:00:00 2001 From: Jane Sandberg Date: Sat, 20 Apr 2024 12:58:45 -0700 Subject: [PATCH 16/16] LP1915464 follow-up: use spaces, not tabs; remove extra comma Signed-off-by: Jane Sandberg --- .../src/eg2/src/app/staff/admin/local/routing.module.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts index d77a5fedac..1be5c7f967 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts @@ -19,9 +19,9 @@ const routes: Routes = [{ table: 'hold_matrix_matchpoint', disableOrgFilter: true, fieldOrder: 'description,active,item_owning_ou,item_circ_ou,circ_modifier,' + - 'marc_type,marc_form,marc_bib_level,marc_vr_format,ref_flag,item_age,' + - 'user_home_ou,usr_grp,stop_blocked_user,holdable,age_hold_protect_rule,' + - 'max_holds,include_frozen_holds,request_ou,pickup_ou,,strict_ou_match,' + + 'marc_type,marc_form,marc_bib_level,marc_vr_format,ref_flag,item_age,' + + 'user_home_ou,usr_grp,stop_blocked_user,holdable,age_hold_protect_rule,' + + 'max_holds,include_frozen_holds,request_ou,pickup_ou,strict_ou_match,' + 'transit_range,distance_is_from_owner,requestor_grp,id' }] }, { -- 2.43.2