2023-02-06 12:51:34 +01:00
/ * *
*
* /
2023-02-09 19:21:04 +01:00
const displayCantoId = '#displaycanto' ;
const minimapviewerId = '#minimapviewer' ;
const displayminimapId = '#displayminimap' ;
const visCantoClass = '.visCanto' ;
2023-02-06 12:51:34 +01:00
let minimap = document . createElement ( 'div' ) ;
let viewer = document . createElement ( 'div' ) ;
let minimapContent = document . createElement ( 'iframe' ) ;
let realScale ;
2023-02-09 19:21:04 +01:00
let currentMinimap = '' ;
let initOffset = '' ;
2023-02-08 18:58:03 +01:00
2023-02-06 12:51:34 +01:00
function drawMinimap ( name ) {
currentMinimap = name ;
2023-02-17 16:11:39 +01:00
initOffset = parseInt ( $ ( "body" ) . css ( "padding-top" ) . replace ( "px" , "" ) ) + 63 ;
2023-02-09 19:21:04 +01:00
showMinimap ( ) ;
2023-02-08 18:58:03 +01:00
$ ( displayCantoId ) . scrollTop ( 0 ) ;
2023-02-09 19:21:04 +01:00
$ ( minimapviewerId ) . offset ( { top : initOffset } ) ;
var minimapTopPos = $ ( minimapviewerId ) . offset ( ) . top ;
2023-02-08 18:58:03 +01:00
$ ( minimapviewerId ) . draggable ( {
2023-02-06 12:51:34 +01:00
axis : "y" ,
2023-02-08 18:58:03 +01:00
containment : $ ( displayminimapId ) ,
2023-02-22 18:36:28 +01:00
//containment: $(".minimap__content"),
2023-02-06 12:51:34 +01:00
scroll : false ,
start : function ( event , ui ) { minimapScrolling = true ; } ,
stop : function ( event , ui ) { minimapScrolling = false ; } ,
drag : function ( event , ui ) {
minimapScrolling = true ;
2023-02-20 13:55:06 +01:00
$ ( displayCantoId ) . scrollTop ( ( ui . offset . top - minimapTopPos ) / realScale ) ;
2023-02-06 12:51:34 +01:00
}
} ) ;
}
2023-02-09 19:21:04 +01:00
function showMinimap ( ) {
viewer . className = 'minimap__viewer' ;
viewer . id = 'minimapviewer' ;
minimapContent . className = 'minimap__content' ;
2023-02-08 18:58:03 +01:00
minimap . append ( viewer , minimapContent ) ;
2023-02-09 19:21:04 +01:00
$ ( displayminimapId ) . append ( minimap ) ;
2023-02-06 12:51:34 +01:00
2023-02-09 19:21:04 +01:00
let html = $ ( currentMinimap ) [ 0 ] . outerHTML ;
2023-02-06 12:51:34 +01:00
if ( html == null | html == '' )
return ;
let iFrameDoc = minimapContent . contentWindow . document ;
2023-02-17 13:35:01 +01:00
2023-02-06 12:51:34 +01:00
var cssLinkb = document . createElement ( "link" ) ;
2023-02-17 13:35:01 +01:00
cssLinkb . href = $ ( "#" + currStyle + "-Boot" ) [ 0 ] . href ;
2023-02-06 12:51:34 +01:00
cssLinkb . rel = "stylesheet" ;
cssLinkb . type = "text/css" ;
var cssLinkscroll = document . createElement ( "link" ) ;
2023-02-17 13:35:01 +01:00
cssLinkscroll . href = $ ( "#" + currStyle + "-Custom" ) [ 0 ] . href ;
2023-02-06 12:51:34 +01:00
cssLinkscroll . rel = "stylesheet" ;
cssLinkscroll . type = "text/css" ;
iFrameDoc . open ( ) ;
2023-02-20 13:55:06 +01:00
iFrameDoc . write ( '<div class="blog-main w-100 " style="display: d-flex;">' ) ; // da pulire...
2023-02-06 12:51:34 +01:00
iFrameDoc . write ( html ) ;
2023-02-08 18:58:03 +01:00
iFrameDoc . write ( '</div>' ) ;
2023-02-06 12:51:34 +01:00
iFrameDoc . close ( ) ;
iFrameDoc . head . appendChild ( cssLinkb ) ;
iFrameDoc . head . appendChild ( cssLinkscroll ) ;
2023-02-08 18:58:03 +01:00
2023-02-15 12:59:50 +01:00
let bgCanto = $ ( ".visCanto" ) . css ( 'background-color' ) ;
2023-02-17 13:35:01 +01:00
$ ( 'iframe' ) . contents ( ) . find ( 'body' ) . css ( 'background-color' , bgCanto + ' !important;' ) ;
2023-02-06 12:51:34 +01:00
2023-02-08 18:58:03 +01:00
getDimensionsDiv ( ) ;
2023-02-06 12:51:34 +01:00
2023-02-09 19:21:04 +01:00
window . addEventListener ( 'resize' , getDimensionsDiv ) ;
2023-02-06 12:51:34 +01:00
}
2023-02-22 18:36:28 +01:00
function getDimensionsDiv ( onlyViewer = false ) {
var srcCantoWidth = $ ( currentMinimap ) [ 0 ] . clientWidth ;
2023-02-09 19:21:04 +01:00
var srcCantoHeight = $ ( currentMinimap ) [ 0 ] . clientHeight ;
2023-02-20 13:55:06 +01:00
//var maxHeight = ($(displayminimapId)[0].clientHeight)-4-63; //h attuale dello spazio minimap -4 padding -63 top padding
2023-02-22 18:36:28 +01:00
var maxHeight = ( $ ( "#colMinimap" ) [ 0 ] . clientHeight ) - 68 ; //h attuale dello spazio minimap; -63 top padding, -2 bordi minimapviewer, -1 bordo col, -4 bordi iframe
var maxHeight2 = ( $ ( displayminimapId ) [ 0 ] . clientHeight ) - 66 ; //h attuale dello spazio minimap; -63 top padding, -2 bordi minimapviewer, -1 bordo col, -4 bordi iframe
console . log ( "maxHeight2: " + maxHeight2 + " maxHeight: " + maxHeight ) ;
2023-02-20 13:55:06 +01:00
var maxWidth = $ ( displayminimapId ) [ 0 ] . clientWidth ; //w attuale della minimap (css)
//var miniCantoHeight = Math.ceil(((srcCantoHeight-44)/25*26)+44+32); //h prevista del canto nella minimap
2023-02-22 18:36:28 +01:00
var miniCantoWidth = srcCantoWidth + 64 ; //h prevista del canto nella minimap 64: padding pr + blank space
var miniCantoHeight = srcCantoHeight + 16 ; //h prevista del canto nella minimap 16x2: padding py
2023-02-06 12:51:34 +01:00
2023-02-09 19:21:04 +01:00
var resizableWidth = $ ( visCantoClass ) [ 0 ] . clientWidth ;
var resizableHeight = $ ( visCantoClass ) [ 0 ] . clientHeight ;
2023-02-15 12:59:50 +01:00
var resizableRatio = resizableHeight / resizableWidth ;
2023-02-22 18:36:28 +01:00
var widthRatio = resizableWidth / srcCantoWidth ;
2023-02-15 12:59:50 +01:00
var heightRatio = resizableHeight / srcCantoHeight ;
2023-02-08 18:58:03 +01:00
2023-02-22 18:36:28 +01:00
//var realScaleW = Math.min((maxWidth/miniCantoWidth), 1);
//var realScaleH = Math.min((maxHeight/miniCantoHeight), 1);
realScale = Math . min ( ( maxWidth / miniCantoWidth ) , ( maxHeight / miniCantoHeight ) , 1 ) ;
2023-02-20 13:55:06 +01:00
2023-02-22 18:36:28 +01:00
//minimap.style.width = '100%';
if ( onlyViewer == false ) {
minimapContent . style . transform = ` scale( ${ realScale } ) ` ;
//minimapContent.style.height = Math.trunc(miniCantoHeight) + "px";
//minimapContent.style.width = Math.trunc(maxWidth/realScale) + "px";
minimapContent . style . height = miniCantoHeight + "px" ;
minimapContent . style . width = maxWidth / realScale + "px" ;
}
console . log ( "minimapContent height: " + ( miniCantoHeight * realScale ) ) ;
2023-02-08 18:58:03 +01:00
2023-02-22 18:36:28 +01:00
//let viewerHeight = (maxHeight*heightRatio)-2; // -2 = bordi
let viewerHeight = ( miniCantoHeight * realScale * heightRatio ) - 2 ; // -2 = bordi
let viewerWidth = Math . min ( viewerHeight / resizableRatio , maxWidth - 2 ) ; // -2 bordi
2023-02-09 19:21:04 +01:00
viewer . style . height = viewerHeight + "px" ;
viewer . style . width = viewerWidth + "px" ;
2023-02-08 18:58:03 +01:00
2023-02-22 18:36:28 +01:00
$ ( displayminimapId ) . height ( ( miniCantoHeight * realScale ) + 2 ) ;
2023-02-08 18:58:03 +01:00
trackScrollCanto ( ) ;
} ;
2023-02-06 12:51:34 +01:00
function trackScrollCanto ( ) {
2023-02-22 18:36:28 +01:00
//var minimapHeight = $(displayminimapId)[0].clientHeight;
var minimapHeight = ( $ ( currentMinimap ) [ 0 ] . clientHeight + 32 ) * realScale ;
2023-02-08 18:58:03 +01:00
var posDbefore = $ ( displayCantoId ) . scrollTop ( ) ;
2023-02-20 13:55:06 +01:00
//console.log(posDbefore);
2023-02-09 19:21:04 +01:00
var srcCantoHeight = $ ( currentMinimap ) [ 0 ] . clientHeight ;
2023-02-22 18:36:28 +01:00
var posAfter = ( minimapHeight * posDbefore ) / ( srcCantoHeight * 1.011 ) ;
//var posAfter = (minimapHeight*posDbefore)/(srcCantoHeight*1.088);
2023-02-08 18:58:03 +01:00
$ ( minimapviewerId ) . offset ( { top : initOffset + posAfter } ) ;
2023-02-06 12:51:34 +01:00
}
2023-02-08 18:58:03 +01:00
2023-02-06 12:51:34 +01:00
function hideMinimap ( ) {
$ ( '.canto' ) . each ( function ( ) {
$ ( this ) . attr ( "style" , 'display:none' ) ;
} ) ;
$ ( ".minimap__container" ) . remove ( ) ;
currentMinimap = ''
}