source: trunk/grails-app/views/assay/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: 6.9 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                <table class="paginate">
65                        <thead>
66                                <tr>
67                                        <th nowrap>name</th>
68                                        <th nowrap>run</th>
69                                        <th nowrap>forward mid</th>
70                                        <th nowrap># sequences</th>
71                                        <th nowrap># qual</th>
72                                        <th class="nonsortable"></th>
73                                </tr>
74                        </thead>                       
75                        <tbody>
76                                <% def assaySamples = assay.assaySamples.toList().sort { it.sample.name }; %>
77                                <g:each in="${assaySamples}" var="assaySample">
78                                        <tr>
79                                                <td><a href="#" onClick="showSample(${assaySample.id}, 'assay'); return false;">${assaySample.sample.name}</a></td>
80                                                <td>${assaySample.run?.name}</td>
81                                                <td>${assaySample.fwMidName}</td>
82                                                <td>
83                                                        <g:if test="${assaySample.numSequenceFiles() > 0}">
84                                                                ${assaySample.numSequences()}
85                                                        </g:if>
86                                                        <g:else>
87                                                                -
88                                                        </g:else>
89                                                </td>
90                                                <td>
91                                                        <g:if test="${assaySample.numQualityFiles() > 0}">
92                                                                ${assaySample.numQualScores()}
93                                                        </g:if>
94                                                        <g:else>
95                                                                -
96                                                        </g:else>
97                                                </td>
98                                                <td class="button">
99                                                        <g:if test="${!assaySample.assay.study.canWrite(session.user)}">
100                                                                <img src="${fam.icon(name: 'pencil')}" class="disabled" title="You can't edit this sample because you don't have sufficient privileges." />
101                                                        </g:if>
102                                                        <g:else>
103                                                                <a onClick="showEditSampleDialog(${assaySample.id}, 'assay', ${assay.id});" href="#"><img src="${fam.icon(name: 'pencil')}" /></a>
104                                                        </g:else>
105                                                </td>
106                                        </tr>
107                                </g:each>
108                        </tbody>
109                </table>
110                <p class="options">
111                        <g:if test="${editable}">
112                                <a class="editAssociation" onClick="showEnterTagsDialog(); return false;" href="#">Edit sample data</a>
113                        </g:if>
114                        <g:else>
115                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit sample data</a>
116                        </g:else>
117                        <g:if test="${!editable || assay.runs == null || assay.runs.size() == 0}">
118                                <a class="addSequences disabled" onClick="return false;" href="#">Add sequence files</a>
119                        </g:if>
120                        <g:else>
121                                <a class="addSequences" onClick="showAddFilesDialog(); return false;" href="#">Add sequence files</a>
122                        </g:else>
123                </p>
124
125                <g:if test="${editable}">
126                        <g:render template="enterTagsDialog" model="[assay: assay, sortedAssaySamples: assaySamples]" />
127                        <g:render template="addFilesDialog" model="[assay: assay]" />
128                </g:if>
129                <div id="showSampleDialog" class="dialog"></div>
130        </g:else>       
131
132        <!-- Runs -->
133        <h2>Runs</h2>
134        <g:if test="${assay.runs == null || assay.runs.size() == 0}">
135                No runs found for this assay.
136        </g:if>
137        <g:else>
138                <table class="paginate">
139                        <thead>
140                                <tr>
141                                        <th nowrap>name</th>
142                                        <th nowrap>date</th>
143                                        <th nowrap>supplier</th>
144                                        <th nowrap>machine</th>
145                                        <th nowrap>parameter file</th>
146                                        <th nowrap>other assays</th>
147                                        <th class="nonsortable"></th>
148                                        <th class="nonsortable"></th>
149                                </tr>
150                        </thead>                       
151                        <tbody>
152                                <% def runs = assay.runs.toList().sort { it.name }; %>
153                                <g:each in="${runs}" var="run">
154                                        <tr>
155                                                <td><g:link controller="run" action="show" id="${run.id}">${run.name}</g:link></td>
156                                                <td><g:formatDate format="dd-MM-yyyy" date="${run.date}"/></td>
157                                                <td>${run.supplier}</td>
158                                                <td>${run.machine}</td>
159                                                <td><g:uploadedFile value="${run.parameterFile}"/></td>
160                                                <td>
161                                                        <g:if test="${run.assays?.size() == 1}">
162                                                                <% /* If only 1 assay is found, then it is the current one */ %>
163                                                                -
164                                                        </g:if>
165                                                        <g:else>
166                                                                <g:each in="${run.assays - assay}" var="otherAssay">
167                                                                        <g:link action="show" id="${otherAssay.id}">${otherAssay.name}</g:link><br />
168                                                                </g:each>
169                                                        </g:else>
170                                                </td>
171                                                <td class="button"><a href="#" onClick="showEditRunDialog( ${run.id} ); return false;"><img src="${fam.icon(name: 'application_edit')}" /></a></td>
172                                                <td class="button">
173                                                        <g:if test="${run.samples(assay.id).size()}">
174                                                                <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." />
175                                                        </g:if>
176                                                        <g:else>
177                                                                <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>
178                                                        </g:else>
179                                                </td>
180                                        </tr>
181                                </g:each>
182                        </tbody>
183                </table>
184        </g:else>
185        <p class="options">
186                <g:if test="${editable}">
187                        <a class="addAssociation" onClick="showAddRunDialog(); return false;" href="#">Add run</a>
188                </g:if>
189                <g:else>
190                        <a class="addAssociation disabled" onClick="return false;" href="#">Add run</a>
191                </g:else>
192        </p>
193
194        <g:if test="${editable}">
195                <g:render template="addRunDialog" model="[assay: assay]" />
196                <div id="editRunDialog" class="dialog"></div>
197        </g:if>
198        <div id="showRunDialog" class="dialog"></div>
199        <div id="editSampleDialog" class="dialog"></div>
200</body>
201</html>
Note: See TracBrowser for help on using the repository browser.