@abi-software/flatmapvuer 1.4.0 → 1.4.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/flatmapvuer.js +64183 -56171
- package/dist/flatmapvuer.umd.cjs +815 -808
- package/dist/style.css +1 -1
- package/package.json +8 -5
- package/src/App.vue +18 -3
- package/src/components/FlatmapVuer.vue +172 -27
- package/src/components/MultiFlatmapVuer.vue +13 -1
- package/src/icons/imageThumbnail1.js +1 -0
- package/src/icons/imageThumbnail2.js +1 -0
- package/src/icons/imageThumbnail3.js +1 -0
- package/src/main.js +1 -1
- package/src/mixins/imageMixin.js +91 -0
- package/src/services/scicrunchQueries.js +280 -0
- package/src/stores/settings.js +46 -0
- /package/src/{store → stores}/index.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abi-software/flatmapvuer",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1-beta.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/*",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"./src/*": "./src/*"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@abi-software/flatmap-viewer": "
|
|
47
|
-
"@abi-software/map-utilities": "1.1.0",
|
|
46
|
+
"@abi-software/flatmap-viewer": "3.1.4",
|
|
47
|
+
"@abi-software/map-utilities": "^1.1.0-beta.2",
|
|
48
48
|
"@abi-software/sparc-annotation": "0.3.1",
|
|
49
49
|
"@abi-software/svg-sprite": "1.0.0",
|
|
50
50
|
"@element-plus/icons-vue": "^2.3.1",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"@cypress/webpack-dev-server": "^3.6.1",
|
|
60
60
|
"@vitejs/plugin-vue": "^4.6.2",
|
|
61
61
|
"@vuese/markdown-render": "^2.11.3",
|
|
62
|
-
"@vuese/parser": "^2.
|
|
62
|
+
"@vuese/parser": "^2.9.1",
|
|
63
63
|
"auto-changelog": "^2.4.0",
|
|
64
64
|
"babel-eslint": "^10.1.0",
|
|
65
65
|
"chokidar": "^3.6.0",
|
|
@@ -92,5 +92,8 @@
|
|
|
92
92
|
"browserslist": [
|
|
93
93
|
"> 1%",
|
|
94
94
|
"last 2 versions"
|
|
95
|
-
]
|
|
95
|
+
],
|
|
96
|
+
"optionalDependencies": {
|
|
97
|
+
"@rollup/rollup-linux-x64-gnu": "^4.21.1"
|
|
98
|
+
}
|
|
96
99
|
}
|
package/src/App.vue
CHANGED
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
:displayMinimap="true"
|
|
78
78
|
:enableOpenMapUI="true"
|
|
79
79
|
:flatmapAPI="flatmapAPI"
|
|
80
|
+
:sparcAPI="sparcAPI"
|
|
80
81
|
:disableUI="disableUI"
|
|
81
82
|
@open-pubmed-url="onOpenPubmedUrl"
|
|
82
83
|
@pathway-selection-changed="onPathwaySelectionChanged"
|
|
@@ -109,6 +110,9 @@ import './icons/mapicon-species-style.css'
|
|
|
109
110
|
import MultiFlatmapVuer from './components/MultiFlatmapVuer.vue'
|
|
110
111
|
import { HelpModeDialog } from '@abi-software/map-utilities'
|
|
111
112
|
import '@abi-software/map-utilities/dist/style.css'
|
|
113
|
+
import { mapStores } from 'pinia';
|
|
114
|
+
import { useSettingsStore } from './stores/settings';
|
|
115
|
+
import { getOrganCuries } from './services/scicrunchQueries'
|
|
112
116
|
|
|
113
117
|
export default {
|
|
114
118
|
name: 'app',
|
|
@@ -145,6 +149,7 @@ export default {
|
|
|
145
149
|
if (this.consoleOn) console.log(component)
|
|
146
150
|
let taxon = component.mapImp.describes
|
|
147
151
|
let id = component.mapImp.addMarker('UBERON:0000948')
|
|
152
|
+
|
|
148
153
|
window.flatmapImp = component.mapImp
|
|
149
154
|
component.enablePanZoomEvents(true)
|
|
150
155
|
//component.showPathwaysDrawer(false);
|
|
@@ -261,6 +266,10 @@ export default {
|
|
|
261
266
|
iconClass: 'mapicon-icon_cat',
|
|
262
267
|
displayWarning: true,
|
|
263
268
|
},
|
|
269
|
+
Vagus: {
|
|
270
|
+
taxo: 'UBERON:1759',
|
|
271
|
+
displayWarning: true,
|
|
272
|
+
},
|
|
264
273
|
Sample: { taxo: 'NCBITaxon:1', displayWarning: true },
|
|
265
274
|
'Functional Connectivity': {
|
|
266
275
|
taxo: 'FunctionalConnectivity',
|
|
@@ -281,18 +290,24 @@ export default {
|
|
|
281
290
|
useHelpModeDialog: true,
|
|
282
291
|
multiflatmapRef: null,
|
|
283
292
|
mapSettings: [],
|
|
293
|
+
sparcAPI: import.meta.env.VITE_SPARC_API,
|
|
284
294
|
//flatmapAPI: "https://mapcore-demo.org/current/flatmap/v2/"
|
|
285
295
|
//flatmapAPI: "https://mapcore-demo.org/devel/flatmap/v3/"
|
|
286
|
-
|
|
287
|
-
flatmapAPI: 'https://mapcore-demo.org/devel/flatmap/v4/',
|
|
296
|
+
flatmapAPI: "https://mapcore-demo.org/current/flatmap/v3/",
|
|
297
|
+
//flatmapAPI: 'https://mapcore-demo.org/devel/flatmap/v4/',
|
|
298
|
+
//flatmapAPI: 'https://mapcore-demo.org/curation/flatmap/',
|
|
288
299
|
//flatmapAPI: "https://mapcore-demo.org/fccb/flatmap/"
|
|
289
300
|
//flatmapAPI: "https://mapcore-demo.org/staging/flatmap/v1/"
|
|
290
301
|
// flatmapAPI: "https://mapcore-demo.org/devel/flatmap/v1/",
|
|
291
|
-
ElIconSetting: shallowRef(ElIconSetting)
|
|
302
|
+
ElIconSetting: shallowRef(ElIconSetting),
|
|
292
303
|
}
|
|
293
304
|
},
|
|
294
305
|
mounted: function () {
|
|
295
306
|
this.multiflatmapRef = this.$refs.multi;
|
|
307
|
+
getOrganCuries(this.sparcAPI).then((organCuries) => this.settingsStore.updateOrganCuries(organCuries))
|
|
308
|
+
},
|
|
309
|
+
computed: {
|
|
310
|
+
...mapStores(useSettingsStore),
|
|
296
311
|
},
|
|
297
312
|
watch: {
|
|
298
313
|
helpMode: function (newVal) {
|
|
@@ -245,7 +245,7 @@ Please use `const` to assign meaningful names to them...
|
|
|
245
245
|
<div
|
|
246
246
|
class="pathway-location"
|
|
247
247
|
:class="{ open: drawerOpen, close: !drawerOpen }"
|
|
248
|
-
v-show="!disableUI"
|
|
248
|
+
v-show="!(disableUI || isCentreLine)"
|
|
249
249
|
>
|
|
250
250
|
<div
|
|
251
251
|
class="pathway-container"
|
|
@@ -377,7 +377,7 @@ Please use `const` to assign meaningful names to them...
|
|
|
377
377
|
key="taxonSelection"
|
|
378
378
|
/>
|
|
379
379
|
<selections-group
|
|
380
|
-
v-if="!isFC
|
|
380
|
+
v-if="!(isCentreLine || isFC) && centreLines && centreLines.length > 0"
|
|
381
381
|
title="Nerves"
|
|
382
382
|
labelKey="label"
|
|
383
383
|
identifierKey="key"
|
|
@@ -426,7 +426,7 @@ Please use `const` to assign meaningful names to them...
|
|
|
426
426
|
ref="backgroundPopover"
|
|
427
427
|
:virtual-ref="backgroundIconRef"
|
|
428
428
|
placement="top-start"
|
|
429
|
-
width="
|
|
429
|
+
width="330"
|
|
430
430
|
:teleported="false"
|
|
431
431
|
trigger="click"
|
|
432
432
|
popper-class="background-popper h-auto"
|
|
@@ -453,13 +453,14 @@ Please use `const` to assign meaningful names to them...
|
|
|
453
453
|
</el-row>
|
|
454
454
|
</el-row>
|
|
455
455
|
<template v-if="viewingMode === 'Annotation' && userInformation">
|
|
456
|
+
<el-row class="backgroundSpacer"></el-row>
|
|
456
457
|
<el-row class="backgroundText">Drawn By*</el-row>
|
|
457
458
|
<el-row class="backgroundControl">
|
|
458
459
|
<el-select
|
|
459
460
|
:teleported="false"
|
|
460
461
|
v-model="drawnType"
|
|
461
462
|
placeholder="Select"
|
|
462
|
-
class="select-box"
|
|
463
|
+
class="select-box annotationSelector"
|
|
463
464
|
popper-class="flatmap_dropdown"
|
|
464
465
|
@change="setDrawnType"
|
|
465
466
|
>
|
|
@@ -475,13 +476,14 @@ Please use `const` to assign meaningful names to them...
|
|
|
475
476
|
</el-option>
|
|
476
477
|
</el-select>
|
|
477
478
|
</el-row>
|
|
479
|
+
<el-row class="backgroundSpacer"></el-row>
|
|
478
480
|
<el-row class="backgroundText">Annotated By*</el-row>
|
|
479
481
|
<el-row class="backgroundControl">
|
|
480
482
|
<el-select
|
|
481
483
|
:teleported="false"
|
|
482
484
|
v-model="annotatedType"
|
|
483
485
|
placeholder="Select"
|
|
484
|
-
class="select-box"
|
|
486
|
+
class="select-box annotationSelector"
|
|
485
487
|
popper-class="flatmap_dropdown"
|
|
486
488
|
@change="setAnnotatedType"
|
|
487
489
|
>
|
|
@@ -498,6 +500,41 @@ Please use `const` to assign meaningful names to them...
|
|
|
498
500
|
</el-select>
|
|
499
501
|
</el-row>
|
|
500
502
|
</template>
|
|
503
|
+
<el-row class="backgroundSpacer" v-if="viewingMode === 'Exploration' && !isFC"></el-row>
|
|
504
|
+
<el-row class="backgroundText" v-if="viewingMode === 'Exploration' && !isFC">Markers display</el-row>
|
|
505
|
+
<el-row class="backgroundControl" v-if="viewingMode === 'Exploration' && !isFC">
|
|
506
|
+
<el-col :span="14">
|
|
507
|
+
<el-radio-group
|
|
508
|
+
v-model="imageRadio"
|
|
509
|
+
class="flatmap-radio"
|
|
510
|
+
@change="setImage"
|
|
511
|
+
>
|
|
512
|
+
<el-radio :label="false">Standard</el-radio>
|
|
513
|
+
<el-radio :label="true">Image</el-radio>
|
|
514
|
+
</el-radio-group>
|
|
515
|
+
</el-col>
|
|
516
|
+
<el-col :span="10" v-if="imageRadio">
|
|
517
|
+
<el-select
|
|
518
|
+
:teleported="false"
|
|
519
|
+
v-model="imageType"
|
|
520
|
+
placeholder="Select"
|
|
521
|
+
class="select-box imageSelector"
|
|
522
|
+
popper-class="flatmap_dropdown"
|
|
523
|
+
@change="setImageType"
|
|
524
|
+
>
|
|
525
|
+
<el-option
|
|
526
|
+
v-for="item in imageTypes"
|
|
527
|
+
:key="item"
|
|
528
|
+
:label="item"
|
|
529
|
+
:value="item"
|
|
530
|
+
>
|
|
531
|
+
<el-row>
|
|
532
|
+
<el-col :span="12">{{ item }}</el-col>
|
|
533
|
+
</el-row>
|
|
534
|
+
</el-option>
|
|
535
|
+
</el-select>
|
|
536
|
+
</el-col>
|
|
537
|
+
</el-row>
|
|
501
538
|
<el-row class="backgroundSpacer" v-if="displayFlightPathOption"></el-row>
|
|
502
539
|
<el-row class="backgroundText" v-if="displayFlightPathOption">Flight path display</el-row>
|
|
503
540
|
<el-row class="backgroundControl" v-if="displayFlightPathOption">
|
|
@@ -602,9 +639,10 @@ Please use `const` to assign meaningful names to them...
|
|
|
602
639
|
ref="tooltip"
|
|
603
640
|
class="tooltip"
|
|
604
641
|
v-show="tooltipDisplay"
|
|
642
|
+
:tooltipType="tooltipType"
|
|
643
|
+
:provenanceEntry="provenanceEntry"
|
|
605
644
|
:annotationEntry="annotationEntry"
|
|
606
|
-
:
|
|
607
|
-
:annotationDisplay="viewingMode === 'Annotation'"
|
|
645
|
+
:imageEntry="imageEntry"
|
|
608
646
|
@annotation="commitAnnotationEvent"
|
|
609
647
|
/>
|
|
610
648
|
</div>
|
|
@@ -643,10 +681,18 @@ import yellowstar from '../icons/yellowstar'
|
|
|
643
681
|
import ResizeSensor from 'css-element-queries/src/ResizeSensor'
|
|
644
682
|
import * as flatmap from '@abi-software/flatmap-viewer'
|
|
645
683
|
import { AnnotationService } from '@abi-software/sparc-annotation'
|
|
646
|
-
import { mapState } from 'pinia'
|
|
647
|
-
import { useMainStore } from '@/
|
|
684
|
+
import { mapState, mapStores } from 'pinia'
|
|
685
|
+
import { useMainStore } from '@/stores/index'
|
|
686
|
+
import { useSettingsStore } from '@/stores/settings'
|
|
648
687
|
import { DrawToolbar, Tooltip, TreeControls } from '@abi-software/map-utilities'
|
|
649
688
|
import '@abi-software/map-utilities/dist/style.css'
|
|
689
|
+
import {
|
|
690
|
+
getBiolucidaThumbnails,
|
|
691
|
+
getSegmentationThumbnails,
|
|
692
|
+
getScaffoldThumbnails,
|
|
693
|
+
getPlotThumbnails
|
|
694
|
+
} from '../services/scicrunchQueries'
|
|
695
|
+
import imageMixin from '../mixins/imageMixin'
|
|
650
696
|
|
|
651
697
|
const centroid = (geometry) => {
|
|
652
698
|
let featureGeometry = { lng: 0, lat: 0, }
|
|
@@ -735,6 +781,7 @@ const createUnfilledTooltipData = function () {
|
|
|
735
781
|
*/
|
|
736
782
|
export default {
|
|
737
783
|
name: 'FlatmapVuer',
|
|
784
|
+
mixins:[imageMixin],
|
|
738
785
|
components: {
|
|
739
786
|
Button,
|
|
740
787
|
Col,
|
|
@@ -767,6 +814,68 @@ export default {
|
|
|
767
814
|
return { annotator }
|
|
768
815
|
},
|
|
769
816
|
methods: {
|
|
817
|
+
/**
|
|
818
|
+
* @vuese
|
|
819
|
+
* Function to add image thumbnails to the map.
|
|
820
|
+
*/
|
|
821
|
+
populateImageThumbnails: async function (type) {
|
|
822
|
+
if (this.mapImp) {
|
|
823
|
+
this.closeTooltip()
|
|
824
|
+
this.mapImp.clearMarkers();
|
|
825
|
+
const identifiers = this.mapImp.anatomicalIdentifiers
|
|
826
|
+
const imageThumbnails = this.settingsStore.getImageThumbnails(type, identifiers)
|
|
827
|
+
this.populateMapWithImages(this.mapImp, imageThumbnails, type)
|
|
828
|
+
}
|
|
829
|
+
},
|
|
830
|
+
/**
|
|
831
|
+
* @vuese
|
|
832
|
+
* Function to fetching image thumbnails.
|
|
833
|
+
*/
|
|
834
|
+
fetchImageThumbnails: async function (type) {
|
|
835
|
+
let thumbnails = {}
|
|
836
|
+
const organCuries = this.settingsStore.organCuries
|
|
837
|
+
if (type === 'Image') {
|
|
838
|
+
thumbnails = await getBiolucidaThumbnails(this.sparcAPI, organCuries, type)
|
|
839
|
+
} else if (type === 'Segmentation') {
|
|
840
|
+
thumbnails = await getSegmentationThumbnails(this.sparcAPI, organCuries, type)
|
|
841
|
+
} else if (type === 'Scaffold') {
|
|
842
|
+
thumbnails = await getScaffoldThumbnails(this.sparcAPI, organCuries, type)
|
|
843
|
+
} else if (type === 'Plot') {
|
|
844
|
+
thumbnails = await getPlotThumbnails(this.sparcAPI, organCuries, type)
|
|
845
|
+
}
|
|
846
|
+
this.settingsStore.updateImageThumbnails(type, thumbnails)
|
|
847
|
+
},
|
|
848
|
+
/**
|
|
849
|
+
* @vuese
|
|
850
|
+
* Function to switch the type of displayed image.
|
|
851
|
+
* @arg type
|
|
852
|
+
*/
|
|
853
|
+
setImageType: async function (type) {
|
|
854
|
+
this.imageType = type
|
|
855
|
+
if (this.mapImp) {
|
|
856
|
+
if (!this.settingsStore.imageTypeCached(type)) {
|
|
857
|
+
this.loading = true
|
|
858
|
+
await this.fetchImageThumbnails(type)
|
|
859
|
+
this.loading = false
|
|
860
|
+
}
|
|
861
|
+
this.populateImageThumbnails(type)
|
|
862
|
+
}
|
|
863
|
+
},
|
|
864
|
+
/**
|
|
865
|
+
* @vuese
|
|
866
|
+
* Function to switch show or hide images.
|
|
867
|
+
* @arg flag
|
|
868
|
+
*/
|
|
869
|
+
setImage: function (flag) {
|
|
870
|
+
this.imageRadio = flag
|
|
871
|
+
if (this.mapImp) {
|
|
872
|
+
if (flag) {
|
|
873
|
+
this.setImageType(this.imageType)
|
|
874
|
+
} else {
|
|
875
|
+
this.mapImp.clearMarkers();
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
},
|
|
770
879
|
/**
|
|
771
880
|
* @vuese
|
|
772
881
|
* Function to initialise drawing.
|
|
@@ -1669,7 +1778,6 @@ export default {
|
|
|
1669
1778
|
}
|
|
1670
1779
|
if (
|
|
1671
1780
|
data &&
|
|
1672
|
-
data.type !== 'marker' &&
|
|
1673
1781
|
eventType === 'click' &&
|
|
1674
1782
|
!(this.viewingMode === 'Neuron Connection') &&
|
|
1675
1783
|
// Disable popup when drawing
|
|
@@ -1703,6 +1811,12 @@ export default {
|
|
|
1703
1811
|
* @arg data
|
|
1704
1812
|
*/
|
|
1705
1813
|
checkAndCreatePopups: async function (data) {
|
|
1814
|
+
if (data.feature.type === 'marker' && this.imageRadio) {
|
|
1815
|
+
this.tooltipType = 'image'
|
|
1816
|
+
const imageThumbnails = this.settingsStore.getImageThumbnails(this.imageType, [data.resource[0]])
|
|
1817
|
+
this.imageEntry = markRaw(imageThumbnails[data.resource[0]])
|
|
1818
|
+
this.displayTooltip(data.feature.models)
|
|
1819
|
+
} else {
|
|
1706
1820
|
// Call flatmap database to get the connection data
|
|
1707
1821
|
if (this.viewingMode === 'Annotation') {
|
|
1708
1822
|
if (data.feature) {
|
|
@@ -1710,6 +1824,7 @@ export default {
|
|
|
1710
1824
|
...data.feature,
|
|
1711
1825
|
resourceId: this.serverURL,
|
|
1712
1826
|
}
|
|
1827
|
+
this.tooltipType = 'annotation'
|
|
1713
1828
|
if (data.feature.featureId && data.feature.models) {
|
|
1714
1829
|
this.displayTooltip(data.feature.models)
|
|
1715
1830
|
} else if (data.feature.feature) {
|
|
@@ -1743,9 +1858,11 @@ export default {
|
|
|
1743
1858
|
results[1] ||
|
|
1744
1859
|
(data.feature.hyperlinks && data.feature.hyperlinks.length > 0)
|
|
1745
1860
|
) {
|
|
1861
|
+
this.tooltipType = 'provenance'
|
|
1746
1862
|
this.resourceForTooltip = data.resource[0]
|
|
1747
1863
|
data.resourceForTooltip = this.resourceForTooltip
|
|
1748
1864
|
this.createTooltipFromNeuronCuration(data)
|
|
1865
|
+
}
|
|
1749
1866
|
}
|
|
1750
1867
|
}
|
|
1751
1868
|
},
|
|
@@ -1784,7 +1901,7 @@ export default {
|
|
|
1784
1901
|
* @arg data
|
|
1785
1902
|
*/
|
|
1786
1903
|
createTooltipFromNeuronCuration: async function (data) {
|
|
1787
|
-
this.
|
|
1904
|
+
this.provenanceEntry = await this.flatmapQueries.createTooltipData(data)
|
|
1788
1905
|
this.displayTooltip(data.resource[0])
|
|
1789
1906
|
},
|
|
1790
1907
|
/**
|
|
@@ -1997,9 +2114,12 @@ export default {
|
|
|
1997
2114
|
// const featureIds = [feature];
|
|
1998
2115
|
// this.moveMap(featureIds);
|
|
1999
2116
|
if (this.featuresAlert) {
|
|
2000
|
-
this.
|
|
2117
|
+
this.provenanceEntry['featuresAlert'] = this.featuresAlert;
|
|
2001
2118
|
}
|
|
2002
|
-
this.$emit('connectivity-info-open', this.
|
|
2119
|
+
this.$emit('connectivity-info-open', this.provenanceEntry);
|
|
2120
|
+
}
|
|
2121
|
+
if (this.imageThumbnailSidebar && this.imageEntry.length && this.viewingMode === 'Exploration') {
|
|
2122
|
+
this.$emit('image-thumbnail-open', this.imageEntry)
|
|
2003
2123
|
}
|
|
2004
2124
|
// If UI is not disabled,
|
|
2005
2125
|
// And connectivityInfoSidebar is not set (default) or set to `false`
|
|
@@ -2010,8 +2130,10 @@ export default {
|
|
|
2010
2130
|
this.viewingMode === 'Annotation' ||
|
|
2011
2131
|
(
|
|
2012
2132
|
this.viewingMode === 'Exploration' &&
|
|
2013
|
-
|
|
2014
|
-
|
|
2133
|
+
(
|
|
2134
|
+
(!this.connectivityInfoSidebar && this.hasTooltipEntry()) ||
|
|
2135
|
+
(!this.imageThumbnailSidebar && this.imageEntry.length)
|
|
2136
|
+
)
|
|
2015
2137
|
)
|
|
2016
2138
|
)
|
|
2017
2139
|
) {
|
|
@@ -2030,7 +2152,7 @@ export default {
|
|
|
2030
2152
|
origins,
|
|
2031
2153
|
provenanceTaxonomy,
|
|
2032
2154
|
provenanceTaxonomyLabel
|
|
2033
|
-
} = this.
|
|
2155
|
+
} = this.provenanceEntry;
|
|
2034
2156
|
|
|
2035
2157
|
return Boolean(
|
|
2036
2158
|
components?.length ||
|
|
@@ -2314,13 +2436,18 @@ export default {
|
|
|
2314
2436
|
onFlatmapReady: function () {
|
|
2315
2437
|
// onFlatmapReady is used for functions that need to run immediately after the flatmap is loaded
|
|
2316
2438
|
this.sensor = markRaw(new ResizeSensor(this.$refs.display, this.mapResize))
|
|
2317
|
-
|
|
2439
|
+
console.log(this.mapImp.options)
|
|
2440
|
+
if (this.mapImp.options?.style === 'functional') {
|
|
2318
2441
|
this.isFC = true
|
|
2442
|
+
} else if (this.mapImp.options?.style === 'centreline') {
|
|
2443
|
+
this.isCentreLine = true
|
|
2319
2444
|
}
|
|
2320
2445
|
this.mapImp.setBackgroundOpacity(1)
|
|
2321
2446
|
this.backgroundChangeCallback(this.currentBackground)
|
|
2322
2447
|
this.pathways = this.mapImp.pathTypes()
|
|
2323
|
-
this.
|
|
2448
|
+
if (!this.isCentreLine) {
|
|
2449
|
+
this.mapImp.enableCentrelines(false)
|
|
2450
|
+
}
|
|
2324
2451
|
//Disable layers for now
|
|
2325
2452
|
//this.layers = this.mapImp.getLayers();
|
|
2326
2453
|
this.processSystems(this.mapImp.getSystems())
|
|
@@ -2329,9 +2456,9 @@ export default {
|
|
|
2329
2456
|
this.addResizeButtonToMinimap()
|
|
2330
2457
|
this.loading = false
|
|
2331
2458
|
this.computePathControlsMaximumHeight()
|
|
2332
|
-
this.drawerOpen =
|
|
2459
|
+
this.drawerOpen = !this.isCentreLine
|
|
2333
2460
|
this.mapResize()
|
|
2334
|
-
this.handleMapClick()
|
|
2461
|
+
this.handleMapClick()
|
|
2335
2462
|
/**
|
|
2336
2463
|
* This is ``onFlatmapReady`` event.
|
|
2337
2464
|
* @arg ``this`` (Component Vue Instance)
|
|
@@ -2348,7 +2475,7 @@ export default {
|
|
|
2348
2475
|
|
|
2349
2476
|
if (_map) {
|
|
2350
2477
|
_map.on('click', (e) => {
|
|
2351
|
-
if (this.
|
|
2478
|
+
if (this.provenanceEntry.featureId) {
|
|
2352
2479
|
this.$emit('connectivity-info-close');
|
|
2353
2480
|
}
|
|
2354
2481
|
});
|
|
@@ -2595,12 +2722,12 @@ export default {
|
|
|
2595
2722
|
*/
|
|
2596
2723
|
sparcAPI: {
|
|
2597
2724
|
type: String,
|
|
2598
|
-
default: 'https://api.sparc.science
|
|
2725
|
+
default: 'https://api.sparc.science',
|
|
2599
2726
|
},
|
|
2600
2727
|
/**
|
|
2601
2728
|
* Flag to disable UIs on Map
|
|
2602
2729
|
*/
|
|
2603
|
-
|
|
2730
|
+
disableUI: {
|
|
2604
2731
|
type: Boolean,
|
|
2605
2732
|
default: false,
|
|
2606
2733
|
},
|
|
@@ -2611,11 +2738,17 @@ export default {
|
|
|
2611
2738
|
type: Boolean,
|
|
2612
2739
|
default: false,
|
|
2613
2740
|
},
|
|
2741
|
+
/**
|
|
2742
|
+
* The option to show image thumbnail in sidebar
|
|
2743
|
+
*/
|
|
2744
|
+
imageThumbnailSidebar: {
|
|
2745
|
+
type: Boolean,
|
|
2746
|
+
default: false,
|
|
2747
|
+
},
|
|
2614
2748
|
},
|
|
2615
2749
|
provide() {
|
|
2616
2750
|
return {
|
|
2617
2751
|
flatmapAPI: this.flatmapAPI,
|
|
2618
|
-
sparcAPI: this.sparcAPI,
|
|
2619
2752
|
$annotator: this.annotator,
|
|
2620
2753
|
getFeaturesAlert: () => this.featuresAlert,
|
|
2621
2754
|
userApiKey: this.userToken,
|
|
@@ -2634,6 +2767,8 @@ export default {
|
|
|
2634
2767
|
serverURL: undefined,
|
|
2635
2768
|
layers: [],
|
|
2636
2769
|
pathways: [],
|
|
2770
|
+
imageEntry: markRaw([]),
|
|
2771
|
+
tooltipType: 'provenance',
|
|
2637
2772
|
sckanDisplay: [
|
|
2638
2773
|
{
|
|
2639
2774
|
label: 'Display Path with SCKAN',
|
|
@@ -2672,12 +2807,13 @@ export default {
|
|
|
2672
2807
|
helpModeActiveIndex: this.helpModeInitialIndex,
|
|
2673
2808
|
yellowstar: yellowstar,
|
|
2674
2809
|
isFC: false,
|
|
2810
|
+
isCentreLine: false,
|
|
2675
2811
|
inHelp: false,
|
|
2676
2812
|
currentBackground: 'white',
|
|
2677
2813
|
availableBackground: ['white', 'lightskyblue', 'black'],
|
|
2678
2814
|
loading: false,
|
|
2679
2815
|
flatmapMarker: flatmapMarker,
|
|
2680
|
-
|
|
2816
|
+
provenanceEntry: createUnfilledTooltipData(),
|
|
2681
2817
|
connectivityTooltipVisible: false,
|
|
2682
2818
|
drawerOpen: false,
|
|
2683
2819
|
featuresAlert: undefined,
|
|
@@ -2700,6 +2836,9 @@ export default {
|
|
|
2700
2836
|
drawnTypes: ['All tools', 'Point', 'LineString', 'Polygon', 'None'],
|
|
2701
2837
|
annotatedType: 'Anyone',
|
|
2702
2838
|
annotatedTypes: ['Anyone', 'Me', 'Others'],
|
|
2839
|
+
imageRadio: false,
|
|
2840
|
+
imageType: 'Image',
|
|
2841
|
+
imageTypes: ['Image', 'Segmentation', 'Scaffold', 'Plot'],
|
|
2703
2842
|
openMapRef: undefined,
|
|
2704
2843
|
backgroundIconRef: undefined,
|
|
2705
2844
|
toolbarOptions: [
|
|
@@ -2737,11 +2876,12 @@ export default {
|
|
|
2737
2876
|
with: true,
|
|
2738
2877
|
without: true,
|
|
2739
2878
|
}
|
|
2740
|
-
})
|
|
2879
|
+
}),
|
|
2741
2880
|
}
|
|
2742
2881
|
},
|
|
2743
2882
|
computed: {
|
|
2744
2883
|
...mapState(useMainStore, ['userToken']),
|
|
2884
|
+
...mapStores(useSettingsStore),
|
|
2745
2885
|
isValidDrawnCreated: function () {
|
|
2746
2886
|
return Object.keys(this.drawnCreatedEvent).length > 0
|
|
2747
2887
|
},
|
|
@@ -3579,7 +3719,12 @@ export default {
|
|
|
3579
3719
|
background-color: var(--white);
|
|
3580
3720
|
font-weight: 500;
|
|
3581
3721
|
color: rgb(48, 49, 51);
|
|
3582
|
-
|
|
3722
|
+
&.annotationSelector {
|
|
3723
|
+
width: 150px!important;
|
|
3724
|
+
}
|
|
3725
|
+
&.imageSelector {
|
|
3726
|
+
width: 125px!important;
|
|
3727
|
+
}
|
|
3583
3728
|
}
|
|
3584
3729
|
|
|
3585
3730
|
:deep(.flatmap_dropdown) {
|
|
@@ -81,6 +81,8 @@
|
|
|
81
81
|
style="height: 100%"
|
|
82
82
|
:flatmapAPI="flatmapAPI"
|
|
83
83
|
:sparcAPI="sparcAPI"
|
|
84
|
+
:imageThumbnailSidebar="imageThumbnailSidebar"
|
|
85
|
+
@image-thumbnail-open="onImageThumbnailOpen"
|
|
84
86
|
/>
|
|
85
87
|
</div>
|
|
86
88
|
</template>
|
|
@@ -264,6 +266,9 @@ export default {
|
|
|
264
266
|
onConnectivityInfoOpen: function (entryData) {
|
|
265
267
|
this.$emit('connectivity-info-open', entryData);
|
|
266
268
|
},
|
|
269
|
+
onImageThumbnailOpen: function (payload) {
|
|
270
|
+
this.$emit('image-thumbnail-open', payload);
|
|
271
|
+
},
|
|
267
272
|
onSelectionsDataChanged: function (data) {
|
|
268
273
|
this.$emit('pathway-selection-changed', data);
|
|
269
274
|
},
|
|
@@ -700,7 +705,7 @@ export default {
|
|
|
700
705
|
*/
|
|
701
706
|
sparcAPI: {
|
|
702
707
|
type: String,
|
|
703
|
-
default: 'https://api.sparc.science
|
|
708
|
+
default: 'https://api.sparc.science',
|
|
704
709
|
},
|
|
705
710
|
/**
|
|
706
711
|
* Flag to disable UIs on Map
|
|
@@ -716,6 +721,13 @@ export default {
|
|
|
716
721
|
type: Boolean,
|
|
717
722
|
default: false,
|
|
718
723
|
},
|
|
724
|
+
/**
|
|
725
|
+
* The option to show image thumbnail in sidebar
|
|
726
|
+
*/
|
|
727
|
+
imageThumbnailSidebar: {
|
|
728
|
+
type: Boolean,
|
|
729
|
+
default: false,
|
|
730
|
+
},
|
|
719
731
|
},
|
|
720
732
|
data: function () {
|
|
721
733
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default '<img style="height: auto;width: 50px;margin-right: 80px;" src="data:image/png;base64,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" />'
|