@ -2,10 +2,11 @@ import {svg} from '../svg.js';
const headingSelector = '.markup h1, .markup h2, .markup h3, .markup h4, .markup h5, .markup h6' ;
const headingSelector = '.markup h1, .markup h2, .markup h3, .markup h4, .markup h5, .markup h6' ;
function scrollToAnchor ( ) {
function scrollToAnchor ( hash , initial ) {
if ( document . querySelector ( ':target' ) ) return ;
// abort if the browser has already scrolled to another anchor during page load
if ( ! window . location . hash || window . location . hash . length <= 1 ) return ;
if ( initial && document . querySelector ( ':target' ) ) return ;
const id = decodeURIComponent ( window . location . hash . substring ( 1 ) ) ;
if ( hash ? . length <= 1 ) return ;
const id = decodeURIComponent ( hash . substring ( 1 ) ) ;
const el = document . getElementById ( ` user-content- ${ id } ` ) ;
const el = document . getElementById ( ` user-content- ${ id } ` ) ;
if ( el ) {
if ( el ) {
el . scrollIntoView ( ) ;
el . scrollIntoView ( ) ;
@ -24,9 +25,11 @@ export function initMarkupAnchors() {
a . classList . add ( 'anchor' ) ;
a . classList . add ( 'anchor' ) ;
a . setAttribute ( 'href' , ` # ${ encodeURIComponent ( originalId ) } ` ) ;
a . setAttribute ( 'href' , ` # ${ encodeURIComponent ( originalId ) } ` ) ;
a . innerHTML = svg ( 'octicon-link' ) ;
a . innerHTML = svg ( 'octicon-link' ) ;
a . addEventListener ( 'click' , ( e ) => {
scrollToAnchor ( e . currentTarget . getAttribute ( 'href' ) , false ) ;
} ) ;
heading . prepend ( a ) ;
heading . prepend ( a ) ;
}
}
scrollToAnchor ( ) ;
scrollToAnchor ( window . location . hash , true ) ;
window . addEventListener ( 'hashchange' , scrollToAnchor ) ;
}
}