Linter fixes

This commit is contained in:
Roman Cervantes 2019-11-08 13:34:06 -07:00
parent 10787e2bfc
commit 5fa43e8d2b
62 changed files with 4580 additions and 4290 deletions

View file

@ -1,20 +1,20 @@
{
"presets": [
[
"env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}
],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["transform-vue-jsx", "istanbul"]
"presets": [
[
"env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}
],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["transform-vue-jsx", "istanbul"]
}
}
}

View file

@ -1,81 +1,80 @@
// https://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
},
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
extends: [
'plugin:vue/essential',
'airbnb-base',
],
rules: {
indent: ['error', 2],
},
// required to lint *.vue files
plugins: [
'vue'
],
// check if imports actually resolve
settings: {
'import/resolver': {
webpack: {
config: 'build/webpack.base.conf.js'
}
}
},
// add your custom rules here
rules: {
"vue/order-in-components": [
"error", {
"order": [
"el",
"name",
"parent",
"functional",
["delimiters", "comments"],
["components", "directives", "filters"],
"extends",
"mixins",
"inheritAttrs",
"model",
["props", "propsData"],
"data",
"computed",
"watch",
"LIFECYCLE_HOOKS",
"methods",
["template", "render"],
"renderError",
],
},
],
// don't require .vue extension when importing
'import/extensions': ['error', 'always', {
js: 'never',
vue: 'never'
}],
// disallow reassignment of function parameters
// disallow parameter object manipulation except for specific exclusions
'no-param-reassign': ['error', {
props: true,
ignorePropertyModificationsFor: [
'state', // for vuex state
'acc', // for reduce accumulators
'e' // for e.returnvalue
]
}],
// allow optionalDependencies
'import/no-extraneous-dependencies': ['error', {
optionalDependencies: ['test/unit/index.js']
}],
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
root: true,
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
},
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
extends: [
'plugin:vue/strongly-recommended',
'airbnb-base',
],
// required to lint *.vue files
plugins: [
'vue'
],
// check if imports actually resolve
settings: {
'import/resolver': {
webpack: {
config: 'build/webpack.base.conf.js'
}
}
},
// add your custom rules here
rules: {
"vue/order-in-components": [
"error", {
"order": [
"el",
"name",
"parent",
"functional",
["delimiters", "comments"],
["components", "directives", "filters"],
"extends",
"mixins",
"inheritAttrs",
"model",
["props", "propsData"],
"data",
"computed",
"watch",
"LIFECYCLE_HOOKS",
"methods",
["template", "render"],
"renderError",
],
},
],
// don't require .vue extension when importing
'import/extensions': ['error', 'always', {
js: 'never',
vue: 'never'
}],
"indent": ["error", 2],
// disallow reassignment of function parameters
// disallow parameter object manipulation except for specific exclusions
'no-param-reassign': ['error', {
props: true,
ignorePropertyModificationsFor: [
'state', // for vuex state
'acc', // for reduce accumulators
'e' // for e.returnvalue
]
}],
// allow optionalDependencies
'import/no-extraneous-dependencies': ['error', {
optionalDependencies: ['test/unit/index.js']
}],
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
}
}

View file

