Skip to content

Commit 185309b

Browse files
Merge 25.7 to develop
2 parents bb8005a + c266967 commit 185309b

File tree

4 files changed

+44
-98
lines changed

4 files changed

+44
-98
lines changed

lincs/resources/web/lincs/lincs.js

Lines changed: 0 additions & 50 deletions
This file was deleted.

lincs/src/org/labkey/lincs/LincsDataTable.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.labkey.api.query.FilteredTable;
3030
import org.labkey.api.query.UserSchema;
3131
import org.labkey.api.settings.AppProps;
32+
import org.labkey.api.util.DOM;
3233
import org.labkey.api.util.FileUtil;
3334
import org.labkey.api.util.HtmlString;
3435
import org.labkey.api.util.LinkBuilder;
@@ -45,7 +46,11 @@
4546
import java.util.regex.Matcher;
4647
import java.util.regex.Pattern;
4748

49+
import static org.labkey.api.util.DOM.Attribute.height;
50+
import static org.labkey.api.util.DOM.Attribute.src;
4851
import static org.labkey.api.util.DOM.Attribute.style;
52+
import static org.labkey.api.util.DOM.Attribute.width;
53+
import static org.labkey.api.util.DOM.IMG;
4954
import static org.labkey.api.util.DOM.SPAN;
5055
import static org.labkey.api.util.DOM.at;
5156

@@ -278,7 +283,12 @@ public boolean isSortable()
278283
return false;
279284
}
280285

281-
private String getAnalyticsScript(String eventAction, String fileName, boolean addWaitTime)
286+
private HtmlString externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType)
287+
{
288+
return externalHeatmapViewerLink(fileName, assayType, getGctDavUrl(fileName));
289+
}
290+
291+
private static String getAnalyticsScript(String eventAction, String fileName, boolean addWaitTime)
282292
{
283293
if (!StringUtils.isBlank(AnalyticsService.getTrackingScript()))
284294
{
@@ -288,31 +298,38 @@ private String getAnalyticsScript(String eventAction, String fileName, boolean a
288298
// request if the download opens on the same page.
289299
String timeout = addWaitTime ? "that=this; setTimeout(function(){location.href=that.href;},400);return false;" : "";
290300

291-
// Universal Analytics - remove after conversion to GA4 is complete
292-
String onClickScript = "try {_gaq.push(['_trackEvent', 'Lincs', " + PageFlowUtil.qh(eventAction) + ", " + PageFlowUtil.qh(fileName) + "]); } catch (err) {}";
293301
// GA4 variant
294-
onClickScript += "try {gtag('event', 'Lincs', {eventAction: " + PageFlowUtil.qh(eventAction) + ", fileName: " + PageFlowUtil.qh(fileName) + "}); } catch(err) {}";
302+
String onClickScript = "try {gtag('event', 'Lincs', {eventAction: " + PageFlowUtil.qh(eventAction) + ", fileName: " + PageFlowUtil.qh(fileName) + "}); } catch(err) {}";
295303
onClickScript += timeout;
296304
return onClickScript;
297305
}
298306
return null;
299307
}
300308

301-
private HtmlString externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType)
309+
public static HtmlString externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType, String gctFileDavUrl)
302310
{
303-
String gctFileUrl = davUrl + "GCT/" + PageFlowUtil.encodePath(fileName);
304-
String morpheusUrl = getMorpheusUrl(gctFileUrl, assayType);
311+
String morpheusUrl = getMorpheusUrl(gctFileDavUrl, assayType);
305312

306313
String analyticsScript = getAnalyticsScript("Morpheus", fileName, false);
307-
String onclickEvt = StringUtils.isBlank(analyticsScript) ? "" : "onclick=\"" + analyticsScript + "\"";
308314

309315
String imgUrl = AppProps.getInstance().getContextPath() + "/lincs/GENE-E_icon.png";
310316

311-
// TODO: Should use a LinkBuilder, etc.
312-
return HtmlString.unsafe("[&nbsp;<a target=\"_blank\" " + onclickEvt + " href=\"" + morpheusUrl + "\">View in Morpheus</a> <img src=" + imgUrl + " width=\"13\", height=\"13\"/>&nbsp;]");
317+
LinkBuilder viewInMorpheusLink = LinkBuilder.simpleLink("View in Morpheus", morpheusUrl).target("_blank");
318+
if (analyticsScript != null)
319+
{
320+
viewInMorpheusLink.onClick(analyticsScript);
321+
}
322+
323+
return HtmlString.of(DOM.SPAN("[",
324+
HtmlString.NBSP,
325+
viewInMorpheusLink,
326+
HtmlString.NBSP,
327+
IMG(at(src, imgUrl).at(width, 13).at(height, 13)),
328+
HtmlString.NBSP,
329+
"]"));
313330
}
314331

