Changeset 6094


Ignore:
Timestamp:
Aug 30, 2012, 10:37:24 AM (11 years ago)
Author:
Nicklas Nordborg
Message:

References #1708: Allow more extracts to be associated with a derived bioassay

The edit dialog now uses the regular extract listing to select an extract. We should also implement a filter so that only extracts that are related to the physical bioassays are listed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/views/derivedbioassays/edit_bioassay.jsp

    r6091 r6094  
    357357        }
    358358      }
     359      var extractId = Math.abs(parseInt(frm.extract_id[frm.extract_id.selectedIndex].value));
     360      if (extractId > 0) parents[parents.length] = 'EXTRACT:'+extractId;
    359361      return parents;
    360362    }
     
    406408    {
    407409      parentsChanged = true;
    408       initExtracts();
    409410    }
    410411   
     
    412413    {
    413414      parentsChanged = true;
    414       initExtracts();
    415415    }
    416416   
     
    465465      list.selectedIndex = 1;
    466466    }
     467   
     468    function selectExtractOnClick()
     469    {
     470      var frm = document.forms['bioAssay'];
     471      var url = '../../biomaterials/extracts/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
     472      url += '&callback=setExtractCallback&resetTemporary=1';
     473      url += ItemSubtype.createRelatedFilter('bioAssay', 'EXTRACT');
     474      if (frm.extract_id.length > 1)
     475      {
     476        var id = Math.abs(parseInt(frm.extract_id[1].value));       
     477        url += '&item_id='+id;
     478      }
     479      Main.openPopup(url, 'SelectExtract', 1050, 700);
     480    }
     481
     482    function setExtractCallback(id, name)
     483    {
     484      var frm = document.forms['bioAssay'];
     485      var list = frm.extract_id;
     486      if (list.length < 2 || list[1].value == '0') // >
     487      {
     488        Forms.addListOption(list, 1, new Option());
     489      }
     490      list[1].value = id;
     491      list[1].text = name;
     492      list.selectedIndex = 1;
     493      extractOnChange();
     494    }
     495   
     496    function extractOnChange()
     497    {
     498      parentsChanged = true;
     499    }
    467500
    468501    function addPhysicalBioAssayOnClick()
     
    533566      {
    534567        isRootOnChange();
    535       }
    536       else
    537       {
    538         initExtracts();
    539568      }
    540569    }
     
    602631      Main.showHide('physicalBioAssaySection', isRoot);
    603632      Main.showHide('parentBioAssaySection', !isRoot);
    604       initExtracts();
    605     }
    606    
    607     function initExtracts()
    608     {
    609       var frm = document.forms['bioAssay'];
    610       var extracts = null;
    611       <%
    612       if (bioAssay == null)
    613       {
    614         %>
    615         if (frm.isRoot[0].checked)
    616         {
    617           if (frm.physicalbioassay_id.selectedIndex >= 0)
    618           {
    619             extracts = getExtractsFromPhysicalBioAssay(frm.physicalbioassay_id[frm.physicalbioassay_id.selectedIndex].value);
    620           }
    621         }
    622         else
    623         {
    624           if (frm.parent_id.selectedIndex >= 0)
    625           {
    626             extracts = getExtractsFromParentBioassay(frm.parent_id[frm.parent_id.selectedIndex].value);
    627           }
    628         }
    629         <%
    630       }
    631       else
    632       {
    633         if (bioAssay.isRoot())
    634         {
    635           %>
    636           extracts = getExtractsFromPhysicalBioAssays();
    637           <%
    638         }
    639         else
    640         {
    641           %>
    642           extracts = getExtractsFromParentBioassays();
    643           <%
    644         }
    645       }
    646       %>
    647 
    648       var currentExtractId = frm.extract_id[frm.extract_id.selectedIndex].value;
    649       frm.extract_id.length = 0;
    650       frm.extract_id[frm.extract_id.length] = new Option('- none -', 0);
    651       var currentWasFound = 0;
    652       if (extracts != null)
    653       {
    654         for (var i = 0; i < extracts.length; i++)
    655         {
    656           var position = extracts[i].position;
    657           var prefix = position ? position + ': ' : '';
    658           frm.extract_id[frm.extract_id.length] = new Option(prefix + extracts[i].name, extracts[i].id);
    659           if (currentExtractId == extracts[i].id)
    660           {
    661             frm.extract_id.selectedIndex = frm.extract_id.length - 1;
    662             currentWasFound = 1;
    663           }
    664         }
    665       }
    666       <%
    667       if (currentExtract != null)
    668       {
    669         %>
    670         if (currentExtractId && !currentWasFound)
    671         {
    672           frm.extract_id[frm.extract_id.length] = new Option('<%=HTML.javaScriptEncode(currentExtract.getName())%>', currentExtractId);
    673           frm.extract_id.selectedIndex = frm.extract_id.length - 1;
    674         }
    675         <%
    676       }
    677       %>
    678     }
    679    
    680     function getExtractsFromPhysicalBioAssay(physicalBioAssayId)
    681     {
    682       if (!physicalBioAssayId) return null;
    683       var request = Ajax.getXmlHttpRequest();
    684       var url = '../physicalbioassays/ajax.jsp?ID=<%=ID%>&cmd=GetSources';
    685       url += '&item_id=' + physicalBioAssayId;
    686       request.open("GET", url, false);
    687       request.send(null);
    688      
    689       var response = JSON.parse(request.responseText);
    690       if (response.status != 'ok')
    691       {
    692         alert(response.message);
    693         return null;
    694       }
    695       return response.sources;
    696     }
    697  
    698     function getExtractsFromParentBioassay(bioAssayId)
    699     {
    700       if (!bioAssayId) return null;
    701       var request = Ajax.getXmlHttpRequest();
    702       var url = 'ajax.jsp?ID=<%=ID%>&cmd=GetExtracts';
    703       url += '&item_id=' + bioAssayId;
    704       request.open("GET", url, false);
    705       request.send(null);
    706 
    707       var response = JSON.parse(request.responseText);
    708       if (response.status != 'ok')
    709       {
    710         alert(response.message);
    711         return null;
    712       }
    713       return response.sources;
    714     }
     633    }
     634
    715635    </script>
    716636  </base:head>
     
    881801        <th>Extract</th>
    882802        <td>
    883           <select name="extract_id" class="selectionlist">
    884           <option value="">- none -
    885           <%
    886           if (currentExtract != null)
    887           {
    888             %>
    889             <option value="<%=currentExtract.getId()%>" selected><%=HTML.encodeTags(currentExtract.getName())%>
    890             <%
    891           }
    892           %>
    893           </select>
     803          <base:select
     804            id="extract_id"
     805            clazz="selectionlist"
     806            required="false"
     807            current="<%=currentExtract%>"
     808            denied="<%=!readCurrentExtract%>"
     809            newitem="<%=bioAssay == null%>"
     810            onselect="selectExtractOnClick()"
     811            onchange="extractOnChange()"
     812          />
    894813        </td>
    895814        <td></td>
Note: See TracChangeset for help on using the changeset viewer.