@ -1,22 +1,24 @@
<template>
<div
id="app"
:class="theme"
:style="style"
:dir="dir"
>
<nav-header />
<router-view v-if="user" />
<div
id="app"
:class="theme"
:style="style"
:dir="dir"
>
<nav-header />
<router-view v-if="user" />
<div class="auth" v-else>
<img src='/static/gamebrary-logo.png' />
<i class="fas fa-sync-alt fa-2x fast-spin" />
<h3>Authorizing</h3>
</div>
<toast />
v-else
class="auth">
<img src="/static/gamebrary-logo.png" >
<i class="fas fa-sync-alt fa-2x fast-spin" />
<h3>Authorizing</h3>
</div>
<toast />
</div>
</template>
<script>
@ -65,7 +67,7 @@ export default {
customWallpaper() {
// eslint-disable-next-line
return this.settings && this.settings.wallpapers && this.platform && this.settings.wallpapers[this.platform.code]
return this.settings && this.settings.wallpapers && this.platform && this.settings.wallpapers[this.platform.code]
? this.settings.wallpapers[this.platform.code].url
: '';
},
@ -73,9 +75,9 @@ export default {
theme() {
const hasPlatform = this.platform && this.platform.code;
const hasTheme = hasPlatform
&& this.settings
&& this.settings[this.platform.code]
&& this.settings[this.platform.code].theme;
&& this.settings
&& this.settings[this.platform.code]
&& this.settings[this.platform.code].theme;
const isGameBoard = this.$route.name === 'game-board';
@ -315,35 +317,35 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss">
@import url(https://fonts.googleapis.com/css?family=Fira+Sans:700|Roboto:400,400italic,700);
@import "~styles/styles";
@import url(https://fonts.googleapis.com/css?family=Fira+Sans:700|Roboto:400,400italic,700);
@import "~styles/styles";
</style>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
#app {
background: var(--body-background);
background-size: cover;
#app {
background: var(--body-background);
background-size: cover;
}
.auth {
background: var(--body-background);
height: 100vh;
position: fixed;
top: 0;
width: 100vw;
display: flex;
align-items: center;
flex-direction: column;
img {
width: 100px;
margin-top: 100px;
}
.auth {
background: var(--body-background);
height: 100vh;
position: fixed;
top: 0;
width: 100vw;
display: flex;
align-items: center;
flex-direction: column;
img {
width: 100px;
margin-top: 100px;
}
i {
margin: $gp;
}
i {
margin: $gp;
}
}
</style>

View file

@ -2,49 +2,68 @@
<!-- TODO: increase limit to 20 or more -->
<!-- TODO: fix empty state weirdness -->
<template lang="html">
<modal :title="$t('list.addGame')" @open="clear">
<button class="add-game-button small secondary" :title="$t('list.addGame')">
<i class="fas fa-plus" />
<modal
:title="$t('list.addGame')"
@open="clear">
<button
:title="$t('list.addGame')"
class="add-game-button small secondary">
<i class="fas fa-plus" />
</button>
<div
slot="content"
class="game-search">
<form @submit.prevent="search">
<input
ref="searchInput"
v-model="searchText"
:placeholder="$t('gameSearch.inputPlaceholder')"
type="text"
>
<button
class="primary small"
@click="search">
<i
v-if="loading"
class="fas fa-circle-notch fast-spin hollow" />
<i
v-else
class="fas fa-search" />
</button>
<div class="game-search" slot="content">
<form @submit.prevent="search">
<input
ref="searchInput"
type="text"
v-model="searchText"
:placeholder="$t('gameSearch.inputPlaceholder')"
/>
<igdb-credit linkable />
</form>
<button class="primary small" @click="search">
<i class="fas fa-circle-notch fast-spin hollow" v-if="loading" />
<i class="fas fa-search" v-else />
</button>
<small
v-if="gamesInList.length"
:title="gamesInListNames">
<strong>{{ gamesInListMessage }}</strong>
{{ $t('gameSearch.alreadyInList') }}
</small>
<igdb-credit linkable />
</form>
<div
v-if="filteredResults.length > 0"
ref="searchResults"
class="search-results">
<game-card-search
v-for="{ id } in filteredResults"
:key="id"
:game-id="id"
:list-id="listId"
search-result
@added="added"
/>
</div>
<small v-if="gamesInList.length" :title="gamesInListNames">
<strong>{{ gamesInListMessage }}</strong>
{{ $t('gameSearch.alreadyInList') }}
</small>
<div class="search-results" ref="searchResults" v-if="filteredResults.length > 0">
<game-card-search
v-for="{ id } in filteredResults"
search-result
:key="id"
:game-id="id"
:listId="listId"
@added="added"
/>
</div>
<span class="no-results" v-if="noResults">
{{ $t('gameSearch.noResultsFound') }}
</span>
</div>
</modal>
<span
v-if="noResults"
class="no-results">
{{ $t('gameSearch.noResultsFound') }}
</span>
</div>
</modal>
</template>
<script>
@ -81,8 +100,8 @@ export default {
noResults() {
return this.filteredResults.length === 0
&& !this.loading
&& this.searchText.trim().length > 0;
&& !this.loading
&& this.searchText.trim().length > 0;
},
list() {
@ -144,7 +163,7 @@ export default {
search: debounce(
// eslint-disable-next-line
function() {
function() {
this.loading = true;
this.$store.dispatch('SEARCH', this.searchText)
@ -163,27 +182,27 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.add-game-button {
position: absolute;
right: 0;
bottom: 0;
border-bottom-left-radius: 0;
border-top-right-radius: 0;
.add-game-button {
position: absolute;
right: 0;
bottom: 0;
border-bottom-left-radius: 0;
border-top-right-radius: 0;
}
form {
display: flex;
align-items: center;
margin-bottom: $gp;
input {
margin-bottom: 0;
}
form {
display: flex;
align-items: center;
margin-bottom: $gp;
input {
margin-bottom: 0;
}
button {
margin: 0 $gp / 2;
}
button {
margin: 0 $gp / 2;
}
}
</style>

View file

@ -1,23 +1,25 @@
<!-- TODO: Account for unique list style (100%) -->
<template lang="html">
<div class="gameboard-placeholder">
<div
:class="`list ${list.view || 'single'}`"
v-for="list in lists"
:key="list.name"
>
<div class="list-header" :style="style" />
<div class="gameboard-placeholder">
<div
v-for="list in lists"
:class="`list ${list.view || 'single'}`"
:key="list.name"
>
<div
:style="style"
class="list-header" />
<div class="games">
<placeholder
image
v-for="n in list.games.length"
:lines="list && list.view === 'grid' ? 0 : 2"
:key="n"
/>
</div>
</div>
<div class="games">
<placeholder
v-for="n in list.games.length"
:lines="list && list.view === 'grid' ? 0 : 2"
:key="n"
image
/>
</div>
</div>
</div>
</template>
<script>
@ -55,59 +57,59 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.gameboard-placeholder {
user-select: none;
display: flex;
align-items: flex-start;
.gameboard-placeholder {
user-select: none;
display: flex;
align-items: flex-start;
}
.list {
flex-shrink: 0;
cursor: default;
border-radius: $border-radius;
background: var(--list-background);
overflow: hidden;
position: relative;
width: $list-width;
margin-right: $gp;
max-height: calc(100vh - 81px);
&.wide {
--placeholder-image-width: 80px;
--placeholder-image-height: 80px;
}
.list {
flex-shrink: 0;
cursor: default;
border-radius: $border-radius;
background: var(--list-background);
overflow: hidden;
position: relative;
width: $list-width;
margin-right: $gp;
max-height: calc(100vh - 81px);
&.wide {
--placeholder-image-width: 80px;
--placeholder-image-height: 80px;
}
&.grid {
--placeholder-image-width: 90px;
}
&.grid .games {
padding-top: $gp / 2;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: $gp / 4;
.placeholder {
margin: 0;
padding: 0;
}
}
&.grid {
--placeholder-image-width: 90px;
}
.list-header {
background: var(--list-header-background);
height: $list-header-height;
position: absolute;
width: 100%;
}
&.grid .games {
padding-top: $gp / 2;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: $gp / 4;
.games {
margin-top: $list-header-height;
display: grid;
grid-gap: $gp / 2 ;
width: 100%;
padding: $gp / 2;
.placeholder {
margin: 0;
padding: 0;
}
}
}
.list-header {
background: var(--list-header-background);
height: $list-header-height;
position: absolute;
width: 100%;
}
.games {
margin-top: $list-header-height;
display: grid;
grid-gap: $gp / 2 ;
width: 100%;
padding: $gp / 2;
}
</style>

View file

@ -18,8 +18,8 @@ export default {
showGameRatings() {
return this.settings
&& this.settings[this.platform.code]
&& !this.settings[this.platform.code].hideGameRatings;
&& this.settings[this.platform.code]
&& !this.settings[this.platform.code].hideGameRatings;
},
gameCardClass() {
@ -111,3 +111,4 @@ export default {
},
},
};

View file

@ -1,43 +1,53 @@
<template lang="html">
<div v-if="gameId && games[gameId]" :class="gameCardClass">
<img :src="coverUrl" @click="openDetails" :alt="game.name">
<div
v-if="gameId && games[gameId]"
:class="gameCardClass">
<img
:src="coverUrl"
:alt="game.name"
@click="openDetails">
<div class="game-info">
<a v-text="game.name" @click="openDetails" v-if="list.view !== 'covers'" />
<div class="game-info">
<a
v-if="list.view !== 'covers'"
@click="openDetails"
v-text="game.name" />
<i class="fas fa-grip-vertical game-drag-handle" />
<i class="fas fa-grip-vertical game-drag-handle" />
<game-rating
v-if="showGameRatings && list.view !== 'covers'"
:rating="game.rating"
small
@click.native="openDetails"
/>
<game-rating
v-if="showGameRatings && list.view !== 'covers'"
:rating="game.rating"
small
@click.native="openDetails"
/>
<i
v-if="note"
:title="note"
class="fas fa-sticky-note note"
@click="openDetails"
/>
<i
v-if="note"
:title="note"
class="fas fa-sticky-note note"
@click="openDetails"
/>
<div class="game-tags" v-if="hasTags">
<div
v-for="({ games, hex }, name) in tags"
:key="name"
v-if="games.includes(game.id)"
>
<tag
v-if="games.includes(game.id)"
:label="name"
:hex="hex"
readonly
@action="openTags"
/>
</div>
</div>
<div
v-if="hasTags"
class="game-tags">
<div
v-for="({ games, hex }, name) in tags"
v-if="games.includes(game.id)"
:key="name"
>
<tag
v-if="games.includes(game.id)"
:label="name"
:hex="hex"
readonly
@action="openTags"
/>
</div>
</div>
</div>
</div>
</template>
<script>
@ -56,91 +66,91 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
$gameCoverWidth: 80px;
$gameCoverWidth: 80px;
.game-card {
background: var(--game-card-background);
margin-bottom: $gp / 2;
position: relative;
display: grid;
grid-template-columns: $gameCoverWidth auto;
border-radius: $border-radius;
overflow: hidden;
.game-card {
background: var(--game-card-background);
margin-bottom: $gp / 2;
position: relative;
display: grid;
grid-template-columns: $gameCoverWidth auto;
border-radius: $border-radius;
overflow: hidden;
&.card-placeholder {
background: var(--game-card-background);
opacity: 0.3;
&.card-placeholder {
background: var(--game-card-background);
opacity: 0.3;
.game-card-options {
display: none;
}
}
img {
width: $gameCoverWidth;
height: auto;
display: flex;
align-self: center;
cursor: pointer;
}
.game-info {
padding: $gp / 2 $gp;
width: 100%;
display: flex;
flex-direction: column;
.game-tags {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: $gp / 4;
}
i.tags {
position: absolute;
bottom: $gp * 1.5;
right: $gp / 4;
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
&:hover {
a {
text-decoration: underline;
}
}
a {
cursor: pointer;
margin-right: $gp / 2;
color: var(--game-card-text-color);
}
}
.game-drag-handle {
@include drag-cursor;
position: absolute;
color: #e5e5e5;
right: $gp / 3;
top: $gp / 3;
&:hover {
color: #a5a2a2;
}
}
.game-tag {
margin-bottom: $gp / 3;
}
.game-card-options {
display: none;
}
}
.note {
color: var(--note-color);
img {
width: $gameCoverWidth;
height: auto;
display: flex;
align-self: center;
cursor: pointer;
}
.game-info {
padding: $gp / 2 $gp;
width: 100%;
display: flex;
flex-direction: column;
.game-tags {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: $gp / 4;
}
i.tags {
position: absolute;
bottom: $gp * 1.5;
right: $gp / 4;
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
&:hover {
a {
text-decoration: underline;
}
}
a {
cursor: pointer;
margin-right: $gp / 2;
color: var(--game-card-text-color);
}
}
.game-drag-handle {
@include drag-cursor;
position: absolute;
color: #e5e5e5;
right: $gp / 3;
top: $gp / 3;
&:hover {
color: #a5a2a2;
}
}
.game-tag {
margin-bottom: $gp / 3;
}
}
.note {
color: var(--note-color);
}
</style>

View file

@ -1,11 +1,13 @@
<template lang="html">
<div v-if="gameId && games[gameId]" :class="gameCardClass">
<img
:src="coverUrl"
:alt="game.name"
@click="openDetails"
>
</div>
<div
v-if="gameId && games[gameId]"
:class="gameCardClass">
<img
:src="coverUrl"
:alt="game.name"
@click="openDetails"
>
</div>
</template>
<script>
@ -17,21 +19,21 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-card {
display: flex;
flex-direction: column;
position: relative;
width: 94.5px;
margin-bottom: 4px;
border-radius: $border-radius;
overflow: hidden;
cursor: pointer;
.game-card {
display: flex;
flex-direction: column;
position: relative;
width: 94.5px;
margin-bottom: 4px;
border-radius: $border-radius;
overflow: hidden;
cursor: pointer;
img {
width: 100%;
height: auto;
}
}
img {
width: 100%;
height: auto;
}
}
</style>

View file

@ -1,25 +1,31 @@
<template lang="html">
<div v-if="gameId && games[gameId]" :class="gameCardClass">
<img :src="coverUrl" :alt="game.name">
<div
v-if="gameId && games[gameId]"
:class="gameCardClass">
<img
:src="coverUrl"
:alt="game.name">
<div class="game-info">
<a v-text="game.name" @click="openDetails" />
<div class="game-info">
<a
@click="openDetails"
v-text="game.name" />
<game-rating
v-if="showGameRatings && list.view !== 'covers'"
:rating="game.rating"
small
@click.native="openDetails"
/>
<game-rating
v-if="showGameRatings && list.view !== 'covers'"
:rating="game.rating"
small
@click.native="openDetails"
/>
<button
class="primary small add-game-button"
@click="addGame"
>
{{ $t('list.addGame') }}
</button>
</div>
<button
class="primary small add-game-button"
@click="addGame"
>
{{ $t('list.addGame') }}
</button>
</div>
</div>
</template>
<script>
@ -36,46 +42,47 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
$gameCoverWidth: 80px;
$gameCoverWidth: 80px;
.game-card {
background: var(--game-card-background);
margin-top: $gp / 2;
position: relative;
display: grid;
grid-template-columns: $gameCoverWidth auto;
border-radius: $border-radius;
overflow: hidden;
.game-card {
background: var(--game-card-background);
margin-top: $gp / 2;
position: relative;
display: grid;
grid-template-columns: $gameCoverWidth auto;
border-radius: $border-radius;
overflow: hidden;
img {
width: $gameCoverWidth;
height: auto;
display: flex;
align-self: center;
cursor: pointer;
}
img {
width: $gameCoverWidth;
height: auto;
display: flex;
align-self: center;
cursor: pointer;
}
.game-info {
padding: $gp / 2 $gp;
width: 100%;
display: flex;
flex-direction: column;
.game-info {
padding: $gp / 2 $gp;
width: 100%;
display: flex;
flex-direction: column;
button {
margin-top: $gp / 2;
align-self: flex-start;
}
a {
color: var(--game-card-text-color);
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
}
button {
margin-top: $gp / 2;
align-self: flex-start;
}
a {
color: var(--game-card-text-color);
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
}
}
</style>

View file

@ -1,40 +1,46 @@
<template lang="html">
<div v-if="gameId && games[gameId]" :class="gameCardClass">
<div class="game-info">
<a v-text="game.name" @click="openDetails"/>
<i class="fas fa-grip-vertical game-drag-handle" />
<div
v-if="gameId && games[gameId]"
:class="gameCardClass">
<div class="game-info">
<a
@click="openDetails"
v-text="game.name"/>
<i class="fas fa-grip-vertical game-drag-handle" />
<game-rating
v-if="showGameRatings && list.view !== 'covers'"
:rating="game.rating"
small
@click.native="openDetails"
/>
<game-rating
v-if="showGameRatings && list.view !== 'covers'"
:rating="game.rating"
small
@click.native="openDetails"
/>
<i
v-if="note"
:title="note"
class="fas fa-sticky-note note"
@click="openDetails"
/>
<i
v-if="note"
:title="note"
class="fas fa-sticky-note note"
@click="openDetails"
/>
<div class="game-tags" v-if="hasTags">
<div
v-for="({ games, hex }, name) in tags"
:key="name"
v-if="games.includes(game.id)"
>
<tag
v-if="games.includes(game.id)"
:label="name"
:hex="hex"
readonly
@action="openTags"
/>
</div>
</div>
<div
v-if="hasTags"
class="game-tags">
<div
v-for="({ games, hex }, name) in tags"
v-if="games.includes(game.id)"
:key="name"
>
<tag
v-if="games.includes(game.id)"
:label="name"
:hex="hex"
readonly
@action="openTags"
/>
</div>
</div>
</div>
</div>
</template>
<script>
@ -53,82 +59,83 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
$gameCoverWidth: 80px;
$gameCoverWidth: 80px;
.game-card {
background: var(--game-card-background);
margin-bottom: $gp / 2;
position: relative;
border-radius: $border-radius;
min-height: 50px;
.game-card {
background: var(--game-card-background);
margin-bottom: $gp / 2;
position: relative;
border-radius: $border-radius;
min-height: 50px;
&.card-placeholder {
background: #e5e5e5;
outline: 1px dashed #a5a2a2;
opacity: 0.6;
&.card-placeholder {
background: #e5e5e5;
outline: 1px dashed #a5a2a2;
opacity: 0.6;
.game-card-options {
display: none;
}
}
.game-info {
padding: $gp / 3 $gp / 2;
width: 100%;
display: flex;
flex-direction: column;
.game-tags {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: $gp / 4;
}
i.tags {
position: absolute;
bottom: $gp * 1.5;
right: $gp / 4;
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
&:hover {
a {
text-decoration: underline;
}
}
a {
cursor: pointer;
margin-right: $gp / 2;
color: var(--game-card-text-color);
}
}
.game-drag-handle {
@include drag-cursor;
position: absolute;
color: #e5e5e5;
right: $gp / 3;
top: $gp / 3;
&:hover {
color: #a5a2a2;
}
}
.game-tag {
margin-bottom: $gp / 3;
}
.game-card-options {
display: none;
}
}
.note {
color: var(--note-color);
.game-info {
padding: $gp / 3 $gp / 2;
width: 100%;
display: flex;
flex-direction: column;
.game-tags {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: $gp / 4;
}
i.tags {
position: absolute;
bottom: $gp * 1.5;
right: $gp / 4;
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
&:hover {
a {
text-decoration: underline;
}
}
a {
cursor: pointer;
margin-right: $gp / 2;
color: var(--game-card-text-color);
}
}
.game-drag-handle {
@include drag-cursor;
position: absolute;
color: #e5e5e5;
right: $gp / 3;
top: $gp / 3;
&:hover {
color: #a5a2a2;
}
}
.game-tag {
margin-bottom: $gp / 3;
}
}
.note {
color: var(--note-color);
}
</style>

View file

@ -1,48 +1,55 @@
<template lang="html">
<div v-if="gameId && games[gameId]" :class="gameCardClass">
<img :src="coverUrl" @click="openDetails" :alt="game.name">
<div
v-if="gameId && games[gameId]"
:class="gameCardClass">
<img
:src="coverUrl"
:alt="game.name"
@click="openDetails">
<div class="game-info">
<a
v-if="list.view !== 'covers'"
v-text="game.name"
@click="openDetails"
/>
<div class="game-info">
<a
v-if="list.view !== 'covers'"
@click="openDetails"
v-text="game.name"
/>
<i class="fas fa-grip-vertical game-drag-handle" />
<i class="fas fa-grip-vertical game-drag-handle" />
<game-rating
v-if="showGameRatings"
:rating="game.rating"
small
@click.native="openDetails"
/>
<game-rating
v-if="showGameRatings"
:rating="game.rating"
small
@click.native="openDetails"
/>
<i
v-if="note"
:title="note"
class="fas fa-sticky-note note"
@click="openDetails"
/>
<i
v-if="note"
:title="note"
class="fas fa-sticky-note note"
@click="openDetails"
/>
<div class="game-tags" v-if="hasTags">
<div
v-if="games.includes(game.id)"
v-for="({ games, hex }, name) in tags"
:key="name"
>
<tag
v-if="games.includes(game.id)"
:label="name"
:hex="hex"
readonly
@action="openTags"
@close="removeTag(name)"
/>
</div>
</div>
<div
v-if="hasTags"
class="game-tags">
<div
v-for="({ games, hex }, name) in tags"
v-if="games.includes(game.id)"
:key="name"
>
<tag
v-if="games.includes(game.id)"
:label="name"
:hex="hex"
readonly
@action="openTags"
@close="removeTag(name)"
/>
</div>
</div>
</div>
</div>
</template>
<script>
@ -61,90 +68,91 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-card {
background: var(--game-card-background);
margin-bottom: $gp / 2;
position: relative;
display: grid;
grid-template-columns: 50px auto;
border-radius: $border-radius;
overflow: hidden;
.game-card {
background: var(--game-card-background);
margin-bottom: $gp / 2;
position: relative;
display: grid;
grid-template-columns: 50px auto;
border-radius: $border-radius;
overflow: hidden;
img {
width: 50px;
height: auto;
display: flex;
align-self: center;
cursor: pointer;
}
&.card-placeholder {
background: #e5e5e5;
outline: 1px dashed #a5a2a2;
opacity: 0.6;
.game-card-options {
display: none;
}
}
.game-info {
padding: $gp / 2 $gp;
width: 100%;
display: flex;
flex-direction: column;
.game-tags {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: $gp / 4;
}
i.tags {
position: absolute;
bottom: $gp * 1.5;
right: $gp / 4;
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
&:hover {
a {
text-decoration: underline;
}
}
a {
cursor: pointer;
margin-right: $gp / 2;
color: var(--game-card-text-color);
}
}
.game-drag-handle {
@include drag-cursor;
position: absolute;
color: #e5e5e5;
right: $gp / 3;
top: $gp / 3;
&:hover {
color: #a5a2a2;
}
}
.game-tag {
margin-bottom: $gp / 3;
}
img {
width: 50px;
height: auto;
display: flex;
align-self: center;
cursor: pointer;
}
.note {
color: var(--note-color);
&.card-placeholder {
background: #e5e5e5;
outline: 1px dashed #a5a2a2;
opacity: 0.6;
.game-card-options {
display: none;
}
}
.game-info {
padding: $gp / 2 $gp;
width: 100%;
display: flex;
flex-direction: column;
.game-tags {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: $gp / 4;
}
i.tags {
position: absolute;
bottom: $gp * 1.5;
right: $gp / 4;
}
.game-rating, a {
display: inline-flex;
font-weight: bold;
}
&:hover {
a {
text-decoration: underline;
}
}
a {
cursor: pointer;
margin-right: $gp / 2;
color: var(--game-card-text-color);
}
}
.game-drag-handle {
@include drag-cursor;
position: absolute;
color: #e5e5e5;
right: $gp / 3;
top: $gp / 3;
&:hover {
color: #a5a2a2;
}
}
.game-tag {
margin-bottom: $gp / 3;
}
}
.note {
color: var(--note-color);
}
</style>

View file

@ -1,20 +1,23 @@
<template lang="html">
<div class="game-detail-placeholder">
<div class="game-hero" />
<div class="game-detail-placeholder">
<div class="game-hero" />
<div class="game-detail-container">
<div class="game-detail">
<img :src="coverUrl" :alt="gamePreviewData.name" class="game-cover">
<div class="game-detail-container">
<div class="game-detail">
<img
:src="coverUrl"
:alt="gamePreviewData.name"
class="game-cover">
<div>
<h2>{{ gamePreviewData.name }}</h2>
<game-rating :rating="gamePreviewData.rating" />
<placeholder :lines="3" />
</div>
</div>
<div>
<h2>{{ gamePreviewData.name }}</h2>
<game-rating :rating="gamePreviewData.rating" />
<placeholder :lines="3" />
</div>
</div>
</div>
</div>
</template>
<script>
@ -29,7 +32,10 @@ export default {
},
props: {
id: [Number, String],
id: {
type: [Number, String],
default: null,
},
},
computed: {
@ -51,16 +57,16 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-detail-placeholder {
.game-detail-placeholder {
display: flex;
justify-content: center;
background: var(--modal-background);
min-height: calc(100vh - #{$navHeight});
}
}
.game-hero {
.game-hero {
position: absolute;
width: 100%;
left: 0;
@ -68,26 +74,26 @@ export default {
z-index: 1;
@media($small) {
display: none;
display: none;
}
}
}
.game-cover {
.game-cover {
border: 5px solid #a5a2a2;
background-size: contain;
width: 100%;
height: auto;
@media($small) {
border: 3px solid #a5a2a2;
height: auto;
width: auto;
min-width: auto;
max-width: 100%;
border: 3px solid #a5a2a2;
height: auto;
width: auto;
min-width: auto;
max-width: 100%;
}
}
}
.game-detail-container {
.game-detail-container {
-webkit-box-shadow: 0 0 2px 0 #a5a2a2;
box-shadow: 0 0 2px 0 #a5a2a2;
width: $container-width;
@ -98,46 +104,46 @@ export default {
border-radius: $border-radius;
@media($small) {
margin: 0;
padding-top: $gp * 3;
border-radius: 0;
margin: 0;
padding-top: $gp * 3;
border-radius: 0;
}
}
}
.game-detail {
.game-detail {
display: grid;
grid-template-columns: 180px auto;
grid-gap: $gp * 2;
margin: 0 $gp;
@media($small) {
grid-template-columns: auto;
grid-template-columns: auto;
}
}
}
.game-cover {
.game-cover {
--placeholder-image-width: 175px;
--placeholder-image-height: 220px;
@media($small) {
--placeholder-image-width: 240px;
--placeholder-image-height: 300px;
width: 240px;
margin: 0 auto;
--placeholder-image-width: 240px;
--placeholder-image-height: 300px;
width: 240px;
margin: 0 auto;
}
}
}
.game-title {
.game-title {
--placeholder-text-height: 30px;
width: 50%;
@media($small) {
width: 50%;
margin: 0 auto;
width: 50%;
margin: 0 auto;
}
}
}
.game-rating {
.game-rating {
margin-bottom: $gp;
}
}
</style>

View file

@ -1,43 +1,45 @@
<template lang="html">
<div v-if="game" class="review-box">
<div class="info">
<!-- TODO: get icons for everything -->
<section v-if="playerPerspectives">
<strong>{{ $t('gameDetail.perspective') }}</strong>
{{ playerPerspectives }}
</section>
<div
v-if="game"
class="review-box">
<div class="info">
<!-- TODO: get icons for everything -->
<section v-if="playerPerspectives">
<strong>{{ $t('gameDetail.perspective') }}</strong>
{{ playerPerspectives }}
</section>
<section v-if="timeToBeat">
<strong>{{ $t('gameDetail.timeToBeat') }}</strong>
{{ timeToBeat }}
</section>
<section v-if="timeToBeat">
<strong>{{ $t('gameDetail.timeToBeat') }}</strong>
{{ timeToBeat }}
</section>
<section v-if="gameModes">
<strong>{{ $t('gameDetail.gameModes') }}</strong>
{{ gameModes }}
</section>
<section v-if="gameModes">
<strong>{{ $t('gameDetail.gameModes') }}</strong>
{{ gameModes }}
</section>
<section v-if="genres">
<strong>{{ $t('gameDetail.genres') }}</strong>
{{ genres }}
</section>
<section v-if="genres">
<strong>{{ $t('gameDetail.genres') }}</strong>
{{ genres }}
</section>
<section v-if="developers">
<strong>{{ $t('gameDetail.developers') }}</strong>
{{ developers }}
</section>
<section v-if="developers">
<strong>{{ $t('gameDetail.developers') }}</strong>
{{ developers }}
</section>
<section v-if="publishers">
<strong>{{ $t('gameDetail.publishers') }}</strong>
{{ publishers }}
</section>
<section v-if="publishers">
<strong>{{ $t('gameDetail.publishers') }}</strong>
{{ publishers }}
</section>
<section v-if="releaseDate">
<strong>{{ $t('gameDetail.releaseDate') }}</strong>
{{ moment.unix(releaseDate).format('ll') }}
</section>
</div>
<section v-if="releaseDate">
<strong>{{ $t('gameDetail.releaseDate') }}</strong>
{{ moment.unix(releaseDate).format('ll') }}
</section>
</div>
</div>
</template>
<script>
@ -75,9 +77,9 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.review-box {
.review-box {
text-align: left;
display: grid;
margin: 0 auto;
@ -86,11 +88,11 @@ export default {
align-items: center;
strong {
color: var(--accent-color);
color: var(--accent-color);
}
section {
margin-bottom: $gp / 3;
margin-bottom: $gp / 3;
}
}
}
</style>

View file

@ -1,28 +1,30 @@
<template lang="html">
<div class="game-links" v-if="hasWebsites">
<h4>Links</h4>
<div class="links">
<a
v-for="{ category, url } in game.websites"
:key="category"
:href="url"
:class="linkTypes[category].name"
target="_blank"
>
<template v-if="linkTypes[category].icon">
<i
:class="linkTypes[category].icon"
:title="$t(`gameDetail.links.${linkTypes[category].name}`)"
/>
</template>
<div
v-if="hasWebsites"
class="game-links">
<h4>Links</h4>
<div class="links">
<a
v-for="{ category, url } in game.websites"
:key="category"
:href="url"
:class="linkTypes[category].name"
target="_blank"
>
<template v-if="linkTypes[category].icon">
<i
:class="linkTypes[category].icon"
:title="$t(`gameDetail.links.${linkTypes[category].name}`)"
/>
</template>
<template v-else>
<i class="fas fa-link"/>
<small>{{ $t(`gameDetail.links.${linkTypes[category].name}`) }}</small>
</template>
</a>
</div>
<template v-else>
<i class="fas fa-link"/>
<small>{{ $t(`gameDetail.links.${linkTypes[category].name}`) }}</small>
</template>
</a>
</div>
</div>
</template>
<script>
@ -73,25 +75,25 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-links {
border-top: 1px solid #e5e5e5;
margin-top: $gp;
padding-top: $gp;
}
.links {
display: grid;
grid-template-columns: repeat(auto-fill, 30px);
margin-top: $gp / 2;
a {
height: 40px;
font-size: 20px;
display: flex;
flex-direction: column;
text-decoration: none;
}
.game-links {
border-top: 1px solid #e5e5e5;
margin-top: $gp;
padding-top: $gp;
}
.links {
display: grid;
grid-template-columns: repeat(auto-fill, 30px);
margin-top: $gp / 2;
a {
height: 40px;
font-size: 20px;
display: flex;
flex-direction: column;
text-decoration: none;
}
}
</style>

View file

@ -1,17 +1,29 @@
<template lang="html">
<div :class="['game-rating', { small }]">
<span v-for="n in 5" :key="`star-${n}`">
<i class="fas fa-star" v-if="(roundedRating - n) + 1 >= 1" />
<i class="fas fa-star-half" v-if="(roundedRating - n) + 1 === .5" />
</span>
</div>
<div :class="['game-rating', { small }]">
<span
v-for="n in 5"
:key="`star-${n}`">
<i
v-if="(roundedRating - n) + 1 >= 1"
class="fas fa-star" />
<i
v-if="(roundedRating - n) + 1 === .5"
class="fas fa-star-half" />
</span>
</div>
</template>
<script>
export default {
props: {
rating: Number,
small: Boolean,
rating: {
type: Number,
default: 5,
},
small: {
type: Boolean,
default: false,
},
},
computed: {
@ -26,12 +38,12 @@ export default {
@import "~styles/styles";
.game-rating {
color: var(--rating-star-color);
font-size: 20px;
margin: $gp / 4 0;
color: var(--rating-star-color);
font-size: 20px;
margin: $gp / 4 0;
&.small {
font-size: 12px;
}
&.small {
font-size: 12px;
}
}
</style>

View file

@ -1,18 +1,20 @@
<template lang="html">
<section class="game-screenshots" v-if="game.screenshots">
<vue-gallery
:images="screenshots"
:index="index"
@close="close"
/>
<section
v-if="game.screenshots"
class="game-screenshots">
<vue-gallery
:images="screenshots"
:index="index"
@close="close"
/>
<img
v-for="(image, index) in thumbnails"
:src="image"
:key="image"
@click="openGallery(index)"
/>
</section>
<img
v-for="(image, index) in thumbnails"
:src="image"
:key="image"
@click="openGallery(index)"
>
</section>
</template>
<script>
@ -35,7 +37,7 @@ export default {
screenshots() {
// eslint-disable-next-line
return this.game.screenshots
return this.game.screenshots
? this.game.screenshots.map((image, index) => {
const href = `https://images.igdb.com/igdb/image/upload/t_screenshot_huge/${image.image_id}.jpg`;
@ -55,7 +57,7 @@ export default {
thumbnails() {
// eslint-disable-next-line
return this.game.screenshots ? this.game.screenshots.map((image) => {
return this.game.screenshots ? this.game.screenshots.map((image) => {
return `https://images.igdb.com/igdb/image/upload/t_thumb/${image.image_id}.jpg`;
}) : null;
},
@ -76,78 +78,78 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-screenshots {
padding: $gp / 2 $gp;
text-align: center;
margin: $gp 0;
.game-screenshots {
padding: $gp / 2 $gp;
text-align: center;
margin: $gp 0;
h3 {
margin: 0 0 $gp / 2;
}
img {
margin: 0 $gp / 4 $gp / 4;
cursor: pointer;
border-radius: $border-radius;
}
h3 {
margin: 0 0 $gp / 2;
}
img {
margin: 0 $gp / 4 $gp / 4;
cursor: pointer;
border-radius: $border-radius;
}
}
</style>
<style lang="scss" rel="stylesheet/scss">
@import "~styles/styles";
@import "~styles/styles";
.blueimp-gallery {
.blueimp-gallery {
.title {
font-size: 14px !important;
max-width: 50vw;
text-align: left;
}
.prev,
.next,
.close {
visibility: hidden;
&:before {
visibility: visible;
}
}
.prev, .next {
background: none;
border: 0;
&:before {
font-size: 30px;
font-family: "Font Awesome 5 Free";
font-weight: 900;
}
}
.prev:before {
content: "\f359";
}
.next:before {
content: "\f35a";
}
.close {
&:before {
font-size: 12px;
font-weight: 900;
font-family: "Font Awesome 5 Free";
content: "\f00d";
border: 1px solid #a5a2a2;
border-radius: $border-radius;
position: fixed;
right: $gp / 2;
top: $gp / 2;
width: 30px;
}
}
.title {
font-size: 14px !important;
max-width: 50vw;
text-align: left;
}
.prev,
.next,
.close {
visibility: hidden;
&:before {
visibility: visible;
}
}
.prev, .next {
background: none;
border: 0;
&:before {
font-size: 30px;
font-family: "Font Awesome 5 Free";
font-weight: 900;
}
}
.prev:before {
content: "\f359";
}
.next:before {
content: "\f35a";
}
.close {
&:before {
font-size: 12px;
font-weight: 900;
font-family: "Font Awesome 5 Free";
content: "\f00d";
border: 1px solid #a5a2a2;
border-radius: $border-radius;
position: fixed;
right: $gp / 2;
top: $gp / 2;
width: 30px;
}
}
}
</style>

View file

@ -1,27 +1,31 @@
<template lang="html">
<div class="game-videos" v-if="game.videos">
<div class="video">
<iframe
:src="`https://www.youtube.com/embed/${youtubeVideoId}?rel=0&autohide=1`"
frameborder="0"
allow="autoplay; encrypted-media"
allowfullscreen
/>
</div>
<div class="video-thumbnails">
<a
v-for="{ video_id } in game.videos"
:key="video_id"
class="thumbnail"
@click="selectedVideo = video_id"
>
<img :src="`https://img.youtube.com/vi/${video_id}/default.jpg`" />
<i class="fab fa-youtube fa-2x" v-if="youtubeVideoId !== video_id" />
</a>
</div>
<div
v-if="game.videos"
class="game-videos">
<div class="video">
<iframe
:src="`https://www.youtube.com/embed/${youtubeVideoId}?rel=0&autohide=1`"
frameborder="0"
allow="autoplay; encrypted-media"
allowfullscreen
/>
</div>
<div class="video-thumbnails">
<a
v-for="{ video_id } in game.videos"
:key="video_id"
class="thumbnail"
@click="selectedVideo = video_id"
>
<img :src="`https://img.youtube.com/vi/${video_id}/default.jpg`" >
<i
v-if="youtubeVideoId !== video_id"
class="fab fa-youtube fa-2x" />
</a>
</div>
</div>
</template>
<script>
@ -45,58 +49,58 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-videos {
text-align: center;
.game-videos {
text-align: center;
.video {
position: relative;
padding-bottom: 56.25%;
margin: $gp;
height: 56.25%;
.video {
position: relative;
padding-bottom: 56.25%;
margin: $gp;
height: 56.25%;
iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100% !important;
}
}
.video-thumbnails {
display: grid;
grid-template-columns: repeat(auto-fill, 100px);
padding: 0 $gp;
grid-gap: $gp;
@media($small) {
grid-template-columns: repeat(auto-fill, 70px);
justify-content: center;
}
.thumbnail {
cursor: pointer;
position: relative;
img {
width: 100%;
height: auto;
}
i {
position: absolute;
color: #fff;
opacity: 0.7;
left: 34px;
top: 23px;
@media($small) {
display: none;
}
}
}
}
iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100% !important;
}
}
.video-thumbnails {
display: grid;
grid-template-columns: repeat(auto-fill, 100px);
padding: 0 $gp;
grid-gap: $gp;
@media($small) {
grid-template-columns: repeat(auto-fill, 70px);
justify-content: center;
}
.thumbnail {
cursor: pointer;
position: relative;
img {
width: 100%;
height: auto;
}
i {
position: absolute;
color: #fff;
opacity: 0.7;
left: 34px;
top: 23px;
@media($small) {
display: none;
}
}
}
}
}
</style>

View file

@ -1,70 +1,74 @@
<template lang="html">
<div class="game-notes">
<h4>{{ $t('notes.notes') }}</h4>
<div class="game-notes">
<h4>{{ $t('notes.notes') }}</h4>
<div
class="note"
v-if="hasNote && !editingNote"
@click="editNote"
>
<i class="fas fa-sticky-note corner-icon" />
<div
v-if="hasNote && !editingNote"
class="note"
@click="editNote"
>
<i class="fas fa-sticky-note corner-icon" />
<p v-html="formattedNoteText" />
</div>
<div class="note" v-if="editingNote">
<i class="fas fa-sticky-note corner-icon" />
<div
class="read"
v-if="localNote && !editingNote"
@click="editNote"
>
<p>{{ localNote.text }}</p>
</div>
<div class="edit" v-if="editingNote">
<textarea
v-model="localNote.text"
class="game-note-field"
maxlength="1024"
/>
<div class="note-actions">
<button
class="small secondary"
@click="reset"
>
{{ $t('global.cancel') }}
</button>
<button
class="small danger"
@click="deleteNote"
>
<i class="far fa-trash-alt" />
</button>
<button
class="small primary"
@click="saveNote"
:disabled="!localNote"
>
{{ $t('global.save') }}
</button>
</div>
</div>
</div>
<button
class="primary"
@click="addNote"
v-if="!hasNote && !editingNote"
>
<i class="fas fa-sticky-note" />
{{ $t('notes.addNote') }}
</button>
<p v-html="formattedNoteText" />
</div>
<div
v-if="editingNote"
class="note">
<i class="fas fa-sticky-note corner-icon" />
<div
v-if="localNote && !editingNote"
class="read"
@click="editNote"
>
<p>{{ localNote.text }}</p>
</div>
<div
v-if="editingNote"
class="edit">
<textarea
v-model="localNote.text"
class="game-note-field"
maxlength="1024"
/>
<div class="note-actions">
<button
class="small secondary"
@click="reset"
>
{{ $t('global.cancel') }}
</button>
<button
class="small danger"
@click="deleteNote"
>
<i class="far fa-trash-alt" />
</button>
<button
:disabled="!localNote"
class="small primary"
@click="saveNote"
>
{{ $t('global.save') }}
</button>
</div>
</div>
</div>
<button
v-if="!hasNote && !editingNote"
class="primary"
@click="addNote"
>
<i class="fas fa-sticky-note" />
{{ $t('notes.addNote') }}
</button>
</div>
</template>
<script>
@ -146,66 +150,66 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-notes {
margin-top: $gp;
.game-notes {
margin-top: $gp;
}
h4 {
padding-bottom: $gp / 2;
}
.note {
cursor: pointer;
border: 2px solid var(--note-color);
border-radius: $border-radius;
position: relative;
overflow: hidden;
min-width: 200px;
max-width: 100%;
display: inline-flex;
flex-direction: column;
padding: $gp / 2 $gp $gp / 2 $gp * 2;
@media($small) {
margin: $gp auto;
}
h4 {
padding-bottom: $gp / 2;
.corner-icon {
background: var(--note-color);
color: #fff;
padding: $gp / 4;
position: absolute;
border-bottom-right-radius: $border-radius;
top: 0;
left: 0;
}
.note {
cursor: pointer;
border: 2px solid var(--note-color);
border-radius: $border-radius;
position: relative;
overflow: hidden;
min-width: 200px;
max-width: 100%;
display: inline-flex;
flex-direction: column;
padding: $gp / 2 $gp $gp / 2 $gp * 2;
@media($small) {
margin: $gp auto;
}
.corner-icon {
background: var(--note-color);
color: #fff;
padding: $gp / 4;
position: absolute;
border-bottom-right-radius: $border-radius;
top: 0;
left: 0;
}
p {
font-size: 12px;
margin: 0;
display: inline-flex;
}
p {
font-size: 12px;
margin: 0;
display: inline-flex;
}
}
.game-note-field {
resize: vertical;
border-radius: $border-radius;
border: 1px solid #a5a2a2;
width: 100%;
min-height: 60px;
max-height: 300px;
}
.note-actions {
display: flex;
align-items: center;
grid-gap: $gp / 2;
margin-top: $gp / 4;
.success {
margin-left: auto;
}
.game-note-field {
resize: vertical;
border-radius: $border-radius;
border: 1px solid #a5a2a2;
width: 100%;
min-height: 60px;
max-height: 300px;
}
.note-actions {
display: flex;
align-items: center;
grid-gap: $gp / 2;
margin-top: $gp / 4;
.success {
margin-left: auto;
}
}
</style>

View file

@ -1,14 +1,20 @@
<template lang="html">
<a :href="href" class="igdb-credit" target="_blank">
<img :src="`/static/img/igdb-logo.svg`" />
<strong>{{ $t('igdbCredit.poweredByIgdb') }}</strong>
</a>
<a
:href="href"
class="igdb-credit"
target="_blank">
<img :src="`/static/img/igdb-logo.svg`" >
<strong>{{ $t('igdbCredit.poweredByIgdb') }}</strong>
</a>
</template>
<script>
export default {
props: {
linkable: Boolean,
linkable: {
type: Boolean,
default: false,
},
},
computed: {
@ -22,17 +28,17 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.igdb-credit {
color: #3eb87a;
display: flex;
align-items: center;
text-decoration: none;
font-size: 11px;
.igdb-credit {
color: #3eb87a;
display: flex;
align-items: center;
text-decoration: none;
font-size: 11px;
img {
height: 40px;
}
}
img {
height: 40px;
}
}
</style>

View file

@ -1,55 +1,55 @@
<!-- eslint-disable max-len -->
<template lang="html">
<div :class="['list', viewClass, { unique: unique && view !== 'grid' }]">
<header>
<span>
<i
class="fas fa-magic"
title="List sorted automatically"
v-if="autoSortEnabled"
/>
{{ list[listIndex].name }} ({{ gameList.length }})
</span>
<div :class="['list', viewClass, { unique: unique && view !== 'grid' }]">
<header>
<span>
<i
v-if="autoSortEnabled"
class="fas fa-magic"
title="List sorted automatically"
/>
{{ list[listIndex].name }} ({{ gameList.length }})
</span>
<list-settings :list-index="listIndex" />
</header>
<list-settings :list-index="listIndex" />
</header>
<div
:class="`game-grid game-grid-${listIndex}`"
v-if="view === 'grid'"
>
<component
v-for="game in gameList"
:is="gameCardComponent"
:key="`grid-${game}`"
:id="game"
:game-id="game"
:list-id="listIndex"
/>
</div>
<draggable
v-else
:class="['games', { 'empty': isEmpty }]"
:list="gameList"
:id="listIndex"
:move="validateMove"
v-bind="gameDraggableOptions"
@end="end"
@start="start"
>
<component
v-for="game in sortedGames"
:is="gameCardComponent"
:key="`grid-${game}`"
:id="game"
:game-id="game"
:list-id="listIndex"
/>
</draggable>
<add-game :list-id="listIndex" />
<div
v-if="view === 'grid'"
:class="`game-grid game-grid-${listIndex}`"
>
<component
v-for="game in gameList"
:is="gameCardComponent"
:key="`grid-${game}`"
:id="game"
:game-id="game"
:list-id="listIndex"
/>
</div>
<draggable
v-else
:class="['games', { 'empty': isEmpty }]"
:list="gameList"
:id="listIndex"
:move="validateMove"
v-bind="gameDraggableOptions"
@end="end"
@start="start"
>
<component
v-for="game in sortedGames"
:is="gameCardComponent"
:key="`grid-${game}`"
:id="game"
:game-id="game"
:list-id="listIndex"
/>
</draggable>
<add-game :list-id="listIndex" />
</div>
</template>
<script>
@ -77,9 +77,18 @@ export default {
},
props: {
name: String,
gameList: [Object, Array],
listIndex: [String, Number],
name: {
type: String,
default: '',
},
gameList: {
type: Object,
default: () => {},
},
listIndex: {
type: Number,
default: null,
},
},
data() {
@ -118,42 +127,42 @@ export default {
const { gameList } = this;
switch (sortOrder) {
case 'sortByCustom':
return gameList;
case 'sortByRating':
return gameList.sort((a, b) => {
const gameA = this.games[a] && this.games[a].rating
? this.games[a].rating
: 0;
case 'sortByCustom':
return gameList;
case 'sortByRating':
return gameList.sort((a, b) => {
const gameA = this.games[a] && this.games[a].rating
? this.games[a].rating
: 0;
const gameB = this.games[b] && this.games[b].rating
? this.games[b].rating
: 0;
const gameB = this.games[b] && this.games[b].rating
? this.games[b].rating
: 0;
if (gameA > gameB) {
return -1;
}
if (gameA > gameB) {
return -1;
}
return gameA < gameB ? 1 : 0;
});
case 'sortByName':
return gameList.sort((a, b) => {
const gameA = this.games[a] && this.games[a].name
? this.games[a].name.toUpperCase()
: '';
return gameA < gameB ? 1 : 0;
});
case 'sortByName':
return gameList.sort((a, b) => {
const gameA = this.games[a] && this.games[a].name
? this.games[a].name.toUpperCase()
: '';
const gameB = this.games[b] && this.games[b].name
? this.games[b].name.toUpperCase()
: '';
const gameB = this.games[b] && this.games[b].name
? this.games[b].name.toUpperCase()
: '';
if (gameA < gameB) {
return -1;
}
if (gameA < gameB) {
return -1;
}
return gameA > gameB ? 1 : 0;
});
default:
return gameList;
return gameA > gameB ? 1 : 0;
});
default:
return gameList;
}
},
@ -215,7 +224,7 @@ export default {
if (this.view === 'grid') {
this.$nextTick(() => {
// eslint-disable-next-line
this.masonry = new Masonry(`.game-grid-${this.listIndex}`, {
this.masonry = new Masonry(`.game-grid-${this.listIndex}`, {
itemSelector: '.game-card',
gutter: 4,
});
@ -243,80 +252,80 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.list {
flex-shrink: 0;
cursor: default;
position: relative;
width: 300px;
background: var(--list-background);
border-radius: $border-radius;
overflow: hidden;
margin-right: $gp;
max-height: calc(100vh - 100px);
.list {
flex-shrink: 0;
cursor: default;
position: relative;
width: 300px;
background: var(--list-background);
border-radius: $border-radius;
overflow: hidden;
margin-right: $gp;
max-height: calc(100vh - 100px);
.games {
display: grid;
}
&.unique {
@media($small) {
width: calc(100vw - 80px);
}
}
header {
align-items: center;
background: var(--list-header-background);
color: var(--list-header-text-color);
display: flex;
height: $list-header-height;
justify-content: space-between;
padding-left: $gp / 2;
position: absolute;
border-radius: $border-radius;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
width: 100%;
}
.games {
height: 100%;
overflow: hidden;
max-height: calc(100vh - 150px);
min-height: 80px;
overflow-y: auto;
margin-top: $list-header-height;
padding: $gp / 2 $gp / 2 0;
width: 100%;
&.empty {
margin: ($list-header-height + $gp / 2) $gp / 2 $gp / 2;
padding: $gp;
width: auto;
display: flex;
align-items: center;
justify-content: center;
border: 1px dashed #a5a2a2;
}
}
.games {
display: grid;
}
.list-settings {
&.unique {
@media($small) {
width: calc(100vw - 80px);
}
}
header {
align-items: center;
background: var(--list-header-background);
color: var(--list-header-text-color);
display: flex;
height: $list-header-height;
justify-content: space-between;
padding-left: $gp / 2;
position: absolute;
border-radius: $border-radius;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
width: 100%;
}
.games {
height: 100%;
overflow: hidden;
max-height: calc(100vh - 150px);
min-height: 80px;
overflow-y: auto;
margin-top: $list-header-height;
padding: $gp / 2 $gp / 2 0;
width: 100%;
&.empty {
margin: ($list-header-height + $gp / 2) $gp / 2 $gp / 2;
padding: $gp;
}
.game-grid {
height: 100%;
width: auto;
display: flex;
align-items: center;
overflow: hidden;
max-height: calc(100vh - 154px);
min-height: 80px;
overflow-y: auto;
margin-top: $list-header-height;
padding: 4px;
width: 100%;
justify-content: center;
border: 1px dashed #a5a2a2;
}
}
}
.list-settings {
padding: $gp;
}
.game-grid {
height: 100%;
display: flex;
align-items: center;
overflow: hidden;
max-height: calc(100vh - 154px);
min-height: 80px;
overflow-y: auto;
margin-top: $list-header-height;
padding: 4px;
width: 100%;
}
</style>

View file

@ -1,32 +1,37 @@
<template lang="html">
<modal :title="title" ref="listAddModal" @open="open">
<button
class="small primary add-list-button"
:title="$t('list.add')"
>
<i class="fas fa-plus" />
</button>
<modal
ref="listAddModal"
:title="title"
@open="open">
<button
:title="$t('list.add')"
class="small primary add-list-button"
>
<i class="fas fa-plus" />
</button>
<form @submit.prevent="addList" slot="content">
<input
v-model.trim="listName"
type="text"
autofocus
required
:placeholder="$t('list.placeholder')"
/>
<form
slot="content"
@submit.prevent="addList">
<input
v-model.trim="listName"
:placeholder="$t('list.placeholder')"
type="text"
autofocus
required
>
<button
class="primary"
type="submit"
:disabled="disabled"
>
{{ buttonLabel }}
</button>
<button
:disabled="disabled"
class="primary"
type="submit"
>
{{ buttonLabel }}
</button>
<small v-if="isDuplicate">{{ $t('list.duplicateWarning') }}</small>
</form>
</modal>
<small v-if="isDuplicate">{{ $t('list.duplicateWarning') }}</small>
</form>
</modal>
</template>
<script>
@ -76,7 +81,7 @@ export default {
isEmptyBoard() {
const newList = this.gameLists && this.platform && !this.gameLists[this.platform.code];
const emptyList = this.gameLists[this.platform.code]
&& this.gameLists[this.platform.code].length === 0;
&& this.gameLists[this.platform.code].length === 0;
return newList || emptyList;
},
@ -123,14 +128,14 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "src/styles/styles.scss";
@import "src/styles/styles.scss";
.add-list-button {
margin-right: $gp;
}
.add-list-button {
margin-right: $gp;
}
small {
color: var(--warning-color);
margin: 0 $gp;
}
small {
color: var(--warning-color);
margin: 0 $gp;
}
</style>

View file

@ -1,119 +1,134 @@
<template lang="html">
<modal
:title="$t('list.preferences')"
v-if="activeList"
ref="listSettingsModal"
@open="open"
@close="close"
>
<button class="small">
<i class="fas fa-sliders-h" />
<modal
v-if="activeList"
ref="listSettingsModal"
:title="$t('list.preferences')"
@open="open"
@close="close"
>
<button class="small">
<i class="fas fa-sliders-h" />
</button>
<div
v-if="localList"
slot="content"
class="list-settings">
<section>
<h4>List name</h4>
<input
ref="input"
v-model="localList.name" >
</section>
<section>
<h4>{{ $t('list.view') }}</h4>
<div class="checkbox-group">
<span
v-for="(icon, view) in views"
:key="view">
<label
:for="view"
:class="{ active: view === localList.view }">
<i :class="icon" />
{{ $t(`list.views.${view}`) }}
</label>
<input
:id="view"
:value="view"
v-model="localList.view"
type="radio" >
</span>
</div>
</section>
<section v-if="hasMultipleGames">
<h4>{{ $t('list.sortList') }}</h4>
<div class="checkbox-group">
<span
v-for="(icon, sortOrder) in sortOrders"
:key="sortOrder">
<label
:for="sortOrder"
:class="{ active: sortOrder === localList.sortOrder }"
>
<i :class="icon" />
{{ $t(`list.${sortOrder}`) }}
</label>
<input
:id="sortOrder"
:value="sortOrder"
v-model="localList.sortOrder"
type="radio"
>
</span>
</div>
</section>
<footer>
<modal
v-if="localList && localList.games && localList.games.length"
ref="addList"
:message="warningMessage"
:action-text="$t('list.delete')"
title="Are you sure?"
action-button-class="danger"
@action="deleteList"
>
<button
:title="$t('list.delete')"
class="danger"
>
<i class="far fa-trash-alt" />
{{ $t('list.delete') }}
</button>
</modal>
<button
v-else
:title="$t('list.delete')"
class="danger"
@click="deleteList"
>
<i class="far fa-trash-alt" />
{{ $t('list.delete') }}
</button>
<div class="list-settings" slot="content" v-if="localList">
<section>
<h4>List name</h4>
<!-- <button
class="primary hollow"
:title="$t('list.moveLeft')"
:disabled="isFirst"
@click="moveList(listIndex, listIndex - 1)"
>
<i class="fas fa-arrow-left" />
<input v-model="localList.name" ref="input" />
</section>
{{ $t('list.moveLeft') }}
</button>
<section>
<h4>{{ $t('list.view') }}</h4>
<button
class="primary hollow"
:title="$t('list.moveRight')"
:disabled="isLast"
@click="moveList(listIndex, listIndex + 1)"
>
{{ $t('list.moveRight') }}
<i class="fas fa-arrow-right" />
</button> -->
<div class="checkbox-group">
<span v-for="(icon, view) in views" :key="view">
<label :for="view" :class="{ active: view === localList.view }">
<i :class="icon" />
{{ $t(`list.views.${view}`) }}
</label>
<input type="radio" :id="view" :value="view" v-model="localList.view" />
</span>
</div>
</section>
<section v-if="hasMultipleGames">
<h4>{{ $t('list.sortList') }}</h4>
<div class="checkbox-group">
<span v-for="(icon, sortOrder) in sortOrders" :key="sortOrder">
<label
:for="sortOrder"
:class="{ active: sortOrder === localList.sortOrder }"
>
<i :class="icon" />
{{ $t(`list.${sortOrder}`) }}
</label>
<input
type="radio"
:id="sortOrder"
:value="sortOrder"
v-model="localList.sortOrder"
/>
</span>
</div>
</section>
<footer>
<modal
v-if="localList && localList.games && localList.games.length"
ref="addList"
:message="warningMessage"
title="Are you sure?"
:action-text="$t('list.delete')"
action-button-class="danger"
@action="deleteList"
>
<button
class="danger"
:title="$t('list.delete')"
>
<i class="far fa-trash-alt" />
{{ $t('list.delete') }}
</button>
</modal>
<button
v-else
class="danger"
:title="$t('list.delete')"
@click="deleteList"
>
<i class="far fa-trash-alt" />
{{ $t('list.delete') }}
</button>
<!-- <button
class="primary hollow"
:title="$t('list.moveLeft')"
:disabled="isFirst"
@click="moveList(listIndex, listIndex - 1)"
>
<i class="fas fa-arrow-left" />
{{ $t('list.moveLeft') }}
</button>
<button
class="primary hollow"
:title="$t('list.moveRight')"
:disabled="isLast"
@click="moveList(listIndex, listIndex + 1)"
>
{{ $t('list.moveRight') }}
<i class="fas fa-arrow-right" />
</button> -->
<button
class="primary"
:title="$t('global.save')"
@click="save"
>
{{ $t('global.save') }}
</button>
</footer>
</div>
</modal>
<button
:title="$t('global.save')"
class="primary"
@click="save"
>
{{ $t('global.save') }}
</button>
</footer>
</div>
</modal>
</template>
<script>
@ -235,18 +250,18 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
section {
margin-bottom: $gp;
}
section {
margin-bottom: $gp;
}
h4 {
margin-bottom: $gp / 2;
}
h4 {
margin-bottom: $gp / 2;
}
footer {
display: flex;
justify-content: space-between;
}
footer {
display: flex;
justify-content: space-between;
}
</style>

View file

@ -1,50 +1,73 @@
<template lang="html">
<div>
<div @click="open">
<slot />
</div>
<div :class="['overlay', { show }]" @click="close">
<div :class="['modal-content', { large, fixed: !title }]" @click.stop>
<header>
<h2 v-if="title">{{ title }}</h2>
<button class="secondary small" @click="close">
<i class="fas fa-times" />
</button>
</header>
<main>
<span v-if="message">{{ message }}</span>
<slot name="content" v-else-if="show" />
<footer v-if="actionText">
<button
:class="actionButtonClass"
:disabled="actionDisabled"
@click="handleAction"
>
{{ actionText }}
</button>
</footer>
</main>
</div>
</div>
<div>
<div @click="open">
<slot />
</div>
<div
:class="['overlay', { show }]"
@click="close">
<div
:class="['modal-content', { large, fixed: !title }]"
@click.stop>
<header>
<h2 v-if="title">{{ title }}</h2>
<button
class="secondary small"
@click="close">
<i class="fas fa-times" />
</button>
</header>
<main>
<span v-if="message">{{ message }}</span>
<slot
v-else-if="show"
name="content" />
<footer v-if="actionText">
<button
:class="actionButtonClass"
:disabled="actionDisabled"
@click="handleAction"
>
{{ actionText }}
</button>
</footer>
</main>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
actionText: String,
title: String,
message: String,
actionText: {
type: String,
default: '',
},
title: {
type: String,
default: '',
},
message: {
type: String,
default: '',
},
actionButtonClass: {
type: String,
default: 'primary',
},
actionDisabled: Boolean,
large: Boolean,
actionDisabled: {
type: Boolean,
default: false,
},
large: {
type: Boolean,
default: false,
},
},
data() {
@ -85,93 +108,93 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.overlay {
background: rgba(0, 0, 0, 0.8);
cursor: pointer;
height: 100%;
left: 0;
margin: 0;
opacity: .1;
position: fixed;
top: 0;
transition: all 100ms linear;
visibility: hidden;
width: 100%;
z-index: 1;
.overlay {
background: rgba(0, 0, 0, 0.8);
cursor: pointer;
height: 100%;
left: 0;
margin: 0;
opacity: .1;
position: fixed;
top: 0;
transition: all 100ms linear;
visibility: hidden;
width: 100%;
z-index: 1;
&.show {
visibility: visible;
transition: all 100ms linear;
opacity: 1;
}
&.show {
visibility: visible;
transition: all 100ms linear;
opacity: 1;
}
}
.modal-content {
background: var(--modal-background);
color: var(--modal-text-color);
width: 500px;
height: auto;
max-height: calc(100% - #{$gp * 4});
overflow-y: auto;
margin: $gp * 2 auto $gp;
padding: 0;
border-radius: $border-radius;
cursor: default;
@media($small) {
border-radius: 0;
margin: 0;
width: 100%;
height: 100%;
max-height: 100%;
}
.modal-content {
background: var(--modal-background);
color: var(--modal-text-color);
width: 500px;
height: auto;
max-height: calc(100% - #{$gp * 4});
overflow-y: auto;
margin: $gp * 2 auto $gp;
padding: 0;
border-radius: $border-radius;
cursor: default;
@media($small) {
border-radius: 0;
margin: 0;
width: 100%;
height: 100%;
max-height: 100%;
}
&.large {
width: 780px;
max-width: 100%;
}
&.fixed {
@media($small) {
display: flex;
height: 100vh;
}
header {
position: fixed;
right: $gp;
button {
display: none;
@media($small) {
display: block;
}
}
}
}
&.large {
width: 780px;
max-width: 100%;
}
header {
&.fixed {
@media($small) {
display: flex;
padding: $gp;
z-index: 1;
align-items: center;
justify-content: space-between;
height: 100vh;
}
&.fixed {
position: fixed;
header {
position: fixed;
right: $gp;
button {
display: none;
@media($small) {
display: block;
}
}
}
}
}
main {
padding: 0 $gp $gp;
overflow-y: auto;
}
header {
display: flex;
padding: $gp;
z-index: 1;
align-items: center;
justify-content: space-between;
footer {
margin-top: $gp;
&.fixed {
position: fixed;
}
}
main {
padding: 0 $gp $gp;
overflow-y: auto;
}
footer {
margin-top: $gp;
}
</style>

View file

@ -1,17 +1,17 @@
<template lang="html">
<nav>
<router-link
tag="button"
class="logo"
:to="{ name: logoRoute }"
>
<img src='/static/gamebrary-logo.png' />
<nav>
<router-link
:to="{ name: logoRoute }"
tag="button"
class="logo"
>
<img src="/static/gamebrary-logo.png" >
{{ title }}
</router-link>
{{ title }}
</router-link>
<settings v-if="showSettings" />
</nav>
<settings v-if="showSettings" />
</nav>
</template>
<script>
@ -60,41 +60,40 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
nav {
user-select: none;
width: 100vw;
height: $navHeight;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 $gp;
color: var(--header-text-color);
@import "~styles/styles";
nav {
user-select: none;
width: 100vw;
height: $navHeight;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 $gp;
color: var(--header-text-color);
.logo {
height: $navHeight;
font-weight: bold;
display: flex;
align-items: center;
margin-left: -$gp;
text-transform: capitalize;
.logo {
height: $navHeight;
font-weight: bold;
display: flex;
align-items: center;
margin-left: -$gp;
text-transform: capitalize;
img {
height: 24px;
margin-right: $gp / 4;
}
}
img {
height: 24px;
margin-right: $gp / 4;
}
}
}
img.avatar {
width: 30px;
height: 30px;
border-radius: $border-radius;
img.avatar {
width: 30px;
height: 30px;
border-radius: $border-radius;
@media($small) {
width: 30px;
height: 30px;
}
@media($small) {
width: 30px;
height: 30px;
}
}
</style>

View file

@ -1,76 +1,89 @@
<template lang="html">
<div
v-if="image || lines"
:class="['placeholder', { 'has-image': image && lines > 0 }]"
>
<div
:class="['placeholder', { 'has-image': image && lines > 0 }]"
v-if="image || lines"
>
<div class="image" v-if="image" />
v-if="image"
class="image" />
<div class="text" v-if="lines">
<div
class="text-line"
v-for="n in lines"
:key="n"
/>
</div>
<div
v-if="lines"
class="text">
<div
v-for="n in lines"
:key="n"
class="text-line"
/>
</div>
</div>
</template>
<script>
export default {
props: {
image: Boolean,
large: Boolean,
lines: Number,
image: {
type: Boolean,
default: false,
},
large: {
type: Boolean,
default: false,
},
lines: {
type: Number,
default: null,
},
},
};
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.placeholder {
max-width: 100%;
.placeholder {
max-width: 100%;
&.has-image {
display: grid;
grid-template-columns: 80px auto;
grid-gap: $gp;
}
}
&.has-image {
display: grid;
grid-template-columns: 80px auto;
grid-gap: $gp;
}
}
// Animation
@keyframes placeholder{
0%{
background-position: -468px 0
}
100%{
background-position: 468px 0
}
}
// Animation
@keyframes placeholder{
0%{
background-position: -468px 0
}
100%{
background-position: 468px 0
}
}
.animated-background {
animation-duration: 1s;
animation-fill-mode: forwards;
animation-iteration-count: infinite;
animation-name: placeholder;
animation-timing-function: linear;
background: #e5e5e5;
background: linear-gradient(to right, #e5e5e5 8%, #fff 18%, #e5e5e5 33%);
background-size: 800px 104px;
height: 96px;
position: relative;
}
.animated-background {
animation-duration: 1s;
animation-fill-mode: forwards;
animation-iteration-count: infinite;
animation-name: placeholder;
animation-timing-function: linear;
background: #e5e5e5;
background: linear-gradient(to right, #e5e5e5 8%, #fff 18%, #e5e5e5 33%);
background-size: 800px 104px;
height: 96px;
position: relative;
}
.image {
width: var(--placeholder-image-width, 80px);
height: var(--placeholder-image-height, 120px);
@extend .animated-background;
}
.image {
width: var(--placeholder-image-width, 80px);
height: var(--placeholder-image-height, 120px);
@extend .animated-background;
}
.text-line {
width: var(--placeholder-text-width, 100%);
height: var(--placeholder-text-height, 12px);
margin-bottom: $gp / 2;
@extend .animated-background;
}
.text-line {
width: var(--placeholder-text-width, 100%);
height: var(--placeholder-text-height, 12px);
margin-bottom: $gp / 2;
@extend .animated-background;
}
</style>

View file

@ -1,23 +1,29 @@
<template>
<footer>
<small>
{{ $t('platforms.donateMessage') }}
<a href="https://www.paypal.me/RomanCervantes/5" target="_blank">
{{ $t('platforms.donating') }}
</a>
,
<a href="https://github.com/romancm/gamebrary/issues" target="_blank">
{{ $t('platforms.reportBugs') }}
</a>
{{$t('global.or')}}
<a href="https://goo.gl/forms/r0juBCsZaUtJ03qb2" target="_blank">
{{ $t('platforms.submitFeedback') }}
</a>
.
</small>
<footer>
<small>
{{ $t('platforms.donateMessage') }}
<a
href="https://www.paypal.me/RomanCervantes/5"
target="_blank">
{{ $t('platforms.donating') }}
</a>
,
<a
href="https://github.com/romancm/gamebrary/issues"
target="_blank">
{{ $t('platforms.reportBugs') }}
</a>
{{ $t('global.or') }}
<a
href="https://goo.gl/forms/r0juBCsZaUtJ03qb2"
target="_blank">
{{ $t('platforms.submitFeedback') }}
</a>
.
</small>
<igdb-credit />
</footer>
<igdb-credit />
</footer>
</template>
<script>
@ -31,13 +37,13 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
footer {
padding: $gp / 2 0;
justify-content: center;
display: flex;
align-items: center;
color: var(--header-text-color);
}
footer {
padding: $gp / 2 0;
justify-content: center;
display: flex;
align-items: center;
color: var(--header-text-color);
}
</style>

View file

@ -1,19 +1,21 @@
<template lang="html">
<div
@click="changePlatform"
:class="['platform', { clickable, square } ]"
:style="style"
<div
:class="['platform', { clickable, square } ]"
:style="style"
@click="changePlatform"
>
<img
:src="`/static/img/platforms/logos/${platform.code}.svg`"
:alt="platform.name"
>
<img
:src='`/static/img/platforms/logos/${platform.code}.svg`'
:alt="platform.name"
/>
<span v-if="showCount(platform)" class="game-count">
<i class="fas fa-gamepad" />
{{ getGameCount(platform.code) }}
</span>
</div>
<span
v-if="showCount(platform)"
class="game-count">
<i class="fas fa-gamepad" />
{{ getGameCount(platform.code) }}
</span>
</div>
</template>
<script>
@ -21,9 +23,18 @@ import { mapState } from 'vuex';
export default {
props: {
platform: Object,
square: Boolean,
clickable: Boolean,
platform: {
type: Object,
default: () => {},
},
square: {
type: Boolean,
default: false,
},
clickable: {
type: Boolean,
default: false,
},
},
computed: {
@ -52,8 +63,8 @@ export default {
ownedPlatform(platformCode) {
const isOwned = this.gameLists
&& this.gameLists[platformCode]
&& Object.keys(this.gameLists[platformCode]).length;
&& this.gameLists[platformCode]
&& Object.keys(this.gameLists[platformCode]).length;
return isOwned && this.clickable;
},
@ -68,52 +79,53 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.platform {
padding: $gp;
display: flex;
margin-bottom: $gp;
align-items: center;
justify-content: center;
border-radius: $border-radius;
overflow: hidden;
width: 180px;
height: 100px;
.platform {
padding: $gp;
display: flex;
margin-bottom: $gp;
align-items: center;
justify-content: center;
border-radius: $border-radius;
overflow: hidden;
width: 180px;
height: 100px;
&.clickable {
cursor: pointer;
}
@media($small) {
padding: $gp / 2;
width: 100%;
height: 60px;
}
img {
width: 80%;
height: auto;
@media($small) {
width: auto;
height: 70px;
max-height: 60%;
}
}
.game-count {
padding-top: $gp / 3;
font-weight: bold;
font-size: 12px;
background: var(--primary-background);
position: absolute;
top: 0;
right: 0;
padding: 0 $gp / 4;
color: var(--primary-text-color);
font-size: 10px;
border-bottom-left-radius: $border-radius;
}
&.clickable {
cursor: pointer;
}
@media($small) {
padding: $gp / 2;
width: 100%;
height: 60px;
}
img {
width: 80%;
height: auto;
@media($small) {
width: auto;
height: 70px;
max-height: 60%;
}
}
.game-count {
padding-top: $gp / 3;
font-weight: bold;
font-size: 12px;
background: var(--primary-background);
position: absolute;
top: 0;
right: 0;
padding: 0 $gp / 4;
color: var(--primary-text-color);
font-size: 10px;
border-bottom-left-radius: $border-radius;
}
}
</style>

View file

@ -1,32 +1,32 @@
<template lang="html">
<div class="releases">
<template v-if="loaded">
<div
class="release"
v-for="notification in releases"
:key="notification.id"
>
<div class="release-info">
<a class="link primary small hollow">
{{ notification.tag_name }}
</a>
<div class="releases">
<template v-if="loaded">
<div
v-for="notification in releases"
:key="notification.id"
class="release"
>
<div class="release-info">
<a class="link primary small hollow">
{{ notification.tag_name }}
</a>
<div>
<h3>{{ notification.name }}</h3>
<small>
{{ $t('releases.published', {
date: formattedDate(notification.published_at)
})}}
</small>
</div>
</div>
<div>
<h3>{{ notification.name }}</h3>
<small>
{{ $t('releases.published', {
date: formattedDate(notification.published_at)
}) }}
</small>
</div>
</div>
<vue-markdown :source="notification.body" />
</div>
</template>
<vue-markdown :source="notification.body" />
</div>
</template>
<releases-placeholder v-else />
</div>
<releases-placeholder v-else />
</div>
</template>
<script>
@ -74,30 +74,30 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.release {
margin-bottom: $gp;
border-bottom: 1px solid #e5e5e5;
font-size: 12px;
padding: $gp 0;
.release {
margin-bottom: $gp;
border-bottom: 1px solid #e5e5e5;
font-size: 12px;
padding: $gp 0;
.release-info {
display: grid;
grid-gap: $gp / 2;
grid-template-columns: 50px auto;
.release-info {
display: grid;
grid-gap: $gp / 2;
grid-template-columns: 50px auto;
a {
display: flex;
align-items: center;
justify-content: center;
}
}
a {
display: flex;
align-items: center;
justify-content: center;
}
}
}
</style>
<style lang="scss" rel="stylesheet/scss">
.releases img {
max-width: 100%;
}
.releases img {
max-width: 100%;
}
</style>

View file

@ -1,15 +1,20 @@
<template lang="html">
<div class="releases-placeholder">
<div class="release" v-for="n in 3" :key="n">
<div class="release-info">
<button class="link info small hollow" disabled />
<div class="releases-placeholder">
<div
v-for="n in 3"
:key="n"
class="release">
<div class="release-info">
<button
class="link info small hollow"
disabled />
<placeholder :lines="2" />
</div>
<placeholder :lines="2" />
</div>
<placeholder :lines="3" />
</div>
<placeholder :lines="3" />
</div>
</div>
</template>
<script>
@ -23,17 +28,17 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.release {
border-bottom: 1px solid #e5e5e5;
margin: $gp 0;
padding-bottom: $gp / 2;
}
.release {
border-bottom: 1px solid #e5e5e5;
margin: $gp 0;
padding-bottom: $gp / 2;
}
.release-info {
display: grid;
grid-template-columns: 50px 30%;
grid-gap: $gp;
}
.release-info {
display: grid;
grid-template-columns: 50px 30%;
grid-gap: $gp;
}
</style>

View file

@ -2,13 +2,27 @@
<template lang="html">
<div>
<div class="github-buttons">
<github-button href="https://github.com/romancm/gamebrary/subscription" data-show-count="true" aria-label="Watch romancm/gamebrary on GitHub">Watch</github-button>
<github-button href="https://github.com/romancm/gamebrary" data-show-count="true" aria-label="Star romancm/gamebrary on GitHub">Star</github-button>
<github-button href="https://github.com/romancm/gamebrary/fork" data-show-count="true" aria-label="Fork romancm/gamebrary on GitHub">Fork</github-button>
<github-button href="https://github.com/romancm/gamebrary/issues" data-show-count="true" aria-label="Issue romancm/gamebrary on GitHub">Issue</github-button>
<github-button
href="https://github.com/romancm/gamebrary/subscription"
data-show-count="true"
aria-label="Watch romancm/gamebrary on GitHub">Watch</github-button>
<github-button
href="https://github.com/romancm/gamebrary"
data-show-count="true"
aria-label="Star romancm/gamebrary on GitHub">Star</github-button>
<github-button
href="https://github.com/romancm/gamebrary/fork"
data-show-count="true"
aria-label="Fork romancm/gamebrary on GitHub">Fork</github-button>
<github-button
href="https://github.com/romancm/gamebrary/issues"
data-show-count="true"
aria-label="Issue romancm/gamebrary on GitHub">Issue</github-button>
</div>
<vue-markdown :source="readme" v-if="readme" />
<vue-markdown
v-if="readme"
:source="readme" />
<footer>
<i class="far fa-copyright" /> {{ moment().format('YYYY') }} Gamebrary

View file

@ -1,59 +1,62 @@
<template lang="html">
<section>
<!-- <div class="setting">
<i class="fas fa-users" />
<h5>{{ $t('settings.public') }}</h5>
<section>
<!-- <div class="setting">
<i class="fas fa-users" />
<h5>{{ $t('settings.public') }}</h5>
<toggle-switch
id="public"
v-model="value[platform.code].public"
/>
</div> -->
<toggle-switch
id="public"
v-model="value[platform.code].public"
/>
</div> -->
<div class="setting">
<i class="fas fa-star-half-alt" />
<h5>{{ $t('settings.ratings') }}</h5>
<div class="setting">
<i class="fas fa-star-half-alt" />
<h5>{{ $t('settings.ratings') }}</h5>
<toggle-switch
id="gameRatings"
v-model="value[platform.code].hideGameRatings"
/>
</div>
<toggle-switch
id="gameRatings"
v-model="value[platform.code].hideGameRatings"
/>
</div>
<wallpaper-upload />
<wallpaper-upload />
<div class="setting">
<i class="fas fa-palette" />
<h5>Global theme</h5>
<div class="setting">
<i class="fas fa-palette" />
<h5>Global theme</h5>
<select v-model="value[platform.code].theme">
<option v-for="{ id, name } in themes" :key="id" :value="id">
{{ name }}
</option>
</select>
</div>
<select v-model="value[platform.code].theme">
<option
v-for="{ id, name } in themes"
:key="id"
:value="id">
{{ name }}
</option>
</select>
</div>
<div class="setting">
<i class="fas fa-exclamation-triangle" />
<h5>{{ $t('gameBoard.settings.dangerZone') }}</h5>
<div class="setting">
<i class="fas fa-exclamation-triangle" />
<h5>{{ $t('gameBoard.settings.dangerZone') }}</h5>
<modal
action-text="Delete forever"
action-button-class="danger"
:message="`Your ${platform.name} collection will be deleted forever.`"
:title="`Delete ${platform.name} collection`"
@action="deletePlatform"
>
<button
class="small warning"
:title="$t('list.delete')"
>
<i class="far fa-trash-alt" />
Delete {{ platform.name }} collection
</button>
</modal>
</div>
</section>
<modal
:message="`Your ${platform.name} collection will be deleted forever.`"
:title="`Delete ${platform.name} collection`"
action-text="Delete forever"
action-button-class="danger"
@action="deletePlatform"
>
<button
:title="$t('list.delete')"
class="small warning"
>
<i class="far fa-trash-alt" />
Delete {{ platform.name }} collection
</button>
</modal>
</div>
</section>
</template>
<script>
@ -71,7 +74,10 @@ export default {
},
props: {
value: Object,
value: {
type: Object,
default: () => {},
},
},
data() {

View file

@ -1,27 +1,29 @@
<template lang="html">
<section>
<h3>Platform page</h3>
<section>
<h3>Platform page</h3>
<div class="setting" v-if="hasLists">
<i class="fas fa-user-check" />
<h5>{{ $t('settings.ownedLists') }}</h5>
<div
v-if="hasLists"
class="setting">
<i class="fas fa-user-check" />
<h5>{{ $t('settings.ownedLists') }}</h5>
<toggle-switch
id="ownedListsOnly"
v-model="value.ownedListsOnly"
/>
</div>
<toggle-switch
id="ownedListsOnly"
v-model="value.ownedListsOnly"
/>
</div>
<div class="setting">
<i class="fas fa-sort-alpha-down" />
<h5>{{ $t('settings.sortPlatforms') }}</h5>
<div class="setting">
<i class="fas fa-sort-alpha-down" />
<h5>{{ $t('settings.sortPlatforms') }}</h5>
<toggle-switch
id="sortListsAlphabetically"
v-model="value.sortListsAlphabetically"
/>
</div>
</section>
<toggle-switch
id="sortListsAlphabetically"
v-model="value.sortListsAlphabetically"
/>
</div>
</section>
</template>
<script>

View file

@ -1,32 +1,35 @@
<template lang="html">
<section>
<h3>General</h3>
<section>
<h3>General</h3>
<div class="setting">
<i class="fas fa-language" />
<h5>{{ $t('settings.language') }}</h5>
<div class="setting">
<i class="fas fa-language" />
<h5>{{ $t('settings.language') }}</h5>
<select v-model="value.language">
<option value="en">🇺🇸 {{ $t('settings.languages.en') }}</option>
<option value="es">🇪🇸 {{ $t('settings.languages.es') }}</option>
<option value="pl">🇵🇱 {{ $t('settings.languages.pl') }}</option>
<option value="de">🇩🇪 {{ $t('settings.languages.de') }}</option>
<option value="ar">🇦🇪 {{ $t('settings.languages.ar') }}</option>
<option value="fr">🇫🇷 {{ $t('settings.languages.fr') }}</option>
<option value="ja">🇯🇵 {{ $t('settings.languages.ja') }}</option>
<option value="it">🇮🇹 {{ $t('settings.languages.it') }}</option>
<option value="eu">🏴 {{ $t('settings.languages.eu') }}</option>
<option value="cs">🇨🇿 {{ $t('settings.languages.cs') }}</option>
</select>
</div>
<small>Browser reload required</small>
</section>
<select v-model="value.language">
<option value="en">🇺🇸 {{ $t('settings.languages.en') }}</option>
<option value="es">🇪🇸 {{ $t('settings.languages.es') }}</option>
<option value="pl">🇵🇱 {{ $t('settings.languages.pl') }}</option>
<option value="de">🇩🇪 {{ $t('settings.languages.de') }}</option>
<option value="ar">🇦🇪 {{ $t('settings.languages.ar') }}</option>
<option value="fr">🇫🇷 {{ $t('settings.languages.fr') }}</option>
<option value="ja">🇯🇵 {{ $t('settings.languages.ja') }}</option>
<option value="it">🇮🇹 {{ $t('settings.languages.it') }}</option>
<option value="eu">🏴 {{ $t('settings.languages.eu') }}</option>
<option value="cs">🇨🇿 {{ $t('settings.languages.cs') }}</option>
</select>
</div>
<small>Browser reload required</small>
</section>
</template>
<script>
export default {
props: {
value: Object,
value: {
type: Object,
default: () => {},
},
},
computed: {
@ -38,14 +41,14 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.reloading {
width: 100%;
text-align: center;
}
.reloading {
width: 100%;
text-align: center;
}
select {
margin: 0;
}
select {
margin: 0;
}
</style>

View file

@ -1,70 +1,72 @@
<template lang="html">
<div>
<modal title="Manage tags">
<div class="setting">
<i class="fas fa-tags" />
<h5>Tags</h5>
<div>
<modal title="Manage tags">
<div class="setting">
<i class="fas fa-tags" />
<h5>Tags</h5>
<button class="primary">
Manage tags
</button>
</div>
<button class="primary">
Manage tags
</button>
</div>
<div slot="content">
<div class="tag-input">
<input
type="text"
v-model="tagName"
:placeholder="$t('tags.inputPlaceholder')"
/>
<div slot="content">
<div class="tag-input">
<input
v-model="tagName"
:placeholder="$t('tags.inputPlaceholder')"
type="text"
>
<input
type="color"
class="color-picker"
:value="tagHex"
@change="updateColor"
/>
</div>
<input
:value="tagHex"
type="color"
class="color-picker"
@change="updateColor"
>
</div>
<div class="tag-actions">
<button
class="secondary"
:disabled="!tagName"
@click="reset"
>
{{ $t('global.cancel') }}
</button>
<div class="tag-actions">
<button
:disabled="!tagName"
class="secondary"
@click="reset"
>
{{ $t('global.cancel') }}
</button>
<button
class="primary"
:disabled="isDuplicate && !editing"
@click="submit"
>
{{ actionLabel }}
</button>
</div>
<button
:disabled="isDuplicate && !editing"
class="primary"
@click="submit"
>
{{ actionLabel }}
</button>
</div>
<div class="tags" v-if="hasTags">
<tag
v-for="(tag, name) in localTags"
:key="name"
:label="name"
:hex="tag.hex"
@close="deleteTag(name)"
/>
<!-- @click.native="editTag(tag, name)" -->
</div>
</div>
<!-- <button
class="small warning"
:title="$t('list.delete')"
>
<i class="far fa-trash-alt" />
Delete {{ platform.name }} collection
</button> -->
<div
v-if="hasTags"
class="tags">
<tag
v-for="(tag, name) in localTags"
:key="name"
:label="name"
:hex="tag.hex"
@close="deleteTag(name)"
/>
<!-- @click.native="editTag(tag, name)" -->
</div>
</div>
<!-- <button
class="small warning"
:title="$t('list.delete')"
>
<i class="far fa-trash-alt" />
Delete {{ platform.name }} collection
</button> -->
</modal>
</div>
</modal>
</div>
</template>
<script>
@ -107,7 +109,7 @@ export default {
const b = parseInt(hexColor.substr(4, 2), 16);
// eslint-disable-next-line
const yiq = ((r*299)+(g*587)+(b*114))/1000;
const yiq = ((r*299)+(g*587)+(b*114))/1000;
return yiq >= 128 ? 'dark' : 'light';
},
@ -193,35 +195,35 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.tag-input {
display: grid;
grid-template-columns: 1fr 40px;
grid-gap: $gp;
margin-bottom: $gp;
}
.tag-input {
display: grid;
grid-template-columns: 1fr 40px;
grid-gap: $gp;
margin-bottom: $gp;
}
.tag-actions {
display: flex;
justify-content: space-between;
margin-bottom: $gp;
}
.tag-actions {
display: flex;
justify-content: space-between;
margin-bottom: $gp;
}
input {
margin: 0;
}
input {
margin: 0;
}
.color-picker {
-webkit-appearance: none;
width: 40px;
height: 40px;
padding: 0;
margin: 0;
border: 0;
}
.color-picker {
-webkit-appearance: none;
width: 40px;
height: 40px;
padding: 0;
margin: 0;
border: 0;
}
.tag {
margin: 0 $gp / 2 $gp / 2 0;
}
.tag {
margin: 0 $gp / 2 $gp / 2 0;
}
</style>

View file

@ -1,27 +1,36 @@
<template lang="html">
<span
v-if="label && hex"
:style="`background-color: ${hex}`"
:class="['tag', textColor, { readonly }]"
>
<i
v-if="!readonly"
class="fas fa-times close"
@click="close"
/>
<span
v-if="label && hex"
:style="`background-color: ${hex}`"
:class="['tag', textColor, { readonly }]"
>
<i
v-if="!readonly"
class="fas fa-times close"
@click="close"
/>
<span @click="action">
{{ label }}
</span>
<span @click="action">
{{ label }}
</span>
</span>
</template>
<script>
export default {
props: {
readonly: Boolean,
label: String,
hex: String,
readonly: {
type: Boolean,
default: false,
},
label: {
type: String,
default: '',
},
hex: {
type: String,
default: '',
},
},
computed: {
@ -33,7 +42,7 @@ export default {
const b = parseInt(hexColor.substr(4, 2), 16);
// eslint-disable-next-line
const yiq = ((r*299)+(g*587)+(b*114))/1000;
const yiq = ((r*299)+(g*587)+(b*114))/1000;
return yiq >= 128 ? 'dark' : 'light';
},
@ -52,52 +61,52 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.tag {
border-radius: 100px;
box-shadow: 0 0px 1px #a5a2a2;
padding: 0 $gp / 2 0 2px;
min-height: 18px;
font-size: $font-size-xsmall;
display: inline-flex;
align-items: center;
justify-content: center;
color: #555555;
cursor: pointer;
margin: 0 2px 2px 0;
.tag {
border-radius: 100px;
box-shadow: 0 0px 1px #a5a2a2;
padding: 0 $gp / 2 0 2px;
min-height: 18px;
font-size: $font-size-xsmall;
display: inline-flex;
align-items: center;
justify-content: center;
color: #555555;
cursor: pointer;
margin: 0 2px 2px 0;
&.readonly {
padding: 0 $gp / 2;
}
&.light { color: #fff; }
&.dark { color: #fff; }
&.readonly {
padding: 0 $gp / 2;
}
.close {
height: 14px;
width: 14px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 100%;
margin-right: 4px;
}
&.light { color: #fff; }
&.dark { color: #fff; }
}
.light .close,
.dark .close {
&:hover {
color: var(--danger-text-color);
background-color: var(--danger-background);
}
}
.close {
height: 14px;
width: 14px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 100%;
margin-right: 4px;
}
.light .close {
background-color: rgba(85, 85, 85, .5);
.light .close,
.dark .close {
&:hover {
color: var(--danger-text-color);
background-color: var(--danger-background);
}
}
.dark .close {
background-color: rgba(229, 229, 229, .5);
}
.light .close {
background-color: rgba(85, 85, 85, .5);
}
.dark .close {
background-color: rgba(229, 229, 229, .5);
}
</style>

View file

@ -1,12 +1,12 @@
<template lang="html">
<div
:class="['toast', type, { show, 'has-image': imageUrl }]"
@click="close"
>
<img :src="imageUrl" />
<i :class="[iconName]" />
<h4>{{ message }}</h4>
</div>
<div
:class="['toast', type, { show, 'has-image': imageUrl }]"
@click="close"
>
<img :src="imageUrl" >
<i :class="[iconName]" />
<h4>{{ message }}</h4>
</div>
</template>
<script>
@ -75,9 +75,9 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.toast {
.toast {
display: flex;
align-items: center;
position: fixed;
@ -92,39 +92,39 @@ export default {
transition: all 200ms linear;
&.success {
background: var(--success-background);
color: var(--success-text-color);
background: var(--success-background);
color: var(--success-text-color);
}
&.error {
background: var(--danger-background);
color: var(--danger-text-color);
background: var(--danger-background);
color: var(--danger-text-color);
}
&.has-image {
padding: $gp / 3;
max-width: 240px;
padding: $gp / 3;
max-width: 240px;
h4 {
font-size: 12px;
}
h4 {
font-size: 12px;
}
img {
margin-right: $gp / 2;
max-width: 50px;
max-height: 50px;
}
img {
margin-right: $gp / 2;
max-width: 50px;
max-height: 50px;
}
}
i {
margin-right: $gp / 2;
font-size: 20px;
margin-right: $gp / 2;
font-size: 20px;
}
&.show {
bottom: $gp;
opacity: 1;
transition: all 200ms linear;
bottom: $gp;
opacity: 1;
transition: all 200ms linear;
}
}
}
</style>

View file

@ -1,23 +1,32 @@
<template lang="html">
<span class="toggle-switch">
<p v-if="label">{{ label }}</p>
<span class="toggle-switch">
<p v-if="label">{{ label }}</p>
<input
type="checkbox"
:id="id"
v-model="localValue"
/>
<input
:id="id"
v-model="localValue"
type="checkbox"
>
<label :for="id" />
</span>
<label :for="id" />
</span>
</template>
<script>
export default {
props: {
value: Boolean,
id: String,
label: String,
value: {
type: Boolean,
default: false,
},
id: {
type: String,
default: '',
},
label: {
type: String,
default: '',
},
},
data() {
@ -50,52 +59,52 @@ export default {
@import "~styles/styles";
.toggle-switch {
display: inline-flex;
display: inline-flex;
p {
margin: 0;
font-size: 12px;
display: flex;
align-items: center;
font-weight: bold;
p {
margin: 0;
font-size: 12px;
display: flex;
align-items: center;
font-weight: bold;
}
input[type=checkbox]{
height: 0;
width: 0;
visibility: hidden;
&:checked + label {
background: var(--success-background);
}
input[type=checkbox]{
height: 0;
width: 0;
visibility: hidden;
&:checked + label {
background: var(--success-background);
}
&:checked + label:after {
left: calc(100% - 3px);
transform: translateX(-100%);
}
&:checked + label:after {
left: calc(100% - 3px);
transform: translateX(-100%);
}
}
label {
cursor: pointer;
text-indent: -9999px;
width: 34px;
height: 20px;
background: grey;
display: block;
border-radius: 100px;
position: relative;
label {
cursor: pointer;
text-indent: -9999px;
width: 34px;
height: 20px;
background: grey;
display: block;
border-radius: 100px;
position: relative;
&:after {
content: '';
position: absolute;
top: 3px;
left: 3px;
width: 14px;
height: 14px;
background: #fff;
border-radius: 90px;
transition: 0.3s;
}
&:after {
content: '';
position: absolute;
top: 3px;
left: 3px;
width: 14px;
height: 14px;
background: #fff;
border-radius: 90px;
transition: 0.3s;
}
}
}
</style>

View file

@ -1,60 +1,68 @@
<!-- TODO: refactor to live in platform settings -->
<template>
<div class="setting wallpaper-upload">
<template v-if="wallpaperUrl">
<div class="current-wallpaper">
<i class="far fa-image" />
<h5>{{ $t('settings.wallpaper.currentWallpaper') }}</h5>
</div>
<div class="setting wallpaper-upload">
<template v-if="wallpaperUrl">
<div class="current-wallpaper">
<i class="far fa-image" />
<h5>{{ $t('settings.wallpaper.currentWallpaper') }}</h5>
</div>
<div></div>
<div/>
<div>
<modal
ref="addList"
:title="$t('settings.wallpaper.currentWallpaper')"
large
action-text="Remove wallpaper"
@action="removeWallpaper"
>
<img
v-if="wallpaperUrl"
class="preview"
:src="wallpaperUrl"
alt="Uploaded wallpaper"
/>
<div>
<modal
ref="addList"
:title="$t('settings.wallpaper.currentWallpaper')"
large
action-text="Remove wallpaper"
@action="removeWallpaper"
>
<img
v-if="wallpaperUrl"
:src="wallpaperUrl"
class="preview"
alt="Uploaded wallpaper"
>
<div slot="content" class="wallpaper-preview">
<img
v-if="wallpaperUrl"
:src="wallpaperUrl"
alt="Uploaded wallpaper"
/>
</div>
</modal>
</div>
</template>
<div
slot="content"
class="wallpaper-preview">
<img
v-if="wallpaperUrl"
:src="wallpaperUrl"
alt="Uploaded wallpaper"
>
</div>
</modal>
</div>
</template>
<template v-else>
<i class="far fa-image" />
<h5>{{ $t('settings.wallpaper.title') }}</h5>
<template v-else>
<i class="far fa-image" />
<h5>{{ $t('settings.wallpaper.title') }}</h5>
<button class="primary small" @click="triggerUpload">
<i class="fas fa-sync-alt fast-spin" v-if="loading" />
<i class="fas fa-cloud-upload-alt" v-else />
Upload file
</button>
<button
class="primary small"
@click="triggerUpload">
<i
v-if="loading"
class="fas fa-sync-alt fast-spin" />
<i
v-else
class="fas fa-cloud-upload-alt" />
Upload file
</button>
<input
hidden
class="file-input"
ref="fileInput"
type="file"
accept='image/*'
@change="handleUpload"
/>
</template>
</div>
<input
ref="fileInput"
hidden
class="file-input"
type="file"
accept="image/*"
@change="handleUpload"
>
</template>
</div>
</template>
<script>
@ -146,42 +154,42 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
img.preview {
max-width: 100px;
cursor: pointer;
height: auto;
border: 1px solid transparent;
border-radius: $border-radius;
img.preview {
max-width: 100px;
cursor: pointer;
height: auto;
border: 1px solid transparent;
border-radius: $border-radius;
&:hover {
border-color: var(--accent-color);
}
&:hover {
border-color: var(--accent-color);
}
}
.current-wallpaper {
display: grid;
grid-template-columns: auto auto;
grid-gap: $gp / 2;
margin-right: $gp;
.current-wallpaper {
display: grid;
grid-template-columns: auto auto;
grid-gap: $gp / 2;
margin-right: $gp;
}
.file-input {
display: none;
}
.wallpaper-preview {
img {
width: 100%;
}
}
.file-input {
display: none;
}
.wallpaper-preview {
img {
width: 100%;
}
}
.remove-wallpaper {
position: absolute;
right: 36px;
margin-top: 4px;
width: 20px;
}
.remove-wallpaper {
position: absolute;
right: 36px;
margin-top: 4px;
width: 20px;
}
</style>

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "الى الخلف",
"save": "حفظ",
"cancel": "إلغاء",
"create": "خلق",
"filter": "منقي",
"by": "بواسطة",
"no": "لا",
"yes": "نعم فعلا",
"or": "أو",
"returnHome": "العودة إلى المنزل",
"pageNotFound": "الصفحة غير موجودة"
},
"errors": {
"loading": "خطأ في تحميل البيانات"
},
"releases": {
"published": "تاريخ النشر}"
},
"platforms": {
"donateMessage": "Gamebrary مجاني ومفتوح المصدر ، والنظر في المساعدة في تطويرها",
"donating": "تبرع",
"reportBugs": "الإبلاغ عن الأخطاء",
"submitFeedback": "تقديم ردود الفعل"
},
"igdbCredit": {
"poweredByIgdb": "مدعوم من IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "خلفيات مخصصة",
"shareLink": "روابط قابلة للمشاركة (تجريبية)",
"dangerZone": "منطقة الخطر"
}
},
"sessionExpired": {
"title": "انتهت الجلسة",
"login": "تسجيل الدخول",
"exit": "ىخرج"
},
"gameDetail": {
"videos": "أشرطة فيديو",
"screenshots": "لقطات",
"perspective": "إنطباع",
"releaseDate": "يوم الاصدار",
"timeToBeat": "الوقت يداهمك",
"gameModes": "نوع اللعبة",
"genres": "نوع أدبي",
"gamePlatforms": "متاح أيضًا لـ:",
"developers": "مطور",
"publishers": "الناشرون",
"removeFromList": "ازله من القائمة",
"links": {
"official": "موقع رسمي",
"wikia": "فندوم",
"wikipedia": "ويكيبيديا",
"facebook": "فيس بوك",
"twitter": "تغريد",
"twitch": "نشل",
"instagram": "إينستاجرام",
"youtube": "موقع YouTube",
"iphone": "دائرة الرقابة الداخلية",
"ipad": "اى باد",
"android": "لعب المتجر",
"steam": "بخار",
"reddit": "رديت",
"discord": "خلاف",
"google_plus": "جوجل بلس",
"tumblr": "نعرفكم",
"linkedin": "تابعني على",
"pinterest": "موقع Pinterest",
"soundcloud": "SoundCloud لل"
}
},
"list": {
"edit": "تحرير اسم القائمة",
"type": "نوع القائمة",
"placeholder": "اكتب اسم قائمتك هنا",
"suggestions": {
"owned": "مملوكة",
"wishlist": "الأماني",
"currentlyPlaying": "يلعب حاليا",
"completed": "منجز"
},
"input": "أدخل بنفسك",
"add": "اضف قائمة",
"duplicateWarning": "لديك بالفعل قائمة بهذا الاسم",
"getStarted": "البدء!",
"addFirstTime": "مرحبا ، أضف قائمتك الأولى!",
"sortByName": "THE",
"sortByRating": "أحرز هدفا",
"sortByReleaseDate": "تاريخ",
"sortByCustom": "العادة",
"delete": "حذف",
"moveLeft": "تحرك يسارا",
"moveRight": "تحرك يمينا",
"emptyList": "هذه القائمة فارغة",
"addGame": "إضافة اللعبة",
"view": "عرض القائمة",
"moveList": "نقل القائمة",
"sortList": "قائمة الفرز",
"coversSizeTitle": "يغطي عبر",
"views": {
"single": "افتراضي",
"wide": "المدمج",
"text": "نص فقط",
"grid": "شبكة"
}
},
"global": {
"back": "الى الخلف",
"save": "حفظ",
"cancel": "إلغاء",
"create": "خلق",
"filter": "منقي",
"by": "بواسطة",
"no": "لا",
"yes": "نعم فعلا",
"or": "أو",
"returnHome": "العودة إلى المنزل",
"pageNotFound": "الصفحة غير موجودة"
},
"errors": {
"loading": "خطأ في تحميل البيانات"
},
"releases": {
"published": "تاريخ النشر}"
},
"platforms": {
"donateMessage": "Gamebrary مجاني ومفتوح المصدر ، والنظر في المساعدة في تطويرها",
"donating": "تبرع",
"reportBugs": "الإبلاغ عن الأخطاء",
"submitFeedback": "تقديم ردود الفعل"
},
"igdbCredit": {
"poweredByIgdb": "مدعوم من IGDB"
},
"gameBoard": {
"settings": {
"about": "حول",
"platforms": "منصات",
"gameBoard": "مجلس لعبة",
"tags": "الكلمات",
"account": "الحساب",
"global": "عالمي",
"darkTheme": "موضوع الظلام",
"reloading": "إعادة ...",
"releases": "إطلاق",
"newsletter": "تلقي رسائل البريد الإلكتروني المحدثة (قريبًا)",
"branding": "العلامة التجارية للمنصة (الألوان ، والشعار ، الخ ...)",
"language": "لغة",
"languages": {
"en": "الإنجليزية",
"es": "الأسبانية",
"pl": "البولندي",
"de": "ألمانية",
"ar": "عربى",
"fr": "الفرنسية",
"it": "الإيطالي",
"eu": "الباسكي",
"cs": "تشيكي",
"ja": "اليابانية"
},
"ownedLists": "فقط عرض منصات بلدي",
"sortPlatforms": "فرز المنصات أبجديا",
"ratings": "إخفاء النتيجة اللعبة",
"signOut": "خروج",
"wallpaper": {
"title": "تحميل خلفية",
"transparency": "السماح بالشفافية",
"currentWallpaper": "خلفية الحالية",
"removeWallpaper": "إزالة خلفية"
},
"deleteAccount": {
"button": "حذف الحساب",
"message": "سيتم حذف بيانات حسابك إلى الأبد.",
"title": "هل أنت واثق؟"
}
},
"tags": {
"title": "علامات اللعبة",
"addTag": "إضافة علامة",
"createTag": "إنشاء علامة",
"inputPlaceholder": "اسم اليوم",
"applyTag": "تطبيق العلامة",
"useTags": "استخدم العلامات لتنظيم الألعاب بشكل أفضل"
},
"gameSearch": {
"title": "إضافة ألعاب إلى",
"inputPlaceholder": "ابحث هنا",
"alreadyInList": "من نتائج البحث بالفعل في قائمتك",
"noResultsFound": "لا نتائج",
"missingGame": "في عداد المفقودين لعبة؟ مساعدة المجتمع و",
"addToIGDB": "إضافته إلى IGDB"
},
"notes": {
"addNote": "اضف ملاحظة"
"wallpaper": "خلفيات مخصصة",
"shareLink": "روابط قابلة للمشاركة (تجريبية)",
"dangerZone": "منطقة الخطر"
}
},
"sessionExpired": {
"title": "انتهت الجلسة",
"login": "تسجيل الدخول",
"exit": "ىخرج"
},
"gameDetail": {
"videos": "أشرطة فيديو",
"screenshots": "لقطات",
"perspective": "إنطباع",
"releaseDate": "يوم الاصدار",
"timeToBeat": "الوقت يداهمك",
"gameModes": "نوع اللعبة",
"genres": "نوع أدبي",
"gamePlatforms": "متاح أيضًا لـ:",
"developers": "مطور",
"publishers": "الناشرون",
"removeFromList": "ازله من القائمة",
"links": {
"official": "موقع رسمي",
"wikia": "فندوم",
"wikipedia": "ويكيبيديا",
"facebook": "فيس بوك",
"twitter": "تغريد",
"twitch": "نشل",
"instagram": "إينستاجرام",
"youtube": "موقع YouTube",
"iphone": "دائرة الرقابة الداخلية",
"ipad": "اى باد",
"android": "لعب المتجر",
"steam": "بخار",
"reddit": "رديت",
"discord": "خلاف",
"google_plus": "جوجل بلس",
"tumblr": "نعرفكم",
"linkedin": "تابعني على",
"pinterest": "موقع Pinterest",
"soundcloud": "SoundCloud لل"
}
},
"list": {
"edit": "تحرير اسم القائمة",
"type": "نوع القائمة",
"placeholder": "اكتب اسم قائمتك هنا",
"suggestions": {
"owned": "مملوكة",
"wishlist": "الأماني",
"currentlyPlaying": "يلعب حاليا",
"completed": "منجز"
},
"input": "أدخل بنفسك",
"add": "اضف قائمة",
"duplicateWarning": "لديك بالفعل قائمة بهذا الاسم",
"getStarted": "البدء!",
"addFirstTime": "مرحبا ، أضف قائمتك الأولى!",
"sortByName": "THE",
"sortByRating": "أحرز هدفا",
"sortByReleaseDate": "تاريخ",
"sortByCustom": "العادة",
"delete": "حذف",
"moveLeft": "تحرك يسارا",
"moveRight": "تحرك يمينا",
"emptyList": "هذه القائمة فارغة",
"addGame": "إضافة اللعبة",
"view": "عرض القائمة",
"moveList": "نقل القائمة",
"sortList": "قائمة الفرز",
"coversSizeTitle": "يغطي عبر",
"views": {
"single": "افتراضي",
"wide": "المدمج",
"text": "نص فقط",
"grid": "شبكة"
}
},
"settings": {
"about": "حول",
"platforms": "منصات",
"gameBoard": "مجلس لعبة",
"tags": "الكلمات",
"account": "الحساب",
"global": "عالمي",
"darkTheme": "موضوع الظلام",
"reloading": "إعادة ...",
"releases": "إطلاق",
"newsletter": "تلقي رسائل البريد الإلكتروني المحدثة (قريبًا)",
"branding": "العلامة التجارية للمنصة (الألوان ، والشعار ، الخ ...)",
"language": "لغة",
"languages": {
"en": "الإنجليزية",
"es": "الأسبانية",
"pl": "البولندي",
"de": "ألمانية",
"ar": "عربى",
"fr": "الفرنسية",
"it": "الإيطالي",
"eu": "الباسكي",
"cs": "تشيكي",
"ja": "اليابانية"
},
"ownedLists": "فقط عرض منصات بلدي",
"sortPlatforms": "فرز المنصات أبجديا",
"ratings": "إخفاء النتيجة اللعبة",
"signOut": "خروج",
"wallpaper": {
"title": "تحميل خلفية",
"transparency": "السماح بالشفافية",
"currentWallpaper": "خلفية الحالية",
"removeWallpaper": "إزالة خلفية"
},
"deleteAccount": {
"button": "حذف الحساب",
"message": "سيتم حذف بيانات حسابك إلى الأبد.",
"title": "هل أنت واثق؟"
}
},
"tags": {
"title": "علامات اللعبة",
"addTag": "إضافة علامة",
"createTag": "إنشاء علامة",
"inputPlaceholder": "اسم اليوم",
"applyTag": "تطبيق العلامة",
"useTags": "استخدم العلامات لتنظيم الألعاب بشكل أفضل"
},
"gameSearch": {
"title": "إضافة ألعاب إلى",
"inputPlaceholder": "ابحث هنا",
"alreadyInList": "من نتائج البحث بالفعل في قائمتك",
"noResultsFound": "لا نتائج",
"missingGame": "في عداد المفقودين لعبة؟ مساعدة المجتمع و",
"addToIGDB": "إضافته إلى IGDB"
},
"notes": {
"addNote": "اضف ملاحظة"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "Zadní",
"save": "Uložit",
"cancel": "zrušení",
"create": "Vytvořit",
"filter": "Filtr",
"by": "podle",
"no": "Ne",
"yes": "Ano",
"or": "nebo",
"returnHome": "Vrátit se domů",
"pageNotFound": "Stránka nenalezena"
},
"errors": {
"loading": "Při načítání dat došlo k chybě"
},
"releases": {
"published": "Zveřejněno {date}"
},
"platforms": {
"donateMessage": "Gamebrary je bezplatný a otevřený zdroj, zvažte pomoc při jeho vývoji",
"donating": "darování",
"reportBugs": "hlášení chyb",
"submitFeedback": "odeslání zpětné vazby"
},
"igdbCredit": {
"poweredByIgdb": "Běží na IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "Vlastní tapety",
"shareLink": "Sdílené odkazy (experimentální)",
"dangerZone": "Nebezpečná zóna"
}
},
"sessionExpired": {
"title": "Relace vypršela",
"login": "Přihlásit se",
"exit": "Výstup"
},
"gameDetail": {
"videos": "Videa",
"screenshots": "Screenshoty",
"perspective": "Perspektivní",
"releaseDate": "Datum vydání",
"timeToBeat": "Je čas porazit",
"gameModes": "Herní mód",
"genres": "Žánr",
"gamePlatforms": "K dispozici také pro:",
"developers": "Vývojář",
"publishers": "Vydavatelé",
"removeFromList": "Odstranit ze seznamu",
"links": {
"official": "Oficiální stránka",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Cvrlikání",
"twitch": "Škubnutí",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Obchod Play",
"steam": "Pára",
"reddit": "Reddit",
"discord": "Svár",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Upravit název seznamu",
"type": "Typ seznamu",
"placeholder": "Sem zadejte název seznamu",
"suggestions": {
"owned": "Vlastní",
"wishlist": "Seznam přání",
"currentlyPlaying": "Právě hraje",
"completed": "Dokončeno"
},
"input": "Zadejte svůj vlastní",
"add": "Přidat seznam",
"duplicateWarning": "Již máte seznam s tímto názvem",
"getStarted": "Začít!",
"addFirstTime": "Vítejte, přidejte svůj první seznam!",
"sortByName": "",
"sortByRating": "Skóre",
"sortByReleaseDate": "datum",
"sortByCustom": "Zvyk",
"delete": "Odstranit",
"moveLeft": "Pohyb doleva",
"moveRight": "Pohyb vpravo",
"emptyList": "Tento seznam je prázdný",
"addGame": "Přidat hru",
"view": "Zobrazení seznamu",
"moveList": "Přesunout seznam",
"sortList": "Seřadit seznam",
"coversSizeTitle": "Přikrývá se",
"views": {
"single": "Výchozí",
"wide": "Kompaktní",
"text": "Pouze text",
"grid": "Mřížka"
}
},
"global": {
"back": "Zadní",
"save": "Uložit",
"cancel": "zrušení",
"create": "Vytvořit",
"filter": "Filtr",
"by": "podle",
"no": "Ne",
"yes": "Ano",
"or": "nebo",
"returnHome": "Vrátit se domů",
"pageNotFound": "Stránka nenalezena"
},
"errors": {
"loading": "Při načítání dat došlo k chybě"
},
"releases": {
"published": "Zveřejněno {date}"
},
"platforms": {
"donateMessage": "Gamebrary je bezplatný a otevřený zdroj, zvažte pomoc při jeho vývoji",
"donating": "darování",
"reportBugs": "hlášení chyb",
"submitFeedback": "odeslání zpětné vazby"
},
"igdbCredit": {
"poweredByIgdb": "Běží na IGDB"
},
"gameBoard": {
"settings": {
"about": "O",
"platforms": "Platformy",
"gameBoard": "Hrací deska",
"tags": "Značky",
"account": "Účet",
"global": "Globální",
"darkTheme": "Tmavé téma",
"reloading": "Přebíjení...",
"releases": "Vydání",
"newsletter": "Dostávat aktualizační e-maily (již brzy)",
"branding": "Značky platforem (barvy, logo atd.)",
"language": "Jazyk",
"languages": {
"en": "Angličtina",
"es": "španělština",
"pl": "polština",
"de": "Němec",
"ar": "arabština",
"fr": "francouzština",
"it": "italština",
"eu": "Baskicko",
"cs": "čeština",
"ja": "japonský"
},
"ownedLists": "Zobrazovat pouze mé platformy",
"sortPlatforms": "Seřadit platformy abecedně",
"ratings": "Skrýt skóre hry",
"signOut": "Odhlásit se",
"wallpaper": {
"title": "Nahrajte tapetu",
"transparency": "Povolit průhlednost",
"currentWallpaper": "Aktuální tapeta",
"removeWallpaper": "Odstraňte tapetu"
},
"deleteAccount": {
"button": "smazat účet",
"message": "Data vašeho účtu budou navždy smazána.",
"title": "Jsi si jistá?"
}
},
"tags": {
"title": "Herní štítky",
"addTag": "Přidat značku",
"createTag": "Vytvořit značku",
"inputPlaceholder": "Název dne",
"applyTag": "Použít značku",
"useTags": "Pomocí značek můžete lépe organizovat své hry"
},
"gameSearch": {
"title": "Přidat hry do",
"inputPlaceholder": "Hledej tady",
"alreadyInList": "z výsledků vyhledávání již ve vašem seznamu",
"noResultsFound": "Žádné výsledky",
"missingGame": "Chybí vám hra? Pomozte komunitě a",
"addToIGDB": "Přidejte ji do IGDB"
},
"notes": {
"addNote": "Přidat poznámku"
"wallpaper": "Vlastní tapety",
"shareLink": "Sdílené odkazy (experimentální)",
"dangerZone": "Nebezpečná zóna"
}
}
},
"sessionExpired": {
"title": "Relace vypršela",
"login": "Přihlásit se",
"exit": "Výstup"
},
"gameDetail": {
"videos": "Videa",
"screenshots": "Screenshoty",
"perspective": "Perspektivní",
"releaseDate": "Datum vydání",
"timeToBeat": "Je čas porazit",
"gameModes": "Herní mód",
"genres": "Žánr",
"gamePlatforms": "K dispozici také pro:",
"developers": "Vývojář",
"publishers": "Vydavatelé",
"removeFromList": "Odstranit ze seznamu",
"links": {
"official": "Oficiální stránka",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Cvrlikání",
"twitch": "Škubnutí",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Obchod Play",
"steam": "Pára",
"reddit": "Reddit",
"discord": "Svár",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Upravit název seznamu",
"type": "Typ seznamu",
"placeholder": "Sem zadejte název seznamu",
"suggestions": {
"owned": "Vlastní",
"wishlist": "Seznam přání",
"currentlyPlaying": "Právě hraje",
"completed": "Dokončeno"
},
"input": "Zadejte svůj vlastní",
"add": "Přidat seznam",
"duplicateWarning": "Již máte seznam s tímto názvem",
"getStarted": "Začít!",
"addFirstTime": "Vítejte, přidejte svůj první seznam!",
"sortByName": "",
"sortByRating": "Skóre",
"sortByReleaseDate": "datum",
"sortByCustom": "Zvyk",
"delete": "Odstranit",
"moveLeft": "Pohyb doleva",
"moveRight": "Pohyb vpravo",
"emptyList": "Tento seznam je prázdný",
"addGame": "Přidat hru",
"view": "Zobrazení seznamu",
"moveList": "Přesunout seznam",
"sortList": "Seřadit seznam",
"coversSizeTitle": "Přikrývá se",
"views": {
"single": "Výchozí",
"wide": "Kompaktní",
"text": "Pouze text",
"grid": "Mřížka"
}
},
"settings": {
"about": "O",
"platforms": "Platformy",
"gameBoard": "Hrací deska",
"tags": "Značky",
"account": "Účet",
"global": "Globální",
"darkTheme": "Tmavé téma",
"reloading": "Přebíjení...",
"releases": "Vydání",
"newsletter": "Dostávat aktualizační e-maily (již brzy)",
"branding": "Značky platforem (barvy, logo atd.)",
"language": "Jazyk",
"languages": {
"en": "Angličtina",
"es": "španělština",
"pl": "polština",
"de": "Němec",
"ar": "arabština",
"fr": "francouzština",
"it": "italština",
"eu": "Baskicko",
"cs": "čeština",
"ja": "japonský"
},
"ownedLists": "Zobrazovat pouze mé platformy",
"sortPlatforms": "Seřadit platformy abecedně",
"ratings": "Skrýt skóre hry",
"signOut": "Odhlásit se",
"wallpaper": {
"title": "Nahrajte tapetu",
"transparency": "Povolit průhlednost",
"currentWallpaper": "Aktuální tapeta",
"removeWallpaper": "Odstraňte tapetu"
},
"deleteAccount": {
"button": "smazat účet",
"message": "Data vašeho účtu budou navždy smazána.",
"title": "Jsi si jistá?"
}
},
"tags": {
"title": "Herní štítky",
"addTag": "Přidat značku",
"createTag": "Vytvořit značku",
"inputPlaceholder": "Název dne",
"applyTag": "Použít značku",
"useTags": "Pomocí značek můžete lépe organizovat své hry"
},
"gameSearch": {
"title": "Přidat hry do",
"inputPlaceholder": "Hledej tady",
"alreadyInList": "z výsledků vyhledávání již ve vašem seznamu",
"noResultsFound": "Žádné výsledky",
"missingGame": "Chybí vám hra? Pomozte komunitě a",
"addToIGDB": "Přidejte ji do IGDB"
},
"notes": {
"addNote": "Přidat poznámku"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "Zurück",
"save": "sparen",
"cancel": "Stornieren",
"create": "Erstellen",
"filter": "Filter",
"by": "durch",
"no": "Nein",
"yes": "Ja",
"or": "oder",
"returnHome": "Nach Hause zurückkehren",
"pageNotFound": "Seite nicht gefunden"
},
"errors": {
"loading": "Fehler beim Laden der Daten"
},
"releases": {
"published": "Veröffentlichungsdatum}"
},
"platforms": {
"donateMessage": "Gamebrary ist kostenlos und Open Source",
"donating": "spenden",
"reportBugs": "Fehler melden",
"submitFeedback": "Feedback senden"
},
"igdbCredit": {
"poweredByIgdb": "Bereitgestellt von IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "Benutzerdefinierte Wallpaper",
"shareLink": "Gemeinsam nutzbare Links (experimentell)",
"dangerZone": "Gefahrenzone"
}
},
"sessionExpired": {
"title": "Sitzung abgelaufen",
"login": "Anmeldung",
"exit": "Ausgang"
},
"gameDetail": {
"videos": "Videos",
"screenshots": "Screenshots",
"perspective": "Perspektive",
"releaseDate": "Veröffentlichungsdatum",
"timeToBeat": "Zeit zu schlagen",
"gameModes": "Spielmodus",
"genres": "Genre",
"gamePlatforms": "Auch erhältlich für:",
"developers": "Entwickler",
"publishers": "Verlag",
"removeFromList": "Aus Liste entfernen",
"links": {
"official": "Offizielle Seite",
"wikia": "Fangemeinde",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Twitter",
"twitch": "Zucken",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Spielladen",
"steam": "Dampf",
"reddit": "Reddit",
"discord": "Zwietracht",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Listenname bearbeiten",
"type": "Listentyp",
"placeholder": "Geben Sie hier Ihren Listennamen ein",
"suggestions": {
"owned": "Besessen",
"wishlist": "Wunschzettel",
"currentlyPlaying": "Spielt gerade",
"completed": "Abgeschlossen"
},
"input": "Geben Sie Ihre eigenen ein",
"add": "Liste hinzufügen",
"duplicateWarning": "Sie haben bereits eine Liste mit diesem Namen",
"getStarted": "Loslegen!",
"addFirstTime": "Willkommen, füge deine erste Liste hinzu!",
"sortByName": "DAS",
"sortByRating": "Ergebnis",
"sortByReleaseDate": "Datum",
"sortByCustom": "Brauch",
"delete": "Löschen",
"moveLeft": "Geh nach links",
"moveRight": "Nach rechts bewegen",
"emptyList": "Diese Liste ist leer",
"addGame": "Spiel hinzufügen",
"view": "Listenansicht",
"moveList": "Liste verschieben",
"sortList": "Sortierliste",
"coversSizeTitle": "Abdeckungen herüber",
"views": {
"single": "Standard",
"wide": "Kompakt",
"text": "Nur Text",
"grid": "Gitter"
}
},
"global": {
"back": "Zurück",
"save": "sparen",
"cancel": "Stornieren",
"create": "Erstellen",
"filter": "Filter",
"by": "durch",
"no": "Nein",
"yes": "Ja",
"or": "oder",
"returnHome": "Nach Hause zurückkehren",
"pageNotFound": "Seite nicht gefunden"
},
"errors": {
"loading": "Fehler beim Laden der Daten"
},
"releases": {
"published": "Veröffentlichungsdatum}"
},
"platforms": {
"donateMessage": "Gamebrary ist kostenlos und Open Source",
"donating": "spenden",
"reportBugs": "Fehler melden",
"submitFeedback": "Feedback senden"
},
"igdbCredit": {
"poweredByIgdb": "Bereitgestellt von IGDB"
},
"gameBoard": {
"settings": {
"about": "Über",
"platforms": "Plattformen",
"gameBoard": "Spielbrett",
"tags": "Stichworte",
"account": "Konto",
"global": "Global",
"darkTheme": "Dunkles Thema",
"reloading": "Neuladen...",
"releases": "Releases",
"newsletter": "Erhalte Update-E-Mails (in Kürze)",
"branding": "Plattform-Branding (Farben, Logo usw.)",
"language": "Sprache",
"languages": {
"en": "Englisch",
"es": "Spanisch",
"pl": "Polieren",
"de": "Deutsche",
"ar": "Arabisch",
"fr": "Französisch",
"it": "Italienisch",
"eu": "baskisch",
"cs": "Tschechisch",
"ja": "japanisch"
},
"ownedLists": "Zeige nur meine Plattformen",
"sortPlatforms": "Plattformen alphabetisch sortieren",
"ratings": "Spielstand ausblenden",
"signOut": "Ausloggen",
"wallpaper": {
"title": "Hintergrundbild hochladen",
"transparency": "Transparenz zulassen",
"currentWallpaper": "Aktuelles Hintergrundbild",
"removeWallpaper": "Tapete entfernen"
},
"deleteAccount": {
"button": "Konto löschen",
"message": "Ihre Kontodaten werden für immer gelöscht.",
"title": "Bist du sicher?"
}
},
"tags": {
"title": "Spieletags",
"addTag": "Tag hinzufügen",
"createTag": "Tag erstellen",
"inputPlaceholder": "Tag name",
"applyTag": "Tag anwenden",
"useTags": "Verwenden Sie Tags, um Ihre Spiele besser zu organisieren"
},
"gameSearch": {
"title": "Spiele hinzufügen zu",
"inputPlaceholder": "Suche hier",
"alreadyInList": "von den Suchergebnissen bereits in Ihrer Liste",
"noResultsFound": "Keine Ergebnisse",
"missingGame": "Vermissen Sie ein Spiel? Helfen Sie der Community und",
"addToIGDB": "Fügen Sie es zu IGDB hinzu"
},
"notes": {
"addNote": "Notiz hinzufügen"
"wallpaper": "Benutzerdefinierte Wallpaper",
"shareLink": "Gemeinsam nutzbare Links (experimentell)",
"dangerZone": "Gefahrenzone"
}
},
"sessionExpired": {
"title": "Sitzung abgelaufen",
"login": "Anmeldung",
"exit": "Ausgang"
},
"gameDetail": {
"videos": "Videos",
"screenshots": "Screenshots",
"perspective": "Perspektive",
"releaseDate": "Veröffentlichungsdatum",
"timeToBeat": "Zeit zu schlagen",
"gameModes": "Spielmodus",
"genres": "Genre",
"gamePlatforms": "Auch erhältlich für:",
"developers": "Entwickler",
"publishers": "Verlag",
"removeFromList": "Aus Liste entfernen",
"links": {
"official": "Offizielle Seite",
"wikia": "Fangemeinde",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Twitter",
"twitch": "Zucken",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Spielladen",
"steam": "Dampf",
"reddit": "Reddit",
"discord": "Zwietracht",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Listenname bearbeiten",
"type": "Listentyp",
"placeholder": "Geben Sie hier Ihren Listennamen ein",
"suggestions": {
"owned": "Besessen",
"wishlist": "Wunschzettel",
"currentlyPlaying": "Spielt gerade",
"completed": "Abgeschlossen"
},
"input": "Geben Sie Ihre eigenen ein",
"add": "Liste hinzufügen",
"duplicateWarning": "Sie haben bereits eine Liste mit diesem Namen",
"getStarted": "Loslegen!",
"addFirstTime": "Willkommen, füge deine erste Liste hinzu!",
"sortByName": "DAS",
"sortByRating": "Ergebnis",
"sortByReleaseDate": "Datum",
"sortByCustom": "Brauch",
"delete": "Löschen",
"moveLeft": "Geh nach links",
"moveRight": "Nach rechts bewegen",
"emptyList": "Diese Liste ist leer",
"addGame": "Spiel hinzufügen",
"view": "Listenansicht",
"moveList": "Liste verschieben",
"sortList": "Sortierliste",
"coversSizeTitle": "Abdeckungen herüber",
"views": {
"single": "Standard",
"wide": "Kompakt",
"text": "Nur Text",
"grid": "Gitter"
}
},
"settings": {
"about": "Über",
"platforms": "Plattformen",
"gameBoard": "Spielbrett",
"tags": "Stichworte",
"account": "Konto",
"global": "Global",
"darkTheme": "Dunkles Thema",
"reloading": "Neuladen...",
"releases": "Releases",
"newsletter": "Erhalte Update-E-Mails (in Kürze)",
"branding": "Plattform-Branding (Farben, Logo usw.)",
"language": "Sprache",
"languages": {
"en": "Englisch",
"es": "Spanisch",
"pl": "Polieren",
"de": "Deutsche",
"ar": "Arabisch",
"fr": "Französisch",
"it": "Italienisch",
"eu": "baskisch",
"cs": "Tschechisch",
"ja": "japanisch"
},
"ownedLists": "Zeige nur meine Plattformen",
"sortPlatforms": "Plattformen alphabetisch sortieren",
"ratings": "Spielstand ausblenden",
"signOut": "Ausloggen",
"wallpaper": {
"title": "Hintergrundbild hochladen",
"transparency": "Transparenz zulassen",
"currentWallpaper": "Aktuelles Hintergrundbild",
"removeWallpaper": "Tapete entfernen"
},
"deleteAccount": {
"button": "Konto löschen",
"message": "Ihre Kontodaten werden für immer gelöscht.",
"title": "Bist du sicher?"
}
},
"tags": {
"title": "Spieletags",
"addTag": "Tag hinzufügen",
"createTag": "Tag erstellen",
"inputPlaceholder": "Tag name",
"applyTag": "Tag anwenden",
"useTags": "Verwenden Sie Tags, um Ihre Spiele besser zu organisieren"
},
"gameSearch": {
"title": "Spiele hinzufügen zu",
"inputPlaceholder": "Suche hier",
"alreadyInList": "von den Suchergebnissen bereits in Ihrer Liste",
"noResultsFound": "Keine Ergebnisse",
"missingGame": "Vermissen Sie ein Spiel? Helfen Sie der Community und",
"addToIGDB": "Fügen Sie es zu IGDB hinzu"
},
"notes": {
"addNote": "Notiz hinzufügen"
}
}

View file

@ -1,168 +1,168 @@
{
"global": {
"back": "Back",
"save": "Save",
"cancel": "Cancel",
"create": "Create",
"filter": "Filter",
"by": "by",
"no": "no",
"yes": "yes",
"or": "or",
"returnHome": "Return home",
"pageNotFound": "Page not found"
},
"errors": {
"loading": "Error loading data"
},
"releases": {
"published": "Published {date}"
},
"platforms": {
"donateMessage": "Gamebrary is free and open source, consider helping its development by",
"donating": "donating",
"reportBugs": "reporting bugs",
"submitFeedback": "submitting feedback"
},
"igdbCredit": {
"poweredByIgdb": "Powered by IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "Custom Wallpaper",
"shareLink": "Shareable links (experimental)",
"dangerZone": "Danger zone"
}
},
"sessionExpired": {
"title": "Session expired",
"login": "Login",
"exit": "Exit"
},
"gameDetail": {
"videos": "Videos",
"screenshots": "Screenshots",
"perspective": "Perspective",
"releaseDate": "Release date",
"timeToBeat": "Time to beat",
"gameModes": "Game Mode",
"genres": "Genre",
"gamePlatforms": "Also available for:",
"developers": "Developer",
"publishers": "Publishers",
"removeFromList": "Remove",
"links": {
"official": "Official Site",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Twitter",
"twitch": "Twitch",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play Store",
"steam": "Steam",
"reddit": "Reddit",
"discord": "Discord",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Edit list name",
"type": "List type",
"preferences": "List preferences",
"placeholder": "Type your list name here",
"wishlist": "Wishlist",
"input": "Enter your own",
"add": "Add list",
"duplicateWarning": "You already have a list with this name",
"getStarted": "Get started!",
"addFirstTime": "Welcome, add your first list!",
"sortByName": "A-Z",
"sortByRating": "Score",
"sortByReleaseDate": "Date",
"sortByCustom": "Custom",
"delete": "Delete",
"moveLeft": "Move left",
"moveRight": "Move right",
"emptyList": "This list is empty",
"addGame": "Add game",
"view": "List view",
"moveList": "Move list",
"sortList": "Sort list",
"coversSizeTitle": "Covers across",
"views": {
"single": "Default",
"wide": "Compact",
"text": "Text only",
"grid": "Grid"
}
},
"global": {
"back": "Back",
"save": "Save",
"cancel": "Cancel",
"create": "Create",
"filter": "Filter",
"by": "by",
"no": "no",
"yes": "yes",
"or": "or",
"returnHome": "Return home",
"pageNotFound": "Page not found"
},
"errors": {
"loading": "Error loading data"
},
"releases": {
"published": "Published {date}"
},
"platforms": {
"donateMessage": "Gamebrary is free and open source, consider helping its development by",
"donating": "donating",
"reportBugs": "reporting bugs",
"submitFeedback": "submitting feedback"
},
"igdbCredit": {
"poweredByIgdb": "Powered by IGDB"
},
"gameBoard": {
"settings": {
"about": "About",
"platforms": "Platforms",
"gameBoard": "Game Board",
"public": "Public",
"tags": "Tags",
"account": "Account",
"global": "Global",
"reloading": "Reloading...",
"releases": "Releases",
"newsletter": "Receive update emails (coming soon)",
"branding": "Platform branding (colors, logo, etc...)",
"language": "Language",
"languages": {
"en": "English",
"es": "Spanish",
"pl": "Polish",
"de": "German",
"ar": "Arabic",
"fr": "French",
"it": "Italian",
"eu": "Basque",
"cs": "Czech",
"ja": "Japanese"
},
"ownedLists": "Only show my platforms",
"sortPlatforms": "Sort platforms alphabetically",
"ratings": "Hide game score",
"signOut": "Sign out",
"wallpaper": {
"title": "Upload wallpaper",
"transparency": "Allow transparency",
"currentWallpaper": "Current wallpaper",
"removeWallpaper": "Remove wallpaper"
},
"deleteAccount": {
"button": "Delete account",
"message": "Your account data will be deleted forever.",
"title": "Are you sure?"
}
},
"tags": {
"title": "Game tags",
"addTag": "Add Tag",
"createTag": "Create tag",
"inputPlaceholder": "Tag name",
"applyTag": "Apply tag",
"useTags": "Use tags to better organise your games"
},
"gameSearch": {
"title": "Add games to",
"inputPlaceholder": "Search here",
"alreadyInList": "from search results already in your list",
"noResultsFound": "No results",
"missingGame": "Missing a game? Help out the community and",
"addToIGDB": "Add it to IGDB"
},
"notes": {
"addNote": "Add note",
"notes": "Notes"
"wallpaper": "Custom Wallpaper",
"shareLink": "Shareable links (experimental)",
"dangerZone": "Danger zone"
}
},
"sessionExpired": {
"title": "Session expired",
"login": "Login",
"exit": "Exit"
},
"gameDetail": {
"videos": "Videos",
"screenshots": "Screenshots",
"perspective": "Perspective",
"releaseDate": "Release date",
"timeToBeat": "Time to beat",
"gameModes": "Game Mode",
"genres": "Genre",
"gamePlatforms": "Also available for:",
"developers": "Developer",
"publishers": "Publishers",
"removeFromList": "Remove",
"links": {
"official": "Official Site",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Twitter",
"twitch": "Twitch",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play Store",
"steam": "Steam",
"reddit": "Reddit",
"discord": "Discord",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Edit list name",
"type": "List type",
"preferences": "List preferences",
"placeholder": "Type your list name here",
"wishlist": "Wishlist",
"input": "Enter your own",
"add": "Add list",
"duplicateWarning": "You already have a list with this name",
"getStarted": "Get started!",
"addFirstTime": "Welcome, add your first list!",
"sortByName": "A-Z",
"sortByRating": "Score",
"sortByReleaseDate": "Date",
"sortByCustom": "Custom",
"delete": "Delete",
"moveLeft": "Move left",
"moveRight": "Move right",
"emptyList": "This list is empty",
"addGame": "Add game",
"view": "List view",
"moveList": "Move list",
"sortList": "Sort list",
"coversSizeTitle": "Covers across",
"views": {
"single": "Default",
"wide": "Compact",
"text": "Text only",
"grid": "Grid"
}
},
"settings": {
"about": "About",
"platforms": "Platforms",
"gameBoard": "Game Board",
"public": "Public",
"tags": "Tags",
"account": "Account",
"global": "Global",
"reloading": "Reloading...",
"releases": "Releases",
"newsletter": "Receive update emails (coming soon)",
"branding": "Platform branding (colors, logo, etc...)",
"language": "Language",
"languages": {
"en": "English",
"es": "Spanish",
"pl": "Polish",
"de": "German",
"ar": "Arabic",
"fr": "French",
"it": "Italian",
"eu": "Basque",
"cs": "Czech",
"ja": "Japanese"
},
"ownedLists": "Only show my platforms",
"sortPlatforms": "Sort platforms alphabetically",
"ratings": "Hide game score",
"signOut": "Sign out",
"wallpaper": {
"title": "Upload wallpaper",
"transparency": "Allow transparency",
"currentWallpaper": "Current wallpaper",
"removeWallpaper": "Remove wallpaper"
},
"deleteAccount": {
"button": "Delete account",
"message": "Your account data will be deleted forever.",
"title": "Are you sure?"
}
},
"tags": {
"title": "Game tags",
"addTag": "Add Tag",
"createTag": "Create tag",
"inputPlaceholder": "Tag name",
"applyTag": "Apply tag",
"useTags": "Use tags to better organise your games"
},
"gameSearch": {
"title": "Add games to",
"inputPlaceholder": "Search here",
"alreadyInList": "from search results already in your list",
"noResultsFound": "No results",
"missingGame": "Missing a game? Help out the community and",
"addToIGDB": "Add it to IGDB"
},
"notes": {
"addNote": "Add note",
"notes": "Notes"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "atrás",
"save": "Salvar",
"cancel": "Cancelar",
"create": "Crear",
"filter": "Filtrar",
"by": "por",
"no": "no",
"yes": "sí",
"or": "o",
"returnHome": "Volver a casa",
"pageNotFound": "Página no encontrada"
},
"errors": {
"loading": "Error al cargar datos"
},
"releases": {
"published": "Fecha de Publicación}"
},
"platforms": {
"donateMessage": "Gamebrary es gratuito y de código abierto, considere ayudar a su desarrollo mediante",
"donating": "donando",
"reportBugs": "informar errores",
"submitFeedback": "enviando comentarios"
},
"igdbCredit": {
"poweredByIgdb": "Desarrollado por IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "Fondo de pantalla personalizado",
"shareLink": "Enlaces compartibles (experimental)",
"dangerZone": "Zona peligrosa"
}
},
"sessionExpired": {
"title": "Sesión expirada",
"login": "Iniciar sesión",
"exit": "Salida"
},
"gameDetail": {
"videos": "Videos",
"screenshots": "Capturas de pantalla",
"perspective": "Perspectiva",
"releaseDate": "Fecha de lanzamiento",
"timeToBeat": "Hora de vencer",
"gameModes": "Modo de juego",
"genres": "Género",
"gamePlatforms": "También disponible para:",
"developers": "Desarrollador",
"publishers": "Editores",
"removeFromList": "Quitar de la lista",
"links": {
"official": "Sitio oficial",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Gorjeo",
"twitch": "Contracción nerviosa",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Tienda de juegos",
"steam": "Vapor",
"reddit": "Reddit",
"discord": "Discordia",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Editar nombre de lista",
"type": "Tipo de lista",
"placeholder": "Escriba el nombre de su lista aquí",
"suggestions": {
"owned": "De propiedad",
"wishlist": "Lista de deseos",
"currentlyPlaying": "Reproduciendo",
"completed": "Terminado"
},
"input": "Ingrese el suyo",
"add": "Añadir lista",
"duplicateWarning": "Ya tienes una lista con este nombre",
"getStarted": "¡Empezar!",
"addFirstTime": "Bienvenido, agrega tu primera lista!",
"sortByName": "LA",
"sortByRating": "Puntuación",
"sortByReleaseDate": "Fecha",
"sortByCustom": "Personalizado",
"delete": "Borrar",
"moveLeft": "Mover hacia la izquierda",
"moveRight": "Mover a la derecha",
"emptyList": "Esta lista esta vacia",
"addGame": "Agregar juego",
"view": "Vista de la lista",
"moveList": "Mover lista",
"sortList": "Lista Ordenada",
"coversSizeTitle": "Cubre a través de",
"views": {
"single": "Defecto",
"wide": "Compacto",
"text": "Solo texto",
"grid": "Cuadrícula"
}
},
"global": {
"back": "atrás",
"save": "Salvar",
"cancel": "Cancelar",
"create": "Crear",
"filter": "Filtrar",
"by": "por",
"no": "no",
"yes": "sí",
"or": "o",
"returnHome": "Volver a casa",
"pageNotFound": "Página no encontrada"
},
"errors": {
"loading": "Error al cargar datos"
},
"releases": {
"published": "Fecha de Publicación}"
},
"platforms": {
"donateMessage": "Gamebrary es gratuito y de código abierto, considere ayudar a su desarrollo mediante",
"donating": "donando",
"reportBugs": "informar errores",
"submitFeedback": "enviando comentarios"
},
"igdbCredit": {
"poweredByIgdb": "Desarrollado por IGDB"
},
"gameBoard": {
"settings": {
"about": "Acerca de",
"platforms": "Plataformas",
"gameBoard": "Juego de mesa",
"tags": "Etiquetas",
"account": "Cuenta",
"global": "Global",
"darkTheme": "Tema oscuro",
"reloading": "Recargando ...",
"releases": "Lanzamientos",
"newsletter": "Recibir correos electrónicos de actualización (próximamente)",
"branding": "Marca de la plataforma (colores, logotipo, etc.)",
"language": "Idioma",
"languages": {
"en": "Inglés",
"es": "Español",
"pl": "polaco",
"de": "alemán",
"ar": "Arábica",
"fr": "francés",
"it": "italiano",
"eu": "vasco",
"cs": "checo",
"ja": "japonés"
},
"ownedLists": "Mostrar solo mis plataformas",
"sortPlatforms": "Ordenar plataformas alfabéticamente",
"ratings": "Ocultar puntuación del juego",
"signOut": "desconectar",
"wallpaper": {
"title": "Subir fondo de pantalla",
"transparency": "Permitir transparencia",
"currentWallpaper": "Fondo de pantalla actual",
"removeWallpaper": "Eliminar fondo de pantalla"
},
"deleteAccount": {
"button": "Borrar cuenta",
"message": "Los datos de su cuenta se eliminarán para siempre.",
"title": "¿Estás seguro?"
}
},
"tags": {
"title": "Etiquetas de juego",
"addTag": "Añadir etiqueta",
"createTag": "Crear etiqueta",
"inputPlaceholder": "Nombre del día",
"applyTag": "Aplicar etiqueta",
"useTags": "Usa etiquetas para organizar mejor tus juegos"
},
"gameSearch": {
"title": "Agregar juegos a",
"inputPlaceholder": "Busca aquí",
"alreadyInList": "de los resultados de búsqueda que ya están en su lista",
"noResultsFound": "No hay resultados",
"missingGame": "¿Te falta un juego? Ayuda a la comunidad y",
"addToIGDB": "Agréguelo a IGDB"
},
"notes": {
"addNote": "Añadir la nota"
"wallpaper": "Fondo de pantalla personalizado",
"shareLink": "Enlaces compartibles (experimental)",
"dangerZone": "Zona peligrosa"
}
},
"sessionExpired": {
"title": "Sesión expirada",
"login": "Iniciar sesión",
"exit": "Salida"
},
"gameDetail": {
"videos": "Videos",
"screenshots": "Capturas de pantalla",
"perspective": "Perspectiva",
"releaseDate": "Fecha de lanzamiento",
"timeToBeat": "Hora de vencer",
"gameModes": "Modo de juego",
"genres": "Género",
"gamePlatforms": "También disponible para:",
"developers": "Desarrollador",
"publishers": "Editores",
"removeFromList": "Quitar de la lista",
"links": {
"official": "Sitio oficial",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Gorjeo",
"twitch": "Contracción nerviosa",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Tienda de juegos",
"steam": "Vapor",
"reddit": "Reddit",
"discord": "Discordia",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Editar nombre de lista",
"type": "Tipo de lista",
"placeholder": "Escriba el nombre de su lista aquí",
"suggestions": {
"owned": "De propiedad",
"wishlist": "Lista de deseos",
"currentlyPlaying": "Reproduciendo",
"completed": "Terminado"
},
"input": "Ingrese el suyo",
"add": "Añadir lista",
"duplicateWarning": "Ya tienes una lista con este nombre",
"getStarted": "¡Empezar!",
"addFirstTime": "Bienvenido, agrega tu primera lista!",
"sortByName": "LA",
"sortByRating": "Puntuación",
"sortByReleaseDate": "Fecha",
"sortByCustom": "Personalizado",
"delete": "Borrar",
"moveLeft": "Mover hacia la izquierda",
"moveRight": "Mover a la derecha",
"emptyList": "Esta lista esta vacia",
"addGame": "Agregar juego",
"view": "Vista de la lista",
"moveList": "Mover lista",
"sortList": "Lista Ordenada",
"coversSizeTitle": "Cubre a través de",
"views": {
"single": "Defecto",
"wide": "Compacto",
"text": "Solo texto",
"grid": "Cuadrícula"
}
},
"settings": {
"about": "Acerca de",
"platforms": "Plataformas",
"gameBoard": "Juego de mesa",
"tags": "Etiquetas",
"account": "Cuenta",
"global": "Global",
"darkTheme": "Tema oscuro",
"reloading": "Recargando ...",
"releases": "Lanzamientos",
"newsletter": "Recibir correos electrónicos de actualización (próximamente)",
"branding": "Marca de la plataforma (colores, logotipo, etc.)",
"language": "Idioma",
"languages": {
"en": "Inglés",
"es": "Español",
"pl": "polaco",
"de": "alemán",
"ar": "Arábica",
"fr": "francés",
"it": "italiano",
"eu": "vasco",
"cs": "checo",
"ja": "japonés"
},
"ownedLists": "Mostrar solo mis plataformas",
"sortPlatforms": "Ordenar plataformas alfabéticamente",
"ratings": "Ocultar puntuación del juego",
"signOut": "desconectar",
"wallpaper": {
"title": "Subir fondo de pantalla",
"transparency": "Permitir transparencia",
"currentWallpaper": "Fondo de pantalla actual",
"removeWallpaper": "Eliminar fondo de pantalla"
},
"deleteAccount": {
"button": "Borrar cuenta",
"message": "Los datos de su cuenta se eliminarán para siempre.",
"title": "¿Estás seguro?"
}
},
"tags": {
"title": "Etiquetas de juego",
"addTag": "Añadir etiqueta",
"createTag": "Crear etiqueta",
"inputPlaceholder": "Nombre del día",
"applyTag": "Aplicar etiqueta",
"useTags": "Usa etiquetas para organizar mejor tus juegos"
},
"gameSearch": {
"title": "Agregar juegos a",
"inputPlaceholder": "Busca aquí",
"alreadyInList": "de los resultados de búsqueda que ya están en su lista",
"noResultsFound": "No hay resultados",
"missingGame": "¿Te falta un juego? Ayuda a la comunidad y",
"addToIGDB": "Agréguelo a IGDB"
},
"notes": {
"addNote": "Añadir la nota"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "Back",
"save": "Save",
"cancel": "Utzi",
"create": "Sortu",
"filter": "Filter",
"by": "arabera",
"no": "no",
"yes": "bai",
"or": "edo",
"returnHome": "Etxera itzuli",
"pageNotFound": "Ez da orria aurkitu"
},
"errors": {
"loading": "Errorea gertatu da datuak kargatzean"
},
"releases": {
"published": "Argitaratua {data}"
},
"platforms": {
"donateMessage": "Gamebrary iturri librea eta irekia da eta kontuan hartu bere garapenari laguntzen",
"donating": "eman",
"reportBugs": "akatsen berri ematea",
"submitFeedback": "feedbacka bidaltzea"
},
"igdbCredit": {
"poweredByIgdb": "IGDB-k eginda"
},
"gameBoard": {
"settings": {
"wallpaper": "Neurri pertsonalizatua",
"shareLink": "Lotura partekagarriak (esperimentalak)",
"dangerZone": "Arriskuen zona"
}
},
"sessionExpired": {
"title": "Saioa iraungita dago",
"login": "Saioa hasi",
"exit": "Irten"
},
"gameDetail": {
"videos": "Bideoak",
"screenshots": "Pantaila-",
"perspective": "perspektiba",
"releaseDate": "Kaleratze data",
"timeToBeat": "Irabazteko garaia",
"gameModes": "Joko modua",
"genres": "generoa",
"gamePlatforms": "Eskuragarri ere:",
"developers": "Developer",
"publishers": "Argitaletxeak",
"removeFromList": "Kendu zerrendatik",
"links": {
"official": "Gune ofiziala",
"wikia": "fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Twitter",
"twitch": "twitch",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play denda",
"steam": "Lurrun",
"reddit": "Reddit",
"discord": "discord",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Editatu zerrendaren izena",
"type": "Zerrenda mota",
"placeholder": "Idatzi hemen zure zerrenda izena",
"suggestions": {
"owned": "sozietateak",
"wishlist": "Gustuko",
"currentlyPlaying": "Gaur egun jolasten",
"completed": "Osatua"
},
"input": "Sartu zurea",
"add": "Gehitu zerrenda",
"duplicateWarning": "Dagoeneko zerrenda bat duzu izen horrekin",
"getStarted": "Hasi!",
"addFirstTime": "Ongi etorri, gehitu zure lehen zerrenda!",
"sortByName": "THE",
"sortByRating": "Puntuazioa",
"sortByReleaseDate": "data",
"sortByCustom": "pertsonalizatua",
"delete": "ezabatu",
"moveLeft": "Mugitu ezkerrera",
"moveRight": "Mugitu eskuinera",
"emptyList": "Zerrenda hau hutsik dago",
"addGame": "Gehitu jokoa",
"view": "Zerrenda ikuspegia",
"moveList": "Mugitu zerrenda",
"sortList": "Sailkapen zerrenda",
"coversSizeTitle": "Estaldurak zehar",
"views": {
"single": "Default",
"wide": "Compact",
"text": "Testua soilik",
"grid": "Grid"
}
},
"global": {
"back": "Back",
"save": "Save",
"cancel": "Utzi",
"create": "Sortu",
"filter": "Filter",
"by": "arabera",
"no": "no",
"yes": "bai",
"or": "edo",
"returnHome": "Etxera itzuli",
"pageNotFound": "Ez da orria aurkitu"
},
"errors": {
"loading": "Errorea gertatu da datuak kargatzean"
},
"releases": {
"published": "Argitaratua {data}"
},
"platforms": {
"donateMessage": "Gamebrary iturri librea eta irekia da eta kontuan hartu bere garapenari laguntzen",
"donating": "eman",
"reportBugs": "akatsen berri ematea",
"submitFeedback": "feedbacka bidaltzea"
},
"igdbCredit": {
"poweredByIgdb": "IGDB-k eginda"
},
"gameBoard": {
"settings": {
"about": "About",
"platforms": "plataformak",
"gameBoard": "Joko taula",
"tags": "Tags",
"account": "Kontu-",
"global": "Global",
"darkTheme": "Gai iluna",
"reloading": "Berkargatzean ...",
"releases": "oharrak",
"newsletter": "Jaso eguneratze mezu elektronikoak (laster etorriko dira)",
"branding": "Plataforma marka (koloreak, logotipoa, etab ...)",
"language": "Hizkuntza",
"languages": {
"en": "English",
"es": "Espainiako",
"pl": "Poloniako",
"de": "Alemaniako",
"ar": "arabiera",
"fr": "Frantziako",
"it": "Italiako",
"eu": "Euskal",
"cs": "Txekiar",
"ja": "Japoniako"
},
"ownedLists": "Nire plataformak bakarrik erakutsi",
"sortPlatforms": "Ordenatu plataformak alfabetikoki",
"ratings": "Ezkutatu jokoaren puntuazioa",
"signOut": "Hasi saioa",
"wallpaper": {
"title": "Kargatu horma-irudia",
"transparency": "Gardentasuna eman",
"currentWallpaper": "Uneko horma-irudia",
"removeWallpaper": "Kendu papera"
},
"deleteAccount": {
"button": "Ezabatu kontua",
"message": "Zure kontuko datuak betiko ezabatuko dira.",
"title": "Ziur zaude?"
}
},
"tags": {
"title": "Jokoaren etiketak",
"addTag": "Gehitu etiketa",
"createTag": "Etiketa sortu",
"inputPlaceholder": "Egunaren izena",
"applyTag": "Aplikatu etiketa",
"useTags": "Erabili etiketak zure jokoak hobeto antolatzeko"
},
"gameSearch": {
"title": "Gehitu jokoak",
"inputPlaceholder": "Bilatu hemen",
"alreadyInList": "dagoeneko zure zerrendako bilaketa-emaitzetatik",
"noResultsFound": "Emaitzarik ez",
"missingGame": "Joko bat falta al zaizu? Lagundu komunitateari eta",
"addToIGDB": "Gehitu IGDB-ri"
},
"notes": {
"addNote": "Oharra gehitu"
"wallpaper": "Neurri pertsonalizatua",
"shareLink": "Lotura partekagarriak (esperimentalak)",
"dangerZone": "Arriskuen zona"
}
},
"sessionExpired": {
"title": "Saioa iraungita dago",
"login": "Saioa hasi",
"exit": "Irten"
},
"gameDetail": {
"videos": "Bideoak",
"screenshots": "Pantaila-",
"perspective": "perspektiba",
"releaseDate": "Kaleratze data",
"timeToBeat": "Irabazteko garaia",
"gameModes": "Joko modua",
"genres": "generoa",
"gamePlatforms": "Eskuragarri ere:",
"developers": "Developer",
"publishers": "Argitaletxeak",
"removeFromList": "Kendu zerrendatik",
"links": {
"official": "Gune ofiziala",
"wikia": "fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Twitter",
"twitch": "twitch",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play denda",
"steam": "Lurrun",
"reddit": "Reddit",
"discord": "discord",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Editatu zerrendaren izena",
"type": "Zerrenda mota",
"placeholder": "Idatzi hemen zure zerrenda izena",
"suggestions": {
"owned": "sozietateak",
"wishlist": "Gustuko",
"currentlyPlaying": "Gaur egun jolasten",
"completed": "Osatua"
},
"input": "Sartu zurea",
"add": "Gehitu zerrenda",
"duplicateWarning": "Dagoeneko zerrenda bat duzu izen horrekin",
"getStarted": "Hasi!",
"addFirstTime": "Ongi etorri, gehitu zure lehen zerrenda!",
"sortByName": "THE",
"sortByRating": "Puntuazioa",
"sortByReleaseDate": "data",
"sortByCustom": "pertsonalizatua",
"delete": "ezabatu",
"moveLeft": "Mugitu ezkerrera",
"moveRight": "Mugitu eskuinera",
"emptyList": "Zerrenda hau hutsik dago",
"addGame": "Gehitu jokoa",
"view": "Zerrenda ikuspegia",
"moveList": "Mugitu zerrenda",
"sortList": "Sailkapen zerrenda",
"coversSizeTitle": "Estaldurak zehar",
"views": {
"single": "Default",
"wide": "Compact",
"text": "Testua soilik",
"grid": "Grid"
}
},
"settings": {
"about": "About",
"platforms": "plataformak",
"gameBoard": "Joko taula",
"tags": "Tags",
"account": "Kontu-",
"global": "Global",
"darkTheme": "Gai iluna",
"reloading": "Berkargatzean ...",
"releases": "oharrak",
"newsletter": "Jaso eguneratze mezu elektronikoak (laster etorriko dira)",
"branding": "Plataforma marka (koloreak, logotipoa, etab ...)",
"language": "Hizkuntza",
"languages": {
"en": "English",
"es": "Espainiako",
"pl": "Poloniako",
"de": "Alemaniako",
"ar": "arabiera",
"fr": "Frantziako",
"it": "Italiako",
"eu": "Euskal",
"cs": "Txekiar",
"ja": "Japoniako"
},
"ownedLists": "Nire plataformak bakarrik erakutsi",
"sortPlatforms": "Ordenatu plataformak alfabetikoki",
"ratings": "Ezkutatu jokoaren puntuazioa",
"signOut": "Hasi saioa",
"wallpaper": {
"title": "Kargatu horma-irudia",
"transparency": "Gardentasuna eman",
"currentWallpaper": "Uneko horma-irudia",
"removeWallpaper": "Kendu papera"
},
"deleteAccount": {
"button": "Ezabatu kontua",
"message": "Zure kontuko datuak betiko ezabatuko dira.",
"title": "Ziur zaude?"
}
},
"tags": {
"title": "Jokoaren etiketak",
"addTag": "Gehitu etiketa",
"createTag": "Etiketa sortu",
"inputPlaceholder": "Egunaren izena",
"applyTag": "Aplikatu etiketa",
"useTags": "Erabili etiketak zure jokoak hobeto antolatzeko"
},
"gameSearch": {
"title": "Gehitu jokoak",
"inputPlaceholder": "Bilatu hemen",
"alreadyInList": "dagoeneko zure zerrendako bilaketa-emaitzetatik",
"noResultsFound": "Emaitzarik ez",
"missingGame": "Joko bat falta al zaizu? Lagundu komunitateari eta",
"addToIGDB": "Gehitu IGDB-ri"
},
"notes": {
"addNote": "Oharra gehitu"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "Retour",
"save": "sauvegarder",
"cancel": "Annuler",
"create": "Créer",
"filter": "Filtre",
"by": "par",
"no": "non",
"yes": "Oui",
"or": "ou",
"returnHome": "Rentrer à la maison",
"pageNotFound": "Page non trouvée"
},
"errors": {
"loading": "Erreur lors du chargement des données"
},
"releases": {
"published": "Date de publication}"
},
"platforms": {
"donateMessage": "Gamebrary est gratuit et open source, envisagez daider son développement en",
"donating": "faire un don",
"reportBugs": "signaler des bugs",
"submitFeedback": "soumettre des commentaires"
},
"igdbCredit": {
"poweredByIgdb": "Propulsé par IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "Papier peint personnalisé",
"shareLink": "Liens partageables (expérimental)",
"dangerZone": "Zone dangereuse"
}
},
"sessionExpired": {
"title": "La session a expiré",
"login": "S'identifier",
"exit": "Sortie"
},
"gameDetail": {
"videos": "Vidéos",
"screenshots": "Captures d'écran",
"perspective": "La perspective",
"releaseDate": "Date de sortie",
"timeToBeat": "Temps à battre",
"gameModes": "Mode de jeu",
"genres": "Genre",
"gamePlatforms": "Aussi disponible pour:",
"developers": "Développeur",
"publishers": "Les éditeurs",
"removeFromList": "Retirer de la liste",
"links": {
"official": "Site officiel",
"wikia": "Fandom",
"wikipedia": "Wikipédia",
"facebook": "Facebook",
"twitter": "Gazouillement",
"twitch": "Tic",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play Store",
"steam": "Vapeur",
"reddit": "Reddit",
"discord": "Discorde",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Editer le nom de la liste",
"type": "Type de liste",
"placeholder": "Tapez votre nom de liste ici",
"suggestions": {
"owned": "Possédé",
"wishlist": "Liste de souhaits",
"currentlyPlaying": "En train de jouer",
"completed": "Terminé"
},
"input": "Entrez votre propre",
"add": "Ajouter la liste",
"duplicateWarning": "Vous avez déjà une liste avec ce nom",
"getStarted": "Commencer!",
"addFirstTime": "Bienvenue, ajoutez votre première liste!",
"sortByName": "LA",
"sortByRating": "But",
"sortByReleaseDate": "Rendez-vous amoureux",
"sortByCustom": "Douane",
"delete": "Effacer",
"moveLeft": "Se déplacer à gauche",
"moveRight": "Déplacer vers la droite",
"emptyList": "Cette liste est vide",
"addGame": "Ajouter un jeu",
"view": "Vue liste",
"moveList": "Déplacer la liste",
"sortList": "Liste de tri",
"coversSizeTitle": "Couvre à travers",
"views": {
"single": "Défaut",
"wide": "Compact",
"text": "Texte seulement",
"grid": "la grille"
}
},
"global": {
"back": "Retour",
"save": "sauvegarder",
"cancel": "Annuler",
"create": "Créer",
"filter": "Filtre",
"by": "par",
"no": "non",
"yes": "Oui",
"or": "ou",
"returnHome": "Rentrer à la maison",
"pageNotFound": "Page non trouvée"
},
"errors": {
"loading": "Erreur lors du chargement des données"
},
"releases": {
"published": "Date de publication}"
},
"platforms": {
"donateMessage": "Gamebrary est gratuit et open source, envisagez daider son développement en",
"donating": "faire un don",
"reportBugs": "signaler des bugs",
"submitFeedback": "soumettre des commentaires"
},
"igdbCredit": {
"poweredByIgdb": "Propulsé par IGDB"
},
"gameBoard": {
"settings": {
"about": "À propos",
"platforms": "Plateformes",
"gameBoard": "Plateau de jeu",
"tags": "Mots clés",
"account": "Compte",
"global": "Global",
"darkTheme": "Thème sombre",
"reloading": "Rechargement ...",
"releases": "Communiqués",
"newsletter": "Recevoir des emails de mise à jour (à venir)",
"branding": "Marque de la plateforme (couleurs, logo, etc ...)",
"language": "La langue",
"languages": {
"en": "Anglais",
"es": "Espanol",
"pl": "polonais",
"de": "allemand",
"ar": "arabe",
"fr": "français",
"it": "italien",
"eu": "basque",
"cs": "tchèque",
"ja": "Japonais"
},
"ownedLists": "Afficher uniquement mes plateformes",
"sortPlatforms": "Trier les plateformes par ordre alphabétique",
"ratings": "Masquer le score du jeu",
"signOut": "Déconnexion",
"wallpaper": {
"title": "Télécharger un fond d'écran",
"transparency": "Autoriser la transparence",
"currentWallpaper": "Fond d'écran actuel",
"removeWallpaper": "Supprimer le papier peint"
},
"deleteAccount": {
"button": "Supprimer le compte",
"message": "Les données de votre compte seront définitivement supprimées.",
"title": "Êtes-vous sûr?"
}
},
"tags": {
"title": "Balises de jeu",
"addTag": "Ajouter une étiquette",
"createTag": "Créer un tag",
"inputPlaceholder": "Nom du jour",
"applyTag": "Appliquer le tag",
"useTags": "Utilisez des tags pour mieux organiser vos jeux"
},
"gameSearch": {
"title": "Ajouter des jeux à",
"inputPlaceholder": "Cherche ici",
"alreadyInList": "des résultats de recherche déjà dans votre liste",
"noResultsFound": "Aucun résultat",
"missingGame": "Manquer un jeu? Aidez la communauté et",
"addToIGDB": "Ajoutez-le à IGDB"
},
"notes": {
"addNote": "Ajouter une note"
"wallpaper": "Papier peint personnalisé",
"shareLink": "Liens partageables (expérimental)",
"dangerZone": "Zone dangereuse"
}
},
"sessionExpired": {
"title": "La session a expiré",
"login": "S'identifier",
"exit": "Sortie"
},
"gameDetail": {
"videos": "Vidéos",
"screenshots": "Captures d'écran",
"perspective": "La perspective",
"releaseDate": "Date de sortie",
"timeToBeat": "Temps à battre",
"gameModes": "Mode de jeu",
"genres": "Genre",
"gamePlatforms": "Aussi disponible pour:",
"developers": "Développeur",
"publishers": "Les éditeurs",
"removeFromList": "Retirer de la liste",
"links": {
"official": "Site officiel",
"wikia": "Fandom",
"wikipedia": "Wikipédia",
"facebook": "Facebook",
"twitter": "Gazouillement",
"twitch": "Tic",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play Store",
"steam": "Vapeur",
"reddit": "Reddit",
"discord": "Discorde",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Editer le nom de la liste",
"type": "Type de liste",
"placeholder": "Tapez votre nom de liste ici",
"suggestions": {
"owned": "Possédé",
"wishlist": "Liste de souhaits",
"currentlyPlaying": "En train de jouer",
"completed": "Terminé"
},
"input": "Entrez votre propre",
"add": "Ajouter la liste",
"duplicateWarning": "Vous avez déjà une liste avec ce nom",
"getStarted": "Commencer!",
"addFirstTime": "Bienvenue, ajoutez votre première liste!",
"sortByName": "LA",
"sortByRating": "But",
"sortByReleaseDate": "Rendez-vous amoureux",
"sortByCustom": "Douane",
"delete": "Effacer",
"moveLeft": "Se déplacer à gauche",
"moveRight": "Déplacer vers la droite",
"emptyList": "Cette liste est vide",
"addGame": "Ajouter un jeu",
"view": "Vue liste",
"moveList": "Déplacer la liste",
"sortList": "Liste de tri",
"coversSizeTitle": "Couvre à travers",
"views": {
"single": "Défaut",
"wide": "Compact",
"text": "Texte seulement",
"grid": "la grille"
}
},
"settings": {
"about": "À propos",
"platforms": "Plateformes",
"gameBoard": "Plateau de jeu",
"tags": "Mots clés",
"account": "Compte",
"global": "Global",
"darkTheme": "Thème sombre",
"reloading": "Rechargement ...",
"releases": "Communiqués",
"newsletter": "Recevoir des emails de mise à jour (à venir)",
"branding": "Marque de la plateforme (couleurs, logo, etc ...)",
"language": "La langue",
"languages": {
"en": "Anglais",
"es": "Espanol",
"pl": "polonais",
"de": "allemand",
"ar": "arabe",
"fr": "français",
"it": "italien",
"eu": "basque",
"cs": "tchèque",
"ja": "Japonais"
},
"ownedLists": "Afficher uniquement mes plateformes",
"sortPlatforms": "Trier les plateformes par ordre alphabétique",
"ratings": "Masquer le score du jeu",
"signOut": "Déconnexion",
"wallpaper": {
"title": "Télécharger un fond d'écran",
"transparency": "Autoriser la transparence",
"currentWallpaper": "Fond d'écran actuel",
"removeWallpaper": "Supprimer le papier peint"
},
"deleteAccount": {
"button": "Supprimer le compte",
"message": "Les données de votre compte seront définitivement supprimées.",
"title": "Êtes-vous sûr?"
}
},
"tags": {
"title": "Balises de jeu",
"addTag": "Ajouter une étiquette",
"createTag": "Créer un tag",
"inputPlaceholder": "Nom du jour",
"applyTag": "Appliquer le tag",
"useTags": "Utilisez des tags pour mieux organiser vos jeux"
},
"gameSearch": {
"title": "Ajouter des jeux à",
"inputPlaceholder": "Cherche ici",
"alreadyInList": "des résultats de recherche déjà dans votre liste",
"noResultsFound": "Aucun résultat",
"missingGame": "Manquer un jeu? Aidez la communauté et",
"addToIGDB": "Ajoutez-le à IGDB"
},
"notes": {
"addNote": "Ajouter une note"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "Indietro",
"save": "Salvare",
"cancel": "Annulla",
"create": "Creare",
"filter": "Filtro",
"by": "di",
"no": "no",
"yes": "sì",
"or": "o",
"returnHome": "Torna a casa",
"pageNotFound": "pagina non trovata"
},
"errors": {
"loading": "Errore durante il caricamento dei dati"
},
"releases": {
"published": "Pubblicato {data}"
},
"platforms": {
"donateMessage": "Gamebrary è gratuito e open source, considera di aiutarne lo sviluppo",
"donating": "la donazione",
"reportBugs": "segnalazione di bug",
"submitFeedback": "invio feedback"
},
"igdbCredit": {
"poweredByIgdb": "Alimentato da IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "Sfondo personalizzato",
"shareLink": "Link condivisibili (sperimentale)",
"dangerZone": "Zona pericolosa"
}
},
"sessionExpired": {
"title": "Sessione scaduta",
"login": "Accesso",
"exit": "Uscita"
},
"gameDetail": {
"videos": "video",
"screenshots": "Screenshots",
"perspective": "Prospettiva",
"releaseDate": "Data di rilascio",
"timeToBeat": "È tempo di battere",
"gameModes": "Modalità di gioco",
"genres": "Genere",
"gamePlatforms": "Disponibile anche per:",
"developers": "Sviluppatore",
"publishers": "editori",
"removeFromList": "Rimuovere dalla lista",
"links": {
"official": "Sito ufficiale",
"wikia": "Mondo dei fan",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "cinguettio",
"twitch": "Contrazione",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play Store",
"steam": "Vapore",
"reddit": "Reddit",
"discord": "Discordia",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Modifica il nome dell'elenco",
"type": "Tipo di elenco",
"placeholder": "Digita qui il nome della tua lista",
"suggestions": {
"owned": "Di proprietà",
"wishlist": "Lista dei desideri",
"currentlyPlaying": "Attualmente in riproduzione",
"completed": "Completato"
},
"input": "Inserisci il tuo",
"add": "Aggiungi elenco",
"duplicateWarning": "Hai già un elenco con questo nome",
"getStarted": "Iniziare!",
"addFirstTime": "Benvenuto, aggiungi il tuo primo elenco!",
"sortByName": "IL",
"sortByRating": "Punto",
"sortByReleaseDate": "Data",
"sortByCustom": "costume",
"delete": "Elimina",
"moveLeft": "Muovere a sinistra",
"moveRight": "Vai a destra",
"emptyList": "Questo elenco è vuoto",
"addGame": "Aggiungi gioco",
"view": "Visualizzazione elenco",
"moveList": "Sposta elenco",
"sortList": "Elenco di ordinamento",
"coversSizeTitle": "Copre attraverso",
"views": {
"single": "Predefinito",
"wide": "Compatto",
"text": "Solo testo",
"grid": "Griglia"
}
},
"global": {
"back": "Indietro",
"save": "Salvare",
"cancel": "Annulla",
"create": "Creare",
"filter": "Filtro",
"by": "di",
"no": "no",
"yes": "sì",
"or": "o",
"returnHome": "Torna a casa",
"pageNotFound": "pagina non trovata"
},
"errors": {
"loading": "Errore durante il caricamento dei dati"
},
"releases": {
"published": "Pubblicato {data}"
},
"platforms": {
"donateMessage": "Gamebrary è gratuito e open source, considera di aiutarne lo sviluppo",
"donating": "la donazione",
"reportBugs": "segnalazione di bug",
"submitFeedback": "invio feedback"
},
"igdbCredit": {
"poweredByIgdb": "Alimentato da IGDB"
},
"gameBoard": {
"settings": {
"about": "Di",
"platforms": "piattaforme",
"gameBoard": "Tavolo da gioco",
"tags": "tag",
"account": "account",
"global": "Globale",
"darkTheme": "Tema scuro",
"reloading": "Ricaricamento ...",
"releases": "Uscite",
"newsletter": "Ricevi email di aggiornamento (in arrivo)",
"branding": "Marchio della piattaforma (colori, logo, ecc ...)",
"language": "linguaggio",
"languages": {
"en": "Inglese",
"es": "spagnolo",
"pl": "polacco",
"de": "Tedesco",
"ar": "Arabo",
"fr": "francese",
"it": "italiano",
"eu": "basco",
"cs": "ceco",
"ja": "giapponese"
},
"ownedLists": "Mostra solo le mie piattaforme",
"sortPlatforms": "Ordina le piattaforme in ordine alfabetico",
"ratings": "Nascondi il punteggio del gioco",
"signOut": "disconnessione",
"wallpaper": {
"title": "Carica sfondo",
"transparency": "Consenti trasparenza",
"currentWallpaper": "Sfondo corrente",
"removeWallpaper": "Rimuovi sfondo"
},
"deleteAccount": {
"button": "Eliminare l'account",
"message": "I dati del tuo account verranno eliminati per sempre.",
"title": "Sei sicuro?"
}
},
"tags": {
"title": "Tag di gioco",
"addTag": "Aggiungi Tag",
"createTag": "Crea tag",
"inputPlaceholder": "Nome del giorno",
"applyTag": "Applica tag",
"useTags": "Usa i tag per organizzare meglio i tuoi giochi"
},
"gameSearch": {
"title": "Aggiungi giochi a",
"inputPlaceholder": "Cerca qui",
"alreadyInList": "dai risultati di ricerca già nel tuo elenco",
"noResultsFound": "Nessun risultato",
"missingGame": "Manca una partita? Aiuta la comunità e",
"addToIGDB": "Aggiungilo a IGDB"
},
"notes": {
"addNote": "Aggiungi nota"
"wallpaper": "Sfondo personalizzato",
"shareLink": "Link condivisibili (sperimentale)",
"dangerZone": "Zona pericolosa"
}
},
"sessionExpired": {
"title": "Sessione scaduta",
"login": "Accesso",
"exit": "Uscita"
},
"gameDetail": {
"videos": "video",
"screenshots": "Screenshots",
"perspective": "Prospettiva",
"releaseDate": "Data di rilascio",
"timeToBeat": "È tempo di battere",
"gameModes": "Modalità di gioco",
"genres": "Genere",
"gamePlatforms": "Disponibile anche per:",
"developers": "Sviluppatore",
"publishers": "editori",
"removeFromList": "Rimuovere dalla lista",
"links": {
"official": "Sito ufficiale",
"wikia": "Mondo dei fan",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "cinguettio",
"twitch": "Contrazione",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Play Store",
"steam": "Vapore",
"reddit": "Reddit",
"discord": "Discordia",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Modifica il nome dell'elenco",
"type": "Tipo di elenco",
"placeholder": "Digita qui il nome della tua lista",
"suggestions": {
"owned": "Di proprietà",
"wishlist": "Lista dei desideri",
"currentlyPlaying": "Attualmente in riproduzione",
"completed": "Completato"
},
"input": "Inserisci il tuo",
"add": "Aggiungi elenco",
"duplicateWarning": "Hai già un elenco con questo nome",
"getStarted": "Iniziare!",
"addFirstTime": "Benvenuto, aggiungi il tuo primo elenco!",
"sortByName": "IL",
"sortByRating": "Punto",
"sortByReleaseDate": "Data",
"sortByCustom": "costume",
"delete": "Elimina",
"moveLeft": "Muovere a sinistra",
"moveRight": "Vai a destra",
"emptyList": "Questo elenco è vuoto",
"addGame": "Aggiungi gioco",
"view": "Visualizzazione elenco",
"moveList": "Sposta elenco",
"sortList": "Elenco di ordinamento",
"coversSizeTitle": "Copre attraverso",
"views": {
"single": "Predefinito",
"wide": "Compatto",
"text": "Solo testo",
"grid": "Griglia"
}
},
"settings": {
"about": "Di",
"platforms": "piattaforme",
"gameBoard": "Tavolo da gioco",
"tags": "tag",
"account": "account",
"global": "Globale",
"darkTheme": "Tema scuro",
"reloading": "Ricaricamento ...",
"releases": "Uscite",
"newsletter": "Ricevi email di aggiornamento (in arrivo)",
"branding": "Marchio della piattaforma (colori, logo, ecc ...)",
"language": "linguaggio",
"languages": {
"en": "Inglese",
"es": "spagnolo",
"pl": "polacco",
"de": "Tedesco",
"ar": "Arabo",
"fr": "francese",
"it": "italiano",
"eu": "basco",
"cs": "ceco",
"ja": "giapponese"
},
"ownedLists": "Mostra solo le mie piattaforme",
"sortPlatforms": "Ordina le piattaforme in ordine alfabetico",
"ratings": "Nascondi il punteggio del gioco",
"signOut": "disconnessione",
"wallpaper": {
"title": "Carica sfondo",
"transparency": "Consenti trasparenza",
"currentWallpaper": "Sfondo corrente",
"removeWallpaper": "Rimuovi sfondo"
},
"deleteAccount": {
"button": "Eliminare l'account",
"message": "I dati del tuo account verranno eliminati per sempre.",
"title": "Sei sicuro?"
}
},
"tags": {
"title": "Tag di gioco",
"addTag": "Aggiungi Tag",
"createTag": "Crea tag",
"inputPlaceholder": "Nome del giorno",
"applyTag": "Applica tag",
"useTags": "Usa i tag per organizzare meglio i tuoi giochi"
},
"gameSearch": {
"title": "Aggiungi giochi a",
"inputPlaceholder": "Cerca qui",
"alreadyInList": "dai risultati di ricerca già nel tuo elenco",
"noResultsFound": "Nessun risultato",
"missingGame": "Manca una partita? Aiuta la comunità e",
"addToIGDB": "Aggiungilo a IGDB"
},
"notes": {
"addNote": "Aggiungi nota"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "バック",
"save": "保存する",
"cancel": "キャンセル",
"create": "作成する",
"filter": "フィルタ",
"by": "によって",
"no": "いや",
"yes": "はい",
"or": "または",
"returnHome": "帰宅",
"pageNotFound": "ページが見つかりません"
},
"errors": {
"loading": "データの読み込みエラー"
},
"releases": {
"published": "{date}を公開しました"
},
"platforms": {
"donateMessage": "Gamebraryは無料でオープンソースです。その開発を支援することを検討してください",
"donating": "寄付",
"reportBugs": "バグを報告する",
"submitFeedback": "フィードバックを送信する"
},
"igdbCredit": {
"poweredByIgdb": "IGDBを搭載"
},
"gameBoard": {
"settings": {
"wallpaper": "カスタム壁紙",
"shareLink": "共有可能なリンク(実験的)",
"dangerZone": "危険区域"
}
},
"sessionExpired": {
"title": "セッションの有効期限が切れ",
"login": "ログイン",
"exit": "出口"
},
"gameDetail": {
"videos": "動画",
"screenshots": "スクリーンショット",
"perspective": "遠近法",
"releaseDate": "発売日",
"timeToBeat": "ビートする時間",
"gameModes": "ゲームモード",
"genres": "ジャンル",
"gamePlatforms": "以下にも利用可能:",
"developers": "開発者",
"publishers": "出版社",
"removeFromList": "リストから削除する",
"links": {
"official": "オフィシャルサイト",
"wikia": "ファンダム",
"wikipedia": "ウィキペディア",
"facebook": "フェイスブック",
"twitter": "Twitter",
"twitch": "けいれん",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "プレイストア",
"steam": "蒸気",
"reddit": "Reddit",
"discord": "不和",
"google_plus": "Google Plus",
"tumblr": "タンブラー",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "リスト名を編集",
"type": "リストタイプ",
"placeholder": "ここにリスト名を入力してください",
"suggestions": {
"owned": "所有",
"wishlist": "ウィッシュリスト",
"currentlyPlaying": "現在プレイ中",
"completed": "完了しました"
},
"input": "あなた自身を入力してください",
"add": "リストを追加",
"duplicateWarning": "この名前のリストは既にあります",
"getStarted": "始めましょう!",
"addFirstTime": "ようこそ、最初のリストを追加してください!",
"sortByName": "THE",
"sortByRating": "スコア",
"sortByReleaseDate": "日付",
"sortByCustom": "カスタム",
"delete": "削除する",
"moveLeft": "左に移動",
"moveRight": "右に動く",
"emptyList": "このリストは空です",
"addGame": "ゲームを追加",
"view": "リストビュー",
"moveList": "リストを移動する",
"sortList": "ソートリスト",
"coversSizeTitle": "全体をカバー",
"views": {
"single": "デフォルト",
"wide": "コンパクト",
"text": "テキストのみ",
"grid": "グリッド"
}
},
"global": {
"back": "バック",
"save": "保存する",
"cancel": "キャンセル",
"create": "作成する",
"filter": "フィルタ",
"by": "によって",
"no": "いや",
"yes": "はい",
"or": "または",
"returnHome": "帰宅",
"pageNotFound": "ページが見つかりません"
},
"errors": {
"loading": "データの読み込みエラー"
},
"releases": {
"published": "{date}を公開しました"
},
"platforms": {
"donateMessage": "Gamebraryは無料でオープンソースです。その開発を支援することを検討してください",
"donating": "寄付",
"reportBugs": "バグを報告する",
"submitFeedback": "フィードバックを送信する"
},
"igdbCredit": {
"poweredByIgdb": "IGDBを搭載"
},
"gameBoard": {
"settings": {
"about": "約",
"platforms": "プラットフォーム",
"gameBoard": "ゲームボード",
"tags": "タグ",
"account": "アカウント",
"global": "グローバル",
"darkTheme": "暗いテーマ",
"reloading": "再読み込みしています...",
"releases": "リリース",
"newsletter": "更新メールを受け取る(近日公開予定)",
"branding": "プラットフォームのブランディング(色、ロゴなど)",
"language": "言語",
"languages": {
"en": "英語",
"es": "スペイン語",
"pl": "研磨",
"de": "ドイツ人",
"ar": "アラビア語",
"fr": "フランス語",
"it": "イタリアの",
"eu": "バスク",
"cs": "チェコ語",
"ja": "日本人"
},
"ownedLists": "プラットフォームのみを表示する",
"sortPlatforms": "プラットフォームをアルファベット順に並べ替えます",
"ratings": "ゲームのスコアを非表示",
"signOut": "サインアウト",
"wallpaper": {
"title": "壁紙をアップロード",
"transparency": "透明化を許可する",
"currentWallpaper": "現在の壁紙",
"removeWallpaper": "壁紙を削除"
},
"deleteAccount": {
"button": "アカウントを削除する",
"message": "アカウントデータは完全に削除されます。",
"title": "本気ですか?"
}
},
"tags": {
"title": "ゲームタグ",
"addTag": "タグ付けする",
"createTag": "タグを作成",
"inputPlaceholder": "曜日名",
"applyTag": "タグを適用",
"useTags": "タグを使用してゲームを整理します"
},
"gameSearch": {
"title": "にゲームを追加",
"inputPlaceholder": "検索",
"alreadyInList": "すでにリストにある検索結果から",
"noResultsFound": "結果がありません",
"missingGame": "ゲームが見つかりませんか?コミュニティを助け、",
"addToIGDB": "IGDBに追加します"
},
"notes": {
"addNote": "メモを追加"
"wallpaper": "カスタム壁紙",
"shareLink": "共有可能なリンク(実験的)",
"dangerZone": "危険区域"
}
},
"sessionExpired": {
"title": "セッションの有効期限が切れ",
"login": "ログイン",
"exit": "出口"
},
"gameDetail": {
"videos": "動画",
"screenshots": "スクリーンショット",
"perspective": "遠近法",
"releaseDate": "発売日",
"timeToBeat": "ビートする時間",
"gameModes": "ゲームモード",
"genres": "ジャンル",
"gamePlatforms": "以下にも利用可能:",
"developers": "開発者",
"publishers": "出版社",
"removeFromList": "リストから削除する",
"links": {
"official": "オフィシャルサイト",
"wikia": "ファンダム",
"wikipedia": "ウィキペディア",
"facebook": "フェイスブック",
"twitter": "Twitter",
"twitch": "けいれん",
"instagram": "Instagram",
"youtube": "Youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "プレイストア",
"steam": "蒸気",
"reddit": "Reddit",
"discord": "不和",
"google_plus": "Google Plus",
"tumblr": "タンブラー",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "リスト名を編集",
"type": "リストタイプ",
"placeholder": "ここにリスト名を入力してください",
"suggestions": {
"owned": "所有",
"wishlist": "ウィッシュリスト",
"currentlyPlaying": "現在プレイ中",
"completed": "完了しました"
},
"input": "あなた自身を入力してください",
"add": "リストを追加",
"duplicateWarning": "この名前のリストは既にあります",
"getStarted": "始めましょう!",
"addFirstTime": "ようこそ、最初のリストを追加してください!",
"sortByName": "THE",
"sortByRating": "スコア",
"sortByReleaseDate": "日付",
"sortByCustom": "カスタム",
"delete": "削除する",
"moveLeft": "左に移動",
"moveRight": "右に動く",
"emptyList": "このリストは空です",
"addGame": "ゲームを追加",
"view": "リストビュー",
"moveList": "リストを移動する",
"sortList": "ソートリスト",
"coversSizeTitle": "全体をカバー",
"views": {
"single": "デフォルト",
"wide": "コンパクト",
"text": "テキストのみ",
"grid": "グリッド"
}
},
"settings": {
"about": "約",
"platforms": "プラットフォーム",
"gameBoard": "ゲームボード",
"tags": "タグ",
"account": "アカウント",
"global": "グローバル",
"darkTheme": "暗いテーマ",
"reloading": "再読み込みしています...",
"releases": "リリース",
"newsletter": "更新メールを受け取る(近日公開予定)",
"branding": "プラットフォームのブランディング(色、ロゴなど)",
"language": "言語",
"languages": {
"en": "英語",
"es": "スペイン語",
"pl": "研磨",
"de": "ドイツ人",
"ar": "アラビア語",
"fr": "フランス語",
"it": "イタリアの",
"eu": "バスク",
"cs": "チェコ語",
"ja": "日本人"
},
"ownedLists": "プラットフォームのみを表示する",
"sortPlatforms": "プラットフォームをアルファベット順に並べ替えます",
"ratings": "ゲームのスコアを非表示",
"signOut": "サインアウト",
"wallpaper": {
"title": "壁紙をアップロード",
"transparency": "透明化を許可する",
"currentWallpaper": "現在の壁紙",
"removeWallpaper": "壁紙を削除"
},
"deleteAccount": {
"button": "アカウントを削除する",
"message": "アカウントデータは完全に削除されます。",
"title": "本気ですか?"
}
},
"tags": {
"title": "ゲームタグ",
"addTag": "タグ付けする",
"createTag": "タグを作成",
"inputPlaceholder": "曜日名",
"applyTag": "タグを適用",
"useTags": "タグを使用してゲームを整理します"
},
"gameSearch": {
"title": "にゲームを追加",
"inputPlaceholder": "検索",
"alreadyInList": "すでにリストにある検索結果から",
"noResultsFound": "結果がありません",
"missingGame": "ゲームが見つかりませんか?コミュニティを助け、",
"addToIGDB": "IGDBに追加します"
},
"notes": {
"addNote": "メモを追加"
}
}

View file

@ -1,171 +1,171 @@
{
"global": {
"back": "Z powrotem",
"save": "Zapisać",
"cancel": "Anuluj",
"create": "Stwórz",
"filter": "Filtr",
"by": "przez",
"no": "Nie",
"yes": "tak",
"or": "lub",
"returnHome": "Wrócić do domu",
"pageNotFound": "Strona nie znaleziona"
},
"errors": {
"loading": "Błąd ładowania danych"
},
"releases": {
"published": "Data publikacji}"
},
"platforms": {
"donateMessage": "Gamebrary jest darmowym i otwartym oprogramowaniem, rozważ pomoc w jego rozwoju",
"donating": "darowizny",
"reportBugs": "zgłaszanie błędów",
"submitFeedback": "przesyłanie opinii"
},
"igdbCredit": {
"poweredByIgdb": "Obsługiwane przez IGDB"
},
"gameBoard": {
"settings": {
"wallpaper": "Własna tapeta",
"shareLink": "Udostępniane linki (eksperymentalne)",
"dangerZone": "Strefa niebezpieczeństwa"
}
},
"sessionExpired": {
"title": "Sesja wygasła",
"login": "Zaloguj Się",
"exit": "Wyjście"
},
"gameDetail": {
"videos": "Wideo",
"screenshots": "Zrzuty ekranu",
"perspective": "Perspektywiczny",
"releaseDate": "Data wydania",
"timeToBeat": "Czas na pokonanie",
"gameModes": "Tryb gry",
"genres": "Gatunek muzyczny",
"gamePlatforms": "Dostępne również dla:",
"developers": "Deweloper",
"publishers": "Wydawcy",
"removeFromList": "Usunąć z listy",
"links": {
"official": "Oficjalna strona",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Świergot",
"twitch": "Skurcz",
"instagram": "Instagram",
"youtube": "youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Sklep Play",
"steam": "Parowy",
"reddit": "Reddit",
"discord": "Niezgoda",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Edytuj nazwę listy",
"type": "Rodzaj listy",
"placeholder": "Wpisz tutaj swoją nazwę listy",
"suggestions": {
"owned": "Posiadane",
"wishlist": "Lista życzeń",
"currentlyPlaying": "Obecnie gra",
"completed": "Zakończony"
},
"input": "Wpisz własne",
"add": "Dodaj listę",
"duplicateWarning": "Masz już listę o tej nazwie",
"getStarted": "Zaczynać!",
"addFirstTime": "Witamy, dodaj swoją pierwszą listę!",
"sortByName": "",
"sortByRating": "Wynik",
"sortByReleaseDate": "Data",
"sortByCustom": "Zwyczaj",
"delete": "Kasować",
"moveLeft": "Przesuń w lewo",
"moveRight": "Ruch w prawo",
"emptyList": "Ta lista jest pusta",
"addGame": "Dodaj grę",
"view": "Widok listy",
"moveList": "Przenieś listę",
"sortList": "Sortuj listę",
"coversSizeTitle": "Obejmuje w poprzek",
"views": {
"single": "Domyślna",
"wide": "Kompaktowy",
"text": "Tylko tekst",
"grid": "Krata"
}
},
"global": {
"back": "Z powrotem",
"save": "Zapisać",
"cancel": "Anuluj",
"create": "Stwórz",
"filter": "Filtr",
"by": "przez",
"no": "Nie",
"yes": "tak",
"or": "lub",
"returnHome": "Wrócić do domu",
"pageNotFound": "Strona nie znaleziona"
},
"errors": {
"loading": "Błąd ładowania danych"
},
"releases": {
"published": "Data publikacji}"
},
"platforms": {
"donateMessage": "Gamebrary jest darmowym i otwartym oprogramowaniem, rozważ pomoc w jego rozwoju",
"donating": "darowizny",
"reportBugs": "zgłaszanie błędów",
"submitFeedback": "przesyłanie opinii"
},
"igdbCredit": {
"poweredByIgdb": "Obsługiwane przez IGDB"
},
"gameBoard": {
"settings": {
"about": "O",
"platforms": "Platformy",
"gameBoard": "Gra planszowa",
"tags": "Tagi",
"account": "Konto",
"global": "Światowy",
"darkTheme": "ciemny schemat",
"reloading": "Ponowne ładowanie ...",
"releases": "Wydawnictwa",
"newsletter": "Otrzymuj e-maile z aktualizacją (wkrótce)",
"branding": "Znakowanie platformy (kolory, logo itp.)",
"language": "Język",
"languages": {
"en": "język angielski",
"es": "hiszpański",
"pl": "Polskie",
"de": "Niemiecki",
"ar": "arabski",
"fr": "Francuski",
"it": "Włoski",
"eu": "baskijski",
"cs": "Czech",
"ja": "język japoński"
},
"ownedLists": "Pokaż tylko moje platformy",
"sortPlatforms": "Sortuj platformy alfabetycznie",
"ratings": "Ukryj wynik gry",
"signOut": "Wyloguj się",
"wallpaper": {
"title": "Prześlij tapetę",
"transparency": "Zezwól na przezroczystość",
"currentWallpaper": "Aktualna tapeta",
"removeWallpaper": "Usuń tapetę"
},
"deleteAccount": {
"button": "Usuń konto",
"message": "Twoje dane zostaną usunięte na zawsze.",
"title": "Jesteś pewny?"
}
},
"tags": {
"title": "Tagi gier",
"addTag": "Dodaj tag",
"createTag": "Utwórz tag",
"inputPlaceholder": "Nazwa dnia",
"applyTag": "Zastosuj tag",
"useTags": "Użyj tagów, aby lepiej zorganizować swoje gry"
},
"gameSearch": {
"title": "Dodaj gry do",
"inputPlaceholder": "Szukaj tutaj",
"alreadyInList": "z wyników wyszukiwania już na twojej liście",
"noResultsFound": "Brak wyników",
"missingGame": "Brakuje gry? Pomóż społeczności i",
"addToIGDB": "Dodaj go do IGDB"
},
"notes": {
"addNote": "Dodaj notatkę"
"wallpaper": "Własna tapeta",
"shareLink": "Udostępniane linki (eksperymentalne)",
"dangerZone": "Strefa niebezpieczeństwa"
}
},
"sessionExpired": {
"title": "Sesja wygasła",
"login": "Zaloguj Się",
"exit": "Wyjście"
},
"gameDetail": {
"videos": "Wideo",
"screenshots": "Zrzuty ekranu",
"perspective": "Perspektywiczny",
"releaseDate": "Data wydania",
"timeToBeat": "Czas na pokonanie",
"gameModes": "Tryb gry",
"genres": "Gatunek muzyczny",
"gamePlatforms": "Dostępne również dla:",
"developers": "Deweloper",
"publishers": "Wydawcy",
"removeFromList": "Usunąć z listy",
"links": {
"official": "Oficjalna strona",
"wikia": "Fandom",
"wikipedia": "Wikipedia",
"facebook": "Facebook",
"twitter": "Świergot",
"twitch": "Skurcz",
"instagram": "Instagram",
"youtube": "youtube",
"iphone": "iOS",
"ipad": "iPad",
"android": "Sklep Play",
"steam": "Parowy",
"reddit": "Reddit",
"discord": "Niezgoda",
"google_plus": "Google Plus",
"tumblr": "Tumblr",
"linkedin": "Linkedin",
"pinterest": "Pinterest",
"soundcloud": "Soundcloud"
}
},
"list": {
"edit": "Edytuj nazwę listy",
"type": "Rodzaj listy",
"placeholder": "Wpisz tutaj swoją nazwę listy",
"suggestions": {
"owned": "Posiadane",
"wishlist": "Lista życzeń",
"currentlyPlaying": "Obecnie gra",
"completed": "Zakończony"
},
"input": "Wpisz własne",
"add": "Dodaj listę",
"duplicateWarning": "Masz już listę o tej nazwie",
"getStarted": "Zaczynać!",
"addFirstTime": "Witamy, dodaj swoją pierwszą listę!",
"sortByName": "",
"sortByRating": "Wynik",
"sortByReleaseDate": "Data",
"sortByCustom": "Zwyczaj",
"delete": "Kasować",
"moveLeft": "Przesuń w lewo",
"moveRight": "Ruch w prawo",
"emptyList": "Ta lista jest pusta",
"addGame": "Dodaj grę",
"view": "Widok listy",
"moveList": "Przenieś listę",
"sortList": "Sortuj listę",
"coversSizeTitle": "Obejmuje w poprzek",
"views": {
"single": "Domyślna",
"wide": "Kompaktowy",
"text": "Tylko tekst",
"grid": "Krata"
}
},
"settings": {
"about": "O",
"platforms": "Platformy",
"gameBoard": "Gra planszowa",
"tags": "Tagi",
"account": "Konto",
"global": "Światowy",
"darkTheme": "ciemny schemat",
"reloading": "Ponowne ładowanie ...",
"releases": "Wydawnictwa",
"newsletter": "Otrzymuj e-maile z aktualizacją (wkrótce)",
"branding": "Znakowanie platformy (kolory, logo itp.)",
"language": "Język",
"languages": {
"en": "język angielski",
"es": "hiszpański",
"pl": "Polskie",
"de": "Niemiecki",
"ar": "arabski",
"fr": "Francuski",
"it": "Włoski",
"eu": "baskijski",
"cs": "Czech",
"ja": "język japoński"
},
"ownedLists": "Pokaż tylko moje platformy",
"sortPlatforms": "Sortuj platformy alfabetycznie",
"ratings": "Ukryj wynik gry",
"signOut": "Wyloguj się",
"wallpaper": {
"title": "Prześlij tapetę",
"transparency": "Zezwól na przezroczystość",
"currentWallpaper": "Aktualna tapeta",
"removeWallpaper": "Usuń tapetę"
},
"deleteAccount": {
"button": "Usuń konto",
"message": "Twoje dane zostaną usunięte na zawsze.",
"title": "Jesteś pewny?"
}
},
"tags": {
"title": "Tagi gier",
"addTag": "Dodaj tag",
"createTag": "Utwórz tag",
"inputPlaceholder": "Nazwa dnia",
"applyTag": "Zastosuj tag",
"useTags": "Użyj tagów, aby lepiej zorganizować swoje gry"
},
"gameSearch": {
"title": "Dodaj gry do",
"inputPlaceholder": "Szukaj tutaj",
"alreadyInList": "z wyników wyszukiwania już na twojej liście",
"noResultsFound": "Brak wyników",
"missingGame": "Brakuje gry? Pomóż społeczności i",
"addToIGDB": "Dodaj go do IGDB"
},
"notes": {
"addNote": "Dodaj notatkę"
}
}

View file

@ -72,3 +72,4 @@ new Vue({
components: { App },
template: '<App/>',
});

View file

@ -1,60 +1,62 @@
<template lang="html">
<div
class="game-board"
ref="gameBoard"
v-if="user && platform"
<div
v-if="user && platform"
ref="gameBoard"
class="game-board"
>
<game-board-placeholder
v-if="loading"
:id="gameDetailId" />
<modal
ref="game"
large
@close="closeGame"
>
<game-board-placeholder :id="gameDetailId" v-if="loading" />
<game-detail
v-if="gameDetailId"
slot="content"
:id="gameDetailId"
:list-id="gameDetailListIndex"
/>
</modal>
<modal
ref="game"
large
@close="closeGame"
<modal
ref="tag"
:title="$t('tags.applyTag')"
:message="$t('tags.useTags')"
>
<div slot="content">
<div
v-for="(tag, name) in tags"
:key="name"
class="tags"
>
<game-detail
v-if="gameDetailId"
slot="content"
:id="gameDetailId"
:list-id="gameDetailListIndex"
/>
</modal>
<tag
:label="name"
:hex="tag.hex"
:readonly="!tag.games.includes(gameTagsId)"
@action="tryAdd(tag.games, name)"
@close="removeTag(name)"
/>
</div>
</div>
</modal>
<modal
ref="tag"
:title="$t('tags.applyTag')"
:message="$t('tags.useTags')"
>
<div slot="content">
<div
class="tags"
v-for="(tag, name) in tags"
:key="name"
>
<tag
:label="name"
:hex="tag.hex"
:readonly="!tag.games.includes(gameTagsId)"
@action="tryAdd(tag.games, name)"
@close="removeTag(name)"
/>
</div>
</div>
</modal>
<template>
<list
v-for="(list, listIndex) in gameLists[platform.code]"
v-if="list && !loading"
:name="list.name"
:game-list="list.games"
:list-index="listIndex"
:key="`${list.name}-${listIndex}`"
@end="dragEnd"
/>
<template>
<list
:name="list.name"
:game-list="list.games"
:listIndex="listIndex"
:key="`${list.name}-${listIndex}`"
v-if="list && !loading"
v-for="(list, listIndex) in gameLists[platform.code]"
@end="dragEnd"
/>
<list-add />
</template>
</div>
<list-add />
</template>
</div>
</template>
<script>
@ -214,21 +216,21 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.game-board {
user-select: none;
display: flex;
align-items: flex-start;
height: calc(100vh - 48px);
padding: 0 $gp;
box-sizing: border-box;
overflow-x: auto;
overflow-x: overlay;
display: flex;
}
.game-board {
user-select: none;
display: flex;
align-items: flex-start;
height: calc(100vh - 48px);
padding: 0 $gp;
box-sizing: border-box;
overflow-x: auto;
overflow-x: overlay;
display: flex;
}
.list-placeholder {
opacity: 0.25;
}
.list-placeholder {
opacity: 0.25;
}
</style>

View file

@ -1,93 +1,120 @@
<template lang="html">
<div class="game-detail">
<header>
<aside>
<img :src="coverUrl" :alt="games[id].name" class="game-cover" />
<div class="game-detail">
<header>
<aside>
<img
:src="coverUrl"
:alt="games[id].name"
class="game-cover" >
<div class="game-rating" v-if="game && game.age_ratings">
<img
v-for="{ rating, synopsis, id } in game.age_ratings"
:key="id"
:src='`/static/img/age-ratings/${ageRatings[rating]}.png`'
:alt="synopsis"
/>
</div>
</aside>
<div
v-if="game && game.age_ratings"
class="game-rating">
<img
v-for="{ rating, synopsis, id } in game.age_ratings"
:key="id"
:src="`/static/img/age-ratings/${ageRatings[rating]}.png`"
:alt="synopsis"
>
</div>
</aside>
<article>
<h2>{{ games[id].name }}</h2>
{{ platform.name }}
<game-rating :rating="games[id].rating" v-if="games[id].rating" />
<article>
<h2>{{ games[id].name }}</h2>
{{ platform.name }}
<game-rating
v-if="games[id].rating"
:rating="games[id].rating" />
<div class="details" v-if="game">
<p class="game-description" v-html="game.summary" />
<div class="actions">
<button
v-if="list.games.includes(game.id)"
class="danger"
@click="removeGame"
>
<i class="far fa-trash-alt delete-game" />
{{ $t('gameDetail.removeFromList')}}
</button>
<div
v-if="game"
class="details">
<p
class="game-description"
v-html="game.summary" />
<div class="actions">
<button
v-if="list.games.includes(game.id)"
class="danger"
@click="removeGame"
>
<i class="far fa-trash-alt delete-game" />
{{ $t('gameDetail.removeFromList') }}
</button>
<button class="primary" v-else>
{{ $t('list.addGame') }}
<button
v-else
class="primary">
{{ $t('list.addGame') }}
</button>
</button>
<div class="tags" v-if="hasTags">
<button class="primary hollow" @click="openTags">
<i class="fas fa-tag" />
{{ $t('tags.addTag') }}
</button>
</div>
</div>
<game-notes />
<div
v-if="hasTags"
class="tags">
<button
class="primary hollow"
@click="openTags">
<i class="fas fa-tag" />
{{ $t('tags.addTag') }}
</button>
</div>
</div>
<game-notes />
<section v-if="gamePlatforms && gamePlatforms.length > 0">
<h4>{{ $t('gameDetail.gamePlatforms') }}</h4>
<section v-if="gamePlatforms && gamePlatforms.length > 0">
<h4>{{ $t('gameDetail.gamePlatforms') }}</h4>
<div class="platforms">
<platform
v-for="platform in gamePlatforms"
:key="platform.name"
:platform="platform"
/>
</div>
</section>
<div class="platforms">
<platform
v-for="platform in gamePlatforms"
:key="platform.name"
:platform="platform"
/>
</div>
</section>
<tag
v-if="games.includes(game.id)"
v-for="({ games, hex }, name) in tags"
:key="name"
:label="name"
:hex="hex"
readonly
@action="openTags"
@close="removeTag(name)"
/>
<tag
v-for="({ games, hex }, name) in tags"
v-if="games.includes(game.id)"
:key="name"
:label="name"
:hex="hex"
readonly
@action="openTags"
@close="removeTag(name)"
/>
<igdb-credit gray />
<igdb-credit gray />
<div class="tabs">
<span v-for="{ value, icon, text } in tabs" :key="value">
<label :for="value" :class="{ active: value === tab }">
<i :class="icon" />
{{ text }}
</label>
<div class="tabs">
<span
v-for="{ value, icon, text } in tabs"
:key="value">
<label
:for="value"
:class="{ active: value === tab }">
<i :class="icon" />
{{ text }}
</label>
<input type="radio" :id="value" :value="value" v-model="tab" />
</span>
</div>
<input
:id="value"
:value="value"
v-model="tab"
type="radio" >
</span>
</div>
<component :is="activeComponent" />
</div>
<component :is="activeComponent" />
</div>
<placeholder :lines="3" v-else />
</article>
</header>
</div>
<placeholder
v-else
:lines="3" />
</article>
</header>
</div>
</template>
<script>
@ -120,8 +147,14 @@ export default {
},
props: {
id: [Number, String],
listId: [Number, String],
id: {
type: [Number, String],
default: null,
},
listId: {
type: [Number, String],
default: null,
},
},
data() {
@ -247,47 +280,47 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
header {
display: grid;
grid-template-columns: 180px auto;
grid-gap: $gp;
margin-top: $gp;
header {
display: grid;
grid-template-columns: 180px auto;
grid-gap: $gp;
margin-top: $gp;
@media($small) {
grid-template-columns: auto;
}
@media($small) {
grid-template-columns: auto;
}
}
aside {
@media($small) {
text-align: center;
}
aside {
@media($small) {
text-align: center;
}
}
.game-cover {
border-radius: $border-radius;
}
.platforms {
margin-top: $gp;
display: flex;
flex-wrap: wrap;
.platform {
width: 90px;
height: 50px;
margin-right: $gp / 2;
padding: $gp / 4;
&:first-child {
margin-left: 0;
}
&:last-child {
margin-right: 0;
}
}
.game-cover {
border-radius: $border-radius;
}
.platforms {
margin-top: $gp;
display: flex;
flex-wrap: wrap;
.platform {
width: 90px;
height: 50px;
margin-right: $gp / 2;
padding: $gp / 4;
&:first-child {
margin-left: 0;
}
&:last-child {
margin-right: 0;
}
}
}
</style>

View file

@ -1,12 +1,14 @@
<template lang="html">
<div class="not-found-page">
<h1>404</h1>
<h3>{{ $t('pageNotFound') }}</h3>
<div class="not-found-page">
<h1>404</h1>
<h3>{{ $t('pageNotFound') }}</h3>
<a :href="homeUrl" class="link primary">
{{ $t('returnHome') }}
</a>
</div>
<a
:href="homeUrl"
class="link primary">
{{ $t('returnHome') }}
</a>
</div>
</template>
<script>
@ -22,28 +24,28 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.not-found-page {
color: #555555;
min-height: calc(100vh - #{$navHeight});
padding: 0 $gp;
display: flex;
align-items: center;
flex-direction: column;
}
.not-found-page {
color: #555555;
min-height: calc(100vh - #{$navHeight});
padding: 0 $gp;
display: flex;
align-items: center;
flex-direction: column;
}
h1 {
font-size: 300px;
}
h1 {
font-size: 300px;
}
h3 {
font-size: 50px;
margin-bottom: $gp;
}
h3 {
font-size: 50px;
margin-bottom: $gp;
}
a.link {
display: flex;
align-items: center;
}
a.link {
display: flex;
align-items: center;
}
</style>

View file

@ -1,16 +1,16 @@
<template lang="html">
<div class="platforms-page">
<div class="platforms">
<platform
v-for="platform in filteredPlatforms"
:key="platform.name"
:platform="platform"
clickable
/>
</div>
<page-footer />
<div class="platforms-page">
<div class="platforms">
<platform
v-for="platform in filteredPlatforms"
:key="platform.name"
:platform="platform"
clickable
/>
</div>
<page-footer />
</div>
</template>
<script>
@ -79,15 +79,15 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.platforms-page {
min-height: calc(100vh - #{$navHeight});
padding: $gp / 2 $gp;
}
.platforms-page {
min-height: calc(100vh - #{$navHeight});
padding: $gp / 2 $gp;
}
.platforms {
display: flex;
flex-direction: column;
}
.platforms {
display: flex;
flex-direction: column;
}
</style>

View file

@ -1,12 +1,23 @@
<template lang="html">
<div class="session-expired">
<h2>{{ $t('sessionExpired.title')}}</h2>
<div class="session-expired">
<h2>{{ $t('sessionExpired.title') }}</h2>
<div class="actions">
<button class="success" @click="login">{{ $t('sessionExpired.login') }}</button>
<a class="link primary" :href="exitUrl">{{ $t('sessionExpired.exit') }}</a>
</div>
<div class="actions">
<button
class="success"
@click="login"
>
{{ $t('sessionExpired.login') }}
</button>
<a
:href="exitUrl"
class="link primary"
>
{{ $t('sessionExpired.exit') }}
</a>
</div>
</div>
</template>
<script>
@ -37,23 +48,23 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.session-expired {
color: #555555;
min-height: calc(100vh - #{$navHeight});
padding: 0 $gp;
display: flex;
align-items: center;
flex-direction: column;
}
.session-expired {
color: #555555;
min-height: calc(100vh - #{$navHeight});
padding: 0 $gp;
display: flex;
align-items: center;
flex-direction: column;
}
.actions {
display: grid;
margin-top: $gp;
grid-template-columns: auto auto;
grid-gap: $gp;
text-align: center;
align-items: center;
}
.actions {
display: grid;
margin-top: $gp;
grid-template-columns: auto auto;
grid-gap: $gp;
text-align: center;
align-items: center;
}
</style>

View file

@ -1,39 +1,46 @@
<template lang="html">
<modal title="Settings" action-text="Save" @action="save">
<button class="small primary">
<i class="fas fa-cog" />
<modal
title="Settings"
action-text="Save"
@action="save">
<button class="small primary">
<i class="fas fa-cog" />
</button>
<div
slot="content"
class="settings">
<game-board-settings v-model="localSettings" />
<tags-settings v-model="localSettings" />
<div class="setting">
<i class="fas fa-sign-out-alt" />
{{ $t('settings.signOut') }}
<button
class="secondary"
@click="signOut">
{{ $t('settings.signOut') }}
</button>
</div>
<div class="settings" slot="content">
<game-board-settings v-model="localSettings" />
<tags-settings v-model="localSettings" />
<modal
:message="$t('settings.deleteAccount.message')"
:title="$t('settings.deleteAccount.title')"
:action-text="$t('settings.deleteAccount.button')"
@action="deleteAccount"
>
<div class="setting">
<i class="fas fa-exclamation-triangle" />
{{ $t('settings.deleteAccount.button') }}
<div class="setting">
<i class="fas fa-sign-out-alt" />
{{ $t('settings.signOut') }}
<button class="secondary" @click="signOut">
{{ $t('settings.signOut') }}
</button>
</div>
<modal
:message="$t('settings.deleteAccount.message')"
:title="$t('settings.deleteAccount.title')"
:action-text="$t('settings.deleteAccount.button')"
@action="deleteAccount"
>
<div class="setting">
<i class="fas fa-exclamation-triangle" />
{{ $t('settings.deleteAccount.button') }}
<button class="danger">
{{ $t('settings.deleteAccount.button') }}
</button>
</div>
</modal>
<button class="danger">
{{ $t('settings.deleteAccount.button') }}
</button>
</div>
</modal>
</modal>
</div>
</modal>
</template>
<script>
@ -126,7 +133,7 @@ export default {
// TOOD: move to actions
db.collection('settings').doc(this.user.uid).delete()
.then(() => {
// TOOD: move to actions
// TOOD: move to actions
db.collection('lists').doc(this.user.uid).delete()
.then(() => {
this.$bus.$emit('TOAST', { message: 'Account deleted' });
@ -162,10 +169,10 @@ export default {
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
@import "~styles/styles";
@import "~styles/styles";
.settings {
display: flex;
flex-direction: column;
}
.settings {
display: flex;
flex-direction: column;
}
</style>

View file

@ -1,56 +1,56 @@
$iconSmallSize: 32px;
a {
color: var(--accent-color);
color: var(--accent-color);
}
a.link {
display: flex;
align-items: center;
text-decoration: none;
display: flex;
align-items: center;
text-decoration: none;
}
button, a.link {
outline: none;
border: none;
margin: 0;
padding: 0 $gp;
width: auto;
overflow: visible;
background: transparent;
color: inherit;
font: inherit;
border-radius: $border-radius;
line-height: normal;
-webkit-font-smoothing: inherit;
-moz-osx-font-smoothing: inherit;
-webkit-appearance: none;
min-height: 40px;
border: none;
cursor: pointer;
font-weight: bold;
transition: background-color 300ms ease;
outline: none;
border: none;
margin: 0;
padding: 0 $gp;
width: auto;
overflow: visible;
background: transparent;
color: inherit;
font: inherit;
border-radius: $border-radius;
line-height: normal;
-webkit-font-smoothing: inherit;
-moz-osx-font-smoothing: inherit;
-webkit-appearance: none;
min-height: 40px;
border: none;
cursor: pointer;
font-weight: bold;
transition: background-color 300ms ease;
&[disabled] {
opacity: 0.5;
cursor: default;
}
&[disabled] {
opacity: 0.5;
cursor: default;
}
&.small {
min-height: $iconSmallSize;
min-width: $iconSmallSize;
padding: 0 $gp / 2;
}
&.small {
min-height: $iconSmallSize;
min-width: $iconSmallSize;
padding: 0 $gp / 2;
}
&.xsmall {
min-height: $iconSmallSize / 3;
min-width: $iconSmallSize / 3;
padding: $gp / 3;
font-size: 12px;
}
&.xsmall {
min-height: $iconSmallSize / 3;
min-width: $iconSmallSize / 3;
padding: $gp / 3;
font-size: 12px;
}
&.primary { background: var(--primary-background); color: var(--primary-text-color); }
&.secondary { background: var(--secondary-background); color: var(--secondary-text-color); }
&.danger { background: var(--danger-background); color: var(--danger-text-color); }
&.warning { background: var(--warning-background); color: var(--warning-text-color); }
}
&.primary { background: var(--primary-background); color: var(--primary-text-color); }
&.secondary { background: var(--secondary-background); color: var(--secondary-text-color); }
&.danger { background: var(--danger-background); color: var(--danger-text-color); }
&.warning { background: var(--warning-background); color: var(--warning-text-color); }
}

View file

@ -1,69 +1,69 @@
input, select {
background: #fff;
border: 1px solid #555555;
border-radius: $border-radius;
height: 40px;
padding: 0 $gp / 2;
width: 100%;
font-size: 14px;
margin-bottom: $gp;
background: #fff;
border: 1px solid #555555;
border-radius: $border-radius;
height: 40px;
padding: 0 $gp / 2;
width: 100%;
font-size: 14px;
margin-bottom: $gp;
}
.checkbox-group {
display: inline-flex;
display: inline-flex;
> span {
width: 60px;
margin-right: $gp / 2;
> span {
width: 60px;
margin-right: $gp / 2;
> input {
display: none;
}
label {
display: flex;
flex-direction: column;
align-items: center;
&.active {
color: var(--accent-color);
}
i {
margin-bottom: $gp / 4;
}
}
> input {
display: none;
}
label {
display: flex;
flex-direction: column;
align-items: center;
&.active {
color: var(--accent-color);
}
i {
margin-bottom: $gp / 4;
}
}
}
}
.tabs {
display: inline-flex;
border-bottom: 1px solid var(--accent-color);
display: inline-flex;
border-bottom: 1px solid var(--accent-color);
> span {
&:not(:last-child) {
margin-right: $gp / 2;
}
> input {
display: none;
}
label {
padding: $gp / 4 $gp;
border-radius: $gp / 2;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border: 1px solid var(--accent-color);
border-bottom: 0;
&.active {
color: var(--accent-color);
}
i {
margin-bottom: $gp / 4;
}
}
> span {
&:not(:last-child) {
margin-right: $gp / 2;
}
}
> input {
display: none;
}
label {
padding: $gp / 4 $gp;
border-radius: $gp / 2;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border: 1px solid var(--accent-color);
border-bottom: 0;
&.active {
color: var(--accent-color);
}
i {
margin-bottom: $gp / 4;
}
}
}
}

View file

@ -1,23 +1,23 @@
* {
box-sizing: border-box;
box-sizing: border-box;
}
.fast-spin {
animation: a 500ms infinite linear;
animation: a 500ms infinite linear;
}
h1, h2, h3, h4, h5, h6 {
font-family: "Fira Sans", sans-serif;
font-weight: 700;
margin: 0;
font-family: "Fira Sans", sans-serif;
font-weight: 700;
margin: 0;
}
body, p, a, li, blockquote {
font-family: "Roboto", sans-serif;
font-weight: 400;
font-family: "Roboto", sans-serif;
font-weight: 400;
}
body {
margin: 0;
font-size: 14px;
margin: 0;
font-size: 14px;
}

View file

@ -1,11 +1,11 @@
h5.title {
margin: $gp 0 0;
margin: $gp 0 0;
}
.setting {
display: grid;
grid-template-columns: minmax(24px, auto) 1fr auto;
border-bottom: 1px dashed rgba(85, 85, 85, .5);
align-items: center;
padding: $gp 0;
display: grid;
grid-template-columns: minmax(24px, auto) 1fr auto;
border-bottom: 1px dashed rgba(85, 85, 85, .5);
align-items: center;
padding: $gp 0;
}

View file

@ -1,6 +1,6 @@
@mixin drag-cursor {
cursor : -webkit-grab;
cursor : -moz-grab;
cursor : -o-grab;
cursor : grab;
cursor : -webkit-grab;
cursor : -moz-grab;
cursor : -o-grab;
cursor : grab;
}

View file

@ -18,4 +18,3 @@ $list-width: 300px;
// Media queries
$small: "max-width: 780px";
$medium: "max-width: 1024px";

View file

@ -1,54 +1,54 @@
{
"name": "Gamebrary",
"short_name": "Gamebrary",
"theme_color": "#555555",
"background_color": "#333333",
"display": "standalone",
"description": "Open source tool to organize video game collections.",
"orientation": "portrait",
"Scope": "/",
"start_url": "/?utm_source=pwa",
"icons": [
{
"src": "\/static\/icons\/icon-72x72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-96x96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-128x128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-144x144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-152x152.png",
"sizes": "152x152",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-384x384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"splash_pages": null
"name": "Gamebrary",
"short_name": "Gamebrary",
"theme_color": "#555555",
"background_color": "#333333",
"display": "standalone",
"description": "Open source tool to organize video game collections.",
"orientation": "portrait",
"Scope": "/",
"start_url": "/?utm_source=pwa",
"icons": [
{
"src": "\/static\/icons\/icon-72x72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-96x96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-128x128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-144x144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-152x152.png",
"sizes": "152x152",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-384x384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "\/static\/icons\/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"splash_pages": null
}