www/my_base/user/settings.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) 2012 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 Settings = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var extendedProperties = null;
7604 25 Feb 19 nicklas 29   
7604 25 Feb 19 nicklas 30   var settings = {};
7604 25 Feb 19 nicklas 31   
7604 25 Feb 19 nicklas 32   settings.initPage = function()
7604 25 Feb 19 nicklas 33   {
7604 25 Feb 19 nicklas 34     // Save + Close buttons
7604 25 Feb 19 nicklas 35     Buttons.addClickHandler('btnSave', Settings.save);
7604 25 Feb 19 nicklas 36     Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 37     
7604 25 Feb 19 nicklas 38     // Tab validation
7604 25 Feb 19 nicklas 39     TabControl.addTabValidator('settings.contact', Settings.validateContact);
7604 25 Feb 19 nicklas 40     TabControl.addTabValidator('settings.password', Settings.validatePassword);
7604 25 Feb 19 nicklas 41     TabControl.addTabValidator('settings.other', Settings.validateExtendedProperties);
7604 25 Feb 19 nicklas 42     
7604 25 Feb 19 nicklas 43     // Extended properties
7604 25 Feb 19 nicklas 44     var pageData = Doc.element('page-data');
7604 25 Feb 19 nicklas 45     extendedProperties = Data.json(pageData, 'extended-properties');
7604 25 Feb 19 nicklas 46     for (var i = 0; i < extendedProperties.length; i++)
7604 25 Feb 19 nicklas 47     {
7604 25 Feb 19 nicklas 48       var ep = extendedProperties[i];
7604 25 Feb 19 nicklas 49       var valueType = ep.valueType;
7604 25 Feb 19 nicklas 50       var fieldName = 'ep.'+ep.name;
7604 25 Feb 19 nicklas 51       
7604 25 Feb 19 nicklas 52       if (valueType == 'INT' || valueType == 'LONG')
7604 25 Feb 19 nicklas 53       {
7604 25 Feb 19 nicklas 54         // Block non-numeric keys from INT and LONG fields
7604 25 Feb 19 nicklas 55         Events.addEventHandler(fieldName, 'keypress', Events.integerOnly);
7604 25 Feb 19 nicklas 56       }
7604 25 Feb 19 nicklas 57       else if (valueType == 'FLOAT' || valueType == 'DOUBLE')
7604 25 Feb 19 nicklas 58       {
7604 25 Feb 19 nicklas 59         // Block non-numeric keys from FLOAT and DOUBLE fields
7604 25 Feb 19 nicklas 60         Events.addEventHandler(fieldName, 'keypress', Events.numberOnly);
7604 25 Feb 19 nicklas 61       }
7604 25 Feb 19 nicklas 62       else if (valueType == 'DATE' || valueType == 'TIMESTAMP')
7604 25 Feb 19 nicklas 63       {
7604 25 Feb 19 nicklas 64         // Add click handler to open calendar dialog for date/timestamp fields
7604 25 Feb 19 nicklas 65         Buttons.addClickHandler('btn.'+fieldName, settings.openCalendar);
7604 25 Feb 19 nicklas 66       }
7604 25 Feb 19 nicklas 67     }
7604 25 Feb 19 nicklas 68   }
7604 25 Feb 19 nicklas 69   
7604 25 Feb 19 nicklas 70   // Open the calendar dialog
7604 25 Feb 19 nicklas 71   settings.openCalendar = function(event)
7604 25 Feb 19 nicklas 72   {
7604 25 Feb 19 nicklas 73     var epName = Data.get(event.currentTarget, 'extended-property');
7604 25 Feb 19 nicklas 74     var ep = null;
7604 25 Feb 19 nicklas 75     for (var i = 0; i < extendedProperties.length; i++)
7604 25 Feb 19 nicklas 76     {
7604 25 Feb 19 nicklas 77       if (extendedProperties[i].name == epName)
7604 25 Feb 19 nicklas 78       {
7604 25 Feb 19 nicklas 79         ep = extendedProperties[i];
7604 25 Feb 19 nicklas 80         i = extendedProperties.length;
7604 25 Feb 19 nicklas 81       }
7604 25 Feb 19 nicklas 82     }
7604 25 Feb 19 nicklas 83     if (ep==null) return;
7604 25 Feb 19 nicklas 84     
7604 25 Feb 19 nicklas 85     var textarea = 'ep.'+ep.name;
7604 25 Feb 19 nicklas 86     var title = ep.title;
7604 25 Feb 19 nicklas 87     var useTime = ep.valueType != 'TIMESTAMP';
7604 25 Feb 19 nicklas 88     var format = Data.get('page-data', useTime ? 'datetime-format' : 'date-format');
7604 25 Feb 19 nicklas 89     Dialogs.openCalendar(textarea, title, format, useTime);
7604 25 Feb 19 nicklas 90   }
7604 25 Feb 19 nicklas 91   
7604 25 Feb 19 nicklas 92   // Validate the 'Contact information' tab
7604 25 Feb 19 nicklas 93   settings.validateContact = function()
7604 25 Feb 19 nicklas 94   {
7604 25 Feb 19 nicklas 95     return true;
7604 25 Feb 19 nicklas 96   }
7604 25 Feb 19 nicklas 97   
7604 25 Feb 19 nicklas 98   // Validate the 'Password' tab
7604 25 Feb 19 nicklas 99   settings.validatePassword = function()
7604 25 Feb 19 nicklas 100   {
7604 25 Feb 19 nicklas 101     var frm = document.forms['user'];
7604 25 Feb 19 nicklas 102     if (frm.password.value != frm.retype_password.value)
7604 25 Feb 19 nicklas 103     {
7604 25 Feb 19 nicklas 104       Forms.showNotification(frm.retype_password, 'The two passwords do not match');
7604 25 Feb 19 nicklas 105       return false;
7604 25 Feb 19 nicklas 106     }
7604 25 Feb 19 nicklas 107     return true;
7604 25 Feb 19 nicklas 108   }
7604 25 Feb 19 nicklas 109
7604 25 Feb 19 nicklas 110   // Validate the 'Other information' tab with extended properties
7604 25 Feb 19 nicklas 111   settings.validateExtendedProperties = function()
7604 25 Feb 19 nicklas 112   {
7604 25 Feb 19 nicklas 113     var frm = document.forms['user'];
7604 25 Feb 19 nicklas 114     var pageData = Doc.element('page-data');
7604 25 Feb 19 nicklas 115     var dateFormat = Data.get(pageData, 'date-format');
7604 25 Feb 19 nicklas 116     var dateTimeFormat = Data.get(pageData, 'datetime-format');
7604 25 Feb 19 nicklas 117     
7604 25 Feb 19 nicklas 118     for (var i = 0; i < extendedProperties.length; i++)
7604 25 Feb 19 nicklas 119     {
7604 25 Feb 19 nicklas 120       var ep = extendedProperties[i];
7604 25 Feb 19 nicklas 121       var valueType = ep.valueType;
7604 25 Feb 19 nicklas 122       var field = frm['ep.'+ep.name];
7604 25 Feb 19 nicklas 123       
7604 25 Feb 19 nicklas 124       if (ep.valueType == 'DATE')
7604 25 Feb 19 nicklas 125       {
7604 25 Feb 19 nicklas 126         if (field.value != '' && !Dates.isDate(field.value, dateFormat))
7604 25 Feb 19 nicklas 127         {
7604 25 Feb 19 nicklas 128           Forms.showNotification(field, "'"+field.value+"' is not a valid date for '" + ep.title + "'");
7604 25 Feb 19 nicklas 129           return false;
7604 25 Feb 19 nicklas 130         }
7604 25 Feb 19 nicklas 131       }
7604 25 Feb 19 nicklas 132       else if (ep.valueType == 'TIMESTAMP')
7604 25 Feb 19 nicklas 133       {
7604 25 Feb 19 nicklas 134         if (field.value != '' && !Dates.isDate(field.value, dateTimeFormat))
7604 25 Feb 19 nicklas 135         {
7604 25 Feb 19 nicklas 136           Forms.showNotification(field, "'"+field.value+"' is not a valid timestamp for '" + ep.title + "'");
7604 25 Feb 19 nicklas 137           return false;
7604 25 Feb 19 nicklas 138         }
7604 25 Feb 19 nicklas 139       }
7604 25 Feb 19 nicklas 140       if (!ep.nullable)
7604 25 Feb 19 nicklas 141       {
7604 25 Feb 19 nicklas 142         if (ep.valueType == 'BOOLEAN')
7604 25 Feb 19 nicklas 143         {
7604 25 Feb 19 nicklas 144           if (Forms.getCheckedRadio(field) == null)
7604 25 Feb 19 nicklas 145           {
7604 25 Feb 19 nicklas 146             Forms.showNotification(field[0], "You must select a value for '" + ep.title + "'");
7604 25 Feb 19 nicklas 147             return false;
7604 25 Feb 19 nicklas 148           }
7604 25 Feb 19 nicklas 149         }
7604 25 Feb 19 nicklas 150         else
7604 25 Feb 19 nicklas 151         {
7604 25 Feb 19 nicklas 152           if (Strings.trim(field.value) == '')
7604 25 Feb 19 nicklas 153           {
7604 25 Feb 19 nicklas 154             Forms.showNotification(field, "You must enter a value for '" + ep.title + "'");
7604 25 Feb 19 nicklas 155             return false;
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     return true;
7604 25 Feb 19 nicklas 161   }
7604 25 Feb 19 nicklas 162   
7604 25 Feb 19 nicklas 163   settings.save = function()
7604 25 Feb 19 nicklas 164   {
7604 25 Feb 19 nicklas 165     var frm = document.forms['user'];
7604 25 Feb 19 nicklas 166     if (TabControl.validateActiveTab('settings'))
7604 25 Feb 19 nicklas 167     {
7604 25 Feb 19 nicklas 168       frm.submit();
7604 25 Feb 19 nicklas 169     }
7604 25 Feb 19 nicklas 170   }
7604 25 Feb 19 nicklas 171   
7604 25 Feb 19 nicklas 172   return settings;
7604 25 Feb 19 nicklas 173 }();
7604 25 Feb 19 nicklas 174
6166 11 Oct 12 nicklas 175 Doc.onLoad(Settings.initPage);