Skip to content

Commit

Permalink
feat: reworked ui for selector proposals
Browse files Browse the repository at this point in the history
  • Loading branch information
cawa-93 committed Jul 28, 2023
1 parent 898fc47 commit 1f46cb2
Show file tree
Hide file tree
Showing 9 changed files with 342 additions and 145 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"@vitejs/plugin-vue": "4.2.3",
"typescript": "5.1.6",
"vite": "4.4.7",
"vite-plugin-vue-chrome-i18n": "0.0.4",
"vite-plugin-vue-chrome-i18n": "0.0.7",
"web-ext": "7.6.2"
}
}
8 changes: 4 additions & 4 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

89 changes: 11 additions & 78 deletions src/content/components/ProposalDetails.vue
Original file line number Diff line number Diff line change
@@ -1,93 +1,27 @@
<script lang="ts" setup>
import {IconEye, IconLink, IconMouse, IconPlaylistCheck} from '@iconify-prerendered/vue-mdi'
import {ClickLinkProposal} from "../gtm-proposals/ClickLinkProposal.js";
import {VisibilityProposal} from "../gtm-proposals/VisibilityProposal.js";
import {FormProposal} from "../gtm-proposals/FormProposal.js";
import {ClickProposal} from "../gtm-proposals/ClickProposal.js";
import {computed} from "vue";
import DefinitionList from "./DefinitionList.vue";
import {getMessage} from "vite-plugin-vue-chrome-i18n/getMessage.js";
import {Component} from "vue";
const props = defineProps<{
proposal: VisibilityProposal | ClickLinkProposal | ClickProposal | FormProposal
definitions: { title: string, value: string }[]
}>()
const icon = computed(() => {
switch (props.proposal.constructor) {
case VisibilityProposal :
return {color: '#8bc34a', component: IconEye, label: getMessage('element_visibility')}
case ClickLinkProposal :
return {color: '#29b6f6', component: IconLink, label: getMessage('click_links')}
case ClickProposal :
return {color: '#29b6f6', component: IconMouse, label: getMessage('click')}
case FormProposal :
return {color: '#8bc34a', component: IconPlaylistCheck, label: getMessage('form_submission')}
defineProps<{
label: string
icon: {
color: string
component: Component
}
})
}>()
</script>

<template>
<details>
<summary>
<component :is="icon.component" :style="'--icon-color:' + icon.color" class="icon"></component>
{{ icon.label }}
{{ label }}
</summary>
<div class="inner-content">
<DefinitionList :definitions="definitions"/>
<slot></slot>
</div>
</details>
</template>


<!--suppress JsonStandardCompliance, HtmlUnknownTag -->
<!-- language=json -->
<chrome-i18n locale="uk">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"element_visibility": {
"message": "Видимість елемента"
},
"click_links": {
"message": "Клік: лише посилання"
},
"click": {
"message": "Клік: усі елементи"
},
"form_submission": {
"message": "Надсилання форми"
},
"video": {
"message": "Відео YouTube"
}
}
</chrome-i18n>


<!--suppress JsonStandardCompliance, HtmlUnknownTag -->
<!-- language=json -->
<chrome-i18n locale="en">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"element_visibility": {
"message": "Element Visibility"
},
"click_links": {
"message": "Click: Just Links"
},
"click": {
"message": "Click: All Elements"
},
"form_submission": {
"message": "Form Submission"
},
"video": {
"message": "YouTube Video"
}
}
</chrome-i18n>


<style scoped>
details {
Expand Down Expand Up @@ -116,8 +50,7 @@ summary {
}
.inner-content {
padding-block: 8px;
padding-inline-end: 8px;
padding-inline-start: calc(24px + 1.5em);
padding-bottom: 8px;
padding-inline: 8px;
}
</style>
72 changes: 72 additions & 0 deletions src/content/components/ProposalDetailsClick.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<script lang="ts" setup>
import {ClickProposal} from "../gtm-proposals/ClickProposal.js";
import ProposalDetails from "./ProposalDetails.vue";
import {getMessage} from 'vite-plugin-vue-chrome-i18n/getMessage.js'
import {IconMouse} from "@iconify-prerendered/vue-mdi";
defineProps<{
proposal: ClickProposal
}>()
</script>

<template>
<ProposalDetails :icon="{color: 'oklch(0.734 0.145 234.615)', component: IconMouse}" :label="getMessage('label')">
<div class="grid-container">
<div class="bordered">Click Element</div>
<div class="bordered">{{ getMessage('match_css_selector') }}</div>
<input :value="proposal.selectorValue" class="bordered" readonly type="text">
</div>
</ProposalDetails>
</template>


<chrome-i18n locale="uk">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"label": {
"message": "Клік: усі елементи"
},
"match_css_selector": {
"message": "відповідає вибору CSS"
}
}
</chrome-i18n>


