1 angular.module('egZ3950Mod', ['egCoreMod', 'ui.bootstrap'])
2 .factory('egZ3950TargetSvc',
3 ['$q', 'egCore', 'egAuth',
4 function($q, egCore, egAuth) {
12 service.loadTargets = function() {
13 var default_targets = egCore.hatch.getLocalItem('eg.cat.z3950.default_targets') || [];
16 'open-ils.search.z3950.retrieve_services',
18 ).then(function(res) {
19 // keep the reference, just clear the list
20 service.targets.length = 0;
21 // native Evergreen search goes first
22 var localTarget = res['native-evergreen-catalog'];
23 delete res['native-evergreen-catalog'];
24 angular.forEach(res, function(value, key) {
28 selected: (key in default_targets),
32 if (tgt.code in default_targets && tgt.settings.auth == 't') {
33 tgt['username'] = default_targets[tgt.code]['username'] || '';
34 tgt['password'] = default_targets[tgt.code]['password'] || '';
38 service.targets.sort(function (a, b) {
41 return a < b ? -1 : (a > b ? 1 : 0);
43 service.targets.unshift({
44 code: 'native-evergreen-catalog',
45 settings: localTarget,
46 selected: ('native-evergreen-catalog' in default_targets),
53 service.loadActiveSearchFields = function() {
54 // don't want to throw away the reference, otherwise
55 // directives bound to searchFields won't
57 var curFormInput = {};
58 for (var field in service.searchFields) {
59 curFormInput[field] = service.searchFields[field].query;
60 delete service.searchFields[field];
62 angular.forEach(service.targets, function(target, idx) {
63 if (target.selected) {
64 angular.forEach(target.settings.attrs, function(attr, key) {
65 if (!(key in service.searchFields)) service.searchFields[key] = {
67 query : (key in curFormInput) ? curFormInput[key] : ''
74 service.clearSearchFields = function() {
75 for (var field in service.searchFields) {
76 service.searchFields[field].query = '';
80 // return the selected Z39.50 targets and search strings
81 // in a format suitable for passing directly to
82 // open-ils.search.z3950.search_class
83 service.currentQuery = function() {
91 angular.forEach(service.targets, function(target, idx) {
92 if (target.selected) {
93 query.service.push(target.code);
94 query.username.push(target.username);
95 query.password.push(target.password);
98 if (service.raw_search) {
99 query.raw_search = service.raw_search;
101 angular.forEach(service.searchFields, function(value, key) {
102 if (value.query && value.query.trim()) {
103 query.search[key] = value.query.trim();
110 // raw search can be done only if exactly one
111 // (real) Z39.50 target is selected
112 service.rawSearchImpossible = function() {
114 for (var i in service.targets) {
115 if (service.targets[i].code == 'native-evergreen-catalog') {
116 if (service.targets[i].selected) return true;
118 if (service.targets[i].selected) z_selected++;
121 return !(z_selected == 1);
124 service.setRawSearch = function(raw_search) {
125 service.raw_search = raw_search;
128 // store selected targets
129 service.saveDefaultZ3950Targets = function() {
130 var saved_targets = {};
131 angular.forEach(service.targets, function(target, idx) {
132 if (target.selected) {
133 saved_targets[target.code] = {};
135 if (target.settings.auth == 't') {
136 saved_targets[target.code]['username'] = target.username;
137 saved_targets[target.code]['password'] = target.password;
140 egCore.hatch.setLocalItem('eg.cat.z3950.default_targets', saved_targets);
145 .directive("egZ3950TargetList", function () {
152 templateUrl: './cat/z3950/t_target',
154 ['$scope','egZ3950TargetSvc',
155 function($scope , egZ3950TargetSvc) {
156 $scope.targets = egZ3950TargetSvc.targets;
157 $scope.$watch('targets', function(oldVal, newVal) {
158 egZ3950TargetSvc.loadActiveSearchFields();
163 .directive("egZ3950SearchFieldList", ['egZ3950TargetSvc',
164 function(egZ3950TargetSvc) {
169 templateUrl: './cat/z3950/t_search_fields',
170 link: function(scope, elem, attr) {
171 scope.fields = egZ3950TargetSvc.searchFields;