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

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

Implemented classification views: percentages classified and overview of classification

File size: 11.4 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                <%
64                        def numAssays = run.numAssays();
65                        def numReadableAssays = run.numReadableAssays( session.user );
66                        def numHiddenAssays = numAssays - numReadableAssays; 
67                %>
68                <label># assays</label>: ${numAssays}
69                <g:if test="${numHiddenAssays}">
70                        (${numHiddenAssays}
71                        <a href="#" onClick="alert( '${numHiddenAssays} assay(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
72                        hidden</a>)
73                </g:if>
74                <br />
75       
76                <%
77                        def numAssaySamples = run.numAssaySamples();
78                        def numReadableAssaySamples = run.numReadableAssaySamples( session.user );
79                        def numWritableAssaySamples = run.numWritableAssaySamples( session.user );
80                        def numHiddenAssaySamples = numAssaySamples - numReadableAssaySamples; 
81                %>
82                <label># samples</label>: ${numAssaySamples}
83                <g:if test="${numHiddenAssaySamples}">
84                        (${numHiddenAssaySamples}
85                        <a href="#" onClick="alert( '${numHiddenAssaySamples} sample(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
86                        hidden</a>)
87                </g:if>
88                <br />
89                <label># sequences</label>: <g:formatNumber number="${run.numSequences()}" format="###,###,##0" /><br />
90                <label># files</label>: ${run.numFiles()}<br />
91        </div>
92        <p class="options">
93                <a class="edit" href="#" onClick="showEditRunDialog( ${run.id} ); return false;">Edit run</a>
94        </p>
95       
96        <!-- Samples -->
97        <h2>Samples</h2>
98        <g:if test="${numReadableAssaySamples == 0}">
99                <p>No samples found in run.</p>
100        </g:if>
101        <g:else>
102                <form id="sampleForm"><input type="hidden" name="runId" value="${run.id}" /><input type="hidden" name="entityType" value="run" /><input type="hidden" name="entityId" value="${run.id}" /></form>
103                <table class="paginate serverside" rel="<g:createLink controller="run" action="showSampleData" id="${run.id}" />" id="samples">
104                        <thead>
105                                <tr>
106                                        <th width="5" class="nonsortable"><input type="checkbox" id="checkAll" onClick="checkAllPaginated(this);" /></th>
107                                        <th nowrap>name</th>
108                                        <th nowrap>study</th>
109                                        <th nowrap>assay</th>
110                                        <th nowrap>Forward mid</th>
111                                        <th nowrap># sequences</th>
112                                        <th nowrap># qual</th>
113                                        <th class="nonsortable"></th>
114                                        <th class="nonsortable"></th>
115                                        <th class="nonsortable"></th>
116                                </tr>
117                        </thead>                       
118                        <tbody>
119                                <tr>
120                                        <td colspan="10" class="dataTables_empty">Loading data from server</td>
121                                </tr>
122                        </tbody>
123                </table>
124                <div id="showSampleDialog" class="dialog"></div>
125        </g:else>       
126        <g:if test="${editable}">
127                <p class="options multiple">
128                        <a class="addAssociation" onClick="showAddSamplesDialog(); return false;" href="#">Add samples</a><br />
129
130                        <g:if test="${numWritableAssaySamples > 0}">
131                                <a class="editAssociation" onClick="showEnterTagsDialog(); return false;" href="#">Edit sample data</a>
132                        </g:if>
133                        <g:else>
134                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit sample data</a>
135                        </g:else>
136                       
137                        <br />
138
139                        <g:if test="${numWritableAssaySamples > 0}">
140                                <a class="removeAssociation" href="#" onClick="if( confirm( 'Are you sure you want to remove selected samples from this run?' ) ) { submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="run" action="removeSamples" />', '#samples', 'Please select one or more samples to remove from this run' ); } return false;">Remove selected samples</a>
141                        </g:if>
142                        <g:else>
143                                <a class="removeAssociation disabled" onClick="return false;" href="#">Remove selected samples</a>
144                        </g:else>
145                </p>
146                <p class="options multiple">
147                        <g:if test="${numWritableAssaySamples == 0 || numWritableAssays == 0 }">
148                                <a class="addSequences disabled" onClick="return false;" href="#">Add sequence files</a>
149                        </g:if>
150                        <g:else>
151                                <a class="addSequences" onClick="showAddFilesDialog(); return false;" href="#">Add sequence files</a>
152                        </g:else>
153                       
154                        <br />
155
156                        <g:if test="${numWritableAssaySamples > 0 && run.numFiles() > 0 }">
157                                <a class="removeSequences" href="#" onClick="if( confirm( 'Are you sure you want to remove all sequence data from this run? Only sequences are removed from samples you have write access to.' ) ) { submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="run" action="deleteSequenceData" />', '#samples', 'Please select one or more samples to remove sequences from.' ); } return false;">Delete selected sequences</a>
158                        </g:if>
159                        <g:else>
160                                <a class="removeSequences disabled" onClick="return false;" href="#">Delete selected sequences</a>
161                        </g:else>
162                </p>
163               
164                <p class="options multiple">
165                        <g:if test="${numReadableAssaySamples > 0}">
166                                <a class="fasta" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="assaySample" action="exportAsFasta" />', '#samples', 'Please select one or more samples to export' ); return false;">Export as fasta</a><br />
167                                <a class="excel" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="assaySample" action="exportMetaData" />', '#samples', 'Please select one or more samples to export' ); return false;">Export metadata</a><br />
168                                <a class="classification_export" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="classification" action="export" />', '#samples', 'Please select one or more samples to export' ); return false;">Export classification</a><br />
169                        </g:if>
170                        <g:else>
171                                <a class="fasta disabled" href="#" onClick="return false;">Export as fasta</a><br />
172                                <a class="excel disabled" href="#" onClick="return false;">Export metadata</a><br />
173                                <a class="classification_export disabled" href="#" onClick="return false;">Export classification</a><br />
174                        </g:else>
175                </p>
176                <p class="options multiple last">
177                        <g:if test="${numReadableAssaySamples > 0}">
178                                <a class="classification" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="classification" action="show" />', '#samples', 'Please select one or more samples to view classification' ); return false;">Show classification</a><br />
179                                <a class="classification_percentage" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="classification" action="percentageClassified" />', '#samples', 'Please select one or more samples to view classification' ); return false;">Percentage classified</a><br />
180                        </g:if>
181                        <g:else>
182                                <a class="classification disabled" href="#" onClick="return false;">Show classification</a><br />
183                                <a class="classification_percentage disabled" href="#" onClick="return false;">Percentage classified</a><br />
184                        </g:else>
185                </p>
186               
187                <div style="clear: both;"></div>
188                       
189                <g:if test="${numWritableAssaySamples > 0}">
190                        <g:render template="enterTagsDialog" model="[run: run, writableAssaySamples: writableAssaySamples]" />
191                        <g:render template="addFilesDialog" model="[run: run]" />
192                </g:if>
193               
194                <g:render template="addSamplesDialog" model="[run: run]" />
195               
196                </g:if>
197
198
199
200        <!-- Runs -->
201        <h2>Assays</h2>
202        <g:if test="${run.assays == null || numReadableAssays == 0}">
203                No assay found for this run
204        </g:if>
205        <g:else>
206                <table class="paginate">
207                        <thead>
208                                <tr>
209                                        <th nowrap>name</th>
210                                        <th nowrap>study</th>
211                                        <th nowrap># samples</th>
212                                        <th nowrap>other runs</th>
213                                        <th class="nonsortable"></th>
214                                </tr>
215                        </thead>                       
216                        <tbody>
217                                <% def assays = run.assays.findAll { it.study.canRead( session.user ) }.toList().sort { it.name }; %>
218                                <g:each in="${assays}" var="assay">
219                                        <tr>
220                                                <td><g:link title="Show assay" controller="assay" action="show" id="${assay.id}">${assay.name}</g:link></td>
221                                                <td>${assay.study?.name}</td>
222                                                <td>${assay.assaySamples?.size()}</td>
223                                                <td>
224                                                        <g:if test="${assay.runs?.size() == 1}">
225                                                                <% /* If only 1 run is found, then it is the current one */ %>
226                                                                -
227                                                        </g:if>
228                                                        <g:else>
229                                                                <g:each in="${assay.runs - run}" var="otherRun">
230                                                                        <g:link title="Show other run" action="show" id="${otherRun.id}">${otherRun.name}</g:link><br />
231                                                                </g:each>
232                                                        </g:else>
233                                                </td>
234                                                <td class="button">
235                                                        <g:if test="${run.samples(assay.id).size()}">
236                                                                <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." />
237                                                        </g:if>
238                                                        <g:else>
239                                                                <g:if test="${!assay.study.canWrite(session.user)}">
240                                                                        <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this assay because you don't have sufficient privileges." />
241                                                                </g:if>
242                                                                <g:else>
243                                                                        <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]}" title="Remove assay from run" ><img src="${fam.icon(name: 'application_delete')}" title="Remove assay from run" /></g:link>
244                                                                </g:else>
245                                                        </g:else>
246                                                </td>
247                                        </tr>
248                                </g:each>
249                        </tbody>
250                </table>
251        </g:else>
252        <% def writableAssays = otherAssays.findAll { it.study.canWrite( session.user ) } %>
253        <g:if test="${editable}">
254                <p class="options">
255                        <g:if test="${writableAssays.size() > 0}">
256                                <a class="addAssociation" href="#" onClick="showAddAssayDialog(); return false;">Add assay</a>
257                        </g:if>
258                        <g:else>
259                                <a class="addAssociation disabled" href="#" onClick="return false;">Add assay</a>
260                        </g:else>
261                </p>
262                <g:if test="${writableAssays.size() > 0}">
263                        <g:render template="addAssayDialog" model="[run: run, writableAssays: writableAssays]" />
264                </g:if>
265        </g:if>
266        <div id="showRunDialog" class="dialog"></div>
267</body>
268</html>
Note: See TracBrowser for help on using the repository browser.