source: trunk/grails-app/views/assay/show.gsp @ 70

Last change on this file since 70 was 70, checked in by robert@…, 8 years ago
  • Installed templates (in order to extend session lifetime to 2 hours)
  • Implemented background worker to do work outside the HTTP request
File size: 8.6 KB
Line 
1<html>
2        <head>
3                <meta name="layout" content="main" />
4                <title>Show assay ${assay.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="assay.show.enterTagsDialog.js" />
11                <g:javascript src="editSampleDialog.js" />
12                <g:javascript src="assay.show.runDialogs.js" />
13                <g:javascript src="assay.show.showRunDialog.js" />
14
15                <g:javascript src="showSampleDialogUniversal.js" />
16                <g:javascript src="addFilesDialog.js" />
17                <g:javascript src="enterTagsDialog.js" />
18
19                <g:javascript src="fileuploads.new.js" />
20               
21                <script>
22                        var assayId = ${assay.id};
23                        var numOtherRuns = ${otherRuns.size()};
24
25                        // Create a variable with assay names to check for existing names
26                        var runNames = [];
27                        <g:each in="${assay.runs + otherRuns}" var="run">
28                                runNames[ runNames.length ] = {id: ${run.id}, name: '${run.name}', alreadyAdded: ${ run.assays.contains( assay ) ? 'true' : 'false' }};
29                        </g:each>
30                       
31                        function initializeUploadedFiles( selector ) {
32                                if( selector == undefined )
33                                        selector = "";
34                               
35                                $( selector + ' .uploadedFile').each( function( idx, el ) {
36                                        $(el).html( createFileHTML( $(el).text(), 'getPermanent' ) );
37                                });
38                        }
39
40                        // Initializefiles on load
41                        $(function() { initializeUploadedFiles(); });
42                </script>
43        </head>
44<body>
45        <h1>
46                ${assay.study.name} - ${assay.name}
47        </h1>
48       
49        <div class="blok_data">
50                <label>Study</label>: <a target="_top" href="${ assay.study.viewUrl() }">${assay.study.name}</a><br />
51                <label>Assay</label>: ${assay.name}<br />
52        </div>
53        <div class="blok_data">
54                <label># samples</label>: ${assay.assaySamples?.size()}<br />
55                <label># sequences</label>: <g:formatNumber number="${assay.numSequences()}" format="###,###,##0" /><br />
56                <label>% classified</label>: <g:formatNumber number="${numClassified / assay.numSequences()}" format="0.0%" /><br />
57        </div>
58        <!-- Samples -->
59        <h2>Samples</h2>
60
61        <g:if test="${assay.assaySamples == null || assay.assaySamples.size() == 0}">
62                <p>
63                        No samples found in assay.
64                        <g:if test="${editable}">
65                                Associate samples with this assay in <a target="_top" href="${ assay.study.viewUrl() }">GSCF</a>.
66                        </g:if>
67                </p>
68        </g:if>
69        <g:else>
70                <form id="sampleForm"><input type="hidden" name="assayId" value="${assay.id}" /><input type="hidden" name="entityType" value="assay" /><input type="hidden" name="entityId" value="${assay.id}" /></form>
71                <table class="paginate serverside" rel="<g:createLink controller="assay" action="showSampleData" id="${assay.id}" />" id="samples">
72                        <thead>
73                                <tr>
74                                        <th width="5" class="nonsortable"><input type="checkbox" id="checkAll" onClick="checkAllPaginated(this);" /></th>
75                                        <th nowrap>name</th>
76                                        <th nowrap>run</th>
77                                        <th nowrap>forward mid</th>
78                                        <th nowrap># sequences</th>
79                                        <th nowrap># qual</th>
80                                        <th class="nonsortable"></th>
81                                        <th class="nonsortable"></th>
82                                </tr>
83                        </thead>                       
84                        <tbody>
85                                <tr>
86                                        <td colspan="8">
87                                                Loading data from server
88                                        </td>
89                                </tr>
90
91                        </tbody>
92                </table>
93               
94                <p class="options multiple">
95                        <g:if test="${editable}">
96                                <a class="editAssociation" onClick="showEnterTagsDialog(); return false;" href="#">Edit sample data</a>
97                        </g:if>
98                        <g:else>
99                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit sample data</a>
100                        </g:else>
101                </p>                   
102                <p class="options multiple">
103                       
104                        <g:if test="${!editable || assay.runs == null || assay.runs.size() == 0}">
105                                <a class="addSequences disabled" onClick="return false;" href="#">Add sequence files</a>
106                        </g:if>
107                        <g:else>
108                                <a class="addSequences" onClick="showAddFilesDialog(); return false;" href="#">Add sequence files</a>
109                        </g:else>
110                       
111                        <br />
112                       
113                        <g:if test="${editable && assay.numFiles() > 0 }">
114                                <a class="removeSequences" href="#" onClick="if( confirm( 'Are you sure you want to remove all sequence data from this assay?' ) ) { submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="assay" action="deleteSequenceData" />', '#samples', 'Please select one or more samples to remove sequences from.' ); } return false;">Delete selected sequences</a>
115                        </g:if>
116
117                </p>
118                                       
119                <p class="options multiple">
120                        <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 />
121                        <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 />
122                        <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 />
123                </p>
124               
125                <p class="options multiple last">
126                        <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 />
127                        <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 />
128                </p>           
129               
130                <div style="clear: both;"></div>
131               
132                <g:if test="${editable}">
133                        <g:render template="enterTagsDialog" model="[assay: assay, sortedAssaySamples: assaySamples]" />
134                        <g:render template="addFilesDialog" model="[assay: assay]" />
135                </g:if>
136                <div id="showSampleDialog" class="dialog"></div>
137        </g:else>       
138
139        <!-- Runs -->
140        <h2>Runs</h2>
141        <g:if test="${assay.runs == null || assay.runs.size() == 0}">
142                No runs found for this assay.
143        </g:if>
144        <g:else>
145                <table class="paginate">
146                        <thead>
147                                <tr>
148                                        <th nowrap>name</th>
149                                        <th nowrap>date</th>
150                                        <th nowrap>supplier</th>
151                                        <th nowrap>machine</th>
152                                        <th nowrap>parameter file</th>
153                                        <th nowrap>other assays</th>
154                                        <th class="nonsortable"></th>
155                                        <th class="nonsortable"></th>
156                                </tr>
157                        </thead>                       
158                        <tbody>
159                                <% def runs = assay.runs.toList().sort { it.name }; %>
160                                <g:each in="${runs}" var="run">
161                                        <tr>
162                                                <td><g:link title="Show run" controller="run" action="show" id="${run.id}">${run.name}</g:link></td>
163                                                <td><g:formatDate format="dd-MM-yyyy" date="${run.date}"/></td>
164                                                <td>${run.supplier}</td>
165                                                <td>${run.machine}</td>
166                                                <td><g:uploadedFile value="${run.parameterFile}"/></td>
167                                                <td>
168                                                        <g:if test="${run.assays?.size() == 1}">
169                                                                <% /* If only 1 assay is found, then it is the current one */ %>
170                                                                -
171                                                        </g:if>
172                                                        <g:else>
173                                                                <g:each in="${run.assays - assay}" var="otherAssay">
174                                                                        <g:link action="show" id="${otherAssay.id}">${otherAssay.name}</g:link><br />
175                                                                </g:each>
176                                                        </g:else>
177                                                </td>
178                                                <td class="button"><a href="#" onClick="showEditRunDialog( ${run.id} ); return false;" title="Edit run properties"><img title="Edit run properties" src="${fam.icon(name: 'application_edit')}" /></a></td>
179                                                <td class="button">
180                                                        <g:if test="${run.samples(assay.id).size()}">
181                                                                <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." />
182                                                        </g:if>
183                                                        <g:else>
184                                                                <g:link onClick="return confirm( 'Are you sure you want to remove the selected run from this assay?' );" controller="assay" action="removeRun" id="${assay.id}" params="${[run_id: run.id]}" title="Remove run from assay"><img title="Remove run from assay" src="${fam.icon(name: 'application_delete')}" /></g:link>
185                                                        </g:else>
186                                                </td>
187                                        </tr>
188                                </g:each>
189                        </tbody>
190                </table>
191        </g:else>
192        <p class="options">
193                <g:if test="${editable}">
194                        <a class="addAssociation" onClick="showAddRunDialog(); return false;" href="#">Add run</a>
195                </g:if>
196                <g:else>
197                        <a class="addAssociation disabled" onClick="return false;" href="#">Add run</a>
198                </g:else>
199        </p>
200
201        <g:if test="${editable}">
202                <g:render template="addRunDialog" model="[assay: assay]" />
203                <div id="editRunDialog" class="dialog"></div>
204        </g:if>
205        <div id="showRunDialog" class="dialog"></div>
206        <div id="editSampleDialog" class="dialog"></div>
207</body>
208</html>
Note: See TracBrowser for help on using the repository browser.