Added Bang! scraper. Showing studio on tile. Added favicons to tiles.

This commit is contained in:
2020-01-06 05:19:38 +01:00
parent 3a7aa58abb
commit bb5b8085f6
90 changed files with 430 additions and 45 deletions

View File

@@ -68,8 +68,16 @@ import Sites from '../sites/sites.vue';
async function fetchNetwork() {
this.network = await this.$store.dispatch('fetchNetworks', this.$route.params.networkSlug);
if (this.network.studios) {
this.studios = this.network.studios.map(studio => ({
...studio,
network: this.network,
}));
}
this.sites = this.network.sites
.filter(site => !site.independent)
.concat(this.studios)
.sort(({ name: nameA }, { name: nameB }) => nameA.localeCompare(nameB));
this.releases = this.network.sites.map(site => site.releases).flat();
@@ -89,7 +97,8 @@ export default {
data() {
return {
network: null,
sites: null,
sites: [],
studios: [],
releases: [],
pageTitle: null,
expanded: false,
@@ -158,12 +167,13 @@ export default {
}
.header {
background: $profile;
width: 100%;
height: 4rem;
height: 3rem;
display: none;
flex-shrink: 0;
justify-content: center;
border-bottom: solid 1px $shadow-hint;
background: $profile;
}
.sites.compact {

View File

@@ -29,10 +29,18 @@ export default {
</script>
<style lang="scss" scoped>
@import 'theme';
.networks {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
grid-gap: 1rem;
padding: 1rem;
}
@media(max-width: $breakpoint) {
.networks {
grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
}
}
</style>

View File

@@ -80,7 +80,21 @@
<span class="chain">presents</span>
<a :href="`/site/${release.site.slug}`">
<a
v-if="release.studio"
:href="`/site/${release.studio.slug}`"
>
<img
:src="`/img/logos/${release.network.slug}/${release.studio.slug}.png`"
:title="release.studio.name"
class="logo logo-site"
>
</a>
<a
v-else
:href="`/site/${release.site.slug}`"
>
<img
:src="`/img/logos/${release.network.slug}/${release.site.slug}.png`"
:title="release.site.name"

View File

@@ -11,12 +11,24 @@
class="site site-link"
>{{ release.network.name }}</router-link>
<router-link
v-else-if="release.studio"
:to="`/network/${release.network.slug}`"
class="site site-link"
><img
:src="`/img/logos/${release.network.slug}/favicon.png`"
class="favicon"
>{{ release.studio.name }}</router-link>
<router-link
v-else
v-tooltip.bottom="`Part of ${release.network.name}`"
:title="`Part of ${release.network.name}`"
:to="`/site/${release.site.slug}`"
class="site site-link"
><img
:src="`/img/logos/${release.network.slug}/favicon.png`"
class="favicon"
>{{ release.site.name }}</router-link>
<a
@@ -178,11 +190,18 @@ export default {
justify-content: space-between;
position: absolute;
font-size: 0;
.favicon {
height: 1rem;
margin: 0 .25rem 0 0;
}
}
.site,
.date {
color: #fff;
display: flex;
align-items: center;
background: $shadow;
position: relative;
font-size: .8rem;

View File

@@ -37,6 +37,10 @@ function curateSite(site, network) {
if (site.releases) curatedSite.releases = site.releases.map(release => curateRelease(release));
if (site.network || network) curatedSite.network = site.network || network;
if (site.parameters) {
curatedSite.independent = !!JSON.parse(site.parameters).independent;
}
return curatedSite;
}
@@ -52,6 +56,14 @@ function curateNetwork(network) {
curatedNetwork.sites = network.sites.map(site => curateSite(site, curatedNetwork));
}
if (network.studios) {
curatedNetwork.studios = network.studios;
}
if (network.parameters) {
curatedNetwork.parameters = JSON.parse(network.parameters);
}
return curatedNetwork;
}

View File

@@ -113,6 +113,12 @@ const releasesFragment = `
${releaseTagsFragment}
${releasePosterFragment}
${siteFragment}
studio {
id
name
slug
url
}
}
`;

View File

@@ -22,6 +22,7 @@ function initNetworksActions(store, _router) {
slug
url
${releasesFragment}
parameters
network {
id
name
@@ -29,6 +30,12 @@ function initNetworksActions(store, _router) {
url
}
}
studios {
id
name
slug
url
}
}
}
`, {