315-
private String getMorpheusUrl(String gctFileUrl, LincsModule.LincsAssay assayType)
332+
private static String getMorpheusUrl(String gctFileUrl, LincsModule.LincsAssay assayType)
316333
{
317334
String morpheusJson = "{\"dataset\":\"" + gctFileUrl + "\",";
318335
if(assayType == LincsModule.LincsAssay.P100)

lincs/src/org/labkey/lincs/view/downloadCustomGCT.jsp

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626
<%@ page import="org.labkey.lincs.LincsController.SelectedAnnotation" %>
2727
<%@ page import="java.util.List" %>
2828
<%@ page import="java.util.stream.Collectors" %>
29+
<%@ page import="org.labkey.api.files.FileContentService" %>
30+
<%@ page import="java.net.URI" %>
31+
<%@ page import="org.labkey.lincs.LincsController" %>
32+
<%@ page import="org.labkey.lincs.LincsModule.LincsAssay" %>
33+
<%@ page import="org.labkey.api.util.HtmlString" %>
34+
<%@ page import="org.labkey.lincs.LincsDataTable.GctColumnPSP" %>
2935
<%@ page extends="org.labkey.api.jsp.JspBase" %>
3036
<%@ taglib prefix="labkey" uri="http://www.labkey.org/taglib" %>
3137
<labkey:errors/>
@@ -34,7 +40,7 @@
3440
@Override
3541
public void addClientDependencies(ClientDependencies dependencies)
3642
{
37-
dependencies.add("Ext4");
43+
dependencies.add("/lincs/lincs.css");
3844
}
3945
%>
4046
<%
@@ -46,31 +52,15 @@
4652
ActionURL downloadGctUrl = urlFor(DownloadCustomGCTReportAction.class);
4753
String fileName = FileUtil.getFileName(gctBean.getGctFile());
4854
downloadGctUrl.addParameter("fileName", fileName);
49-
%>
50-
51-
<script type="text/javascript" nonce="<%=getScriptNonce()%>">
52-
53-
LABKEY.requiresCss("/lincs/lincs.css");
54-
LABKEY.requiresScript("/lincs/lincs.js");
55-
56-
// Initialize
57-
Ext4.onReady(init);
58-
function init()
59-
{
60-
var container = LABKEY.ActionURL.getContainer();
61-
var assayType = container.indexOf("P100") !== -1 ? "P100" : "GCP";
62-
console.log("Initializing for <%=h(fileName)%>");
63-
var morpheusUrl = externalHeatmapViewerLink(container, '<%=h(fileName)%>', "morpheusLink", assayType);
64-
console.log("Morpheus URL: " + morpheusUrl);
65-
}
66-
67-
</script>
68-
6955
56+
URI webDavUri = FileContentService.get().getWebDavUrl(gctBean.getGctFile(), getContainer(), FileContentService.PathType.full);
57+
LincsAssay assayType = LincsController.getLincsAssayType(getContainer());
58+
HtmlString morpheusViewerLink = GctColumnPSP.externalHeatmapViewerLink(fileName, assayType, webDavUri.toString());
59+
%>
7060

7161
<div style="margin:20px 10px 20px 10px">
7262
<span style="font-weight:bold;"><a href="<%=h(downloadGctUrl)%>">[Download GCT]</a></span>
73-
<span style="font-weight:bold;" id="morpheusLink"></span>
63+
<span style="font-weight:bold;" id="morpheusLink"><%=morpheusViewerLink%></span>
7464
<div style="color:red; margin-bottom:20px;">NOTE: The file will be deleted from the server after it is downloaded.</div>
7565

7666
<div style="margin:20px 10px 20px 10px">
@@ -92,4 +82,5 @@
9282
<div># Replicates: <%=gctBean.getReplicateCount()%></div>
9383
<div># Probe Annotations: <%=gctBean.getProbeAnnotationCount()%></div>
9484
<div># Replicate Annotations: <%=gctBean.getReplicateAnnotationCount()%></div>
85+
</div>
9586
</div>

panoramapublic/webapp/PanoramaPublic/js/slideshow.js

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,6 @@ function addSlides(json)
7878
appendText(entry, slideshowTexts);
7979
}
8080

81-
// Attach the 'onclick' event handlers
82-
for(let i = 0; i < catalog.length; i++)
83-
{
84-
const index = i + existingSlideCount + 1;
85-
const el = document.getElementById(DOT_NAV_ID_PREFIX + index);
86-
if (el)
87-
{
88-
el.onclick = function() { currentSlide(index); };
89-
}
90-
}
9181
showSlides();
9282
}
9383
else
@@ -117,13 +107,11 @@ function appendCoverSlide(entry, coverslideContainer)
117107

118108
function appendDot(dotsContainer, index)
119109
{
120-
// Examples:
121-
// <span class="dot active" onclick="currentSlide(1)"></span>
122-
// <span class="dot" onclick="currentSlide(2)"></span>
123110
const dot = document.createElement('span');
124111
const cls = index === 1 ? "dot active" : "dot";
125112
dot.setAttribute('class', cls);
126113
dot.setAttribute('id', DOT_NAV_ID_PREFIX + index);
114+
dot['onclick'] = function(){ currentSlide(index); }; // CSP-compliant
127115
dotsContainer.appendChild(dot);
128116
dotsContainer.appendChild(document.createTextNode(" ") );
129117
}
@@ -276,8 +264,8 @@ function appendSlidesContainer(parentDivId)
276264
'</div>';
277265

278266
parentDiv.innerHTML = slideshowHtml;
279-
document.getElementById(nextSlideBtnId).onclick = function() { plusSlides(-1); };
280-
document.getElementById(prevSlideBtnId).onclick = function() { plusSlides(1); };
267+
document.getElementById(nextSlideBtnId)['onclick'] = function() { plusSlides(-1); };
268+
document.getElementById(prevSlideBtnId)['onclick'] = function() { plusSlides(1); };
281269

282270
return true;
283271
}

0 commit comments

Comments
 (0)