<template> <div class="dataset-title-container" ref="container" @mouseleave="cardDisplayed=false"> <div @click="openCard($event)" class="dataset-link"> <el-link class="dataset-title"> {{entry.datasetTitle}} <i v-show="!cardDisplayed && (entry.datasetImage || entry.datasetDescription)" class="el-icon-arrow-down el-icon--right"></i> <i v-show="cardDisplayed && (entry.datasetImage || entry.datasetDescription)" class="el-icon-arrow-up el-icon--right"></i> </el-link> <el-card v-show="cardDisplayed" :body-style="{ padding: '0px' }" class="dataset-card" ref="card"> <img :src="entry.datasetImage" class="image"/> <div style="padding: 14px;"> <span class="dataset-description">{{entry.datasetDescription}}</span> <div > <el-button class="button" @click="openDatasetUrl()">Get Dataset</el-button> </div> </div> </el-card> </div> </div> </template> <script> /* eslint-disable no-alert, no-console */ import { ElButton as Button, ElCard as Card, ElLink as Link } from "element-plus"; export default { name: "DatasetHeader", components: { Button, Card, Link }, props: { /** * Object containing information for * the required viewing. */ entry: Object, }, data: function() { return { cardDisplayed: false } }, methods: { switchCardDisplay: function(){ this.cardDisplayed = !this.cardDisplayed; }, openCard: function(event){ if (this.entry.datasetImage || this.entry.datasetDescription) { this.cardDisplayed = true; this.$refs.card.$el.style.left = event.layerX + 'px'; this.$refs.card.$el.style.top = event.layerY + 'px'; } else { this.openDatasetUrl(); } }, openDatasetUrl: function(){ if (this.entry.datasetUrl) window.open(this.entry.datasetUrl, '_blank'); this.cardDisplayed = false; } } }; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped lang="scss"> .dataset-link{ text-align:center; } .dataset-title-container{ padding: 3px; } .dataset-title{ font-size: 16px; color: #606266; } .dataset-card{ width: 230px; position: absolute; z-index: 10; } .image{ width: 100%; display: block; } .dataset-description{ font-size: 10px; } </style>