]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/js/dojo/openils/widget/EditPane.js
created read-only version of a single widget and edit pane
[Evergreen.git] / Open-ILS / web / js / dojo / openils / widget / EditPane.js
1 if(!dojo._hasResource['openils.widget.EditPane']) {
2     dojo.provide('openils.widget.EditPane');
3     dojo.require('openils.widget.AutoWidget');
4     dojo.require('openils.widget.AutoFieldWidget');
5     dojo.require('fieldmapper.Fieldmapper');
6     dojo.require('dijit.layout.ContentPane');
7     dojo.require('openils.Util');
8     dojo.require('openils.PermaCrud');
9
10     dojo.declare(
11         'openils.widget.EditPane',
12         [dijit.layout.ContentPane, openils.widget.AutoWidget],
13         {
14             mode : 'update',
15             onPostSubmit : null, // apply callback
16             onCancel : null, // cancel callback
17             hideActionButtons : false,
18
19             constructor : function(args) {
20                 this.fieldList = [];
21                 for(var k in args)
22                     this[k] = args[k];
23             },
24
25             /**
26              * Builds a basic table of key / value pairs.  Keys are IDL display labels.
27              * Values are dijit's, when values set
28              */
29             startup : function() {
30                 this.inherited(arguments);
31                 this.initAutoEnv();
32                 this.hideActionButtons = this.readOnly;
33
34                 var table = document.createElement('table');
35                 var tbody = document.createElement('tbody');
36                 this.domNode.appendChild(table);
37                 table.appendChild(tbody);
38
39                 this.limitPerms = [];
40                 if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode])
41                     this.limitPerms = this.fmIDL.permacrud[this.mode].perms;
42
43                 for(var f in this.sortedFieldList) {
44                     var field = this.sortedFieldList[f];
45                     if(!field || field.virtual) continue;
46
47                     var row = document.createElement('tr');
48                     var nameTd = document.createElement('td');
49                     var valTd = document.createElement('td');
50                     var valSpan = document.createElement('span');
51                     valTd.appendChild(valSpan);
52
53                     nameTd.appendChild(document.createTextNode(field.label));
54                     row.appendChild(nameTd);
55                     row.appendChild(valTd);
56                     tbody.appendChild(row);
57
58                     var widget = new openils.widget.AutoFieldWidget({
59                         idlField : field, 
60                         fmObject : this.fmObject,
61                         fmClass : this.fmClass,
62                         parentNode : valSpan,
63                         orgLimitPerms : this.limitPerms,
64                         readOnly : this.readOnly
65                     });
66
67                     widget.build();
68                     this.fieldList.push({name:field.name, widget:widget});
69                     this.applySaveOnEnter(widget);
70                 }
71                 if(!this.hideActionButtons)
72                     this.buildActionButtons(tbody);
73     
74                 openils.Util.addCSSClass(table, 'oils-fm-edit-dialog');
75             },
76
77             applySaveOnEnter : function(widget) {
78                 var self = this;
79                 dojo.connect(this, 'onKeyDown',
80                     function(e) {
81                         if(e.keyCode == dojo.keys.ENTER) 
82                             self.performAutoEditAction();
83                     }
84                 );
85             },
86
87             buildActionButtons : function(tbody) {
88                 var row = document.createElement('tr');
89                 var cancelTd = document.createElement('td');
90                 var applyTd = document.createElement('td');
91                 var cancelSpan = document.createElement('span');
92                 var applySpan = document.createElement('span');
93                 row.appendChild(cancelTd);
94                 row.appendChild(applyTd);
95                 cancelTd.appendChild(cancelSpan);
96                 applyTd.appendChild(applySpan);
97                 tbody.appendChild(row);
98
99                 var self = this;
100                 new dijit.form.Button({
101                     label:'Cancel', // XXX
102                     onClick : this.onCancel
103                 }, cancelSpan);
104
105                 new dijit.form.Button({
106                     label:'Save',  // XXX
107                     onClick: function() {self.performAutoEditAction();}
108                 }, applySpan);
109             },
110
111             getFields : function() {
112                 return this.fieldList.map(function(a) { return a.name });
113             },
114
115             getFieldValue : function(field) {
116                 for(var i in this.fieldList) {
117                     if(field == this.fieldList[i].name)
118                         return this.fieldList[i].widget.getFormattedValue();
119                 }
120             },
121
122             performAutoEditAction : function() {
123                 var self = this;
124                 self.performEditAction({
125                     oncomplete:function(r) {
126                         if(self.onPostSubmit)
127                             self.onPostSubmit(r);
128                     }
129                 });
130             },
131
132             performEditAction : function(opts) {
133                 var pcrud = new openils.PermaCrud();
134                 var fields = this.getFields();
135                 if(this.mode == 'create')
136                     this.fmObject = new fieldmapper[this.fmClass]();
137                 for(var idx in fields)  
138                     this.fmObject[fields[idx]](this.getFieldValue(fields[idx]));
139                 if(this.mode == 'create' && this.fmIDL.pkey_sequence)
140                     this.fmObject[fieldmapper[this.fmClass].Identifier](null);
141                 pcrud[this.mode](this.fmObject, opts);
142             }
143         }
144     );
145 }
146