|
29 | 29 | import org.labkey.api.query.FilteredTable; |
30 | 30 | import org.labkey.api.query.UserSchema; |
31 | 31 | import org.labkey.api.settings.AppProps; |
| 32 | +import org.labkey.api.util.DOM; |
| 33 | +import org.labkey.api.util.DOM.Renderable; |
32 | 34 | import org.labkey.api.util.FileUtil; |
33 | 35 | import org.labkey.api.util.HtmlString; |
34 | 36 | import org.labkey.api.util.LinkBuilder; |
|
45 | 47 | import java.util.regex.Matcher; |
46 | 48 | import java.util.regex.Pattern; |
47 | 49 |
|
| 50 | +import static org.labkey.api.util.DOM.Attribute.height; |
| 51 | +import static org.labkey.api.util.DOM.Attribute.src; |
48 | 52 | import static org.labkey.api.util.DOM.Attribute.style; |
| 53 | +import static org.labkey.api.util.DOM.Attribute.width; |
| 54 | +import static org.labkey.api.util.DOM.IMG; |
49 | 55 | import static org.labkey.api.util.DOM.SPAN; |
50 | 56 | import static org.labkey.api.util.DOM.at; |
51 | 57 |
|
@@ -288,28 +294,35 @@ private String getAnalyticsScript(String eventAction, String fileName, boolean a |
288 | 294 | // request if the download opens on the same page. |
289 | 295 | String timeout = addWaitTime ? "that=this; setTimeout(function(){location.href=that.href;},400);return false;" : ""; |
290 | 296 |
|
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) {}"; |
293 | 297 | // GA4 variant |
294 | | - onClickScript += "try {gtag('event', 'Lincs', {eventAction: " + PageFlowUtil.qh(eventAction) + ", fileName: " + PageFlowUtil.qh(fileName) + "}); } catch(err) {}"; |
| 298 | + String onClickScript = "try {gtag('event', 'Lincs', {eventAction: " + PageFlowUtil.qh(eventAction) + ", fileName: " + PageFlowUtil.qh(fileName) + "}); } catch(err) {}"; |
295 | 299 | onClickScript += timeout; |
296 | 300 | return onClickScript; |
297 | 301 | } |
298 | 302 | return null; |
299 | 303 | } |
300 | 304 |
|
301 | | - private HtmlString externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType) |
| 305 | + private Renderable externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType) |
302 | 306 | { |
303 | 307 | String gctFileUrl = davUrl + "GCT/" + PageFlowUtil.encodePath(fileName); |
304 | 308 | String morpheusUrl = getMorpheusUrl(gctFileUrl, assayType); |
305 | 309 |
|
306 | 310 | String analyticsScript = getAnalyticsScript("Morpheus", fileName, false); |
307 | | - String onclickEvt = StringUtils.isBlank(analyticsScript) ? "" : "onclick=\"" + analyticsScript + "\""; |
308 | 311 |
|
309 | 312 | String imgUrl = AppProps.getInstance().getContextPath() + "/lincs/GENE-E_icon.png"; |
310 | 313 |
|
311 | | - // TODO: Should use a LinkBuilder, etc. |
312 | | - return HtmlString.unsafe("[ <a target=\"_blank\" " + onclickEvt + " href=\"" + morpheusUrl + "\">View in Morpheus</a> <img src=" + imgUrl + " width=\"13\", height=\"13\"/> ]"); |
| 314 | + LinkBuilder viewInMorpheusLink = LinkBuilder.simpleLink("View in Morpheus", morpheusUrl).target("_blank"); |
| 315 | + if (analyticsScript != null) |
| 316 | + { |
| 317 | + viewInMorpheusLink.onClick(analyticsScript); |
| 318 | + } |
| 319 | + |
| 320 | + return DOM.SPAN("[", |
| 321 | + HtmlString.NBSP, |
| 322 | + viewInMorpheusLink, |
| 323 | + IMG(at(src, imgUrl).at(width, 13).at(height, 13)), |
| 324 | + HtmlString.NBSP, |
| 325 | + "]"); |
313 | 326 | } |
314 | 327 |
|
315 | 328 | private String getMorpheusUrl(String gctFileUrl, LincsModule.LincsAssay assayType) |
@@ -365,12 +378,12 @@ public void renderGridCellContents(RenderContext ctx, HtmlWriter out) |
365 | 378 |
|
366 | 379 | String actionName = (getLevel() == LincsModule.LincsLevel.Config) ? "DownloadConfig" : "DownloadGCT"; |
367 | 380 | String analyticsScript = getAnalyticsScript(actionName, downloadFileName, true); |
368 | | - HtmlString morpheusUrl = externalHeatmapViewerLink(downloadFileName, getAssayType(), getLevel()); |
| 381 | + Renderable morpheusUrl = externalHeatmapViewerLink(downloadFileName, getAssayType(), getLevel()); |
369 | 382 | String downloadText = (getLevel() == LincsModule.LincsLevel.Config) ? "CFG" : "GCT"; |
370 | 383 | renderGridCell(out, analyticsScript, getGctDavUrlUnencoded(downloadFileName), downloadText, morpheusUrl); |
371 | 384 | } |
372 | 385 |
|
373 | | - private void renderGridCell(HtmlWriter out, String analyticsScript, String downloadUrl, String downloadText, HtmlString morpheusUrl) |
| 386 | + private void renderGridCell(HtmlWriter out, String analyticsScript, String downloadUrl, String downloadText, Renderable morpheusUrl) |
374 | 387 | { |
375 | 388 | // <span style="white-space: nowrap;"> is recommended instead of deprecated <nobr></nobr> |
376 | 389 | SPAN( |
@@ -408,7 +421,7 @@ private boolean fileAvailable(Integer runId, String downloadFileName) |
408 | 421 | } |
409 | 422 | } |
410 | 423 |
|
411 | | - @Nullable HtmlString externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType, LincsModule.LincsLevel level) |
| 424 | + @Nullable Renderable externalHeatmapViewerLink(String fileName, LincsModule.LincsAssay assayType, LincsModule.LincsLevel level) |
412 | 425 | { |
413 | 426 | if(level == LincsModule.LincsLevel.Config) |
414 | 427 | { |
|
0 commit comments