LP1849137 Catalog Patron View embedding improvements
authorBill Erickson <berickxx@gmail.com>
Tue, 29 Oct 2019 16:00:25 +0000 (12:00 -0400)
committerJane Sandberg <sandbej@linnbenton.edu>
Tue, 29 Oct 2019 19:21:55 +0000 (12:21 -0700)
Adds a readonly record detail view to the OPAC.  This is used by the
Angular catalog Patron View tab to present a version of the OPAC where
all links, buttons, and inputs are disabled.

Dynamically style the height of the embedded iframe to prevent nested
scroll bars in the Patron View.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Open-ILS/src/eg2/src/app/staff/catalog/record/opac.component.html
Open-ILS/src/eg2/src/app/staff/catalog/record/opac.component.ts
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm
Open-ILS/src/templates/opac/parts/js.tt2

index 119b888..8a67300 100644 (file)
@@ -1,5 +1,6 @@
 
 <ng-container *ngIf="url">
-  <iframe class="w-100" height="450px" [src]="url"></iframe> 
+  <iframe id='opac-iframe' class="w-100" (load)="handleLoad()" [src]="url">
+  </iframe> 
 </ng-container>
 
index 22eee58..4a5bd03 100644 (file)
@@ -1,4 +1,4 @@
-import {Component, Input} from '@angular/core';
+import {Component, Input, Renderer2} from '@angular/core';
 import {DomSanitizer} from '@angular/platform-browser';
 
 const OPAC_BASE_URL = '/eg/opac/record';
@@ -18,7 +18,7 @@ export class OpacViewComponent {
         if (id && (id + '').match(/^\d+$/)) {
             this._recordId = id;
             this.url = this.sanitizer.bypassSecurityTrustResourceUrl(
-                `${OPAC_BASE_URL}/${id}`);
+                `${OPAC_BASE_URL}/${id}?readonly=1`);
         } else {
             this._recordId = null;
             this.url = null;
@@ -29,6 +29,17 @@ export class OpacViewComponent {
         return this._recordId;
     }
 
-    constructor(private sanitizer: DomSanitizer) {}
+    constructor(
+        private sanitizer: DomSanitizer,
+        private renderer: Renderer2) {}
+
+    handleLoad() {
+        const iframe = this.renderer.selectRootElement('#opac-iframe');
+
+        // 50 extra px adds enough space to avoid the scrollbar altogether
+        const height = 50 + iframe.contentWindow.document.body.offsetHeight;
+
+        iframe.style.height = `${height}px`;
+    }
 }
 
index c071c24..bc3972b 100644 (file)
@@ -18,6 +18,7 @@ sub load_record {
     my %kwargs = @_;
     my $ctx = $self->ctx;
     $ctx->{page} = 'record';  
+    $ctx->{readonly} = $self->cgi->param('readonly');
 
     $self->timelog("load_record() began");
 
index 74a9bd4..28b043d 100644 (file)
@@ -2,10 +2,27 @@
 <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/opac/simple.js[% ctx.cache_key %]"></script>
 [% INCLUDE "opac/i18n_strings.tt2" %]
 
-[% IF ctx.want_jquery %]
+[% IF ctx.want_jquery || ctx.readonly %]
 <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/common/build/js/jquery.min.js[% ctx.cache_key %]"></script>
 [% END; # ctx.want_jquery %]
 
+[% IF ctx.readonly %]
+<script type="text/javascript">
+  $(document).ready(function() {
+    $('a').removeAttr('href');
+    $('a').click(function(event) { event.preventDefault(); });
+    $('button').prop('disabled', true);
+    $('button').click(function(event) { event.preventDefault(); });
+    $('input').prop('disabled', true);
+    $('input').click(function(event) { event.preventDefault(); });
+    $('select').prop('disabled', true);
+    $('select').click(function(event) { event.preventDefault(); });
+    $('textarea').prop('disabled', true);
+    $('textarea').click(function(event) { event.preventDefault(); });
+  });
+</script>
+[% END %]
+
 <!-- DOB validation for Patron Registration in OPAC -->
 <script type="text/javascript">
     function dobValidate(input) {