Changed sort filters to tabs.

This commit is contained in:
2020-05-25 02:02:28 +02:00
parent f4c85b7a67
commit b180572d5f
2101 changed files with 335 additions and 467 deletions

View File

@@ -3,8 +3,6 @@
v-if="actor"
class="content actor"
>
<FilterBar :fetch-releases="fetchActor" />
<div class="actor-header">
<h2 class="header-name">
<span v-if="actor.network">{{ actor.name }} ({{ actor.network.name }})</span>
@@ -290,6 +288,7 @@
:actor="actor"
/>
<FilterBar :fetch-releases="fetchActor" />
<Releases :releases="actor.releases" />
</div>
</div>
@@ -601,6 +600,7 @@ export default {
display: flex;
flex-grow: 1;
flex-direction: column;
background: var(--background-soft);
}
.heading {
@@ -608,8 +608,12 @@ export default {
margin: 0 0 1rem 0;
}
.photos.compact {
display: none;
.photos {
background: var(--background-dim);
}
.releases {
border-top: solid 1px var(--crease);
}
.releases {

View File

@@ -64,6 +64,7 @@
</div>
<Pagination
v-if="totalCount > 0"
:items-total="totalCount"
:items-per-page="limit"
class="pagination-top"

View File

@@ -1,20 +1,20 @@
<template>
<div
class="container"
:class="theme"
>
<Sidebar
v-if="showSidebar"
:toggle-sidebar="toggleSidebar"
/>
<div
class="container"
:class="theme"
>
<Sidebar
v-if="showSidebar"
:toggle-sidebar="toggleSidebar"
/>
<Header :toggle-sidebar="toggleSidebar" />
<Header :toggle-sidebar="toggleSidebar" />
<div class="content">
<!-- key forces rerender when new and old path use same component -->
<router-view />
</div>
</div>
<div class="content">
<!-- key forces rerender when new and old path use same component -->
<router-view />
</div>
</div>
</template>
<script>
@@ -26,39 +26,39 @@ import Header from '../header/header.vue';
import Sidebar from '../sidebar/sidebar.vue';
function theme(state) {
return state.ui.theme;
return state.ui.theme;
}
function toggleSidebar(state) {
this.showSidebar = typeof state === 'boolean' ? state : !this.showSidebar;
this.showSidebar = typeof state === 'boolean' ? state : !this.showSidebar;
}
function mounted() {
document.addEventListener('click', () => {
EventBus.$emit('blur');
this.showSidebar = false;
});
document.addEventListener('click', () => {
EventBus.$emit('blur');
this.showSidebar = false;
});
}
export default {
components: {
Header,
Sidebar,
},
data() {
return {
showSidebar: false,
};
},
computed: {
...mapState({
theme,
}),
},
mounted,
methods: {
toggleSidebar,
},
components: {
Header,
Sidebar,
},
data() {
return {
showSidebar: false,
};
},
computed: {
...mapState({
theme,
}),
},
mounted,
methods: {
toggleSidebar,
},
};
</script>
@@ -71,7 +71,7 @@ export default {
display: flex;
flex-direction: column;
overflow: hidden;
background: var(--background-dim);
background: var(--background-soft);
color: var(--text);
}
@@ -85,6 +85,6 @@ export default {
.content-inner {
flex-grow: 1;
padding: 1rem;
overflow-y: auto;
border-top: solid 1px var(--crease);
}
</style>

View File

@@ -2,30 +2,22 @@
<div class="filter-bar noselect">
<span class="sort">
<router-link
:to="{ name: isHome ? 'latest' : $route.name, params: { ...$route.params, range: 'latest' } }"
:to="{ name: isHome ? 'latest' : $route.name, params: { ...$route.params, range: 'latest', pageNumber: 1 } }"
:class="{ active: $route.name === 'latest' || range === 'latest' }"
class="range range-button"
>Latest</router-link>
<router-link
:to="{ name: isHome ? 'upcoming' : $route.name, params: { ...$route.params, range: 'upcoming' } }"
:to="{ name: isHome ? 'upcoming' : $route.name, params: { ...$route.params, range: 'upcoming', pageNumber: 1 } }"
:class="{ active: $route.name === 'upcoming' || range === 'upcoming' }"
class="range-button"
>Upcoming</router-link>
<router-link
:to="{ name: isHome ? 'new' : $route.name, params: { ...$route.params, range: 'new' } }"
:to="{ name: isHome ? 'new' : $route.name, params: { ...$route.params, range: 'new', pageNumber: 1 } }"
:class="{ active: $route.name === 'new' || range === 'new' }"
class="range-button"
>New</router-link>
<!--
<router-link
:to="{ name: $route.name, params: { ...$route.params, range: 'all' } }"
:class="{ active: range === 'all' }"
class="range-button"
>All</router-link>
-->
</span>
<Pagination
@@ -136,15 +128,13 @@ export default {
@import 'theme';
.filter-bar {
background: var(--background);
display: flex;
justify-content: space-between;
align-items: center;
padding: .5rem 1rem;
border-top: solid 1px var(--shadow-hint);
padding: .5rem 1rem 0 1rem;
z-index: 1;
background: var(--background-dim);
font-size: 0;
box-shadow: 0 0 3px var(--darken);
.icon {
margin: 0 .5rem 0 0;
@@ -155,6 +145,7 @@ export default {
.sort {
display: flex;
align-items: center;
margin: 0 0 -1px 0;
}
.filters-container {
@@ -174,14 +165,14 @@ export default {
.range-button {
color: var(--shadow);
background: var(--background);
display: inline-block;
padding: .5rem 1rem;
padding: .75rem 1rem;
border: none;
box-shadow: 0 0 2px var(--shadow-weak);
font-size: .8rem;
font-weight: bold;
text-decoration: none;
border: solid 1px transparent;
border-bottom: none;
&:hover:not(.active) {
color: var(--shadow-strong);
@@ -190,6 +181,8 @@ export default {
&.active {
color: var(--primary);
background: var(--background-soft);
border-color: var(--crease);
}
}
@@ -197,6 +190,12 @@ export default {
flex-shrink: 0;
}
@media(max-width: $breakpoint2) {
.pagination {
display: none;
}
}
@media(max-width: $breakpoint) {
.filters-container {
display: none;

View File

@@ -1,88 +1,88 @@
<template>
<div :class="{ compact }">
<ul class="filters">
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('lesbian') }"
>
<input
v-model="localFilter"
value="lesbian"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>lesbian
</label>
</li>
<div :class="{ compact }">
<ul class="filters">
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('lesbian') }"
>
<input
v-model="localFilter"
value="lesbian"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>lesbian
</label>
</li>
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('gay') }"
>
<input
v-model="localFilter"
value="gay"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>gay
</label>
</li>
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('gay') }"
>
<input
v-model="localFilter"
value="gay"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>gay
</label>
</li>
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('transsexual') }"
>
<input
v-model="localFilter"
value="transsexual"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>trans
</label>
</li>
</ul>
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('transsexual') }"
>
<input
v-model="localFilter"
value="transsexual"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>trans
</label>
</li>
</ul>
<ul class="filters">
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('anal') }"
>
<input
v-model="localFilter"
value="anal"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>anal
</label>
</li>
</ul>
</div>
<ul class="filters">
<li class="filter">
<label
class="toggle"
:class="{ active: !localFilter.includes('anal') }"
>
<input
v-model="localFilter"
value="anal"
type="checkbox"
class="check"
@change="$emit('set-filter', localFilter)"
>anal
</label>
</li>
</ul>
</div>
</template>
<script>
export default {
props: {
filter: {
type: Array,
default: () => [],
},
compact: {
type: Boolean,
default: false,
},
},
data() {
return {
localFilter: this.filter,
};
},
props: {
filter: {
type: Array,
default: () => [],
},
compact: {
type: Boolean,
default: false,
},
},
data() {
return {
localFilter: this.filter,
};
},
};
</script>
@@ -116,7 +116,7 @@ export default {
}
.toggle {
color: var(--shadow-weak);
color: var(--shadow);
box-sizing: border-box;
padding: .5rem;
margin: 0 .25rem;
@@ -134,6 +134,7 @@ export default {
}
&.active {
background: var(--background);
color: var(--primary);
box-shadow: 0 0 2px var(--shadow-weak);
}

View File

@@ -184,10 +184,11 @@ export default {
height: 3rem;
display: flex;
align-items: center;
z-index: 2;
justify-content: space-between;
background: var(--background);
color: var(--primary);
box-shadow: 0 1px 0 var(--darken-hint);
box-shadow: 0 0 3px var(--darken-weak);
font-size: 0;
}
@@ -229,6 +230,7 @@ export default {
display: flex;
align-items: center;
padding: 0 0 0 1rem;
fill: var(--primary);
}
.logo {

View File

@@ -11,6 +11,7 @@
<Releases :releases="releases" />
<Pagination
v-if="totalCount > 0"
:items-total="totalCount"
:items-per-page="limit"
class="pagination-bottom"

View File

@@ -1,36 +1,36 @@
<template>
<div
:title="title"
:class="{ active }"
class="icon"
v-html="svg"
/>
<div
:title="title"
:class="{ active }"
class="icon"
v-html="svg"
/>
</template>
<script>
export default {
props: {
icon: {
type: String,
default: null,
},
title: {
type: String,
default: null,
},
active: {
type: Boolean,
default: false,
},
},
data() {
return {
svg: null,
};
},
beforeMount() {
this.svg = require(`../../img/icons/${this.icon}.svg`).default;
},
props: {
icon: {
type: String,
default: null,
},
title: {
type: String,
default: null,
},
active: {
type: Boolean,
default: false,
},
},
data() {
return {
svg: null,
};
},
beforeMount() {
this.svg = require(`../../img/icons/${this.icon}.svg`).default;
},
};
</script>
@@ -38,7 +38,7 @@ export default {
@import '../../css/theme';
.icon {
fill: $text;
fill: var(--text);
display: inline-block;
flex-shrink: 0;
width: 1rem;
@@ -50,10 +50,10 @@ export default {
}
&.active {
fill: $shadow;
fill: var(--shadow);
&:hover {
fill: $text;
fill: var(--text);
cursor: pointer;
}
}

View File

@@ -208,19 +208,19 @@ export default {
}
.sidebar {
background: $profile;
background: var(--profile);
height: 100%;
width: 18rem;
display: flex;
flex-direction: column;
flex-shrink: 0;
color: $text-contrast;
color: var(--text-light);
overflow: hidden;
.title {
display: flex;
justify-content: center;
border-bottom: solid 1px $highlight-hint;
border-bottom: solid 1px var(--highlight-hint);
}
&.expanded {
@@ -240,7 +240,7 @@ export default {
grid-template-columns: 1fr;
grid-template-rows: repeat(auto-fit, 6rem);
overflow-y: auto;
scrollbar-color: $highlight-weak $profile;
scrollbar-color: var(--highlight-weak) var(--profile);
}
.logo {
@@ -251,7 +251,7 @@ export default {
object-fit: contain;
box-sizing: border-box;
padding: 1rem;
filter: $logo-highlight;
filter: var(--logo-highlight);
}
.parent {
@@ -265,8 +265,8 @@ export default {
flex-direction: column;
align-items: center;
flex-shrink: 0;
border-bottom: solid 1px $shadow-hint;
background: $profile;
border-bottom: solid 1px var(--shadow-hint);
background: var(--profile);
&.hideable {
display: none;
@@ -281,7 +281,7 @@ export default {
.sites.compact {
display: none;
background: $profile;
background: var(--profile);
grid-row: 1;
}

View File

@@ -1,117 +1,110 @@
<template>
<div
class="sidebar"
@click.stop
>
<div class="sidebar-header">
<Icon
icon="cross2"
class="sidebar-close"
@click.native="toggleSidebar(false)"
/>
<div
class="sidebar"
@click.stop
>
<div class="sidebar-header">
<Icon
icon="cross2"
class="sidebar-close"
@click.native="toggleSidebar(false)"
/>
<router-link
to="/home"
class="logo-link"
@click.native="toggleSidebar(false)"
>
<h1 class="sidebar-logo">
<div
class="logo logo-primary"
v-html="logoPrimary"
/>
<router-link
to="/home"
class="logo-link"
@click.native="toggleSidebar(false)"
>
<h1 class="sidebar-logo">
<div
class="logo"
v-html="logo"
/>
</h1>
</router-link>
</div>
<div
class="logo logo-light"
v-html="logoLight"
/>
</h1>
</router-link>
</div>
<nav class="nav">
<ul class="nolist">
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/home"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Home</a>
</router-link>
</li>
<nav class="nav">
<ul class="nolist">
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/home"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Home</a>
</router-link>
</li>
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/actors"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Actors</a>
</router-link>
</li>
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/actors"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Actors</a>
</router-link>
</li>
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/networks"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Sites</a>
</router-link>
</li>
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/networks"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Sites</a>
</router-link>
</li>
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/tags"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Tags</a>
</router-link>
</li>
</ul>
</nav>
</div>
<li class="nav-item">
<router-link
v-slot="{ href, isActive, navigate }"
to="/tags"
@click.native="toggleSidebar(false)"
>
<a
class="nav-link"
:href="href"
:class="{ active: isActive }"
@click="navigate"
>Tags</a>
</router-link>
</li>
</ul>
</nav>
</div>
</template>
<script>
import logoPrimary from '../../img/logo.svg';
import logoLight from '../../img/logo-light.svg';
import logo from '../../img/logo.svg';
export default {
props: {
toggleSidebar: {
type: Function,
default: null,
},
},
data() {
return {
logoPrimary,
logoLight,
};
},
props: {
toggleSidebar: {
type: Function,
default: null,
},
},
data() {
return {
logo,
};
},
};
</script>
@@ -123,8 +116,8 @@ export default {
height: 100%;
position: absolute;
z-index: 10;
color: var(--text-light);
background: var(--primary);
color: var(--text);
background: var(--background);
box-shadow: 0 0 3px var(--darken);
}
@@ -140,10 +133,10 @@ export default {
width: 1.5rem;
height: 100%;
padding: 0 1rem;
fill: var(--lighten);
fill: var(--darken);
&:hover {
fill: var(--text-light);
fill: var(--text);
cursor: pointer;
}
}
@@ -166,10 +159,7 @@ export default {
display: flex;
align-items: center;
margin: 0;
}
.logo-primary {
display: none;
fill: var(--primary);
}
.nav-item {
@@ -177,18 +167,18 @@ export default {
}
.nav-link {
color: var(--lighten-strong);
color: var(--shadow-strong);
display: block;
padding: 1rem;
text-decoration: none;
font-weight: bold;
&:hover,
&.active {
background: var(--shadow-hint);
&:hover {
color: var(--primary);
}
&.active {
background: var(--primary);
color: var(--text-light);
}
}
@@ -196,17 +186,20 @@ export default {
.dark .sidebar {
background: var(--profile);
.nav-link.active {
color: var(--primary);
background: var(--shadow-hint);
}
.nav-link {
color: var(--shadow);
.logo-primary {
display: flex;
}
&.active {
color: var(--text-light);
}
}
.logo-light {
display: none;
}
.sidebar-close {
fill: var(--lighten);
&:hover {
fill: var(--text-light);
}
}
}
</style>

View File

@@ -3,8 +3,6 @@
v-if="site"
class="content site"
>
<FilterBar :fetch-releases="fetchSite" />
<div class="header">
<a
v-tooltip.bottom="site.url && `Go to ${site.url}`"
@@ -43,6 +41,8 @@
</router-link>
</div>
<FilterBar :fetch-releases="fetchSite" />
<div class="content-inner">
<Releases :releases="releases" />
</div>