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

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

Improved sample editing

File size: 6.8 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="assay.show.runDialogs.js" />
12                <g:javascript src="assay.show.showRunDialog.js" />
13
14                <g:javascript src="showSampleDialogUniversal.js" />
15                <g:javascript src="addFilesDialog.js" />
16                <g:javascript src="enterTagsDialog.js" />
17
18                <g:javascript src="fileuploads.new.js" />
19               
20                <script>
21                        var assayId = ${assay.id};
22                        var numOtherRuns = ${otherRuns.size()};
23
24                        // Create a variable with assay names to check for existing names
25                        var runNames = [];
26                        <g:each in="${assay.runs + otherRuns}" var="run">
27                                runNames[ runNames.length ] = {id: ${run.id}, name: '${run.name}', alreadyAdded: ${ run.assays.contains( assay ) ? 'true' : 'false' }};
28                        </g:each>
29                       
30                        function initializeUploadedFiles( selector ) {
31                                if( selector == undefined )
32                                        selector = "";
33                               
34                                $( selector + ' .uploadedFile').each( function( idx, el ) {
35                                        $(el).html( createFileHTML( $(el).text(), 'getPermanent' ) );
36                                });
37                        }
38
39                        // Initializefiles on load
40                        $(function() { initializeUploadedFiles(); });
41                </script>
42        </head>
43<body>
44        <h1>
45                ${assay.study.name} - ${assay.name}
46        </h1>
47       
48        <label>Study</label>: <a target="_top" href="${ assay.study.viewUrl() }">${assay.study.name}</a><br />
49        <label>Assay</label>: ${assay.name}<br />
50        <label># samples</label>: ${assay.assaySamples?.size()}<br />
51        <label># sequences</label>: ${assay.numSequences()}<br />
52        <label># files</label>: ${assay.numFiles()}<br />
53
54        <!-- Samples -->
55        <h2>Samples</h2>
56        <g:if test="${assay.assaySamples == null || assay.assaySamples.size() == 0}">
57                No samples found in assay.
58                <g:if test="${editable}">
59                        Associate samples with this assay in <a target="_top" href="${ assay.study.viewUrl() }">GSCF</a>.
60                </g:if>
61        </g:if>
62        <g:else>
63                <table class="paginate">
64                        <thead>
65                                <tr>
66                                        <th nowrap>name</th>
67                                        <th nowrap>run</th>
68                                        <th nowrap>forward mid</th>
69                                        <th nowrap># sequences</th>
70                                        <th nowrap># qual</th>
71                                        <th class="nonsortable"></th>
72                                </tr>
73                        </thead>                       
74                        <tbody>
75                                <% def assaySamples = assay.assaySamples.toList().sort { it.sample.name }; %>
76                                <g:each in="${assaySamples}" var="assaySample">
77                                        <tr>
78                                                <td><a href="#" onClick="showSample(${assaySample.id}, 'assay'); return false;">${assaySample.sample.name}</a></td>
79                                                <td>${assaySample.run?.name}</td>
80                                                <td>${assaySample.fwMidName}</td>
81                                                <td>
82                                                        <g:if test="${assaySample.numSequenceFiles() > 0}">
83                                                                ${assaySample.numSequences()}
84                                                        </g:if>
85                                                        <g:else>
86                                                                -
87                                                        </g:else>
88                                                </td>
89                                                <td>
90                                                        <g:if test="${assaySample.numQualityFiles() > 0}">
91                                                                ${assaySample.numQualScores()}
92                                                        </g:if>
93                                                        <g:else>
94                                                                -
95                                                        </g:else>
96                                                </td>
97                                                <td class="button">
98                                                        <g:if test="${!assaySample.assay.study.canWrite(session.user)}">
99                                                                <img src="${fam.icon(name: 'pencil')}" class="disabled" title="You can't edit this sample because you don't have sufficient privileges." />
100                                                        </g:if>
101                                                        <g:else>
102                                                                <a onClick="openEditSampleDialog(${assaySample.id});" href="#"><img src="${fam.icon(name: 'pencil')}" /></a>
103                                                        </g:else>
104                                                </td>
105                                        </tr>
106                                </g:each>
107                        </tbody>
108                </table>
109                <p class="options">
110                        <g:if test="${editable}">
111                                <a class="editAssociation" onClick="showEnterTagsDialog();" href="#">Edit sample data</a>
112                        </g:if>
113                        <g:else>
114                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit sample data</a>
115                        </g:else>
116                        <g:if test="${!editable || assay.runs == null || assay.runs.size() == 0}">
117                                <a class="addSequences disabled" onClick="return false;" href="#">Add sequence files</a>
118                        </g:if>
119                        <g:else>
120                                <a class="addSequences" onClick="showAddFilesDialog();" href="#">Add sequence files</a>
121                        </g:else>
122                </p>
123
124                <g:if test="${editable}">
125                        <g:render template="enterTagsDialog" model="[assay: assay, sortedAssaySamples: assaySamples]" />
126                        <g:render template="addFilesDialog" model="[assay: assay]" />
127                </g:if>
128                <div id="showSampleDialog" class="dialog"></div>
129        </g:else>       
130
131        <!-- Runs -->
132        <h2>Runs</h2>
133        <g:if test="${assay.runs == null || assay.runs.size() == 0}">
134                No runs found for this assay.
135        </g:if>
136        <g:else>
137                <table class="paginate">
138                        <thead>
139                                <tr>
140                                        <th nowrap>name</th>
141                                        <th nowrap>date</th>
142                                        <th nowrap>supplier</th>
143                                        <th nowrap>machine</th>
144                                        <th nowrap>parameter file</th>
145                                        <th nowrap>other assays</th>
146                                        <th class="nonsortable"></th>
147                                        <th class="nonsortable"></th>
148                                </tr>
149                        </thead>                       
150                        <tbody>
151                                <% def runs = assay.runs.toList().sort { it.name }; %>
152                                <g:each in="${runs}" var="run">
153                                        <tr>
154                                                <td><g:link controller="run" action="show" id="${run.id}">${run.name}</g:link></td>
155                                                <td><g:formatDate format="dd-MM-yyyy" date="${run.date}"/></td>
156                                                <td>${run.supplier}</td>
157                                                <td>${run.machine}</td>
158                                                <td><g:uploadedFile value="${run.parameterFile}"/></td>
159                                                <td>
160                                                        <g:if test="${run.assays?.size() == 1}">
161                                                                <% /* If only 1 assay is found, then it is the current one */ %>
162                                                                -
163                                                        </g:if>
164                                                        <g:else>
165                                                                <g:each in="${run.assays - assay}" var="otherAssay">
166                                                                        <g:link action="show" id="${otherAssay.id}">${otherAssay.name}</g:link><br />
167                                                                </g:each>
168                                                        </g:else>
169                                                </td>
170                                                <td class="button"><a href="#" onClick="showEditRunDialog( ${run.id} ); return false;"><img src="${fam.icon(name: 'application_edit')}" /></a></td>
171                                                <td class="button">
172                                                        <g:if test="${run.samples(assay.id).size()}">
173                                                                <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." />
174                                                        </g:if>
175                                                        <g:else>
176                                                                <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>
177                                                        </g:else>
178                                                </td>
179                                        </tr>
180                                </g:each>
181                        </tbody>
182                </table>
183        </g:else>
184        <p class="options">
185                <g:if test="${editable}">
186                        <a class="addAssociation" onClick="showAddRunDialog();" href="#">Add run</a>
187                </g:if>
188                <g:else>
189                        <a class="addAssociation disabled" onClick="return false;" href="#">Add run</a>
190                </g:else>
191        </p>
192
193        <g:if test="${editable}">
194                <g:render template="addRunDialog" model="[assay: assay]" />
195                <div id="editRunDialog" class="dialog"></div>
196        </g:if>
197        <div id="showRunDialog" class="dialog"></div>
198</body>
199</html>
Note: See TracBrowser for help on using the repository browser.