mermaid: show zoom reset button always on mobile #691

This commit is contained in:
Sören Weber 2023-10-27 00:30:30 +02:00
parent 1ff5026bec
commit 6cdb5c1dad
No known key found for this signature in database
GPG key ID: BEC6D55545451B6D
2 changed files with 22 additions and 17 deletions

View file

@ -1353,6 +1353,12 @@ html[dir="rtl"] .expand > .expand-label > i.fa-chevron-right {
right: 4px; right: 4px;
top: 4px; top: 4px;
} }
@media (any-hover: none) {
/* if there is at least one input device that does not support hover, we want to force the reset button */
.svg-reset-button {
display: block;
}
}
.mermaid:hover .svg-reset-button { .mermaid:hover .svg-reset-button {
display: block; display: block;
} }

View file

@ -324,13 +324,12 @@ function initMermaid( update, attrs ) {
var svg = d3.select( this ); var svg = d3.select( this );
svg.html( '<g>' + svg.html() + '</g>' ); svg.html( '<g>' + svg.html() + '</g>' );
var inner = svg.select( '*:scope > g' ); var inner = svg.select( '*:scope > g' );
var zoom = d3.zoom().on( 'zoom', function( e ){
inner.attr( 'transform', e.transform );
if( parent.querySelector( '.svg-reset-button' ) ){
return;
}
parent.insertAdjacentHTML( 'beforeend', '<span class="svg-reset-button" title="' + window.T_Reset_view + '"><i class="fas fa-undo-alt"></i></span>' ); parent.insertAdjacentHTML( 'beforeend', '<span class="svg-reset-button" title="' + window.T_Reset_view + '"><i class="fas fa-undo-alt"></i></span>' );
var button = parent.querySelector( '.svg-reset-button' ); var button = parent.querySelector( '.svg-reset-button' );
var zoom = d3.zoom().on( 'zoom', function( e ){
inner.attr( 'transform', e.transform );
button.classList.add( "zoom" );
});
button.addEventListener( 'click', function( event ){ button.addEventListener( 'click', function( event ){
svg.transition() svg.transition()
.duration( 350 ) .duration( 350 )
@ -341,10 +340,10 @@ function initMermaid( update, attrs ) {
button.addEventListener( 'mouseleave', function() { button.addEventListener( 'mouseleave', function() {
this.removeAttribute( 'aria-label' ); this.removeAttribute( 'aria-label' );
if( this.classList.contains( 'tooltipped' ) ){ if( this.classList.contains( 'tooltipped' ) ){
this.remove(); this.classList.remove( 'tooltipped', 'tooltipped-w', 'tooltipped-se', 'tooltipped-sw' );
this.classList.remove( "zoom" );
} }
}); });
});
svg.call( zoom ); svg.call( zoom );
}); });
}, },