Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • funkwhale/funkwhale
  • Luclu7/funkwhale
  • mbothorel/funkwhale
  • EorlBruder/funkwhale
  • tcit/funkwhale
  • JocelynDelalande/funkwhale
  • eneiluj/funkwhale
  • reg/funkwhale
  • ButterflyOfFire/funkwhale
  • m4sk1n/funkwhale
  • wxcafe/funkwhale
  • andybalaam/funkwhale
  • jcgruenhage/funkwhale
  • pblayo/funkwhale
  • joshuaboniface/funkwhale
  • n3ddy/funkwhale
  • gegeweb/funkwhale
  • tohojo/funkwhale
  • emillumine/funkwhale
  • Te-k/funkwhale
  • asaintgenis/funkwhale
  • anoadragon453/funkwhale
  • Sakada/funkwhale
  • ilianaw/funkwhale
  • l4p1n/funkwhale
  • pnizet/funkwhale
  • dante383/funkwhale
  • interfect/funkwhale
  • akhardya/funkwhale
  • svfusion/funkwhale
  • noplanman/funkwhale
  • nykopol/funkwhale
  • roipoussiere/funkwhale
  • Von/funkwhale
  • aurieh/funkwhale
  • icaria36/funkwhale
  • floreal/funkwhale
  • paulwalko/funkwhale
  • comradekingu/funkwhale
  • FurryJulie/funkwhale
  • Legolars99/funkwhale
  • Vierkantor/funkwhale
  • zachhats/funkwhale
  • heyjake/funkwhale
  • sn0w/funkwhale
  • jvoisin/funkwhale
  • gordon/funkwhale
  • Alexander/funkwhale
  • bignose/funkwhale
  • qasim.ali/funkwhale
  • fakegit/funkwhale
  • Kxze/funkwhale
  • stenstad/funkwhale
  • creak/funkwhale
  • Kaze/funkwhale
  • Tixie/funkwhale
  • IISergII/funkwhale
  • lfuelling/funkwhale
  • nhaddag/funkwhale
  • yoasif/funkwhale
  • ifischer/funkwhale
  • keslerm/funkwhale
  • flupe/funkwhale
  • petitminion/funkwhale
  • ariasuni/funkwhale
  • ollie/funkwhale
  • ngaumont/funkwhale
  • techknowlogick/funkwhale
  • Shleeble/funkwhale
  • theflyingfrog/funkwhale
  • jonatron/funkwhale
  • neobrain/funkwhale
  • eorn/funkwhale
  • KokaKiwi/funkwhale
  • u1-liquid/funkwhale
  • marzzzello/funkwhale
  • sirenwatcher/funkwhale
  • newer027/funkwhale
  • codl/funkwhale
  • Zwordi/funkwhale
  • gisforgabriel/funkwhale
  • iuriatan/funkwhale
  • simon/funkwhale
  • bheesham/funkwhale
  • zeoses/funkwhale
  • accraze/funkwhale
  • meliurwen/funkwhale
  • divadsn/funkwhale
  • Etua/funkwhale
  • sdrik/funkwhale
  • Soran/funkwhale
  • kuba-orlik/funkwhale
  • cristianvogel/funkwhale
  • Forceu/funkwhale
  • jeff/funkwhale
  • der_scheibenhacker/funkwhale
  • owlnical/funkwhale
  • jovuit/funkwhale
  • SilverFox15/funkwhale
  • phw/funkwhale
  • mayhem/funkwhale
  • sridhar/funkwhale
  • stromlin/funkwhale
  • rrrnld/funkwhale
  • nitaibezerra/funkwhale
  • jaller94/funkwhale
  • pcouy/funkwhale
  • eduxstad/funkwhale
  • codingHahn/funkwhale
  • captain/funkwhale
  • polyedre/funkwhale
  • leishenailong/funkwhale
  • ccritter/funkwhale
  • lnceballosz/funkwhale
  • fpiesche/funkwhale
  • Fanyx/funkwhale
  • markusblogde/funkwhale
  • Firobe/funkwhale
  • devilcius/funkwhale
  • freaktechnik/funkwhale
  • blopware/funkwhale
  • cone/funkwhale
  • thanksd/funkwhale
  • vachan-maker/funkwhale
  • bbenti/funkwhale
  • tarator/funkwhale
  • prplecake/funkwhale
  • DMarzal/funkwhale
  • lullis/funkwhale
  • hanacgr/funkwhale
  • albjeremias/funkwhale
  • xeruf/funkwhale
  • llelite/funkwhale
  • RoiArthurB/funkwhale
  • cloo/funkwhale
  • nztvar/funkwhale
  • Keunes/funkwhale
  • petitminion/funkwhale-petitminion
  • m-idler/funkwhale
  • SkyLeite/funkwhale
