-
Notifications
You must be signed in to change notification settings - Fork 9
/
iFrame.js
122 lines (101 loc) · 3.06 KB
/
iFrame.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//No Distractions Full Screen v4.1.7
//var op = 0.5; //Defined in python
var newheight;
var newwidth;
$('body').append(`
<style>
#bottomiFrame {
opacity: `+op+`;
transition-duration: 0.15s;
transition-property: opacity;
}
#bottomiFrame:hover {
opacity: 1;
}
</style>
`);
//Queued from python after _initWeb and _showAnswer/_showQuestion scripts are queued
function finishedLoad(){
var iframe = $('#bottomiFrame')[0]
if (window.NDAB) {
var target = iframe.contentDocument.getElementById('container')
}
else {
var target = iframe.contentDocument.getElementById('middle')
}
var observer = new MutationObserver(function(mutations, observer) {
iframe.contentWindow.resize() //must be before resize to get correct bounding box coords
resize();
});
observer.observe(target, {
subtree: true,
attributes: true,
childList: true
});
resize();
}
function resizeDummyFrame(){
var iframe = $('#bottomiFrameBkgnd')[0]
var target = iframe.contentDocument.body;
if (target != null){
newheight = target.scrollHeight;
iframe.height= newheight + "px";
}
}
function fitNDAB(){
var iframe = $('#bottomiFrame')[0]
var target = iframe.contentDocument.body;
var factor = (window.devicePixelRatio/window.defaultScale);
if (target != null){
newheight = target.scrollHeight;
iframe.height= newheight + "px";
$("div.bottomWrapper").outerHeight(newheight);
$(iframe).css('width',window.innerWidth * factor);
$("div.bottomWrapper")[0].style.transform = 'translate(0px, 0px)'
}
}
var oldZoom;
function resize(){
var factor = (window.defaultScale/(window.devicePixelRatio));
$( ".noZoom" ).each(function() {
this.style.zoom = (factor);
});
if (factor != oldZoom) { //resize is a zoom event, skip iframe adjustment
oldZoom = factor;
return
}
resizeDummyFrame()
if (window.NDAB) {
fitNDAB();
return
}
var iframe = $('#bottomiFrame')[0]
var target = iframe.contentDocument.querySelector('table:not([id="innertable"])');
if (target != null) {
//iframe is fixed to size of window
var refBB = $('#bottomiFrameBkgnd')[0].contentDocument.querySelector('table:not([id="innertable"])').getBoundingClientRect();
$(iframe).css('width',refBB.width)
boundingBox = target.getBoundingClientRect()
newheight = boundingBox.height
newwidth = boundingBox.width
x = boundingBox.x
y = boundingBox.y
//iframe is cropped to only show target
$('div.bottomWrapper').css({'width':newwidth,'height':newheight});
$('#bottomiFrame').css({'top':-y,'left':-x});
}
}
window.visualViewport.addEventListener('resize', resize);
function changeScale(x) { //Adjusts to new scale e.g. changing screen DPI; calls iFrame function to update scale
window.defaultScale = x;
$('#bottomiFrame')[0].contentWindow.changeScale(x);
$('#bottomiFrameBkgnd')[0].contentWindow.changeScale(x);
resize();
}
function enable_bottomHover(){
$("body").append(`<style>
#bottomHover:hover #bottomiFrame{
opacity: 1;
}</style>`);
$("#bottomHover").css(`pointer-events`,'auto');
}