|
@@ -131,7 +131,9 @@
|
|
class="h-full w-full absolute top-0 pointer-events-none left-0 z-10"
|
|
class="h-full w-full absolute top-0 pointer-events-none left-0 z-10"
|
|
>
|
|
>
|
|
<rect
|
|
<rect
|
|
- v-bind="hoverElementRect"
|
|
|
|
|
|
+ v-for="(item, index) in state.hoveredElements"
|
|
|
|
+ v-bind="item"
|
|
|
|
+ :key="index"
|
|
stroke-width="2"
|
|
stroke-width="2"
|
|
stroke="#fbbf24"
|
|
stroke="#fbbf24"
|
|
fill="rgba(251, 191, 36, 0.2)"
|
|
fill="rgba(251, 191, 36, 0.2)"
|
|
@@ -176,15 +178,10 @@ const state = reactive({
|
|
isExecuting: false,
|
|
isExecuting: false,
|
|
selectElements: [],
|
|
selectElements: [],
|
|
selectorType: 'css',
|
|
selectorType: 'css',
|
|
|
|
+ hoveredElements: [],
|
|
selectedElements: [],
|
|
selectedElements: [],
|
|
hide: window.self !== window.top,
|
|
hide: window.self !== window.top,
|
|
});
|
|
});
|
|
-const hoverElementRect = reactive({
|
|
|
|
- x: 0,
|
|
|
|
- y: 0,
|
|
|
|
- height: 0,
|
|
|
|
- width: 0,
|
|
|
|
-});
|
|
|
|
const cardRect = reactive({
|
|
const cardRect = reactive({
|
|
x: 0,
|
|
x: 0,
|
|
y: 0,
|
|
y: 0,
|
|
@@ -193,11 +190,21 @@ const cardRect = reactive({
|
|
});
|
|
});
|
|
|
|
|
|
/* eslint-disable no-use-before-define */
|
|
/* eslint-disable no-use-before-define */
|
|
-const getElementSelector = (element) =>
|
|
|
|
|
|
+const getElementSelector = (element, options = {}) =>
|
|
state.selectorType === 'css'
|
|
state.selectorType === 'css'
|
|
? getCssSelector(element, {
|
|
? getCssSelector(element, {
|
|
|
|
+ root: document.body,
|
|
|
|
+ blacklist: [
|
|
|
|
+ '[focused]',
|
|
|
|
+ /focus/,
|
|
|
|
+ '[data-*]',
|
|
|
|
+ '[href=*]',
|
|
|
|
+ '[src=*]',
|
|
|
|
+ '[value=*]',
|
|
|
|
+ ],
|
|
|
|
+ selectors: ['id', 'class', 'tag', 'attribute'],
|
|
includeTag: true,
|
|
includeTag: true,
|
|
- blacklist: ['[focused]', /focus/, /href/, /src/],
|
|
|
|
|
|
+ ...options,
|
|
})
|
|
})
|
|
: generateXPath(element);
|
|
: generateXPath(element);
|
|
|
|
|
|
@@ -302,10 +309,10 @@ function handleMouseMove({ clientX, clientY, target }) {
|
|
|
|
|
|
if (state.hide || rootElement === target) return;
|
|
if (state.hide || rootElement === target) return;
|
|
|
|
|
|
- Object.assign(hoverElementRect, getElementRect(target));
|
|
|
|
|
|
+ state.hoveredElements = [getElementRect(target)];
|
|
}
|
|
}
|
|
function handleClick(event) {
|
|
function handleClick(event) {
|
|
- const { target, path, ctrlKey, shiftKey } = event;
|
|
|
|
|
|
+ const { target, path, ctrlKey } = event;
|
|
|
|
|
|
if (target === rootElement || state.hide || state.isExecuting) return;
|
|
if (target === rootElement || state.hide || state.isExecuting) return;
|
|
|
|
|
|
@@ -325,8 +332,9 @@ function handleClick(event) {
|
|
highlight: false,
|
|
highlight: false,
|
|
};
|
|
};
|
|
|
|
|
|
- if ((state.selectorType === 'css' && ctrlKey) || shiftKey) {
|
|
|
|
|
|
+ if (state.selectorType === 'css' && ctrlKey) {
|
|
let elementIndex = -1;
|
|
let elementIndex = -1;
|
|
|
|
+
|
|
const elements = state.selectedElements.map(({ element }, index) => {
|
|
const elements = state.selectedElements.map(({ element }, index) => {
|
|
if (element === targetElement) {
|
|
if (element === targetElement) {
|
|
elementIndex = index;
|
|
elementIndex = index;
|
|
@@ -397,14 +405,15 @@ const handleScroll = debounce(() => {
|
|
|
|
|
|
const yPos = window.scrollY - lastScrollPosY;
|
|
const yPos = window.scrollY - lastScrollPosY;
|
|
const xPos = window.scrollX - lastScrollPosX;
|
|
const xPos = window.scrollX - lastScrollPosX;
|
|
|
|
+ const updateState = (key) => {
|
|
|
|
+ state[key].forEach((_, index) => {
|
|
|
|
+ state[key][index].x -= xPos;
|
|
|
|
+ state[key][index].y -= yPos;
|
|
|
|
+ });
|
|
|
|
+ };
|
|
|
|
|
|
- state.selectedElements.forEach((_, index) => {
|
|
|
|
- state.selectedElements[index].x -= xPos;
|
|
|
|
- state.selectedElements[index].y -= yPos;
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- hoverElementRect.x -= xPos;
|
|
|
|
- hoverElementRect.y -= yPos;
|
|
|
|
|
|
+ updateState('hoveredElements');
|
|
|
|
+ updateState('selectedElements');
|
|
|
|
|
|
lastScrollPosX = window.scrollX;
|
|
lastScrollPosX = window.scrollX;
|
|
lastScrollPosY = window.scrollY;
|
|
lastScrollPosY = window.scrollY;
|
|
@@ -418,14 +427,9 @@ function destroy() {
|
|
elSelector: '',
|
|
elSelector: '',
|
|
isDragging: false,
|
|
isDragging: false,
|
|
isExecuting: false,
|
|
isExecuting: false,
|
|
|
|
+ hoveredElements: [],
|
|
selectedElements: [],
|
|
selectedElements: [],
|
|
});
|
|
});
|
|
- Object.assign(hoverElementRect, {
|
|
|
|
- x: 0,
|
|
|
|
- y: 0,
|
|
|
|
- height: 0,
|
|
|
|
- width: 0,
|
|
|
|
- });
|
|
|
|
|
|
|
|
document.documentElement.style.fontSize = originalFontSize;
|
|
document.documentElement.style.fontSize = originalFontSize;
|
|
}
|
|
}
|