~mortenoh/+junk/dhis2-detailed-import-export

« back to all changes in this revision

Viewing changes to dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js

  • Committer: larshelge at gmail
  • Date: 2009-03-03 16:46:36 UTC
  • Revision ID: larshelge@gmail.com-20090303164636-2sjlrquo7ib1gf7r
Initial check-in

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
var ocId = -1;
 
3
 
 
4
window.onload = function () 
 
5
{
 
6
        var inputs = document.getElementsByName( "entryfield" ) 
 
7
 
 
8
        for ( var i = 0, input; input = inputs[i]; i++ )
 
9
        {
 
10
                input.addEventListener('focus', valueFocus, false);
 
11
        }
 
12
 
 
13
    var selects = document.getElementsByName( "entryselect" );
 
14
 
 
15
        for ( var i = 0, select; select = selects[i]; i++ )
 
16
        {
 
17
                select.addEventListener('focus', valueFocus, false);
 
18
        }
 
19
}
 
20
 
 
21
function viewHistory( dataElementId )
 
22
{
 
23
    window.open( 'viewHistory.action?dataElementId=' + dataElementId + '&optionComboId=' + ocId, '_blank', 'width=560,height=550,scrollbars=yes' );
 
24
}
 
25
 
 
26
/**
 
27
 * Display data element name in selection display when a value field recieves
 
28
 * focus.
 
29
 * XXX May want to move this to a separate function, called by valueFocus.
 
30
 * @param e focus event
 
31
 * @author Hans S. Tommerholt
 
32
 */
 
33
var customDataEntryFormExists = "false";
 
34
function valueFocus(e) 
 
35
{
 
36
        //Retrieve the data element id from the id of the field
 
37
        var baseId = e.target.id;       
 
38
        
 
39
        var opId = baseId;
 
40
        var str = baseId;
 
41
        
 
42
        if(     baseId.indexOf(':') != -1 )
 
43
        {
 
44
                opId = baseId.substr( baseId.indexOf(':')+1, baseId.length );
 
45
                str = baseId.substr( 0, baseId.indexOf(':') );
 
46
        }
 
47
        
 
48
        var match1 = /.*\[(.*)\]/.exec(str); //value[-dataElementId-]   
 
49
        var match2 = /.*\[(.*)\]/.exec(opId); //value[-optionComboId-]
 
50
        
 
51
        if ( ! match1 )
 
52
        {                               
 
53
                return;
 
54
        }
 
55
 
 
56
        deId = match1[1];
 
57
        ocId = match2[1];               
 
58
        
 
59
        //Get the data element name
 
60
        var nameContainer = document.getElementById('value['+deId+'].name');
 
61
        var opCbContainer = document.getElementById('value[option'+ocId+'].name');
 
62
        var minContainer = document.getElementById('value['+deId+'].min');
 
63
        var maxContainer = document.getElementById('value['+deId+'].max');
 
64
        
 
65
        if ( ! nameContainer )
 
66
        {               
 
67
                return;
 
68
        }
 
69
 
 
70
        var name = '';
 
71
        var optionName = '';
 
72
        
 
73
        var as = nameContainer.getElementsByTagName('a');
 
74
 
 
75
        if ( as.length > 0 )    //Admin rights: Name is in a link
 
76
        {
 
77
                name = as[0].firstChild.nodeValue;
 
78
        } 
 
79
        else 
 
80
        {
 
81
                name = nameContainer.firstChild.nodeValue;
 
82
        }
 
83
        
 
84
        if( opCbContainer )
 
85
        {
 
86
                if( opCbContainer.firstChild )          
 
87
                        optionName = opCbContainer.firstChild.nodeValue;
 
88
                        
 
89
        }
 
90
        
 
91
        if(customDataEntryFormExists == "true")
 
92
        {       
 
93
            optionName += " - "+minContainer.firstChild.nodeValue;
 
94
            optionName += " - "+maxContainer.firstChild.nodeValue; 
 
95
        }
 
96
    
 
97
    var curDeSpan = document.getElementById('currentDataElement');
 
98
     
 
99
    curDeSpan.firstChild.nodeValue = name;
 
100
    
 
101
    document.getElementById("currentOptionCombo").innerHTML  = optionName;
 
102
        
 
103
}
 
104
 
 
105
function keyPress( event, field )
 
106
{
 
107
    var key = 0;
 
108
    if ( event.charCode )
 
109
    {
 
110
        key = event.charCode; /* Safari2 (Mac) (and probably Konqueror on Linux, untested) */
 
111
    }
 
112
    else
 
113
    {
 
114
                if ( event.keyCode )
 
115
                {
 
116
                        key = event.keyCode; /* Firefox1.5 (Mac/Win), Opera9 (Mac/Win), IE6, IE7Beta2, Netscape7.2 (Mac) */
 
117
                }
 
118
                else
 
119
                {
 
120
                        if ( event.which )
 
121
                        {
 
122
                                key = event.which; /* Older Netscape? (No browsers triggered yet) */
 
123
                        }
 
124
            }
 
125
        }
 
126
    
 
127
    if ( key == 13 ) /* CR */
 
128
    {
 
129
                nextField = getNextEntryField( field );
 
130
        if ( nextField )
 
131
        {
 
132
            nextField.focus(); /* Does not seem to actually work in Safari, unless you also have an Alert in between */
 
133
        }
 
134
        return true;
 
135
    }
 
136
    
 
137
    /* Illegal characters can be removed with a new if-block and return false */
 
138
    return true;
 
139
}
 
140
 
 
141
function getNextEntryField( field )
 
