Skip to content

Commit 255248d

Browse files
authored
Merge branch 'main' into repo-sync
2 parents c2c1551 + cf75284 commit 255248d

3 files changed

Lines changed: 35 additions & 18 deletions

File tree

javascripts/experiment.js

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import murmur from 'imurmurhash'
22
import { getUserEventsId, sendEvent } from './events'
3+
import toggleImages from './toggle-images'
34
// import h from './hyperscript'
45

56
const TREATMENT = 'TREATMENT'
@@ -20,11 +21,23 @@ export function sendSuccess (test) {
2021
})
2122
}
2223

24+
function applyTreatment () {
25+
// Treatment-specific options.
26+
const hideImagesByDefault = true
27+
const focusButtonByDefault = true
28+
29+
// Run toggleImages a second time on each page, but with treatment defaults.
30+
toggleImages(hideImagesByDefault, focusButtonByDefault)
31+
}
32+
2333
export default function () {
24-
// *** Example test code ***
25-
// const testName = '$test-name$'
26-
// const xbucket = bucket(testName)
27-
// const x = document.querySelector(...)
28-
// x.addEventListener('click', () => { sendSuccess(testName) })
29-
// if (xbucket === TREATMENT) applyTreatment(x)
34+
const testName = 'toggle-images'
35+
const xbucket = bucket(testName)
36+
37+
const toggleImagesBtn = document.getElementById('js-toggle-images')
38+
if (!toggleImagesBtn) return
39+
40+
toggleImagesBtn.addEventListener('click', () => { sendSuccess(testName) })
41+
42+
if (xbucket === TREATMENT) applyTreatment()
3043
}

javascripts/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ document.addEventListener('DOMContentLoaded', async () => {
4141
airgapLinks()
4242
releaseNotes()
4343
initializeEvents()
44-
experiment()
4544
helpfulness()
4645
toggleImages()
46+
experiment()
4747
})

javascripts/toggle-images.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
1-
// import { sendEvent } from './events'
21
import Cookies from 'js-cookie'
32

4-
// Determines whether images are hidden or displayed on first visit.
5-
const hideImagesByDefault = false
6-
73
// Set the image placeholder icon here.
84
const placeholderImagePath = '/assets/images/octicons/image.svg'
95

106
/*
117
* This module adds a new icon button in the margin to toggle all images on the page.
128
* It uses cookies to keep track of a user's selected image preference.
139
*/
14-
export default function () {
10+
export default function (hideImagesByDefault = false, focusButtonByDefault = false) {
1511
const toggleImagesBtn = document.getElementById('js-toggle-images')
1612
if (!toggleImagesBtn) return
1713

@@ -25,7 +21,9 @@ export default function () {
2521
toggleImagesBtn.removeAttribute('hidden')
2622

2723
// Look for a cookie with image visibility preference; otherwise, use the default.
28-
const hideImagesPreferred = (Cookies.get('hideImagesPreferred') === 'true') || hideImagesByDefault
24+
const hideImagesPreferred = Cookies.get('hideImagesPreferred') === 'false'
25+
? false
26+
: Cookies.get('hideImagesPreferred') === 'true' || hideImagesByDefault
2927

3028
// Hide the images if that is the preference.
3129
if (hideImagesPreferred) {
@@ -42,10 +40,18 @@ export default function () {
4240

4341
// Set the starting state depending on user preferences.
4442
if (hideImagesPreferred) {
43+
onIcon.setAttribute('hidden', true)
4544
offIcon.removeAttribute('hidden')
4645
toggleImagesBtn.setAttribute('aria-label', tooltipImagesOff)
46+
47+
// Show the tooltip if images are hidden by default to help users see the toggle button.
48+
// Downside: the button will begin with focus whenever the user goes to a new page.
49+
if (focusButtonByDefault) {
50+
toggleImagesBtn.focus({ preventScroll: true })
51+
}
4752
} else {
4853
onIcon.removeAttribute('hidden')
54+
offIcon.setAttribute('hidden', true)
4955
toggleImagesBtn.setAttribute('aria-label', tooltipImagesOn)
5056
}
5157

@@ -69,16 +75,14 @@ export default function () {
6975
}
7076

7177
// Remove focus from the button after click so the tooltip does not stay displayed.
72-
toggleImagesBtn.blur()
78+
// Use settimeout to work around Firefox-specific issue.
79+
setTimeout(() => { toggleImagesBtn.blur() }, 100)
7380

7481
// Save this preference as a cookie.
75-
Cookies.set('hideImagesPreferred', showOnNextClick)
82+
Cookies.set('hideImagesPreferred', showOnNextClick, { sameSite: 'strict', secure: true })
7683

7784
// Toggle the action on every click.
7885
showOnNextClick = !showOnNextClick
79-
80-
// TODO Track image toggle events
81-
// sendEvent({ type: 'imageToggle' })
8286
})
8387
}
8488

0 commit comments

Comments
 (0)