From 0c18156869f932498cbc52207fb71279cbce2e07 Mon Sep 17 00:00:00 2001 From: frozenhelium Date: Wed, 25 Mar 2026 12:19:55 +0545 Subject: [PATCH 1/3] feat(locate-features): add screens --- src/components/LocateFeaturesProject.vue | 300 ++++++++++++++++++ .../LocateFeaturesProjectInstructions.vue | 78 +++++ src/components/LocateFeaturesProjectTask.vue | 131 ++++++++ .../LocateFeaturesProjectTutorial.vue | 18 ++ src/components/TileOverlay.vue | 79 +++++ src/components/ValidateImageProject.vue | 4 +- src/config/projectTypes.ts | 4 + src/utils/buildTasks.ts | 1 + src/views/ProjectView.vue | 9 +- 9 files changed, 620 insertions(+), 4 deletions(-) create mode 100644 src/components/LocateFeaturesProject.vue create mode 100644 src/components/LocateFeaturesProjectInstructions.vue create mode 100644 src/components/LocateFeaturesProjectTask.vue create mode 100644 src/components/LocateFeaturesProjectTutorial.vue create mode 100644 src/components/TileOverlay.vue diff --git a/src/components/LocateFeaturesProject.vue b/src/components/LocateFeaturesProject.vue new file mode 100644 index 0000000..d10ada7 --- /dev/null +++ b/src/components/LocateFeaturesProject.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/src/components/LocateFeaturesProjectInstructions.vue b/src/components/LocateFeaturesProjectInstructions.vue new file mode 100644 index 0000000..246eec0 --- /dev/null +++ b/src/components/LocateFeaturesProjectInstructions.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/components/LocateFeaturesProjectTask.vue b/src/components/LocateFeaturesProjectTask.vue new file mode 100644 index 0000000..c384955 --- /dev/null +++ b/src/components/LocateFeaturesProjectTask.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/src/components/LocateFeaturesProjectTutorial.vue b/src/components/LocateFeaturesProjectTutorial.vue new file mode 100644 index 0000000..85d09e2 --- /dev/null +++ b/src/components/LocateFeaturesProjectTutorial.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/TileOverlay.vue b/src/components/TileOverlay.vue new file mode 100644 index 0000000..76c55dd --- /dev/null +++ b/src/components/TileOverlay.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/ValidateImageProject.vue b/src/components/ValidateImageProject.vue index 42ad66a..6bf97eb 100644 --- a/src/components/ValidateImageProject.vue +++ b/src/components/ValidateImageProject.vue @@ -111,7 +111,7 @@ function handleForward() { diff --git a/src/components/LocateFeaturesProjectTutorial.vue b/src/components/LocateFeaturesProjectTutorial.vue index 85d09e2..425a25f 100644 --- a/src/components/LocateFeaturesProjectTutorial.vue +++ b/src/components/LocateFeaturesProjectTutorial.vue @@ -1,18 +1,296 @@ + + diff --git a/src/components/TileOverlay.vue b/src/components/TileOverlay.vue index 76c55dd..0991017 100644 --- a/src/components/TileOverlay.vue +++ b/src/components/TileOverlay.vue @@ -43,6 +43,7 @@ const style = computed(() => ({ justify-content: center; cursor: pointer; isolation: isolate; + container-type: inline-size; .persistent-label, .label { @@ -52,6 +53,7 @@ const style = computed(() => ({ font-weight: bold; text-align: center; user-select: none; + font-size: min(1rem, 20cqi, 2vh, 2vw); } .label { diff --git a/src/utils/types.ts b/src/utils/types.ts index 2851019..7939d94 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -32,6 +32,7 @@ export interface TileTask { export interface TutorialTileTask extends TileTask { screen: number referenceAnswer: number + taskPartitionIndex?: number } interface SubOption { From 68401b1ed31a2c9eac9a8156b85e099a85366eb8 Mon Sep 17 00:00:00 2001 From: frozenhelium Date: Fri, 26 Jun 2026 00:48:39 +0545 Subject: [PATCH 3/3] feat: show project type on project cards - add project type tag to cards in ProjectsView - make project card images cover their container - rename "LocateFeatures" project type to "Locate Objects" - sort answer options inside LocateFeaturesProject instead of ProjectView --- src/components/LocateFeaturesProject.vue | 18 ++++++++++-------- src/config/projectTypes.ts | 2 +- src/views/ProjectView.vue | 6 +----- src/views/ProjectsView.vue | 23 +++++++++++++++++++++++ 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/components/LocateFeaturesProject.vue b/src/components/LocateFeaturesProject.vue index 9fbf805..730aa8e 100644 --- a/src/components/LocateFeaturesProject.vue +++ b/src/components/LocateFeaturesProject.vue @@ -11,7 +11,7 @@ import type { TileTask, } from '@/utils/types' import { computed, inject, onMounted, ref, shallowRef, useTemplateRef, watchEffect } from 'vue' -import { isDefined, isNotDefined, listToMap } from '@togglecorp/fujs' +import { compareNumber, isDefined, isNotDefined, listToMap } from '@togglecorp/fujs' import createInformationPages from '@/utils/createInformationPages' import { createFallbackInformationPages } from '@/utils/domain' @@ -42,6 +42,8 @@ const projectInfoRef = useTemplateRef('projectInfo') const props = defineProps() const taskContainer = shallowRef(null) +const options = computed(() => [...props.options ?? []].sort((a, b) => compareNumber(a.value, b.value))) + const logMappingStarted = inject<(projectType: string) => void>('logMappingStarted') const saveResults = inject<(results: Record, startTime: string) => void>('saveResults') @@ -92,7 +94,7 @@ watchEffect(() => { processedTasks.value, ({ taskId }) => taskId, () => Array.from(new Array(numSubGridElements.value).keys()).map( - () => props.options[0].value, + () => options.value[0].value, ), ) @@ -107,20 +109,20 @@ watchEffect(() => { const optionMapping = computed(() => listToMap( - props.options, + options.value, ({ value }) => value, ) ) const nextOptionMapping = computed(() => listToMap( - props.options, + options.value, ({ value }) => value, (_, __, index) => { - if (index === props.options.length - 1) { - return props.options[0].value + if (index === options.value.length - 1) { + return options.value[0].value } - return props.options[index + 1].value + return options.value[index + 1].value }, ), ) @@ -223,7 +225,7 @@ function handleSelectAll() { diff --git a/src/config/projectTypes.ts b/src/config/projectTypes.ts index eba1190..04571e9 100644 --- a/src/config/projectTypes.ts +++ b/src/config/projectTypes.ts @@ -28,7 +28,7 @@ const projectTypes = { component: 'streetProject', }, '9': { - name: 'LocateFeatures', + name: 'Locate Objects', component: 'locateFeaturesProject', }, '10': { diff --git a/src/views/ProjectView.vue b/src/views/ProjectView.vue index 0a9a18b..72c8910 100644 --- a/src/views/ProjectView.vue +++ b/src/views/ProjectView.vue @@ -27,7 +27,6 @@ import ValidateImageProject from '@/components/ValidateImageProject.vue' import LocateFeaturesProject from '@/components/LocateFeaturesProject.vue' import projectTypes from '@/config/projectTypes' import { decompressTasks } from '@/utils/tasks' -import { compareNumber } from '@togglecorp/fujs' export default defineComponent({ components: { @@ -118,10 +117,7 @@ export default defineComponent({ computed: { ...mapStores(useCurrentUserStore), options() { - const optionsTemp = this.project?.customOptions ?? this.project?.answerLabels; - const options = optionsTemp - ? [...optionsTemp].sort((a, b) => compareNumber(a.value, b.value)) - : undefined; + const options = this.project?.customOptions ?? this.project?.answerLabels; const completedOptions = options?.map(this.completeOptions) return completedOptions }, diff --git a/src/views/ProjectsView.vue b/src/views/ProjectsView.vue index a6ff018..3c87380 100644 --- a/src/views/ProjectsView.vue +++ b/src/views/ProjectsView.vue @@ -21,6 +21,7 @@ export default defineComponent({ currentProject: null, selectedItems: projectFilters.map((f) => f.defaultItems), showFilterCard: false, + projectTypes: projectTypes, }), computed: { ...mapStores(useCurrentUserStore), @@ -210,10 +211,15 @@ export default defineComponent({ width="350" tile > +
+ {{ projectTypes[project.projectType].name }} +
{{ project.projectTopic }} @@ -257,3 +263,20 @@ export default defineComponent({ +