www/common/plugin/configure.js

Code
Comments
Other
Rev Date Author Line
7604 25 Feb 19 nicklas 1 /* $Id $
7604 25 Feb 19 nicklas 2   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 3   Copyright (C) 2013 Nicklas Nordborg
7604 25 Feb 19 nicklas 4
7604 25 Feb 19 nicklas 5   This file is part of BASE - BioArray Software Environment.
7604 25 Feb 19 nicklas 6   Available at http://base.thep.lu.se/
7604 25 Feb 19 nicklas 7
7604 25 Feb 19 nicklas 8   BASE is free software; you can redistribute it and/or
7604 25 Feb 19 nicklas 9   modify it under the terms of the GNU General Public License
7604 25 Feb 19 nicklas 10   as published by the Free Software Foundation; either version 3
7604 25 Feb 19 nicklas 11   of the License, or (at your option) any later version.
7604 25 Feb 19 nicklas 12
7604 25 Feb 19 nicklas 13   BASE is distributed in the hope that it will be useful,
7604 25 Feb 19 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
7604 25 Feb 19 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7604 25 Feb 19 nicklas 16   GNU General Public License for more details.
7604 25 Feb 19 nicklas 17
7604 25 Feb 19 nicklas 18   You should have received a copy of the GNU General Public License
7604 25 Feb 19 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
7604 25 Feb 19 nicklas 20   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 21
7604 25 Feb 19 nicklas 22   @author Nicklas
7604 25 Feb 19 nicklas 23 */
7604 25 Feb 19 nicklas 24 'use strict';
7604 25 Feb 19 nicklas 25
7604 25 Feb 19 nicklas 26 var Configure = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var configure = {};
7604 25 Feb 19 nicklas 29   var parameters;
7604 25 Feb 19 nicklas 30   var parametersByName = [];
7604 25 Feb 19 nicklas 31   var selectedParameter = null;
7604 25 Feb 19 nicklas 32   var selectedValueIndex;
7604 25 Feb 19 nicklas 33   
7604 25 Feb 19 nicklas 34   /**
7604 25 Feb 19 nicklas 35     Initialize the page.
7604 25 Feb 19 nicklas 36   */
7604 25 Feb 19 nicklas 37   configure.initPage = function()
7604 25 Feb 19 nicklas 38   {
7604 25 Feb 19 nicklas 39     // Dialog buttons
7604 25 Feb 19 nicklas 40     Buttons.addClickHandler('close', configure.cancelWizard);
7604 25 Feb 19 nicklas 41     Buttons.addClickHandler('btnTestWithFile', configure.testWithFile);
7604 25 Feb 19 nicklas 42     Buttons.addClickHandler('btnNext', configure.saveSettings);
7604 25 Feb 19 nicklas 43     
7604 25 Feb 19 nicklas 44     Buttons.addClickHandler('btnShowErrorList', configure.showErrorList);
7604 25 Feb 19 nicklas 45     Buttons.addClickHandler('btnHideErrorList', configure.hideErrorList);
7604 25 Feb 19 nicklas 46     
7604 25 Feb 19 nicklas 47     Buttons.addClickHandler('btnAddValue', configure.addValueOnClick);
7604 25 Feb 19 nicklas 48     Buttons.addClickHandler('btnRemoveValue', configure.removeValueOnClick);
7604 25 Feb 19 nicklas 49     Events.addEventHandler('values', 'click', configure.valuesOnClick);
7604 25 Feb 19 nicklas 50     
7604 25 Feb 19 nicklas 51     // Parameters
7604 25 Feb 19 nicklas 52     parameters = Data.json('page-data', 'plugin-parameters');
7604 25 Feb 19 nicklas 53     var parameterList = Doc.element('parameter-list');
7604 25 Feb 19 nicklas 54     for (var i = 0; i < parameters.length; i++)
7604 25 Feb 19 nicklas 55     {
7604 25 Feb 19 nicklas 56       var pp = parameters[i];
7604 25 Feb 19 nicklas 57       parametersByName[pp.name] = pp;
7604 25 Feb 19 nicklas 58
7604 25 Feb 19 nicklas 59       App.debug(JSON.stringify(pp));
7604 25 Feb 19 nicklas 60       
7604 25 Feb 19 nicklas 61       // Create entry in parameter selection list
7604 25 Feb 19 nicklas 62       if (!pp.hidden)
7604 25 Feb 19 nicklas 63       {
7604 25 Feb 19 nicklas 64         var pDiv = document.createElement('div');
7604 25 Feb 19 nicklas 65         pDiv.id = 'parameter-'+pp.name+':prompt';
7604 25 Feb 19 nicklas 66         Data.set(pDiv, 'parameter-name', pp.name);
7604 25 Feb 19 nicklas 67         
7604 25 Feb 19 nicklas 68         if (!pp.valueClass)
7604 25 Feb 19 nicklas 69         {
7604 25 Feb 19 nicklas 70           // Section header entry
7604 25 Feb 19 nicklas 71           pDiv.className = 'section interactable';
7604 25 Feb 19 nicklas 72           pDiv.innerHTML = Strings.encodeTags(pp.label);
7604 25 Feb 19 nicklas 73         }
7604 25 Feb 19 nicklas 74         else
7604 25 Feb 19 nicklas 75         {
7604 25 Feb 19 nicklas 76           // Parameter entry
7604 25 Feb 19 nicklas 77           pDiv.className = 'param interactable';
7604 25 Feb 19 nicklas 78           var icon = '';
7604 25 Feb 19 nicklas 79           if (pp.values.length > 0)
7604 25 Feb 19 nicklas 80           {
7604 25 Feb 19 nicklas 81             icon = pp.nullable ? 'notrequired_values.png' : 'required_values.png';  
7604 25 Feb 19 nicklas 82           }
7604 25 Feb 19 nicklas 83           else
7604 25 Feb 19 nicklas 84           {
7604 25 Feb 19 nicklas 85             icon = pp.nullable ? 'notrequired_novalues.png' : 'required_novalues.png';
7604 25 Feb 19 nicklas 86           }
7604 25 Feb 19 nicklas 87             
7604 25 Feb 19 nicklas 88           var html = '<span class="icon">';
7604 25 Feb 19 nicklas 89           html += '<img id="parameter-'+pp.name+':icon" src="../../images/'+icon+'" alt="">';
7604 25 Feb 19 nicklas 90           html += '</span>';
7604 25 Feb 19 nicklas 91           html += '<span class="label">'+Strings.encodeTags(pp.label)+'</span>';
7604 25 Feb 19 nicklas 92           pDiv.innerHTML = html;
7604 25 Feb 19 nicklas 93         }
7604 25 Feb 19 nicklas 94         parameterList.appendChild(pDiv);
7604 25 Feb 19 nicklas 95         Events.addEventHandler(pDiv, 'click', configure.parameterOnClick);
7604 25 Feb 19 nicklas 96       }
7604 25 Feb 19 nicklas 97       
7604 25 Feb 19 nicklas 98       // Attach event handlers to input fields
7604 25 Feb 19 nicklas 99       var valueClass = pp.valueClass;
7604 25 Feb 19 nicklas 100       var fieldName = 'parameter-'+pp.name;
7604 25 Feb 19 nicklas 101       // Detect changes
7604 25 Feb 19 nicklas 102       if (valueClass != 'BooleanParameterType')
7604 25 Feb 19 nicklas 103       {
7604 25 Feb 19 nicklas 104         Events.addEventHandler(fieldName, 'change', configure.parameterValueOnChanage);
7604 25 Feb 19 nicklas 105       }
7604 25 Feb 19 nicklas 106       else
7604 25 Feb 19 nicklas 107       {
7604 25 Feb 19 nicklas 108         Events.addEventHandler(fieldName+':null', 'change', configure.parameterValueOnChanage);
7604 25 Feb 19 nicklas 109         Events.addEventHandler(fieldName+':true', 'change', configure.parameterValueOnChanage);
7604 25 Feb 19 nicklas 110         Events.addEventHandler(fieldName+':false', 'change', configure.parameterValueOnChanage);
7604 25 Feb 19 nicklas 111       }
7604 25 Feb 19 nicklas 112       if (valueClass == 'IntegerParameterType' || valueClass == 'LongParameterType')
7604 25 Feb 19 nicklas 113       {
7604 25 Feb 19 nicklas 114         // Block non-numeric keys from INT and LONG fields
7604 25 Feb 19 nicklas 115         Events.addEventHandler(fieldName, 'keypress', Events.integerOnly);
7604 25 Feb 19 nicklas 116       }
7604 25 Feb 19 nicklas 117       else if (valueClass == 'FloatParameterType' || valueClass == 'DoubleParameterType')
7604 25 Feb 19 nicklas 118       {
7604 25 Feb 19 nicklas 119         // Block non-numeric keys from FLOAT and DOUBLE fields
7604 25 Feb 19 nicklas 120         Events.addEventHandler(fieldName, 'keypress', Events.numberOnly);
7604 25 Feb 19 nicklas 121       }
7604 25 Feb 19 nicklas 122       else if (valueClass == 'FileParameterType')
7604 25 Feb 19 nicklas 123       {
7604 25 Feb 19 nicklas 124         // Browse button
7604 25 Feb 19 nicklas 125         Buttons.addClickHandler(fieldName+':browse', configure.selectFileOnClick);
7604 25 Feb 19 nicklas 126         Events.addEventHandler(fieldName, 'base-selected', configure.onFileSelected);
7604 25 Feb 19 nicklas 127         Events.addEventHandler(fieldName+':recent', 'change', configure.recentFileSelected);
7604 25 Feb 19 nicklas 128       }
7604 25 Feb 19 nicklas 129       else if (valueClass = 'PathParameterType')
7604 25 Feb 19 nicklas 130       {
7604 25 Feb 19 nicklas 131         // Browse button
7604 25 Feb 19 nicklas 132         if (pp.pathType == 'FILE')
7604 25 Feb 19 nicklas 133         {
7604 25 Feb 19 nicklas 134           Buttons.addClickHandler(fieldName+':browse', configure.saveAsOnClick);
7604 25 Feb 19 nicklas 135           Events.addEventHandler(fieldName, 'base-selected', configure.onSaveAsSelected);
7604 25 Feb 19 nicklas 136         }
7604 25 Feb 19 nicklas 137         else
7604 25 Feb 19 nicklas 138         {
7604 25 Feb 19 nicklas 139           Buttons.addClickHandler(fieldName+':browse', configure.selectDirectoryOnClick);
7604 25 Feb 19 nicklas 140           Events.addEventHandler(fieldName, 'base-selected', configure.onFileSelected);
7604 25 Feb 19 nicklas 141         }
7604 25 Feb 19 nicklas 142       }
7604 25 Feb 19 nicklas 143     }
7604 25 Feb 19 nicklas 144     
7604 25 Feb 19 nicklas 145   }
7604 25 Feb 19 nicklas 146   
7604 25 Feb 19 nicklas 147   configure.initElements = function(element, autoInit)
7604 25 Feb 19 nicklas 148   {
7604 25 Feb 19 nicklas 149     if (autoInit == 'toggle-stacktrace')
7604 25 Feb 19 nicklas 150     {
7604 25 Feb 19 nicklas 151       Buttons.addClickHandler(element, configure.toggleStacktrace);
7604 25 Feb 19 nicklas 152     }
7604 25 Feb 19 nicklas 153     else if (autoInit == 'select-all')
7604 25 Feb 19 nicklas 154     {
7604 25 Feb 19 nicklas 155       Buttons.addClickHandler(element, configure.selectAll);
7604 25 Feb 19 nicklas 156     }
7604 25 Feb 19 nicklas 157   }
7604 25 Feb 19 nicklas 158   
7604 25 Feb 19 nicklas 159   /**
7604 25 Feb 19 nicklas 160     When clicking on a parameter in the selection list, the input fields
7604 25 Feb 19 nicklas 161     for that section should be displayed.
7604 25 Feb 19 nicklas 162   */
7604 25 Feb 19 nicklas 163   configure.parameterOnClick = function(event)
7604 25 Feb 19 nicklas 164   {
7604 25 Feb 19 nicklas 165     var name = Data.get(event.currentTarget, 'parameter-name');
7604 25 Feb 19 nicklas 166     var parameter = parametersByName[name];
7604 25 Feb 19 nicklas 167     if (parameter) configure.selectParameter(parameter);
7604 25 Feb 19 nicklas 168   }
7604 25 Feb 19 nicklas 169   
7604 25 Feb 19 nicklas 170   configure.selectParameter = function(parameter)
7604 25 Feb 19 nicklas 171   {
7604 25 Feb 19 nicklas 172     if (selectedParameter)
7604 25 Feb 19 nicklas 173     {
7604 25 Feb 19 nicklas 174       // De-select current parameter
7604 25 Feb 19 nicklas 175       Doc.removeClass('parameter-'+selectedParameter.name+':prompt', 'selected');
7604 25 Feb 19 nicklas 176       Doc.hide('parameter-'+selectedParameter.name+':section');
7604 25 Feb 19 nicklas 177       Doc.hide('valuecontainer');
7604 25 Feb 19 nicklas 178     }
7604 25 Feb 19 nicklas 179     
7604 25 Feb 19 nicklas 180     selectedParameter = parameter;
7604 25 Feb 19 nicklas 181     
7604 25 Feb 19 nicklas 182     Doc.addClass('parameter-'+parameter.name+':prompt', 'selected');
7604 25 Feb 19 nicklas 183     Doc.show('parameter-'+parameter.name+':section');
7604 25 Feb 19 nicklas 184     
7604 25 Feb 19 nicklas 185     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 186     var field = frm['parameter-'+parameter.name];
7604 25 Feb 19 nicklas 187     if (field.focus && !field.disabled) field.focus();
7604 25 Feb 19 nicklas 188
7604 25 Feb 19 nicklas 189     if (parameter.enumeration)
7604 25 Feb 19 nicklas 190     {
7604 25 Feb 19 nicklas 191       // Enumerated parameters are in a <select> element
7604 25 Feb 19 nicklas 192       var numSelected = Forms.selectListOptions(field, parameter.values, true);
7604 25 Feb 19 nicklas 193       if (numSelected == 0)
7604 25 Feb 19 nicklas 194       {
7604 25 Feb 19 nicklas 195         parameter.values.length = 0;
7604 25 Feb 19 nicklas 196         configure.updateStyle(parameter);
7604 25 Feb 19 nicklas 197       }
7604 25 Feb 19 nicklas 198     }
7604 25 Feb 19 nicklas 199     else if (parameter.multiplicity == 1)
7604 25 Feb 19 nicklas 200     {
7604 25 Feb 19 nicklas 201       // Single-values parameters are 'text' or 'radio' elements
7604 25 Feb 19 nicklas 202       var currentValue = parameter.values.length > 0 ? parameter.values[0] : '';
7604 25 Feb 19 nicklas 203       if (field.length) // radio buttons for boolean parameter
7604 25 Feb 19 nicklas 204       {
7604 25 Feb 19 nicklas 205         Forms.checkRadio(field, currentValue);
7604 25 Feb 19 nicklas 206       }
7604 25 Feb 19 nicklas 207       else if (!field.disabled)
7604 25 Feb 19 nicklas 208       {
7604 25 Feb 19 nicklas 209         field.value = currentValue;
7604 25 Feb 19 nicklas 210       }
7604 25 Feb 19 nicklas 211     }
7604 25 Feb 19 nicklas 212     else
7604 25 Feb 19 nicklas 213     {
7604 25 Feb 19 nicklas 214       // Multi-values parameters must be copied to a <select> element
7604 25 Feb 19 nicklas 215       var values = frm.values;
7604 25 Feb 19 nicklas 216       // Clear existing values from the <select> element
7604 25 Feb 19 nicklas 217       values.length = 0;
7604 25 Feb 19 nicklas 218       // Copy values
7604 25 Feb 19 nicklas 219       for (var i = 0; i < parameter.values.length; i++)
7604 25 Feb 19 nicklas 220       {
7604 25 Feb 19 nicklas 221         var value = Strings.cut(parameter.values[i].replace(/\n/g, ' '), 40);
7604 25 Feb 19 nicklas 222         values[values.length] = new Option(value);
7604 25 Feb 19 nicklas 223       }
7604 25 Feb 19 nicklas 224       var mult = Doc.element('multiplicity');
7604 25 Feb 19 nicklas 225       mult.innerHTML = parameter.multiplicity == 0 ? '' : '(Max '+parameter.multiplicity+' values)';
7604 25 Feb 19 nicklas 226       Doc.show('valuecontainer');
7604 25 Feb 19 nicklas 227     }
7604 25 Feb 19 nicklas 228     
7604 25 Feb 19 nicklas 229   }
7604 25 Feb 19 nicklas 230
7604 25 Feb 19 nicklas 231   
7604 25 Feb 19 nicklas 232   configure.parameterValueOnChanage = function(event)
7604 25 Feb 19 nicklas 233   {
7604 25 Feb 19 nicklas 234     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 235     if (!selectedParameter) return;
7604 25 Feb 19 nicklas 236     
7604 25 Feb 19 nicklas 237     if (selectedParameter.multiplicity == 1)
7604 25 Feb 19 nicklas 238     {
7604 25 Feb 19 nicklas 239       // Single-valued parameters are copied as a new array
7604 25 Feb 19 nicklas 240       var value = event.target.value;
7604 25 Feb 19 nicklas 241       if (value == null || value == '')
7604 25 Feb 19 nicklas 242       {
7604 25 Feb 19 nicklas 243         selectedParameter.values = [];
7604 25 Feb 19 nicklas 244       }
7604 25 Feb 19 nicklas 245       else
7604 25 Feb 19 nicklas 246       {
7604 25 Feb 19 nicklas 247         selectedParameter.values = [value];
7604 25 Feb 19 nicklas 248       }
7604 25 Feb 19 nicklas 249     }
7604 25 Feb 19 nicklas 250     else if (selectedParameter.enumeration)
7604 25 Feb 19 nicklas 251     {
7604 25 Feb 19 nicklas 252       // All values are in a <select multiple> element
7604 25 Feb 19 nicklas 253       var values = [];
7604 25 Feb 19 nicklas 254       for (var i = 0; i < event.target.length; i++)
7604 25 Feb 19 nicklas 255       {
7604 25 Feb 19 nicklas 256         if (event.target[i].checked || event.target[i].selected) 
7604 25 Feb 19 nicklas 257         {
7604 25 Feb 19 nicklas 258           values[values.length] = event.target[i].value;
7604 25 Feb 19 nicklas 259         }
7604 25 Feb 19 nicklas 260       }
7604 25 Feb 19 nicklas 261       selectedParameter.values = values;
7604 25 Feb 19 nicklas 262     }
7604 25 Feb 19 nicklas 263     else
7604 25 Feb 19 nicklas 264     {
7604 25 Feb 19 nicklas 265       // Multi-valued parameters are updated for the current index
7604 25 Feb 19 nicklas 266       if (selectedValueIndex >= 0)
7604 25 Feb 19 nicklas 267       {
7604 25 Feb 19 nicklas 268         var value = event.target.value;
7604 25 Feb 19 nicklas 269         if (value == null || value == '')
7604 25 Feb 19 nicklas 270         {
7604 25 Feb 19 nicklas 271           selectedParameter.values.splice(selectedValueIndex, 1);
7604 25 Feb 19 nicklas 272           frm.values[selectedValueIndex] = null;
7604 25 Feb 19 nicklas 273         }
7604 25 Feb 19 nicklas 274         else
7604 25 Feb 19 nicklas 275         {
7604 25 Feb 19 nicklas 276           selectedParameter.values[selectedValueIndex] = value;
7604 25 Feb 19 nicklas 277           frm.values[selectedValueIndex].text = value;
7604 25 Feb 19 nicklas 278         }
7604 25 Feb 19 nicklas 279       }
7604 25 Feb 19 nicklas 280     }
7604 25 Feb 19 nicklas 281     
7604 25 Feb 19 nicklas 282     configure.updateStyle(selectedParameter);
7604 25 Feb 19 nicklas 283   }
7604 25 Feb 19 nicklas 284   
7604 25 Feb 19 nicklas 285   configure.updateStyle = function(parameter)
7604 25 Feb 19 nicklas 286   {
7604 25 Feb 19 nicklas 287     var icon = Doc.element('parameter-'+parameter.name+':icon');
7604 25 Feb 19 nicklas 288     var img = App.getRoot()+'images/';
7604 25 Feb 19 nicklas 289     if (parameter.values.length == 0)
7604 25 Feb 19 nicklas 290     {
7604 25 Feb 19 nicklas 291       img += parameter.nullable ? 'notrequired_novalues.png' : 'required_novalues.png';
7604 25 Feb 19 nicklas 292     }
7604 25 Feb 19 nicklas 293     else
7604 25 Feb 19 nicklas 294     {
7604 25 Feb 19 nicklas 295       img += parameter.nullable ? 'notrequired_values.png' : 'required_values.png';
7604 25 Feb 19 nicklas 296     }
7604 25 Feb 19 nicklas 297     icon.src = img;
7604 25 Feb 19 nicklas 298   }
7604 25 Feb 19 nicklas 299
7604 25 Feb 19 nicklas 300   
7604 25 Feb 19 nicklas 301   configure.selectFileOnClick = function(event)
7604 25 Feb 19 nicklas 302   {
7604 25 Feb 19 nicklas 303     Dialogs.selectItem('FILE', Data.get(event.currentTarget, 'field'));
7604 25 Feb 19 nicklas 304   }
7604 25 Feb 19 nicklas 305   
7604 25 Feb 19 nicklas 306   configure.onFileSelected = function(event)
7604 25 Feb 19 nicklas 307   {
7604 25 Feb 19 nicklas 308     event.currentTarget.value = event.detail.name;
7604 25 Feb 19 nicklas 309     Events.sendChangeEvent(event.target);
7604 25 Feb 19 nicklas 310     if (parametersByName['charset'])
7604 25 Feb 19 nicklas 311     {
7604 25 Feb 19 nicklas 312       configure.getCharsetOfFile(event.detail.id);
7604 25 Feb 19 nicklas 313     }
7604 25 Feb 19 nicklas 314   }
7604 25 Feb 19 nicklas 315   
7604 25 Feb 19 nicklas 316   configure.recentFileSelected = function(event)
7604 25 Feb 19 nicklas 317   {
7604 25 Feb 19 nicklas 318     var fileList = event.currentTarget;
7604 25 Feb 19 nicklas 319     var field = Data.get(fileList, 'field');
7604 25 Feb 19 nicklas 320     var detail = {'id': fileList.value, 'name': fileList[fileList.selectedIndex].text};
7604 25 Feb 19 nicklas 321     Events.sendCustomEvent(field, 'base-selected', detail);
7604 25 Feb 19 nicklas 322     fileList.selectedIndex = 0;
7604 25 Feb 19 nicklas 323   }
7604 25 Feb 19 nicklas 324
7604 25 Feb 19 nicklas 325   configure.saveAsOnClick = function(event)
7604 25 Feb 19 nicklas 326   {
7604 25 Feb 19 nicklas 327     var field = Data.get(event.currentTarget, 'field');
7604 25 Feb 19 nicklas 328     var url = App.getRoot() +'filemanager/index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 329     url += '&cmd=SaveAs&callback='+field;
7604 25 Feb 19 nicklas 330
7604 25 Feb 19 nicklas 331     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 332     var i = frm[field].value.lastIndexOf('/');
7604 25 Feb 19 nicklas 333     if (i >= 0) 
7604 25 Feb 19 nicklas 334     {
7604 25 Feb 19 nicklas 335       url += '&fileName=' + encodeURIComponent(frm[field].value.substring(i+1));
7604 25 Feb 19 nicklas 336     }
7604 25 Feb 19 nicklas 337
7604 25 Feb 19 nicklas 338     Dialogs.openPopup(url, 'SaveAs', 1050, 700);
7604 25 Feb 19 nicklas 339   }
7604 25 Feb 19 nicklas 340   
7604 25 Feb 19 nicklas 341   configure.onSaveAsSelected = function(event)
7604 25 Feb 19 nicklas 342   {
7604 25 Feb 19 nicklas 343     event.target.value = event.detail.path;
7604 25 Feb 19 nicklas 344     Events.sendChangeEvent(event.target);
7604 25 Feb 19 nicklas 345   }
7604 25 Feb 19 nicklas 346   
7604 25 Feb 19 nicklas 347   configure.selectDirectoryOnClick = function(event)
7604 25 Feb 19 nicklas 348   {
7604 25 Feb 19 nicklas 349     Dialogs.selectItem('DIRECTORY', Data.get(event.currentTarget, 'field'));
7604 25 Feb 19 nicklas 350   }
7604 25 Feb 19 nicklas 351   
7604 25 Feb 19 nicklas 352   configure.getCharsetOfFile = function(fileId)
7604 25 Feb 19 nicklas 353   {
7604 25 Feb 19 nicklas 354     var request = Ajax.getXmlHttpRequest();
7604 25 Feb 19 nicklas 355     var url = '../../filemanager/files/ajax.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 356     url += '&cmd=GetFileInfo&item_id=' + fileId;
7604 25 Feb 19 nicklas 357     request.open("GET", url, true);
7604 25 Feb 19 nicklas 358     Ajax.setReadyStateHandler(request, configure.updateCharsetCallback);
7604 25 Feb 19 nicklas 359     request.send(null);
7604 25 Feb 19 nicklas 360   }
7604 25 Feb 19 nicklas 361   
7604 25 Feb 19 nicklas 362   configure.updateCharsetCallback = function(request)
7604 25 Feb 19 nicklas 363   {
7604 25 Feb 19 nicklas 364     var response = JSON.parse(request.responseText);
7604 25 Feb 19 nicklas 365     var charset = response.characterSet;
7604 25 Feb 19 nicklas 366     if (!charset) return;
7604 25 Feb 19 nicklas 367     
7604 25 Feb 19 nicklas 368     var parameter = parametersByName['charset'];
7604 25 Feb 19 nicklas 369     if (!parameter) return;
7604 25 Feb 19 nicklas 370     
7604 25 Feb 19 nicklas 371     parameter.values = [ charset ];
7604 25 Feb 19 nicklas 372     configure.updateStyle(parameter);
7604 25 Feb 19 nicklas 373   }
7604 25 Feb 19 nicklas 374   
7604 25 Feb 19 nicklas 375   configure.selectAll = function(event)
7604 25 Feb 19 nicklas 376   {
7604 25 Feb 19 nicklas 377     var field = Data.get(event.currentTarget, 'field');
7604 25 Feb 19 nicklas 378     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 379     var list = Doc.element(field);
7604 25 Feb 19 nicklas 380     
7604 25 Feb 19 nicklas 381     if (!list || list.length == 0) return;
7604 25 Feb 19 nicklas 382     var select = !list[0].selected;;
7604 25 Feb 19 nicklas 383     
7604 25 Feb 19 nicklas 384     for (var i = 0; i < list.length; i++)
7604 25 Feb 19 nicklas 385     {
7604 25 Feb 19 nicklas 386       list[i].selected = select;
7604 25 Feb 19 nicklas 387     }
7604 25 Feb 19 nicklas 388     Events.sendChangeEvent(list);
7604 25 Feb 19 nicklas 389   }
7604 25 Feb 19 nicklas 390   
7604 25 Feb 19 nicklas 391   configure.cancelWizard = function()
7604 25 Feb 19 nicklas 392   {
7604 25 Feb 19 nicklas 393     location.href = 'index.jsp?ID='+App.getSessionId()+'&cmd=CancelWizard';
7604 25 Feb 19 nicklas 394   }
7604 25 Feb 19 nicklas 395   
7604 25 Feb 19 nicklas 396   configure.testWithFile = function()
7604 25 Feb 19 nicklas 397   {
7604 25 Feb 19 nicklas 398     var url = 'test_with_file.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 399     Dialogs.openPopup(url, 'TestWithFile', 1050, 700);
7604 25 Feb 19 nicklas 400   }
7604 25 Feb 19 nicklas 401   
7604 25 Feb 19 nicklas 402   configure.valuesOnClick = function()
7604 25 Feb 19 nicklas 403   {
7604 25 Feb 19 nicklas 404     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 405     if (!selectedParameter) return;
7604 25 Feb 19 nicklas 406     
7604 25 Feb 19 nicklas 407     selectedValueIndex = frm.values.selectedIndex;
7604 25 Feb 19 nicklas 408     if (selectedValueIndex >= 0)
7604 25 Feb 19 nicklas 409     {
7604 25 Feb 19 nicklas 410       frm['parameter-'+selectedParameter.name].value = selectedParameter.values[selectedValueIndex];
7604 25 Feb 19 nicklas 411     }
7604 25 Feb 19 nicklas 412   }
7604 25 Feb 19 nicklas 413   
7604 25 Feb 19 nicklas 414   configure.addValueOnClick = function()
7604 25 Feb 19 nicklas 415   {
7604 25 Feb 19 nicklas 416     if (!selectedParameter) return;
7604 25 Feb 19 nicklas 417
7604 25 Feb 19 nicklas 418     // Check multiplicity
7604 25 Feb 19 nicklas 419     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 420     var field = frm['parameter-'+selectedParameter.name];
7604 25 Feb 19 nicklas 421     if (selectedParameter.multiplicity > 0 && selectedParameter.values.length >= selectedParameter.multiplicity)
7604 25 Feb 19 nicklas 422     {
7604 25 Feb 19 nicklas 423       Forms.showNotification('btnAddValue', 'Max '+selectedParameter.multiplicity+' values allowed');
7604 25 Feb 19 nicklas 424       return;
7604 25 Feb 19 nicklas 425     }
7604 25 Feb 19 nicklas 426     
7604 25 Feb 19 nicklas 427     if (frm.values.selectedIndex < 0 && field.value != '')
7604 25 Feb 19 nicklas 428     {
7604 25 Feb 19 nicklas 429       // Insert a new option with the value from the field
7604 25 Feb 19 nicklas 430       frm.values[frm.values.length] = new Option(field.value, '');
7604 25 Feb 19 nicklas 431       selectedParameter.values[selectedParameter.values.length] = field.value;
7604 25 Feb 19 nicklas 432       field.value = '';
7604 25 Feb 19 nicklas 433       selectedValueIndex = -1;
7604 25 Feb 19 nicklas 434     }
7604 25 Feb 19 nicklas 435     else
7604 25 Feb 19 nicklas 436     {
7604 25 Feb 19 nicklas 437       // Clear current selection
7604 25 Feb 19 nicklas 438       for (var i = 0; i < frm.values.length; i++)
7604 25 Feb 19 nicklas 439       {
7604 25 Feb 19 nicklas 440         frm.values[i].selected = false;
7604 25 Feb 19 nicklas 441       }
7604 25 Feb 19 nicklas 442       // Insert an empty option
7604 25 Feb 19 nicklas 443       selectedValueIndex = frm.values.length;
7604 25 Feb 19 nicklas 444       frm.values[selectedValueIndex] = new Option('<new>', '', false, true);
7604 25 Feb 19 nicklas 445       selectedParameter.values[selectedValueIndex] = '';
7604 25 Feb 19 nicklas 446       field.value = '';
7604 25 Feb 19 nicklas 447     }
7604 25 Feb 19 nicklas 448     field.focus();
7604 25 Feb 19 nicklas 449     configure.updateStyle(selectedParameter);
7604 25 Feb 19 nicklas 450   }
7604 25 Feb 19 nicklas 451   
7604 25 Feb 19 nicklas 452   configure.removeValueOnClick = function()
7604 25 Feb 19 nicklas 453   {
7604 25 Feb 19 nicklas 454     if (!selectedParameter) return;
7604 25 Feb 19 nicklas 455     
7604 25 Feb 19 nicklas 456     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 457     var values = frm.values;
7604 25 Feb 19 nicklas 458     for (var i = 0; i < values.length; i++)
7604 25 Feb 19 nicklas 459     {
7604 25 Feb 19 nicklas 460       if (values[i].selected)
7604 25 Feb 19 nicklas 461       {
7604 25 Feb 19 nicklas 462         selectedParameter.values.splice(i, 1);
7604 25 Feb 19 nicklas 463         values[i] = null;
7604 25 Feb 19 nicklas 464         i--;
7604 25 Feb 19 nicklas 465       }
7604 25 Feb 19 nicklas 466     }
7604 25 Feb 19 nicklas 467     selectedValueIndex = -1;
7604 25 Feb 19 nicklas 468     frm.values.selectedIndex = -1;
7604 25 Feb 19 nicklas 469     frm['parameter-'+selectedParameter.name].value = '';
7604 25 Feb 19 nicklas 470     configure.updateStyle(selectedParameter);
7604 25 Feb 19 nicklas 471   }
7604 25 Feb 19 nicklas 472
7604 25 Feb 19 nicklas 473
7604 25 Feb 19 nicklas 474   configure.saveSettings = function()
7604 25 Feb 19 nicklas 475   {
7604 25 Feb 19 nicklas 476     var frm = document.forms['configure'];
7604 25 Feb 19 nicklas 477     
7604 25 Feb 19 nicklas 478     // Check that all required parameters have values
7604 25 Feb 19 nicklas 479     for (var i = 0; i < parameters.length; i++)
7604 25 Feb 19 nicklas 480     {
7604 25 Feb 19 nicklas 481       var pp = parameters[i];
7604 25 Feb 19 nicklas 482       if (pp.valueClass)
7604 25 Feb 19 nicklas 483       {
7604 25 Feb 19 nicklas 484         if (!pp.nullable && pp.values.length == 0)
7604 25 Feb 19 nicklas 485         {
7604 25 Feb 19 nicklas 486           configure.selectParameter(pp);
7604 25 Feb 19 nicklas 487           Forms.showNotification(frm['parameter-'+pp.name], 'No value entered for parameter '+pp.label);
7604 25 Feb 19 nicklas 488           return;
7604 25 Feb 19 nicklas 489         }
7604 25 Feb 19 nicklas 490       }
7604 25 Feb 19 nicklas 491     }
7604 25 Feb 19 nicklas 492
7604 25 Feb 19 nicklas 493     // Save parameters to form and submit
7604 25 Feb 19 nicklas 494     for (var i = 0; i < parameters.length; i++)
7604 25 Feb 19 nicklas 495     {
7604 25 Feb 19 nicklas 496       var pp = parameters[i];
7604 25 Feb 19 nicklas 497       if (pp.valueClass)
7604 25 Feb 19 nicklas 498       {
7604 25 Feb 19 nicklas 499         for (var j = 0; j < pp.values.length; j++)
7604 25 Feb 19 nicklas 500         {
7604 25 Feb 19 nicklas 501           Forms.addHidden(frm, 'parameter:'+pp.name, pp.values[j]);
7604 25 Feb 19 nicklas 502         }
7604 25 Feb 19 nicklas 503       }
7604 25 Feb 19 nicklas 504     }
7604 25 Feb 19 nicklas 505
7604 25 Feb 19 nicklas 506     frm.submit();
7604 25 Feb 19 nicklas 507   }
7604 25 Feb 19 nicklas 508   
7604 25 Feb 19 nicklas 509   configure.hideErrorList = function()
7604 25 Feb 19 nicklas 510   {
7604 25 Feb 19 nicklas 511     Doc.hide('errorlist');
7604 25 Feb 19 nicklas 512     Doc.show('showerrorlist');
7604 25 Feb 19 nicklas 513   }
7604 25 Feb 19 nicklas 514   configure.showErrorList = function()
7604 25 Feb 19 nicklas 515   {
7604 25 Feb 19 nicklas 516     Doc.show('errorlist');
7604 25 Feb 19 nicklas 517     Doc.hide('showerrorlist');
7604 25 Feb 19 nicklas 518   }
7604 25 Feb 19 nicklas 519
7604 25 Feb 19 nicklas 520   configure.toggleStacktrace = function(event)
7604 25 Feb 19 nicklas 521   {
7604 25 Feb 19 nicklas 522     var index = Data.get(event.currentTarget, 'stracktrace-index');
7604 25 Feb 19 nicklas 523     Doc.showHide('stacktrace.' + index);
7604 25 Feb 19 nicklas 524     var img = event.currentTarget.firstChild;
7604 25 Feb 19 nicklas 525     if (img.src.indexOf('gonext') > 0)
7604 25 Feb 19 nicklas 526     {
7604 25 Feb 19 nicklas 527       img.src = App.getRoot() + '/images/move_down.png';
7604 25 Feb 19 nicklas 528     }
7604 25 Feb 19 nicklas 529     else
7604 25 Feb 19 nicklas 530     {
7604 25 Feb 19 nicklas 531       img.src = App.getRoot() + '/images/gonext.png';
7604 25 Feb 19 nicklas 532     }
7604 25 Feb 19 nicklas 533   }
7604 25 Feb 19 nicklas 534
7656 19 Mar 19 nicklas 535   configure.getParameterDef = function(name)
7656 19 Mar 19 nicklas 536   {
7656 19 Mar 19 nicklas 537     return parametersByName[name];
7656 19 Mar 19 nicklas 538   }
7604 25 Feb 19 nicklas 539   
7604 25 Feb 19 nicklas 540   configure.getParameterValue = function(name)
7604 25 Feb 19 nicklas 541   {
7604 25 Feb 19 nicklas 542     var parameter = parametersByName[name];
7604 25 Feb 19 nicklas 543     if (parameter && parameter.values.length > 0)
7604 25 Feb 19 nicklas 544     {
7604 25 Feb 19 nicklas 545       return parameter.values[0];
7604 25 Feb 19 nicklas 546     }
7604 25 Feb 19 nicklas 547     else
7604 25 Feb 19 nicklas 548     {
7604 25 Feb 19 nicklas 549       return '';
7604 25 Feb 19 nicklas 550     }
7604 25 Feb 19 nicklas 551   }
7604 25 Feb 19 nicklas 552   
7604 25 Feb 19 nicklas 553   configure.getAllParameters = function()
7604 25 Feb 19 nicklas 554   {
7604 25 Feb 19 nicklas 555     return parameters;
7604 25 Feb 19 nicklas 556   }
7604 25 Feb 19 nicklas 557   
7604 25 Feb 19 nicklas 558   configure.setParameterValue = function(name, value)
7604 25 Feb 19 nicklas 559   {
7604 25 Feb 19 nicklas 560     var parameter = parametersByName[name];
7604 25 Feb 19 nicklas 561     if (!parameter) return;
7604 25 Feb 19 nicklas 562     if (value == null || value == '')
7604 25 Feb 19 nicklas 563     {
7604 25 Feb 19 nicklas 564       parameter.values = [];
7604 25 Feb 19 nicklas 565     }
7604 25 Feb 19 nicklas 566     else
7604 25 Feb 19 nicklas 567     {
7604 25 Feb 19 nicklas 568       parameter.values = [value];
7604 25 Feb 19 nicklas 569     }
7604 25 Feb 19 nicklas 570     configure.updateStyle(parameter);
7604 25 Feb 19 nicklas 571     if (selectedParameter && selectedParameter.name == name)
7604 25 Feb 19 nicklas 572     {
7604 25 Feb 19 nicklas 573       configure.selectParameter(parameter);
7604 25 Feb 19 nicklas 574     }
7604 25 Feb 19 nicklas 575   }
7604 25 Feb 19 nicklas 576
7604 25 Feb 19 nicklas 577   return configure;
7604 25 Feb 19 nicklas 578 }();
7604 25 Feb 19 nicklas 579
7604 25 Feb 19 nicklas 580 Doc.onLoad(Configure.initPage);
6391 21 Jan 14 nicklas 581 Doc.addElementInitializer(Configure.initElements);