]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/cat/marc_validate.js
changes need to force legacy code work
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / cat / marc_validate.js
1 var rule_warnings = [];
2 var tag_seen;
3
4 function explain_marc() {
5         var s = '';
6         for (var w in rule_warnings) {
7                 s = s + rule_warnings[w];
8         }
9         alert(s);
10 }
11
12 function legend_marc() {
13         var s = '';
14         var rows = document.getElementById('ctrl_rows').childNodes;
15         for (var r in rows) {
16                 if (    (typeof(rows[r]) == 'object') &&
17                         (rows[r].tagName == 'row') &&
18                         (rows[r].getAttribute('hidden') != 'true')
19                 ) {
20                         var tagnumber = rows[r].firstChild.firstChild.value;
21                         if ((marc_rules[tagnumber])&&(marc_rules[tagnumber].desc)) {
22                                 s = s + tagnumber + '\t' + marc_rules[tagnumber].desc + '\n';
23                         } else {
24                                 s = s + tagnumber + '\n';
25                         }
26                 }
27         }
28         rows = document.getElementById('data_rows').childNodes;
29         for (var r in rows) {
30                 if (    (typeof(rows[r]) == 'object') &&
31                         (rows[r].tagName == 'row') &&
32                         (rows[r].getAttribute('hidden') != 'true')
33                 ) {
34                         var tagnumber = rows[r].firstChild.firstChild.value;
35                         if ((marc_rules[tagnumber])&&(marc_rules[tagnumber].desc)) {
36                                 s = s + tagnumber + '\t' + marc_rules[tagnumber].desc + '\n';
37                         } else {
38                                 s = s + tagnumber + '\n';
39                         }
40                 }
41         }
42         alert(s);
43
44 }
45
46 function handle_tag_change(ev) {
47         mw.sdump('D_CAT','Entering handle_tag_change: ' + timer_elapsed('cat') + '\n');
48         rule_warnings = []; disable_widgets('explain_marc');
49         tag_seen = {};
50         var rows = document.getElementById('ctrl_rows').childNodes;
51         for (var r in rows) {
52                 if ((typeof(rows[r]) == 'object')&&(rows[r].tagName == 'row')) {
53                         test_tagnumber_rule(rows[r]);
54                 }
55         }
56         rows = document.getElementById('data_rows').childNodes;
57         for (var r in rows) {
58                 if (    (typeof(rows[r]) == 'object') &&
59                         (rows[r].tagName == 'row') &&
60                         (rows[r].getAttribute('hidden') != 'true')
61                 ) {
62                         test_tagnumber_rule(rows[r]);
63                         test_ind1_rule(rows[r]);
64                         test_ind2_rule(rows[r]);
65                         test_subfield_rule(rows[r]);
66                 }
67         }
68         if (rule_warnings.length > 0) { enable_widgets('explain_marc'); }
69         mw.sdump('D_CAT','Exiting handle_tag_change: ' + timer_elapsed('cat') + '\n');
70 }
71
72 function test_tagnumber_rule(r) {
73         // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
74         var t = r.firstChild.firstChild;
75         if (t.value.length > 3) { 
76                 t.value = t.value.substr(0,3); 
77         } else if (t.value.length < 3) {
78                 switch(t.value.length) {
79                         case 2: t.value = '0' + t.value; break;
80                         case 1: t.value = '00' + t.value; break;
81                         case 0: t.value = '000'; break;
82                 }
83         }
84         remove_css_class(t,'invalid');
85         if (marc_rules[t.value]) {
86                 var rule = marc_rules[t.value];
87                 if (tag_seen[t.value]) { tag_seen[t.value]++; } else { tag_seen[t.value] = 1; }
88                 if ( (rule.repeat == 'NR') && (tag_seen[t.value] > 1) ) {
89                         add_css_class(t,'invalid');
90                         var s = 'Tag ' + t.value + ' should be Non-Repeating\n';
91                         rule_warnings.push(s); mw.sdump('D_CAT',s);
92                 }
93         } else if (t.value != 'LDR') {
94                 add_css_class(t,'invalid');
95                 var s = 'Tag ' + t.value + ' is unknown.\n';
96                 rule_warnings.push(s); mw.sdump('D_CAT',s);
97         }
98 }
99
100 function test_ind1_rule(r) {
101         // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
102         var tagnumber = r.childNodes[0].firstChild.value;
103         var ind1 = r.childNodes[1].firstChild;
104         remove_css_class(ind1,'invalid');
105         if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind1)) {
106                 var regex = '/^[' + marc_rules[tagnumber].ind1.allowed + ']$/';
107                 if (! ind1.value.match(eval(regex)) ) {
108                         add_css_class(ind1,'invalid');
109                         var s = 'Tag ' + tagnumber + ' Indicator 1 should be one of these characters: "' + marc_rules[tagnumber].ind1.allowed + '"\n';
110                         rule_warnings.push(s); mw.sdump('D_CAT',s);
111                 }
112         }
113 }
114
115 function test_ind2_rule(r) {
116         // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
117         var tagnumber = r.childNodes[0].firstChild.value;
118         var ind2 = r.childNodes[2].firstChild;
119         remove_css_class(ind2,'invalid');
120         if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind2)) {
121                 var regex = '/^[' + marc_rules[tagnumber].ind2.allowed + ']$/';
122                 if (! ind2.value.match(eval(regex)) ) {
123                         add_css_class(ind2,'invalid');
124                         var s = 'Tag ' + tagnumber + ' Indicator 2 should be one of these characters: "' + marc_rules[tagnumber].ind2.allowed + '"\n';
125                         rule_warnings.push(s); mw.sdump('D_CAT',s);
126                 }
127         }
128 }
129
130 function test_subfield_rule(r) {
131         // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
132         var tagnumber = r.childNodes[0].firstChild.value;
133         var data = r.childNodes[3].firstChild;
134         remove_css_class(data,'invalid');
135         if (marc_rules[tagnumber]) {
136                 var datastring = data.value.replace(/^\s+/,'').replace(/\s+$/,'');
137                 var subf_array = datastring.split(String.fromCharCode(8225));
138                 if ( (subf_array[0] == '')||(subf_array[0] == null) ) {
139                         subf_array.shift();
140                 } else {
141                         add_css_class(data,'invalid');
142                         var s = 'DEBUG: Need to add code to make an implicit subfield-a\n';
143                         rule_warnings.push(s); mw.sdump('D_CAT',s);
144                         subf_array.shift();
145                 }
146                 var subf_seen = {};
147                 for (var i in subf_array) {
148                         if ((subf_array[i]=='')||(subf_array==null)) { 
149                                 add_css_class(data,'invalid');
150                                 var s = 'You have incomplete subfield delimiters.\n';
151                                 rule_warnings.push(s); mw.sdump('D_CAT',s);
152                                 continue;
153                         }
154                         var s_ind = subf_array[i].substr(0,1);
155                         if (subf_seen[s_ind]) { subf_seen[s_ind]++; } else { subf_seen[s_ind] = 1; }
156                         var rule = marc_rules[tagnumber][s_ind];
157                         if (rule) {
158                                 if ( (rule.repeat == 'NR') && (subf_seen[s_ind]>1) ) {
159                                         add_css_class(data,'invalid');
160                                         var s = 'Tag ' + tagnumber + ' subfield-' + s_ind + ' should be Non-Repeating\n';
161                                         rule_warnings.push(s); mw.sdump('D_CAT',s);
162                                 }
163                         } else {
164                                 add_css_class(data,'invalid');
165                                 var s = 'Tag ' + tagnumber + ' does not have a subfield-' + s_ind + '\n';
166                                 rule_warnings.push(s); mw.sdump('D_CAT',s);
167                         }
168                 }
169         }
170 }