LP#1731046 grid translations WIP collab/berick/lp1731046-grid-translate-dialog
authorBill Erickson <berickxx@gmail.com>
Wed, 8 Nov 2017 20:20:38 +0000 (15:20 -0500)
committerBill Erickson <berickxx@gmail.com>
Wed, 8 Nov 2017 21:52:56 +0000 (16:52 -0500)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/templates/staff/share/t_autogrid.tt2
Open-ILS/src/templates/staff/share/t_grid_translate_dialog.tt2 [new file with mode: 0644]
Open-ILS/web/js/ui/default/staff/cat/z3950/app.js
Open-ILS/web/js/ui/default/staff/services/grid.js

index e8f94d7..a43d7bd 100644 (file)
           <span class="glyphicon glyphicon-print"></span>
           [% l('Print Full Grid') %]
         </a></li>
+        <li><a href ng-click="showTranslateDialog()">
+          <span class="glyphicon glyphicon-flag"></span>
+          [% l('Translate Rows') %]
+        </a></li>
         <li role="presentation" class="divider"></li>
         <li ng-repeat="col in columns">
           <a href title="{{col.idlclass}}" ng-click="toggleColumnVisibility(col)">
diff --git a/Open-ILS/src/templates/staff/share/t_grid_translate_dialog.tt2 b/Open-ILS/src/templates/staff/share/t_grid_translate_dialog.tt2
new file mode 100644 (file)
index 0000000..0e4ba1b
--- /dev/null
@@ -0,0 +1,45 @@
+<div>
+  <div class="modal-header">
+    <button type="button" class="close" 
+      ng-click="cancel()" aria-hidden="true">&times;</button>
+    <h4 class="modal-title alert alert-info">[% l('Manage Translations') %]</h4> 
+  </div>
+  <div class="modal-body">
+    <div class="row">
+      <div class="col-md-2">
+        <span>[% l('Select Locale') %]</span>
+      </div>
+      <div class="col-md-3">
+        <select class="form-control" ng-model="locale">
+          <option ng-repeat="l in locales" value="{{l.code()}}">
+            {{l.description()}}
+          </option>
+        </select>
+      </div>
+      <div class="col-md-3"></div>
+      <div class="col-md-4">
+        <a href ng-click="prev()">[% l('Prev Row') %]</a>
+        <span class='pad-left'>
+          <a href ng-click="next()">[% l('Next Row') %]</a>
+        </span>
+      </div>
+    </div>
+    <div class="row"><hr/></div>
+    <div class="row" ng-repeat="col in columns">
+      <div class="col-md-2 pad-all-min" style="font-weight:bold">
+        {{col.label}}
+      </div>
+      <div class="col-md-5 pad-all-min">
+        {{items[item_index][col.name]}}
+      </div>
+      <div class="col-md-5 pad-all-min">
+        <input type='text' class="form-control"
+          ng-model="applied_translations[locale][col.name][pkey()]"/>
+      </div>
+    </div>
+  </div>
+  <div class="modal-footer">
+    <input type="submit" class="btn btn-primary" ng-click="apply()" value="[% l('Apply') %]"/>
+    <button class="btn btn-warning" ng-click="cancel()">[% l('Close') %]</button>
+  </div>
+</div>
index 911e4f6..04cb5d6 100644 (file)
@@ -185,10 +185,11 @@ function($scope , $q , $location , $timeout , $window,  egCore , egGridDataProvi
     $scope.local_overlay_target = egCore.hatch.getLocalItem('eg.cat.marked_overlay_record') || 0;
     $scope.mark_as_overlay_target = function() {
         var items = $scope.gridControls.selectedItems();
-        if ($scope.local_overlay_target == items[0].tcn()) {
+        if ($scope.local_overlay_target == items[0].doc_id()) {
             $scope.local_overlay_target = 0;
         } else {
-            $scope.local_overlay_target = items[0].tcn();
+            $scope.local_overlay_target = items[0].doc_id();
+            $scope.local_overlay_target_tcn = items[0].tcn();
         }
         egCore.hatch.setLocalItem('eg.cat.marked_overlay_record',$scope.local_overlay_target);
     }
index fab8679..5def013 100644 (file)
@@ -119,10 +119,10 @@ angular.module('egGridMod',
         controller : [
                     '$scope','$q','egCore','egGridFlatDataProvider','$location',
                     'egGridColumnsProvider','$filter','$window','$sce','$timeout',
-                    'egProgressDialog',
+                    'egProgressDialog','$uibModal',
             function($scope,  $q , egCore,  egGridFlatDataProvider , $location,
                      egGridColumnsProvider , $filter , $window , $sce , $timeout,
-                     egProgressDialog) {
+                     egProgressDialog , $uibModal) {
 
             var grid = this;
 
@@ -663,6 +663,83 @@ angular.module('egGridMod',
                 return false;
             }
 
+            $scope.showTranslateDialog = function() {
+                return $uibModal.open({
+                    templateUrl: './share/t_grid_translate_dialog',
+                    backdrop: 'static',
+                    size : 'lg',
+                    controller: ['$scope', '$uibModalInstance', 'locales',
+                        function($dialogScope, $uibModalInstance , locales) {
+
+                            $dialogScope.locales = locales;
+                            $dialogScope.locale = locales[0].code(); // TODO
+
+                            var columns = $dialogScope.columns = 
+                                $scope.columns.filter(
+                                    function(col) {return col.i18n});
+
+                            var translations = 
+                                $dialogScope.applied_translations = {};
+
+                            angular.forEach(locales, function(locale) {
+                                if (!translations[locale.code()]) 
+                                    translations[locale.code()] = {};
+                                angular.forEach(columns, function(col) {
+                                    translations[locale.code()][col.name] = {};
+                                });
+                            });
+
+                            $dialogScope.items = $scope.items;
+                            $dialogScope.item_index = 0;
+                            $dialogScope.prev = function() {
+                                $dialogScope.item_index--;
+                            }
+                            $dialogScope.next = function() {
+                                $dialogScope.item_index++;
+                            }
+                            $dialogScope.pkey = function() {
+                                return grid.indexValue(
+                                    $dialogScope.items[$dialogScope.item_index]);
+                            }
+
+                            function compile_strings() {
+                                var entriess = [];
+                                angular.forEach(translations, function(locale_blob, locale_code) {
+                                    angular.forEach(locale_blob, function(col_blob, col_name) {
+                                        angular.forEach(col_blob, function(string, ident) {
+                                            if (!string) return;
+                                            var i18n = new egCore.idl.i18n();
+                                            // TODO: field class may not be same as grid class !!
+                                            i18n.fq_field(grid.idlClass + '.' + col_name);
+                                            i18n.identity_value(ident);
+                                            i18n.translation(locale_code);
+                                            i18n.string(string);
+                                            entriess.push(i18n);
+                                        });
+                                    });
+                                });
+
+                                return entriess;
+                            }
+
+                            $dialogScope.apply = function() {
+                                var i18n_entries = compile_strings();
+                                console.log(i18n_entries);
+                                $uibModalInstance.close()
+                            }
+                            $dialogScope.cancel = function() {
+                                $uibModalInstance.dismiss();
+                            }
+                        }
+                    ],
+                    resolve : {
+                        locales : function() {
+                            return egCore.pcrud.retrieveAll('i18n_l', {}, {atomic : true});
+                        }
+                    }
+                });
+            }
+
             // returns the list of selected item objects
             grid.getSelectedItems = function() {
                 return $scope.items.filter(
@@ -1572,6 +1649,7 @@ angular.module('egGridMod',
             }
 
             column.datatype = idl_info.idl_field.datatype;
+            column.i18n = idl_info.idl_field.i18n;
             
             if (!column.label) {
                 column.label = idl_info.idl_field.label || column.name;