|
1 | 1 | <script lang="ts">
|
2 | 2 | import { onMount } from 'svelte';
|
3 | 3 | import { clickedElement, showPanel } from '../Stores';
|
4 |
| - import { calculateRect } from '../lib/Modules/helperFunctions'; |
5 |
| - import { elements } from './Panel.svelte'; |
| 4 | + import { calculateRect, ghostImageHandler } from '../lib/Modules/helperFunctions'; |
| 5 | + import { PanelElements } from './Panel.svelte'; |
6 | 6 |
|
7 |
| - // type for insertAdjacentHTML on the drop() event |
| 7 | + // types for insertAdjacentHTML on the drop() event |
8 | 8 | type InsertPosition = 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend';
|
9 | 9 | let position: InsertPosition;
|
10 | 10 |
|
11 | 11 | let hoveredElement: HTMLElement;
|
12 | 12 | let draggedElement: HTMLElement | null = null;
|
13 | 13 |
|
14 |
| - // handle the ghost position + visibility |
15 |
| - function ghostImageHandler(top: number, left: number, display?: 'block' | 'none') { |
16 |
| - const ghost_img = <HTMLDivElement>document.getElementById('ghost_img'); |
17 |
| - if (display) { |
18 |
| - ghost_img.style.display = display; |
19 |
| - } |
20 |
| - ghost_img.style.top = top + 'px'; |
21 |
| - ghost_img.style.left = left + 'px'; |
22 |
| - } |
23 |
| -
|
24 | 14 | onMount(() => {
|
25 | 15 | const iFrame = <HTMLIFrameElement>document.getElementById('frame');
|
26 | 16 | const ghost_img = <HTMLDivElement>document.getElementById('ghost_img');
|
|
40 | 30 | ghost_img.innerText = ghostText;
|
41 | 31 | ghost_img.style.display = 'block';
|
42 | 32 |
|
43 |
| - htmlCode = elements[ghostText].code; |
| 33 | + htmlCode = PanelElements[ghostText].code; |
44 | 34 | });
|
45 | 35 |
|
46 | 36 | document.addEventListener('dragover', (e) => {
|
47 | 37 | e.preventDefault();
|
| 38 | +
|
48 | 39 | ghost_img.style.top = e.clientY + 15 + 'px';
|
49 | 40 | ghost_img.style.left = e.clientX + 25 + 'px';
|
| 41 | +
|
50 | 42 | indicator.style.display = 'none';
|
51 | 43 | });
|
52 | 44 |
|
53 | 45 | document.addEventListener('drop', (e) => {
|
54 | 46 | e.preventDefault();
|
| 47 | +
|
55 | 48 | ghostImageHandler(60, 75, 'none');
|
| 49 | +
|
56 | 50 | indicator.style.display = 'none';
|
| 51 | +
|
57 | 52 | draggedElement = null;
|
58 | 53 | });
|
59 | 54 |
|
60 | 55 | document.addEventListener('dragend', (e) => {
|
61 | 56 | e.preventDefault();
|
| 57 | +
|
62 | 58 | ghostImageHandler(60, 75, 'none');
|
| 59 | +
|
63 | 60 | indicator.style.display = 'none';
|
| 61 | +
|
64 | 62 | draggedElement = null;
|
65 | 63 | });
|
66 | 64 |
|
67 |
| - // make the iframe reload |
| 65 | + // make the iframe reload for changes |
68 | 66 | iFrame.src = 'userFiles/index.html';
|
69 | 67 |
|
70 | 68 | iFrame.addEventListener('load', () => {
|
|
74 | 72 | e.preventDefault();
|
75 | 73 | e.stopPropagation();
|
76 | 74 |
|
77 |
| - // hide NotSelected panel on click |
| 75 | + // hide NotSelected.svelte |
78 | 76 | let NotSelected = <HTMLDivElement>document.getElementById('not_selected');
|
79 | 77 | NotSelected.style.visibility = 'hidden';
|
80 | 78 |
|
81 |
| - // hide elements panel on click |
| 79 | + // hide Panel.svelte |
82 | 80 | showPanel.update(() => false);
|
83 | 81 |
|
84 | 82 | clickedElement.update(() => e.target as HTMLElement);
|
85 | 83 |
|
86 |
| - calculateRect($clickedElement, click_selector); |
| 84 | + calculateRect(e.target as HTMLElement, click_selector); |
| 85 | +
|
87 | 86 | click_selector.style.display = 'block';
|
88 | 87 | });
|
89 | 88 |
|
90 | 89 | iFrameDoc.addEventListener('mouseover', (e) => {
|
91 | 90 | hoveredElement = e.target as HTMLElement;
|
92 |
| - if (hoveredElement.tagName !== 'BODY') { |
93 |
| - hoveredElement.draggable = true; |
94 |
| - } |
| 91 | + if (hoveredElement.tagName !== 'BODY') hoveredElement.draggable = true; |
95 | 92 |
|
96 | 93 | calculateRect(hoveredElement, hover_selector);
|
| 94 | +
|
97 | 95 | hover_selector.style.display = 'block';
|
98 | 96 | });
|
99 | 97 |
|
100 | 98 | iFrameDoc.addEventListener('mouseout', (e) => {
|
101 |
| - let elem = e.target as HTMLElement; |
102 |
| - elem.removeAttribute('draggable'); |
| 99 | + const mouseoutElem = e.target as HTMLElement; |
| 100 | + mouseoutElem.removeAttribute('draggable'); |
| 101 | +
|
103 | 102 | hover_selector.style.display = 'none';
|
104 | 103 | });
|
105 | 104 |
|
106 | 105 | iFrameDoc.addEventListener('dragstart', (e) => {
|
107 | 106 | e.stopPropagation();
|
| 107 | +
|
108 | 108 | const blank = iFrameDoc.createElement('div');
|
109 | 109 | e.dataTransfer!.setDragImage(blank, 0, 0);
|
110 | 110 |
|
111 | 111 | draggedElement = e.target as HTMLElement;
|
112 |
| - htmlCode = draggedElement!.outerHTML; |
113 |
| - ghost_img.style.visibility = 'hidden'; |
| 112 | + htmlCode = draggedElement.outerHTML; |
| 113 | +
|
| 114 | + ghost_img.style.display = 'none'; |
114 | 115 | });
|
115 | 116 |
|
116 | 117 | iFrameDoc.addEventListener('dragover', (e) => {
|
|
134 | 135 | indicator.style.display = 'none';
|
135 | 136 | indicator.style.borderTop = '';
|
136 | 137 | indicator.style.borderBottom = '';
|
| 138 | +
|
137 | 139 | position = 'beforeend';
|
138 | 140 | } else {
|
139 | 141 | // insert above the the element
|
140 | 142 | if (Math.abs((e as MouseEvent).pageY - rect.top) <= rect.height / 2) {
|
141 | 143 | indicator.style.borderTop = '3px solid #007bfb';
|
142 | 144 | indicator.style.borderBottom = '';
|
| 145 | +
|
143 | 146 | position = 'beforebegin';
|
144 | 147 | }
|
145 | 148 | // insert below the element
|
146 | 149 | else {
|
147 | 150 | indicator.style.borderTop = '';
|
148 | 151 | indicator.style.borderBottom = '3px solid #007bfb';
|
| 152 | +
|
149 | 153 | position = 'afterend';
|
150 | 154 | }
|
151 | 155 | }
|
|
168 | 172 | }
|
169 | 173 |
|
170 | 174 | indicator.style.display = 'none';
|
| 175 | +
|
171 | 176 | draggedElement = null;
|
172 | 177 | });
|
173 | 178 |
|
174 | 179 | iFrameDoc.addEventListener('dragend', (e) => {
|
175 | 180 | e.stopPropagation();
|
| 181 | +
|
176 | 182 | indicator.style.display = 'none';
|
177 | 183 | });
|
178 | 184 |
|
179 | 185 | // recalculate selector styles on scroll for smooth experience
|
180 |
| - iFrameDoc.addEventListener('scroll', (e) => { |
181 |
| - if ($clickedElement) { |
182 |
| - calculateRect($clickedElement, click_selector); |
183 |
| - } |
| 186 | + iFrameDoc.addEventListener('scroll', () => { |
| 187 | + if ($clickedElement) calculateRect($clickedElement, click_selector); |
184 | 188 | calculateRect(hoveredElement, hover_selector);
|
185 | 189 | });
|
186 | 190 | });
|
187 | 191 |
|
188 |
| - window.addEventListener('resize', (e) => { |
| 192 | + window.addEventListener('resize', () => { |
189 | 193 | // updating selector styles on resize
|
190 | 194 | if ($clickedElement) {
|
191 | 195 | calculateRect($clickedElement, click_selector);
|
|
0 commit comments