|
@@ -23,21 +23,15 @@
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex px-4 pt-4 items-center">
|
|
<div class="flex px-4 pt-4 items-center">
|
|
- <ui-tabs
|
|
|
|
- v-if="false"
|
|
|
|
- v-model="mainActiveTab"
|
|
|
|
- type="fill"
|
|
|
|
- class="main-tab"
|
|
|
|
- >
|
|
|
|
- <ui-tab value="selector"> Selector </ui-tab>
|
|
|
|
- <ui-tab value="workflow"> Workflow </ui-tab>
|
|
|
|
- </ui-tabs>
|
|
|
|
<p class="text-lg font-semibold">Automa</p>
|
|
<p class="text-lg font-semibold">Automa</p>
|
|
<div class="flex-grow"></div>
|
|
<div class="flex-grow"></div>
|
|
<button
|
|
<button
|
|
class="mr-2 hoverable p-1 rounded-md transition"
|
|
class="mr-2 hoverable p-1 rounded-md transition"
|
|
@mousedown.stop.prevent
|
|
@mousedown.stop.prevent
|
|
- @click.stop.prevent="state.hide = !state.hide"
|
|
|
|
|
|
+ @click.stop.prevent="
|
|
|
|
+ state.hide = !state.hide;
|
|
|
|
+ clearConnectedPort();
|
|
|
|
+ "
|
|
>
|
|
>
|
|
<v-remixicon :name="state.hide ? 'riEyeOffLine' : 'riEyeLine'" />
|
|
<v-remixicon :name="state.hide ? 'riEyeOffLine' : 'riEyeLine'" />
|
|
</button>
|
|
</button>
|
|
@@ -61,6 +55,14 @@
|
|
@parent="selectElementPath('up')"
|
|
@parent="selectElementPath('up')"
|
|
@child="selectElementPath('down')"
|
|
@child="selectElementPath('down')"
|
|
/>
|
|
/>
|
|
|
|
+ <ui-button
|
|
|
|
+ v-if="state.isSelectBlockElement && state.elSelector"
|
|
|
|
+ variant="accent"
|
|
|
|
+ class="w-full mt-4"
|
|
|
|
+ @click="saveSelector"
|
|
|
|
+ >
|
|
|
|
+ Select Element
|
|
|
|
+ </ui-button>
|
|
<selector-elements-detail
|
|
<selector-elements-detail
|
|
v-if="
|
|
v-if="
|
|
!state.showSettings &&
|
|
!state.showSettings &&
|
|
@@ -71,6 +73,7 @@
|
|
v-bind="{
|
|
v-bind="{
|
|
elSelector: state.elSelector,
|
|
elSelector: state.elSelector,
|
|
selectElements: state.selectElements,
|
|
selectElements: state.selectElements,
|
|
|
|
+ hideBlocks: state.isSelectBlockElement,
|
|
selectedElements: state.selectedElements,
|
|
selectedElements: state.selectedElements,
|
|
}"
|
|
}"
|
|
@highlight="toggleHighlightElement"
|
|
@highlight="toggleHighlightElement"
|
|
@@ -161,6 +164,7 @@ import SelectorElementsDetail from '@/components/content/selector/SelectorElemen
|
|
import getSelectorOptions from './getSelectorOptions';
|
|
import getSelectorOptions from './getSelectorOptions';
|
|
import { getElementRect } from '../utils';
|
|
import { getElementRect } from '../utils';
|
|
|
|
|
|
|
|
+let connectedPort = null;
|
|
const originalFontSize = document.documentElement.style.fontSize;
|
|
const originalFontSize = document.documentElement.style.fontSize;
|
|
const selectedElement = {
|
|
const selectedElement = {
|
|
path: [],
|
|
path: [],
|
|
@@ -171,7 +175,6 @@ const selectedElement = {
|
|
const rootElement = inject('rootElement');
|
|
const rootElement = inject('rootElement');
|
|
|
|
|
|
const cardEl = ref('cardEl');
|
|
const cardEl = ref('cardEl');
|
|
-const mainActiveTab = ref('selector');
|
|
|
|
const state = reactive({
|
|
const state = reactive({
|
|
hide: false,
|
|
hide: false,
|
|
elSelector: '',
|
|
elSelector: '',
|
|
@@ -183,6 +186,7 @@ const state = reactive({
|
|
selectorType: 'css',
|
|
selectorType: 'css',
|
|
selectedElements: [],
|
|
selectedElements: [],
|
|
activeTab: 'attributes',
|
|
activeTab: 'attributes',
|
|
|
|
+ isSelectBlockElement: false,
|
|
});
|
|
});
|
|
const cardRect = reactive({
|
|
const cardRect = reactive({
|
|
x: 0,
|
|
x: 0,
|
|
@@ -335,12 +339,31 @@ function destroy() {
|
|
|
|
|
|
document.documentElement.style.fontSize = originalFontSize;
|
|
document.documentElement.style.fontSize = originalFontSize;
|
|
}
|
|
}
|
|
|
|
+function clearConnectedPort() {
|
|
|
|
+ if (!connectedPort) return;
|
|
|
|
+
|
|
|
|
+ connectedPort = null;
|
|
|
|
+ state.isSelectBlockElement = false;
|
|
|
|
+}
|
|
|
|
+function onVisivilityChange() {
|
|
|
|
+ if (!connectedPort || document.visibilityState !== 'hidden') return;
|
|
|
|
+
|
|
|
|
+ clearConnectedPort();
|
|
|
|
+}
|
|
|
|
+function saveSelector() {
|
|
|
|
+ if (!connectedPort) return;
|
|
|
|
+
|
|
|
|
+ connectedPort.postMessage(state.elSelector);
|
|
|
|
+ clearConnectedPort();
|
|
|
|
+ destroy();
|
|
|
|
+}
|
|
function attachListeners() {
|
|
function attachListeners() {
|
|
cardElementObserver.observe(cardEl.value);
|
|
cardElementObserver.observe(cardEl.value);
|
|
|
|
|
|
window.addEventListener('message', onMessage);
|
|
window.addEventListener('message', onMessage);
|
|
window.addEventListener('mouseup', onMouseup);
|
|
window.addEventListener('mouseup', onMouseup);
|
|
window.addEventListener('mousemove', onMousemove);
|
|
window.addEventListener('mousemove', onMousemove);
|
|
|
|
+ document.addEventListener('visibilitychange', onVisivilityChange);
|
|
}
|
|
}
|
|
function detachListeners() {
|
|
function detachListeners() {
|
|
cardElementObserver.disconnect();
|
|
cardElementObserver.disconnect();
|
|
@@ -348,6 +371,7 @@ function detachListeners() {
|
|
window.removeEventListener('message', onMessage);
|
|
window.removeEventListener('message', onMessage);
|
|
window.removeEventListener('mouseup', onMouseup);
|
|
window.removeEventListener('mouseup', onMouseup);
|
|
window.removeEventListener('mousemove', onMousemove);
|
|
window.removeEventListener('mousemove', onMousemove);
|
|
|
|
+ document.removeEventListener('visibilitychange', onVisivilityChange);
|
|
}
|
|
}
|
|
|
|
|
|
watch(
|
|
watch(
|
|
@@ -366,6 +390,15 @@ watch(
|
|
{ deep: true }
|
|
{ deep: true }
|
|
);
|
|
);
|
|
|
|
|
|
|
|
+browser.runtime.onConnect.addListener((port) => {
|
|
|
|
+ clearConnectedPort();
|
|
|
|
+
|
|
|
|
+ connectedPort = port;
|
|
|
|
+ state.isSelectBlockElement = true;
|
|
|
|
+
|
|
|
|
+ port.onDisconnect.addListener(clearConnectedPort);
|
|
|
|
+});
|
|
|
|
+
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
browser.storage.local.get('selectorSettings').then((storage) => {
|
|
browser.storage.local.get('selectorSettings').then((storage) => {
|
|
const settings = storage.selectorSettings || {};
|
|
const settings = storage.selectorSettings || {};
|