extensions/net.sf.basedb.meludi/trunk/resources/index.js

Code
Comments
Other
Rev Date Author Line
2933 14 Nov 14 olle 1 var Index = function()
2933 14 Nov 14 olle 2 {
2933 14 Nov 14 olle 3   var index = {};
2933 14 Nov 14 olle 4   var debug = 0;
2933 14 Nov 14 olle 5   var myPermissions = {};
2933 14 Nov 14 olle 6
2933 14 Nov 14 olle 7   var counters;
2933 14 Nov 14 olle 8   var counterNo = -1;
4151 04 Oct 16 olle 9   var sampleItemPrefix = '';
4214 08 Nov 16 olle 10   var sampleItemNumDigits = 5;
2933 14 Nov 14 olle 11   
2933 14 Nov 14 olle 12   
2933 14 Nov 14 olle 13   index.initPage = function()
2933 14 Nov 14 olle 14   {
2933 14 Nov 14 olle 15     Events.doOnEnter('caseName', index.caseSummary);
3176 06 Mar 15 olle 16     Events.addEventHandler('caseName', 'keypress', index.testReggie);
2933 14 Nov 14 olle 17     Events.addEventHandler('caseName', 'keypress', index.testSnake);
2933 14 Nov 14 olle 18     Events.addEventHandler('caseName', 'keypress', index.testMeludi);
3210 26 Mar 15 olle 19     Events.addEventHandler('caseName', 'keypress', index.testMeludiUpperCaseI);
2933 14 Nov 14 olle 20     Buttons.addClickHandler('btnCaseSummary', index.caseSummary);
4788 02 May 18 olle 21     // Alternative code for entry field 'caseName_alt_rec' for project SCAN-B-rec
4788 02 May 18 olle 22     Events.doOnEnter('caseName_alt_rec', index.caseSummary_alt_rec);
4788 02 May 18 olle 23     Events.addEventHandler('caseName_alt_rec', 'keypress', index.testReggie_alt_rec);
4788 02 May 18 olle 24     Events.addEventHandler('caseName_alt_rec', 'keypress', index.testSnake_alt_rec);
4788 02 May 18 olle 25     Events.addEventHandler('caseName_alt_rec', 'keypress', index.testMeludi_alt_rec);
4788 02 May 18 olle 26     Events.addEventHandler('caseName_alt_rec', 'keypress', index.testMeludiUpperCaseI_alt_rec);
4788 02 May 18 olle 27     Buttons.addClickHandler('btnCaseSummary_alt_rec', index.caseSummary_alt_rec);
2933 14 Nov 14 olle 28     index.initPermissions();
3100 21 Jan 15 olle 29     index.loadCounts();
4151 04 Oct 16 olle 30     index.loadConfiguration();
2933 14 Nov 14 olle 31     
2933 14 Nov 14 olle 32     var frm = document.forms['meludi'];
2933 14 Nov 14 olle 33     frm.caseName.disabled = !App.getActiveProjectId();
4788 02 May 18 olle 34     frm.caseName_alt_rec.disabled = !App.getActiveProjectId();
2933 14 Nov 14 olle 35   }
2933 14 Nov 14 olle 36   
2933 14 Nov 14 olle 37   index.initPermissions = function()
2933 14 Nov 14 olle 38   {
2933 14 Nov 14 olle 39     // Get permission information
2933 14 Nov 14 olle 40     var url = 'Install.servlet?ID='+App.getSessionId();
2933 14 Nov 14 olle 41     url += '&cmd=GetPermissions';
2933 14 Nov 14 olle 42     var request = Ajax.getXmlHttpRequest();
2933 14 Nov 14 olle 43     request.open("GET", url, true);
2933 14 Nov 14 olle 44     Ajax.setReadyStateHandler(request, index.onPermissionsLoaded, index.onPermissionsLoaded);
2933 14 Nov 14 olle 45     request.send(null);
2933 14 Nov 14 olle 46   }
2933 14 Nov 14 olle 47   
2933 14 Nov 14 olle 48   // Callback when permission information is ready
2933 14 Nov 14 olle 49   index.onPermissionsLoaded = function(request)
2933 14 Nov 14 olle 50   {
2933 14 Nov 14 olle 51     if (debug) App.debug(Strings.encodeTags(request.responseText));
2933 14 Nov 14 olle 52     var response;
2933 14 Nov 14 olle 53     var error = false;
2933 14 Nov 14 olle 54     try
2933 14 Nov 14 olle 55     {
2933 14 Nov 14 olle 56       response = JSON.parse(request.responseText);
2933 14 Nov 14 olle 57       if (response.status != 'ok')
2933 14 Nov 14 olle 58       {
2933 14 Nov 14 olle 59         error = response.message || response.stacktrace || 'Unexpected error';
2933 14 Nov 14 olle 60       }
2933 14 Nov 14 olle 61     }
2933 14 Nov 14 olle 62     catch (ex)
2933 14 Nov 14 olle 63     {
2933 14 Nov 14 olle 64       error = ex;
2933 14 Nov 14 olle 65     }
2933 14 Nov 14 olle 66     
2933 14 Nov 14 olle 67     if (error)
2933 14 Nov 14 olle 68     {
2933 14 Nov 14 olle 69       alert(error);
2933 14 Nov 14 olle 70       return;
2933 14 Nov 14 olle 71     }
2933 14 Nov 14 olle 72     
2933 14 Nov 14 olle 73     myPermissions = response.permissions;
2933 14 Nov 14 olle 74     var isAdmin = myPermissions['Administrator'] == 1;
2933 14 Nov 14 olle 75     var noProjectIsActive = !App.getActiveProjectId();
2933 14 Nov 14 olle 76     
2933 14 Nov 14 olle 77     // Enable links based on the permission
2933 14 Nov 14 olle 78     var wizards = document.getElementsByClassName('require-permission');
2933 14 Nov 14 olle 79     // NOTE! Loop backwards since changing the classname 
2933 14 Nov 14 olle 80     // of an element so that 'require-permission' no longer is included
2933 14 Nov 14 olle 81     // removes the element from the 'wizards' list
2933 14 Nov 14 olle 82     for (var wizardNo = wizards.length-1; wizardNo >= 0; wizardNo--)
2933 14 Nov 14 olle 83     {
2933 14 Nov 14 olle 84       var wizard = wizards[wizardNo];
2933 14 Nov 14 olle 85       if (wizard.className.indexOf('not-implemented') == -1)
2933 14 Nov 14 olle 86       {
2933 14 Nov 14 olle 87         var role = wizard.getAttribute('data-role');
2933 14 Nov 14 olle 88         if (noProjectIsActive)
2933 14 Nov 14 olle 89         {
2933 14 Nov 14 olle 90           wizard.title = 'You must select a project before using this wizard';
2933 14 Nov 14 olle 91         }
2933 14 Nov 14 olle 92         else if (!role || myPermissions[role] == 1 || isAdmin)
2933 14 Nov 14 olle 93         {
2933 14 Nov 14 olle 94           wizard.className = 'link';
2933 14 Nov 14 olle 95           wizard.addEventListener('click', index.wizardOnClick);
2933 14 Nov 14 olle 96         }
2933 14 Nov 14 olle 97         else
2933 14 Nov 14 olle 98         {
2933 14 Nov 14 olle 99           wizard.title = 'You do not have permission to user this wizard';
2933 14 Nov 14 olle 100         }
2933 14 Nov 14 olle 101       }
2933 14 Nov 14 olle 102     }
2933 14 Nov 14 olle 103   }
2933 14 Nov 14 olle 104
2933 14 Nov 14 olle 105   index.wizardOnClick = function(event)
2933 14 Nov 14 olle 106   {
2933 14 Nov 14 olle 107     var role = Data.get(event.currentTarget, 'role');
2933 14 Nov 14 olle 108     var isAdmin = myPermissions['Administrator'] == 1;
2933 14 Nov 14 olle 109     if (!role || myPermissions[role] == 1 || isAdmin)
2933 14 Nov 14 olle 110     {
2933 14 Nov 14 olle 111       var link = Data.get(event.currentTarget, 'link');
2933 14 Nov 14 olle 112       location.href = link;
2933 14 Nov 14 olle 113     }
2933 14 Nov 14 olle 114     else
2933 14 Nov 14 olle 115     {
2933 14 Nov 14 olle 116       Forms.showNotification(event.currentTarget, 'You do not have permission to use this wizard!', null, null, 'left');
2933 14 Nov 14 olle 117     }
2933 14 Nov 14 olle 118   }
2933 14 Nov 14 olle 119
3100 21 Jan 15 olle 120   index.loadCounts = function()
2933 14 Nov 14 olle 121   {
3100 21 Jan 15 olle 122     var url = 'Session.servlet?ID='+App.getSessionId();
3100 21 Jan 15 olle 123     url += '&cmd=GetCounters'
3100 21 Jan 15 olle 124     var request = Ajax.getXmlHttpRequest();
3100 21 Jan 15 olle 125     request.open("GET", url, true);
3100 21 Jan 15 olle 126     Ajax.setReadyStateHandler(request, index.onCounted, index.onCounted);
3100 21 Jan 15 olle 127     request.send(null);
2933 14 Nov 14 olle 128   }
2933 14 Nov 14 olle 129   
2933 14 Nov 14 olle 130   index.onCounted = function(request)
2933 14 Nov 14 olle 131   {
2933 14 Nov 14 olle 132     if (debug) 
2933 14 Nov 14 olle 133     {
3100 21 Jan 15 olle 134       App.debug(Strings.encodeTags(request.responseText));
2933 14 Nov 14 olle 135     }
2933 14 Nov 14 olle 136
2933 14 Nov 14 olle 137     var response;
2933 14 Nov 14 olle 138     var error = false;
2933 14 Nov 14 olle 139     try
2933 14 Nov 14 olle 140     {
2933 14 Nov 14 olle 141       response = JSON.parse(request.responseText);
2933 14 Nov 14 olle 142       if (response.status != 'ok')
2933 14 Nov 14 olle 143       {
2933 14 Nov 14 olle 144         error = response.message || response.stacktrace || 'Unexpected error';
2933 14 Nov 14 olle 145       }
2933 14 Nov 14 olle 146     }
2933 14 Nov 14 olle 147     catch (ex)
2933 14 Nov 14 olle 148     {
2933 14 Nov 14 olle 149       error = ex;
2933 14 Nov 14 olle 150     }
3100 21 Jan 15 olle 151     if (error) App.debug(error);
2933 14 Nov 14 olle 152     
3100 21 Jan 15 olle 153     var counts = error ? null : response.counts;
3100 21 Jan 15 olle 154     if (counts == null) return;
3100 21 Jan 15 olle 155
3100 21 Jan 15 olle 156     var counters = document.getElementsByClassName('counter');
3100 21 Jan 15 olle 157     for (var counterNo = 0; counterNo < counters.length; counterNo++)
2933 14 Nov 14 olle 158     {
3100 21 Jan 15 olle 159       var counter = counters[counterNo];
3100 21 Jan 15 olle 160       var countId = Data.get(counter, 'counter');
3100 21 Jan 15 olle 161
3100 21 Jan 15 olle 162       var count = counts[countId];
3100 21 Jan 15 olle 163       Doc.addClass(counter, 'done');
3100 21 Jan 15 olle 164       if (count == null)
3100 21 Jan 15 olle 165       {
3100 21 Jan 15 olle 166         counter.innerHTML = '-';
3100 21 Jan 15 olle 167       }
3100 21 Jan 15 olle 168       else
3100 21 Jan 15 olle 169       {
3100 21 Jan 15 olle 170         counter.innerHTML = count;
3100 21 Jan 15 olle 171       }
2933 14 Nov 14 olle 172     }
2933 14 Nov 14 olle 173   }
2933 14 Nov 14 olle 174   
4151 04 Oct 16 olle 175   index.loadConfiguration = function()
4151 04 Oct 16 olle 176   {
4151 04 Oct 16 olle 177     var url = 'Session.servlet?ID='+App.getSessionId();
4151 04 Oct 16 olle 178     url += '&cmd=GetConfiguration'
4151 04 Oct 16 olle 179     var request = Ajax.getXmlHttpRequest();
4151 04 Oct 16 olle 180     request.open("GET", url, true);
4151 04 Oct 16 olle 181     Ajax.setReadyStateHandler(request, index.onConfiguration, index.onConfiguration);
4151 04 Oct 16 olle 182     request.send(null);
4151 04 Oct 16 olle 183   }
4151 04 Oct 16 olle 184   
4151 04 Oct 16 olle 185   index.onConfiguration = function(request)
4151 04 Oct 16 olle 186   {
4151 04 Oct 16 olle 187     if (debug) 
4151 04 Oct 16 olle 188     {
4151 04 Oct 16 olle 189       App.debug(Strings.encodeTags(request.responseText));
4151 04 Oct 16 olle 190     }
4151 04 Oct 16 olle 191
4151 04 Oct 16 olle 192     var response;
4151 04 Oct 16 olle 193     var error = false;
4151 04 Oct 16 olle 194     try
4151 04 Oct 16 olle 195     {
4151 04 Oct 16 olle 196       response = JSON.parse(request.responseText);
4151 04 Oct 16 olle 197       if (response.status != 'ok')
4151 04 Oct 16 olle 198       {
4151 04 Oct 16 olle 199         error = response.message || response.stacktrace || 'Unexpected error';
4151 04 Oct 16 olle 200       }
4151 04 Oct 16 olle 201     }
4151 04 Oct 16 olle 202     catch (ex)
4151 04 Oct 16 olle 203     {
4151 04 Oct 16 olle 204       error = ex;
4151 04 Oct 16 olle 205     }
4151 04 Oct 16 olle 206     if (error) App.debug(error);
4151 04 Oct 16 olle 207
4151 04 Oct 16 olle 208     var conf = response.configuration;
4151 04 Oct 16 olle 209     sampleItemPrefix = conf.sampleItemPrefix;
4214 08 Nov 16 olle 210     sampleItemNumDigits = conf.sampleItemNumDigits;
4829 01 Jun 18 olle 211     var projectName = conf.name;
4829 01 Jun 18 olle 212     if (projectName == 'SCAN-B-rec')
4829 01 Jun 18 olle 213     {
4829 01 Jun 18 olle 214       Doc.element('caseName_alt_rec').setAttribute('title', 'Please enter a case id ("' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits)');
4829 01 Jun 18 olle 215     }
4829 01 Jun 18 olle 216     else
4829 01 Jun 18 olle 217     {
4829 01 Jun 18 olle 218       Doc.element('caseName').setAttribute('title', 'Please enter a case id ("' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits)');
4829 01 Jun 18 olle 219     }
4151 04 Oct 16 olle 220   }
4829 01 Jun 18 olle 221
2933 14 Nov 14 olle 222   index.caseSummary = function()
2933 14 Nov 14 olle 223   {
2933 14 Nov 14 olle 224     var frm = document.forms['meludi'];
2933 14 Nov 14 olle 225     
2933 14 Nov 14 olle 226     var caseName = frm.caseName.value;
2933 14 Nov 14 olle 227     if (!caseName)
2933 14 Nov 14 olle 228     {
4214 08 Nov 16 olle 229       Forms.showNotification('caseName', 'Please enter a case id (&quot;' + sampleItemPrefix + '&quot; + ' + sampleItemNumDigits + ' digits)', null, null, 'left');
2933 14 Nov 14 olle 230       return;
2933 14 Nov 14 olle 231     }
2933 14 Nov 14 olle 232     var url = 'reports/case_summary.jsp?ID='+App.getSessionId();
2933 14 Nov 14 olle 233     url += '&caseName='+encodeURIComponent(caseName);
2933 14 Nov 14 olle 234     location.href = url;
2933 14 Nov 14 olle 235   }
2933 14 Nov 14 olle 236   
4788 02 May 18 olle 237   index.caseSummary_alt_rec = function()
4788 02 May 18 olle 238   {
4788 02 May 18 olle 239     var frm = document.forms['meludi'];
4788 02 May 18 olle 240     
4788 02 May 18 olle 241     var caseName = frm.caseName_alt_rec.value;
4788 02 May 18 olle 242     if (!caseName)
4788 02 May 18 olle 243     {
4788 02 May 18 olle 244       Forms.showNotification('caseName_alt_rec', 'Please enter a case id (&quot;' + sampleItemPrefix + '&quot; + ' + sampleItemNumDigits + ' digits)', null, null, 'left');
4788 02 May 18 olle 245       return;
4788 02 May 18 olle 246     }
4788 02 May 18 olle 247     var url = 'reports/case_summary_alt_rec.jsp?ID='+App.getSessionId();
4788 02 May 18 olle 248     url += '&caseName='+encodeURIComponent(caseName);
4788 02 May 18 olle 249     location.href = url;
4788 02 May 18 olle 250   }
4788 02 May 18 olle 251   
3176 06 Mar 15 olle 252   index.testReggie = function(event)
2933 14 Nov 14 olle 253   {
2933 14 Nov 14 olle 254     if (event.currentTarget.value == 'Reggi' && event.charCode == 101)
2933 14 Nov 14 olle 255     {
2933 14 Nov 14 olle 256       setTimeout(index.showSnake, 500);
2933 14 Nov 14 olle 257     }
2933 14 Nov 14 olle 258   }
2933 14 Nov 14 olle 259
4788 02 May 18 olle 260   index.testReggie_alt_rec = function(event)
4788 02 May 18 olle 261   {
4788 02 May 18 olle 262     if (event.currentTarget.value == 'Reggi' && event.charCode == 101)
4788 02 May 18 olle 263     {
4788 02 May 18 olle 264       setTimeout(index.showSnake_alt_rec, 500);
4788 02 May 18 olle 265     }
4788 02 May 18 olle 266   }
4788 02 May 18 olle 267
3176 06 Mar 15 olle 268   index.testSnake = function(event)
3176 06 Mar 15 olle 269   {
3176 06 Mar 15 olle 270     if (event.currentTarget.value == 'Snak' && event.charCode == 101)
3176 06 Mar 15 olle 271     {
3176 06 Mar 15 olle 272       setTimeout(index.showSnake, 500);
3176 06 Mar 15 olle 273     }
3176 06 Mar 15 olle 274   }
3176 06 Mar 15 olle 275
4788 02 May 18 olle 276   index.testSnake_alt_rec = function(event)
4788 02 May 18 olle 277   {
4788 02 May 18 olle 278     if (event.currentTarget.value == 'Snak' && event.charCode == 101)
4788 02 May 18 olle 279     {
4788 02 May 18 olle 280       setTimeout(index.showSnake_alt_rec, 500);
4788 02 May 18 olle 281     }
4788 02 May 18 olle 282   }
4788 02 May 18 olle 283
2933 14 Nov 14 olle 284   index.showSnake = function()
2933 14 Nov 14 olle 285   {
2933 14 Nov 14 olle 286     var msg = '<img src="images/snake-icon-64.png" style="float: right;">'
2933 14 Nov 14 olle 287     msg += '– There\'s a big snake in the plane, Jock!<br>';
2933 14 Nov 14 olle 288     msg += '– Oh, that\'s just my pet snake, Reggie!<br>';
2933 14 Nov 14 olle 289     msg += '– I hate snakes, Jock! I hate \'em!<br>';
2933 14 Nov 14 olle 290     msg += '– Come on! Show a little backbone, will ya?<br>';
2933 14 Nov 14 olle 291     msg += '<div class="snake-quote-source">Indiana Jones - Raiders of the Lost Ark</div>';
2933 14 Nov 14 olle 292     Forms.showNotification('caseName', msg, 'snake-quote', 'pointer-above', 'left');
2933 14 Nov 14 olle 293   }
2933 14 Nov 14 olle 294
4788 02 May 18 olle 295   index.showSnake_alt_rec = function()
4788 02 May 18 olle 296   {
4788 02 May 18 olle 297     var msg = '<img src="images/snake-icon-64.png" style="float: right;">'
4788 02 May 18 olle 298     msg += '– There\'s a big snake in the plane, Jock!<br>';
4788 02 May 18 olle 299     msg += '– Oh, that\'s just my pet snake, Reggie!<br>';
4788 02 May 18 olle 300     msg += '– I hate snakes, Jock! I hate \'em!<br>';
4788 02 May 18 olle 301     msg += '– Come on! Show a little backbone, will ya?<br>';
4788 02 May 18 olle 302     msg += '<div class="snake-quote-source">Indiana Jones - Raiders of the Lost Ark</div>';
4788 02 May 18 olle 303     Forms.showNotification('caseName_alt_rec', msg, 'snake-quote', 'pointer-above', 'left');
4788 02 May 18 olle 304   }
4788 02 May 18 olle 305
2933 14 Nov 14 olle 306   index.testMeludi = function(event)
2933 14 Nov 14 olle 307   {
2933 14 Nov 14 olle 308     if (event.currentTarget.value == 'MeLuD' && event.charCode == 105)
2933 14 Nov 14 olle 309     {
2933 14 Nov 14 olle 310       setTimeout(index.showMeludi, 500);
2933 14 Nov 14 olle 311     }
2933 14 Nov 14 olle 312   }
2933 14 Nov 14 olle 313
4788 02 May 18 olle 314   index.testMeludi_alt_rec = function(event)
4788 02 May 18 olle 315   {
4788 02 May 18 olle 316     if (event.currentTarget.value == 'MeLuD' && event.charCode == 105)
4788 02 May 18 olle 317     {
4788 02 May 18 olle 318       setTimeout(index.showMeludi_alt_rec, 500);
4788 02 May 18 olle 319     }
4788 02 May 18 olle 320   }
4788 02 May 18 olle 321
3210 26 Mar 15 olle 322   index.testMeludiUpperCaseI = function(event)
3210 26 Mar 15 olle 323   {
3210 26 Mar 15 olle 324     if (event.currentTarget.value == 'MeLuD' && event.charCode == 73)
3210 26 Mar 15 olle 325     {
3210 26 Mar 15 olle 326       setTimeout(index.showMeludi, 500);
3210 26 Mar 15 olle 327     }
3210 26 Mar 15 olle 328   }
3210 26 Mar 15 olle 329
4788 02 May 18 olle 330   index.testMeludiUpperCaseI_alt_rec = function(event)
4788 02 May 18 olle 331   {
4788 02 May 18 olle 332     if (event.currentTarget.value == 'MeLuD' && event.charCode == 73)
4788 02 May 18 olle 333     {
4788 02 May 18 olle 334       setTimeout(index.showMeludi_alt_rec, 500);
4788 02 May 18 olle 335     }
4788 02 May 18 olle 336   }
4788 02 May 18 olle 337
2933 14 Nov 14 olle 338   index.showMeludi = function()
2933 14 Nov 14 olle 339   {
3028 11 Dec 14 olle 340     var msg = '<img src="images/dancing_reggie.gif">'
2933 14 Nov 14 olle 341     msg += '<br>';
3210 26 Mar 15 olle 342     msg += '<div class="meludi-reggie-source">MeLuDI - Making Reggie dance to a new tune</div>';
3028 11 Dec 14 olle 343     Forms.showNotification('caseName', msg, 'meludi-reggie', 'pointer-above', 'left');
2933 14 Nov 14 olle 344   }
2933 14 Nov 14 olle 345
4788 02 May 18 olle 346   index.showMeludi_alt_rec = function()
4788 02 May 18 olle 347   {
4788 02 May 18 olle 348     var msg = '<img src="images/dancing_reggie.gif">'
4788 02 May 18 olle 349     msg += '<br>';
4788 02 May 18 olle 350     msg += '<div class="meludi-reggie-source">MeLuDI - Making Reggie dance to a new tune</div>';
4788 02 May 18 olle 351     Forms.showNotification('caseName_alt_rec', msg, 'meludi-reggie', 'pointer-above', 'left');
4788 02 May 18 olle 352   }
4788 02 May 18 olle 353
2933 14 Nov 14 olle 354   return index;
2933 14 Nov 14 olle 355 }();
2933 14 Nov 14 olle 356
2933 14 Nov 14 olle 357 Doc.onLoad(Index.initPage);
2933 14 Nov 14 olle 358