Changeset 6306


Ignore:
Timestamp:
Aug 13, 2013, 3:15:33 PM (9 years ago)
Author:
Nicklas Nordborg
Message:

References #1729 and #1730. Fixed on several pages in the Biomaterial/Array? LIMS sections.

Location:
trunk/www
Files:
5 added
38 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/admin/clients/help/help.js

    r6295 r6306  
    7878    var clientId = frm.client_id.value;
    7979    var url = '../index.jsp?ID='+App.getSessionId();
    80     url += '&cmd=ViewItem&client_id='+clientId;
     80    url += '&cmd=ViewItem&item_id='+clientId;
    8181    url += '&tab=properties';
    8282    location.replace(url);
  • trunk/www/admin/clients/help/list_help.jsp

    r6289 r6306  
    373373    </tbl:table>
    374374    <base:buttongroup>
    375       <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
    376       <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
    377       <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
     375      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
     376      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
     377      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
    378378    </base:buttongroup>
    379379    </t:tab>
  • trunk/www/biomaterials/bioplateeventtypes/bioplateeventtypes.js

    r6261 r6306  
    3535    if (pageId == 'edit-page')
    3636    {
    37       // TODO
     37      // Save + Close buttons
     38      Buttons.addClickHandler('btnSave', bioplateeventtypes.save);
     39      Buttons.addClickHandler('close', App.closeWindow);
     40
     41      // Tab validation
     42      TabControl.addTabValidator('settings.info', bioplateeventtypes.validateBioPlateEventType);
    3843    }
    3944    else if (pageId == 'view-page')
     
    6772  }
    6873 
     74  bioplateeventtypes.validateBioPlateEventType = function()
     75  {
     76    var frm = document.forms['bioPlateEventType'];
     77    if (Main.trimString(frm.name.value) == '')
     78    {
     79      Forms.showNotification(frm.name, 'You must enter a name');
     80      return false;
     81    }
     82    if (frm.system_id && Main.trimString(frm.system_id.value) == '')
     83    {
     84      Forms.showNotification(frm.system_id, 'You must enter a system id');
     85      return false;
     86    }
     87    return true;
     88  }
     89
     90  // Submit the form
     91  bioplateeventtypes.save = function()
     92  {
     93    var frm = document.forms['bioPlateEventType'];
     94    if (TabControl.validateActiveTab('settings'))
     95    {
     96      frm.submit();
     97    }
     98  }
     99
     100 
    69101  return bioplateeventtypes;
    70102}();
  • trunk/www/biomaterials/bioplateeventtypes/edit_eventtype.jsp

    r6217 r6306  
    8383  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    8484  %>
    85   <base:page type="popup" title="<%=title%>">
    86   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     85  <base:page type="popup" title="<%=title%>" id="edit-page">
     86  <base:head scripts="tabcontrol-2.js,~bioplateeventtypes.js" styles="tabcontrol.css">
    8787    <ext:scripts context="<%=jspContext%>" />
    8888    <ext:stylesheets context="<%=jspContext%>" />
    89     <script>
    90     // Validate the "BioPlateEventType" tab
    91     function validateBioPlateEventType()
    92     {
    93       var frm = document.forms['bioPlateEventType'];
    94       if (Main.trimString(frm.name.value) == '')
    95       {
    96         Forms.showNotification(frm.name, 'You must enter a name');
    97         return false;
    98       }
    99       if (frm.system_id && Main.trimString(frm.system_id.value) == '')
    100       {
    101         Forms.showNotification(frm.system_id, 'You must enter a system id');
    102         return false;
    103       }
    104       return true;
    105     }
    106 
    107     // Submit the form
    108     function saveSettings()
    109     {
    110       var frm = document.forms['bioPlateEventType'];
    111       if (TabControl.validateActiveTab('settings'))
    112       {
    113         frm.submit();
    114       }
    115     }
    116    
    117     function init()
    118     {
    119       var frm = document.forms['bioPlateEventType'];
    120       <%
    121       if (eventType == null)
    122       {
    123         %>
    124         frm.name.focus();
    125         frm.name.select();
    126         <%
    127       }
    128       %>
    129     }
    130     </script>
    13189  </base:head>
    132   <base:body onload="init()">
     90  <base:body>
    13391    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    13492    <form action="index.jsp?ID=<%=ID%>" method="post" name="bioPlateEventType">
     
    13997      position="bottom"  remember="<%=eventType != null%>"
    14098      extensions="<%=invoker%>">
    141     <t:tab id="info" title="Bioplate event type" validate="validateBioPlateEventType()" helpid="bioplateeventtype.edit">
     99    <t:tab id="info" title="Bioplate event type" helpid="bioplateeventtype.edit">
    142100      <table class="fullform input100">
    143101      <tr>
    144102        <th>Name</th>
    145         <td><input class="text required" type="text" name="name"
     103        <td><input class="text required auto-init" data-auto-init="<%=eventType == null ? "focus-select" : "focus" %>"
     104          type="text" name="name"
    146105          value="<%=HTML.encodeTags(eventType == null ? Values.getString(cc.getPropertyValue("name"), "New bioplate event type") : eventType.getName())%>"
    147106           maxlength="<%=BioPlateEventType.MAX_NAME_LENGTH%>"></td>
     
    187146
    188147    <base:buttongroup subclass="dialogbuttons">
    189       <base:button onclick="saveSettings()" title="Save" />
    190       <base:button onclick="window.close()" title="Cancel" />
     148      <base:button id="btnSave" title="Save" />
     149      <base:button id="close" title="Cancel" />
    191150    </base:buttongroup>
    192151  </base:body>
  • trunk/www/biomaterials/bioplates/bioplates.js

    r6261 r6306  
    3636    if (pageId == 'edit-page')
    3737    {
    38       // TODO
     38      Buttons.addClickHandler('btnSave', bioplates.save);
     39      Buttons.addClickHandler('close', App.closeWindow);
     40     
     41      // Tab validation
     42      TabControl.addTabActivateListener('settings.annotations', Annotations.autoLoadEditFrame);
     43      TabControl.addTabValidator('settings.info', bioplates.validateBioPlate);
     44
     45      // Plate geometry
     46      if (Doc.element('plategeometry_id'))
     47      {
     48        Buttons.addClickHandler('plategeometry_id.select', bioplates.selectPlateGeometry);
     49        Events.addEventHandler('plategeometry_id', 'base-selected', bioplates.setPlateGeometryCallback);
     50
     51        // Bioplate type
     52        Buttons.addClickHandler('bioplatetype_id.select', bioplates.selectBioPlateType);
     53        Events.addEventHandler('bioplatetype_id', 'base-selected', bioplates.setBioPlateTypeCallback);
     54        Events.addEventHandler('bioplatetype_id', 'change', bioplates.bioPlateTypeOnChange);
     55        bioplates.bioPlateTypeOnChange();
     56      }
     57
     58      // Storage location
     59      Buttons.addClickHandler('storage_id.select', bioplates.selectStorageLocation);
     60      Events.addEventHandler('storage_id', 'base-selected', bioplates.setStorageLocationCallback);
    3961    }
    4062    else if (pageId == 'view-page')
     
    219241  }
    220242
     243 
     244  bioplates.validateBioPlate = function()
     245  {
     246    var frm = document.forms['bioplate'];
     247    if (Main.trimString(frm.name.value) == '')
     248    {
     249      Forms.showNotification(frm.name, 'You must enter a name');
     250      return false;
     251    }
     252    if (frm.bioplatetype_id && frm.bioplatetype_id.length == 0)
     253    {
     254      Forms.showNotification('bioplatetype_id.select', 'You must select a bioplate type');
     255      return false;
     256    }
     257    if (frm.plategeometry_id && frm.plategeometry_id.length == 0)
     258    {
     259      Forms.showNotification('plategeometry_id.select', 'You must select a plate geometry');
     260      return false;
     261    }
     262    return true;
     263  }
     264
     265  // Submit the form
     266  bioplates.save = function()
     267  {
     268    var frm = document.forms['bioplate'];
     269    if (TabControl.validateActiveTab('settings'))
     270    {
     271      Annotations.saveModifiedAnnotationsToForm(frm);
     272      frm.submit();
     273    }
     274  }
     275
     276  bioplates.selectPlateGeometry = function()
     277  {
     278    var frm = document.forms['bioplate'];
     279    var url = '';
     280    if (frm.plategeometry_id.length > 0)
     281    {
     282      url += '&item_id='+frm.plategeometry_id[0].value;
     283    }
     284    Dialogs.selectItem('PLATEGEOMETRY', 'plategeometry_id', 0, url);
     285  }
     286 
     287  bioplates.setPlateGeometryCallback = function(event)
     288  {
     289    var frm = document.forms['bioplate'];
     290    var list = frm.plategeometry_id;
     291    if (list.length < 1 || list[0].disabled)
     292    {
     293      Forms.addListOption(list, 0, new Option());
     294    }
     295    list[0].value = event.detail.id;
     296    list[0].text = event.detail.name;
     297    list.selectedIndex = 0;
     298  }
     299
     300  bioplates.selectBioPlateType = function()
     301  {
     302    var frm = document.forms['bioplate'];
     303    var url = '';
     304    if (frm.bioplatetype_id.length > 0)
     305    {
     306      url += '&item_id='+frm.bioplatetype_id[0].value;
     307    }
     308    Dialogs.selectItem('BIOPLATETYPE', 'bioplatetype_id', 0, url);   
     309  }
     310 
     311  bioplates.setBioPlateTypeCallback = function(event)
     312  {
     313   
     314    var frm = document.forms['bioplate'];
     315    var list = frm.bioplatetype_id;
     316    if (list.length < 1 || list[0].disabled)
     317    {
     318      Forms.addListOption(list, 0, new Option());
     319    }
     320    list[0].value = event.detail.id;
     321    list[0].text = event.detail.name;
     322    list.selectedIndex = 0;
     323    bioplates.bioPlateTypeOnChange();
     324  }
     325
     326  bioplates.bioPlateTypeOnChange = function()
     327  {
     328    var frm = document.forms['bioplate'];
     329    if (frm.bioplatetype_id.selectedIndex < 0) return;
     330   
     331    var bioPlateTypeInfo = bioplates.getBioPlateTypeInfo(frm.bioplatetype_id.value);
     332    var freezerTypeId = Data.get('storage_id', 'freezer-id');
     333    var storageTypeId = bioPlateTypeInfo.storageType ?  bioPlateTypeInfo.storageType.id : freezerTypeId;
     334    Data.set('storage_id', 'storage-type-id', storageTypeId);
     335    var recentInfo = ItemSubtype.getProjectDefaultAndRecentItems('BIOPLATE', storageTypeId);
     336    ItemSubtype.updateSelectionList(frm.storage_id, recentInfo['recent'], recentInfo['default']);
     337  }
     338 
     339 
     340  bioplates.getBioPlateTypeInfo = function(bioPlateTypeId)
     341  {
     342    var request = Ajax.getXmlHttpRequest();
     343    var url = '../bioplatetypes/ajax.jsp?ID=' + getSessionId();
     344    url += '&cmd=GetPlateTypeInfo';
     345    url += '&item_id='+bioPlateTypeId;
     346    request.open("GET", url, false);
     347    request.send(null);
     348    return JSON.parse(request.responseText);
     349  }
     350 
     351  bioplates.selectStorageLocation = function()
     352  {
     353    var frm = document.forms['bioplate'];
     354    var url = '';
     355    if (frm.storage_id.length > 1)
     356    {
     357      var id = Math.abs(parseInt(frm.storage_id[1].value));       
     358      url += '&item_id='+id;
     359    }
     360    var storageTypeId = Data.get('storage_id', 'storage-type-id', Data.get('storage_id', 'freezer-id'));
     361    url += '&resetTemporary=1&tmpfilter:INT:itemSubtype='+storageTypeId;
     362    Dialogs.selectItem('HARDWARE', 'storage_id', 0, url);
     363  }
     364 
     365  bioplates.setStorageLocationCallback = function(event)
     366  {
     367    var frm = document.forms['bioplate'];
     368    if (frm.storage_id.length < 1)
     369    {
     370      frm.storage_id[frm.storage_id.length] = new Option();
     371    }
     372    frm.storage_id[0].value = event.detail.id;
     373    frm.storage_id[0].text = event.detail.name;
     374    frm.storage_id.selectedIndex = 0;
     375  }
     376
    221377  return bioplates;
    222378}();
  • trunk/www/biomaterials/bioplates/edit_bioplate.jsp

    r6297 r6306  
    125125  {
    126126    bioplate = BioPlate.getById(dc, itemId);
     127    bioplate.checkPermission(Permission.WRITE);
    127128    cc.setObject("item", bioplate);
    128129    title = "Edit bioplate -- " + HTML.encodeTags(bioplate.getName());
     
    153154      readCurrentFreezer = false;
    154155    }
    155   }
    156   if (bioplate != null && !bioplate.hasPermission(Permission.WRITE))
    157   {
    158     throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
    159156  }
    160157 
     
    179176  String htmlDateFormat = HTML.encodeTags(dateFormat);
    180177 
    181  
    182178  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), bioplate);
    183179  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    184180  %>
    185   <base:page type="popup" title="<%=title%>">
    186   <base:head scripts="tabcontrol.js,subtypes.js" styles="tabcontrol.css">
     181  <base:page type="popup" title="<%=title%>" id="edit-page">
     182  <base:head scripts="tabcontrol-2.js,subtypes.js,~bioplates.js" styles="tabcontrol.css">
    187183    <ext:scripts context="<%=jspContext%>" />
    188184    <ext:stylesheets context="<%=jspContext%>" />
    189     <script>
    190     // Validate the "BioPlate" tab
    191     function validateBioPlate()
    192     {
    193       var frm = document.forms['bioplate'];
    194       if (Main.trimString(frm.name.value) == '')
    195       {
    196         Forms.showNotification(frm.name, 'You must enter a name');
    197         return false;
    198       }
    199       if (frm.bioplatetype_id && frm.bioplatetype_id.length == 0)
    200       {
    201         Forms.showNotification('bioplatetype_id.select', 'You must select a bio plate type');
    202         return false;
    203       }
    204       if (frm.plategeometry_id && frm.plategeometry_id.length == 0)
    205       {
    206         Forms.showNotification('plategeometry_id.select', 'You must select a plate geometry');
    207         return false;
    208       }
    209       return true;
    210     }
    211 
    212     // Submit the form
    213     function saveSettings()
    214     {
    215       var frm = document.forms['bioplate'];
    216       if (TabControl.validateActiveTab('settings'))
    217       {
    218         Annotations.saveModifiedAnnotationsToForm(frm);
    219         frm.submit();
    220       }
    221     }
    222    
    223     function loadAnnotationsFrame()
    224     {
    225       Annotations.autoLoadEditFrame();
    226     }
    227 
    228     function selectPlateGeometryOnClick()
    229     {
    230       var frm = document.forms['bioplate'];
    231       var url = '../../lims/geometries/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setPlateGeometryCallback';
    232       if (frm.plategeometry_id.length > 0) url += '&item_id='+frm.plategeometry_id[0].value;
    233       Main.openPopup(url, 'SelectPlateGeometry', 1050, 700);
    234     }
    235     function setPlateGeometryCallback(plateGeometryId, name)
    236     {
    237       var frm = document.forms['bioplate'];
    238       var list = frm.plategeometry_id;
    239       if (list.length < 1 || list[0].disabled) // >
    240       {
    241         Forms.addListOption(list, 0, new Option());
    242       }
    243       list[0].value = plateGeometryId;
    244       list[0].text = name;
    245       list.selectedIndex = 0;
    246     }
    247     function selectBioPlateTypeOnClick()
    248     {
    249       var frm = document.forms['bioplate'];
    250       var url = '../bioplatetypes/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setBioPlateTypeCallback';
    251       if (frm.bioplatetype_id.length > 0) url += '&item_id='+frm.bioplatetype_id[0].value;
    252       Main.openPopup(url, 'SelectBioPlateType', 1050, 700);
    253     }
    254     function setBioPlateTypeCallback(bioPlateTypeId, name)
    255     {
    256       var frm = document.forms['bioplate'];
    257       var list = frm.bioplatetype_id;
    258       if (list.length < 1 || list[0].disabled) // >
    259       {
    260         Forms.addListOption(list, 0, new Option());
    261       }
    262       list[0].value = bioPlateTypeId;
    263       list[0].text = name;
    264       list.selectedIndex = 0;
    265       bioPlateTypeOnChange();
    266     }
    267     function bioPlateTypeOnChange()
    268     {
    269       var frm = document.forms['bioplate'];
    270       if (frm.bioplatetype_id.selectedIndex < 0) return;
    271       var bioPlateTypeInfo = getBioPlateTypeInfo(frm.bioplatetype_id[frm.bioplatetype_id.selectedIndex].value);
    272       var subtypeId = bioPlateTypeInfo.storageType ?  bioPlateTypeInfo.storageType.id : <%=SystemItems.getId(Hardware.FREEZER)%>;
    273       var recentInfo = ItemSubtype.getProjectDefaultAndRecentItems('BIOPLATE', subtypeId);
    274       ItemSubtype.updateSelectionList(frm.freezer_id, recentInfo['recent'], recentInfo['default']);
    275     }
    276    
    277     function getBioPlateTypeInfo(bioPlateTypeId)
    278     {
    279       var request = Ajax.getXmlHttpRequest();
    280       var url = '../bioplatetypes/ajax.jsp?ID=' + getSessionId();
    281       url += '&cmd=GetPlateTypeInfo';
    282       url += '&item_id='+bioPlateTypeId;
    283       request.open("GET", url, false);
    284       request.send(null);
    285       return JSON.parse(request.responseText);
    286     }
    287    
    288     function selectFreezerOnClick()
    289     {
    290       var frm = document.forms['bioplate'];
    291       var url = '../../admin/hardware/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setFreezerCallback';
    292       if (frm.freezer_id.length > 1)
    293       {
    294         var id = Math.abs(parseInt(frm.freezer_id[1].value));       
    295         url += '&item_id='+id;
    296       }
    297       url += '&resetTemporary=1&tmpfilter:INT:itemSubtype=<%=SystemItems.getId(Hardware.FREEZER)%>';
    298       Main.openPopup(url, 'SelectFreezer', 1050, 700);
    299     }
    300     function setFreezerCallback(freezerId, name)
    301     {
    302       var frm = document.forms['bioplate'];
    303       if (frm.freezer_id.length < 1) // >
    304       {
    305         frm.freezer_id[frm.freezer_id.length] = new Option();
    306       }
    307       frm.freezer_id[0].value = freezerId;
    308       frm.freezer_id[0].text = name;
    309       frm.freezer_id.selectedIndex = 0;
    310     }
    311    
    312     function init()
    313     {
    314       var frm = document.forms['bioplate'];
    315       <%
    316       if (bioplate == null)
    317       {
    318         %>
    319         frm.name.focus();
    320         frm.name.select();
    321         bioPlateTypeOnChange();
    322         <%
    323       }
    324       %>
    325     }
    326     </script>
    327185  </base:head>
    328   <base:body onload="init()">
     186  <base:body>
    329187    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    330188
     
    336194      position="bottom"  remember="<%=bioplate != null%>"
    337195      extensions="<%=invoker%>">
    338     <t:tab id="info" title="Plate" validate="validateBioPlate()" helpid="bioplate.edit">
     196    <t:tab id="info" title="Plate" helpid="bioplate.edit">
    339197      <table class="fullform input100">
    340198      <tr>
    341199        <th>Name</th>
    342         <td><input class="text required" type="text" name="name"
     200        <td><input class="text required auto-init" data-auto-init="<%=bioplate == null ? "focus-select" : "focus" %>"
     201          type="text" name="name"
    343202          value="<%=HTML.encodeTags(bioplate == null ? Values.getString(cc.getPropertyValue("name"), "New bioplate") : bioplate.getName())%>"
    344203          maxlength="<%=BioPlate.MAX_NAME_LENGTH%>"></td>
     
    396255              recent="<%=recentPlateGeometry%>"
    397256              newitem="true"
    398               onselect="selectPlateGeometryOnClick()"
    399257            />
    400258            <%
     
    408266        <td>
    409267          <base:select
    410             id="freezer_id"
     268            id="storage_id"
    411269            clazz="selectionlist"
    412270            required="false"
     271            data-freezer-id="<%=SystemItems.getId(Hardware.FREEZER)%>"
     272            data-storage-type-id="<%=currentStorageType == null ? "" : currentStorageType.getId() %>"
    413273            current="<%=currentFreezer%>"
    414274            denied="<%=!readCurrentFreezer%>"
     
    416276            defaultitems="<%=defaultFreezers %>"
    417277            newitem="<%=bioplate == null%>"
    418             onselect="selectFreezerOnClick()"
    419             onchange="freezerOnChange()"
    420278          />
    421279        </td>
     
    494352    </t:tab>
    495353   
    496     <t:tab id="annotations" title="Annotations" helpid="annotations.edit" activate="loadAnnotationsFrame()">
     354    <t:tab id="annotations" title="Annotations" helpid="annotations.edit">
    497355      <jsp:include page="../../common/annotations/annotate_frameset.jsp">
    498356        <jsp:param name="item_type" value="<%=itemType.name()%>" />
    499357        <jsp:param name="item_id" value="<%=itemId%>" />
    500358        <jsp:param name="ID" value="<%=ID%>" />
    501       </jsp:include>
     359      </jsp:include> 
     360    </t:tab>
    502361   
    503     </t:tab>   
    504362    </t:tabcontrol>
    505363    </form>
     
    513371
    514372    <base:buttongroup subclass="dialogbuttons">
    515       <base:button onclick="saveSettings()" title="Save" />
    516       <base:button onclick="window.close()" title="Cancel" />
     373      <base:button id="btnSave" title="Save" />
     374      <base:button id="close" title="Cancel" />
    517375    </base:buttongroup>
    518376  </base:body>
  • trunk/www/biomaterials/bioplates/events/edit_event.jsp

    r6217 r6306  
    101101  }
    102102
    103  
    104  
    105103  final Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
    106104  final String dateFormat = FormatterSettings.getDateFormat(sc);
     
    111109  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    112110  %>
    113   <base:page type="popup" title="<%=title%>">
    114   <base:head scripts="tabcontrol.js,annotations.js" styles="tabcontrol.css">
     111  <base:page type="popup" title="<%=title%>" id="edit-page">
     112  <base:head scripts="tabcontrol-2.js,~events.js" styles="tabcontrol.css">
    115113    <ext:scripts context="<%=jspContext%>" />
    116114    <ext:stylesheets context="<%=jspContext%>" />
    117     <script>
    118     // Validate the "BioPlateEvent" tab
    119     function validateBioPlateEvent()
    120     {
    121       var frm = document.forms['event'];
    122       if (Main.trimString(frm.name.value) == '')
    123       {
    124         Forms.showNotification(frm.name, 'You must enter a name');
    125         return false;
    126       }
    127       return true;
    128     }
    129 
    130     // Submit the form
    131     function saveSettings()
    132     {
    133       var frm = document.forms['event'];
    134       if (TabControl.validateActiveTab('settings'))
    135       {
    136         frm.submit();
    137       }
    138     }
    139    
    140     function selectHardwareOnClick()
    141     {
    142       var frm = document.forms['event'];
    143       var url = '../../../admin/hardware/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setHardwareCallback';
    144       if (frm.hardware_id.length > 1)
    145       {
    146         var id = Math.abs(parseInt(frm.hardware_id[1].value));       
    147         url += '&item_id='+id;
    148       }
    149       url += '&resetTemporary=1';
    150       Main.openPopup(url, 'SelectHardware', 1050, 700);
    151     }
    152     function setHardwareCallback(id, name)
    153     {
    154       var frm = document.forms['event'];
    155       var list = frm.hardware_id;
    156       if (list.length < 2 || list[1].value == '0') // >
    157       {
    158         Forms.addListOption(list, 1, new Option());
    159       }
    160       list[1].value = id;
    161       list[1].text = name;
    162       list.selectedIndex = 1;
    163     }
    164  
    165     function selectProtocolOnClick()
    166     {
    167       var frm = document.forms['event'];
    168       var url = '../../../admin/protocols/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setProtocolCallback';
    169       if (frm.protocol_id.length > 1)
    170       {
    171         var id = Math.abs(parseInt(frm.protocol_id[1].value));       
    172         url += '&item_id='+id;
    173       }
    174       url += '&resetTemporary=1';
    175       Main.openPopup(url, 'SelectProtocol', 1050, 700);
    176     }
    177     function setProtocolCallback(id, name)
    178     {
    179       var frm = document.forms['event'];
    180       var list = frm.protocol_id;
    181       if (list.length < 2 || list[1].value == '0') // >
    182       {
    183         Forms.addListOption(list, 1, new Option());
    184       }
    185       list[1].value = id;
    186       list[1].text = name;
    187       list.selectedIndex = 1;
    188     }
    189 
    190    
    191     function init()
    192     {
    193     }
    194     </script>
    195115  </base:head>
    196   <base:body onload="init()">
     116  <base:body>
    197117    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    198118    <form action="index.jsp?ID=<%=ID%>" method="post" name="event">
     
    203123      position="bottom"  remember="<%=event != null%>"
    204124      extensions="<%=invoker%>">
    205     <t:tab id="info" title="Bioplate event" validate="validateBioPlateEvent()" helpid="bioplateevent.edit">
     125    <t:tab id="info" title="Bioplate event" helpid="bioplateevent.edit">
    206126      <table class="fullform input100">
    207127      <tr>
    208128        <th>Name</th>
    209         <td><input class="text required" type="text" name="name"
     129        <td><input class="text required auto-init" data-auto-init="<%=event == null ? "focus-select" : "focus" %>"
     130          type="text" name="name"
    210131          value="<%=HTML.encodeTags(event.getName())%>"
    211132          maxlength="<%=BioPlateEvent.MAX_NAME_LENGTH%>"></td>
     
    240161            denied="<%=!readCurrentProtocol%>"
    241162            recent="<%=recentProtocols%>"
    242             onselect="selectProtocolOnClick()"
    243163          />
    244164        </td>
     
    255175            denied="<%=!readCurrentHardware%>"
    256176            recent="<%=recentHardware%>"
    257             onselect="selectHardwareOnClick()"
    258177          />
    259178        </td>
     
    280199
    281200    <base:buttongroup subclass="dialogbuttons">
    282       <base:button onclick="saveSettings()" title="Save" />
    283       <base:button onclick="window.close()" title="Cancel" />
     201      <base:button id="btnSave" title="Save" />
     202      <base:button id="close" title="Cancel" />
    284203    </base:buttongroup>
    285204  </base:body>
  • trunk/www/biomaterials/bioplates/events/events.js

    r6261 r6306  
    3535    if (pageId == 'edit-page')
    3636    {
    37       // TODO
     37      Buttons.addClickHandler('btnSave', plateevents.save);
     38      Buttons.addClickHandler('close', App.closeWindow);
     39     
     40      // Tab validation
     41      TabControl.addTabValidator('settings.info', plateevents.validateBioPlateEvent);
     42
     43      // Hardware
     44      Buttons.addClickHandler('hardware_id.select', plateevents.selectHardware);
     45      Events.addEventHandler('hardware_id', 'base-selected', plateevents.setHardwareCallback);
     46
     47      // Protocol
     48      Buttons.addClickHandler('protocol_id.select', plateevents.selectProtocol);
     49      Events.addEventHandler('protocol_id', 'base-selected', plateevents.setProtocolCallback);
    3850    }
    3951    else if (pageId == 'view-page')
     
    95107  }
    96108 
     109
     110  plateevents.validateBioPlateEvent = function()
     111  {
     112    var frm = document.forms['event'];
     113    if (Main.trimString(frm.name.value) == '')
     114    {
     115      Forms.showNotification(frm.name, 'You must enter a name');
     116      return false;
     117    }
     118    return true;
     119  }
     120
     121  // Submit the form
     122  plateevents.save = function()
     123  {
     124    var frm = document.forms['event'];
     125    if (TabControl.validateActiveTab('settings'))
     126    {
     127      frm.submit();
     128    }
     129  }
     130
     131  plateevents.selectHardware = function()
     132  {
     133    var frm = document.forms['event'];
     134    url = '&resetTemporary=1';
     135    if (frm.hardware_id.length > 1)
     136    {
     137      var id = Math.abs(parseInt(frm.hardware_id[1].value));       
     138      url += '&item_id='+id;
     139    }
     140    Dialogs.selectItem('HARDWARE', 'hardware_id', 0, url);
     141  }
     142 
     143  plateevents.setHardwareCallback = function(event)
     144  {
     145    var frm = document.forms['event'];
     146    var list = frm.hardware_id;
     147    if (list.length < 2 || list[1].value == '0')
     148    {
     149      Forms.addListOption(list, 1, new Option());
     150    }
     151    list[1].value = event.detail.id;
     152    list[1].text = event.detail.name;
     153    list.selectedIndex = 1;
     154  }
     155 
     156  plateevents.selectProtocol = function()
     157  {
     158    var frm = document.forms['event'];
     159    url = '&resetTemporary=1';
     160    if (frm.protocol_id.length > 1)
     161    {
     162      var id = Math.abs(parseInt(frm.protocol_id[1].value));       
     163      url += '&item_id='+id;
     164    }
     165    Dialogs.selectItem('PROTOCOL', 'protocol_id', 0, url);
     166  }
     167 
     168  plateevents.setProtocolCallback = function(event)
     169  {
     170    var frm = document.forms['event'];
     171    var list = frm.protocol_id;
     172    if (list.length < 2 || list[1].value == '0')
     173    {
     174      Forms.addListOption(list, 1, new Option());
     175    }
     176    list[1].value = event.detail.id;
     177    list[1].text = event.detail.name;
     178    list.selectedIndex = 1;
     179  }
     180
     181
    97182  return plateevents;
    98183}();
  • trunk/www/biomaterials/bioplates/events/view_event.jsp

    r6261 r6306  
    128128    <ext:scripts context="<%=jspContext%>" />
    129129    <ext:stylesheets context="<%=jspContext%>" />
    130     <script>
    131     function editItem()
    132     {
    133       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
    134     }
    135     function shareItem()
    136     {
    137       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareEvent', 600, 400);
    138     }
    139     function deleteItem()
    140     {
    141       location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>&bioplate_id=<%=bioPlateId%>');
    142     }
    143     function restoreItem()
    144     {
    145       location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>&bioplate_id=<%=bioPlateId%>');
    146     }
    147     function deleteItemPermanently()
    148     {
    149       Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
    150     }
    151     function itemDeleted()
    152     {
    153       Main.listItems('<%=ID%>', '<%=itemType.name()%>', '&bioplate_id=<%=bioPlateId%>');
    154     }
    155     function showUsingItems()
    156     {
    157       Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
    158     }
    159     function setOwner()
    160     {
    161       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
    162     }
    163     function runPlugin(cmd)
    164     {
    165       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
    166     }
    167     </script>
    168130  </base:head>
    169131  <base:body>
     
    214176            id="btnUsingItems"
    215177            image="used.png"
    216             onclick="showUsingItems()"
    217178            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
    218179            visible="<%=isRemoved && isUsed%>" />
  • trunk/www/biomaterials/bioplates/index.jsp

    r6192 r6306  
    161161      bioPlate.setBarcode(Values.getStringOrNull(request.getParameter("barcode")));
    162162      bioPlate.setDestroyed(Values.getBoolean(request.getParameter("destroyed")));
    163       int freezerId = Values.getInt(request.getParameter("freezer_id"));
    164       if (freezerId >= 0)
     163      int storageId = Values.getInt(request.getParameter("storage_id"));
     164      if (storageId >= 0)
    165165      {
    166         Hardware fz = freezerId == 0 ? null : Hardware.getById(dc, freezerId);
     166        Hardware fz = storageId == 0 ? null : Hardware.getById(dc, storageId);
    167167        bioPlate.setFreezer(fz);
    168168        if (fz != null) cc.setRecent(fz, fz.getItemSubtype(), maxRecent);
  • trunk/www/biomaterials/bioplates/wells/biowells.js

    r6260 r6306  
    3535    if (pageId == 'edit-page')
    3636    {
    37       // TODO
    38     }
    39     else if (pageId == 'view-page')
    40     {
    41       // TODO
     37      Buttons.addClickHandler('btnSave', biowells.save);
     38      Buttons.addClickHandler('close', App.closeWindow);
     39
     40      // Biomaterial type
     41      Events.addEventHandler('biomaterial_type', 'change', biowells.bioMaterialTypeOnChange);
     42     
     43      // Biomaterial
     44      Buttons.addClickHandler('biomaterial_id.select', biowells.selectBioMaterial);
     45      Events.addEventHandler('biomaterial_id', 'base-selected', biowells.setBioMaterialCallback);
    4246    }
    4347    else if (pageId == 'list-page')
     
    8084  }
    8185 
     86  biowells.validateBioWell = function()
     87  {
     88    return true;
     89  }
     90 
     91  biowells.save = function()
     92  {
     93    var frm = document.forms['biowell'];
     94    if (biowells.validateBioWell())
     95    {
     96      frm.biomaterial_type.disabled = false;
     97      frm.submit();
     98    }
     99  }
     100 
     101  biowells.bioMaterialTypeOnChange = function()
     102  {
     103    var frm = document.forms['biowell'];
     104    var list = frm.biomaterial_id;
     105    list.selectedIndex = 0;
     106    list.remove(1);
     107  }
     108
     109  biowells.selectBioMaterial = function()
     110  {
     111    var frm = document.forms['biowell'];   
     112    var type = frm.biomaterial_type.value;
     113    if (!type)
     114    {
     115      Forms.showNotification(frm.biomaterial_type, 'You must first select what type of biomaterial');
     116      return;
     117    }     
     118    var url = '';
     119    if (frm.biomaterial_id.length > 1)
     120    {
     121      var id = Math.abs(parseInt(frm.biomaterial_id[1].value));       
     122      url += '&item_id='+id;
     123    }
     124    url += '&resetTemporary=1&tmpfilter:STRING:bioWell='+escape('=');
     125    var bioMaterialSubtype = Data.get('biomaterial_id', 'biomaterial-subtype');
     126    if (bioMaterialSubtype)
     127    {
     128      url += '&tmpfilter:INT:itemSubtype='+bioMaterialSubtype;
     129    }
     130    Dialogs.selectItem(type, 'biomaterial_id', 0, url);
     131  }
     132 
     133  biowells.setBioMaterialCallback = function(event)
     134  {
     135    var frm = document.forms['biowell'];
     136    var list = frm.biomaterial_id;
     137    if (list.length < 2 || list[1].value == '0')
     138    {
     139      Forms.addListOption(list, 1, new Option());
     140    }
     141    list[1].value = event.detail.id;
     142    list[1].text = event.detail.name;
     143    list.selectedIndex = 1;
     144  }
     145
     146 
    82147  return biowells;
    83148}();
  • trunk/www/biomaterials/bioplates/wells/edit_biowell.jsp

    r6217 r6306  
    7373  title = "Edit biowell -- " + rowFormatter.format(bioWell.getRow()) + columnFormatter.format(bioWell.getColumn()) + " on " + HTML.encodeTags(bioPlate.getName());
    7474
    75  
    76  
    77  
    7875  boolean readCurrentBioMaterial = true;
    7976  MeasuredBioMaterial currentBioMaterial = null;
     
    9289  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    9390  %>
    94   <base:page type="popup" title="<%=title%>">
    95   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     91  <base:page type="popup" title="<%=title%>" id="edit-page">
     92  <base:head scripts="~biowells.js" styles="tabcontrol.css">
    9693    <ext:scripts context="<%=jspContext%>" />
    9794    <ext:stylesheets context="<%=jspContext%>" />
    98     <script>
    99     // Validate the "BioWell" tab
    100     function validateBioWell()
    101     {
    102       return true;
    103     }
    104 
    105     // Submit the form
    106     function saveSettings()
    107     {
    108       var frm = document.forms['biowell'];
    109       if (validateBioWell())
    110       {
    111         frm.biomaterial_type.disabled = false;
    112         frm.submit();
    113       }
    114     }
    115 
    116     // Biomaterial selection
    117     function selectBioMaterialOnClick()
    118     {
    119       var frm = document.forms['biowell'];
    120       var typelist = frm.biomaterial_type;     
    121       if (typelist.selectedIndex == 0)
    122       {
    123         Forms.showNotification(frm.biomaterial_type, 'You must first select what type of biomaterial');
    124         return;
    125       }     
    126       var type = typelist[typelist.selectedIndex].value;
    127       var folder = type.toLowerCase();   
    128       var controller = Main.getController(type);
    129       var url = getRoot() + controller.url + '?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setBioMaterialCallback';
    130       if (frm.biomaterial_id.length > 1)
    131       {
    132         var id = Math.abs(parseInt(frm.biomaterial_id[1].value));       
    133         url += '&item_id='+id;
    134       }
    135       url += '&resetTemporary=1&tmpfilter:STRING:bioWell='+escape('=');
    136       <%
    137       if (bioMaterialSubType != null)
    138       {
    139         %>
    140         url += '&tmpfilter:INT:itemSubtype=<%=bioMaterialSubType.getId()%>';
    141         <%
    142       }
    143       %>
    144       Main.openPopup(url, 'Select'+type, 1050, 700);
    145     }
    146     function setBioMaterialCallback(id, name)
    147     {
    148       var frm = document.forms['biowell'];
    149       var list = frm.biomaterial_id;
    150       if (list.length < 2 || list[1].value == '0') // >
    151       {
    152         Forms.addListOption(list, 1, new Option());
    153       }
    154       list[1].value = id;
    155       list[1].text = name;
    156       list.selectedIndex = 1;
    157     }
    158     function bioMaterialTypeOnChange()
    159     {
    160       var frm = document.forms['biowell'];
    161       var list = frm.biomaterial_id;
    162       list.selectedIndex = 0;
    163       list.remove(1);
    164     }
    165     </script>
    16695  </base:head>
    16796  <base:body>
     
    184113        <th>Biomaterial type</th>
    185114        <td>         
    186           <select name="biomaterial_type" onchange="bioMaterialTypeOnChange()" <%=bioMaterialType != null ? "disabled": ""%>>
     115          <select name="biomaterial_type" <%=bioMaterialType != null ? "disabled": ""%>>
    187116            <%
    188117            if (!readCurrentBioMaterial)
     
    219148            recent="<%=null%>"
    220149            newitem="<%=false%>"
    221             onselect="<%=canAddBioMaterial ? "selectBioMaterialOnClick()" : null%>"
     150            data-biomaterial-subtype="<%=bioMaterialSubType == null ? "" : bioMaterialSubType.getId() %>"
    222151          />
    223152        </td>
     
    248177   
    249178    <base:buttongroup subclass="dialogbuttons">
    250       <base:button onclick="saveSettings()" title="Save" />
    251       <base:button onclick="window.close()" title="Cancel" />
     179      <base:button id="btnSave" title="Save" />
     180      <base:button id="close" title="Cancel" />
    252181    </base:buttongroup>
    253182  </base:body>
  • trunk/www/biomaterials/bioplatetypes/bioplatetypes.js

    r6261 r6306  
    2626{
    2727  var bioplatetypes = {};
     28  var subtypes;
    2829 
    2930  /**
     
    3536    if (pageId == 'edit-page')
    3637    {
    37       // TODO
     38      // Save + Close buttons
     39      Buttons.addClickHandler('btnSave', bioplatetypes.save);
     40      Buttons.addClickHandler('close', App.closeWindow);
     41
     42      // Tab validation
     43      TabControl.addTabValidator('settings.info', bioplatetypes.validateBioPlateType);
     44     
     45      // Biomaterial type
     46      subtypes = Data.json('page-data', 'subtypes');
     47      Events.addEventHandler('bioMaterialType', 'change', bioplatetypes.bioMaterialTypeOnChange);
     48      bioplatetypes.bioMaterialTypeOnChange();
    3849    }
    3950    else if (pageId == 'view-page')
     
    6778  }
    6879 
     80  bioplatetypes.validateBioPlateType = function()
     81  {
     82    var frm = document.forms['bioPlateType'];
     83    if (Main.trimString(frm.name.value) == '')
     84    {
     85      Forms.showNotification(frm.name, 'You must enter a name');
     86      return false;
     87    }
     88    return true;
     89  }
     90
     91  // Submit the form
     92  bioplatetypes.save = function()
     93  {
     94    var frm = document.forms['bioPlateType'];
     95    if (TabControl.validateActiveTab('settings'))
     96    {
     97      frm.submit();
     98    }
     99  }
     100
     101  bioplatetypes.bioMaterialTypeOnChange = function()
     102  {
     103    var frm = document.forms['bioPlateType'];
     104    var bmType = frm.bioMaterialType ? frm.bioMaterialType.value : Data.get('page-data', 'current-bm-type');
     105   
     106    var currentSubtypeId = Data.int('page-data', 'current-subtype');
     107    frm.subtype_id.length = 0;
     108    frm.subtype_id[0] = new Option('-any-', 0);
     109   
     110    for (var i = 0; i < subtypes.length; i++)
     111    {
     112      var subtype = subtypes[i];
     113      if (subtype.bmType == bmType)
     114      {
     115        var opt = new Option(subtype.name, subtype.id, currentSubtypeId == subtype.id);
     116        if (subtype.description) opt.title = subtype.description;
     117        frm.subtype_id[frm.subtype_id.length] = opt;
     118      }
     119    }
     120  }
     121 
     122
    69123  return bioplatetypes;
    70124}();
  • trunk/www/biomaterials/bioplatetypes/edit_platetype.jsp

    r6217 r6306  
    2424  @version 2.0
    2525--%>
     26<%@page import="org.json.simple.JSONObject"%>
     27<%@page import="org.json.simple.JSONArray"%>
    2628<%@ page pageEncoding="UTF-8" session="false"
    2729  import="net.sf.basedb.core.SessionControl"
     
    122124  }
    123125 
     126  JSONArray jsonSubtypes = new JSONArray();
     127  if (subtypesQuery != null)
     128  {
     129    for (ItemSubtype subtype : subtypesQuery.list(dc))
     130    {
     131      JSONObject jsonSubtype = new JSONObject();
     132      jsonSubtype.put("id", subtype.getId());
     133      jsonSubtype.put("name", subtype.getName());
     134      jsonSubtype.put("description", subtype.getDescription());
     135      jsonSubtype.put("bmType", subtype.getMainItemType().name());
     136      jsonSubtypes.add(jsonSubtype);
     137    }
     138  }
    124139 
    125140  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), bioPlateType);
    126141  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    127 
    128142  %>
    129   <base:page type="popup" title="<%=title%>">
    130   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     143  <base:page type="popup" title="<%=title%>" id="edit-page">
     144  <base:head scripts="tabcontrol-2.js,~bioplatetypes.js" styles="tabcontrol.css">
    131145    <ext:scripts context="<%=jspContext%>" />
    132146    <ext:stylesheets context="<%=jspContext%>" />
    133     <script>
    134     // Validate the "BioPlateType" tab
    135     function validateBioPlateType()
    136     {
    137       var frm = document.forms['bioPlateType'];
    138       if (Main.trimString(frm.name.value) == '')
    139       {
    140         Forms.showNotification(frm.name, 'You must enter a name');
    141         return false;
    142       }
    143       return true;
    144     }
    145 
    146     // Submit the form
    147     function saveSettings()
    148     {
    149       var frm = document.forms['bioPlateType'];
    150       if (TabControl.validateActiveTab('settings'))
    151       {
    152         frm.submit();
    153       }
    154     }
    155    
    156     function init()
    157     {
    158       var frm = document.forms['bioPlateType'];
    159       <%
    160       if (bioPlateType == null)
    161       {
    162         %>
    163         frm.name.focus();
    164         frm.name.select();
    165         bioMaterialTypeOnChange();
    166         <%
    167       }
    168       %>
    169     }
    170    
    171     var subtypeOptions = null;
    172     function bioMaterialTypeOnChange()
    173     {
    174       var frm = document.forms['bioPlateType'];
    175       if (subtypeOptions == null)
    176       {
    177         // Cache all options in the list
    178         subtypeOptions = new Array();
    179         for (var i = 1; i < frm.subtype_id.length; i++)
    180         {
    181           var opt = frm.subtype_id[i];
    182           subtypeOptions[subtypeOptions.length] = frm.subtype_id[i];
    183         }
    184       }
    185      
    186       var bmType = frm.bioMaterialType[frm.bioMaterialType.selectedIndex].value;
    187      
    188       frm.subtype_id.selectedIndex = 0;
    189       if (bmType == '')
    190       {
    191         frm.subtype_id.disabled = true;
    192       }
    193       else
    194       {
    195         frm.subtype_id.disabled = false;
    196         // Clean the list...
    197         frm.subtype_id.length = 1;
    198         // ...and re-populate from the cache
    199         for (var i = 0; i < subtypeOptions.length; i++)
    200         {
    201           if (subtypeOptions[i].attributes['data-bmtype'].value == bmType)
    202           {
    203             frm.subtype_id[frm.subtype_id.length] = subtypeOptions[i];
    204           }
    205         }
    206       }
    207     }
    208     </script>
    209147  </base:head>
    210   <base:body onload="init()">
     148  <base:body>
    211149    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    212150    <form action="index.jsp?ID=<%=ID%>" method="post" name="bioPlateType">
    213151    <input type="hidden" name="cmd" value="UpdateItem">
    214152
     153    <div id="page-data" class="datacontainer"
     154      data-subtypes="<%=HTML.encodeTags(jsonSubtypes.toJSONString())%>"
     155      data-current-subtype="<%=currentSubtype == null ? 0 : currentSubtype.getId() %>"
     156      data-current-bm-type="<%=bioPlateType == null ? "" : bioPlateType.getBioMaterialType().name() %>"
     157    ></div>
     158 
    215159    <t:tabcontrol id="settings"
    216160      subclass="content dialogtabcontrol"
    217161      position="bottom"  remember="<%=bioPlateType != null%>"
    218162      extensions="<%=invoker%>">
    219     <t:tab id="info" title="Bioplate type" validate="validateBioPlateType()" helpid="bioplatetype.edit">
     163    <t:tab id="info" title="Bioplate type" helpid="bioplatetype.edit">
    220164      <table class="fullform input100">
    221165      <tr>
    222166        <th>Name</th>
    223         <td><input class="text required" type="text" name="name"
     167        <td><input class="text required auto-init" data-auto-init="<%=bioPlateType == null ? "focus-select" : "focus" %>"
     168          type="text" name="name"
    224169          value="<%=HTML.encodeTags(bioPlateType == null ? Values.getString(cc.getPropertyValue("name"), "New bioplate type") : bioPlateType.getName())%>"
    225170          maxlength="<%=BioPlateType.MAX_NAME_LENGTH%>"></td>
     
    233178          %>
    234179            <td>
    235               <select name="bioMaterialType" class="required unchangeable" onchange="bioMaterialTypeOnChange()">
     180              <select name="bioMaterialType" id="bioMaterialType" class="required unchangeable">
    236181              <option value="">- any -
    237182              <option value="<%=Item.SAMPLE.name()%>">Sample
     
    257202          <th>Biomaterial subtype</th>
    258203          <td>
    259             <select name="subtype_id"
    260               <%=!readCurrentSubtype ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>
    261               onchange="subtypeOnChange()"
    262               >
     204            <select name="subtype_id" id="subtype_id"
     205              <%=!readCurrentSubtype ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>>
    263206            <%
    264207            if (!readCurrentSubtype)
     
    267210              <option value="-1">- denied -
    268211              <%
    269             }
    270             else
    271             {
    272               %>
    273               <option value="0">-any-
    274               <%
    275               int currentSubtypeId = currentSubtype == null ? 0 : currentSubtype.getId();
    276               for (ItemSubtype subtype : subtypesQuery.list(dc))
    277               {
    278                 int id = subtype.getId();
    279                 if (id != currentSubtypeId && subtype.isRemoved()) continue;
    280                 %>
    281                 <option value="<%=id == currentSubtypeId && bioPlateType != null ? -id : id%>"
    282                   <%=id == currentSubtypeId ? "selected" : ""%>
    283                   title="<%=HTML.encodeTags(subtype.getDescription()) %>"
    284                   data-bmtype="<%=subtype.getMainItemType().name() %>"
    285                   ><%=HTML.encodeTags(subtype.getName())%>
    286                 <%
    287               }
    288212            }
    289213            %>
     
    298222        <th>Storage type</th>
    299223        <td>
    300           <select name="storagetype_id"
    301             <%=!readCurrentStorageType ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>
    302             onchange="storageTypeOnChange()"
    303             >
     224          <select name="storagetype_id" id="storeagetype_id"
     225            <%=!readCurrentStorageType ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>>
    304226          <%
    305227          if (!readCurrentStorageType)
     
    372294
    373295    <base:buttongroup subclass="dialogbuttons">
    374       <base:button onclick="saveSettings()" title="Save" />
    375       <base:button onclick="window.close()" title="Cancel" />
     296      <base:button id="btnSave" title="Save" />
     297      <base:button id="close" title="Cancel" />
    376298    </base:buttongroup>
    377299  </base:body>
  • trunk/www/biomaterials/biosources/biosources.js

    r6297 r6306  
    2626{
    2727  var biosources = {};
    28   var annotationsLoaded = false;
    2928 
    3029  /**
  • trunk/www/biomaterials/events/edit_event.jsp

    r6217 r6306  
    8484  {
    8585    event = BioMaterialEvent.getById(dc, itemId);
     86    event.checkPermission(Permission.WRITE);
    8687    eventDate = event.getEventDate();
    8788    title = "Edit event";
     
    9798    }
    9899  }
    99   if (event != null && !event.hasPermission(Permission.WRITE))
    100   {
    101     throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
    102   }
    103  
    104100 
    105101  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
     
    110106  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    111107  %>
    112   <base:page type="popup" title="<%=title%>">
    113   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     108  <base:page type="popup" title="<%=title%>" id="edit-page">
     109  <base:head scripts="tabcontrol-2.js,~events.js" styles="tabcontrol.css">
    114110    <ext:scripts context="<%=jspContext%>" />
    115111    <ext:stylesheets context="<%=jspContext%>" />
    116     <script>
    117     // Validate the "Event" tab
    118     function validateEvent()
    119     {
    120       var frm = document.forms['event'];
    121       return true;
    122     }
    123 
    124     // Submit the form
    125     function saveSettings()
    126     {
    127       var frm = document.forms['event'];
    128       if (TabControl.validateActiveTab('settings'))
    129       {
    130         frm.submit();
    131       }
    132     }
    133 
    134     function selectProtocolOnClick()
    135     {
    136       var frm = document.forms['event'];
    137       var url = '../../admin/protocols/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setProtocolCallback';
    138       if (frm.protocol_id.length > 1)
    139       {
    140         var id = Math.abs(parseInt(frm.protocol_id[1].value));       
    141         url += '&item_id='+id;
    142       }
    143       Main.openPopup(url, 'SelectProtocol', 1050, 700);
    144     }
    145     function setProtocolCallback(id, name)
    146     {
    147       var frm = document.forms['event'];
    148       var list = frm.protocol_id;
    149       if (list.length < 2 || list[1].value == '0') // >
    150       {
    151         Forms.addListOption(list, 1, new Option());
    152       }
    153       list[1].value = id;
    154       list[1].text = name;
    155       list.selectedIndex = 1;
    156     }
    157 
    158     function init()
    159     {
    160       <%
    161       if (event == null)
    162       {
    163         %>
    164         var frm = document.forms['event'];
    165         frm.event_date.focus();
    166         frm.event_date.select();
    167         <%
    168       }
    169       %>
    170     }
    171     </script>
    172112  </base:head>
    173   <base:body onload="init()">
     113  <base:body>
    174114    <h1><%=title%></h1>
    175115    <form action="index.jsp?ID=<%=ID%>" method="post" name="event">
     
    182122      position="bottom" remember="<%=event != null%>"
    183123      extensions="<%=invoker%>">
    184     <t:tab id="info" title="Event" validate="validateEvent()">
     124    <t:tab id="info" title="Event">
    185125      <table class="fullform input100">
    186126      <tr>
     
    190130          <tr>
    191131          <td>
    192             <input class="text" style="width: 15em;" type="text" name="event_date" id="event_date"
     132            <input class="text auto-init" data-auto-init="<%=event == null ? "focus-select" : "focus" %>"
     133              style="width: 15em;" type="text" name="event_date" id="event_date"
    193134              value="<%=HTML.encodeTags(dateFormatter.format(eventDate == null ? new Date() : eventDate))%>"
    194135              maxlength="20" title="Enter date in format: <%=htmlDateFormat%>">
     
    206147        <th>Used quantity</th>
    207148        <td><input class="text" style="width: 15em;" type="text" name="used_quantity"
     149          id="usedQuantity"
    208150          value="<%=Values.formatNumber(event == null ? null : event.getUsedQuantity(), -1)%>"
    209           maxlength="10" onkeypress="return Numbers.numberOnly(event)"> (µg)</td>
     151          maxlength="10"> (µg)</td>
    210152        <td></td>
    211153      </tr>
     
    221163            recent="<%=recentProtocols%>"
    222164            newitem="<%=event == null%>"
    223             onselect="selectProtocolOnClick()"
    224165          />
    225166        </td>
     
    242183
    243184    <base:buttongroup subclass="dialogbuttons">
    244       <base:button onclick="saveSettings()" title="Save" />
    245       <base:button onclick="window.close()" title="Cancel" />
     185      <base:button id="btnSave" title="Save" />
     186      <base:button id="close" title="Cancel" />
    246187    </base:buttongroup>
    247188  </base:body>
  • trunk/www/biomaterials/events/events.js

    r6261 r6306  
    3535    if (pageId == 'edit-page')
    3636    {
    37       // TODO
     37      // Save + Close buttons
     38      Buttons.addClickHandler('btnSave', biomaterialevents.save);
     39      Buttons.addClickHandler('close', App.closeWindow);
     40
     41      // Tab validation
     42      TabControl.addTabValidator('settings.info', biomaterialevents.validateEvent);
     43     
     44      // Protocol
     45      Buttons.addClickHandler('protocol_id.select', biomaterialevents.selectProtocol);
     46      Events.addEventHandler('protocol_id', 'base-selected', biomaterialevents.setProtocolCallback);
     47     
     48      // Used quantity
     49      Events.addEventHandler('usedQuantity', 'keypress', Events.numberOnly);
    3850    }
    3951    else if (pageId == 'view-page')
     
    8092  }
    8193 
     94  biomaterialevents.validateEvent = function()
     95  {
     96    var frm = document.forms['event'];
     97    return true;
     98  }
     99
     100  // Submit the form
     101  biomaterialevents.save = function()
     102  {
     103    var frm = document.forms['event'];
     104    if (TabControl.validateActiveTab('settings'))
     105    {
     106      frm.submit();
     107    }
     108  }
     109 
     110  biomaterialevents.selectProtocol = function()
     111  {
     112    var frm = document.forms['event'];
     113    var url = '';
     114    if (frm.protocol_id.length > 1)
     115    {
     116      var id = Math.abs(parseInt(frm.protocol_id[1].value));       
     117      url += '&item_id='+id;
     118    }
     119    Dialogs.selectItem('PROTOCOL', 'protocol_id', 0, url);
     120  }
     121 
     122  biomaterialevents.setProtocolCallback = function(event)
     123  {
     124    var id = event.detail.id;
     125    var name = event.detail.name;
     126    var frm = document.forms['event'];
     127    var list = frm.protocol_id;
     128    if (list.length < 2 || list[1].value == '0')
     129    {
     130      Forms.addListOption(list, 1, new Option());
     131    }
     132    list[1].value = id;
     133    list[1].text = name;
     134    list.selectedIndex = 1;
     135  }
     136
     137 
    82138  return biomaterialevents;
    83139}();
  • trunk/www/biomaterials/events/view_event.jsp

    r6268 r6306  
    139139    <ext:scripts context="<%=jspContext%>" />
    140140    <ext:stylesheets context="<%=jspContext%>" />
    141     <script>
    142     function editItem()
    143     {
    144       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true, '&biomaterial_type=<%=bioMaterialType.name()%>&biomaterial_id=<%=bioMaterial.getId()%>');
    145     }
    146     function deleteItem()
    147     {
    148       if (confirm('This can\'t be undone. Continue?'))
    149       {
    150         location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&&biomaterial_id=<%=bioMaterialId%>&biomaterial_type=<%=bioMaterialType.name()%>&item_id=<%=itemId%>');
    151       }
    152     }
    153     function runPlugin(cmd)
    154     {
    155       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&biomaterial_id=<%=bioMaterialId%>&biomaterial_type=<%=bioMaterialType.name()%>&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
    156     }
    157     </script>
    158141  </base:head>
    159142  <base:body>
  • trunk/www/biomaterials/lists/edit_list.jsp

    r6217 r6306  
    9494  {
    9595    list = BioMaterialList.getById(dc, itemId);
     96    list.checkPermission(Permission.WRITE);
    9697    memberType = list.getMemberType();
    9798    cc.setObject("item", list);
    9899    title = "Edit biomaterial list -- " + HTML.encodeTags(list.getName());
    99     list.checkPermission(Permission.WRITE);
    100100  }
    101  
    102  
    103101 
    104102  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), list);
    105103  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    106104  %>
    107   <base:page type="popup" title="<%=title%>">
    108   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     105  <base:page type="popup" title="<%=title%>" id="edit-page">
     106  <base:head scripts="tabcontrol-2.js,~lists.js" styles="tabcontrol.css">
    109107    <ext:scripts context="<%=jspContext%>" />
    110108    <ext:stylesheets context="<%=jspContext%>" />
    111     <script>
    112     // Validate the "Biomaterial list" tab
    113     function validateList()
    114     {
    115       var frm = document.forms['list'];
    116       if (Main.trimString(frm.name.value) == '')
    117       {
    118         Forms.showNotification(frm.name, 'You must enter a name');
    119         return false;
    120       }
    121       return true;
    122     }
    123 
    124     // Submit the form
    125     function saveSettings()
    126     {
    127       var frm = document.forms['list'];
    128       if (TabControl.validateActiveTab('settings'))
    129       {
    130         if (frm.source) Forms.createHidden(frm, 'items', getSelectedItems().join(','));
    131         frm.memberType.disabled = false;
    132         frm.submit();
    133       }
    134     }
    135    
    136     function init()
    137     {
    138       var frm = document.forms['list'];
    139       <%
    140       if (list == null)
    141       {
    142         %>
    143         frm.name.focus();
    144         frm.name.select();
    145         <%
    146       }
    147       %>
    148       if (frm.source)
    149       {
    150         if (getSelectedItems().length == 0)
    151         {
    152           frm.source[0].disabled = true;
    153           var lblSelected = document.getElementById('lblSelected');
    154           //aSelected.href = 'javascript:void(0)';
    155           lblSelected.disabled = true;
    156           Main.addClass(lblSelected, 'disabled');
    157         }
    158         else
    159         {
    160           Forms.checkRadio(frm.source, 'selected');
    161         }
    162       }
    163     }
    164     function checkRadio(radio, name)
    165     {
    166       Forms.checkRadio(radio, name);
    167     }
    168 
    169     // Get the ID:s of all selected items
    170     var selectedItems = new Array();
    171     var hasCheckSelectedItems = false;
    172     function getSelectedItems()
    173     {
    174       <%
    175       if (formId != null)
    176       {
    177         %>
    178         if (!hasCheckSelectedItems)
    179         {
    180           selectedItems = window.opener.Table.getSelected('<%=formId%>');
    181           hasCheckedSelectedItems = true;
    182         }
    183         <%
    184       }
    185       %>
    186       return selectedItems;
    187     }
    188    
    189     </script>
    190109  </base:head>
    191   <base:body onload="init()">
     110  <base:body>
    192111    <h1><%=title%> <base:help tabcontrol="settings"/></h1>
    193112    <form action="index.jsp?ID=<%=ID%>" method="post" name="list">
     
    206125      position="bottom"  remember="<%=list != null%>"
    207126      extensions="<%=invoker%>">
    208     <t:tab id="info" title="Biomaterial list" validate="validateList()" helpid="biomateriallist.edit">
     127    <t:tab id="info" title="Biomaterial list" helpid="biomateriallist.edit">
    209128      <table class="fullform input100">
    210129      <tr>
    211130        <th>Name</th>
    212         <td><input class="text required" type="text" name="name"
     131        <td><input class="text required auto-init" data-auto-init="<%=list == null ? "focus-select" : "focus" %>"
     132          type="text" name="name"
    213133          value="<%=HTML.encodeTags(list == null ? Values.getString(cc.getPropertyValue("name"), "New list") : list.getName())%>"
    214134          maxlength="<%=BioMaterialList.MAX_NAME_LENGTH%>"></td>
     
    234154          <td>
    235155            <input type="radio" name="source" id="sourceSelected" value="selected"
     156              data-parent-form="<%=formId%>"
    236157              ><label for="sourceSelected" id="lblSelected">Selected items</label><br>
    237158            <input type="radio" name="source" id="sourcePage" value="page"
     
    266187            <input type="radio" name="create" id="createCount" value="count"
    267188              ><label for="createCount" title="The new list contains only items that are present in some of selected lists">Present in at least</label>
    268               <input type="text" class="text" name="minCount" style="width: 3em;" maxlength="2"
    269                 value="1"
    270                 onkeypress="return Numbers.integerOnly(event)"
    271                 onfocus="checkRadio(document.forms['list'].create, 'count');">
     189              <input type="text" class="text" name="minCount" id="minCount" style="width: 3em;" maxlength="2"
     190                value="1">
    272191              of the selected lists (1-<%=numSelectedLists%>).
    273192              <br>
     
    305224
    306225    <base:buttongroup subclass="dialogbuttons">
    307       <base:button onclick="saveSettings()" title="Save" />
    308       <base:button onclick="window.close()" title="Cancel" />
     226      <base:button id="btnSave" title="Save" />
     227      <base:button id="close" title="Cancel" />
    309228    </base:buttongroup>
    310229  </base:body>
  • trunk/www/biomaterials/lists/index.jsp

    r6192 r6306  
    399399    String sourceMerge = request.getParameter("sourceMerge");
    400400   
    401     String[] sourceListIds = Values.getString(request.getParameter("sourceLists")).split(",");
     401    String[] sourceListIds = Values.getString(request.getParameter("+BIOMATERIALLIST")).split(",");
    402402    List<BioMaterialList> sourceLists = new ArrayList<BioMaterialList>(sourceListIds.length);
    403403    for (int i = 0; i < sourceListIds.length; ++i)
  • trunk/www/biomaterials/lists/lists.js

    r6261 r6306  
    2626{
    2727  var biomateriallists = {};
     28  var selectedItemsInParentForm;
    2829 
    2930  /**
     
    3536    if (pageId == 'edit-page')
    3637    {
    37       // TODO
     38      // Save + Close buttons
     39      Buttons.addClickHandler('btnSave', biomateriallists.save);
     40      Buttons.addClickHandler('close', App.closeWindow);
     41
     42      // Tab validation
     43      TabControl.addTabValidator('settings.info', biomateriallists.validateList);
     44     
     45      var frm = document.forms['list'];
     46      if (frm.source)
     47      {
     48        // Create biomaterial list from selection of biomaterials
     49        var parentForm = Data.get('sourceSelected', 'parent-form');
     50        selectedItemsInParentForm = window.opener.Table.getSelected(parentForm)
     51        var lblSelected = Doc.element('lblSelected');
     52        if (selectedItemsInParentForm.length == 0)
     53        {
     54          frm.source[0].disabled = true;
     55          lblSelected.disabled = true;
     56          Main.addClass(lblSelected, 'disabled');
     57        }
     58        else
     59        {
     60          Forms.checkRadio(frm.source, 'selected');
     61          lblSelected.innerHTML += ' ['+selectedItemsInParentForm.length+']';
     62        }
     63      }
     64     
     65      if (Doc.element('minCount'))
     66      {
     67        Events.addEventHandler('minCount', 'keypress', Events.integerOnly);
     68        Events.addEventHandler('minCount', 'focus', biomateriallists.selectCreateCount);
     69      }
     70
    3871    }
    3972    else if (pageId == 'view-page')
     
    6396      var attributes = {'item-type': 'BIOMATERIALLIST'};
    6497      var tableAttributes = {'table-id': 'lists'};
    65       Buttons.addClickHandler('btnNewItem', Buttons.newItem, attributes);
     98      Buttons.addClickHandler('btnNewItem', biomateriallists.newItem, attributes);
    6699      Buttons.addClickHandler('btnDeleteItems', Buttons.deleteItems, tableAttributes);
    67100      Buttons.addClickHandler('btnRestoreItems', Buttons.restoreItems, tableAttributes);
     
    76109      Buttons.addClickHandler('btnOk', Buttons.returnSelected, tableAttributes);
    77110    }
     111  }
     112 
     113  biomateriallists.newItem = function()
     114  {
     115    var controller = Main.getController('BIOMATERIALLIST');
     116    Table.submitToPopup('lists', 'NewItem', controller.width, controller.height);
    78117  }
    79118 
     
    107146  }
    108147
     148  biomateriallists.validateList = function()
     149  {
     150    var frm = document.forms['list'];
     151    if (Main.trimString(frm.name.value) == '')
     152    {
     153      Forms.showNotification(frm.name, 'You must enter a name');
     154      return false;
     155    }
     156    return true;
     157  }
     158
     159  // Submit the form
     160  biomateriallists.save = function()
     161  {
     162    var frm = document.forms['list'];
     163    if (TabControl.validateActiveTab('settings'))
     164    {
     165      if (selectedItemsInParentForm)
     166      {
     167        Forms.createHidden(frm, 'items', selectedItemsInParentForm.join(','));
     168      }
     169      frm.memberType.disabled = false;
     170      frm.submit();
     171    }
     172  }
     173 
     174  biomateriallists.selectCreateCount = function()
     175  {
     176    var frm = document.forms['list'];
     177    Forms.checkRadio(frm.create, 'count');
     178  }
     179 
    109180 
    110181  return biomateriallists;
  • trunk/www/biomaterials/lists/members/add_members_frameset.jsp

    r6176 r6306  
    6363%>
    6464  <base:page type="popup" title="Select biomaterial">
    65   <base:head>
    66   <script>
    67   function addSelected()
    68   {
    69     var selected = top['members'].Table.getSelected(0);
    70     if (selected.length == 0)
    71     {
    72       Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    73       return;
    74     }
    75     var frm = document.forms['addMembers'];
    76     frm.which.value = 'selected';
    77     Forms.createHidden(frm, 'items', selected.join(','));
    78     frm.submit();
    79   }
    80   function addCurrentPage()
    81   {
    82     var frm = document.forms['addMembers'];
    83     frm.which.value = 'page';
    84     frm.submit();
    85   }
    86   function addAll()
    87   {
    88     var frm = document.forms['addMembers'];
    89     frm.which.value = 'all';
    90     frm.submit();
    91   }
    92   </script>
    93   </base:head>
     65  <base:head scripts="~add_members.js" />
    9466  <base:body>
    9567    <h1>Select biomaterial</h1>
     
    10072     
    10173    <base:buttongroup subclass="dialogbuttons topborder">
    102       <base:button title="Add selected" onclick="addSelected()" />
    103       <base:button title="Add current page" onclick="addCurrentPage()" />
    104       <base:button title="Add all" onclick="addAll()" />
    105       <base:button title="Close" onclick="window.top.close()" />
     74      <base:button id="btnAddSelected" title="Add selected" />
     75      <base:button id="btnAddPage" title="Add current page" />
     76      <base:button id="btnAddAll" title="Add all" />
     77      <base:button id="close" title="Close" />
    10678    </base:buttongroup>
    10779     
  • trunk/www/biomaterials/lists/members/list_members.jsp

    r6278 r6306  
    199199    <ext:scripts context="<%=jspContext%>" />
    200200    <ext:stylesheets context="<%=jspContext%>" />
    201     <script>
    202 
    203     function placeOnPlate()
    204     {
    205       Table.submitToPopup(formId, 'PlaceOnPlate', 900, 600);
    206     }
    207     </script>
    208201  </base:head>
    209202 
  • trunk/www/biomaterials/lists/merge.jsp

    r6217 r6306  
    5353  String title = "Add/keep/remove items: " + HTML.encodeTags(bmList.getName());
    5454  bmList.checkPermission(Permission.WRITE);
    55  
    56  
    57  
    5855  %>
    5956
    6057  <base:page type="popup" title="<%=title%>">
    61   <base:head scripts="linkitems.js">
    62     <script>
    63     // Validate the "Biomaterial list" tab
    64     function validateForm()
    65     {
    66       var frm = document.forms['merge'];
    67       if (frm.bioMaterialLists.length == 0)
    68       {
    69         Forms.showNotification('btnAddBioMaterialLists', 'You must select at least one other biomaterial list');
    70         return false;
    71       }
    72       return true;
    73     }
    74 
    75     // Submit the form
    76     function saveSettings()
    77     {
    78       var frm = document.forms['merge'];
    79       if (validateForm())
    80       {
    81         frm.sourceLists.value = Link.getActionIds(1, 'B').join(',');
    82         frm.submit();
    83       }
    84     }
    85    
    86     function addBioMaterialListsOnClick()
    87     {
    88       var frm = document.forms['merge'];
    89       var ids = Link.getListIds(frm.bioMaterialLists, 'B');
    90       ids[ids.length] = <%=itemId%>;
    91       var excludes = ids.join(',');
    92       var url = 'index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectmultiple&callback=addBioMaterialListsCallback';
    93       url += "&exclude="+excludes;
    94       url += '&resetTemporary=1&tmpfilter:INT:memberType=<%=bmList.getMemberType().getValue()%>';
    95       Main.openPopup(url, 'AddBioMaterialLists', 1050, 700);
    96     }
    97     function addBioMaterialListsCallback(bioMaterialListId, name)
    98     {
    99       var item = Link.getItem('B', bioMaterialListId);
    100       if (!item) item = new Item('B', bioMaterialListId, name);
    101       Link.addItem(document.forms['merge'].bioMaterialLists, item);
    102     }
    103     function removeBioMaterialListsOnClick()
    104     {
    105       Link.removeSelected(document.forms['merge'].bioMaterialLists);
    106     }
    107    
    108     function updateImage()
    109     {
    110       var frm = document.forms['merge'];
    111       var img = document.getElementById('mergeImage');
    112       var mergeType = frm.mergeType[frm.mergeType.selectedIndex].value;
    113       var sourceMerge = frm.sourceMerge[frm.sourceMerge.selectedIndex].value;
    114       var url = '../../images/set_operations/'+mergeType+'_'+sourceMerge+'.png';
    115       img.src = url;
    116     }
    117     function mergeTypeOnChange()
    118     {
    119       updateImage();
    120     }
    121     function sourceMergeOnChange()
    122     {
    123       updateImage();
    124     }
    125     function init()
    126     {
    127       updateImage();
    128     }
    129     </script>
    130   </base:head>
    131   <base:body onload="init()">
     58  <base:head scripts="linkitems-2.js,~merge.js" />
     59  <base:body>
    13260    <h1><%=title%> <base:help helpid="biomateriallist.merge" /></h1>
    13361    <form action="index.jsp?ID=<%=ID%>" method="post" name="merge">
     
    14674        <th>What to do</th>
    14775        <td>
    148           <select name="mergeType" onchange="mergeTypeOnChange()">
     76          <select name="mergeType" id="mergeType">
    14977            <option value="union" <%="union".equals(mergeType) ? "selected" : ""%>
    15078              >Add items to
     
    15684          this list that are present in
    15785          <br>
    158           <select name="sourceMerge" onchange="sourceMergeOnChange()">
     86          <select name="sourceMerge" id="sourceMerge">
    15987            <option value="union" <%="intersection".equals(mergeType) ? "" : "selected"%>
    16088              >some of
     
    175103          <tr>
    176104          <td>
    177             <select name="bioMaterialLists" size="10" multiple>
     105            <select name="bioMaterialLists" id="bioMaterialLists"
     106              class="auto-init" data-auto-init="link-container"
     107              size="10" multiple>
    178108            </select>
    179109          </td>
     
    183113              <base:button
    184114                id="btnAddBioMaterialLists"
    185                 subclass="leftaligned"
     115                subclass="leftaligned auto-init"
     116                data-auto-init="add-link"
     117                data-list-id="bioMaterialLists"
     118                data-item-type="BIOMATERIALLIST"
     119                data-exclude="<%=itemId %>"
     120                data-filter="<%="&resetTemporary=1&tmpfilter:INT:memberType="+bmList.getMemberType().getValue()%>"
    186121                style="width: 15em;"
    187                 onclick="addBioMaterialListsOnClick()"
    188122                title="Add&nbsp;biomaterial lists&hellip;"
    189123                tooltip="Add biomaterial lists"
    190124              />
    191125              <base:button
    192                 subclass="leftaligned"
     126                id="btnRemoveBioMaterialLists"
     127                subclass="leftaligned auto-init"
     128                data-auto-init="remove-link"
     129                data-list-id="bioMaterialLists"
    193130                style="width: 15em;"
    194                 onclick="removeBioMaterialListsOnClick()"
    195131                title="Remove"
    196132                tooltip="Remove the selected lists"
    197133              />
    198134            </base:buttongroup>
    199             <input type="hidden" name="sourceLists" value="">
    200135          </td>
    201136          </tr>
     
    210145   
    211146    <base:buttongroup subclass="dialogbuttons">
    212       <base:button onclick="saveSettings()" title="Ok" />
    213       <base:button onclick="window.close()" title="Cancel" />
     147      <base:button id="btnSave" title="Ok" />
     148      <base:button id="close" title="Cancel" />
    214149    </base:buttongroup>
    215150  </base:body>
  • trunk/www/biomaterials/tags/edit_tag.jsp

    r6217 r6306  
    9797  tagTypeQuery.include(Include.ALL);
    9898  tagTypeQuery.order(Orders.asc(Hql.property("name")));
    99 
    100  
    10199 
    102100  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), tag);
    103101  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    104102  %>
    105   <base:page type="popup" title="<%=title%>">
    106   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     103  <base:page type="popup" title="<%=title%>" id="edit-page">
     104  <base:head scripts="tabcontrol-2.js,~tags.js" styles="tabcontrol.css">
    107105    <ext:scripts context="<%=jspContext%>" />
    108106    <ext:stylesheets context="<%=jspContext%>" />
    109     <script>
    110     // Validate the "Tag" tab
    111     function validateTag()
    112     {
    113       var frm = document.forms['tag'];
    114       if (Main.trimString(frm.name.value) == '')
    115       {
    116         Forms.showNotification(frm.name, 'You must enter a name');
    117         return false;
    118       }
    119       return true;
    120     }
    121 
    122     // Submit the form
    123     function saveSettings()
    124     {
    125       var frm = document.forms['tag'];
    126       if (TabControl.validateActiveTab('settings'))
    127       {
    128         frm.submit();
    129       }
    130     }
    131    
    132     function init()
    133     {
    134       <%
    135       if (tag == null)
    136       {
    137         %>
    138         var frm = document.forms['tag'];
    139         frm.name.focus();
    140         frm.name.select();
    141         <%
    142       }
    143       %>
    144     }
    145     </script>
    146107  </base:head>
    147   <base:body onload="init()">
     108  <base:body>
    148109    <h1><%=title%> <base:help tabcontrol="settings"/></h1>
    149110    <form action="index.jsp?ID=<%=ID%>" method="post" name="tag">
     
    154115      position="bottom"  remember="<%=tag != null%>"
    155116      extensions="<%=invoker%>">
    156     <t:tab id="info" title="Tag" validate="validateTag()" helpid="tag.edit">
     117    <t:tab id="info" title="Tag" helpid="tag.edit">
    157118      <table class="fullform input100 smaller">
    158119      <tr>
    159120        <th>Name</th>
    160         <td><input class="text required" type="text" name="name"
     121        <td><input class="text required auto-init" data-auto-init="<%=tag == null ? "focus-select" : "focus" %>"
     122          type="text" name="name"
    161123          value="<%=HTML.encodeTags(tag == null ? Values.getString(cc.getPropertyValue("name"), "New tag") : tag.getName())%>"
    162124          maxlength="<%=Tag.MAX_NAME_LENGTH%>"></td>
     
    213175
    214176    <base:buttongroup subclass="dialogbuttons">
    215       <base:button onclick="saveSettings()" title="Save" />
    216       <base:button onclick="window.close()" title="Cancel" />
     177      <base:button id="btnSave" title="Save" />
     178      <base:button id="close" title="Cancel" />
    217179    </base:buttongroup>
    218180  </base:body>
  • trunk/www/biomaterials/tags/tags.js

    r6261 r6306  
    3535    if (pageId == 'edit-page')
    3636    {
    37       // TODO
     37      // Save + Close buttons
     38      Buttons.addClickHandler('btnSave', tags.save);
     39      Buttons.addClickHandler('close', App.closeWindow);
     40
     41      // Tab validation
     42      TabControl.addTabValidator('settings.info', tags.validateTag);
    3843    }
    3944    else if (pageId == 'view-page')
     
    4853      Buttons.addClickHandler('btnShare', Buttons.shareItem, attributes);
    4954      Buttons.addClickHandler('btnSetOwner', Buttons.setOwner, attributes);
    50       Buttons.addClickHandler('btnNewSample', biosources.newSample, attributes);
    5155      Buttons.addClickHandler('btnExport', Buttons.runPlugin, attributes);
    5256      Buttons.addClickHandler('btnImport', Buttons.runPlugin, attributes);
     
    7276  }
    7377 
     78 
     79  tags.validateTag = function()
     80  {
     81    var frm = document.forms['tag'];
     82    if (Main.trimString(frm.name.value) == '')
     83    {
     84      Forms.showNotification(frm.name, 'You must enter a name');
     85      return false;
     86    }
     87    return true;
     88  }
     89
     90  // Submit the form
     91  tags.save = function()
     92  {
     93    var frm = document.forms['tag'];
     94    if (TabControl.validateActiveTab('settings'))
     95    {
     96      frm.submit();
     97    }
     98  }
     99
    74100  return tags;
    75101}();
  • trunk/www/common/ownership/ownership.js

    r6223 r6306  
    4646  {
    4747    var frm = document.forms['ownership'];
    48     var url;
     48    var url = '';
    4949    if (frm.owner_id.value > 0)
    5050    {
  • trunk/www/include/scripts/linkitems-2.js

    r6305 r6306  
    213213    var itemType = Data.get(event.currentTarget, 'item-type');
    214214    var exclude = Data.get(event.currentTarget, 'exclude');
     215    var filter = Data.get(event.currentTarget, 'filter');
    215216
    216217    var listItems = link.getIdsInList(listId, itemType);
    217218    if (exclude) listItems[listItems.length] = exclude;
    218219    var url = '&exclude='+listItems.join(',');
     220    if (filter) url += filter;
    219221    Dialogs.selectItem(itemType, listId, 1, url);
    220222  }
  • trunk/www/lims/geometries/edit_geometry.jsp

    r6217 r6306  
    7777  {
    7878    geometry = PlateGeometry.getById(dc, itemId);
     79    geometry.checkPermission(Permission.WRITE);
    7980    cc.setObject("item", geometry);
    8081    title = "Edit plate geometry -- " + HTML.encodeTags(geometry.getName());
    81   }
    82   if (geometry != null && !geometry.hasPermission(Permission.WRITE))
    83   {
    84     throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
    85   }
    86  
     82  }
    8783 
    8884  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), geometry);
    8985  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    9086  %>
    91   <base:page type="popup" title="<%=title%>">
    92   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     87  <base:page type="popup" title="<%=title%>" id="edit-page">
     88  <base:head scripts="tabcontrol-2.js,~geometries.js" styles="tabcontrol.css">
    9389    <ext:scripts context="<%=jspContext%>" />
    9490    <ext:stylesheets context="<%=jspContext%>" />
    95     <script>
    96     // Validate the "PlateGeoemtry" tab
    97     function validatePlateGeometry()
    98     {
    99       var frm = document.forms['geometry'];
    100       if (Main.trimString(frm.name.value) == '')
    101       {
    102         Forms.showNotification(frm.name, 'You must enter a name');
    103         return false;
    104       }
    105       else if (frm.rows && frm.rows.value == '')
    106       {
    107         Forms.showNotification(frm.rows, 'You must enter the number of rows');
    108         return false;
    109       }
    110       else if (frm.columns && frm.columns.value == '')
    111       {
    112         Forms.showNotification(frm.columns, 'You must enter the number of columns');
    113         return false;
    114       }
    115       return true;
    116     }
    117 
    118     // Submit the form
    119     function saveSettings()
    120     {
    121       var frm = document.forms['geometry'];
    122       if (TabControl.validateActiveTab('settings'))
    123       {
    124         frm.submit();
    125       }
    126     }
    127    
    128     function init()
    129     {
    130       var frm = document.forms['geometry'];
    131       <%
    132       if (geometry == null)
    133       {
    134         %>
    135         frm.name.focus();
    136         frm.name.select();
    137         <%
    138       }
    139       %>
    140     }
    141     </script>
    14291  </base:head>
    143   <base:body onload="init()">
     92  <base:body>
    14493    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    14594
     
    151100      position="bottom"  remember="<%=geometry != null%>"
    152101      extensions="<%=invoker%>">
    153     <t:tab id="info" title="Plate geometry" validate="validatePlateGeometry()" helpid="plategeometry.edit">
     102    <t:tab id="info" title="Plate geometry" helpid="plategeometry.edit">
    154103      <table class="fullform input100 smaller">
    155104      <tr>
    156105        <th>Name</th>
    157         <td><input class="text required" type="text" name="name"
     106        <td><input class="text required auto-init" data-auto-init="<%=geometry == null ? "focus-select" : "focus" %>"
     107          type="text" name="name"
    158108          value="<%=HTML.encodeTags(geometry == null ? Values.getString(cc.getPropertyValue("name"), "New plate geometry") : geometry.getName())%>"
    159109          maxlength="<%=PlateGeometry.MAX_NAME_LENGTH%>"></td>
     
    173123          {
    174124            %>
    175             <input class="unchangeable" type="text" name="rows" style="width: 15em;"
     125            <input class="unchangeable" type="text" name="rows" id="rows" style="width: 15em;"
    176126              value="<%=cc.getPropertyValue("rows") == null ? "" : Values.getInt(cc.getPropertyValue("rows"))%>"
    177               maxlength="10" onkeypress="return Numbers.integerOnly(event)">
     127              maxlength="10">
    178128            <%
    179129          }
     
    195145          {
    196146            %>
    197             <input class="unchangeable" type="text" name="columns" style="width: 15em;"
     147            <input class="unchangeable" type="text" name="columns" id="columns" style="width: 15em;"
    198148              value="<%=cc.getPropertyValue("columns") == null ? "" : Values.getInt(cc.getPropertyValue("columns"))%>"
    199               maxlength="10" onkeypress="return Numbers.integerOnly(event)">
     149              maxlength="10">
    200150            <%
    201151          }
     
    227177
    228178    <base:buttongroup subclass="dialogbuttons">
    229       <base:button onclick="saveSettings()" title="Save" />
    230       <base:button onclick="window.close()" title="Cancel" />
     179      <base:button id="btnSave" title="Save" />
     180      <base:button id="close" title="Cancel" />
    231181    </base:buttongroup>
    232182  </base:body>
  • trunk/www/lims/geometries/list_geometries.jsp

    r6221 r6306  
    107107  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
    108108  %>
    109   <base:page title="<%=title==null ? "Plate geometries" : title%>" type="<%=mode.getPageType()%>">
    110   <base:head scripts="table.js" styles="table.css,toolbar.css">
     109  <base:page title="<%=title==null ? "Plate geometries" : title%>" type="<%=mode.getPageType()%>" id="list-page">
     110  <base:head scripts="table.js,~geometries.js" styles="table.css,toolbar.css">
    111111    <ext:scripts context="<%=jspContext%>" />
    112112    <ext:stylesheets context="<%=jspContext%>" />
    113     <script>
    114     var submitPage = 'index.jsp';
    115     var formId = 'geometries';
    116     function newItem()
    117     {
    118       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
    119     }
    120     function editItem(itemId)
    121     {
    122       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
    123     }
    124     function viewItem(itemId)
    125     {
    126       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
    127     }
    128     function itemOnClick(evt, itemId)
    129     {
    130       Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
    131     }
    132     function deleteItems()
    133     {
    134       var frm = document.forms[formId];
    135       if (Forms.numChecked(frm) == 0)
    136       {
    137         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    138         return;
    139       }
    140       frm.action = submitPage;
    141       frm.cmd.value = 'DeleteItems';
    142       frm.submit();
    143     }
    144     function restoreItems()
    145     {
    146       var frm = document.forms[formId];
    147       if (Forms.numChecked(frm) == 0)
    148       {
    149         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    150         return;
    151       }
    152       frm.action = submitPage;
    153       frm.cmd.value = 'RestoreItems';
    154       frm.submit();
    155     }
    156     function configureColumns()
    157     {
    158       Table.configureColumns(formId);
    159     }
    160     function runPlugin(cmd)
    161     {
    162       Table.submitToPopup(formId, cmd, 750, 500);
    163     }
    164     function returnSelected()
    165     {
    166       Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
    167       window.close();
    168     }
    169     function newPlateType(geometryId)
    170     {
    171       Main.viewOrEditItem('<%=ID%>', 'PLATETYPE', 0, true, '&plategeometry_id='+geometryId);
    172     }
    173     </script>
    174113  </base:head>
    175114 
     
    272211          >
    273212          <tbl:button
     213            id="btnNewItem"
    274214            disabled="<%=!createPermission%>"
    275215            image="new.png"
    276             onclick="newItem()"
    277216            title="New&hellip;"
    278217            tooltip="<%=createPermission ? "Create new plate geometry" : "You do not have permission to create plate geometries"%>"
    279218          />
    280219          <tbl:button
     220            id="btnDeleteItems"
    281221            image="delete.png"
    282             onclick="deleteItems()"
    283222            title="Delete"
    284223            tooltip="Delete the selected items"
    285224          />
    286225          <tbl:button
     226            id="btnRestoreItems"
    287227            image="restore.png"
    288             onclick="restoreItems()"
    289228            title="Restore"
    290229            tooltip="Restore the selected (deleted) items"
    291230          />
    292231          <tbl:button
     232            id="btnColumns"
    293233            image="columns.png"
    294             onclick="configureColumns()"
    295234            title="Columns&hellip;"
    296235            tooltip="Show, hide and re-order columns"
    297236          />
    298237          <tbl:button
     238            id="btnImport"
     239            data-plugin-type="IMPORT"
    299240            image="import.png"
    300             onclick="runPlugin('ImportItems')"
    301241            title="Import&hellip;"
    302242            tooltip="Import data"
     
    304244          />
    305245          <tbl:button
     246            id="btnExport"
     247            data-plugin-type="EXPORT"
    306248            image="export.png"
    307             onclick="runPlugin('ExportItems')"
    308249            title="Export&hellip;"
    309250            tooltip="Export data"
     
    311252          />
    312253          <tbl:button
     254            id="btnRunPlugin"
     255            data-plugin-type="OTHER"
    313256            image="runplugin.png"
    314             onclick="runPlugin('RunListPlugin')"
    315257            title="Run plugin&hellip;"
    316258            tooltip="Run a plugin"
     
    421363                    visible="<%=item.isRemoved()%>"
    422364                  />&nbsp;</tbl:header>
    423                 <tbl:cell column="name"><div class="link"
    424                   onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)"
     365                <tbl:cell column="name"><div
     366                  class="link table-item"
     367                  data-item-id="<%=itemId%>"
     368                  data-no-edit="<%=writePermission ? 0 : 1 %>"
     369                  tabindex="0"
    425370                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
    426371                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
     
    456401                  %>
    457402                  <base:icon
     403                    id="<%="newplatetype."+itemId%>"
    458404                    image="add.png"
    459                     onclick="<%="newPlateType("+itemId+")"%>"
     405                    subclass="auto-init"
     406                    data-auto-init="new-plate-type"
     407                    data-item-id="<%=itemId %>"
    460408                    tooltip="Create new plate type"
    461409                    visible="<%=mode.hasEditLink() && createPlateTypePermission && usePermission %>"
     
    487435   
    488436    <base:buttongroup subclass="dialogbuttons">
    489       <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
    490       <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
    491       <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
     437      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
     438      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
     439      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
    492440    </base:buttongroup>
    493441   
  • trunk/www/lims/geometries/view_geometry.jsp

    r6136 r6306  
    9191  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
    9292  %>
    93   <base:page title="<%=title%>">
    94   <base:head scripts="table.js,tabcontrol.js" styles="toolbar.css,table.css,headertabcontrol.css,path.css">
     93  <base:page title="<%=title%>" id="view-page">
     94  <base:head scripts="table.js,tabcontrol-2.js,~geometries.js" styles="toolbar.css,table.css,headertabcontrol.css,path.css">
    9595    <ext:scripts context="<%=jspContext%>" />
    9696    <ext:stylesheets context="<%=jspContext%>" />
    97     <script>
    98     function editItem()
    99     {
    100       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
    101     }
    102     function deleteItem()
    103     {
    104       location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
    105     }
    106     function restoreItem()
    107     {
    108       location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
    109     }
    110     function deleteItemPermanently()
    111     {
    112       Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
    113     }
    114     function itemDeleted()
    115     {
    116       Main.listItems('<%=ID%>', '<%=itemType.name()%>');
    117     }
    118     function showUsingItems()
    119     {
    120       Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
    121     }
    122     function runPlugin(cmd)
    123     {
    124       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
    125     }
    126     function newPlateType()
    127     {
    128       Main.viewOrEditItem('<%=ID%>', 'PLATETYPE', 0, true, '&plategeometry_id=<%=itemId%>');
    129     }
    130     </script>
    13197  </base:head>
    13298  <base:body>
     
    135101      /><p:pathelement title="<%=HTML.encodeTags(geometry.getName())%>"
    136102      /></p:path>
     103    <div id="page-data" data-item-id="<%=itemId%>"></div>
    137104   
    138105    <t:tabcontrol
     
    146113        <th class="itemstatus">
    147114          <base:icon
     115            id="btnDeletePermanently"
    148116            image="deleted.png"
    149             onclick="deleteItemPermanently()"
    150117            tooltip="This item has been flagged for deletion. Click to delete it now."
    151118            enabled="<%=deletePermanentlyPermission %>"
    152119            visible="<%=isRemoved%>"
    153120          />
    154           <base:icon image="used.png"
    155             onclick="showUsingItems()"
     121          <base:icon
     122            id="btnUsingItems"
     123            image="used.png"
    156124            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
    157125            visible="<%=isRemoved && isUsed%>" />
     
    160128          <tbl:toolbar subclass="bottomborder">
    161129            <tbl:button
     130              id="btnEdit"
    162131              disabled="<%=!writePermission%>"
    163132              image="edit.png"
    164               onclick="editItem()"
    165133              title="Edit&hellip;"
    166134              tooltip="<%=writePermission ? "Edit this plate geometry" : "You do not have permission to edit this plate geometry"%>"
    167135            />
    168136            <tbl:button
     137              id="btnDelete"
    169138              disabled="<%=!deletePermission%>"
    170139              image="delete.png"
    171               onclick="deleteItem()"
    172140              title="Delete"
    173141              visible="<%=!geometry.isRemoved()%>"
     
    175143            />
    176144            <tbl:button
     145              id="btnRestore"
    177146              disabled="<%=!writePermission%>"
    178147              image="restore.png"
    179               onclick="restoreItem()"
    180148              title="Restore"
    181149              visible="<%=geometry.isRemoved()%>"
     
    183151            />
    184152            <tbl:button
     153              id="btnNewPlateType"
    185154              image="add.png"
    186               onclick="newPlateType()"
    187155              title="New plate type&hellip;"
    188156              tooltip="Create a new plate type with this geometry"
     
    190158            />
    191159            <tbl:button
     160              id="btnImport"
    192161              image="import.png"
    193               onclick="runPlugin('ImportItem')"
     162              data-plugin-type="IMPORT"
    194163              title="Import&hellip;"
    195164              tooltip="Import data"
     
    197166            />
    198167            <tbl:button
    199               image="export.png"
    200               onclick="runPlugin('ExportItem')"
     168              id="btnExport"
     169              image="export.png"
     170              data-plugin-type="EXPORT"
    201171              title="Export&hellip;"
    202172              tooltip="Export data"
     
    204174            />
    205175            <tbl:button
    206               image="runplugin.png"
    207               onclick="runPlugin('RunPlugin')"
     176              id="btnRunPlugin"
     177              image="runplugin.png" 
     178              data-plugin-type="OTHER"
    208179              title="Run plugin&hellip;"
    209180              tooltip="Run a plugin"
     
    214185            <tbl:button
    215186              image="help.png"
    216               onclick="<%="Main.openHelp('" + ID +"', 'plategeometry.view.properties')"%>"
     187              subclass="auto-init"
     188              data-auto-init="help"
     189              data-help-id="plategeometry.view.properties"
    217190              title="Help&hellip;"
    218191              tooltip="Get help about this page"
  • trunk/www/lims/platetypes/edit_platetype.jsp

    r6217 r6306  
    9494  {
    9595    plateType = PlateType.getById(dc, itemId);
     96    plateType.checkPermission(Permission.WRITE);
    9697    cc.setObject("item", plateType);
    9798    title = "Edit plate type -- " + HTML.encodeTags(plateType.getName());
     
    105106    }
    106107  }
    107   if (plateType != null && !plateType.hasPermission(Permission.WRITE))
    108   {
    109     throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
    110   }
    111  
    112108 
    113109  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), plateType);
    114110  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    115111  %>
    116   <base:page type="popup" title="<%=title%>">
    117   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     112  <base:page type="popup" title="<%=title%>" id="edit-page">
     113  <base:head scripts="tabcontrol-2.js,~platetypes.js" styles="tabcontrol.css">
    118114    <ext:scripts context="<%=jspContext%>" />
    119115    <ext:stylesheets context="<%=jspContext%>" />
    120     <script>
    121     // Validate the "PlateType" tab
    122     function validatePlateType()
    123     {
    124       var frm = document.forms['platetype'];
    125       if (Main.trimString(frm.name.value) == '')
    126       {
    127         Forms.showNotification(frm.name, 'You must enter a name');
    128         return false;
    129       }
    130       return true;
    131     }
    132 
    133     // Submit the form
    134     function saveSettings()
    135     {
    136       var frm = document.forms['platetype'];
    137       if (TabControl.validateActiveTab('settings'))
    138       {
    139         frm.submit();
    140       }
    141     }
    142    
    143     function init()
    144     {
    145       var frm = document.forms['platetype'];
    146       <%
    147       if (plateType == null)
    148       {
    149         %>
    150         frm.name.focus();
    151         frm.name.select();
    152         <%
    153       }
    154       %>
    155     }
    156     </script>
    157116  </base:head>
    158   <base:body onload="init()">
     117  <base:body>
    159118    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    160119    <form action="index.jsp?ID=<%=ID%>" method="post" name="platetype">
     
    165124      position="bottom" remember="<%=plateType != null%>"
    166125      extensions="<%=invoker%>">
    167     <t:tab id="info" title="Plate type" validate="validatePlateType()" helpid="platetype.edit">
     126    <t:tab id="info" title="Plate type" helpid="platetype.edit">
    168127      <table class="fullform input100 smaller">
    169128      <tr>
    170129        <th>Name</th>
    171         <td><input class="text required" type="text" name="name"
     130        <td><input class="text required auto-init" data-auto-init="<%=plateType == null ? "focus-select" : "focus" %>"
     131          type="text" name="name"
    172132          value="<%=HTML.encodeTags(plateType == null ? Values.getString(cc.getPropertyValue("name"), "New plate type") : plateType.getName())%>"
    173133          maxlength="<%=PlateType.MAX_NAME_LENGTH%>"></td>
     
    227187
    228188    <base:buttongroup subclass="dialogbuttons">
    229       <base:button onclick="saveSettings()" title="Save" />
    230       <base:button onclick="window.close()" title="Cancel" />
     189      <base:button id="btnSave" title="Save" />
     190      <base:button id="close" title="Cancel" />
    231191    </base:buttongroup>
    232192  </base:body>
  • trunk/www/lims/platetypes/eventtypes/edit_eventtype.jsp

    r6217 r6306  
    9393  {
    9494    eventType = PlateEventType.getById(dc, itemId);
     95    eventType.checkPermission(Permission.WRITE);
    9596    plateType = eventType.getPlateType();
    9697    cc.setObject("item", eventType);
     
    105106    }
    106107  }
    107   if (eventType != null && !eventType.hasPermission(Permission.WRITE))
    108   {
    109     throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
    110   }
    111  
    112108 
    113109  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), eventType);
    114110  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    115111  %>
    116   <base:page type="popup" title="<%=title%>">
    117   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     112  <base:page type="popup" title="<%=title%>" id="edit-page">
     113  <base:head scripts="tabcontrol-2.js,~eventtypes.js" styles="tabcontrol.css">
    118114    <ext:scripts context="<%=jspContext%>" />
    119115    <ext:stylesheets context="<%=jspContext%>" />
    120     <script>
    121     // Validate the "EventType" tab
    122     function validateEventType()
    123     {
    124       var frm = document.forms['eventtype'];
    125       if (Main.trimString(frm.name.value) == '')
    126       {
    127         Forms.showNotification(frm.name, 'You must enter a name');
    128         return false;
    129       }
    130       else if (Main.trimString(frm.ordinal.value) == '')
    131       {
    132         Forms.showNotification(frm.ordinal, 'You must enter an ordinal');
    133         return false;
    134       }
    135       return true;
    136     }
    137 
    138     // Submit the form
    139     function saveSettings()
    140     {
    141       var frm = document.forms['eventtype'];
    142       if (TabControl.validateActiveTab('settings'))
    143       {
    144         frm.submit();
    145       }
    146     }
    147    
    148     function selectProtocolTypeOnClick()
    149     {
    150       var frm = document.forms['eventtype'];
    151       var url = '../../../admin/itemsubtypes/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setProtocolTypeCallback';
    152       url += '&resetTemporary=1&tmpfilter:INT:itemType=<%=Item.PROTOCOL.getValue()%>';
    153       if (frm.protocoltype_id.length > 1)
    154       {
    155         var id = Math.abs(parseInt(frm.protocoltype_id[1].value));       
    156         url += '&item_id='+id;
    157       }
    158       Main.openPopup(url, 'SelectProtocolType', 1050, 700);
    159     }
    160     function setProtocolTypeCallback(id, name)
    161     {
    162       var frm = document.forms['eventtype'];
    163       var list = frm.protocoltype_id;
    164       if (list.length < 2 || list[1].value == '0') // >
    165       {
    166         Forms.addListOption(list, 1, new Option());
    167       }
    168       list[1].value = id;
    169       list[1].text = name;
    170       list.selectedIndex = 1;
    171     }
    172    
    173     function init()
    174     {
    175       var frm = document.forms['eventtype'];
    176       <%
    177       if (eventType == null)
    178       {
    179         %>
    180         frm.name.focus();
    181         frm.name.select();
    182         <%
    183       }
    184       %>
    185     }
    186     </script>
    187116  </base:head>
    188   <base:body onload="init()">
     117  <base:body>
    189118    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    190119   
     
    197126      position="bottom" remember="<%=eventType != null%>"
    198127      extensions="<%=invoker%>">
    199     <t:tab id="info" title="Event type" validate="validateEventType()" helpid="plateeventtype.edit">
     128    <t:tab id="info" title="Event type" helpid="plateeventtype.edit">
    200129      <table class="fullform input100 smaller">
    201130      <tr>
    202131        <th>Name</th>
    203         <td><input class="text required" type="text" name="name"
     132        <td><input class="text required auto-init" data-auto-init="<%=eventType == null ? "focus-select" : "focus" %>"
     133          type="text" name="name"
    204134          value="<%=HTML.encodeTags(eventType == null ? Values.getString(cc.getPropertyValue("name"), "New event type") : eventType.getName())%>"
    205135          maxlength="<%=PlateEventType.MAX_NAME_LENGTH%>"></td>
     
    208138      <tr>
    209139        <th>Ordinal</th>
    210         <td><input class="text required" type="text" name="ordinal" style="width: 15em;"
     140        <td><input class="text required" type="text" name="ordinal" id="ordinal"
     141          style="width: 15em;"
    211142          value="<%=eventType == null ? Values.getInt(cc.getPropertyValue("ordinal"), maxOrdinal+1) : eventType.getOrdinal()%>"
    212           maxlength="10" onkeypress="return Numbers.integerOnly(event)"></td>
     143          maxlength="10"></td>
    213144        <td></td>
    214145      </tr>
     
    219150            id="protocoltype_id"
    220151            clazz="selectionlist"
     152            data-protocol-type-filter="<%=Item.PROTOCOL.getValue()%>"
    221153            required="false"
    222154            current="<%=currentProtocolType%>"
     
    224156            recent="<%=recentProtocolTypes%>"
    225157            newitem="<%=eventType == null%>"
    226             onselect="selectProtocolTypeOnClick()"
    227158          />
    228159        </td>
     
    249180
    250181    <base:buttongroup subclass="dialogbuttons">
    251       <base:button onclick="saveSettings()" title="Save" />
    252       <base:button onclick="window.close()" title="Cancel" />
     182      <base:button id="btnSave" title="Save" />
     183      <base:button id="close" title="Cancel" />
    253184    </base:buttongroup>
    254185  </base:body>
  • trunk/www/lims/platetypes/eventtypes/index.jsp

    r6192 r6306  
    179179    RemovableUtil.delete(dc, itemType, Collections.singleton(cc.getId()));
    180180    dc.commit();
    181     redirect = viewPage;
     181    redirect = listPage;
    182182  }
    183183  else if ("DeleteItems".equals(cmd))
  • trunk/www/lims/platetypes/eventtypes/list_eventtypes.jsp

    r6221 r6306  
    9797  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
    9898  %>
    99   <base:page title="<%=title%>" type="<%=mode.getPageType()%>">
    100   <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
     99  <base:page title="<%=title%>" type="<%=mode.getPageType()%>" id="list-page">
     100  <base:head scripts="table.js,tabcontrol-2.js,~eventtypes.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
    101101    <ext:scripts context="<%=jspContext%>" />
    102102    <ext:stylesheets context="<%=jspContext%>" />
    103     <script>
    104     var submitPage = 'index.jsp';
    105     var formId = 'eventtypes';
    106     function newItem()
    107     {
    108       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true, '&platetype_id=<%=plateTypeId%>');
    109     }
    110     function editItem(itemId)
    111     {
    112       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
    113     }
    114     function viewItem(itemId)
    115     {
    116       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
    117     }
    118     function itemOnClick(evt, itemId)
    119     {
    120       Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
    121     }
    122     function deleteItems()
    123     {
    124       var frm = document.forms[formId];
    125       var numChecked = Forms.numChecked(frm);
    126       if (numChecked == 0)
    127       {
    128         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    129         return;
    130       }
    131       else
    132       {
    133         var rep = numChecked == 1 ? 'event type' : 'event type';
    134         if (!confirm('You are about to delete '+numChecked+' '+rep+'. This can\'t be undone. Continue?'))
    135         {
    136           return;
    137         }
    138       }
    139       frm.action = submitPage;
    140       frm.cmd.value = 'DeleteItems';
    141       frm.submit();
    142     }
    143     function configureColumns()
    144     {
    145       Table.configureColumns(formId);
    146     }
    147     function runPlugin(cmd)
    148     {
    149       Table.submitToPopup(formId, cmd, 750, 500);
    150     }
    151     function returnSelected()
    152     {
    153       Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
    154       window.close();
    155     }
    156     function switchTab(tabControlId, tabId)
    157     {
    158       if (tabId == 'properties')
    159       {
    160         location.href = '../index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=plateTypeId%>';
    161       }
    162       else
    163       {
    164         TabControl.setActiveTab(tabControlId, tabId);
    165       }
    166     }
    167     </script>
    168103  </base:head>
    169104  <base:body>
     
    176111      id="main"
    177112      subclass="content mastertabcontrol"
    178       active="events" switch="switchTab">
     113      active="events">
    179114    <t:tab id="properties" title="Properties" />
    180115    <t:tab id="events" title="Event types">
     
    261196          >
    262197          <tbl:button
     198            id="btnNewItem"
     199            data-extra-url="<%="&platetype_id="+plateTypeId%>"
    263200            disabled="<%=!createPermission%>"
    264201            image="new.png"
    265             onclick="newItem()"
    266202            title="New&hellip;"
    267203            tooltip="<%=createPermission ? "Create new event type" : "You do not have permission to create event types"%>"
    268204          />
    269205          <tbl:button
     206            id="btnDeleteItems"
    270207            disabled="<%=!deletePermission%>"
    271208            image="delete.png"
     209            data-confirm="1"
    272210            title="Delete&hellip;"
    273             onclick="deleteItems()"
    274211            tooltip="<%=deletePermission ? "Delete the selected event types" : "You do not have permission to delete event types"%>"
    275212          />
    276213          <tbl:button
     214            id="btnColumns"
    277215            image="columns.png"
    278             onclick="configureColumns()"
    279216            title="Columns&hellip;"
    280217            tooltip="Show, hide and re-order columns"
    281218          />
    282219          <tbl:button
     220            id="btnImport"
     221            data-plugin-type="IMPORT"
    283222            image="import.png"
    284             onclick="runPlugin('ImportItems')"
    285223            title="Import&hellip;"
    286224            tooltip="Import data"
     
    288226          />
    289227          <tbl:button
     228            id="btnExport"
     229            data-plugin-type="EXPORT"
    290230            image="export.png"
    291             onclick="runPlugin('ExportItems')"
    292231            title="Export&hellip;"
    293232            tooltip="Export data"
     
    295234          />
    296235          <tbl:button
     236            id="btnRunPlugin"
     237            data-plugin-type="OTHER"
    297238            image="runplugin.png"
    298             onclick="runPlugin('RunListPlugin')"
    299239            title="Run plugin&hellip;"
    300240            tooltip="Run a plugin"
     
    396336                  visible="<%=mode.hasIcons()%>"
    397337                  >&nbsp;</tbl:header>
    398                 <tbl:cell column="name"><div class="link"
    399                   onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)"
     338                <tbl:cell column="name"><div
     339                  class="link table-item"
     340                  data-item-id="<%=itemId%>"
     341                  data-no-edit="<%=writePermission ? 0 : 1 %>"
     342                  data-extra-url="&platetype_id=<%=plateTypeId%>"
     343                  tabindex="0"
    400344                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
    401345                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
     
    435379
    436380    <base:buttongroup>
    437       <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
    438       <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
    439       <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
     381      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
     382      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
     383      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
    440384    </base:buttongroup>
    441385
  • trunk/www/lims/platetypes/eventtypes/view_eventtype.jsp

    r6146 r6306  
    8080  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
    8181  %>
    82   <base:page title="<%=title%>">
    83   <base:head scripts="table.js,tabcontrol.js" styles="toolbar.css,table.css,headertabcontrol.css,path.css">
     82  <base:page title="<%=title%>" id="view-page">
     83  <base:head scripts="table.js,tabcontrol-2.js,~eventtypes.js" styles="toolbar.css,table.css,headertabcontrol.css,path.css">
    8484    <ext:scripts context="<%=jspContext%>" />
    8585    <ext:stylesheets context="<%=jspContext%>" />
    86     <script>
    87     function editItem()
    88     {
    89       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
    90     }
    91     function deleteItem()
    92     {
    93       if (confirm('This can\'t be undone. Continue?'))
    94       {
    95         location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&platetype_id=<%=plateTypeId%>&item_id=<%=itemId%>');
    96       }
    97     }
    98     function runPlugin(cmd)
    99     {
    100       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&platetype_id=<%=plateTypeId%>&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
    101     }
    102     </script>
    10386  </base:head>
    10487  <base:body>
     
    11093      /><p:pathelement title="<%=HTML.encodeTags(eventType.getName())%>"
    11194      /></p:path>
     95    <div id="page-data" data-item-id="<%=itemId%>" data-platetype-id="<%=plateTypeId%>"></div>
    11296   
    11397    <t:tabcontrol
     
    123107          <tbl:toolbar subclass="bottomborder">
    124108            <tbl:button
     109              id="btnEdit"
    125110              disabled="<%=!writePermission%>"
    126111              image="edit.png"
    127               onclick="editItem()"
    128112              title="Edit&hellip;"
    129113              tooltip="<%=writePermission ? "Edit this event type" : "You do not have permission to edit this event type"%>"
    130114            />
    131115            <tbl:button
     116              id="btnDelete"
     117              data-confirm="1"
    132118              disabled="<%=!deletePermission%>"
    133119              image="delete.png"
    134               onclick="deleteItem()"
    135120              title="Delete"
    136121              tooltip="<%=deletePermission ? "Delete this event type" : "You do not have permission to event this plate type"%>"
    137122            />
    138123            <tbl:button
     124              id="btnImport"
    139125              image="import.png"
    140               onclick="runPlugin('ImportItem')"
     126              data-plugin-type="IMPORT"
    141127              title="Import&hellip;"
    142128              tooltip="Import data"
     
    144130            />
    145131            <tbl:button
    146               image="export.png"
    147               onclick="runPlugin('ExportItem')"
     132              id="btnExport"
     133              image="export.png"
     134              data-plugin-type="EXPORT"
    148135              title="Export&hellip;"
    149136              tooltip="Export data"
     
    151138            />
    152139            <tbl:button
    153               image="runplugin.png"
    154               onclick="runPlugin('RunPlugin')"
     140              id="btnRunPlugin"
     141              image="runplugin.png" 
     142              data-plugin-type="OTHER"
    155143              title="Run plugin&hellip;"
    156144              tooltip="Run a plugin"
     
    161149              <tbl:button
    162150                image="help.png"
    163                 onclick="<%="Main.openHelp('" + ID +"', 'plateeventtype.view.properties')"%>"
     151                subclass="auto-init"
     152                data-auto-init="help"
     153                data-help-id="plateeventtype.view.properties"
    164154                title="Help&hellip;"
    165155                tooltip="Get help about this page"
  • trunk/www/lims/platetypes/list_platetypes.jsp

    r6221 r6306  
    115115  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
    116116  %>
    117   <base:page title="<%=title==null ? "Plate types" : title%>" type="<%=mode.getPageType()%>">
    118   <base:head scripts="table.js" styles="table.css,toolbar.css">
     117  <base:page title="<%=title==null ? "Plate types" : title%>" type="<%=mode.getPageType()%>" id="list-page">
     118  <base:head scripts="table.js,~platetypes.js" styles="table.css,toolbar.css">
    119119    <ext:scripts context="<%=jspContext%>" />
    120120    <ext:stylesheets context="<%=jspContext%>" />
    121     <script>
    122     var submitPage = 'index.jsp';
    123     var formId = 'platetypes';
    124     function newItem()
    125     {
    126       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
    127     }
    128     function editItem(itemId)
    129     {
    130       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
    131     }
    132     function viewItem(itemId)
    133     {
    134       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
    135     }
    136     function itemOnClick(evt, itemId)
    137     {
    138       Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
    139     }
    140     function deleteItems()
    141     {
    142       var frm = document.forms[formId];
    143       if (Forms.numChecked(frm) == 0)
    144       {
    145         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    146         return;
    147       }
    148       frm.action = submitPage;
    149       frm.cmd.value = 'DeleteItems';
    150       frm.submit();
    151     }
    152     function restoreItems()
    153     {
    154       var frm = document.forms[formId];
    155       if (Forms.numChecked(frm) == 0)
    156       {
    157         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    158         return;
    159       }
    160       frm.action = submitPage;
    161       frm.cmd.value = 'RestoreItems';
    162       frm.submit();
    163     }
    164     function setOwner()
    165     {
    166       Table.setOwnerOfItems(formId);
    167     }
    168     function shareItems()
    169     {
    170       Table.shareItems(formId);
    171     }
    172     function configureColumns()
    173     {
    174       Table.configureColumns(formId);
    175     }
    176     function runPlugin(cmd)
    177     {
    178       Table.submitToPopup(formId, cmd, 750, 500);
    179     }
    180     function returnSelected()
    181     {
    182       Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
    183       window.close();
    184     }
    185     </script>
    186121  </base:head>
    187122 
     
    302237          >
    303238          <tbl:button
     239            id="btnNewItem"
    304240            disabled="<%=!createPermission%>"
    305241            image="new.png"
    306             onclick="newItem()"
    307242            title="New&hellip;"
    308243            tooltip="<%=createPermission ? "Create new plate type" : "You do not have permission to create plate types"%>"
    309244          />
    310245          <tbl:button
     246            id="btnDeleteItems"
    311247            image="delete.png"
    312             onclick="deleteItems()"
    313248            title="Delete"
    314249            tooltip="Delete the selected items"
    315250          />
    316251          <tbl:button
     252            id="btnRestoreItems"
    317253            image="restore.png"
    318             onclick="restoreItems()"
    319254            title="Restore"
    320255            tooltip="Restore the selected (deleted) items"
    321256          />
    322257          <tbl:button
     258            id="btnShareItems"
    323259            image="share.png"
    324             onclick="shareItems()"
    325260            title="Share&hellip;"
    326261            tooltip="Share the selected items"
    327262          />
    328263          <tbl:button
     264            id="btnSetOwner"
    329265            image="take_ownership.png"
    330             onclick="setOwner()"
    331266            title="Set owner&hellip;"
    332267            tooltip="Change owner of the selected items"
    333268          />
    334269          <tbl:button
     270            id="btnColumns"
    335271            image="columns.png"
    336             onclick="configureColumns()"
    337272            title="Columns&hellip;"
    338273            tooltip="Show, hide and re-order columns"
    339274          />
    340275          <tbl:button
     276            id="btnImport"
     277            data-plugin-type="IMPORT"
    341278            image="import.png"
    342             onclick="runPlugin('ImportItems')"
    343279            title="Import&hellip;"
    344280            tooltip="Import data"
     
    346282          />
    347283          <tbl:button
     284            id="btnExport"
     285            data-plugin-type="EXPORT"
    348286            image="export.png"
    349             onclick="runPlugin('ExportItems')"
    350287            title="Export&hellip;"
    351288            tooltip="Export data"
     
    353290          />
    354291          <tbl:button
     292            id="btnRunPlugin"
     293            data-plugin-type="OTHER"
    355294            image="runplugin.png"
    356             onclick="runPlugin('RunListPlugin')"
    357295            title="Run plugin&hellip;"
    358296            tooltip="Run a plugin"
     
    473411                    visible="<%=item.isShared()%>"
    474412                  />&nbsp;</tbl:header>
    475                 <tbl:cell column="name"><div class="link"
    476                   onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)"
     413                <tbl:cell column="name"><div
     414                  class="link table-item"
     415                  data-item-id="<%=itemId%>"
     416                  data-no-edit="<%=writePermission ? 0 : 1 %>"
     417                  tabindex="0"
    477418                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
    478419                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
     
    563504   
    564505    <base:buttongroup subclass="dialogbuttons">
    565       <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
    566       <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
    567       <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
     506      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
     507      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
     508      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
    568509    </base:buttongroup>
    569510   
  • trunk/www/lims/platetypes/view_platetype.jsp

    r6136 r6306  
    100100  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
    101101  %>
    102   <base:page title="<%=title%>">
    103   <base:head scripts="table.js,tabcontrol.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
     102  <base:page title="<%=title%>" id="view-page">
     103  <base:head scripts="table.js,tabcontrol-2.js,~platetypes.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
    104104    <ext:scripts context="<%=jspContext%>" />
    105105    <ext:stylesheets context="<%=jspContext%>" />
    106     <script>
    107     function editItem()
    108     {
    109       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
    110     }
    111     function shareItem()
    112     {
    113       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'SharePlateType', 600, 400);
    114     }
    115     function deleteItem()
    116     {
    117       location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
    118     }
    119     function restoreItem()
    120     {
    121       location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
    122     }
    123     function deleteItemPermanently()
    124     {
    125       Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
    126     }
    127     function itemDeleted()
    128     {
    129       Main.listItems('<%=ID%>', '<%=itemType.name()%>');
    130     }
    131     function showUsingItems()
    132     {
    133       Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
    134     }
    135     function setOwner()
    136     {
    137       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
    138     }
    139     function runPlugin(cmd)
    140     {
    141       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
    142     }
    143     function viewEventTypes()
    144     {
    145       location.href = 'eventtypes/index.jsp?ID=<%=ID%>&cmd=List&platetype_id=<%=itemId%>';
    146     }
    147     function switchTab(tabControlId, tabId)
    148     {
    149       if (tabId == 'events')
    150       {
    151         viewEventTypes();
    152       }
    153       else
    154       {
    155         TabControl.setActiveTab(tabControlId, tabId);
    156       }
    157     }
    158     </script>
    159106  </base:head>
    160107  <base:body>
     
    163110      /><p:pathelement title="<%=HTML.encodeTags(plateType.getName())%>"
    164111      /></p:path>
     112    <div id="page-data" data-item-id="<%=itemId%>"></div>
    165113   
    166114    <t:tabcontrol
    167115      id="main"
    168116      subclass="content mastertabcontrol"
    169       active="properties" switch="switchTab">
     117      active="properties">
    170118    <t:tab id="properties" title="Properties">
    171119      <div>
     
    179127          />
    180128          <base:icon
     129            id="btnDeletePermanently"
    181130            image="deleted.png"
    182             onclick="deleteItemPermanently()"
    183131            tooltip="This item has been flagged for deletion. Click to delete it now."
    184132            enabled="<%=deletePermanentlyPermission %>"
    185133            visible="<%=isRemoved%>"
    186134          />
    187           <base:icon image="used.png"
    188             onclick="showUsingItems()"
     135          <base:icon
     136            id="btnUsingItems"
     137            image="used.png"
    189138            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
    190139            visible="<%=isRemoved && isUsed%>" />
     
    193142          <tbl:toolbar subclass="bottomborder">
    194143            <tbl:button
     144              id="btnEdit"
    195145              disabled="<%=!writePermission%>"
    196146              image="edit.png"
    197               onclick="editItem()"
    198147              title="Edit&hellip;"
    199148              tooltip="<%=writePermission ? "Edit this plate type" : "You do not have permission to edit this plate type"%>"
    200149            />
    201150            <tbl:button
     151              id="btnDelete"
    202152              disabled="<%=!deletePermission%>"
    203153              image="delete.png"
    204               onclick="deleteItem()"
    205154              title="Delete"
    206155              visible="<%=!plateType.isRemoved()%>"
     
    208157            />
    209158            <tbl:button
     159              id="btnRestore"
    210160              disabled="<%=!writePermission%>"
    211161              image="restore.png"
    212               onclick="restoreItem()"
    213162              title="Restore"
    214163              visible="<%=plateType.isRemoved()%>"
     
    216165            />
    217166            <tbl:button
     167              id="btnShare"
    218168              disabled="<%=!sharePermission%>"
    219169              image="share.png"
    220               onclick="shareItem()"
    221170              title="Share&hellip;"
    222171              tooltip="<%=sharePermission ? "Share this plate type to other user, groups and projects" : "You do not have permission to share this plate type"%>"
    223172            />
    224173            <tbl:button
     174              id="btnSetOwner"
    225175              disabled="<%=!setOwnerPermission%>"
    226176              image="take_ownership.png"
    227               onclick="setOwner()"
    228177              title="Set owner&hellip;"
    229178              tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
    230179            />
    231180            <tbl:button
     181              id="btnImport"
    232182              image="import.png"
    233               onclick="runPlugin('ImportItem')"
     183              data-plugin-type="IMPORT"
    234184              title="Import&hellip;"
    235185              tooltip="Import data"
     
    237187            />
    238188            <tbl:button
    239               image="export.png"
    240               onclick="runPlugin('ExportItem')"
     189              id="btnExport"
     190              image="export.png"
     191              data-plugin-type="EXPORT"
    241192              title="Export&hellip;"
    242193              tooltip="Export data"
     
    244195            />
    245196            <tbl:button
    246               image="runplugin.png"
    247               onclick="runPlugin('RunPlugin')"
     197              id="btnRunPlugin"
     198              image="runplugin.png" 
     199              data-plugin-type="OTHER"
    248200              title="Run plugin&hellip;"
    249201              tooltip="Run a plugin"
     
    254206            <tbl:button
    255207              image="help.png"
    256               onclick="<%="Main.openHelp('" + ID +"', 'platetype.view.properties')"%>"
     208              subclass="auto-init"
     209              data-auto-init="help"
     210              data-help-id="platetype.view.properties"
    257211              title="Help&hellip;"
    258212              tooltip="Get help about this page"
Note: See TracChangeset for help on using the changeset viewer.