root/trunk/grails-app/views/study/show.gsp @ 1266

Revision 1266, 8.4 KB (checked in by robert@…, 3 years ago)

Fixed several IE7 bugs. See tickets #231, #232, #234 and #237

  • Property svn:keywords set to Author Date Rev
Line 
1<%@ page import="dbnp.studycapturing.Study" %>
2<%@ page import="dbnp.studycapturing.EventGroup" %>
3<%@ page import="dbnp.studycapturing.RelTime" %>
4<html>
5<head>
6        <meta name="layout" content="main"/>
7        <g:if test="${studyList.size() == 1}">
8        <meta property="og:title" content="${studyList[0].title}"/>
9        <meta property="og:description" content="${(studyList[0].getFieldValue('description')) ? studyList[0].getFieldValue('description') : 'A study in the Generic Study Capture Framework'}"/>
10        </g:if>
11        <g:set var="entityName" value="${message(code: 'study.label', default: 'Study')}"/>
12        <title><g:message code="default.show.label" args="[entityName]"/></title>
13        <script type="text/javascript">
14            // Flag whether the timelines have been loaded
15        var timelineloaded = false;
16
17                // Number of timelines that should be loaded
18                var numTimelines = ${studyList?.size()};
19
20                // This method is called on the event body.onLoad
21                $(function() {
22                        $("#tabs").tabs({
23                show: function(event, ui) {
24                  // If the events tab is shown, the timeline should be redrawn
25                  if( ui.tab.hash == '#events-timeline' && !timelineloaded ) {
26                    loadTimeline( 'eventstimeline', 'eventtitles', 0 );
27                    timelineloaded = true;
28                  }
29                },
30                                ajaxOptions: {
31                                        error: function(xhr, status, index, anchor) {
32                                                $(anchor.hash).html(
33                                                        "Couldn't load this tab. We'll try to fix this as soon as possible.");
34                                        }
35                                }
36                        });
37                });
38
39                // Parameters for the SIMILE timeline
40                Timeline_ajax_url = "${resource(dir: 'js', file: 'timeline-simile/timeline_ajax/simile-ajax-api.js')}";
41                Timeline_urlPrefix = '${resource(dir: 'js', file: 'timeline-simile/')}';
42                Timeline_parameters = 'bundle=true';
43
44        </script>
45        <link rel="stylesheet" type="text/css" href="${resource(dir: 'css', file: 'studies.css')}"/>
46
47        <!-- Include scripts for the SIMILE timeline. See http://simile-widgets.org/wiki/ -->
48        <script src="${resource(dir: 'js', file: 'timeline-simile/timeline-api.js')}" type="text/javascript"></script>
49        <script src="${resource(dir: 'js', file: 'timeline-simile/custom-timeline.js')}" type="text/javascript"></script>
50        <script src="${resource(dir: 'js', file: 'timeline-simile/relative-time.js')}" type="text/javascript"></script>
51        <script src="${resource(dir: 'js', file: 'jquery-callback-1.2.js')}" type="text/javascript"></script>
52
53        <!-- Create the JSON objects for the timeline with events -->
54        <script type="text/javascript" src="<g:createLink action="createTimelineBandsJs" id="${studyList.id.join(',')}"/>" type="text/javascript"></script>
55</head>
56<body>
57
58<div class="body" id="studies">
59        <h1><g:message code="default.show.label" args="[entityName]"/></h1>
60        <g:if test="${flash.message}">
61                <div class="message">${flash.message}</div>
62        </g:if>
63        <div class="dialog">
64                <div id="tabs">
65                        <ul>
66                                <li><a href="#study">Study Information</a></li>
67                                <li><a href="<g:createLink action="show_subjects" id="${studyList.id.join(',')}"/>" title="Subjects"><span>Subjects</span></a></li>
68                                <li><a href="#events-timeline"><span>Events timeline</span></a></li>
69                                <li><a href="<g:createLink action="show_events_table" id="${studyList.id.join(',')}"/>" title="Events table"><span>Events table</span></a></li>
70                                <li><a href="<g:createLink action="show_assays" id="${studyList.id.join(',')}"/>" title="Assays"><span>Assays</span></a></li>
71                                <li><a href="<g:createLink action="show_samples" id="${studyList.id.join(',')}"/>" title="Samples"><span>Samples</span></a></li>
72                                <li><a href="<g:createLink action="show_persons" id="${studyList.id.join(',')}"/>" title="Persons"><span>Persons</span></a></li>
73                                <li><a href="<g:createLink action="show_publications" id="${studyList.id.join(',')}"/>" title="Publications"><span>Publications</span></a></li>
74                        </ul>
75
76                        <div id="study">
77                                <table>
78                                <!-- only show the head section if there are multiple studies -->
79                                        <g:if test="${multipleStudies}">
80                                                <thead>
81                                                <tr>
82                                                        <th></th>
83                                                        <g:each in="${studyList}" var="studyInstance">
84                                                                <th>${studyInstance.title}</th>
85                                                        </g:each>
86                                                </tr>
87                                                </thead>
88                                        </g:if>
89                                        <%
90                                                // Determine a union of the fields from all studies, in order
91                                                // to show a proper list. We want every field to appear just once,
92                                                // so the list is filtered for unique values
93                                                studyFields = studyList[0].giveDomainFields() + studyList*.giveTemplateFields()?.flatten().unique()
94                                        %>
95                                <!-- Show all template and domain fields, if filled -->
96                                        <g:each in="${studyFields}" var="field">
97                                                <g:if test="${field && field?.isFilledInList( studyList )}">
98                                                        <tr>
99                                                                <td>${field}</td>
100                                                                <g:each in="${studyList}" var="studyInstance">
101                                                                        <td>
102                                                                                <g:if test="${studyInstance.fieldExists(field.name)}">
103                                                                                        <wizard:showTemplateField field="${field}" entity="${studyInstance}"/>
104                                                                                </g:if>
105                                                                                <g:else>
106                                                                                        -
107                                                                                </g:else>
108                                                                        </td>
109                                                                </g:each>
110                                                        </tr>
111                                                </g:if>
112                                        </g:each>
113
114                                <!-- Add some extra fields -->
115                                        <tr>
116                                                <td>Events</td>
117                                                <g:each in="${studyList}" var="studyInstance">
118                                                        <td>
119                                                                <g:if test="${studyInstance.giveEventTemplates()?.size()==0}">
120                                                                        -
121                                                                </g:if>
122                                                                <g:else>
123                                                                        ${studyInstance.giveEventTemplates().name.join(", ")}
124                                                                </g:else>
125                                                        </td>
126                                                </g:each>
127                                        </tr>
128                                        <tr>
129                                                <td>Sampling events</td>
130                                                <g:each in="${studyList}" var="studyInstance">
131                                                        <td>
132                                                                <g:if test="${studyInstance.giveSamplingEventTemplates()?.size()==0}">
133                                                                        -
134                                                                </g:if>
135                                                                <g:else>
136                                                                        ${studyInstance.giveSamplingEventTemplates().name.join(", ")}
137                                                                </g:else>
138                                                        </td>
139                                                </g:each>
140                                        </tr>
141                                        <tr>
142                                                <td>Public</td>
143                                                <g:each in="${studyList}" var="studyInstance">
144                                                        <td>
145                                                                ${studyInstance.publicstudy}
146                                                        </td>
147                                                </g:each>
148                                        </tr>
149                                        <tr>
150                                                <td>Owner</td>
151                                                <g:each in="${studyList}" var="studyInstance">
152                                                        <td>
153                                                                ${studyInstance.owner?.username}
154                                                        </td>
155                                                </g:each>
156                                        </tr>
157                                        <tr>
158                                                <td>Readers</td>
159                                                <g:each in="${studyList}" var="studyInstance">
160                                                        <td>
161                                                                <g:if test="${studyInstance.readers.size() == 0}">
162                                                                        -
163                                                                </g:if>
164                                                                <g:else>
165                                                                        ${studyInstance.readers.username.join(", ")}
166                                                                </g:else>
167                                                        </td>
168                                                </g:each>
169                                        </tr>
170                                        <tr>
171                                                <td>Writers</td>
172                                                <g:each in="${studyList}" var="studyInstance">
173                                                        <td>
174                                                                <g:if test="${studyInstance.writers?.size()==0}">
175                                                                        -
176                                                                </g:if>
177                                                                <g:else>
178                                                                        ${studyInstance.writers.username.join(", ")}
179                                                                </g:else>
180                                                        </td>
181                                                </g:each>
182                                        </tr>
183                                </table>
184                        </div>
185
186                  <div id="events-timeline">
187                        <g:if test="${studyList*.events?.flatten()?.size()==0 && studyInstance*.samplingEvents?.flatten()?.size()==0 }">
188                          No events in these studies
189                        </g:if>
190                        <g:else>
191                          <g:each in="${studyList}" var="study" status="i">
192                                <div style="margin: 10px; ">
193                                  <div class="eventtitles" id="eventtitles-${i}"></div>
194                                  <div class="eventstimeline" id="eventstimeline-${i}"></div>
195                                </div>
196                          </g:each>
197                          <noscript>
198                                Javascript is needed for showing the timeline, but it has been disabled in your browser. Please enable javascript or use
199                                the events table instead.
200                          </noscript>
201                        </g:else>
202                  </div>
203
204                        <% /*
205                  All other tabs are moved to separate views and are loaded using
206                  ajax calls when a tab is opened. See http://jqueryui.com/demos/tabs/#ajax
207                */ %>
208
209                </div>
210        </div>
211        <br>
212        <div class="buttons">
213                <g:form action="delete">
214                        <g:if test="${studyList?.size() == 1}">
215                                <g:set var="studyInstance" value="${studyList[0]}"/>
216                                <g:hiddenField name="id" value="${studyInstance?.id}"/>
217                                <g:if test="${studyInstance.canWrite(loggedInUser)}">
218                                        <span class="button"><g:link class="edit" controller="wizard" params="[jump:'edit']" id="${studyInstance?.id}">${message(code: 'default.button.edit.label', default: 'Edit')}</g:link></span>
219                                </g:if>
220                                <g:if test="${studyInstance.isOwner(loggedInUser)}">
221                                        <span class="button"><g:actionSubmit class="delete" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');"/></span>
222                                </g:if>
223                        </g:if>
224                        <span class="button"><g:link class="backToList" action="list">Back to list</g:link></span>
225                </g:form>
226        </div>
227</div>
228</body>
229</html>
Note: See TracBrowser for help on using the browser.