extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/histology_block.js

Code
Comments
Other
Rev Date Author Line
2782 10 Oct 14 nicklas 1 var Block = function()
2782 10 Oct 14 nicklas 2 {
2782 10 Oct 14 nicklas 3   var block = {};
2853 23 Oct 14 nicklas 4   var debug = 0;
2782 10 Oct 14 nicklas 5   
2782 10 Oct 14 nicklas 6   var workList;
2782 10 Oct 14 nicklas 7
2782 10 Oct 14 nicklas 8   // Page initialization
2782 10 Oct 14 nicklas 9   block.initPage = function()
2782 10 Oct 14 nicklas 10   {
2782 10 Oct 14 nicklas 11     // Step 1
2782 10 Oct 14 nicklas 12     Events.addEventHandler('step-1', 'wizard-validate', block.validateStep1);
2782 10 Oct 14 nicklas 13     Events.addEventHandler('embedDate', 'blur', Wizard.validateDate);
2782 10 Oct 14 nicklas 14     
2782 10 Oct 14 nicklas 15     // Step 2
2782 10 Oct 14 nicklas 16     Events.addEventHandler('step-2', 'wizard-initialize', block.initializeStep2);
2782 10 Oct 14 nicklas 17     Events.addEventHandler('step-2', 'wizard-validate', block.validateStep2);
2782 10 Oct 14 nicklas 18     
2782 10 Oct 14 nicklas 19     // Navigation
2782 10 Oct 14 nicklas 20     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2782 10 Oct 14 nicklas 21     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2782 10 Oct 14 nicklas 22     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2782 10 Oct 14 nicklas 23     Buttons.addClickHandler('goregister', Wizard.goRegister);
2782 10 Oct 14 nicklas 24     
2782 10 Oct 14 nicklas 25     // Final registration
2782 10 Oct 14 nicklas 26     Events.addEventHandler('wizard', 'wizard-submit', block.submit);
2782 10 Oct 14 nicklas 27     
2782 10 Oct 14 nicklas 28     Reggie.loadProtocols('HISTOLOGY_PROTOCOL', 'histologyProtocol');
2782 10 Oct 14 nicklas 29
2782 10 Oct 14 nicklas 30     var url = '../Histology.servlet?ID='+App.getSessionId();
2782 10 Oct 14 nicklas 31     url += '&cmd=GetHistologyWorkLists';
2782 10 Oct 14 nicklas 32     Wizard.showLoadingAnimation('Loading histology work lists...');
2782 10 Oct 14 nicklas 33     Wizard.asyncJsonRequest(url, block.histologyListsLoaded);
2782 10 Oct 14 nicklas 34   }
2782 10 Oct 14 nicklas 35   
2782 10 Oct 14 nicklas 36   block.histologyListsLoaded = function(response)
2782 10 Oct 14 nicklas 37   {
2782 10 Oct 14 nicklas 38     var frm = document.forms['reggie'];
2782 10 Oct 14 nicklas 39     var workLists = response.workLists;
2782 10 Oct 14 nicklas 40     
2782 10 Oct 14 nicklas 41     if (workLists.length > 0)
2782 10 Oct 14 nicklas 42     {
2782 10 Oct 14 nicklas 43       for (var i=0; i < workLists.length; i++)
2782 10 Oct 14 nicklas 44       {
2782 10 Oct 14 nicklas 45         var list = workLists[i];
2782 10 Oct 14 nicklas 46         var name = list.name + ' (' + list.size + ')';
2782 10 Oct 14 nicklas 47         var option = new Option(name, list.id);
2782 10 Oct 14 nicklas 48         frm.workList[frm.workList.length] = option;
2782 10 Oct 14 nicklas 49       }
2782 10 Oct 14 nicklas 50       
2782 10 Oct 14 nicklas 51       Wizard.setInputStatus('workList', 'valid');
2782 10 Oct 14 nicklas 52     }
2782 10 Oct 14 nicklas 53     else
2782 10 Oct 14 nicklas 54     {
2782 10 Oct 14 nicklas 55       Wizard.setFatalError('No Histology work lists available for processing.');
2782 10 Oct 14 nicklas 56       return;
2782 10 Oct 14 nicklas 57     }
2782 10 Oct 14 nicklas 58     
2782 10 Oct 14 nicklas 59     Doc.show('step-1');
2782 10 Oct 14 nicklas 60     Doc.show('gonext');
2782 10 Oct 14 nicklas 61     frm.embedDate.focus();
2782 10 Oct 14 nicklas 62   }
2782 10 Oct 14 nicklas 63
2782 10 Oct 14 nicklas 64   block.validateStep1 = function(event)
2782 10 Oct 14 nicklas 65   {
2782 10 Oct 14 nicklas 66     var valid = Wizard.isValid('embedDate');
2782 10 Oct 14 nicklas 67     if (!valid) event.preventDefault();
2782 10 Oct 14 nicklas 68   }
2782 10 Oct 14 nicklas 69
2782 10 Oct 14 nicklas 70   
2782 10 Oct 14 nicklas 71   block.initializeStep2 = function()
2782 10 Oct 14 nicklas 72   {
2782 10 Oct 14 nicklas 73     var frm = document.forms['reggie'];
2782 10 Oct 14 nicklas 74     var url = '../Histology.servlet?ID='+App.getSessionId();
2782 10 Oct 14 nicklas 75     url += '&cmd=GetHistologyWorkListInfo&workListId='+frm.workList.value;    
2782 10 Oct 14 nicklas 76     Wizard.showLoadingAnimation('Loading histology work list information...');
2782 10 Oct 14 nicklas 77     Wizard.asyncJsonRequest(url, block.workListInfoLoaded);
2782 10 Oct 14 nicklas 78   }
2782 10 Oct 14 nicklas 79   
2782 10 Oct 14 nicklas 80   block.workListInfoLoaded = function(response)
2782 10 Oct 14 nicklas 81   {
2782 10 Oct 14 nicklas 82     var frm = document.forms['reggie'];
2782 10 Oct 14 nicklas 83
2782 10 Oct 14 nicklas 84     workList = response.workList;
2782 10 Oct 14 nicklas 85     var lastBlockBox = Data.get('page-data', 'last-block-box', '');
2782 10 Oct 14 nicklas 86
2782 10 Oct 14 nicklas 87     var html = '<table id="blockTable">';
2782 10 Oct 14 nicklas 88     html += '<thead>';
2782 10 Oct 14 nicklas 89     // First header row
2782 10 Oct 14 nicklas 90     html += '<tr>';
2782 10 Oct 14 nicklas 91     html += '<th style="width: 8em;">Paraffin block</th>';
2782 10 Oct 14 nicklas 92     html += '<th style="width: 8em;">Storage box</th>';
2782 10 Oct 14 nicklas 93     html += '<th style="width: 25em;">Comment</th>';
2782 10 Oct 14 nicklas 94     html += '<th style="width: 20px;"></th>';
2782 10 Oct 14 nicklas 95     html += '</tr>';
2782 10 Oct 14 nicklas 96     html += '</thead>';
2782 10 Oct 14 nicklas 97     html += '<tbody>';
2782 10 Oct 14 nicklas 98     
2782 10 Oct 14 nicklas 99     for (var blockNo = 0; blockNo < workList.blocks.length; blockNo++)
2782 10 Oct 14 nicklas 100     {
2782 10 Oct 14 nicklas 101       var pb = workList.blocks[blockNo];
2782 10 Oct 14 nicklas 102
2782 10 Oct 14 nicklas 103       html += '<tr>';
2782 10 Oct 14 nicklas 104       html += '<td>' + Strings.encodeTags(pb.name) + '</td>';
2782 10 Oct 14 nicklas 105       html += '<td><input type="text" name="blockBox.'+blockNo+'" id="blockBox.'+blockNo+'" value="'+lastBlockBox+'" style="width: 8em;"></td>';
2782 10 Oct 14 nicklas 106       html += '<td><input type="text" name="blockComment.'+blockNo+'" id="blockComment.'+blockNo+'" style="width: 25em;"></td>';
2782 10 Oct 14 nicklas 107       html += '<td class="status" id="blockBox.'+blockNo+'.status"></td>';
2782 10 Oct 14 nicklas 108       html += '</tr>';
2782 10 Oct 14 nicklas 109     }
2782 10 Oct 14 nicklas 110     html += '</tbody>';
2782 10 Oct 14 nicklas 111     html += '</table>';
2782 10 Oct 14 nicklas 112     Doc.element('blockBoxInput').innerHTML = html;
2782 10 Oct 14 nicklas 113     
2782 10 Oct 14 nicklas 114     for (var blockNo = 0; blockNo < workList.blocks.length; blockNo++)
2782 10 Oct 14 nicklas 115     {
2782 10 Oct 14 nicklas 116       Events.addEventHandler('blockBox.'+blockNo, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'blockBox.'+(blockNo+1) });
2782 10 Oct 14 nicklas 117       Events.addEventHandler('blockBox.'+blockNo, 'change', block.blockBoxOnChange);
2782 10 Oct 14 nicklas 118     }
2782 10 Oct 14 nicklas 119     
2782 10 Oct 14 nicklas 120     Wizard.setCurrentStep(2);
2782 10 Oct 14 nicklas 121     Doc.show('goregister');
2782 10 Oct 14 nicklas 122     Doc.show('gocancel');
2782 10 Oct 14 nicklas 123     frm['blockBox.0'].focus();
2782 10 Oct 14 nicklas 124   }
2782 10 Oct 14 nicklas 125
2782 10 Oct 14 nicklas 126   /**
2782 10 Oct 14 nicklas 127     Propagate changes to downward blocks.
2782 10 Oct 14 nicklas 128   */
2782 10 Oct 14 nicklas 129   block.blockBoxOnChange = function(event)
2782 10 Oct 14 nicklas 130   {
2782 10 Oct 14 nicklas 131     var frm = document.forms['reggie'];
2782 10 Oct 14 nicklas 132     var blockName = event.currentTarget.value;
2782 10 Oct 14 nicklas 133
2782 10 Oct 14 nicklas 134     var isDownwards = false;
2782 10 Oct 14 nicklas 135     for (var blockNo = 0; blockNo < workList.blocks.length; blockNo++)
2782 10 Oct 14 nicklas 136     {
2782 10 Oct 14 nicklas 137       var bb = frm['blockBox.'+blockNo];
2782 10 Oct 14 nicklas 138       if (isDownwards)
2782 10 Oct 14 nicklas 139       {
2782 10 Oct 14 nicklas 140         bb.value = blockName;
2782 10 Oct 14 nicklas 141       }
2782 10 Oct 14 nicklas 142       else if (bb == event.currentTarget)
2782 10 Oct 14 nicklas 143       {
2782 10 Oct 14 nicklas 144         isDownwards = true;
2782 10 Oct 14 nicklas 145       }
2782 10 Oct 14 nicklas 146     }
2782 10 Oct 14 nicklas 147   }
2782 10 Oct 14 nicklas 148
2782 10 Oct 14 nicklas 149   block.validateStep2 = function(event)
2782 10 Oct 14 nicklas 150   {
2782 10 Oct 14 nicklas 151     var frm = document.forms['reggie'];
2782 10 Oct 14 nicklas 152     var valid = true;
2782 10 Oct 14 nicklas 153     Wizard.setInputStatus('blockBox');
2782 10 Oct 14 nicklas 154     
2782 10 Oct 14 nicklas 155     for (var blockNo = 0; blockNo < workList.blocks.length; blockNo++)
2782 10 Oct 14 nicklas 156     {
2782 10 Oct 14 nicklas 157       if (frm['blockBox.'+blockNo].value == '')
2782 10 Oct 14 nicklas 158       {
2782 10 Oct 14 nicklas 159         Wizard.setInputStatus('blockBox.'+blockNo, 'invalid', 'A storage box must be specified for all blocks.');
2782 10 Oct 14 nicklas 160         valid = false;
2782 10 Oct 14 nicklas 161       }
2782 10 Oct 14 nicklas 162       else
2782 10 Oct 14 nicklas 163       {
2782 10 Oct 14 nicklas 164         Wizard.setInputStatus('blockBox.'+blockNo, 'valid');
2782 10 Oct 14 nicklas 165       }
2782 10 Oct 14 nicklas 166     }
2782 10 Oct 14 nicklas 167     if (!valid)
2782 10 Oct 14 nicklas 168     {
2782 10 Oct 14 nicklas 169       Wizard.setInputStatus('blockBox', '', 'A storage box must be specified for all blocks.');
2782 10 Oct 14 nicklas 170       event.preventDefault();
2782 10 Oct 14 nicklas 171     }
2782 10 Oct 14 nicklas 172   }
2782 10 Oct 14 nicklas 173
2782 10 Oct 14 nicklas 174   
2782 10 Oct 14 nicklas 175   block.submit = function()
2782 10 Oct 14 nicklas 176   {
2782 10 Oct 14 nicklas 177     var frm = document.forms['reggie'];
2782 10 Oct 14 nicklas 178     
2782 10 Oct 14 nicklas 179     workList.embedDate = frm.embedDate.value;
2782 10 Oct 14 nicklas 180     workList.protocolId = parseInt(frm.histologyProtocol.value, 10);
2782 10 Oct 14 nicklas 181
2782 10 Oct 14 nicklas 182     for (var blockNo = 0; blockNo < workList.blocks.length; blockNo++)
2782 10 Oct 14 nicklas 183     {
2782 10 Oct 14 nicklas 184       var pb = workList.blocks[blockNo];
2782 10 Oct 14 nicklas 185       pb.storageBox = frm['blockBox.'+blockNo].value;
2782 10 Oct 14 nicklas 186       pb.comment = frm['blockComment.'+blockNo].value;
2782 10 Oct 14 nicklas 187     }
2782 10 Oct 14 nicklas 188
2782 10 Oct 14 nicklas 189     var url = '../Histology.servlet?ID='+App.getSessionId();
2782 10 Oct 14 nicklas 190     url += '&cmd=MoveHistologySamplesToParaffinBlocks';
2782 10 Oct 14 nicklas 191     Wizard.showLoadingAnimation('Performing registration...');
2782 10 Oct 14 nicklas 192     Wizard.asyncJsonRequest(url, block.submissionResults, 'POST', JSON.stringify(workList));
2782 10 Oct 14 nicklas 193     
2782 10 Oct 14 nicklas 194   }
2782 10 Oct 14 nicklas 195   
2782 10 Oct 14 nicklas 196   block.submissionResults = function(response)
2782 10 Oct 14 nicklas 197   {
2782 10 Oct 14 nicklas 198     Wizard.showFinalMessage(response.messages);
2782 10 Oct 14 nicklas 199     Doc.show('gorestart');
2782 10 Oct 14 nicklas 200   }
2782 10 Oct 14 nicklas 201   
2782 10 Oct 14 nicklas 202   return block;
2782 10 Oct 14 nicklas 203 }();
2782 10 Oct 14 nicklas 204
2782 10 Oct 14 nicklas 205 Doc.onLoad(Block.initPage);
2782 10 Oct 14 nicklas 206