<chrome-i18n locale="en">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"label": {
"message": "Click: All Elements"
},
"match_css_selector": {
"message": "matches CSS selector"
}
}
</chrome-i18n>


<style scoped>
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 5px;
}
.bordered {
height: 40px;
border: solid 1px oklch(0.894 0.006 264.53);
border-radius: 4px;
padding-left: 12px;
padding-right: 12px;
line-height: 38px;
width: 100%;
font-size: 15px;
}
input {
grid-column-start: 1;
grid-column-end: -1;
}
</style>
74 changes: 74 additions & 0 deletions src/content/components/ProposalDetailsClickLink.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<script lang="ts" setup>
import {ClickLinkProposal} from "../gtm-proposals/ClickLinkProposal.js";
import {VisibilityProposal} from "../gtm-proposals/VisibilityProposal.js";
import {FormProposal} from "../gtm-proposals/FormProposal.js";
import {ClickProposal} from "../gtm-proposals/ClickProposal.js";
import ProposalDetails from "./ProposalDetails.vue";
import {getMessage} from 'vite-plugin-vue-chrome-i18n/getMessage.js'
import {IconLink, IconMouse} from "@iconify-prerendered/vue-mdi";
defineProps<{
proposal: ClickLinkProposal
}>()
</script>

<template>
<ProposalDetails :icon="{color: 'oklch(0.734 0.145 234.615)', component: IconLink}" :label="getMessage('label')">
<div class="grid-container">
<div class="bordered">Click Element</div>
<div class="bordered">{{ getMessage('match_css_selector') }}</div>
<input :value="proposal.selectorValue" class="bordered" readonly type="text">
</div>
</ProposalDetails>
</template>


<chrome-i18n locale="uk">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"label": {
"message": "Клік: лише посилання"
},
"match_css_selector": {
"message": "відповідає вибору CSS"
}
}
</chrome-i18n>


<chrome-i18n locale="en">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"label": {
"message": "Click: Just Links"
},
"match_css_selector": {
"message": "matches CSS selector"
}
}
</chrome-i18n>

<style scoped>
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 5px;
}
.bordered {
height: 40px;
border: solid 1px oklch(0.894 0.006 264.53);
border-radius: 4px;
padding-left: 12px;
padding-right: 12px;
line-height: 38px;
width: 100%;
font-size: 15px;
}
input {
grid-column-start: 1;
grid-column-end: -1;
}
</style>
73 changes: 73 additions & 0 deletions src/content/components/ProposalDetailsForm.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<script lang="ts" setup>
import {ClickProposal} from "../gtm-proposals/ClickProposal.js";
import ProposalDetails from "./ProposalDetails.vue";
import {getMessage} from 'vite-plugin-vue-chrome-i18n/getMessage.js'
import {IconPlaylistCheck} from "@iconify-prerendered/vue-mdi";
defineProps<{
proposal: ClickProposal
}>()
</script>

<template>
<ProposalDetails :icon="{color: 'oklch(0.754 0.163 130.502)', component: IconPlaylistCheck}"
:label="getMessage('label')">
<div class="grid-container">
<div class="bordered">Form Element</div>
<div class="bordered">{{ getMessage('match_css_selector') }}</div>
<input :value="proposal.selectorValue" class="bordered" readonly type="text">
</div>
</ProposalDetails>
</template>


<chrome-i18n locale="uk">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"label": {
"message": "Надсилання форми"
},
"match_css_selector": {
"message": "відповідає вибору CSS"
}
}
</chrome-i18n>


<chrome-i18n locale="en">
{
"$schema": "https://json.schemastore.org/browser.i18n.json",
"label": {
"message": "Form Submission"
},
"match_css_selector": {
"message": "matches CSS selector"
}
}
</chrome-i18n>


<style scoped>
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 5px;
}
.bordered {
height: 40px;
border: solid 1px oklch(0.894 0.006 264.53);
border-radius: 4px;
padding-left: 12px;
padding-right: 12px;
line-height: 38px;
width: 100%;
font-size: 15px;
}
input {
grid-column-start: 1;
grid-column-end: -1;
}
</style>
Loading

0 comments on commit 1f46cb2

Please sign in to comment.