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

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

Bugfix in adding samples to a run.

File size: 8.7 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        <label>Study</label>: <a target="_top" href="${ assay.study.viewUrl() }">${assay.study.name}</a><br />
50        <label>Assay</label>: ${assay.name}<br />
51        <label># samples</label>: ${assay.assaySamples?.size()}<br />
52        <label># sequences</label>: ${assay.numSequences()}<br />
53        <label># files</label>: ${assay.numFiles()}<br />
54
55        <!-- Samples -->
56        <h2>Samples</h2>
57        <g:if test="${assay.assaySamples == null || assay.assaySamples.size() == 0}">
58                No samples found in assay.
59                <g:if test="${editable}">
60                        Associate samples with this assay in <a target="_top" href="${ assay.study.viewUrl() }">GSCF</a>.
61                </g:if>
62        </g:if>
63        <g:else>
64                <form id="sampleForm"><input type="hidden" name="assayId" value="${assay.id}" /></form>
65                <table class="paginate" id="samples">
66                        <thead>
67                                <tr>
68                                        <th width="5" class="nonsortable"><input type="checkbox" id="checkAll" onClick="checkAllPaginated(this);" /></th>
69                                        <th nowrap>name</th>
70                                        <th nowrap>run</th>
71                                        <th nowrap>forward mid</th>
72                                        <th nowrap># sequences</th>
73                                        <th nowrap># qual</th>
74                                        <th class="nonsortable"></th>
75                                        <th class="nonsortable"></th>
76                                </tr>
77                        </thead>                       
78                        <tbody>
79                                <% def assaySamples = assay.assaySamples.toList().sort { it.sample.name }; %>
80                                <g:each in="${assaySamples}" var="assaySample">
81                                        <tr>
82                                                <td><g:checkBox name="ids" value="${assaySample.id}" checked="${false}" onClick="updateCheckAll(this);" /></td>
83                                                <td><a href="#" onClick="showSample(${assaySample.id}, 'assay'); return false;">${assaySample.sample.name}</a></td>
84                                                <td>${assaySample.run?.name}</td>
85                                                <td>${assaySample.fwMidName}</td>
86                                                <td>
87                                                        <g:if test="${assaySample.numSequenceFiles() > 0}">
88                                                                ${assaySample.numSequences()}
89                                                        </g:if>
90                                                        <g:else>
91                                                                -
92                                                        </g:else>
93                                                </td>
94                                                <td>
95                                                        <g:if test="${assaySample.numQualityFiles() > 0}">
96                                                                ${assaySample.numQualScores()}
97                                                        </g:if>
98                                                        <g:else>
99                                                                -
100                                                        </g:else>
101                                                </td>
102                                                <td class="button">
103                                                        <g:if test="${!assaySample.assay.study.canWrite(session.user)}">
104                                                                <img src="${fam.icon(name: 'pencil')}" class="disabled" title="You can't edit this sample because you don't have sufficient privileges." />
105                                                        </g:if>
106                                                        <g:else>
107                                                                <a onClick="showEditSampleDialog(${assaySample.id}, 'assay', ${assay.id}); return false;" href="#"><img src="${fam.icon(name: 'pencil')}" /></a>
108                                                        </g:else>
109                                                </td>
110                                                <td class="button">
111                                                        <g:if test="${assaySample.numSequences() > 0}">
112                                                                <g:link controller="assaySample" action="sequenceLengthHistogram" id="${assaySample.id}"><img src="${fam.icon( name: 'chart_bar' )}" alt="Sequence length histogram" title="Sequence length histogram" /></g:link>
113                                                        </g:if>
114                                                        <g:else>
115                                                                <img src="${fam.icon( name: 'chart_bar' )}" class="disabled" alt="No histogram available because no sequences are uploaded." title="No histogram available because no sequences are uploaded." />
116                                                        </g:else>
117                                                </td>                                           
118                                        </tr>
119                                </g:each>
120                        </tbody>
121                </table>
122                <p class="options multiple">
123                        <g:if test="${editable}">
124                                <a class="editAssociation" onClick="showEnterTagsDialog(); return false;" href="#">Edit sample data</a>
125                        </g:if>
126                        <g:else>
127                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit sample data</a>
128                        </g:else>
129                </p>                   
130                <p class="options multiple">
131                       
132                        <g:if test="${!editable || assay.runs == null || assay.runs.size() == 0}">
133                                <a class="addSequences disabled" onClick="return false;" href="#">Add sequence files</a>
134                        </g:if>
135                        <g:else>
136                                <a class="addSequences" onClick="showAddFilesDialog(); return false;" href="#">Add sequence files</a>
137                        </g:else>
138                       
139                        <br />
140                       
141                        <g:if test="${editable && assay.numFiles() > 0 }">
142                                <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>
143                        </g:if>
144
145                </p>
146                                       
147                <p class="options multiple">
148                        <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>
149                </p>
150               
151                <div style="clear: both;"></div>
152               
153                <g:if test="${editable}">
154                        <g:render template="enterTagsDialog" model="[assay: assay, sortedAssaySamples: assaySamples]" />
155                        <g:render template="addFilesDialog" model="[assay: assay]" />
156                </g:if>
157                <div id="showSampleDialog" class="dialog"></div>
158        </g:else>       
159
160        <!-- Runs -->
161        <h2>Runs</h2>
162        <g:if test="${assay.runs == null || assay.runs.size() == 0}">
163                No runs found for this assay.
164        </g:if>
165        <g:else>
166                <table class="paginate">
167                        <thead>
168                                <tr>
169                                        <th nowrap>name</th>
170                                        <th nowrap>date</th>
171                                        <th nowrap>supplier</th>
172                                        <th nowrap>machine</th>
173                                        <th nowrap>parameter file</th>
174                                        <th nowrap>other assays</th>
175                                        <th class="nonsortable"></th>
176                                        <th class="nonsortable"></th>
177                                </tr>
178                        </thead>                       
179                        <tbody>
180                                <% def runs = assay.runs.toList().sort { it.name }; %>
181                                <g:each in="${runs}" var="run">
182                                        <tr>
183                                                <td><g:link controller="run" action="show" id="${run.id}">${run.name}</g:link></td>
184                                                <td><g:formatDate format="dd-MM-yyyy" date="${run.date}"/></td>
185                                                <td>${run.supplier}</td>
186                                                <td>${run.machine}</td>
187                                                <td><g:uploadedFile value="${run.parameterFile}"/></td>
188                                                <td>
189                                                        <g:if test="${run.assays?.size() == 1}">
190                                                                <% /* If only 1 assay is found, then it is the current one */ %>
191                                                                -
192                                                        </g:if>
193                                                        <g:else>
194                                                                <g:each in="${run.assays - assay}" var="otherAssay">
195                                                                        <g:link action="show" id="${otherAssay.id}">${otherAssay.name}</g:link><br />
196                                                                </g:each>
197                                                        </g:else>
198                                                </td>
199                                                <td class="button"><a href="#" onClick="showEditRunDialog( ${run.id} ); return false;"><img src="${fam.icon(name: 'application_edit')}" /></a></td>
200                                                <td class="button">
201                                                        <g:if test="${run.samples(assay.id).size()}">
202                                                                <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." />
203                                                        </g:if>
204                                                        <g:else>
205                                                                <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]}" ><img src="${fam.icon(name: 'application_delete')}" /></g:link>
206                                                        </g:else>
207                                                </td>
208                                        </tr>
209                                </g:each>
210                        </tbody>
211                </table>
212        </g:else>
213        <p class="options">
214                <g:if test="${editable}">
215                        <a class="addAssociation" onClick="showAddRunDialog(); return false;" href="#">Add run</a>
216                </g:if>
217                <g:else>
218                        <a class="addAssociation disabled" onClick="return false;" href="#">Add run</a>
219                </g:else>
220        </p>
221
222        <g:if test="${editable}">
223                <g:render template="addRunDialog" model="[assay: assay]" />
224                <div id="editRunDialog" class="dialog"></div>
225        </g:if>
226        <div id="showRunDialog" class="dialog"></div>
227        <div id="editSampleDialog" class="dialog"></div>
228</body>
229</html>
Note: See TracBrowser for help on using the repository browser.