forked from DebaucheryLibrarian/traxxx
Added filter presets to consent warning. Updating scenes when tag filter changes.
This commit is contained in:
parent
ab83a42dfb
commit
62ef041b35
|
@ -384,10 +384,6 @@ function sfw() {
|
|||
return this.$store.state.ui.sfw;
|
||||
}
|
||||
|
||||
async function route() {
|
||||
await this.fetchActor();
|
||||
}
|
||||
|
||||
async function mounted() {
|
||||
await this.fetchActor();
|
||||
|
||||
|
@ -422,7 +418,8 @@ export default {
|
|||
sfw,
|
||||
},
|
||||
watch: {
|
||||
$route: route,
|
||||
$route: fetchActor,
|
||||
'$store.state.ui.tagFilter': fetchActor,
|
||||
},
|
||||
mounted,
|
||||
methods: {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<Warning
|
||||
v-if="showWarning"
|
||||
class="warning-container"
|
||||
@enter="setConsent(true)"
|
||||
@enter="(includeQueer) => setConsent(true, includeQueer)"
|
||||
@leave="setConsent(false)"
|
||||
/>
|
||||
|
||||
|
@ -46,11 +46,18 @@ function toggleFilters(state) {
|
|||
this.showSidebar = false;
|
||||
}
|
||||
|
||||
async function setConsent(consent) {
|
||||
async function setConsent(consent, includeQueer) {
|
||||
if (consent) {
|
||||
this.showWarning = false;
|
||||
localStorage.setItem('consent', window.env.sessionId);
|
||||
}
|
||||
|
||||
if (includeQueer) {
|
||||
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.filter(tag => !['gay', 'bisexual', 'transsexual'].includes(tag)));
|
||||
return;
|
||||
}
|
||||
|
||||
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.concat(['gay', 'bisexual', 'transsexual']));
|
||||
}
|
||||
|
||||
function blur(event) {
|
||||
|
|
|
@ -3,22 +3,26 @@
|
|||
title="filters"
|
||||
@close="$emit('close')"
|
||||
>
|
||||
<h3 class="form-heading">Show me</h3>
|
||||
<div class="filters">
|
||||
<h3 class="form-heading">Show me</h3>
|
||||
|
||||
<ul class="tags nolist">
|
||||
<li
|
||||
v-for="tag in tags"
|
||||
:key="tag"
|
||||
class="tags-item"
|
||||
>
|
||||
<Checkbox
|
||||
:checked="!tagFilter.includes(tag)"
|
||||
:label="tag"
|
||||
class="tag"
|
||||
@change="(state) => filterTag(tag, state)"
|
||||
/>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tags nolist">
|
||||
<li
|
||||
v-for="tag in tags"
|
||||
:key="tag"
|
||||
class="tags-item"
|
||||
>
|
||||
<Checkbox
|
||||
:checked="!tagFilter.includes(tag)"
|
||||
:label="tag"
|
||||
class="tag"
|
||||
@change="(state) => filterTag(tag, state)"
|
||||
/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p class="disclaimer">You may incidentally see filtered content</p>
|
||||
</div>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
||||
|
@ -57,13 +61,24 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.tags-item {
|
||||
.filters {
|
||||
width: 20rem;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.tags-item {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tag {
|
||||
padding: .5rem 0;
|
||||
}
|
||||
|
||||
.disclaimer {
|
||||
margin: 1rem 0 0 0;
|
||||
line-height: 1.5;
|
||||
text-align: center;
|
||||
font-size: .9rem;
|
||||
color: var(--shadow);
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<strong class="title">This website contains sexually explicit content</strong>
|
||||
|
||||
<span class="copy">By entering, you agree to the following</span>
|
||||
<span class="copy agree">By entering, you agree to the following</span>
|
||||
|
||||
<ul class="rules">
|
||||
<li class="rule">You are at least 18 years old, and legally permitted to view adult material in your jurisdiction.</li>
|
||||
|
@ -22,13 +22,26 @@
|
|||
href="https://www.google.com"
|
||||
class="button leave"
|
||||
@click="$emit('leave')"
|
||||
>Leave</a>
|
||||
><Icon icon="arrow-left16" />Leave</a>
|
||||
|
||||
<button
|
||||
class="button enter"
|
||||
@click="$emit('enter')"
|
||||
>Enter</button>
|
||||
class="button enter queer"
|
||||
@click="$emit('enter', true)"
|
||||
>
|
||||
<span class="button-title">Enter</span>
|
||||
<span class="button-sub">I like gay, bi and trans content</span>
|
||||
</button>
|
||||
|
||||
<button
|
||||
class="button enter straight"
|
||||
@click="$emit('enter', false)"
|
||||
>
|
||||
<span class="button-title">Enter</span>
|
||||
<span class="button-sub">I prefer straight content</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<span class="preferences">You can adjust your content preferences after entering</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -42,6 +55,7 @@ export default {
|
|||
logo,
|
||||
};
|
||||
},
|
||||
emits: ['enter'],
|
||||
};
|
||||
</script>
|
||||
|
||||
|
@ -68,6 +82,13 @@ export default {
|
|||
margin: 1rem;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 8rem;
|
||||
display: flex;
|
||||
fill: var(--primary);
|
||||
margin: 1rem auto 0 auto;
|
||||
}
|
||||
|
||||
.title,
|
||||
.copy,
|
||||
.rules {
|
||||
|
@ -98,52 +119,106 @@ export default {
|
|||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.preferences {
|
||||
color: var(--lighten);
|
||||
display: block;
|
||||
padding: .5rem 0 1rem 0;
|
||||
text-align: center;
|
||||
font-size: .9rem;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
text-align: center;
|
||||
padding: 1rem 1rem 2rem 1rem;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
.button {
|
||||
display: inline-block;
|
||||
padding: 1rem;
|
||||
border: none;
|
||||
font-size: 1.5rem;
|
||||
padding: 0;
|
||||
background: none;
|
||||
border: solid 2px transparent;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
color: var(--lighten-strong);
|
||||
flex-basis: 0;
|
||||
|
||||
&.leave {
|
||||
background: var(--darken-strong);
|
||||
padding: 1rem 3rem;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--lighten-strong);
|
||||
padding: 1rem;
|
||||
|
||||
.icon {
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
margin: 0 1rem 0 0;
|
||||
fill: var(--lighten);
|
||||
}
|
||||
}
|
||||
|
||||
&.enter {
|
||||
background: var(--primary);
|
||||
font-weight: bold;
|
||||
flex-grow: 1;
|
||||
|
||||
&:hover {
|
||||
color: var(--text-light);
|
||||
.button-title,
|
||||
.button-sub {
|
||||
color: var(--text-light);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.straight {
|
||||
border-color: var(--primary);
|
||||
}
|
||||
|
||||
&.queer {
|
||||
border-image: linear-gradient(90deg, #f00, #f80, #ff0, #0f0, #00f, #a0f, #fff, #f8f, #0ff) 1;
|
||||
}
|
||||
|
||||
&:not(:last-child) {
|
||||
margin: 0 2rem 0 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: var(--text-light);
|
||||
|
||||
.icon {
|
||||
fill: var(--text-light);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 8rem;
|
||||
display: flex;
|
||||
fill: var(--primary);
|
||||
margin: 1rem auto 0 auto;
|
||||
.button-title,
|
||||
.button-sub {
|
||||
width: 100%;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.button-title {
|
||||
font-size: 1.5rem;
|
||||
padding: .5rem .5rem .15rem .5rem;
|
||||
color: var(--lighten-strong);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.button-sub {
|
||||
font-size: .75rem;
|
||||
padding: .15rem .5rem .75rem .5rem;
|
||||
color: var(--lighten);
|
||||
}
|
||||
|
||||
@media(max-width: $breakpoint) {
|
||||
.title {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.button:not(:last-child) {
|
||||
margin: 0 1rem 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: $breakpoint-micro) {
|
||||
|
|
|
@ -170,6 +170,7 @@ export default {
|
|||
},
|
||||
watch: {
|
||||
$route: route,
|
||||
'$store.state.ui.tagFilter': fetchEntity,
|
||||
},
|
||||
mounted,
|
||||
methods: {
|
||||
|
|
|
@ -44,10 +44,6 @@ async function fetchReleases() {
|
|||
this.$refs.content.scrollTop = 0;
|
||||
}
|
||||
|
||||
async function route() {
|
||||
await this.fetchReleases();
|
||||
}
|
||||
|
||||
async function mounted() {
|
||||
this.pageTitle = '';
|
||||
|
||||
|
@ -71,7 +67,8 @@ export default {
|
|||
};
|
||||
},
|
||||
watch: {
|
||||
$route: route,
|
||||
$route: fetchReleases,
|
||||
'$store.state.ui.tagFilter': fetchReleases,
|
||||
},
|
||||
mounted,
|
||||
methods: {
|
||||
|
|
|
@ -75,10 +75,6 @@ async function fetchReleases() {
|
|||
this.description = this.tag.description && converter.makeHtml(escapeHtml(this.tag.description));
|
||||
}
|
||||
|
||||
async function route() {
|
||||
await this.fetchReleases();
|
||||
}
|
||||
|
||||
async function mounted() {
|
||||
await this.fetchReleases();
|
||||
this.pageTitle = this.tag.name;
|
||||
|
@ -105,7 +101,8 @@ export default {
|
|||
};
|
||||
},
|
||||
watch: {
|
||||
$route: route,
|
||||
$route: fetchReleases,
|
||||
'$store.state.ui.tagFilter': fetchReleases,
|
||||
},
|
||||
mounted,
|
||||
methods: {
|
||||
|
|
|
@ -27,6 +27,7 @@ function initActorActions(store, router) {
|
|||
$orderBy:[ReleasesOrderBy!]
|
||||
$selectableTags: [String],
|
||||
$includedTags: [String!],
|
||||
$exclude: [String!],
|
||||
$mode: String!,
|
||||
$includedEntities: [ReleaseFilter!],
|
||||
$includedActors: [ReleaseFilter!]
|
||||
|
@ -203,6 +204,17 @@ function initActorActions(store, router) {
|
|||
{
|
||||
or: $includedActors
|
||||
}
|
||||
{
|
||||
releasesTagsConnection: {
|
||||
none: {
|
||||
tag: {
|
||||
slug: {
|
||||
in: $exclude
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
selectedTags: $includedTags
|
||||
|
@ -228,7 +240,7 @@ function initActorActions(store, router) {
|
|||
beforeTime: store.getters.before,
|
||||
selectableTags: config.selectableTags,
|
||||
orderBy,
|
||||
excludeTags: store.state.ui.filter,
|
||||
exclude: store.state.ui.tagFilter,
|
||||
includedTags,
|
||||
includedEntities: getIncludedEntities(router),
|
||||
includedActors: getIncludedActors(router),
|
||||
|
|
Loading…
Reference in New Issue