source: trunk/grails-app/views/study/show.gsp @ 1426

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