Skip to content

Commit c8894c6

Browse files
authored
add copy button & track installs (#5616)
* add copy button & track installs
1 parent 50a550c commit c8894c6

4 files changed

Lines changed: 46 additions & 6 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
export default function initCopyCommand() {
2+
document.addEventListener("click", (e) => {
3+
const button = (e.target as HTMLElement).closest(
4+
"[data-js='copy-install-command']",
5+
) as HTMLElement | null;
6+
7+
if (!button) return;
8+
9+
const targetId = button.dataset.copyTarget;
10+
if (!targetId) return;
11+
12+
const codeEl = document.getElementById(targetId);
13+
if (!codeEl) return;
14+
15+
const text = codeEl.textContent?.trim();
16+
if (!text) return;
17+
18+
navigator.clipboard.writeText(text).then(() => {
19+
const icon = button.querySelector("i");
20+
if (icon) {
21+
icon.className = "p-icon--success";
22+
button.title = "Copied!";
23+
setTimeout(() => {
24+
icon.className = "p-icon--copy";
25+
button.title = "Copy to clipboard";
26+
}, 2000);
27+
}
28+
});
29+
});
30+
}

static/js/public/store-details.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ import initReportSnap from "./snap-details/reportSnap";
66
import initEmbeddedCardModal from "./snap-details/embeddedCard";
77
import { snapDetailsPosts } from "./snap-details/blog-posts";
88
import initExpandableArea from "./expandable-area";
9+
import initCopyCommand from "./snap-details/copyCommand";
910
import declareGlobal from "../libs/declare";
1011
import { trackPageView } from "@canonical/analytics-events";
1112

1213
if (window.ANALYTICS_ENDPOINT) {
1314
trackPageView("snap_details_page");
1415
}
1516

17+
initCopyCommand();
18+
1619
declareGlobal("snapcraft.public.storeDetails", {
1720
map,
1821
screenshots,

templates/store/snap-details.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@
114114
{% endif %}
115115
data-js="open-channel-map"
116116
data-controls="channel-map-install"
117-
aria-controls="channel-map-install">
117+
aria-controls="channel-map-install"
118+
data-analytics-click
119+
data-analytics-target="snap_details_install_button">
118120
Install
119121
{% if is_preview %}
120122
<span class="p-tooltip__message u-align--center" role="tooltip" id="{{ package_name }}-preview-channel-map">This content is being displayed for preview purposes</span>

templates/store/snap-details/_channel_map.html

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020
?channel={{ default_track }}/{{ lowest_risk_available }}
2121
{% endif %}"
2222
class="p-view-store-button"
23-
data-js="open-desktop">
23+
data-js="open-desktop"
24+
data-analytics-click
25+
data-analytics-target="snap_details_view_in_desktop_store"
26+
data-analytics-channel="{{ default_track }}/{{ lowest_risk_available }}">
2427
View in Desktop store
2528
</button>
2629
<p class="p-form-help-text">Make sure <a href="/docs/installing-snapd">snap support</a> is enabled in your Desktop store.</p>
@@ -30,9 +33,10 @@
3033
</div>
3134
<div class="u-fixed-width">
3235
<p><b>Install using the command line</b></p>
33-
<div class="p-code-snippet">
36+
<div class="p-code-snippet" style="position: relative;">
3437
<pre class="p-code-snippet__block--icon"><code id="snap-install">{{ install_snippet(
3538
package_name, default_track, lowest_risk_available, confinement) }}</code></pre>
39+
<button class="u-no-margin--bottom" title="Copy to clipboard" data-js="copy-install-command" data-copy-target="snap-install" data-analytics-click data-analytics-target="snap_details_copy_install_command" data-analytics-channel="{{ default_track }}/{{ lowest_risk_available }}" style="position: absolute; top: 0.5rem; right: 0.5rem; background: transparent; border: none; cursor: pointer; padding: 0.25rem;"><i class="p-icon--copy" style="opacity: 0.7;">Copy to clipboard</i></button>
3640
</div>
3741
<p class="p-form-help-text">
3842
Don't have snapd? <a href="/docs/installing-snapd">Get set up for snaps</a>.
@@ -167,16 +171,17 @@
167171
</div>
168172
</div>
169173
<p>Ubuntu 16.04 or later?</p>
170-
<button data-snap="{{ package_name }}?channel=${channel}" class="p-view-store-button" data-js="open-desktop">View in Desktop store</button>
174+
<button data-snap="{{ package_name }}?channel=${channel}" class="p-view-store-button" data-js="open-desktop" data-analytics-click data-analytics-target="snap_details_channel_view_in_desktop_store" data-analytics-channel="${channel}">View in Desktop store</button>
171175
<p class="p-form-help-text">Make sure <a href="/docs/installing-snapd">snap support</a> is enabled in your Desktop store.</p>
172176
</div>
173177
<div class="u-fixed-width">
174178
<hr />
175179
</div>
176180
<div class="u-fixed-width">
177181
<p><b>Install using the command line</b></p>
178-
<div class="p-code-snippet">
182+
<div class="p-code-snippet" style="position: relative;">
179183
<pre class="p-code-snippet__block--icon is-wrapped"><code id="snap-install-alt">sudo snap install {{ package_name }}${paramString}</code></pre>
184+
<button class="u-no-margin--bottom" title="Copy to clipboard" data-js="copy-install-command" data-copy-target="snap-install-alt" data-analytics-click data-analytics-target="snap_details_channel_copy_install_command" data-analytics-channel="${channel}" style="position: absolute; top: 0.5rem; right: 0.5rem; background: transparent; border: none; cursor: pointer; padding: 0.25rem;"><i class="p-icon--copy" style="opacity: 0.7;">Copy to clipboard</i></button>
180185
</div>
181186
<p class="p-form-help-text">
182187
Don't have snapd? <a href="/docs/installing-snapd">Get set up for snaps</a>.
@@ -189,7 +194,7 @@
189194
<td>${row[0]}/${row[1]}</td>
190195
<td>${row[2]}</td>
191196
<td class="u-hide--medium u-hide--small">${row[3]}</td>
192-
<td class="u-align--center"><a href="#" class="p-channel-map__version-table-install">Install &rsaquo;</a></td>
197+
<td class="u-align--center"><a href="#" class="p-channel-map__version-table-install" data-analytics-click data-analytics-target="snap_details_channel_version_install" data-analytics-channel="${row[0]}/${row[1]}" data-analytics-version="${row[2]}">Install &rsaquo;</a></td>
193198
</tr>
194199
</script>
195200

0 commit comments

Comments
 (0)