WIP: start work on Z39.50 interface
authorGalen Charlton <gmc@esilibrary.com>
Tue, 9 Jun 2015 22:10:18 +0000 (22:10 +0000)
committerGalen Charlton <gmc@esilibrary.com>
Thu, 9 Jul 2015 22:03:52 +0000 (22:03 +0000)
So far, fetch targets. Next steps:

- add directive for the search input boxes;
  will need to watch the target list
- add search service

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Open-ILS/src/templates/staff/cat/z3950/index.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/cat/z3950/t_list.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/cat/z3950/t_target.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/navbar.tt2
Open-ILS/web/js/ui/default/staff/cat/services/z3950.js [new file with mode: 0644]

diff --git a/Open-ILS/src/templates/staff/cat/z3950/index.tt2 b/Open-ILS/src/templates/staff/cat/z3950/index.tt2
new file mode 100644 (file)
index 0000000..02f8d08
--- /dev/null
@@ -0,0 +1,17 @@
+[%
+  WRAPPER "staff/base.tt2";
+  ctx.page_title = l("Z39.50");
+  ctx.page_app = "egCatZ3950Search";
+  ctx.page_ctrl = "Z3950SearchCtrl";
+%]
+
+[% BLOCK APP_JS %]
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/grid.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/ui.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/cat/z3950/app.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/cat/services/z3950.js"></script>
+[% END %]
+
+<div ng-view></div>
+
+[% END %]
diff --git a/Open-ILS/src/templates/staff/cat/z3950/t_list.tt2 b/Open-ILS/src/templates/staff/cat/z3950/t_list.tt2
new file mode 100644 (file)
index 0000000..5f12a1f
--- /dev/null
@@ -0,0 +1,18 @@
+<div>
+<strong>[% l('Search') %]</strong>
+</div>
+
+<div>
+<strong>[% l('Targets') %]</strong>
+<eg-z3950-target-list></eg-z3950-target-list>
+</div>
+
+<eg-grid
+  id-field="index"
+  features="-display,-sort,-multisort"
+  main-label="[% l('Results') %]"
+  items-provider="gridDataProvider"
+  grid-controls="gridControls"
+  persist-key="cat.z3950_results">
+
+</eg-grid>
diff --git a/Open-ILS/src/templates/staff/cat/z3950/t_target.tt2 b/Open-ILS/src/templates/staff/cat/z3950/t_target.tt2
new file mode 100644 (file)
index 0000000..5290300
--- /dev/null
@@ -0,0 +1,4 @@
+<div ng-repeat="target in targets">
+    <span>{{target.code}} / {{target.settings.label}}}</span>
+    <span ng-if="target.settings.auth == 't'">requires auth</span>
+</div>
index dd9cb38..6e2e8f7 100644 (file)
           </li>
           <li class="divider"></li>
           <li>
+            <a href="./cat/z3950/index" target="_self">
+              <span class="glyphicon glyphicon-cloud-download"></span>
+              [% l('Import Record from Z39.50') %]
+            </a>
+          </li>
+          <li>
             <a href="./cat/catalog/vandelay" target="_self">
               <span class="glyphicon glyphicon-transfer"></span>
               [% l('MARC Batch Import/Export') %]
diff --git a/Open-ILS/web/js/ui/default/staff/cat/services/z3950.js b/Open-ILS/web/js/ui/default/staff/cat/services/z3950.js
new file mode 100644 (file)
index 0000000..1d6d918
--- /dev/null
@@ -0,0 +1,44 @@
+angular.module('egZ3950Mod', ['egCoreMod', 'ui.bootstrap'])
+
+.directive("egZ3950TargetList", function () {
+    return {
+        transclude: true,
+        restrict:   'AE',
+        scope: {
+            
+        },
+        templateUrl: './cat/z3950/t_target',
+        controller:
+                   ['$scope','egCore','egAuth',
+            function($scope , egCore,  egAuth) {
+                function loadTargets() {
+                    egCore.net.request(
+                        'open-ils.search',
+                        'open-ils.search.z3950.retrieve_services',
+                        egAuth.token()
+                    ).then(function(res) {
+                        $scope.targets = [];
+                        // native Evergreen search goes first
+                        var localTarget = res['native-evergreen-catalog'];
+                        delete res['native-evergreen-catalog'];
+                        angular.forEach(res, function(value, key) {
+                            this.push({
+                                code:       key,
+                                settings:   value
+                            });
+                        }, $scope.targets);
+                        $scope.targets.sort(function (a, b) {
+                            a = a.settings.label;
+                            b = b.settings.label;
+                            return a < b ? -1 : (a > b ? 1 : 0);
+                        }); 
+                        $scope.targets.unshift({
+                            code:       'native-evergreen-catalog',
+                            settings:   localTarget
+                        });
+                    });
+                }
+                loadTargets();
+            }]
+    }
+})