]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/common/js/fmgen.js
LP1615805 No inputs after submit in patron search (AngularJS)
[Evergreen.git] / Open-ILS / web / opac / common / js / fmgen.js
1 /* generate fieldmapper javascript classes.  This expects a global variable
2         called 'fmclasses' to be fleshed with the classes we need to build */
3
4 function Fieldmapper() {}
5
6 var errorstr = "Attempt to build fieldmapper object with non-array";
7
8 Fieldmapper.prototype.clone = function() {
9         var obj = new this.constructor();
10
11         for( var i in this.a ) {
12                 var thing = this.a[i];
13                 if(thing == null) continue;
14
15                 if( thing._isfieldmapper ) {
16                         obj.a[i] = thing.clone();
17                 } else {
18
19                         if(instanceOf(thing, Array)) {
20                                 obj.a[i] = new Array();
21
22                                 for( var j in thing ) {
23
24                                         if( thing[j]._isfieldmapper )
25                                                 obj.a[i][j] = thing[j].clone();
26                                         else
27                                                 obj.a[i][j] = thing[j];
28                                 }
29                         } else {
30                                 obj.a[i] = thing;
31                         }
32                 }
33         }
34         return obj;
35 }
36
37 function FMEX(message) { this.message = message; }
38 FMEX.toString = function() { return "FieldmapperException: " + this.message + "\n"; }
39
40 var string = "";
41 for( var cl in fmclasses ) {
42         string += cl + ".prototype = new Fieldmapper(); " + 
43                                                 cl + ".prototype.constructor = " + cl + ";" +
44                                                 cl + ".baseClass = Fieldmapper.constructor;" +
45                                                 "function " + cl + "(a) { " +
46                                                         "this.classname = \"" + cl + "\";" +
47                                                         "this._isfieldmapper = true;" +
48                                                         "if(a) { if(a.constructor == Array) this.a = a; else throw new FMEX(errorstr);} else this.a = []}"; 
49
50         string += cl + "._isfieldmapper=true;";
51
52         fmclasses[cl].push('isnew');
53         fmclasses[cl].push('ischanged');
54         fmclasses[cl].push('isdeleted');
55
56         for( var pos in fmclasses[cl] ) {
57                 var p = parseInt(pos);
58                 var field = fmclasses[cl][pos];
59                 string += cl + ".prototype." + field + 
60                         "=function(n){if(arguments.length == 1)this.a[" + 
61                         p + "]=n;return this.a[" + p + "];};";
62         }
63 }
64 eval(string);
65
66