142
{
 
143
    var inputs = document.getElementsByName( "entryfield" );
 
144
    
 
145
    // Simple bubble sort
 
146
    for ( i = 0; i < inputs.length - 1; ++i )
 
147
    {
 
148
        for ( j = i + 1; j < inputs.length; ++j )
 
149
        {
 
150
            if ( inputs[i].tabIndex > inputs[j].tabIndex )
 
151
            {
 
152
                tmp = inputs[i];
 
153
                inputs[i] = inputs[j];
 
154
                inputs[j] = tmp;
 
155
            }
 
156
        }
 
157
    }
 
158
    
 
159
    i = 0;
 
160
    for ( ; i < inputs.length; ++i )
 
161
    {
 
162
        if ( inputs[i] == field )
 
163
        {
 
164
            break;
 
165
        }
 
166
    }
 
167
    
 
168
    if ( i == inputs.length - 1 )
 
169
    {
 
170
        // No more fields after this:
 
171
        return false;
 
172
        // First field:
 
173
        //return inputs[0];
 
174
    }
 
175
    else
 
176
    {
 
177
        return inputs[i + 1];
 
178
    }
 
179
}
 
180
 
 
181
/**
 
182
 * Set min/max limits for dataelements that has one or more values, and no 
 
183
 * manually entred min/max limits.
 
184
 */
 
185
function SetGeneratedMinMaxValues()
 
186
{
 
187
    this.save = function()
 
188
    {
 
189
        var request = new Request();
 
190
        request.setCallbackSuccess( handleResponse );
 
191
        request.setCallbackError( handleHttpError );
 
192
        request.setResponseTypeXML( 'minmax' );
 
193
        request.send( 'minMaxGeneration.action' );
 
194
    };
 
195
    
 
196
    function handleResponse( rootElement )
 
197
    {
 
198
        var dataElements = rootElement.getElementsByTagName( 'dataelement' );
 
199
        
 
200
        for( i = 0; i < dataElements.length; i++ )
 
201
        {
 
202
            var id = getElementValue( dataElements[i], 'dataelementId' );
 
203
            setFieldValue('value[' + id + '].min', getElementValue( dataElements[i], 'minLimit'));
 
204
            setFieldValue('value[' + id + '].max', getElementValue( dataElements[i], 'maxLimit'));
 
205
        }
 
206
        
 
207
    }
 
208
    
 
209
    function handleHttpError( errorCode )
 
210
    {
 
211
        window.alert( i18n_saving_minmax_failed_error_code + '\n\n' + errorCode );
 
212
    }
 
213
    
 
214
    function setFieldValue( fieldId, value )
 
215
    {
 
216
        document.getElementById( fieldId ).innerHTML = value;
 
217
    }
 
218
    
 
219
    function getElementValue( parentElement, childElementName )
 
220
    {
 
221
        var textNode = parentElement.getElementsByTagName( childElementName )[0].firstChild;
 
222
        
 
223
        if ( textNode )
 
224
        {
 
225
            return textNode.nodeValue;
 
226
        }
 
227
        else
 
228
        {
 
229
            return null;
 
230
        }
 
231
    }    
 
232
}
 
233
 
 
234
function generateMinMaxValues()
 
235
{    
 
236
    var setGeneratedMinMaxValues = new SetGeneratedMinMaxValues();
 
237
    setGeneratedMinMaxValues.save();
 
238
}
 
239
 
 
240
// -----------------------------------------------------------------------------
 
241
// Data completeness
 
242
// -----------------------------------------------------------------------------
 
243
 
 
244
function validateCompleteDataSet()
 
245
{
 
246
        var confirmed = confirm( i18n_confirm_complete );
 
247
        
 
248
        if ( confirmed )
 
249
        {
 
250
            var url = "getValidationViolations.action";
 
251
    
 
252
        var request = new Request();
 
253
        request.setResponseTypeXML( 'message' );
 
254
        request.setCallbackSuccess( registerCompleteDataSet );
 
255
        request.send( url );        
 
256
        }
 
257
}
 
258
 
 
259
function registerCompleteDataSet( messageElement )
 
260
{
 
261
    var type = messageElement.getAttribute( 'type' );
 
262
    
 
263
    if ( type == "none" )
 
264
    {
 
265
        var date = document.getElementById( "dateField" ).value;
 
266
    
 
267
        var url = "registerCompleteDataSet.action?date=" + date;
 
268
    
 
269
        var request = new Request();
 
270
        request.setCallbackSuccess( registerReceived );
 
271
        request.send( url );
 
272
    }
 
273
    else
 
274
    {
 
275
        window.open( 'validate.action', '_blank', 'width=800, height=400, scrollbars=yes, resizable=yes' );
 
276
    }
 
277
}
 
278
 
 
279
function registerReceived( messageElement )
 
280
{
 
281
        document.getElementById( "completeButton" ).disabled = true;
 
282
        document.getElementById( "undoButton" ).disabled = false;
 
283
    document.getElementById( "dateField" ).disabled = true;
 
284
    document.getElementById( "dateDiv" ).style.display = "none";
 
285
}
 
286
 
 
287
function undoCompleteDataSet()
 
288
{
 
289
        var confirmed = confirm( i18n_confirm_undo );
 
290
        
 
291
        if ( confirmed )
 
292
        {
 
293
        var url = "undoCompleteDataSet.action";
 
294
    
 
295
        var request = new Request();
 
296
        request.setCallbackSuccess( undoReceived );
 
297
        request.send( url );
 
298
        }
 
299
}
 
300
 
 
301
function undoReceived( messageElement )
 
302
{
 
303
    document.getElementById( "completeButton" ).disabled = false;
 
304
    document.getElementById( "undoButton" ).disabled = true;
 
305
    document.getElementById( "dateField" ).disabled = false;
 
306
    document.getElementById( "dateDiv" ).style.display = "inline";
 
307
}