146 lines
4.7 KiB
JavaScript
146 lines
4.7 KiB
JavaScript
/**
|
|
*
|
|
*/
|
|
|
|
const displayCantoId = '#displaycanto';
|
|
const minimapviewerId = '#minimapviewer';
|
|
const displayminimapId = '#displayminimap';
|
|
const visCantoClass = '.visCanto';
|
|
|
|
let minimap = document.createElement('div');
|
|
let viewer = document.createElement('div');
|
|
let minimapContent = document.createElement('iframe');
|
|
let realScale;
|
|
let currentMinimap = '';
|
|
let initOffset = '';
|
|
|
|
|
|
function drawMinimap(name){
|
|
currentMinimap = name;
|
|
initOffset = parseInt($("body").css("padding-top").replace("px", ""))+63;
|
|
showMinimap();
|
|
$(displayCantoId).scrollTop(0);
|
|
$(minimapviewerId).offset({ top: initOffset});
|
|
var minimapTopPos = $(minimapviewerId).offset().top;
|
|
|
|
$(minimapviewerId).draggable({
|
|
axis: "y",
|
|
containment: $(displayminimapId),
|
|
scroll: false,
|
|
start: function(event, ui) { minimapScrolling = true; },
|
|
stop: function(event, ui) { minimapScrolling = false; },
|
|
drag: function(event, ui) {
|
|
minimapScrolling = true;
|
|
$(displayCantoId).scrollTop((ui.offset.top - minimapTopPos) / realScale);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
function showMinimap() {
|
|
|
|
viewer.className = 'minimap__viewer';
|
|
viewer.id = 'minimapviewer';
|
|
minimapContent.className = 'minimap__content';
|
|
minimap.append(viewer, minimapContent);
|
|
$(displayminimapId).append(minimap);
|
|
|
|
let html = $(currentMinimap)[0].outerHTML;
|
|
if (html == null | html == '')
|
|
return;
|
|
|
|
let iFrameDoc = minimapContent.contentWindow.document;
|
|
|
|
var cssLinkb = document.createElement("link");
|
|
cssLinkb.href = $("#" + currStyle + "-Boot")[0].href;
|
|
cssLinkb.rel = "stylesheet";
|
|
cssLinkb.type = "text/css";
|
|
|
|
var cssLinkscroll = document.createElement("link");
|
|
cssLinkscroll.href = $("#" + currStyle + "-Custom")[0].href;
|
|
cssLinkscroll.rel = "stylesheet";
|
|
cssLinkscroll.type = "text/css";
|
|
|
|
iFrameDoc.open();
|
|
iFrameDoc.write('<div class="blog-main w-100 " style="display: d-flex;">'); // da pulire...
|
|
iFrameDoc.write(html);
|
|
iFrameDoc.write('</div>');
|
|
iFrameDoc.close();
|
|
|
|
iFrameDoc.head.appendChild(cssLinkb);
|
|
iFrameDoc.head.appendChild(cssLinkscroll);
|
|
|
|
let bgCanto = $(".visCanto").css('background-color');
|
|
$('iframe').contents().find('body').css('background-color', bgCanto + ' !important;');
|
|
|
|
getDimensionsDiv();
|
|
|
|
window.addEventListener('resize', getDimensionsDiv);
|
|
}
|
|
|
|
|
|
function getDimensionsDiv() {
|
|
var srcCantoHeight = $(currentMinimap)[0].clientHeight;
|
|
//var maxHeight = ($(displayminimapId)[0].clientHeight)-4-63; //h attuale dello spazio minimap -4 padding -63 top padding
|
|
var maxHeight = ($(displayminimapId)[0].clientHeight)-66; //h attuale dello spazio minimap; -63 top padding, -2 bordi minimapviewer, -1 bordo col, -4 bordi iframe
|
|
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
|
|
var miniCantoHeight = srcCantoHeight+32; //h prevista del canto nella minimap 16x2: padding py
|
|
|
|
var resizableWidth = $(visCantoClass)[0].clientWidth;
|
|
var resizableHeight = $(visCantoClass)[0].clientHeight;
|
|
var resizableRatio = resizableHeight/resizableWidth;
|
|
var heightRatio = resizableHeight/srcCantoHeight;
|
|
|
|
let viewerHeight = (maxHeight*heightRatio)-2; // -2 = bordi
|
|
let viewerWidth = Math.min(viewerHeight/resizableRatio, maxWidth-2); // -2 bordi
|
|
|
|
realScale = Math.min((maxHeight/miniCantoHeight), 1);
|
|
minimap.style.width = '100%';
|
|
//console.log("maxHeight: "+maxHeight)
|
|
//console.log("maxWidth: "+maxWidth)
|
|
//console.log("srcCantoHeight: "+$(currentMinimap)[0].clientHeight)
|
|
//console.log("realScale: "+realScale)
|
|
|
|
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.style.height: "+minimapContent.style.height)
|
|
//console.log("minimapContent.style.width: "+minimapContent.style.width)
|
|
|
|
viewer.style.height = viewerHeight + "px";
|
|
viewer.style.width = viewerWidth + "px";
|
|
|
|
trackScrollCanto();
|
|
};
|
|
|
|
|
|
getDimDiv = function(){
|
|
getDimensionsDiv();
|
|
}
|
|
|
|
|
|
function trackScrollCanto() {
|
|
var minimapHeight = $(displayminimapId)[0].clientHeight;
|
|
var posDbefore = $(displayCantoId).scrollTop();
|
|
//console.log(posDbefore);
|
|
var srcCantoHeight = $(currentMinimap)[0].clientHeight;
|
|
//var posAfter = (minimapHeight*posDbefore)/(srcCantoHeight*1.014);
|
|
var posAfter = (minimapHeight*posDbefore)/(srcCantoHeight*1.088);
|
|
$(minimapviewerId).offset({ top: initOffset + posAfter});
|
|
}
|
|
|
|
|
|
function hideMinimap() {
|
|
$('.canto').each(function() {
|
|
$(this).attr("style", 'display:none');
|
|
});
|
|
$(".minimap__container").remove();
|
|
currentMinimap = ''
|
|
}
|
|
|
|
|