LiDa_Search/js/minimap.js

134 lines
3.8 KiB
JavaScript
Raw Normal View History

2023-02-06 12:51:34 +01:00
/**
*
*/
const displayCantoId = '#displaycanto'
const minimapviewerId = '#minimapviewer'
const displayminimapId = '#displayminimap'
const initOffset = 63;
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;
let mappedElement = '';
2023-02-06 12:51:34 +01:00
function drawMinimap(name){
showMinimap(name)
currentMinimap = name;
$(displayCantoId).scrollTop(0);
$(minimapviewerId).offset({ top: 63});
var minimapTopPos = $(minimapviewerId).offset().top
$(minimapviewerId).draggable({
2023-02-06 12:51:34 +01:00
axis: "y",
containment: $(displayminimapId),
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;
$(displayCantoId).scrollTop((ui.offset.top - minimapTopPos) * (1 / (realScale*1.014)));
2023-02-06 12:51:34 +01:00
}
});
}
function showMinimap(element) {
viewer.className = 'minimap__viewer'
viewer.id = 'minimapviewer'
minimapContent.className = 'minimap__content'
minimap.append(viewer, minimapContent);
$(displayminimapId).append(minimap)
2023-02-06 12:51:34 +01:00
let html = document.getElementById(element).outerHTML
2023-02-06 12:51:34 +01:00
if (html == null | html == '')
return;
let iFrameDoc = minimapContent.contentWindow.document;
var cssLinkb = document.createElement("link");
cssLinkb.href = "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css";
cssLinkb.rel = "stylesheet";
cssLinkb.type = "text/css";
var cssLinkscroll = document.createElement("link");
cssLinkscroll.href = "./css/browsingldc.css";
cssLinkscroll.rel = "stylesheet";
cssLinkscroll.type = "text/css";
iFrameDoc.open();
iFrameDoc.write('<div class="w-100 py-3 pl-3" style="display: d-flex; overflow-y: scroll;">'); // da pulire...
2023-02-06 12:51:34 +01:00
iFrameDoc.write(html);
iFrameDoc.write('</div>');
2023-02-06 12:51:34 +01:00
iFrameDoc.close();
iFrameDoc.head.appendChild(cssLinkb);
iFrameDoc.head.appendChild(cssLinkscroll);
2023-02-06 12:51:34 +01:00
$('iframe').contents().find('body').css('backgroundColor', '#f8f9fa;');
mappedElement = element;
getDimensionsDiv();
2023-02-06 12:51:34 +01:00
window.addEventListener('resize', getDimensionsDiv)
}
function getDimensionsDiv() {
var elementplace = document.getElementById(mappedElement);
2023-02-06 12:51:34 +01:00
var maxHeight = ($(displayminimapId)[0].clientHeight)-4; //h attuale dello spazio minimap
var maxWidth = $(displayminimapId)[0].clientWidth; //w attuale della minimap (css)
var cantoHeight = Math.ceil(((elementplace.clientHeight-44)/25*26)+44+32); //h prevista del canto nella minimap
2023-02-06 12:51:34 +01:00
var resizableWidth = $(".visCanto")[0].clientWidth;
var resizableHeight = $(".visCanto")[0].clientHeight;
var resizableRatio = resizableHeight / resizableWidth;
var resizableHeightRatio = resizableHeight/elementplace.clientHeight;
2023-02-06 12:51:34 +01:00
let viewerHeight = (maxHeight*resizableHeightRatio)-2; // -2 = bordi
let viewerWidth = Math.min(viewerHeight/resizableRatio, maxWidth);
realScale = (maxHeight/cantoHeight);
minimap.style.width = '100%';
2023-02-06 12:51:34 +01:00
minimapContent.style.transform = `scale(${realScale})`;
minimapContent.style.height = Math.trunc(cantoHeight+25) + "px"
minimapContent.style.width = Math.trunc(maxWidth/realScale) + "px";
viewer.style.height = viewerHeight + `px`;
viewer.style.width = viewerWidth + `px`;
trackScrollCanto();
};
2023-02-06 12:51:34 +01:00
getDimDiv = function(){
getDimensionsDiv();
}
function trackScrollCanto() {
var cantoHeight = document.getElementById(mappedElement).clientHeight;
var minimapHeight = $(displayminimapId)[0].clientHeight;
var posDbefore = $(displayCantoId).scrollTop();
var posAfter = minimapHeight/((cantoHeight/posDbefore)*1.014);
$(minimapviewerId).offset({ top: initOffset + posAfter});
2023-02-06 12:51:34 +01:00
}
2023-02-06 12:51:34 +01:00
function hideMinimap() {
$('.canto').each(function() {
$(this).attr("style", 'display:none');
});
$(".minimap__container").remove();
currentMinimap = ''
}