StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
257 lines
5.8 KiB
257 lines
5.8 KiB
<template>
|
|
<div :class="['navbar', { hide }]">
|
|
<aside class="btn-wrap">
|
|
<div class="hide-btn" @click="hide = true"></div>
|
|
<div class="btn-group">
|
|
<div class="btn switch-btn" @click="hide = !hide"></div>
|
|
<div class="btn language-btn" @click="switchLanguage">{{ nextLanguage }}</div>
|
|
<a class="btn github-btn" :href="homePageUrl" target="_blank"></a>
|
|
</div>
|
|
</aside>
|
|
<div class="content">
|
|
<div class="site-info">
|
|
<div class="name">{{ name }}</div>
|
|
<div class="version">v{{ version }}</div>
|
|
<label for="theme">
|
|
Theme:
|
|
<select id="theme" class="theme" v-model="theme" @change="changeTheme">
|
|
<option value="default">default</option>
|
|
<option value="antd">antd</option>
|
|
<option value="material">material</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
<div class="nav-content">
|
|
<div
|
|
v-for="(list, title) in navObj"
|
|
:key="title"
|
|
class="nav-group"
|
|
>
|
|
<div class="nav-title">{{ title }}</div>
|
|
<router-link
|
|
v-for="(item, index) in list"
|
|
:key="index"
|
|
class="nav-item"
|
|
:to="$route.meta.lang + item.route"
|
|
exact
|
|
@click.native="routeClickHandle"
|
|
>
|
|
<span class="nav-name">{{ item.name }}</span>
|
|
</router-link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { Component, Vue } from 'vue-property-decorator'
|
|
import packageInfo from '../../package.json'
|
|
import { getNavObj, LANG } from '../nav/'
|
|
import { getTheme } from '../utils'
|
|
|
|
@Component({})
|
|
export default class Navbar extends Vue {
|
|
hide = false
|
|
name = packageInfo.name
|
|
version = packageInfo.version
|
|
homePageUrl = packageInfo.homepage
|
|
theme = getTheme() || 'default'
|
|
|
|
get nextLanguage() {
|
|
return this.$route.meta.lang === LANG.ENGLISH ? '🇨🇳' : '🇺🇸'
|
|
}
|
|
|
|
get navObj() {
|
|
return getNavObj(this.$route.meta.lang)
|
|
}
|
|
|
|
mounted() {
|
|
this.hide = document.body.clientWidth < 992 ? true : false
|
|
}
|
|
|
|
switchLanguage() {
|
|
this.$router.push({
|
|
path: (
|
|
this.$route.meta.lang === LANG.ENGLISH ? LANG.ZH_CN : LANG.ENGLISH
|
|
) + this.$route.meta.route
|
|
})
|
|
}
|
|
|
|
changeTheme(e: Event) {
|
|
const theme = (e.target as any).value
|
|
localStorage.setItem('theme', theme)
|
|
location.reload()
|
|
}
|
|
|
|
routeClickHandle() {
|
|
if (document.body.clientWidth < 992) {
|
|
this.hide = true
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@import '../styles/var';
|
|
@import '../styles/media';
|
|
|
|
$width: 320px;
|
|
$bgColor: #f2f4f6;
|
|
$gap: 30px;
|
|
$navFont: #7e99b6;
|
|
|
|
.navbar {
|
|
position: relative;
|
|
width: $width;
|
|
height: 100vh;
|
|
background-color: $bgColor;
|
|
transition: all .5s;
|
|
z-index: 99;
|
|
&.hide {
|
|
margin-left: -$width;
|
|
}
|
|
.hide-btn {
|
|
display: none;
|
|
position: absolute;
|
|
right: 20px;
|
|
top: 20px;
|
|
width: 16px;
|
|
height: 16px;
|
|
cursor: pointer;
|
|
background-image: url('../assets/close.png');
|
|
background-size: 100%;
|
|
background-repeat: no-repeat;
|
|
}
|
|
@include max-screen(992px) {
|
|
& {
|
|
position: fixed;
|
|
width: 100vw;
|
|
left: 0;
|
|
top: 0;
|
|
&.hide {
|
|
margin-left: 0;
|
|
transform: translateX(-100%);
|
|
}
|
|
.hide-btn {
|
|
display: block;
|
|
}
|
|
}
|
|
}
|
|
|
|
.btn-group {
|
|
position: absolute;
|
|
left: 100%;
|
|
top: 0;
|
|
transform: translateX(10px);
|
|
|
|
.btn {
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 50%;
|
|
cursor: pointer;
|
|
background-color: $bgColor;
|
|
margin-top: 10px;
|
|
display: block;
|
|
}
|
|
|
|
.switch-btn {
|
|
background-image: url('../assets/menu.png');
|
|
background-size: 16px;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
}
|
|
|
|
.language-btn {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.github-btn {
|
|
background-image: url('../assets/github.png');
|
|
background-size: 16px;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
}
|
|
|
|
@include max-screen(992px) {
|
|
& {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
transform: translateX(0);
|
|
.btn {
|
|
margin-left: 10px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.content {
|
|
height: 100%;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.site-info {
|
|
display: flex;
|
|
justify-content: center;
|
|
flex-direction: column;
|
|
padding: ($gap * 2) $gap;
|
|
|
|
.name {
|
|
font-size: 24px;
|
|
font-weight: bold;
|
|
}
|
|
.version {
|
|
font-size: 14px;
|
|
color: #999;
|
|
}
|
|
.theme {
|
|
margin: 15px 0 0 5px;
|
|
width: 80px;
|
|
}
|
|
}
|
|
|
|
.nav-content {
|
|
padding: 0 $gap;
|
|
|
|
.nav-group {
|
|
margin: 0 0 $gap;
|
|
|
|
.nav-title {
|
|
font-size: 18px;
|
|
font-weight: bold;
|
|
color: $navFont;
|
|
margin-bottom: 5px;
|
|
}
|
|
.nav-item {
|
|
display: block;
|
|
padding: 5px 0;
|
|
color: $navFont;
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
|
|
.nav-name {
|
|
position: relative;
|
|
&::after {
|
|
content: '';
|
|
position: absolute;
|
|
bottom: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 2px;
|
|
background-color: $navFont;
|
|
transition: all .3s;
|
|
transform: scale(0);
|
|
transform-origin: left;
|
|
}
|
|
}
|
|
&:hover .nav-name::after,
|
|
&.router-link-active .nav-name::after {
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|