source: trunk/grails-app/views/run/show.gsp @ 44

Last change on this file since 44 was 44, checked in by robert@…, 8 years ago

Removed mass sample editing (to prevent the edit tags screen opening very slowly). Also added the possibility to add an excel file which matches sequence files to samples (when uploading) (#13). Finally added some 'return false' to onClick events, when dialogs were opened, to prevent the browser from scrolling to the top.

File size: 9.1 KB
Line 
1<html>
2        <head>
3                <meta name="layout" content="main" />
4                <title>Show run ${run.name} | Mass Sequencing | dbNP</title>
5               
6                <link rel="stylesheet" href="<g:resource dir="css" file="showAssay.css" />" type="text/css"/>
7                <link rel="stylesheet" href="<g:resource dir="css" file="fileuploader.new.css" />" type="text/css"/>
8               
9                <g:javascript src="jquery.ui.tabbeddialog.js" />
10                <g:javascript src="addFilesDialog.js" />
11                <g:javascript src="editSampleDialog.js" />
12                <g:javascript src="enterTagsDialog.js" />
13
14                <g:javascript src="run.show.enterTagsDialog.js" />
15                <g:javascript src="run.show.assayDialog.js" />
16                <g:javascript src="run.show.runDialog.js" />
17                <g:javascript src="run.show.addSamplesDialog.js" />
18                <g:javascript src="showSampleDialogUniversal.js" />
19
20                <g:javascript src="assay.show.showRunDialog.js" />
21
22                <g:javascript src="fileuploads.new.js" />
23               
24                <script>
25                        var runId = ${run.id};
26                        var numOtherAssays = ${otherAssays.size()};
27
28                        // Create a variable with assay names to check for existing names
29                        var runNames = [];
30                        <g:each in="${allRuns}" var="currentrun">
31                                runNames[ runNames.length ] = {id: ${currentrun.id}, name: '${currentrun.name}', alreadyAdded: false };
32                        </g:each>
33                       
34                        function initializeUploadedFiles( selector ) {
35                                if( selector == undefined )
36                                        selector = "";
37                               
38                                $( selector + ' .uploadedFile').each( function( idx, el ) {
39                                        $(el).html( createFileHTML( $(el).text(), 'getPermanent' ) );
40                                });
41                        }
42
43                        // Initializefiles on load
44                        $(function() { initializeUploadedFiles(); });
45                </script>
46        </head>
47<body>
48        <h1>
49                Run ${run.name}
50        </h1>
51       
52        <div id="editRunDialog" class="dialog"></div>
53        <div id="editSampleDialog" class="dialog"></div>
54       
55        <div class="blok_data">
56                <label>Run</label>: ${run.name}<br />
57                <label>Date</label>: <g:formatDate format="dd-MM-yyyy" date="${run.date}"/><br />
58                <label>Supplier</label>: ${run.supplier}<br />
59                <label>Machine</label>: ${run.machine}<br />
60                <label>Parameters</label>: <g:uploadedFile value="${run.parameterFile}" /><br />
61        </div>
62        <div class="blok_data">
63                <label># assays</label>: ${run.assays?.size()}
64                <% def numHidden = run.assays?.findAll { !it.study.canRead( session.user ) }.size() ; %>
65                <g:if test="${numHidden}">
66                        (${numHidden}
67                        <a href="#" onClick="alert( '${numHidden} assay(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
68                        hidden</a>)
69                </g:if>
70                <br />
71       
72                <label># samples</label>: ${run.assaySamples?.size()}
73                <% numHidden = run.assaySamples?.findAll { !it.assay?.study.canRead( session.user ) }.size() ; %>
74                <g:if test="${numHidden}">
75                        (${numHidden}
76                        <a href="#" onClick="alert( '${numHidden} sample(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
77                        hidden</a>)
78                </g:if>
79                <br />
80                <label># sequences</label>: ${run.numSequences()}<br />
81                <label># files</label>: ${run.numFiles()}<br />
82        </div>
83        <p class="options">
84                <a class="edit" href="#" onClick="showEditRunDialog( ${run.id} ); return false;">Edit run</a>
85        </p>
86       
87        <!-- Samples -->
88        <h2>Samples</h2>
89        <% def assaySamples = run.assaySamples ? run.assaySamples.findAll { it.assay?.study.canRead( session.user ) }.toList().sort { it.sample.name } : []; %>
90        <g:if test="${assaySamples.size() == 0}">
91                No samples found in run.
92        </g:if>
93        <g:else>
94                <table class="paginate">
95                        <thead>
96                                <tr>
97                                        <th nowrap>name</th>
98                                        <th nowrap>study</th>
99                                        <th nowrap>assay</th>
100                                        <th nowrap>Forward mid</th>
101                                        <th nowrap># sequences</th>
102                                        <th nowrap># qual</th>
103                                        <th class="nonsortable"></th>
104                                        <th class="nonsortable"></th>
105                                </tr>
106                        </thead>                       
107                        <tbody>
108                                <g:each in="${assaySamples}" var="assaySample">
109                                        <tr>
110                                                <td><a href="#" onClick="showSample(${assaySample.id}, 'run'); return false;">${assaySample.sample.name}</a></td>
111                                                <td>${assaySample.assay.study.name}</td>
112                                                <td>${assaySample.assay.name}</td>
113                                                <td>${assaySample.fwMidName}</td>
114                                                <td>
115                                                        <g:if test="${assaySample.numSequenceFiles() > 0}">
116                                                                ${assaySample.numSequences()}
117                                                        </g:if>
118                                                        <g:else>
119                                                                -
120                                                        </g:else>
121                                                </td>
122                                                <td>
123                                                        <g:if test="${assaySample.numQualityFiles() > 0}">
124                                                                ${assaySample.numQualScores()}
125                                                        </g:if>
126                                                        <g:else>
127                                                                -
128                                                        </g:else>
129                                                </td>
130                                                <td class="button">
131                                                        <g:if test="${!assaySample.assay.study.canWrite(session.user)}">
132                                                                <img src="${fam.icon(name: 'pencil')}" class="disabled" title="You can't edit this sample because you don't have sufficient privileges." />
133                                                        </g:if>
134                                                        <g:else>
135                                                                <a onClick="showEditSampleDialog(${assaySample.id}, 'run', ${run.id});" href="#"><img src="${fam.icon(name: 'pencil')}" /></a>
136                                                        </g:else>
137                                                </td>
138                                                <td class="button">
139                                                        <g:if test="${!assaySample.assay.study.canWrite(session.user)}">
140                                                                <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this sample because you don't have sufficient privileges." />
141                                                        </g:if>
142                                                        <g:else>
143                                                                <g:link onClick="return confirm( 'Are you sure you want to remove the selected sample from this run?' );" controller="run" action="removeSample" id="${run.id}" params="${[assaySampleId: assaySample.id]}" ><img src="${fam.icon(name: 'application_delete')}" /></g:link>
144                                                        </g:else>
145                                                </td>
146                                        </tr>
147                                </g:each>
148                        </tbody>
149                </table>
150                <div id="showSampleDialog" class="dialog"></div>
151        </g:else>       
152        <g:if test="${editable}">
153                <p class="options">
154                        <% def writableAssaySamples = assaySamples.findAll { it.assay.study.canWrite( session.user ) } %>
155                        <a class="addAssociation" onClick="showAddSamplesDialog(); return false;" href="#">Add samples</a>
156
157                        <g:if test="${writableAssaySamples.size() > 0}">
158                                <a class="editAssociation" onClick="showEnterTagsDialog(); return false;" href="#">Edit sample data</a>
159                        </g:if>
160                        <g:else>
161                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit sample data</a>
162                        </g:else>
163
164                        <g:if test="${writableAssaySamples.size() == 0 || !run.assays?.size()}">
165                                <a class="addSequences disabled" onClick="return false;" href="#">Add sequence files</a>
166                        </g:if>
167                        <g:else>
168                                <a class="addSequences" onClick="showAddFilesDialog(); return false;" href="#">Add sequence files</a>
169                        </g:else>
170
171                </p>
172                <g:if test="${writableAssaySamples.size() > 0}">
173                        <g:render template="enterTagsDialog" model="[run: run, writableAssaySamples: writableAssaySamples]" />
174                        <g:render template="addFilesDialog" model="[run: run]" />
175                </g:if>
176               
177                <g:render template="addSamplesDialog" model="[run: run]" />
178               
179                </g:if>
180
181
182
183        <!-- Runs -->
184        <h2>Assays</h2>
185        <g:if test="${run.assays == null || run.assays.size() == 0}">
186                No assay found for this run
187        </g:if>
188        <g:else>
189                <table class="paginate">
190                        <thead>
191                                <tr>
192                                        <th nowrap>name</th>
193                                        <th nowrap>study</th>
194                                        <th nowrap># samples</th>
195                                        <th nowrap>other runs</th>
196                                        <th class="nonsortable"></th>
197                                </tr>
198                        </thead>                       
199                        <tbody>
200                                <% def assays = run.assays.findAll { it.study.canRead( session.user ) }.toList().sort { it.name }; %>
201                                <g:each in="${assays}" var="assay">
202                                        <tr>
203                                                <td><g:link controller="assay" action="show" id="${assay.id}">${assay.name}</g:link></td>
204                                                <td>${assay.study?.name}</td>
205                                                <td>${assay.assaySamples?.size()}</td>
206                                                <td>
207                                                        <g:if test="${assay.runs?.size() == 1}">
208                                                                <% /* If only 1 run is found, then it is the current one */ %>
209                                                                -
210                                                        </g:if>
211                                                        <g:else>
212                                                                <g:each in="${assay.runs - run}" var="otherRun">
213                                                                        <g:link action="show" id="${otherRun.id}">${otherRun.name}</g:link><br />
214                                                                </g:each>
215                                                        </g:else>
216                                                </td>
217                                                <td class="button">
218                                                        <g:if test="${run.samples(assay.id).size()}">
219                                                                <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this assay because sequences from this assay are coupled to this run." />
220                                                        </g:if>
221                                                        <g:else>
222                                                                <g:if test="${!assay.study.canWrite(session.user)}">
223                                                                        <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this assay because you don't have sufficient privileges." />
224                                                                </g:if>
225                                                                <g:else>
226                                                                        <g:link onClick="return confirm( 'Are you sure you want to remove the selected assay from this run?' );" controller="run" action="removeAssay" id="${run.id}" params="${[assay_id: assay.id]}" ><img src="${fam.icon(name: 'application_delete')}" /></g:link>
227                                                                </g:else>
228                                                        </g:else>
229                                                </td>
230                                        </tr>
231                                </g:each>
232                        </tbody>
233                </table>
234        </g:else>
235        <% def writableAssays = otherAssays.findAll { it.study.canWrite( session.user ) } %>
236        <g:if test="${editable}">
237                <p class="options">
238                        <g:if test="${writableAssays.size() > 0}">
239                                <a class="addAssociation" href="#" onClick="showAddAssayDialog(); return false;">Add assay</a>
240                        </g:if>
241                        <g:else>
242                                <a class="addAssociation disabled" href="#" onClick="return false;">Add assay</a>
243                        </g:else>
244                </p>
245                <g:if test="${writableAssays.size() > 0}">
246                        <g:render template="addAssayDialog" model="[run: run, writableAssays: writableAssays]" />
247                </g:if>
248        </g:if>
249        <div id="showRunDialog" class="dialog"></div>
250</body>
251</html>
Note: See TracBrowser for help on using the repository browser.