1- // import { sendEvent } from './events'
21import 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.
84const 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