@abi-software/map-utilities 1.0.0-beta.1 → 1.0.1-beta.0
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/dist/map-utilities.js +5026 -10867
- package/dist/map-utilities.umd.cjs +40 -54
- package/dist/style.css +1 -1
- package/package.json +1 -2
- package/src/App.vue +26 -145
- package/src/components/CopyToClipboard/CopyToClipboard.vue +146 -0
- package/src/components/Tooltip/ProvenancePopup.vue +33 -34
- package/src/components/Tooltip/Tooltip.vue +10 -19
- package/src/components/index.js +2 -1
- package/src/components.d.ts +3 -2
- package/src/components/Tooltip/ImageGalleryPopup.vue +0 -166
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abi-software/map-utilities",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1-beta.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist/*",
|
|
6
6
|
"src/*",
|
|
@@ -29,7 +29,6 @@
|
|
|
29
29
|
"./src/*": "./src/*"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@abi-software/gallery": "^1.1.0",
|
|
33
32
|
"@abi-software/svg-sprite": "^1.0.0",
|
|
34
33
|
"@element-plus/icons-vue": "^2.3.1",
|
|
35
34
|
"element-plus": "^2.7.3",
|
package/src/App.vue
CHANGED
|
@@ -124,19 +124,19 @@ function onActionClick(value) {
|
|
|
124
124
|
/**
|
|
125
125
|
* Tooltip
|
|
126
126
|
*/
|
|
127
|
-
const
|
|
128
|
-
const
|
|
127
|
+
const tooltipDisplay = ref(false);
|
|
128
|
+
const tooltipEntry = ref({});
|
|
129
129
|
const featuresAlert = ref(undefined);
|
|
130
|
+
const annotationDisplay = ref(false);
|
|
130
131
|
const annotationEntry = ref({});
|
|
131
|
-
const imageEntry = ref([]);
|
|
132
132
|
|
|
133
133
|
provide(/* key */ "getFeaturesAlert", /* value */ () => featuresAlert.value);
|
|
134
134
|
provide(/* key */ "$annotator", /* value */ undefined);
|
|
135
135
|
provide(/* key */ "userApiKey", /* value */ undefined);
|
|
136
136
|
|
|
137
|
-
function
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
function addTooltipEntry() {
|
|
138
|
+
tooltipDisplay.value = true;
|
|
139
|
+
tooltipEntry.value = {
|
|
140
140
|
destinations: [null],
|
|
141
141
|
origins: [null],
|
|
142
142
|
components: ["pudendal nerve"],
|
|
@@ -160,12 +160,13 @@ function addProvenanceEntry() {
|
|
|
160
160
|
provenanceTaxonomyLabel: ["Homo sapiens"],
|
|
161
161
|
};
|
|
162
162
|
}
|
|
163
|
-
function
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
function removeTooltipEntry() {
|
|
164
|
+
tooltipDisplay.value = false;
|
|
165
|
+
tooltipEntry.value = {};
|
|
166
166
|
}
|
|
167
167
|
function addAnnotationEntry() {
|
|
168
|
-
|
|
168
|
+
tooltipDisplay.value = true;
|
|
169
|
+
annotationDisplay.value = true;
|
|
169
170
|
annotationEntry.value = {
|
|
170
171
|
id: "digestive_8-1",
|
|
171
172
|
featureId: 4958,
|
|
@@ -178,97 +179,13 @@ function addAnnotationEntry() {
|
|
|
178
179
|
};
|
|
179
180
|
}
|
|
180
181
|
function removeAnnotationEntry() {
|
|
181
|
-
|
|
182
|
+
tooltipDisplay.value = false;
|
|
183
|
+
annotationDisplay.value = false;
|
|
182
184
|
annotationEntry.value = {};
|
|
183
185
|
}
|
|
184
186
|
function commitAnnotationEvent(value) {
|
|
185
187
|
console.log("🚀 ~ commitAnnotationEvent ~ value:", value);
|
|
186
188
|
}
|
|
187
|
-
function addImageEntry() {
|
|
188
|
-
tooltipType.value = "image";
|
|
189
|
-
imageEntry.value = [
|
|
190
|
-
{
|
|
191
|
-
anatomy: [
|
|
192
|
-
{
|
|
193
|
-
curie: "",
|
|
194
|
-
matchingStatus: "Exact Match",
|
|
195
|
-
name: "stomach",
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
datasetId: "22",
|
|
199
|
-
datasetVersion: "2",
|
|
200
|
-
link: "https://sparc.biolucida.net/image?c=Mzg3Ny1jb2wtMTUw",
|
|
201
|
-
resource: {
|
|
202
|
-
share_link: "https://sparc.biolucida.net/image?c=Mzg3Ny1jb2wtMTUw",
|
|
203
|
-
},
|
|
204
|
-
s3uri: "s3://prd-sparc-discover50-use1/22/",
|
|
205
|
-
species: [
|
|
206
|
-
{
|
|
207
|
-
species: {
|
|
208
|
-
curie: "NCBITaxon:9825",
|
|
209
|
-
matchingStatus: "approved",
|
|
210
|
-
name: "Pig",
|
|
211
|
-
originalName: "Domestic Pig",
|
|
212
|
-
parents: [
|
|
213
|
-
{
|
|
214
|
-
curie: "ilx:0739765",
|
|
215
|
-
name: "Pig",
|
|
216
|
-
},
|
|
217
|
-
],
|
|
218
|
-
},
|
|
219
|
-
strain: {
|
|
220
|
-
name: "Large White / Landrace crossbred pig",
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
],
|
|
224
|
-
thumbnail: "https://sparc.biolucida.net/api/v1/thumbnail/3877",
|
|
225
|
-
title: "SPARC Image 1",
|
|
226
|
-
type: "image",
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
anatomy: [
|
|
230
|
-
{
|
|
231
|
-
curie: "",
|
|
232
|
-
matchingStatus: "Exact Match",
|
|
233
|
-
name: "stomach",
|
|
234
|
-
},
|
|
235
|
-
],
|
|
236
|
-
datasetId: "22",
|
|
237
|
-
datasetVersion: "2",
|
|
238
|
-
link: "https://sparc.biolucida.net/image?c=Mzg3Ny1jb2wtMTUw",
|
|
239
|
-
resource: {
|
|
240
|
-
share_link: "https://sparc.biolucida.net/image?c=Mzg3Ny1jb2wtMTUw",
|
|
241
|
-
},
|
|
242
|
-
s3uri: "s3://prd-sparc-discover50-use1/22/",
|
|
243
|
-
species: [
|
|
244
|
-
{
|
|
245
|
-
species: {
|
|
246
|
-
curie: "NCBITaxon:9825",
|
|
247
|
-
matchingStatus: "approved",
|
|
248
|
-
name: "Pig",
|
|
249
|
-
originalName: "Domestic Pig",
|
|
250
|
-
parents: [
|
|
251
|
-
{
|
|
252
|
-
curie: "ilx:0739765",
|
|
253
|
-
name: "Pig",
|
|
254
|
-
},
|
|
255
|
-
],
|
|
256
|
-
},
|
|
257
|
-
strain: {
|
|
258
|
-
name: "Large White / Landrace crossbred pig",
|
|
259
|
-
},
|
|
260
|
-
},
|
|
261
|
-
],
|
|
262
|
-
thumbnail: "https://sparc.biolucida.net/api/v1/thumbnail/3877",
|
|
263
|
-
title: "SPARC Image 2",
|
|
264
|
-
type: "image",
|
|
265
|
-
},
|
|
266
|
-
];
|
|
267
|
-
}
|
|
268
|
-
function removeImageEntry() {
|
|
269
|
-
tooltipType.value = "";
|
|
270
|
-
imageEntry.value = [];
|
|
271
|
-
}
|
|
272
189
|
/**
|
|
273
190
|
* TreeControls
|
|
274
191
|
*/
|
|
@@ -312,7 +229,7 @@ function setColourField(treeData, nodeData, activeColour) {
|
|
|
312
229
|
function setColour(nodeData, value) {
|
|
313
230
|
if (nodeData && nodeData.isPrimitives) {
|
|
314
231
|
const activeColour = value ? value : nodeData.defaultColour;
|
|
315
|
-
setColourField(treeDataEntry.value, nodeData, activeColour)
|
|
232
|
+
setColourField(treeDataEntry.value, nodeData, activeColour)
|
|
316
233
|
}
|
|
317
234
|
}
|
|
318
235
|
function checkAll(value) {
|
|
@@ -463,29 +380,21 @@ function changeHover(value) {
|
|
|
463
380
|
</el-col>
|
|
464
381
|
<el-col>
|
|
465
382
|
<el-button
|
|
466
|
-
v-show="
|
|
467
|
-
|
|
468
|
-
(tooltipType === 'provenance' &&
|
|
469
|
-
Object.keys(provenanceEntry).length === 0)
|
|
470
|
-
"
|
|
471
|
-
@click="addProvenanceEntry"
|
|
383
|
+
v-show="!annotationDisplay"
|
|
384
|
+
@click="addTooltipEntry"
|
|
472
385
|
size="small"
|
|
473
386
|
>
|
|
474
|
-
Add
|
|
387
|
+
Add Tooltip Entry
|
|
475
388
|
</el-button>
|
|
476
389
|
<el-button
|
|
477
|
-
v-show="Object.keys(
|
|
478
|
-
@click="
|
|
390
|
+
v-show="Object.keys(tooltipEntry).length > 0"
|
|
391
|
+
@click="removeTooltipEntry"
|
|
479
392
|
size="small"
|
|
480
393
|
>
|
|
481
|
-
Remove
|
|
394
|
+
Remove Tooltip Entry
|
|
482
395
|
</el-button>
|
|
483
396
|
<el-button
|
|
484
|
-
v-show="
|
|
485
|
-
tooltipType === '' ||
|
|
486
|
-
(tooltipType === 'annotation' &&
|
|
487
|
-
Object.keys(annotationEntry).length === 0)
|
|
488
|
-
"
|
|
397
|
+
v-show="!Object.keys(tooltipEntry).length > 0"
|
|
489
398
|
@click="addAnnotationEntry"
|
|
490
399
|
size="small"
|
|
491
400
|
>
|
|
@@ -498,23 +407,6 @@ function changeHover(value) {
|
|
|
498
407
|
>
|
|
499
408
|
Remove Annotation Entry
|
|
500
409
|
</el-button>
|
|
501
|
-
<el-button
|
|
502
|
-
v-show="
|
|
503
|
-
tooltipType === '' ||
|
|
504
|
-
(tooltipType === 'image' && Object.keys(imageEntry).length === 0)
|
|
505
|
-
"
|
|
506
|
-
@click="addImageEntry"
|
|
507
|
-
size="small"
|
|
508
|
-
>
|
|
509
|
-
Add Image Entry
|
|
510
|
-
</el-button>
|
|
511
|
-
<el-button
|
|
512
|
-
v-show="Object.keys(imageEntry).length > 0"
|
|
513
|
-
@click="removeImageEntry"
|
|
514
|
-
size="small"
|
|
515
|
-
>
|
|
516
|
-
Remove Image Entry
|
|
517
|
-
</el-button>
|
|
518
410
|
</el-col>
|
|
519
411
|
</el-row>
|
|
520
412
|
<el-row>
|
|
@@ -522,18 +414,10 @@ function changeHover(value) {
|
|
|
522
414
|
<h3>TreeControls - {{ mapType }}</h3>
|
|
523
415
|
</el-col>
|
|
524
416
|
<el-col>
|
|
525
|
-
<el-button
|
|
526
|
-
v-show="mapType === 'scaffold'"
|
|
527
|
-
@click="switchTreeEntry('flatmap')"
|
|
528
|
-
size="small"
|
|
529
|
-
>
|
|
417
|
+
<el-button v-show="mapType==='scaffold'" @click="switchTreeEntry('flatmap')" size="small">
|
|
530
418
|
Display Flatmap Tree
|
|
531
419
|
</el-button>
|
|
532
|
-
<el-button
|
|
533
|
-
v-show="mapType === 'flatmap'"
|
|
534
|
-
@click="switchTreeEntry('scaffold')"
|
|
535
|
-
size="small"
|
|
536
|
-
>
|
|
420
|
+
<el-button v-show="mapType==='flatmap'" @click="switchTreeEntry('scaffold')" size="small">
|
|
537
421
|
Display Scaffold Tree
|
|
538
422
|
</el-button>
|
|
539
423
|
</el-col>
|
|
@@ -575,12 +459,11 @@ function changeHover(value) {
|
|
|
575
459
|
@finish-help-mode="onFinishHelpMode"
|
|
576
460
|
/>
|
|
577
461
|
<Tooltip
|
|
578
|
-
v-show="
|
|
462
|
+
v-show="tooltipDisplay"
|
|
579
463
|
class="tooltip"
|
|
580
|
-
:
|
|
581
|
-
:
|
|
464
|
+
:tooltipEntry="tooltipEntry"
|
|
465
|
+
:annotationDisplay="annotationDisplay"
|
|
582
466
|
:annotationEntry="annotationEntry"
|
|
583
|
-
:imageEntry="imageEntry"
|
|
584
467
|
@annotation="commitAnnotationEvent"
|
|
585
468
|
@onActionClick="onActionClick"
|
|
586
469
|
/>
|
|
@@ -615,12 +498,10 @@ function changeHover(value) {
|
|
|
615
498
|
.options-container {
|
|
616
499
|
text-align: center;
|
|
617
500
|
}
|
|
618
|
-
|
|
619
501
|
.help-mode-dialog {
|
|
620
502
|
position: absolute;
|
|
621
503
|
top: 50%;
|
|
622
504
|
}
|
|
623
|
-
|
|
624
505
|
.tooltip {
|
|
625
506
|
width: 400px;
|
|
626
507
|
position: absolute;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-tooltip
|
|
3
|
+
:content="textLabel"
|
|
4
|
+
placement="bottom"
|
|
5
|
+
:hide-after="autoHideTimeout"
|
|
6
|
+
effect="clipboard-tooltip"
|
|
7
|
+
@hide="resetSettings"
|
|
8
|
+
>
|
|
9
|
+
<el-button
|
|
10
|
+
class="copy-clipboard-button"
|
|
11
|
+
:class="theme"
|
|
12
|
+
size="small"
|
|
13
|
+
@click="copyToClipboard"
|
|
14
|
+
>
|
|
15
|
+
<el-icon :color="iconColor">
|
|
16
|
+
<el-icon-copy-document />
|
|
17
|
+
</el-icon>
|
|
18
|
+
<span class="visually-hidden">{{ textLabel }}</span>
|
|
19
|
+
</el-button>
|
|
20
|
+
</el-tooltip>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script>
|
|
24
|
+
const labelBefore = 'Copy to clipboard';
|
|
25
|
+
const labelAfter = 'Copied!';
|
|
26
|
+
const appPrimaryColor = '#8300bf';
|
|
27
|
+
|
|
28
|
+
export default {
|
|
29
|
+
name: 'CopyToClipboard',
|
|
30
|
+
props: {
|
|
31
|
+
content: {
|
|
32
|
+
type: String,
|
|
33
|
+
default: '',
|
|
34
|
+
},
|
|
35
|
+
/**
|
|
36
|
+
* Theme 'primary' or 'dark' or any name not 'light'
|
|
37
|
+
* will show primary button color.
|
|
38
|
+
*/
|
|
39
|
+
theme: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: 'light',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
data: function () {
|
|
45
|
+
return {
|
|
46
|
+
textLabel: labelBefore,
|
|
47
|
+
autoHideTimeout: 0,
|
|
48
|
+
iconColor: appPrimaryColor,
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
mounted: function () {
|
|
52
|
+
if (this.theme !== 'light') {
|
|
53
|
+
this.iconColor = 'white';
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
methods: {
|
|
57
|
+
copyToClipboard: async function () {
|
|
58
|
+
let copiedSuccessfully = true;
|
|
59
|
+
this.autoHideTimeout = 600;
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
await navigator.clipboard.writeText(this.content);
|
|
63
|
+
} catch (err) {
|
|
64
|
+
console.error(
|
|
65
|
+
"Error when trying to use navigator.clipboard.writeText()",
|
|
66
|
+
err
|
|
67
|
+
);
|
|
68
|
+
copiedSuccessfully = false;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (copiedSuccessfully) {
|
|
72
|
+
this.textLabel = labelAfter;
|
|
73
|
+
} else {
|
|
74
|
+
this.textLabel = 'Error trying to copy to clipboard!';
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
resetSettings: function () {
|
|
78
|
+
this.autoHideTimeout = 0;
|
|
79
|
+
this.textLabel = labelBefore;
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<style lang="scss" scoped>
|
|
86
|
+
.copy-clipboard-button {
|
|
87
|
+
margin-left: 0px !important;
|
|
88
|
+
margin-top: 0px !important;
|
|
89
|
+
padding: 0.25rem;
|
|
90
|
+
font-size: 14px !important;
|
|
91
|
+
transition: all 0.25s ease;
|
|
92
|
+
|
|
93
|
+
&,
|
|
94
|
+
&:focus,
|
|
95
|
+
&:active {
|
|
96
|
+
color: #fff !important;
|
|
97
|
+
background: $app-primary-color;
|
|
98
|
+
border-color: $app-primary-color !important;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&:hover {
|
|
102
|
+
background: #ac76c5 !important;
|
|
103
|
+
border-color: #ac76c5 !important;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
&.light {
|
|
107
|
+
&,
|
|
108
|
+
&:focus,
|
|
109
|
+
&:active {
|
|
110
|
+
color: $app-primary-color !important;
|
|
111
|
+
background: transparent;
|
|
112
|
+
border-color: transparent !important;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&:hover {
|
|
116
|
+
background: #f3e6f9 !important;
|
|
117
|
+
border-color: #f3e6f9 !important;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.visually-hidden {
|
|
123
|
+
clip: rect(0 0 0 0);
|
|
124
|
+
clip-path: inset(50%);
|
|
125
|
+
height: 1px;
|
|
126
|
+
overflow: hidden;
|
|
127
|
+
position: absolute;
|
|
128
|
+
white-space: nowrap;
|
|
129
|
+
width: 1px;
|
|
130
|
+
}
|
|
131
|
+
</style>
|
|
132
|
+
|
|
133
|
+
<style lang="scss">
|
|
134
|
+
.el-popper.is-clipboard-tooltip {
|
|
135
|
+
padding: 4px 10px;
|
|
136
|
+
font-family: Asap;
|
|
137
|
+
background: #f3ecf6 !important;
|
|
138
|
+
border: 1px solid $app-primary-color;
|
|
139
|
+
|
|
140
|
+
& .el-popper__arrow::before {
|
|
141
|
+
border: 1px solid;
|
|
142
|
+
border-color: $app-primary-color;
|
|
143
|
+
background: #f3ecf6;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
</style>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div v-if="
|
|
3
|
-
<div class="block" v-if="
|
|
4
|
-
<div class="title">{{ capitalise(
|
|
2
|
+
<div v-if="tooltipEntry" class="main" v-loading="loading">
|
|
3
|
+
<div class="block" v-if="tooltipEntry.title">
|
|
4
|
+
<div class="title">{{ capitalise(tooltipEntry.title) }}</div>
|
|
5
5
|
<div
|
|
6
6
|
v-if="
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
tooltipEntry.provenanceTaxonomyLabel &&
|
|
8
|
+
tooltipEntry.provenanceTaxonomyLabel.length > 0
|
|
9
9
|
"
|
|
10
10
|
class="subtitle"
|
|
11
11
|
>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
</div>
|
|
14
14
|
</div>
|
|
15
15
|
<div class="block" v-else>
|
|
16
|
-
<div class="title">{{
|
|
16
|
+
<div class="title">{{ tooltipEntry.featureId }}</div>
|
|
17
17
|
</div>
|
|
18
18
|
<div v-if="featuresAlert" class="attribute-title-container">
|
|
19
19
|
<span class="attribute-title">Alert</span>
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
</div>
|
|
52
52
|
<transition name="slide-fade">
|
|
53
53
|
<div v-show="showDetails" class="content-container scrollbar">
|
|
54
|
-
{{
|
|
55
|
-
<div v-if="
|
|
54
|
+
{{ tooltipEntry.paths }}
|
|
55
|
+
<div v-if="tooltipEntry.origins && tooltipEntry.origins.length > 0" class="block">
|
|
56
56
|
<div class="attribute-title-container">
|
|
57
57
|
<span class="attribute-title">Origin</span>
|
|
58
58
|
<el-popover
|
|
@@ -70,17 +70,17 @@
|
|
|
70
70
|
</el-popover>
|
|
71
71
|
</div>
|
|
72
72
|
<div
|
|
73
|
-
v-for="(origin, i) in
|
|
73
|
+
v-for="(origin, i) in tooltipEntry.origins"
|
|
74
74
|
class="attribute-content"
|
|
75
75
|
:origin-item-label="origin"
|
|
76
76
|
:key="origin"
|
|
77
77
|
>
|
|
78
78
|
{{ capitalise(origin) }}
|
|
79
|
-
<div v-if="i !=
|
|
79
|
+
<div v-if="i != tooltipEntry.origins.length - 1" class="separator"></div>
|
|
80
80
|
</div>
|
|
81
81
|
<el-button
|
|
82
82
|
v-show="
|
|
83
|
-
|
|
83
|
+
tooltipEntry.originsWithDatasets && tooltipEntry.originsWithDatasets.length > 0
|
|
84
84
|
"
|
|
85
85
|
class="button"
|
|
86
86
|
id="open-dendrites-button"
|
|
@@ -90,27 +90,27 @@
|
|
|
90
90
|
</el-button>
|
|
91
91
|
</div>
|
|
92
92
|
<div
|
|
93
|
-
v-if="
|
|
93
|
+
v-if="tooltipEntry.components && tooltipEntry.components.length > 0"
|
|
94
94
|
class="block"
|
|
95
95
|
>
|
|
96
96
|
<div class="attribute-title-container">
|
|
97
97
|
<div class="attribute-title">Components</div>
|
|
98
98
|
</div>
|
|
99
99
|
<div
|
|
100
|
-
v-for="(component, i) in
|
|
100
|
+
v-for="(component, i) in tooltipEntry.components"
|
|
101
101
|
class="attribute-content"
|
|
102
102
|
:component-item-label="component"
|
|
103
103
|
:key="component"
|
|
104
104
|
>
|
|
105
105
|
{{ capitalise(component) }}
|
|
106
106
|
<div
|
|
107
|
-
v-if="i !=
|
|
107
|
+
v-if="i != tooltipEntry.components.length - 1"
|
|
108
108
|
class="separator"
|
|
109
109
|
></div>
|
|
110
110
|
</div>
|
|
111
111
|
</div>
|
|
112
112
|
<div
|
|
113
|
-
v-if="
|
|
113
|
+
v-if="tooltipEntry.destinations && tooltipEntry.destinations.length > 0"
|
|
114
114
|
class="block"
|
|
115
115
|
>
|
|
116
116
|
<div class="attribute-title-container">
|
|
@@ -130,21 +130,21 @@
|
|
|
130
130
|
</el-popover>
|
|
131
131
|
</div>
|
|
132
132
|
<div
|
|
133
|
-
v-for="(destination, i) in
|
|
133
|
+
v-for="(destination, i) in tooltipEntry.destinations"
|
|
134
134
|
class="attribute-content"
|
|
135
135
|
:destination-item-label="destination"
|
|
136
136
|
:key="destination"
|
|
137
137
|
>
|
|
138
138
|
{{ capitalise(destination) }}
|
|
139
139
|
<div
|
|
140
|
-
v-if="i !=
|
|
140
|
+
v-if="i != tooltipEntry.destinations.length - 1"
|
|
141
141
|
class="separator"
|
|
142
142
|
></div>
|
|
143
143
|
</div>
|
|
144
144
|
<el-button
|
|
145
145
|
v-show="
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
tooltipEntry.destinationsWithDatasets &&
|
|
147
|
+
tooltipEntry.destinationsWithDatasets.length > 0
|
|
148
148
|
"
|
|
149
149
|
class="button"
|
|
150
150
|
@click="openAxons"
|
|
@@ -155,8 +155,8 @@
|
|
|
155
155
|
|
|
156
156
|
<el-button
|
|
157
157
|
v-show="
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
tooltipEntry.componentsWithDatasets &&
|
|
159
|
+
tooltipEntry.componentsWithDatasets.length > 0
|
|
160
160
|
"
|
|
161
161
|
class="button"
|
|
162
162
|
@click="openAll"
|
|
@@ -187,7 +187,7 @@ const capitalise = function (str) {
|
|
|
187
187
|
export default {
|
|
188
188
|
name: "ProvenancePopup",
|
|
189
189
|
props: {
|
|
190
|
-
|
|
190
|
+
tooltipEntry: {
|
|
191
191
|
type: Object,
|
|
192
192
|
default: () => ({
|
|
193
193
|
destinations: [],
|
|
@@ -200,7 +200,7 @@ export default {
|
|
|
200
200
|
}),
|
|
201
201
|
},
|
|
202
202
|
},
|
|
203
|
-
|
|
203
|
+
inject: ["getFeaturesAlert"],
|
|
204
204
|
data: function () {
|
|
205
205
|
return {
|
|
206
206
|
controller: undefined,
|
|
@@ -219,21 +219,20 @@ export default {
|
|
|
219
219
|
},
|
|
220
220
|
computed: {
|
|
221
221
|
featuresAlert() {
|
|
222
|
-
|
|
223
|
-
return ""
|
|
222
|
+
return this.getFeaturesAlert();
|
|
224
223
|
},
|
|
225
224
|
resources: function () {
|
|
226
225
|
let resources = [];
|
|
227
|
-
if (this.
|
|
228
|
-
resources = this.
|
|
226
|
+
if (this.tooltipEntry && this.tooltipEntry.hyperlinks) {
|
|
227
|
+
resources = this.tooltipEntry.hyperlinks;
|
|
229
228
|
}
|
|
230
229
|
return resources;
|
|
231
230
|
},
|
|
232
231
|
originDescription: function () {
|
|
233
232
|
if (
|
|
234
|
-
this.
|
|
235
|
-
this.
|
|
236
|
-
this.
|
|
233
|
+
this.tooltipEntry &&
|
|
234
|
+
this.tooltipEntry.title &&
|
|
235
|
+
this.tooltipEntry.title.toLowerCase().includes("motor")
|
|
237
236
|
) {
|
|
238
237
|
return this.originDescriptions.motor;
|
|
239
238
|
} else {
|
|
@@ -242,7 +241,7 @@ export default {
|
|
|
242
241
|
},
|
|
243
242
|
provSpeciesDescription: function () {
|
|
244
243
|
let text = "Studied in";
|
|
245
|
-
this.
|
|
244
|
+
this.tooltipEntry.provenanceTaxonomyLabel.forEach((label) => {
|
|
246
245
|
text += ` ${label},`;
|
|
247
246
|
});
|
|
248
247
|
text = text.slice(0, -1); // remove last comma
|
|
@@ -263,19 +262,19 @@ export default {
|
|
|
263
262
|
openAll: function () {
|
|
264
263
|
EventBus.emit("onActionClick", {
|
|
265
264
|
type: "Facets",
|
|
266
|
-
labels: this.
|
|
265
|
+
labels: this.tooltipEntry.componentsWithDatasets.map((a) => a.name),
|
|
267
266
|
});
|
|
268
267
|
},
|
|
269
268
|
openAxons: function () {
|
|
270
269
|
EventBus.emit("onActionClick", {
|
|
271
270
|
type: "Facets",
|
|
272
|
-
labels: this.
|
|
271
|
+
labels: this.tooltipEntry.destinationsWithDatasets.map((a) => a.name),
|
|
273
272
|
});
|
|
274
273
|
},
|
|
275
274
|
openDendrites: function () {
|
|
276
275
|
EventBus.emit("onActionClick", {
|
|
277
276
|
type: "Facets",
|
|
278
|
-
labels: this.
|
|
277
|
+
labels: this.tooltipEntry.originsWithDatasets.map((a) => a.name),
|
|
279
278
|
});
|
|
280
279
|
},
|
|
281
280
|
pubmedSearchUrlUpdate: function (val) {
|
|
@@ -1,44 +1,35 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="tooltip-container" id="tooltip-container">
|
|
3
|
-
<template v-if="
|
|
3
|
+
<template v-if="annotationDisplay">
|
|
4
4
|
<annotation-popup
|
|
5
5
|
:annotationEntry="annotationEntry"
|
|
6
6
|
@annotation="$emit('annotation', $event)"
|
|
7
7
|
/>
|
|
8
8
|
</template>
|
|
9
|
-
<template v-
|
|
10
|
-
<provenance-popup :
|
|
11
|
-
</template>
|
|
12
|
-
<template v-if="tooltipType === 'image'">
|
|
13
|
-
<image-gallery-popup :imageEntry="imageEntry" />
|
|
9
|
+
<template v-else>
|
|
10
|
+
<provenance-popup :tooltipEntry="tooltipEntry" />
|
|
14
11
|
</template>
|
|
15
12
|
</div>
|
|
16
13
|
</template>
|
|
17
14
|
|
|
18
15
|
<script>
|
|
19
|
-
import EventBus from
|
|
16
|
+
import EventBus from '../EventBus.js';
|
|
20
17
|
|
|
21
18
|
export default {
|
|
22
19
|
name: "Tooltip",
|
|
23
20
|
props: {
|
|
24
|
-
|
|
25
|
-
type: String,
|
|
26
|
-
default: "",
|
|
27
|
-
},
|
|
28
|
-
provenanceEntry: {
|
|
21
|
+
tooltipEntry: {
|
|
29
22
|
type: Object,
|
|
30
|
-
|
|
23
|
+
},
|
|
24
|
+
annotationDisplay: {
|
|
25
|
+
type: Boolean,
|
|
26
|
+
default: false,
|
|
31
27
|
},
|
|
32
28
|
annotationEntry: {
|
|
33
29
|
type: Object,
|
|
34
|
-
default: {},
|
|
35
|
-
},
|
|
36
|
-
imageEntry: {
|
|
37
|
-
type: Array,
|
|
38
|
-
default: [],
|
|
39
30
|
},
|
|
40
31
|
},
|
|
41
|
-
mounted: function
|
|
32
|
+
mounted: function() {
|
|
42
33
|
// Emit events from child components
|
|
43
34
|
EventBus.on("onActionClick", (data) => {
|
|
44
35
|
this.$emit("onActionClick", data);
|
package/src/components/index.js
CHANGED
|
@@ -2,5 +2,6 @@ import DrawToolbar from "./DrawToolbar/DrawToolbar.vue";
|
|
|
2
2
|
import HelpModeDialog from "./HelpModeDialog/HelpModeDialog.vue";
|
|
3
3
|
import Tooltip from "./Tooltip/Tooltip.vue";
|
|
4
4
|
import TreeControls from "./TreeControls/TreeControls.vue";
|
|
5
|
+
import CopyToClipboard from "./CopyToClipboard/CopyToClipboard.vue";
|
|
5
6
|
|
|
6
|
-
export { DrawToolbar, HelpModeDialog, Tooltip, TreeControls };
|
|
7
|
+
export { DrawToolbar, HelpModeDialog, Tooltip, TreeControls, CopyToClipboard };
|