base layout, data, components

This commit is contained in:
Bart van der Braak 2020-01-31 05:45:29 +01:00
parent 3649d39cc3
commit e6e8648af9
29 changed files with 482 additions and 64 deletions

100
src/components/LeftNav.vue Normal file
View file

@ -0,0 +1,100 @@
<template >
<nav class="col-md-2 d-none d-md-block bg-light sidebar">
<div class="sidebar-sticky">
<h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
<span>Slayer Masters</span>
</h6>
<ul class="nav flex-column mb-2">
<NavItem v-for="master in masters" :key="master.id" :title="master.name" :id="master.id" :icon_url="master.image"/>
</ul>
<h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted">
<span>Other Links</span>
</h6>
<ul class="nav flex-column mb-2">
<NavItem v-for="link in extraLinks" :key="link.id" :title="link.title" :id="link.id" :icon_url="link.icon"/>
</ul>
</div>
</nav>
</template>
<script>
import master_json from "../data/masters";
import NavItem from "./NavItem";
export default {
name: "LeftNav",
components: {
NavItem
},
data() {
return {
masters: master_json.masters,
extraLinks: [
{
id: 100,
icon: 'hiscores.png',
title: 'Account settings',
},
{
id: 101,
icon: 'osrswiki.png',
title: 'OSRS Wiki',
},
]
}
},
}
</script>
<style scoped>
.sidebar {
position: fixed;
top: 0;
bottom: 0;
left: 0;
z-index: 100; /* Behind the navbar */
padding: 48px 0 0; /* Height of navbar */
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
}
.sidebar-sticky {
position: relative;
top: 0;
height: calc(100vh - 48px);
padding-top: .5rem;
overflow-x: hidden;
overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
}
@supports ((position: -webkit-sticky) or (position: sticky)) {
.sidebar-sticky {
position: -webkit-sticky;
position: sticky;
}
}
.sidebar .nav-link {
font-weight: 500;
color: #333;
}
.sidebar .nav-link .feather {
margin-right: 4px;
color: #999;
}
.sidebar .nav-link.active {
color: #007bff;
}
.sidebar .nav-link:hover .feather,
.sidebar .nav-link.active .feather {
color: inherit;
}
.sidebar-heading {
font-size: .75rem;
text-transform: uppercase;
}
</style>

View file

@ -1,15 +1,14 @@
<template>
<div class="hello">
<h1>{{ headerText }}</h1>
</div>
<main class="col-md-9 ml-sm-auto col-lg-10 px-4">
</main>
</template>
<script>
export default {
name: 'MainContent',
props: {
headerText: String
}
name: 'MainContent',
props: {
headerText: String
}
}
</script>

View file

@ -0,0 +1,28 @@
<template>
<li class="nav-item">
<a class="nav-link" v-bind:class="{ active: isActive }" href="#">
<img class="mx-2" v-if="icon_url" :src="require(`../assets/${icon_url}`)" width="42" height="42">
<span class="h6">{{ title }}</span>
</a>
</li>
</template>
<script>
export default {
name: "NavItem",
data() {
return {
isActive: false,
}
},
props: {
id: Number,
icon_url: String,
title: String,
}
}
</script>
<style scoped>
</style>

View file

@ -1,25 +0,0 @@
<template>
<nav class="navbar" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item">
<img src="/src/assets/galvek.webp">
</a>
</div>
<div class="navbar-menu">
<div class="navbar-start">
</div>
<div class="navbar-end">
</div>
</div>
</nav>
</template>
<script>
export default {
name: "Navbar"
}
</script>
<style scoped>
</style>

38
src/components/TopNav.vue Normal file
View file

@ -0,0 +1,38 @@
<template>
<nav class="navbar navbar-dark fixed-top bg-dark flex-md-nowrap p-0 shadow " role="navigation" aria-label="main navigation">
<a class="navbar-brand col-sm-3 col-md-2 mr-0" href="#">Slayer Weight Calculator</a>
<small class="text-white-50 font-italic">A calculator for slayer geeks that need to know percentages.</small>
<ul class="navbar-nav px-3">
<li class="nav-item text-nowrap">
<a class="nav-link" href="https://github.com/bartvdbraak/slayweightcalc">
<svg xmlns="http://www.w3.org/2000/svg" height="20" class="m-1" viewBox="0 0 512 499.36" role="img" focusable="false"><title>GitHub</title><path fill="currentColor" fill-rule="evenodd" d="M256 0C114.64 0 0 114.61 0 256c0 113.09 73.34 209 175.08 242.9 12.8 2.35 17.47-5.56 17.47-12.34 0-6.08-.22-22.18-.35-43.54-71.2 15.49-86.2-34.34-86.2-34.34-11.64-29.57-28.42-37.45-28.42-37.45-23.27-15.84 1.73-15.55 1.73-15.55 25.69 1.81 39.21 26.38 39.21 26.38 22.84 39.12 59.92 27.82 74.5 21.27 2.33-16.54 8.94-27.82 16.25-34.22-56.84-6.43-116.6-28.43-116.6-126.49 0-27.95 10-50.8 26.35-68.69-2.63-6.48-11.42-32.5 2.51-67.75 0 0 21.49-6.88 70.4 26.24a242.65 242.65 0 0 1 128.18 0c48.87-33.13 70.33-26.24 70.33-26.24 14 35.25 5.18 61.27 2.55 67.75 16.41 17.9 26.31 40.75 26.31 68.69 0 98.35-59.85 120-116.88 126.32 9.19 7.9 17.38 23.53 17.38 47.41 0 34.22-.31 61.83-.31 70.23 0 6.85 4.61 14.81 17.6 12.31C438.72 464.97 512 369.08 512 256.02 512 114.62 397.37 0 256 0z"></path></svg>
Github
</a>
</li>
</ul>
</nav>
</template>
<script>
export default {
name: "Navbar"
}
</script>
<style scoped>
.navbar-brand {
padding-top: .75rem;
padding-bottom: .75rem;
font-size: 1rem;
background-color: rgba(0, 0, 0, .25);
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
}
.navbar {
padding: .75rem 1rem;
border-width: 0;
border-radius: 0;
}
</style>