Remove inline event handlers in the soy template.
This is required to be able to use strict-dynamic CSP. The script tags
will be updated with nonce by the Soy library.
Google-Bug-Id: b/216788721
Release-Notes: skip
Change-Id: I2db1e423b8186bae835128307ecc97fa01beed1a
diff --git a/resources/com/google/gitiles/templates/ObjectDetail.soy b/resources/com/google/gitiles/templates/ObjectDetail.soy
index 3d3c6e4..054f621 100644
--- a/resources/com/google/gitiles/templates/ObjectDetail.soy
+++ b/resources/com/google/gitiles/templates/ObjectDetail.soy
@@ -270,7 +270,7 @@
{let $n: $index + 1 /}
<tr class="u-pre u-monospace FileContents-line">
<td class="u-lineNum u-noSelect FileContents-lineNum"
- data-line-number="{$n}" onclick="window.location.hash='#{$n}'"></td>
+ data-line-number="{$n}"></td>
<td class="FileContents-lineContents" id="{$n}">
{for $span in $line}
<span class="{$span.classes}">{$span.text}</span>
@@ -279,6 +279,14 @@
</tr>
{/for}
</table>
+ <script>
+ for (let lineNumEl of document.querySelectorAll('td.u-lineNum')) {lb}
+ lineNumEl.onclick = () => {lb}
+ window.location.hash =
+ `#${lb}lineNumEl.getAttribute('data-line-number'){rb}`;
+ {rb};
+ {rb}
+ </script>
{else}
<div class="FileContents-empty">Empty file</div>
{/if}
diff --git a/resources/com/google/gitiles/templates/RepositoryIndex.soy b/resources/com/google/gitiles/templates/RepositoryIndex.soy
index ac1ab56..e8ec346 100644
--- a/resources/com/google/gitiles/templates/RepositoryIndex.soy
+++ b/resources/com/google/gitiles/templates/RepositoryIndex.soy
@@ -67,8 +67,7 @@
<div class="CloneRepo">
<div class="CloneRepo-title">Clone this repo:</div>
- <input type="text" class="u-monospace CloneRepo-command"
- onclick="this.focus();if(this.selectionStart==this.selectionEnd){lb}this.select(){rb}"
+ <input id="clone-repo-input" type="text" class="u-monospace CloneRepo-command"
readonly="readonly" value="git clone {$cloneUrl}">
</div>
@@ -99,6 +98,19 @@
{call common.footer}
{param customVariant: $customVariant /}
{/call}
+
+<script>
+ {lb}
+ let f = document.getElementById("clone-repo-input");
+ f.onclick = () => {lb}
+ f.focus();
+ if (f.selectionStart === f.selectionEnd) {lb}
+ f.select();
+ {rb}
+ {rb};
+ {rb}
+</script>
+
{/template}
/**