LP#1785681 Patron address copy to clipboard
authorBill Erickson <berickxx@gmail.com>
Mon, 6 Aug 2018 19:18:35 +0000 (15:18 -0400)
committerGalen Charlton <gmc@equinoxinitiative.org>
Fri, 5 Oct 2018 21:18:53 +0000 (17:18 -0400)
Support copying formatted addresses to the clipboard in the browser
staff client, similar to the XUL client.  Action is performed via a new
link in the addresses section (next to "print") in the patron summary
sidebar.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Garry Collum <gcollum@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/templates/staff/circ/patron/t_summary.tt2
Open-ILS/web/js/ui/default/staff/circ/patron/app.js

index c89a007..6b16b66 100644 (file)
         <fieldset>
           <legend ng-class="{'patron-summary-alert': addr.valid() == 'f'}">
             {{addr.address_type()}} 
         <fieldset>
           <legend ng-class="{'patron-summary-alert': addr.valid() == 'f'}">
             {{addr.address_type()}} 
-            <a href class="pad-horiz patron-summary-act-link" 
-              ng-click="print_address(addr)">[% l('(print)') %]</a>
+            (<a href class="patron-summary-act-link" 
+                ng-click="copy_address(addr)">[%- l('copy') -%]</a><a 
+                href class="patron-summary-act-link" 
+                ng-click="print_address(addr)">[%- l('/print') -%]</a>)
           </legend>
           <div>{{addr.street1()}} {{addr.street2()}}</div>
           <div>{{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</div>
         </fieldset>
           </legend>
           <div>{{addr.street1()}} {{addr.street2()}}</div>
           <div>{{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</div>
         </fieldset>
+        <textarea id="patron-address-copy-{{addr.id()}}" rows="2" 
+          style="visibility:hidden">[%- l(
+            '[_1] [_2] [_3]&#13;&#10;[_4] [_5]&#13;&#10;[_6], [_7] [_8]', 
+            '{{patron().first_given_name()}}',
+            '{{patron().second_given_name()}}',
+            '{{patron().family_name()}}',
+            '{{addr.street1()}}',
+            '{{addr.street2()}}',
+            '{{addr.city()}}',
+            '{{addr.state()}}',
+            '{{addr.post_code()}}') 
+          -%]</textarea>
       </div>
     </div>
   </div>
       </div>
     </div>
   </div>
index d37ed64..d007257 100644 (file)
@@ -339,6 +339,24 @@ function($scope,  $q , $location , $filter , egCore , egNet , egUser , egAlertDi
         });
     }
 
         });
     }
 
+    $scope.copy_address = function(addr) {
+        // Alas, navigator.clipboard is not yet supported in FF and others.
+        var lNode = document.querySelector('#patron-address-copy-' + addr.id());
+
+        // Un-hide the textarea just long enough to copy its data.
+        // Using node.style instead of ng-show/ng-hide in hopes it 
+        // will be quicker, so the user never sees the textarea.
+        lNode.style.visibility = 'visible';
+        lNode.focus();
+        lNode.select();
+
+        if (!document.execCommand('copy')) {
+            console.error('Copy command failed');
+        }
+
+        lNode.style.visibility = 'hidden';
+    }
+
     $scope.toggle_expand_summary = function() {
         if ($scope.collapsePatronSummary) {
             $scope.collapsePatronSummary = false;
     $scope.toggle_expand_summary = function() {
         if ($scope.collapsePatronSummary) {
             $scope.collapsePatronSummary = false;