www/my_base/user/preferences.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 Preferences = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var preferences = {};
7604 25 Feb 19 nicklas 29   
7604 25 Feb 19 nicklas 30   var initialRememberDialogPositions;
7604 25 Feb 19 nicklas 31   
7604 25 Feb 19 nicklas 32   preferences.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', Preferences.save);
7604 25 Feb 19 nicklas 36     Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 37     
7604 25 Feb 19 nicklas 38     // Validation
7604 25 Feb 19 nicklas 39     TabControl.addTabValidator('settings.appearance', preferences.validateAppearance);
7604 25 Feb 19 nicklas 40     TabControl.addTabValidator('settings.plugins', preferences.validatePlugins);
7604 25 Feb 19 nicklas 41     TabControl.addTabValidator('settings.mostRecent', preferences.validateMostRecent);
7604 25 Feb 19 nicklas 42     
7604 25 Feb 19 nicklas 43     // Font size + scale options
7604 25 Feb 19 nicklas 44     Events.addEventHandler('fontsizeXS', 'click', Preferences.fontSizeOnClick);
7604 25 Feb 19 nicklas 45     Events.addEventHandler('fontsizeS', 'click', Preferences.fontSizeOnClick);
7604 25 Feb 19 nicklas 46     Events.addEventHandler('fontsizeM', 'click', Preferences.fontSizeOnClick);
7604 25 Feb 19 nicklas 47     Events.addEventHandler('fontsizeL', 'click', Preferences.fontSizeOnClick);
7604 25 Feb 19 nicklas 48     Events.addEventHandler('fontsizeXL', 'click', Preferences.fontSizeOnClick);
7604 25 Feb 19 nicklas 49     Events.addEventHandler('scale', 'keypress', Events.integerOnly);
7604 25 Feb 19 nicklas 50
7604 25 Feb 19 nicklas 51     // Color and date/time presets
7604 25 Feb 19 nicklas 52     Buttons.addClickHandler('btnMinColor', Preferences.selectColorOnClick);
7604 25 Feb 19 nicklas 53     Buttons.addClickHandler('btnMidColor', Preferences.selectColorOnClick);
7604 25 Feb 19 nicklas 54     Buttons.addClickHandler('btnMaxColor', Preferences.selectColorOnClick);
7604 25 Feb 19 nicklas 55     Events.addEventHandler('mincolor', 'change', Preferences.colorOnChange);
7604 25 Feb 19 nicklas 56     Events.addEventHandler('midcolor', 'change', Preferences.colorOnChange);
7604 25 Feb 19 nicklas 57     Events.addEventHandler('maxcolor', 'change', Preferences.colorOnChange);
7604 25 Feb 19 nicklas 58     Events.addEventHandler('colorPresets', 'change', Preferences.colorPresetOnChange);
7604 25 Feb 19 nicklas 59     Events.addEventHandler('datePresets', 'change', Preferences.datePresetOnChange);
7604 25 Feb 19 nicklas 60     Events.addEventHandler('dateTimePresets', 'change', Preferences.dateTimePresetOnChange);
7604 25 Feb 19 nicklas 61     
7604 25 Feb 19 nicklas 62     // Recently used items
7604 25 Feb 19 nicklas 63     Events.addEventHandler('maxViewed', 'keypress', Events.integerOnly);
7604 25 Feb 19 nicklas 64     Events.addEventHandler('maxUsed', 'keypress', Events.integerOnly);
7604 25 Feb 19 nicklas 65     Buttons.addClickHandler('moveUp', Preferences.moveStickyUpOrDown);
7604 25 Feb 19 nicklas 66     Buttons.addClickHandler('moveDown', Preferences.moveStickyUpOrDown);
7604 25 Feb 19 nicklas 67     Buttons.addClickHandler('moveLeft', Preferences.moveToSticky);
7604 25 Feb 19 nicklas 68     Buttons.addClickHandler('moveRight', Preferences.moveFromSticky);
7604 25 Feb 19 nicklas 69     Events.addEventHandler('stickyItems', 'dblclick', Preferences.moveFromSticky);
7604 25 Feb 19 nicklas 70     Events.addEventHandler('allItems', 'dblclick', Preferences.moveToSticky);
7604 25 Feb 19 nicklas 71     
7604 25 Feb 19 nicklas 72     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 73     initialRememberDialogPositions = frm.remember_positions.checked;
7604 25 Feb 19 nicklas 74     
7604 25 Feb 19 nicklas 75     if (!App.localStorage())
7604 25 Feb 19 nicklas 76     {
7604 25 Feb 19 nicklas 77       frm.remember_positions.checked = false;
7604 25 Feb 19 nicklas 78       frm.remember_positions.disabled = true;
7604 25 Feb 19 nicklas 79       Doc.element('rememberPositions').title = 'Your browser doesn\'t support this feature';
7604 25 Feb 19 nicklas 80       Doc.addClass('rememberPositions', 'disabled');
7604 25 Feb 19 nicklas 81     }
7604 25 Feb 19 nicklas 82   }
7604 25 Feb 19 nicklas 83
7604 25 Feb 19 nicklas 84   // Validate the 'Appearance' tab
7604 25 Feb 19 nicklas 85   preferences.validateAppearance = function()
7604 25 Feb 19 nicklas 86   {
7604 25 Feb 19 nicklas 87     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 88     var scale = parseInt(frm.scale.value);
7604 25 Feb 19 nicklas 89     if (!Numbers.isInteger(frm.scale.value) || scale < 50 || scale > 200)
7604 25 Feb 19 nicklas 90     {
7604 25 Feb 19 nicklas 91       Forms.showNotification(frm.scale, 'Please enter a scale value between 50 and 200.');
7604 25 Feb 19 nicklas 92       return false;
7604 25 Feb 19 nicklas 93     }
7604 25 Feb 19 nicklas 94     return true;
7604 25 Feb 19 nicklas 95   }
7604 25 Feb 19 nicklas 96   
7604 25 Feb 19 nicklas 97   // Validate the 'Plugins' tab
7604 25 Feb 19 nicklas 98   preferences.validatePlugins = function()
7604 25 Feb 19 nicklas 99   {
7604 25 Feb 19 nicklas 100     return true;
7604 25 Feb 19 nicklas 101   }
7604 25 Feb 19 nicklas 102   
7604 25 Feb 19 nicklas 103   // Validate the 'Recent items' tab
7604 25 Feb 19 nicklas 104   preferences.validateMostRecent = function()
7604 25 Feb 19 nicklas 105   {
7604 25 Feb 19 nicklas 106     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 107     var maxViewed = parseInt(frm.maxViewed.value);
7604 25 Feb 19 nicklas 108     if (!Numbers.isInteger(frm.maxViewed.value) || maxViewed < 0 || maxViewed > 10)
7604 25 Feb 19 nicklas 109     {
7604 25 Feb 19 nicklas 110       Forms.showNotification(frm.maxViewed, 'Please enter a value between 0 and 10.');
7604 25 Feb 19 nicklas 111       return false;
7604 25 Feb 19 nicklas 112     }
7604 25 Feb 19 nicklas 113     var maxUsed = parseInt(frm.maxUsed.value);
7604 25 Feb 19 nicklas 114     if (!Numbers.isInteger(frm.maxUsed.value) || maxUsed < 0 || maxUsed > 10)
7604 25 Feb 19 nicklas 115     {
7604 25 Feb 19 nicklas 116       Forms.showNotification(frm.maxUsed, 'Please enter a value between 0 and 10.');
7604 25 Feb 19 nicklas 117       return false;
7604 25 Feb 19 nicklas 118     }
7604 25 Feb 19 nicklas 119     return true;
7604 25 Feb 19 nicklas 120   }
7604 25 Feb 19 nicklas 121
7604 25 Feb 19 nicklas 122   // Save the preferences
7604 25 Feb 19 nicklas 123   preferences.save = function()
7604 25 Feb 19 nicklas 124   {
7604 25 Feb 19 nicklas 125     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 126     if (TabControl.validateActiveTab('settings'))
7604 25 Feb 19 nicklas 127     {
7604 25 Feb 19 nicklas 128       var sticky_items = frm.sticky_items;
7604 25 Feb 19 nicklas 129       for (var i = 0; i < sticky_items.length; i++)
7604 25 Feb 19 nicklas 130       {
7604 25 Feb 19 nicklas 131         sticky_items.options[i].selected = true;
7604 25 Feb 19 nicklas 132       }
7604 25 Feb 19 nicklas 133       
7604 25 Feb 19 nicklas 134       if (initialRememberDialogPositions && !frm.remember_positions.checked)
7604 25 Feb 19 nicklas 135       {
7604 25 Feb 19 nicklas 136         Dialogs.forgetDialogPositions();
7604 25 Feb 19 nicklas 137         Data.set(document.body, 'no-dialog-position', 1);
7604 25 Feb 19 nicklas 138       }
7604 25 Feb 19 nicklas 139       
7604 25 Feb 19 nicklas 140       frm.submit();
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     Open a popup that allows the user to select a color for 
7604 25 Feb 19 nicklas 147     the given field.
7604 25 Feb 19 nicklas 148   */
7604 25 Feb 19 nicklas 149   preferences.selectColorOnClick = function(event)
7604 25 Feb 19 nicklas 150   {
7604 25 Feb 19 nicklas 151     var dialogTitle = Data.get(event.currentTarget, 'dialog-title');
7604 25 Feb 19 nicklas 152     var colorBox = Data.get(event.currentTarget, 'color-box');
7604 25 Feb 19 nicklas 153     Dialogs.openColorChart(colorBox, dialogTitle);
7604 25 Feb 19 nicklas 154   }
7604 25 Feb 19 nicklas 155   
7604 25 Feb 19 nicklas 156   /**
7604 25 Feb 19 nicklas 157     Event handler that update the visual color box
7604 25 Feb 19 nicklas 158     whenever the hidden rgb value is changed.
7604 25 Feb 19 nicklas 159    */
7604 25 Feb 19 nicklas 160   preferences.colorOnChange = function(event)
7604 25 Feb 19 nicklas 161   {
7604 25 Feb 19 nicklas 162     var field = event.target.name;
7604 25 Feb 19 nicklas 163     var display = Doc.element(field+'.visual');
7604 25 Feb 19 nicklas 164     display.style.background = '#' + event.target.value;
7604 25 Feb 19 nicklas 165   }
7604 25 Feb 19 nicklas 166   
7604 25 Feb 19 nicklas 167   /**
7604 25 Feb 19 nicklas 168     Set a color for the given field.
7604 25 Feb 19 nicklas 169   */
7604 25 Feb 19 nicklas 170   preferences.setColor = function(field, color)
7604 25 Feb 19 nicklas 171   {
7604 25 Feb 19 nicklas 172     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 173     frm[field].value = color;
7604 25 Feb 19 nicklas 174     var display = Doc.element(field+'.visual');
7604 25 Feb 19 nicklas 175     display.style.background = '#' + color;
7604 25 Feb 19 nicklas 176   }
7604 25 Feb 19 nicklas 177   
7604 25 Feb 19 nicklas 178   /**
7604 25 Feb 19 nicklas 179     Event handler that update all 3 colors from a given preset.
7604 25 Feb 19 nicklas 180   */
7604 25 Feb 19 nicklas 181   preferences.colorPresetOnChange = function(event)
7604 25 Feb 19 nicklas 182   {
7604 25 Feb 19 nicklas 183     var colors = event.target.value.split(',');
7604 25 Feb 19 nicklas 184     Preferences.setColor('mincolor', colors[0]);
7604 25 Feb 19 nicklas 185     Preferences.setColor('midcolor', colors[1]);
7604 25 Feb 19 nicklas 186     Preferences.setColor('maxcolor', colors[2]);
7604 25 Feb 19 nicklas 187     event.target.selectedIndex = 0;
7604 25 Feb 19 nicklas 188   }
7604 25 Feb 19 nicklas 189   
7604 25 Feb 19 nicklas 190   /**
7604 25 Feb 19 nicklas 191     Event handler that update the date format from a given preset.
7604 25 Feb 19 nicklas 192    */
7604 25 Feb 19 nicklas 193   preferences.datePresetOnChange = function(event)
7604 25 Feb 19 nicklas 194   {
7604 25 Feb 19 nicklas 195     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 196     frm.date_format.value = event.target.value;
7604 25 Feb 19 nicklas 197     event.target.selectedIndex = 0;
7604 25 Feb 19 nicklas 198   }
7604 25 Feb 19 nicklas 199
7604 25 Feb 19 nicklas 200   /**
7604 25 Feb 19 nicklas 201     Event handler that update the date+time format from a given preset.
7604 25 Feb 19 nicklas 202   */
7604 25 Feb 19 nicklas 203   preferences.dateTimePresetOnChange = function(event)
7604 25 Feb 19 nicklas 204   {
7604 25 Feb 19 nicklas 205     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 206     frm.datetime_format.value = event.target.value;
7604 25 Feb 19 nicklas 207     event.target.selectedIndex = 0;
7604 25 Feb 19 nicklas 208   }
7604 25 Feb 19 nicklas 209
7604 25 Feb 19 nicklas 210   /**
7604 25 Feb 19 nicklas 211     Set a new value for the 'scale'
7604 25 Feb 19 nicklas 212   */
7604 25 Feb 19 nicklas 213   preferences.fontSizeOnClick = function(event)
7604 25 Feb 19 nicklas 214   {
7604 25 Feb 19 nicklas 215     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 216     var newScale = Data.get(event.target, 'scale');
7604 25 Feb 19 nicklas 217     frm.scale.value = newScale;
7604 25 Feb 19 nicklas 218   }
7604 25 Feb 19 nicklas 219   
7604 25 Feb 19 nicklas 220   /**
7604 25 Feb 19 nicklas 221     Move the selected options in the 'sticy items' list up or down.
7604 25 Feb 19 nicklas 222   */
7604 25 Feb 19 nicklas 223   preferences.moveStickyUpOrDown = function(event)
7604 25 Feb 19 nicklas 224   {
7604 25 Feb 19 nicklas 225     var moveDown = Data.int(event.currentTarget, 'down');
7604 25 Feb 19 nicklas 226     Forms.moveListOptions('stickyItems', moveDown);
7604 25 Feb 19 nicklas 227   }
7604 25 Feb 19 nicklas 228
7604 25 Feb 19 nicklas 229   preferences.moveToSticky = function()
7604 25 Feb 19 nicklas 230   {
7604 25 Feb 19 nicklas 231     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 232     Forms.moveSelected(frm.all_items, frm.sticky_items);
7604 25 Feb 19 nicklas 233   }
7604 25 Feb 19 nicklas 234   
7604 25 Feb 19 nicklas 235   preferences.moveFromSticky = function()
7604 25 Feb 19 nicklas 236   {
7604 25 Feb 19 nicklas 237     var frm = document.forms['preferences'];
7604 25 Feb 19 nicklas 238     Forms.moveSelected(frm.sticky_items, frm.all_items);
7604 25 Feb 19 nicklas 239   }
7604 25 Feb 19 nicklas 240
7604 25 Feb 19 nicklas 241   return preferences;
7604 25 Feb 19 nicklas 242 }();
7604 25 Feb 19 nicklas 243
7604 25 Feb 19 nicklas 244 Doc.onLoad(Preferences.initPage);
7604 25 Feb 19 nicklas 245
7604 25 Feb 19 nicklas 246