2 * Z39.50 search and import
5 angular.module('egCatZ3950Search',
6 ['ngRoute', 'ui.bootstrap', 'egCoreMod', 'egUiMod', 'egGridMod', 'egZ3950Mod', 'egMarcMod'])
8 .config(function($routeProvider, $locationProvider, $compileProvider) {
9 $locationProvider.html5Mode(true);
10 $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|blob):/); // grid export
12 var resolver = {delay : function(egStartup) {return egStartup.go()}};
14 // search page shows the list view by default
15 $routeProvider.when('/cat/z3950/search', {
16 templateUrl: './cat/z3950/t_list',
17 controller: 'Z3950SearchCtrl',
21 // default page / bucket view
22 $routeProvider.otherwise({redirectTo : '/cat/z3950/search'});
26 * List view - grid stuff
28 .controller('Z3950SearchCtrl',
29 ['$scope','$q','$location','$timeout','$window','egCore','egGridDataProvider','egZ3950TargetSvc','$modal',
30 function($scope , $q , $location , $timeout , $window, egCore , egGridDataProvider, egZ3950TargetSvc, $modal) {
32 // get list of targets
33 egZ3950TargetSvc.loadTargets();
34 egZ3950TargetSvc.loadActiveSearchFields();
36 var provider = egGridDataProvider.instance({});
38 provider.get = function(offset, count) {
39 var deferred = $q.defer();
41 var query = egZ3950TargetSvc.currentQuery();
42 if (!query.raw_search && Object.keys(query.search).length == 0) {
46 var method = query.raw_search ?
47 'open-ils.search.z3950.search_service' :
48 'open-ils.search.z3950.search_class';
50 if (query.raw_search) {
51 query.query = query.raw_search;
52 delete query['search'];
53 delete query['raw_search'];
54 query.service = query.service[0];
55 query.username = query.username[0];
56 query.password = query.password[0];
59 query['limit'] = count;
60 query['offset'] = offset;
62 var resultIndex = offset;
69 function() { deferred.resolve() },
72 for (var i in result.records) {
73 result.records[i].mvr['service'] = result.service;
74 result.records[i].mvr['index'] = resultIndex++;
75 result.records[i].mvr['marcxml'] = result.records[i].marcxml;
76 deferred.notify(result.records[i].mvr);
81 return deferred.promise;
84 $scope.z3950SearchGridProvider = provider;
85 $scope.gridControls = {};
87 $scope.search = function() {
88 $scope.z3950SearchGridProvider.refresh();
90 $scope.clearForm = function() {
91 egZ3950TargetSvc.clearSearchFields();
94 var display_form = true;
95 $scope.show_search_form = function() {
98 $scope.toggle_search_form = function() {
99 display_form = !display_form;
102 $scope.raw_search_impossible = function() {
103 return egZ3950TargetSvc.rawSearchImpossible();
105 $scope.showRawSearchForm = function() {
107 templateUrl: './cat/z3950/t_raw_search',
110 ['$scope', '$modalInstance', function($scope, $modalInstance) {
111 egZ3950TargetSvc.setRawSearch('');
112 $scope.focusMe = true;
113 $scope.ok = function(args) { $modalInstance.close(args) }
114 $scope.cancel = function () { $modalInstance.dismiss() }
116 }).result.then(function (args) {
117 if (!args || !args.raw_search) return;
119 egZ3950TargetSvc.setRawSearch(args.raw_search);
120 $scope.z3950SearchGridProvider.refresh();
124 $scope.showInCatalog = function() {
125 var items = $scope.gridControls.selectedItems();
126 // relying on cant_showInCatalog to protect us
127 var url = egCore.env.basePath +
128 'cat/catalog/record/' + items[0].tcn();
129 $timeout(function() { $window.open(url, '_blank') });
131 $scope.cant_showInCatalog = function() {
132 var items = $scope.gridControls.selectedItems();
133 if (items.length != 1) return true;
134 if (items[0]['service'] == 'native-evergreen-catalog') return false;
138 $scope.local_overlay_target = 0;
139 $scope.mark_as_overlay_target = function() {
140 var items = $scope.gridControls.selectedItems();
141 if ($scope.local_overlay_target == items[0].tcn()) {
142 $scope.local_overlay_target = 0;
144 $scope.local_overlay_target = items[0].tcn();
147 $scope.cant_overlay = function() {
148 if (!$scope.local_overlay_target) return true;
149 var items = $scope.gridControls.selectedItems();
150 if (items.length != 1) return true;
152 items[0]['service'] == 'native-evergreen-catalog' &&
153 items[0].tcn() == $scope.local_overlay_target
158 $scope.import = function() {
159 var deferred = $q.defer();
160 var items = $scope.gridControls.selectedItems();
163 'open-ils.cat.biblio.record.xml.import',
168 function() { deferred.resolve() },
171 console.debug('imported');
175 return deferred.promise;
177 $scope.need_one_selected = function() {
178 var items = $scope.gridControls.selectedItems();
179 if (items.length == 1) return false;
183 $scope.spawn_editor = function() {
184 var items = $scope.gridControls.selectedItems();
186 templateUrl: './cat/z3950/t_marc_edit',
189 ['$scope', '$modalInstance', function($scope, $modalInstance) {
190 $scope.focusMe = true;
191 $scope.record_id = 0;
192 $scope.dirty_flag = false;
193 $scope.marc_xml = items[0]['marcxml'];
194 $scope.ok = function(args) { $modalInstance.close(args) }
195 $scope.cancel = function () { $modalInstance.dismiss() }
197 }).result.then(function (args) {
198 if (!args || !args.name) return;
202 $scope.view_marc = function() {
203 var items = $scope.gridControls.selectedItems();
205 templateUrl: './cat/z3950/t_marc_html',
208 ['$scope', '$modalInstance', function($scope, $modalInstance) {
209 $scope.focusMe = true;
210 $scope.marc_xml = items[0]['marcxml'];
211 $scope.isbn = (items[0].isbn() || '').replace(/ .*/, '');
212 $scope.ok = function(args) { $modalInstance.close(args) }
213 $scope.cancel = function () { $modalInstance.dismiss() }
215 }).result.then(function (args) {
216 if (!args || !args.name) return;
220 $scope.overlay_record = function() {
221 var items = $scope.gridControls.selectedItems();
222 var overlay_target = $scope.local_overlay_target;
224 templateUrl: './cat/z3950/t_overlay',
227 ['$scope', '$modalInstance', function($scope, $modalInstance) {
228 $scope.focusMe = true;
229 $scope.overlay_target = overlay_target;
230 $scope.marc_xml = items[0]['marcxml'];
231 $scope.ok = function(args) { $modalInstance.close(args) }
232 $scope.cancel = function () { $modalInstance.dismiss() }
234 }).result.then(function (args) {
237 'open-ils.cat.biblio.record.marc.replace',
244 console.debug('overlay complete');