140 results
Select Git revision
Show changes
Commits on Source (2)
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<set-instance-modal @update:show="showSetInstanceModal = $event" :show="showSetInstanceModal"></set-instance-modal> <set-instance-modal @update:show="showSetInstanceModal = $event" :show="showSetInstanceModal"></set-instance-modal>
<service-messages v-if="messages.length > 0"/> <service-messages v-if="messages.length > 0"/>
<router-view :key="$route.fullPath"></router-view> <router-view :key="$route.fullPath"></router-view>
<div class="ui hidden divider"></div>
<div class="ui fitted divider"></div> <div class="ui fitted divider"></div>
<app-footer <app-footer
:version="version" :version="version"
......
<template> <template>
<main class="main pusher" v-title="labels.title"> <main class="main pusher" v-title="title">
<section class="ui vertical center aligned stripe segment"> <section class="ui vertical center aligned stripe segment">
<div class="ui text container">
<h1 class="ui huge header"> <h1 class="ui huge header">
<translate translate-context="Content/Home/Title/Verb">Welcome on Funkwhale</translate> <translate translate-context="Content/Home/Title/Verb" :translate-params="{podName: config.podName}">Welcome on %{ podName}</translate>
</h1> </h1>
<p><translate translate-context="Content/Home/Title">We think listening to music should be simple.</translate></p> <p v-if="config.shortDescription">{{ config.shortDescription }}</p>
<router-link class="ui icon button" to="/about"> <!-- <img src="http://placekitten.com/800/300" alt=""> -->
<i class="info icon"></i>
<translate translate-context="Content/Home/Button.Label/Verb">Learn more about this instance</translate>
</router-link>
<router-link class="ui icon teal button" to="/library">
<translate translate-context="Content/Home/Button.Label/Verb">Get me to the library</translate>
<i class="right arrow icon"></i>
</router-link>
</div>
</section> </section>
<section class="ui vertical stripe segment"> <div class="ui container">
<div class="ui middle aligned stackable text container"> <div class="ui stackable two column grid">
<div class="ui grid"> <section class="column">
<div class="row"> <div class="ui container">
<div class="eight wide left floated column"> <h2 class="ui huge header">
<h2 class="ui header"> <translate translate-context="Content/Home/Title/Verb">Login</translate>
<translate translate-context="Content/Home/Title">Why funkwhale?</translate>
</h2>
<p><translate translate-context="Content/Home/Paragraph">That's simple: we loved Grooveshark and we want to build something even better.</translate></p>
</div>
<div class="four wide left floated column">
<img class="ui medium image" src="../assets/logo/logo.png" />
</div>
</div>
</div>
</div>
<div class="ui middle aligned stackable text container">
<div class="ui hidden divider"></div>
<h2 class="ui header">
<translate translate-context="Content/Home/Title">Unlimited music</translate>
</h2>
<p><translate translate-context="Content/Home/Paragraph">Funkwhale is designed to make it easy to listen to music you like, or to discover new artists.</translate></p>
<div class="ui list">
<div class="item">
<i class="sound icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item/Verb">Click once, listen for hours using built-in radios</translate>
</div>
</div>
<div class="item">
<i class="heart icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item/Verb">Keep a track of your favorite songs</translate>
</div>
</div>
<div class="item">
<i class="list icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item">Playlists? We got them</translate>
</div>
</div>
</div>
</div>
<div class="ui middle aligned stackable text container">
<div class="ui hidden divider"></div>
<h2 class="ui header">
<translate translate-context="Content/Home/Title">A clean library</translate>
</h2> </h2>
<p><translate translate-context="Content/Home/Paragraph">Funkwhale takes care of handling your music</translate>.</p> <login-form></login-form>
<div class="ui list">
<div class="item">
<i class="tag icon"></i>
<div class="content" v-html="musicbrainzItem"></div>
</div> </div>
<div class="item">
<i class="plus icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item">Covers, lyrics, our goal is to have them all ;)</translate>
</div>
</div>
</div>
</div>
<div class="ui middle aligned stackable text container">
<div class="ui hidden divider"></div> <div class="ui hidden divider"></div>
<h2 class="ui header"> <div class="ui container">
<translate translate-context="Content/Home/Title">Easy to use</translate> <h2 class="ui huge header">
<translate translate-context="Content/Home/Title">Create an account</translate>
</h2> </h2>
<p><translate translate-context="Content/Home/Paragraph">Funkwhale is dead simple to use.</translate></p> <signup-form></signup-form>
<div class="ui list">
<div class="item">
<i class="book icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item">No add-ons, no plugins : you only need a web library</translate>
</div>
</div>
<div class="item">
<i class="wizard icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item">Access your music from a clean interface that focuses on what really matters</translate>
</div>
</div>
</div>
</div>
<div class="ui middle aligned stackable text container">
<div class="ui hidden divider"></div>
<h2 class="ui header">
<translate translate-context="Content/Home/Title">Your music, your way</translate>
</h2>
<p><translate translate-context="Content/Home/Paragraph">Funkwhale is free and gives you control on your music.</translate></p>
<div class="ui list">
<div class="item">
<i class="smile icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item">The plaform is free and open-source, you can install it and modify it without worries</translate>
</div>
</div>
<div class="item">
<i class="protect icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item">We do not track you or bother you with ads</translate>
</div>
</div>
<div class="item">
<i class="users icon"></i>
<div class="content">
<translate translate-context="Content/Home/List item">You can invite friends and family to your instance so they can enjoy your music</translate>
</div>
</div> </div>
</section>
</div> </div>
</div> </div>
</section>
</main> </main>
</template> </template>
<script> <script>
import axios from 'axios'
import _ from '@/lodash'
import SignupForm from "@/components/auth/SignupForm"
import LoginForm from "@/components/auth/LoginForm"
export default { export default {
data() { data() {
return { return {
musicbrainzUrl: "https://musicbrainz.org/" error: null,
nodeinfo: null,
isLoading: false,
} }
}, },
components: {
LoginForm,
SignupForm,
},
async created () {
await this.fetchNodeInfo()
},
computed: { computed: {
labels() { title () {
return { return 'Funkwhale'
title: this.$pgettext('Head/Home/Title', "Welcome") },
config () {
let base = this.nodeinfo || {}
let config = {}
let instanceUrl = this.$store.state.instance.instanceUrl
var tmp = document.createElement('a')
tmp.href = instanceUrl
config.podName = _.get(base, 'metadata.nodeName', tmp.hostname)
config.shortDescription = _.get(base, 'metadata.shortDescription')
return config
} }
}, },
musicbrainzItem () { methods: {
let msg = this.$pgettext('Content/Home/List item/Verb', 'Get quality metadata about your music thanks to <a href="%{ url }" target="_blank">MusicBrainz</a>') async fetchNodeInfo () {
return this.$gettextInterpolate(msg, {url: this.musicbrainzUrl}) this.isLoading = true
let url = 'instance/nodeinfo/2.0/'
try {
let response = await axios.get(url)
this.nodeinfo = response.data
} catch (e) {
this.error = e
console.log('Cannot fetch nodeinfo!', e)
}
this.isLoading = false
} }
}, },
watch: { watch: {
...@@ -159,7 +92,6 @@ export default { ...@@ -159,7 +92,6 @@ export default {
immediate: true immediate: true
} }
} }
} }
</script> </script>
...@@ -171,4 +103,7 @@ export default { ...@@ -171,4 +103,7 @@ export default {
.ui.list .list.icon { .ui.list .list.icon {
padding: 0; padding: 0;
} }
main > div.ui.container {
width: 900px;
}
</style> </style>
<template> <template>
<main class="main pusher" v-title="labels.title">
<section class="ui vertical stripe segment">
<div class="ui small text container">
<h2><translate translate-context="Content/Login/Title/Verb">Log in to your Funkwhale account</translate></h2>
<form class="ui form" @submit.prevent="submit()"> <form class="ui form" @submit.prevent="submit()">
<slot name="title"></slot>
<div v-if="error" class="ui negative message"> <div v-if="error" class="ui negative message">
<div class="header"><translate translate-context="Content/Login/Error message.Title">We cannot log you in</translate></div> <div class="header"><translate translate-context="Content/Login/Error message.Title">We cannot log you in</translate></div>
<ul class="list"> <ul class="list">
...@@ -43,9 +40,6 @@ ...@@ -43,9 +40,6 @@
<translate translate-context="*/Login/*/Verb">Login</translate> <translate translate-context="*/Login/*/Verb">Login</translate>
</button> </button>
</form> </form>
</div>
</section>
</main>
</template> </template>
<script> <script>
...@@ -81,10 +75,8 @@ export default { ...@@ -81,10 +75,8 @@ export default {
computed: { computed: {
labels() { labels() {
let usernamePlaceholder = this.$pgettext('Content/Login/Input.Placeholder', "Enter your username or email") let usernamePlaceholder = this.$pgettext('Content/Login/Input.Placeholder', "Enter your username or email")
let title = this.$pgettext('Head/Login/Title', "Log In")
return { return {
usernamePlaceholder, usernamePlaceholder,
title
} }
} }
}, },
......
<template> <template>
<main class="main pusher" v-title="labels.title">
<section class="ui vertical stripe segment">
<div class="ui small text container">
<h2><translate translate-context="Content/Signup/Title">Create a funkwhale account</translate></h2>
<form <form
:class="['ui', {'loading': isLoadingInstanceSetting}, 'form']" :class="['ui', {'loading': isLoadingInstanceSetting}, 'form']"
@submit.prevent="submit()"> @submit.prevent="submit()">
<slot name="title"></slot>
<p class="ui message" v-if="!$store.state.instance.settings.users.registration_enabled.value"> <p class="ui message" v-if="!$store.state.instance.settings.users.registration_enabled.value">
<translate translate-context="Content/Signup/Form/Paragraph">Registration are closed on this instance, you will need an invitation code to signup.</translate> <translate translate-context="Content/Signup/Form/Paragraph">Registration are closed on this instance, you will need an invitation code to signup.</translate>
</p> </p>
...@@ -54,9 +51,6 @@ ...@@ -54,9 +51,6 @@
<translate translate-context="Content/Signup/Button.Label">Create my account</translate> <translate translate-context="Content/Signup/Button.Label">Create my account</translate>
</button> </button>
</form> </form>
</div>
</section>
</main>
</template> </template>
<script> <script>
...@@ -94,7 +88,6 @@ export default { ...@@ -94,7 +88,6 @@ export default {
}, },
computed: { computed: {
labels() { labels() {
let title = this.$pgettext("*/Signup/Title", "Sign Up")
let placeholder = this.$pgettext( let placeholder = this.$pgettext(
"Content/Signup/Form/Placeholder", "Content/Signup/Form/Placeholder",
"Enter your invitation code (case insensitive)" "Enter your invitation code (case insensitive)"
...@@ -102,7 +95,6 @@ export default { ...@@ -102,7 +95,6 @@ export default {
let usernamePlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your username") let usernamePlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your username")
let emailPlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your email") let emailPlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your email")
return { return {
title,
usernamePlaceholder, usernamePlaceholder,
emailPlaceholder, emailPlaceholder,
placeholder placeholder
...@@ -140,7 +132,3 @@ export default { ...@@ -140,7 +132,3 @@ export default {
} }
} }
</script> </script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
...@@ -30,7 +30,7 @@ export default new Router({ ...@@ -30,7 +30,7 @@ export default new Router({
path: '/login', path: '/login',
name: 'login', name: 'login',
component: () => component: () =>
import(/* webpackChunkName: "core" */ "@/components/auth/Login"), import(/* webpackChunkName: "core" */ "@/views/auth/Login"),
props: (route) => ({ next: route.query.next || '/library' }) props: (route) => ({ next: route.query.next || '/library' })
}, },
{ {
...@@ -85,7 +85,7 @@ export default new Router({ ...@@ -85,7 +85,7 @@ export default new Router({
path: '/signup', path: '/signup',
name: 'signup', name: 'signup',
component: () => component: () =>
import(/* webpackChunkName: "core" */ "@/components/auth/Signup"), import(/* webpackChunkName: "core" */ "@/views/auth/Signup"),
props: (route) => ({ props: (route) => ({
defaultInvitation: route.query.invitation defaultInvitation: route.query.invitation
}) })
......
...@@ -354,6 +354,9 @@ input + .help { ...@@ -354,6 +354,9 @@ input + .help {
min-width: 150px; min-width: 150px;
} }
.ui.hidden.divider, .ui.fitted.divider {
clear: both;
}
@import "./themes/_light.scss"; @import "./themes/_light.scss";
......
<template>
<main class="main pusher" v-title="labels.title">
<section class="ui vertical stripe segment">
<div class="ui small text container">
<h2 slot="title"><translate translate-context="Content/Login/Title/Verb">Log in to your Funkwhale account</translate></h2>
<login-form :next="next"></login-form>
</div>
</section>
</main>
</template>
<script>
import LoginForm from "@/components/auth/LoginForm"
import PasswordInput from "@/components/forms/PasswordInput"
export default {
components: {
LoginForm
},
props: {
next: { type: String, default: "/library" }
},
computed: {
labels() {
let title = this.$pgettext('Head/Login/Title', "Log In")
return {
title
}
}
},
}
</script>
<template>
<main class="main pusher" v-title="labels.title">
<section class="ui vertical stripe segment">
<div class="ui small text container">
<signup-form :default-invitation="defaultInvitation" :next="next">
<h2 slot="title"><translate translate-context="Content/Signup/Title">Create a funkwhale account</translate></h2>
</signup-form>
</div>
</section>
</main>
</template>
<script>
import axios from "axios"
import logger from "@/logging"
import SignupForm from "@/components/auth/SignupForm"
export default {
components: {
SignupForm
},
props: {
defaultInvitation: { type: String, required: false, default: null },
next: { type: String, default: "/" }
},
computed: {
labels() {
let title = this.$pgettext("*/Signup/Title", "Sign Up")
return {
title,
}
}
}
}
</script>