1// https://www.val.town/embed/liamdanielduffy.selfEmbedded
2export async function selfEmbeddedNoFramework(
3 req: express.Request,
4 res: express.Response,
63 });
64
65 function makeResizable(element) {
66 const resizer = document.createElement('div');
67 resizer.className = 'drag-handle bottom-right-handle';
72 resizer.addEventListener('mousedown', initResize, false);
73
74 function initResize(e) {
75 startX = e.clientX;
76 startY = e.clientY;
83 }
84
85 function resize(e) {
86 const width = startWidth + e.clientX - startX;
87 const height = startHeight + e.clientY - startY;
92 }
93
94 function stopResize() {
95 document.documentElement.removeEventListener('mousemove', resize, false);
96 document.documentElement.removeEventListener('mouseup', stopResize, false);
98 }
99
100 function makeDraggable(element) {
101 const topHandle = element.querySelector('.top-handle');
102 const iframe = element.querySelector('iframe');
104 topHandle.addEventListener('mousedown', startDrag, false);
105
106 function startDrag(e) {
107 e.preventDefault();
108 let startY = e.clientY;
112 document.documentElement.addEventListener('mouseup', stopDrag, false);
113
114 function drag(e) {
115 const deltaY = e.clientY - startY;
116 const newTop = startTop + deltaY;
118 }
119
120 function stopDrag() {
121 document.documentElement.removeEventListener('mousemove', drag, false);
122 document.documentElement.removeEventListener('mouseup', stopDrag, false);
125
126 // Prevent iframe interaction while dragging
127 iframe.addEventListener('mousedown', function (e) {
128 e.stopPropagation();
129 });