source: trunk/www/biomaterials/bioplates/view_bioplate.jsp @ 6199

Last change on this file since 6199 was 6199, checked in by Nicklas Nordborg, 9 years ago

References #1729: Move in-page <script> elements to external *.js files

Removed obsolete code for JSON and AJAX support in older browsers.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 20.6 KB
Line 
1<%-- $Id: view_bioplate.jsp 6199 2012-11-02 08:35:29Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Martin Svensson
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Martin
24  @version 2.10
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.SystemItems"
30  import="net.sf.basedb.core.Group"
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.Permission"
34  import="net.sf.basedb.core.AnnotationType"
35  import="net.sf.basedb.core.AnnotationSet"
36  import="net.sf.basedb.core.BioPlate"
37  import="net.sf.basedb.core.BioWell"
38  import="net.sf.basedb.core.MeasuredBioMaterial"
39  import="net.sf.basedb.core.PlateGeometry"
40  import="net.sf.basedb.core.User"
41  import="net.sf.basedb.core.ItemQuery"
42  import="net.sf.basedb.core.Include"
43  import="net.sf.basedb.core.ItemResultList"
44  import="net.sf.basedb.core.MultiPermissions"
45  import="net.sf.basedb.core.PermissionDeniedException"
46  import="net.sf.basedb.core.PluginDefinition"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.core.plugin.Plugin"
49  import="net.sf.basedb.core.Project"
50  import="net.sf.basedb.core.query.Orders"
51  import="net.sf.basedb.core.query.Hql"
52  import="net.sf.basedb.clients.web.Base"
53  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
54  import="net.sf.basedb.clients.web.PermissionUtil"
55  import="net.sf.basedb.clients.web.util.HTML"
56  import="net.sf.basedb.util.Values"
57  import="net.sf.basedb.util.formatter.Formatter"
58  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
59  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
60  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
61  import="net.sf.basedb.clients.web.extensions.JspContext"
62  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
63  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
64  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
65  import="java.util.Collections"
66  import="java.util.Date"
67  import="java.util.Map"
68  import="java.util.Set"
69  import="java.util.List"
70%>
71<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
72<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
73<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
74<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
75<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
76<%!
77  private static final Item itemType = Item.BIOPLATE;
78  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
79%>
80<%
81final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
82final String ID = sc.getId();
83final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
84final int itemId = cc.getId();
85final String tab = Values.getString(request.getParameter("tab"), "properties");
86final float scale = Base.getScale(sc);
87final DbControl dc = sc.newDbControl();
88try
89{
90  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
91
92  String title = null;
93  BioPlate bioplate = BioPlate.getById(dc, itemId);
94  Item bioMaterialType = bioplate.getBioPlateType().getBioMaterialType();
95  PlateGeometry geometry = bioplate.getPlateGeometry();
96 
97  final boolean writePermission = bioplate.hasPermission(Permission.WRITE);
98  final boolean deletePermission = bioplate.hasPermission(Permission.DELETE);
99  final boolean sharePermission = bioplate.hasPermission(Permission.SET_PERMISSION);
100  final boolean setOwnerPermission = bioplate.hasPermission(Permission.SET_OWNER);
101  final boolean isRemoved = bioplate.isRemoved();
102  final boolean isUsed = isRemoved && bioplate.isUsed();
103  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
104  final boolean isOwner = bioplate.isOwner();
105  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, bioplate);
106  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
107  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
108  %>
109  <base:page title="<%=title%>">
110  <base:head scripts="tabcontrol.js,table.js" 
111    styles="toolbar.css,table.css,headertabcontrol.css,path.css,plate.css">
112    <ext:scripts context="<%=jspContext%>" />
113    <ext:stylesheets context="<%=jspContext%>" />
114    <script>
115    function editItem()
116    {
117      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
118    }
119    function shareItem()
120    {
121      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'SharePlate', 600, 400);
122    }
123    function deleteItem()
124    {
125      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
126    }
127    function restoreItem()
128    {
129      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
130    }
131    function deleteItemPermanently()
132    {
133      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
134    }
135    function itemDeleted()
136    {
137      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
138    }
139    function showUsingItems()
140    {
141      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
142    }
143    function setOwner()
144    {
145      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
146    }
147    function runPlugin(cmd)
148    {
149      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
150    }
151    function viewWells()
152    {
153      location.href = 'wells/index.jsp?ID=<%=ID%>&bioplate_id=<%=itemId%>';
154    }
155    function viewEvents()
156    {
157      location.href = 'events/index.jsp?ID=<%=ID%>&bioplate_id=<%=itemId%>';
158    }
159    function switchTab(tabControlId, tabId)
160    {
161      if ((tabId == 'overview' || tabId == 'history') && tabId != '<%=tab%>')
162      {
163        location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=itemId%>&tab='+tabId;
164      }
165      else if (tabId == 'wells')
166      {
167        viewWells();
168      }
169      else if (tabId == 'events')
170      {
171        viewEvents();
172      }
173      else
174      {
175        TabControl.setActiveTab(tabControlId, tabId);
176      }
177    }
178    function editWell(wellId)
179    {
180      Main.viewOrEditItem('<%=ID%>', 'BIOWELL', wellId, true);
181    }
182    function showWellInfo(evt, coordinate, wellId)
183    {
184      // Display the 'wellInfo' postit note
185      var wellInfo = document.getElementById('wellInfo');
186      var wellTd = document.getElementById('well.' + wellId);
187      var pos = Main.getElementPosition(wellTd);
188      wellInfo.style.left = (pos.left + pos.width - 5) + 'px';
189      wellInfo.style.top = (pos.top + 10) + 'px';
190      Main.show('wellInfo');
191
192      // Get the well information
193      var info = wellInfoCache['well.'+wellId];
194      if (!info)
195      {
196        // Use Ajax to load the information
197        wellInfo.innerHTML = '[' + coordinate + '] loading, please wait...';
198        info = loadWellInfo(wellId);
199      }
200      var html;
201      var bioMaterial = info.bioMaterial;
202      if (bioMaterial)
203      {
204        if (bioMaterial.denied)
205        {
206          html = 'Denied';
207        }
208        else
209        {
210          var id = bioMaterial.id;
211          var type = bioMaterial.type;
212          var subtype = bioMaterial.subtype;
213          html = Main.linkItem('<%=ID%>', type, id, bioMaterial.editable, bioMaterial.name);
214          html += ': <b>' + type + '</b>';
215          if (subtype) html += ' <span class="itemsubtype">[' + subtype.name + ']</span>';
216          html += '<br>'+bioMaterial.description;
217        }
218      }
219      else
220      {
221        html = 'Empty';
222      }
223      wellInfo.innerHTML = html;
224    }
225    function hideWellInfo()
226    {
227      Main.hide('wellInfo');
228    }
229    var wellInfoCache = new Array();
230    function loadWellInfo(wellId)
231    {
232      var request = Ajax.getXmlHttpRequest();
233      var url = 'wells/ajax.jsp?ID=<%=ID%>&cmd=WellInfo&encodeStrings=1&item_id=' + wellId;
234      request.open("GET", url, false);
235      // NOTE! 'false' causes code to wait for the response. aka. 'Synchronous AJAX' or SJAX.
236      request.send(null);
237      var response = JSON.parse(request.responseText);
238      if (response.status != 'ok')
239      {
240        alert(response.message);
241        return false;
242      }
243
244      wellInfoCache['well.'+wellId] = response;
245      return response;
246    }
247    function viewOrEditWellItem(event, itemType, itemId, editable)
248    {
249      //Main.viewOrEditItem('<%=ID%>', itemType, itemId, editable);
250      Main.itemOnClick(event, '<%=ID%>', itemType, itemId, editable);
251    }
252    function moveBioMaterial()
253    {
254      Main.openPopup('index.jsp?ID=<%=ID%>&item_id=<%=itemId%>&cmd=MoveBioMaterial', 'MoveBioMaterial', 900, 600);
255    }
256    function createChildBioPlate()
257    {
258      Main.openPopup('index.jsp?ID=<%=ID%>&item_id=<%=itemId%>&cmd=CreateChildBioPlate', 'CreateChildBioPlate', 900, 600);
259    }
260    </script>
261  </base:head>
262  <base:body>
263    <p:path><p:pathelement 
264      title="Bioplates" href="<%="index.jsp?ID="+ID%>" /><p:pathelement 
265      title="<%=HTML.encodeTags(bioplate.getName())%>" /></p:path>
266   
267    <t:tabcontrol id="main" 
268      subclass="content mastertabcontrol"
269      active="<%=tab%>" switch="switchTab" remember="false">
270    <t:tab id="properties" title="Properties">
271      <div>
272      <table class="fullform">
273      <tr>
274        <th class="itemstatus">
275          <base:icon 
276            image="shared.png" 
277            visible="<%=bioplate.isShared()%>"
278            tooltip="This item is shared to other users, groups and/or projects"
279          />
280          <base:icon 
281            image="deleted.png"
282            onclick="deleteItemPermanently()"
283            tooltip="This item has been flagged for deletion. Click to delete it now."
284            enabled="<%=deletePermanentlyPermission %>"
285            visible="<%=isRemoved%>" 
286          />
287          <base:icon image="used.png" 
288            onclick="showUsingItems()"
289            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
290            visible="<%=isRemoved && isUsed%>" />
291        </th>
292        <td style="padding: 0px;">
293          <tbl:toolbar subclass="bottomborder">
294            <tbl:button 
295              disabled="<%=!writePermission%>" 
296              image="edit.png" 
297              onclick="editItem()" 
298              title="Edit&hellip;" 
299              tooltip="<%=writePermission ? "Edit this bioplate" : "You do not have permission to edit this bioplate"%>" 
300            />
301            <tbl:button 
302              disabled="<%=!deletePermission%>" 
303              image="delete.png" 
304              onclick="deleteItem()" 
305              title="Delete"
306              visible="<%=!bioplate.isRemoved()%>"
307              tooltip="<%=deletePermission ? "Delete this bioplate" : "You do not have permission to delete this bioplate"%>" 
308            />
309            <tbl:button 
310              disabled="<%=!writePermission%>" 
311              image="restore.png" 
312              onclick="restoreItem()" 
313              title="Restore"
314              visible="<%=bioplate.isRemoved()%>"
315              tooltip="<%=writePermission ? "Restore this bioplate" : "You do not have permission to restore this bioplate"%>" 
316            />
317            <tbl:button 
318              disabled="<%=!sharePermission%>"
319              image="share.png"
320              onclick="shareItem()" 
321              title="Share&hellip;" 
322              tooltip="<%=sharePermission ? "Share this bioplate to other user, groups and projects" : "You do not have permission to share this bioplate"%>"
323            />
324            <tbl:button 
325              disabled="<%=!setOwnerPermission%>"
326              image="take_ownership.png"
327              onclick="setOwner()" 
328              title="Set owner&hellip;"
329              tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
330            />
331            <tbl:button 
332              image="move_to_plate.png" 
333              onclick="moveBioMaterial()" 
334              title="Move biomaterial&hellip;" 
335              tooltip="Move biomaterial on this plate to another plate" 
336            />
337            <tbl:button 
338              image="add.png" 
339              onclick="createChildBioPlate()" 
340              title="<%="Create child bioplate" + (bioMaterialType == Item.EXTRACT ? "/bioassay" : "") +"&hellip;"%>" 
341              tooltip="Create one or more child biomaterial plates" 
342              visible="<%=bioMaterialType != null%>"
343            />
344            <tbl:button 
345              image="import.png" 
346              onclick="runPlugin('ImportItem')" 
347              title="Import&hellip;" 
348              tooltip="Import data" 
349              visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
350            />
351            <tbl:button 
352              image="export.png" 
353              onclick="runPlugin('ExportItem')" 
354              title="Export&hellip;" 
355              tooltip="Export data" 
356              visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
357            />
358            <tbl:button 
359              image="runplugin.png" 
360              onclick="runPlugin('RunPlugin')" 
361              title="Run plugin&hellip;" 
362              tooltip="Run a plugin" 
363              visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
364            />
365            <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
366              wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
367            <tbl:button
368              image="help.png"
369              onclick="<%="Main.openHelp('" + ID +"', 'plate.view.properties')"%>"
370              title="Help&hellip;"
371              tooltip="Get help about this page"
372            />
373          </tbl:toolbar>
374        </td>
375      </tr>
376    </table>
377    <table style="width: 100%; height: <%=geometry.getRows()*35+20 %>px;" class="bottomborder">
378    <tr style="vertical-align: top;">
379      <td style="width: 50%; height: 100%;">
380      <table class="fullform" >
381      <tr>
382        <th>Name</th>
383        <td><%=HTML.encodeTags(bioplate.getName())%></td>
384      </tr>
385      <tr>
386        <th>Barcode</th>
387        <td><%=HTML.encodeTags(bioplate.getBarcode())%></td>
388      </tr>
389      <tr>
390        <th>Created</th>
391        <td><%=dateFormatter.format(bioplate.getEventDate())%></td>
392      </tr>
393      <tr>
394        <th>Registered</th>
395        <td><%=dateFormatter.format(bioplate.getEntryDate())%></td>
396      </tr>
397      <tr>
398        <th>Destroyed</th>
399        <td><%=bioplate.isDestroyed() ? "yes" : "no"%></td>
400      </tr>
401      <tr>
402        <th>Bioplate type</th>
403        <td><base:propertyvalue item="<%=bioplate%>" property="bioPlateType" /></td>
404      </tr>
405      <tr>
406        <th>Geometry</th>
407        <td><base:propertyvalue item="<%=bioplate%>" property="plateGeometry" /></td>
408      </tr>
409      <tr>
410        <th>Free (total) wells</th>
411        <td><%=bioplate.getFreeWells()%> (<%=bioplate.getTotalWells()%>)</td>
412      </tr>
413      <tr>
414        <th>Storage location</th>
415        <td><base:propertyvalue item="<%=bioplate%>" property="freezer" /></td>
416      </tr>
417      <tr>
418        <th class="subprompt"></th>
419        <td>
420          <b>Section</b>: <%=HTML.encodeTags(Values.getString(bioplate.getSection(), "-")) %>;
421          <b>Tray</b>: <%=HTML.encodeTags(Values.getString(bioplate.getTray(), "-")) %>;
422          <b>Position</b>: <%=HTML.encodeTags(Values.getString(bioplate.getPosition(), "-")) %>
423        </td>
424      </tr>
425      <tr>
426        <th>Owner</th>
427        <td><base:propertyvalue item="<%=bioplate%>" property="owner" /></td>
428      </tr>
429      <tr>
430        <th>Permissions</th>
431        <td><%=PermissionUtil.getFullPermissionNames(bioplate)%></td>
432      </tr>
433      <tr class="dynamic">
434        <th>Description</th>
435        <td><%=HTML.niceFormat(bioplate.getDescription())%></td>
436      </tr>
437      </table>
438      </td>
439      <td style="width: 50%; padding: 1em;" onmouseout="hideWellInfo();">
440        <table class="plate" onmouseout="event.cancelBubble=true">
441        <%
442        int columns = geometry.getColumns();
443        int rows = geometry.getRows();
444        WellCoordinateFormatter rowF = new WellCoordinateFormatter(true);
445        WellCoordinateFormatter colF = new WellCoordinateFormatter(false);
446        %>
447        <tr><td></td>
448        <%
449        for (int c = 0; c < columns; ++c)
450        {
451          %>
452          <td class="columnheader"><%=colF.format(c)%></td>
453          <%
454        }
455        %>
456        </tr>
457        <%
458        for (int r = 0; r < rows; ++r)
459        {
460          String row = rowF.format(r);
461          %>
462          <tr><td class="rowheader"><%=row%></td>
463          <%
464          for (int c = 0; c < columns; ++c)
465          {
466            BioWell well = bioplate.getBioWell(r, c);
467            if (well == null) continue;
468            boolean isEmpty = well.isEmpty();
469            boolean hasBeenUsed = well.hasBeenUsed();
470            boolean canAddBioMaterial = well.canAddBioMaterial();
471            boolean canClearBioMaterial = well.canClearBioMaterial();
472            boolean usePermission = well.hasPermission(Permission.USE);
473           
474            boolean deniedBioMaterial = false;
475           
476            String cls = "well";
477            String tooltip = "";
478            String onClick = null;
479            String onMouseOver = "hideWellInfo()";
480           
481            if (isEmpty)
482            {
483              cls += " empty";
484              if (usePermission && canAddBioMaterial)
485              {
486                // The used is allowed to add biomaterial to the empty well
487                cls += " editable";
488                onClick = "editWell(" + well.getId() + ")";
489                tooltip = "Add biomaterial to this well";
490              }
491              else if (hasBeenUsed) 
492              {
493                // The well has been used and it is not allowed to add biomaterial
494                cls += " wasused";
495                onMouseOver = "showWellInfo(event, '" + row + (c+1) + "', " + well.getId() + ")";
496                tooltip = "This well has already been used";
497              }
498              else
499              {
500                // The user doesn't have permission to add biomaterial
501                cls += " locked";
502                tooltip = "You are not allowed to add biomaterial to this well";
503              }
504            }
505            else
506            {
507              cls += " used";
508              try
509              {
510                MeasuredBioMaterial bioMaterial = well.getBioMaterial();
511                onMouseOver = "showWellInfo(event, '" + row + (c+1) + "', " + well.getId() + ")";
512                if (usePermission && canClearBioMaterial && bioMaterial.hasPermission(Permission.WRITE))
513                {
514                  // The user is allowed to replace/remove the biomaterial in the well
515                  cls += " editable";
516                  onClick = "editWell(" + well.getId() + ")";
517                  if (canAddBioMaterial)
518                  {
519                    // Replace and/or remove
520                    tooltip = "Change biomaterial in this well";
521                  }
522                  else
523                  {
524                    // Remove only
525                    tooltip = "Remove the biomaterial from this well";
526                  }
527                }
528                else
529                {
530                  cls += " locked";
531                  tooltip = "This well is locked for modifications";
532                }
533              }
534              catch (PermissionDeniedException ex)
535              {
536                cls += " denied";
537                tooltip = "Access denied";
538              }
539            }
540            %>
541            <td class="<%=cls%>" id="well.<%=well.getId()%>"
542              <%=onClick != null ? "onclick=\"" + onClick + "\"" : ""%>
543              <%=onMouseOver != null ? "onmouseover=\"" + onMouseOver + "\"" : ""%>
544              title="<%=tooltip%>"></td>
545            <%
546          }
547          %>
548          </tr>
549          <%
550        }
551        %>
552        </table>
553      </td>
554    </tr>
555    </table>
556    </div>
557     
558      <jsp:include page="../../common/anytoany/list_anytoany.jsp">
559        <jsp:param name="ID" value="<%=ID%>" />
560        <jsp:param name="item_type" value="<%=itemType.name()%>" />
561        <jsp:param name="item_id" value="<%=itemId%>" />
562        <jsp:param name="title" value="Other items related to this bioplate" />
563      </jsp:include>
564      <jsp:include page="../../common/share/list_share.jsp">
565        <jsp:param name="ID" value="<%=ID%>" />
566        <jsp:param name="item_type" value="<%=itemType.name()%>" />
567        <jsp:param name="item_id" value="<%=itemId%>" />
568        <jsp:param name="title" value="Shared to" />
569      </jsp:include>
570      </t:tab>
571     
572      <t:tab id="annotations" title="Annotations" 
573        tooltip="View annotation values" clazz="white">
574        <jsp:include page="../../common/annotations/list_annotations.jsp">
575          <jsp:param name="item_type" value="<%=itemType.name()%>" />
576          <jsp:param name="item_id" value="<%=itemId%>" />
577          <jsp:param name="ID" value="<%=ID%>" />
578        </jsp:include>
579      </t:tab>
580
581      <t:tab id="wells" title="Wells" />
582      <t:tab id="events" title="Plate events" />
583      <t:tab id="overview" title="Overview" 
584        tooltip="Display a tree overview of related items">
585        <%
586        if ("overview".equals(tab))
587        {
588          %>
589          <jsp:include page="../../common/overview/overview.jsp">
590            <jsp:param name="item_type" value="<%=itemType.name()%>" />
591            <jsp:param name="item_id" value="<%=itemId%>" />
592            <jsp:param name="ID" value="<%=ID%>" />
593          </jsp:include>
594          <%
595        }
596        %>
597      </t:tab>     
598      <t:tab id="history" title="Change history" 
599        tooltip="Displays a log of all modifications made to this item"
600        visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>">
601        <%
602        if ("history".equals(tab))
603        {
604          %>
605          <jsp:include page="../../common/history/frameset.jsp">
606            <jsp:param name="source_type" value="<%=itemType.name()%>" />
607            <jsp:param name="source_id" value="<%=itemId%>" />
608            <jsp:param name="ID" value="<%=ID%>" />
609          </jsp:include>
610          <%
611        }
612        %>
613      </t:tab>
614    </t:tabcontrol>
615   
616    <div class="postit" id="wellInfo" style="display:none; width: 20em; min-height: 3em;" onmouseout="event.cancelBubble=true"></div>
617  </base:body>
618  </base:page>
619  <%
620}
621finally
622{
623  if (dc != null) dc.close();
624}
625%>
Note: See TracBrowser for help on using the repository browser.