From: Bill Erickson <berickxx@gmail.com>
Date: Mon, 24 Sep 2018 20:19:33 +0000 (-0400)
Subject: LP#1794176 Avoid capturing grid cell tooltip/display values
X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=25f60b4e7d9ba78cb96cd177659c8f82493287e2;p=contrib%2FConifer.git

LP#1794176 Avoid capturing grid cell tooltip/display values

Remove the grid-tooltip logic that captured the cell content into a
template-level variable so the content only needed to be generated once
for both the tooltip and cell display.  This logic fails to handle cases
where the cell content is dynamic, typically the result of row
attributes being modified via external process.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
---

diff --git a/Open-ILS/src/templates/staff/share/t_autogrid.tt2 b/Open-ILS/src/templates/staff/share/t_autogrid.tt2
index c23a72a4f9..19862d4d48 100644
--- a/Open-ILS/src/templates/staff/share/t_autogrid.tt2
+++ b/Open-ILS/src/templates/staff/share/t_autogrid.tt2
@@ -330,13 +330,12 @@
                translate that content into HTML and insert it here -->
           <span ng-if="col.template && !col.compiled" 
             id="{{cellId(col, item)}}"
-            style="padding-left:5px; padding-right:10px;"
-            ng-init="html_value=translateCellTemplate(col, item)">
+            style="padding-left:5px; padding-right:10px;">
             <span tooltip-class="eg-grid-tooltip"
               tooltip-class="eg-grid-tooltip"
               tooltip-placement="top-left"
-              uib-tooltip-html="cellOverflowed(cellId(col, item), 1) ? html_value : ''">
-              <span ng-bind-html="html_value"></span>
+              uib-tooltip-html="getHtmlTooltip(col, item)">
+              <span ng-bind-html="translateCellTemplate(col, item)"></span>
             </span>
           </span>
 
@@ -348,13 +347,12 @@
                pass through datatype-specific filtering. -->
           <span ng-if="!col.template" 
             id="{{cellId(col, item)}}"
-            ng-init="text_value = (itemFieldValue(item, col) | egGridValueFilter:col:item)"
-            uib-tooltip="{{cellOverflowed(cellId(col, item), 1) ? text_value : ''}}"
+            uib-tooltip="{{cellOverflowed(cellId(col, item), 1) ? (itemFieldValue(item, col) | egGridValueFilter:col:item) : ''}}"
             tooltip-class="eg-grid-tooltip"
             tooltip-placement="top-left"
             tooltip-class="eg-grid-tooltip"
             style="padding-left:5px; padding-right:10px;">
-            {{text_value}}
+            {{itemFieldValue(item, col) | egGridValueFilter:col:item}}
           </span>
       </div>
     </div>
diff --git a/Open-ILS/web/js/ui/default/staff/services/grid.js b/Open-ILS/web/js/ui/default/staff/services/grid.js
index a1f8d5fee0..833c0fc39e 100644
--- a/Open-ILS/web/js/ui/default/staff/services/grid.js
+++ b/Open-ILS/web/js/ui/default/staff/services/grid.js
@@ -1144,6 +1144,13 @@ angular.module('egGridMod',
                 return val;
             }
 
+            $scope.getHtmlTooltip = function(col, item) {
+                if ($scope.cellOverflowed($scope.cellId(col, item), 1)) {
+                    return grid.getItemTextContent(item, col);
+                }
+                return "";
+            }
+
             /**
              * Fetches all grid data and transates each item into a simple
              * key-value pair of column name => text-value.