Merge branch 'context-population' into 'develop'
Context population See merge request funkwhale/funkwhale!657
This commit is contained in:
commit
9034044319
|
@ -363,17 +363,17 @@ Translations in HTML use the ``<translate>`` tag::
|
|||
|
||||
<template>
|
||||
<div>
|
||||
<h1><translate :translate-context="'Content/Profile/Header'">User profile</translate></h1>
|
||||
<h1><translate translate-context="Content/Profile/Header">User profile</translate></h1>
|
||||
<p>
|
||||
<translate
|
||||
:translate-context="'Content/Profile/Paragraph'"
|
||||
translate-context="Content/Profile/Paragraph"
|
||||
:translate-params="{username: 'alice'}">
|
||||
You are logged in as %{ username }
|
||||
</translate>
|
||||
</p>
|
||||
<p>
|
||||
<translate
|
||||
:translate-context="'Content/Profile/Paragraph'"
|
||||
translate-context="Content/Profile/Paragraph"
|
||||
translate-plural="You have %{ count } new messages, that's a lot!"
|
||||
:translate-n="unreadMessagesCount"
|
||||
:translate-params="{count: unreadMessagesCount}">
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -3,10 +3,10 @@
|
|||
<section class="ui vertical center aligned stripe segment">
|
||||
<div class="ui text container">
|
||||
<h1 class="ui huge header">
|
||||
<translate :translate-context="'Content/About/Title/Short, Noun'" v-if="instance.name.value" :translate-params="{instance: instance.name.value}">
|
||||
<translate translate-context="Content/About/Title/Short, Noun" v-if="instance.name.value" :translate-params="{instance: instance.name.value}">
|
||||
About %{ instance }
|
||||
</translate>
|
||||
<translate :translate-context="'Content/About/Title/Short, Noun'" v-else>About this instance</translate>
|
||||
<translate translate-context="Content/About/Title/Short, Noun" v-else>About this instance</translate>
|
||||
</h1>
|
||||
<stats></stats>
|
||||
</div>
|
||||
|
@ -15,12 +15,12 @@
|
|||
<div
|
||||
class="ui middle aligned stackable text container">
|
||||
<p
|
||||
v-if="!instance.short_description.value && !instance.long_description.value"><translate :translate-context="'Content/About/Paragraph'">Unfortunately, the owners of this instance did not yet take the time to complete this page.</translate></p>
|
||||
v-if="!instance.short_description.value && !instance.long_description.value"><translate translate-context="Content/About/Paragraph">Unfortunately, the owners of this instance did not yet take the time to complete this page.</translate></p>
|
||||
<router-link
|
||||
class="ui button"
|
||||
v-if="$store.state.auth.availablePermissions['settings']"
|
||||
:to="{path: '/manage/settings', hash: 'instance'}">
|
||||
<i class="pencil icon"></i><translate :translate-context="'Content/Settings/Button.Label/Verb'">Edit instance info</translate>
|
||||
<i class="pencil icon"></i><translate translate-context="Content/Settings/Button.Label/Verb">Edit instance info</translate>
|
||||
</router-link>
|
||||
<div class="ui hidden divider"></div>
|
||||
</div>
|
||||
|
|
|
@ -4,22 +4,22 @@
|
|||
<div class="ui stackable equal height stackable grid">
|
||||
<section class="four wide column">
|
||||
<h4 class="ui header">
|
||||
<translate :translate-context="'Footer/About/Title'" :translate-params="{instanceName: instanceHostname}" >About %{instanceName}</translate>
|
||||
<translate translate-context="Footer/About/Title" :translate-params="{instanceName: instanceHostname}" >About %{instanceName}</translate>
|
||||
</h4>
|
||||
<div class="ui link list">
|
||||
<router-link class="item" to="/about">
|
||||
<translate :translate-context="'Footer/About/List item.Link'">About page</translate>
|
||||
<translate translate-context="Footer/About/List item.Link">About page</translate>
|
||||
</router-link>
|
||||
<div class="item" v-if="version">
|
||||
<translate :translate-context="'Footer/*/List item'" :translate-params="{version: version}" >Version %{version}</translate>
|
||||
<translate translate-context="Footer/*/List item" :translate-params="{version: version}" >Version %{version}</translate>
|
||||
</div>
|
||||
<div role="button" class="item" @click="$emit('show:set-instance-modal')" >
|
||||
<translate :translate-context="'Footer/*/List item.Link'">Use another instance</translate>
|
||||
<translate translate-context="Footer/*/List item.Link">Use another instance</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui form">
|
||||
<div class="ui field">
|
||||
<label><translate :translate-context="'Footer/Settings/Dropdown.Label/Short, Verb'">Change language</translate></label>
|
||||
<label><translate translate-context="Footer/Settings/Dropdown.Label/Short, Verb">Change language</translate></label>
|
||||
<select class="ui dropdown" :value="$language.current" @change="$store.commit('ui/currentLanguage', $event.target.value)">
|
||||
<option v-for="(language, key) in $language.available" :key="key" :value="key">{{ language }}</option>
|
||||
</select>
|
||||
|
@ -29,29 +29,29 @@
|
|||
<section class="four wide column">
|
||||
<h4 v-translate class="ui header">Using Funkwhale</h4>
|
||||
<div class="ui link list">
|
||||
<a href="https://docs.funkwhale.audio" class="item" target="_blank"><translate :translate-context="'Footer/*/List item.Link/Short, Noun'">Documentation</translate></a>
|
||||
<a href="https://docs.funkwhale.audio/users/apps.html" class="item" target="_blank"><translate :translate-context="'Footer/*/List item.Link'">Mobile and desktop apps</translate></a>
|
||||
<div role="button" class="item" @click="$emit('show:shortcuts-modal')"><translate :translate-context="'Footer/*/List item.Link/Short, Noun'">Keyboard shortcuts</translate></div>
|
||||
<a href="https://docs.funkwhale.audio" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link/Short, Noun">Documentation</translate></a>
|
||||
<a href="https://docs.funkwhale.audio/users/apps.html" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link">Mobile and desktop apps</translate></a>
|
||||
<div role="button" class="item" @click="$emit('show:shortcuts-modal')"><translate translate-context="Footer/*/List item.Link/Short, Noun">Keyboard shortcuts</translate></div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="four wide column">
|
||||
<h4 v-translate class="ui header">Getting help</h4>
|
||||
<div class="ui link list">
|
||||
<a href="https://socialhub.network/c/funkwhale" class="item" target="_blank"><translate :translate-context="'Footer/*/Listitem.Link'">Support forum</translate></a>
|
||||
<a href="https://riot.im/app/#/room/#funkwhale-troubleshooting:matrix.org" class="item" target="_blank"><translate :translate-context="'Footer/*/List item.Link'">Chat room</translate></a>
|
||||
<a href="https://dev.funkwhale.audio/funkwhale/funkwhale/issues" class="item" target="_blank"><translate :translate-context="'Footer/*/List item.Link'">Issue tracker</translate></a>
|
||||
<a href="https://socialhub.network/c/funkwhale" class="item" target="_blank"><translate translate-context="Footer/*/Listitem.Link">Support forum</translate></a>
|
||||
<a href="https://riot.im/app/#/room/#funkwhale-troubleshooting:matrix.org" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link">Chat room</translate></a>
|
||||
<a href="https://dev.funkwhale.audio/funkwhale/funkwhale/issues" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link">Issue tracker</translate></a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="four wide column">
|
||||
<h4 v-translate class="ui header">About Funkwhale</h4>
|
||||
<div class="ui link list">
|
||||
<a href="https://funkwhale.audio" class="item" target="_blank"><translate :translate-context="'Footer/*/List item.Link'">Official website</translate></a>
|
||||
<a href="https://contribute.funkwhale.audio" class="item" target="_blank"><translate :translate-context="'Footer/*/List item.Link'">Contribute</translate></a>
|
||||
<a href="https://dev.funkwhale.audio/funkwhale/funkwhale" class="item" target="_blank"><translate :translate-context="'Footer/*/List item.Link'">Source code</translate></a>
|
||||
<a href="https://funkwhale.audio" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link">Official website</translate></a>
|
||||
<a href="https://contribute.funkwhale.audio" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link">Contribute</translate></a>
|
||||
<a href="https://dev.funkwhale.audio/funkwhale/funkwhale" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link">Source code</translate></a>
|
||||
</div>
|
||||
<div class="ui hidden divider"></div>
|
||||
<p>
|
||||
<translate :translate-context="'Footer/*/List item.Link'">The funkwhale logo was kindly designed and provided by Francis Gading.</translate>
|
||||
<translate translate-context="Footer/*/List item.Link">The funkwhale logo was kindly designed and provided by Francis Gading.</translate>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
|
|
|
@ -3,15 +3,15 @@
|
|||
<section class="ui vertical center aligned stripe segment">
|
||||
<div class="ui text container">
|
||||
<h1 class="ui huge header">
|
||||
<translate :translate-context="'Content/Home/Title/Verb'">Welcome on Funkwhale</translate>
|
||||
<translate translate-context="Content/Home/Title/Verb">Welcome on Funkwhale</translate>
|
||||
</h1>
|
||||
<p><translate :translate-context="'Content/Home/Title'">We think listening to music should be simple.</translate></p>
|
||||
<p><translate translate-context="Content/Home/Title">We think listening to music should be simple.</translate></p>
|
||||
<router-link class="ui icon button" to="/about">
|
||||
<i class="info icon"></i>
|
||||
<translate :translate-context="'Content/Home/Button.Label/Verb'">Learn more about this instance</translate>
|
||||
<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>
|
||||
<translate translate-context="Content/Home/Button.Label/Verb">Get me to the library</translate>
|
||||
<i class="right arrow icon"></i>
|
||||
</router-link>
|
||||
</div>
|
||||
|
@ -22,9 +22,9 @@
|
|||
<div class="row">
|
||||
<div class="eight wide left floated column">
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Home/Title'">Why funkwhale?</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>
|
||||
<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" />
|
||||
|
@ -35,26 +35,26 @@
|
|||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<translate translate-context="Content/Home/List item">Playlists? We got them</translate>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -62,14 +62,14 @@
|
|||
<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>
|
||||
<translate translate-context="Content/Home/Title">A clean library</translate>
|
||||
</h2>
|
||||
<p><translate :translate-context="'Content/Home/Paragraph'">Funkwhale takes care of handling your music</translate>.</p>
|
||||
<p><translate translate-context="Content/Home/Paragraph">Funkwhale takes care of handling your music</translate>.</p>
|
||||
<div class="ui list">
|
||||
<div class="item">
|
||||
<i class="download icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/Home/List item/Verb'">Import music from various platforms, such as YouTube or SoundCloud</translate>
|
||||
<translate translate-context="Content/Home/List item/Verb">Import music from various platforms, such as YouTube or SoundCloud</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
|
@ -83,7 +83,7 @@
|
|||
<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>
|
||||
<translate translate-context="Content/Home/List item">Covers, lyrics, our goal is to have them all ;)</translate>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -91,20 +91,20 @@
|
|||
<div class="ui middle aligned stackable text container">
|
||||
<div class="ui hidden divider"></div>
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Home/Title'">Easy to use</translate>
|
||||
<translate translate-context="Content/Home/Title">Easy to use</translate>
|
||||
</h2>
|
||||
<p><translate :translate-context="'Content/Home/Paragraph'">Funkwhale is dead simple to use.</translate></p>
|
||||
<p><translate translate-context="Content/Home/Paragraph">Funkwhale is dead simple to use.</translate></p>
|
||||
<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>
|
||||
<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 focus on what really matters</translate>
|
||||
<translate translate-context="Content/Home/List item">Access your music from a clean interface that focus on what really matters</translate>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -112,26 +112,26 @@
|
|||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
<h1 class="ui huge header">
|
||||
<i class="warning icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/*/Title'">Page not found!</translate>
|
||||
<translate translate-context="Content/*/Title">Page not found!</translate>
|
||||
</div>
|
||||
</h1>
|
||||
<p><translate :translate-context="'Content/*/Paragraph'">Sorry, the page you asked for does not exist:</translate></p>
|
||||
<p><translate translate-context="Content/*/Paragraph">Sorry, the page you asked for does not exist:</translate></p>
|
||||
<a :href="path">{{ path }}</a>
|
||||
<div class="ui hidden divider"></div>
|
||||
<router-link class="ui icon labeled right button" to="/">
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb'">Go to home page</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb">Go to home page</translate>
|
||||
<i class="right arrow icon"></i>
|
||||
</router-link>
|
||||
</div>
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
<template>
|
||||
<modal @update:show="$emit('update:show', $event); isError = false" :show="show">
|
||||
<div class="header"><translate :translate-context="'Popup/Instance/Title'">Choose your instance</translate></div>
|
||||
<div class="header"><translate translate-context="Popup/Instance/Title">Choose your instance</translate></div>
|
||||
<div class="scrolling content">
|
||||
<div v-if="isError" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Popup/Instance/Error message.Title'">It is not possible to connect to the given URL</translate></div>
|
||||
<div class="header"><translate translate-context="Popup/Instance/Error message.Title">It is not possible to connect to the given URL</translate></div>
|
||||
<ul class="list">
|
||||
<li><translate :translate-context="'Popup/Instance/Error message.List item'">The server might be down</translate></li>
|
||||
<li><translate :translate-context="'Popup/Instance/Error message.List item'">The given address is not a Funkwhale server</translate></li>
|
||||
<li><translate translate-context="Popup/Instance/Error message.List item">The server might be down</translate></li>
|
||||
<li><translate translate-context="Popup/Instance/Error message.List item">The given address is not a Funkwhale server</translate></li>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="ui form" @submit.prevent="checkAndSwitch(instanceUrl)">
|
||||
<p v-if="$store.state.instance.instanceUrl" class="description" :translate-context="'Popup/Login/Paragraph'" v-translate="{url: $store.state.instance.instanceUrl, hostname: instanceHostname }">
|
||||
<p v-if="$store.state.instance.instanceUrl" class="description" translate-context="Popup/Login/Paragraph" v-translate="{url: $store.state.instance.instanceUrl, hostname: instanceHostname }">
|
||||
You are currently connected to <a href="%{ url }" target="_blank">%{ hostname } <i class="external icon"></i></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted.
|
||||
</p>
|
||||
<p v-else>
|
||||
<translate :translate-context="'Popup/Instance/Paragraph'">To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.</translate>
|
||||
<translate translate-context="Popup/Instance/Paragraph">To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.</translate>
|
||||
</p>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Popup/Instance/Input.Label/Noun'">Instance URL</translate></label>
|
||||
<label><translate translate-context="Popup/Instance/Input.Label/Noun">Instance URL</translate></label>
|
||||
<div class="ui action input">
|
||||
<input type="text" v-model="instanceUrl" placeholder="https://funkwhale.server">
|
||||
<button type="submit" :class="['ui', 'icon', {loading: isLoading}, 'button']">
|
||||
<translate :translate-context="'*/*/Button.Label/Verb'">Submit</translate>
|
||||
<translate translate-context="*/*/Button.Label/Verb">Submit</translate>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -29,13 +29,13 @@
|
|||
<div class="ui hidden divider"></div>
|
||||
<form class="ui form" @submit.prevent="">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Popup/Instance/List.Label'">Suggested choices</translate></label>
|
||||
<label><translate translate-context="Popup/Instance/List.Label">Suggested choices</translate></label>
|
||||
<button v-for="url in suggestedInstances" @click="checkAndSwitch(url)" class="ui basic button">{{ url }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui cancel button"><translate :translate-context="'*/*/Button.Label/Verb'">Cancel</translate></div>
|
||||
<div class="ui cancel button"><translate translate-context="*/*/Button.Label/Verb">Cancel</translate></div>
|
||||
</div>
|
||||
</modal>
|
||||
</template>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<modal @update:show="$emit('update:show', $event)" :show="show">
|
||||
<header class="header">
|
||||
<translate :translate-context="'Popup/Keyboard shortcuts/Title'">Keyboard shortcuts</translate>
|
||||
<translate translate-context="Popup/Keyboard shortcuts/Title">Keyboard shortcuts</translate>
|
||||
</header>
|
||||
<section class="scrolling content">
|
||||
<table
|
||||
|
@ -18,7 +18,7 @@
|
|||
</table>
|
||||
</section>
|
||||
<footer class="actions">
|
||||
<div class="ui cancel button"><translate :translate-context="'Popup/Keyboard shortcuts/Button.Label/Verb'">Close</translate></div>
|
||||
<div class="ui cancel button"><translate translate-context="Popup/Keyboard shortcuts/Button.Label/Verb">Close</translate></div>
|
||||
</footer>
|
||||
</modal>
|
||||
</template>
|
||||
|
|
|
@ -16,13 +16,13 @@
|
|||
|
||||
<div class="menu-area">
|
||||
<div class="ui compact fluid two item inverted menu">
|
||||
<a :class="[{active: selectedTab === 'library'}, 'item']" role="button" @click.prevent.stop="selectedTab = 'library'" data-tab="library"><translate :translate-context="'Sidebar/Library/Tab.Title/Verb'">Browse</translate></a>
|
||||
<a :class="[{active: selectedTab === 'library'}, 'item']" role="button" @click.prevent.stop="selectedTab = 'library'" data-tab="library"><translate translate-context="Sidebar/Library/Tab.Title/Verb">Browse</translate></a>
|
||||
<a :class="[{active: selectedTab === 'queue'}, 'item']" role="button" @click.prevent.stop="selectedTab = 'queue'" data-tab="queue">
|
||||
<translate :translate-context="'Sidebar/Queue/Tab.Title/Noun'">Queue</translate>
|
||||
<translate translate-context="Sidebar/Queue/Tab.Title/Noun">Queue</translate>
|
||||
<template v-if="queue.tracks.length === 0">
|
||||
<translate :translate-context="'Sidebar/Queue/Tab.Title'">(empty)</translate>
|
||||
<translate translate-context="Sidebar/Queue/Tab.Title">(empty)</translate>
|
||||
</template>
|
||||
<translate :translate-context="'Sidebar/Queue/Tab.Title'" v-else :translate-params="{index: queue.currentIndex + 1, length: queue.tracks.length}">
|
||||
<translate translate-context="Sidebar/Queue/Tab.Title" v-else :translate-params="{index: queue.currentIndex + 1, length: queue.tracks.length}">
|
||||
(%{ index } of %{ length })
|
||||
</translate>
|
||||
</a>
|
||||
|
@ -32,76 +32,76 @@
|
|||
<section :class="['ui', 'bottom', 'attached', {active: selectedTab === 'library'}, 'tab']" :aria-label="labels.mainMenu">
|
||||
<nav class="ui inverted vertical large fluid menu" role="navigation" :aria-label="labels.mainMenu">
|
||||
<div class="item">
|
||||
<header class="header"><translate :translate-context="'Sidebar/Profile/Title'">My account</translate></header>
|
||||
<header class="header"><translate translate-context="Sidebar/Profile/Title">My account</translate></header>
|
||||
<div class="menu">
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{name: 'profile', params: {username: $store.state.auth.username}}">
|
||||
<i class="user icon"></i>
|
||||
<translate :translate-context="'Sidebar/Profile/List item.Link'" :translate-params="{username: $store.state.auth.username}">
|
||||
<translate translate-context="Sidebar/Profile/List item.Link" :translate-params="{username: $store.state.auth.username}">
|
||||
Logged in as %{ username }
|
||||
</translate>
|
||||
<img class="ui right floated circular tiny avatar image" v-if="$store.state.auth.profile.avatar.square_crop" v-lazy="$store.getters['instance/absoluteUrl']($store.state.auth.profile.avatar.square_crop)" />
|
||||
</router-link>
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{path: '/settings'}"><i class="setting icon"></i><translate :translate-context="'Sidebar/Settings/List item.Link/Noun'">Settings</translate></router-link>
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{path: '/settings'}"><i class="setting icon"></i><translate translate-context="Sidebar/Settings/List item.Link/Noun">Settings</translate></router-link>
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{name: 'notifications'}">
|
||||
<i class="feed icon"></i>
|
||||
<translate :translate-context="'Sidebar/Notifications/List item.Link/Noun'">Notifications</translate>
|
||||
<translate translate-context="Sidebar/Notifications/List item.Link/Noun">Notifications</translate>
|
||||
<div
|
||||
v-if="$store.state.ui.notifications.inbox > 0"
|
||||
:class="['ui', 'teal', 'label']">
|
||||
{{ $store.state.ui.notifications.inbox }}</div>
|
||||
</router-link>
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{name: 'logout'}"><i class="sign out icon"></i><translate :translate-context="'Sidebar/Login/List item.Link/Verb'">Logout</translate></router-link>
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{name: 'logout'}"><i class="sign out icon"></i><translate translate-context="Sidebar/Login/List item.Link/Verb">Logout</translate></router-link>
|
||||
<template v-else>
|
||||
<router-link class="item" :to="{name: 'login'}"><i class="sign in icon"></i><translate :translate-context="'Sidebar/Login/List item.Link/Verb'">Login</translate></router-link>
|
||||
<router-link class="item" :to="{name: 'login'}"><i class="sign in icon"></i><translate translate-context="Sidebar/Login/List item.Link/Verb">Login</translate></router-link>
|
||||
<router-link class="item" :to="{path: '/signup'}">
|
||||
<i class="corner add icon"></i>
|
||||
<translate :translate-context="'Sidebar/Login/List item.Link/Verb'">Create an account</translate>
|
||||
<translate translate-context="Sidebar/Login/List item.Link/Verb">Create an account</translate>
|
||||
</router-link>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<header class="header"><translate :translate-context="'Sidebar/Library/Title'">Music</translate></header>
|
||||
<header class="header"><translate translate-context="Sidebar/Library/Title">Music</translate></header>
|
||||
<div class="menu">
|
||||
<router-link class="item" :to="{path: '/library'}"><i class="sound icon"></i><translate :translate-context="'Sidebar/Library/List item.Link/Verb'">Browse library</translate></router-link>
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{path: '/favorites'}"><i class="heart icon"></i><translate :translate-context="'Sidebar/Favorites/List item.Link/Noun'">Favorites</translate></router-link>
|
||||
<router-link class="item" :to="{path: '/library'}"><i class="sound icon"></i><translate translate-context="Sidebar/Library/List item.Link/Verb">Browse library</translate></router-link>
|
||||
<router-link class="item" v-if="$store.state.auth.authenticated" :to="{path: '/favorites'}"><i class="heart icon"></i><translate translate-context="Sidebar/Favorites/List item.Link/Noun">Favorites</translate></router-link>
|
||||
<a
|
||||
@click="$store.commit('playlists/chooseTrack', null)"
|
||||
v-if="$store.state.auth.authenticated"
|
||||
class="item">
|
||||
<i class="list icon"></i><translate :translate-context="'Sidebar/Playlist/List item.Link/Noun'">Playlists</translate>
|
||||
<i class="list icon"></i><translate translate-context="Sidebar/Playlist/List item.Link/Noun">Playlists</translate>
|
||||
</a>
|
||||
<router-link
|
||||
v-if="$store.state.auth.authenticated"
|
||||
class="item" :to="{name: 'content.index'}"><i class="upload icon"></i><translate :translate-context="'Sidebar/Library/List item.Link/Verb'">Add content</translate></router-link>
|
||||
class="item" :to="{name: 'content.index'}"><i class="upload icon"></i><translate translate-context="Sidebar/Library/List item.Link/Verb">Add content</translate></router-link>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item" v-if="$store.state.auth.availablePermissions['settings'] || $store.state.auth.availablePermissions['moderation']">
|
||||
<header class="header"><translate :translate-context="'Sidebar/Admin/Title/Noun'">Administration</translate></header>
|
||||
<header class="header"><translate translate-context="Sidebar/Admin/Title/Noun">Administration</translate></header>
|
||||
<div class="menu">
|
||||
<router-link
|
||||
v-if="$store.state.auth.availablePermissions['settings']"
|
||||
class="item"
|
||||
:to="{path: '/manage/settings'}">
|
||||
<i class="settings icon"></i><translate :translate-context="'Sidebar/Admin/List item.Link/Noun'">Settings</translate>
|
||||
<i class="settings icon"></i><translate translate-context="Sidebar/Admin/List item.Link/Noun">Settings</translate>
|
||||
</router-link>
|
||||
<router-link
|
||||
v-if="$store.state.auth.availablePermissions['settings']"
|
||||
class="item"
|
||||
:to="{name: 'manage.users.users.list'}">
|
||||
<i class="users icon"></i><translate :translate-context="'Sidebar/Admin/List item.Link/Noun'">Users</translate>
|
||||
<i class="users icon"></i><translate translate-context="Sidebar/Admin/List item.Link/Noun">Users</translate>
|
||||
</router-link>
|
||||
<router-link
|
||||
v-if="$store.state.auth.availablePermissions['moderation']"
|
||||
class="item"
|
||||
:to="{name: 'manage.moderation.domains.list'}">
|
||||
<i class="shield icon"></i><translate :translate-context="'Sidebar/Moderation/List item.Link/Noun'">Moderation</translate>
|
||||
<i class="shield icon"></i><translate translate-context="Sidebar/Moderation/List item.Link/Noun">Moderation</translate>
|
||||
</router-link>
|
||||
<router-link
|
||||
v-if="$store.state.auth.availablePermissions['library']"
|
||||
class="item"
|
||||
:to="{name: 'manage.library.edits', query: {q: 'is_approved:null'}}">
|
||||
<i class="book icon"></i><translate :translate-context="'Sidebar/Moderation/List item.Link/Noun'">Library</translate>
|
||||
<i class="book icon"></i><translate translate-context="Sidebar/Moderation/List item.Link/Noun">Library</translate>
|
||||
<div
|
||||
v-if="$store.state.ui.notifications.pendingReviewEdits > 0"
|
||||
:title="labels.pendingReviewEdits"
|
||||
|
@ -116,10 +116,10 @@
|
|||
<i class="history icon"></i>
|
||||
<div class="content">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Sidebar/Queue/Message'">Do you want to restore your previous queue?</translate>
|
||||
<translate translate-context="Sidebar/Queue/Message">Do you want to restore your previous queue?</translate>
|
||||
</div>
|
||||
<p>
|
||||
<translate :translate-context="'Sidebar/Queue/Message'"
|
||||
<translate translate-context="Sidebar/Queue/Message"
|
||||
translate-plural="%{ count } tracks"
|
||||
:translate-n="queue.previousQueue.tracks.length"
|
||||
:translate-params="{count: queue.previousQueue.tracks.length}">
|
||||
|
@ -127,8 +127,8 @@
|
|||
</translate>
|
||||
</p>
|
||||
<div class="ui two buttons">
|
||||
<div @click="queue.restore()" class="ui basic inverted green button"><translate :translate-context="'*/*/*'">Yes</translate></div>
|
||||
<div @click="queue.removePrevious()" class="ui basic inverted red button"><translate :translate-context="'*/*/*'">No</translate></div>
|
||||
<div @click="queue.restore()" class="ui basic inverted green button"><translate translate-context="*/*/*">Yes</translate></div>
|
||||
<div @click="queue.removePrevious()" class="ui basic inverted red button"><translate translate-context="*/*/*">No</translate></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -167,10 +167,10 @@
|
|||
<div v-if="$store.state.radios.running" class="ui black message">
|
||||
<div class="content">
|
||||
<div class="header">
|
||||
<i class="feed icon"></i> <translate :translate-context="'Sidebar/Player/Title'">You have a radio playing</translate>
|
||||
<i class="feed icon"></i> <translate translate-context="Sidebar/Player/Title">You have a radio playing</translate>
|
||||
</div>
|
||||
<p><translate :translate-context="'Sidebar/Player/Paragraph'">New tracks will be appended here automatically.</translate></p>
|
||||
<div @click="$store.dispatch('radios/stop')" class="ui basic inverted red button"><translate :translate-context="'Sidebar/Player/Button.Label/Verb'">Stop radio</translate></div>
|
||||
<p><translate translate-context="Sidebar/Player/Paragraph">New tracks will be appended here automatically.</translate></p>
|
||||
<div @click="$store.dispatch('radios/stop')" class="ui basic inverted red button"><translate translate-context="Sidebar/Player/Button.Label/Verb">Stop radio</translate></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<div class="ui divider" />
|
||||
<h3 class="ui header">{{ group.label }}</h3>
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Settings/Error message.Title'">Error while saving settings</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Settings/Error message.Title">Error while saving settings</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="result" class="ui positive message">
|
||||
<translate :translate-context="'Content/Settings/Paragraph'">Settings updated successfully.</translate>
|
||||
<translate translate-context="Content/Settings/Paragraph">Settings updated successfully.</translate>
|
||||
</div>
|
||||
<p v-if="group.help">{{ group.help }}</p>
|
||||
<div v-for="setting in settings" class="ui field">
|
||||
|
@ -65,7 +65,7 @@
|
|||
<button
|
||||
type="submit"
|
||||
:class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']">
|
||||
<translate :translate-context="'Content/Settings/Button.Label/Short, Verb'">Save</translate>
|
||||
<translate translate-context="Content/Settings/Button.Label/Short, Verb">Save</translate>
|
||||
</button>
|
||||
</form>
|
||||
</template>
|
||||
|
|
|
@ -4,26 +4,26 @@
|
|||
<div class="two fields">
|
||||
<div class="field">
|
||||
<div class="field">
|
||||
<label for="embed-width"><translate :translate-context="'Popup/Embed/Input.Label'">Widget width</translate></label>
|
||||
<p><translate :translate-context="'Popup/Embed/Paragraph'">Leave empty for a responsive widget</translate></p>
|
||||
<label for="embed-width"><translate translate-context="Popup/Embed/Input.Label">Widget width</translate></label>
|
||||
<p><translate translate-context="Popup/Embed/Paragraph">Leave empty for a responsive widget</translate></p>
|
||||
<input id="embed-width" type="number" v-model.number="width" min="0" step="10" />
|
||||
</div>
|
||||
<template v-if="type != 'track'">
|
||||
<br>
|
||||
<div class="field">
|
||||
<label for="embed-height"><translate :translate-context="'Popup/Embed/Input.Label'">Widget height</translate></label>
|
||||
<label for="embed-height"><translate translate-context="Popup/Embed/Input.Label">Widget height</translate></label>
|
||||
<input id="embed-height" type="number" v-model="height" :min="minHeight" max="1000" step="10" />
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class="field">
|
||||
<button @click="copy" class="ui right teal labeled icon floated button"><i class="copy icon"></i><translate :translate-context="'Popup/*/Button.Label/Verb'">Copy</translate></button>
|
||||
<label for="embed-width"><translate :translate-context="'Popup/Embed/Input.Label/Noun'">Embed code</translate></label>
|
||||
<p><translate :translate-context="'Popup/Embed/Paragraph'">Copy/paste this code in your website HTML</translate></p>
|
||||
<button @click="copy" class="ui right teal labeled icon floated button"><i class="copy icon"></i><translate translate-context="Popup/*/Button.Label/Verb">Copy</translate></button>
|
||||
<label for="embed-width"><translate translate-context="Popup/Embed/Input.Label/Noun">Embed code</translate></label>
|
||||
<p><translate translate-context="Popup/Embed/Paragraph">Copy/paste this code in your website HTML</translate></p>
|
||||
<textarea ref="textarea":value="embedCode" rows="5" readonly>
|
||||
</textarea>
|
||||
<div class="ui right">
|
||||
<p class="message" v-if=copied><translate :translate-context="'Content/*/Paragraph'">Text copied to clipboard!</translate></p>
|
||||
<p class="message" v-if=copied><translate translate-context="Content/*/Paragraph">Text copied to clipboard!</translate></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -31,7 +31,7 @@
|
|||
<div class="preview">
|
||||
<h3>
|
||||
<a :href="iframeSrc" target="_blank">
|
||||
<translate :translate-context="'Popup/Embed/Title/Noun'">Preview</translate>
|
||||
<translate translate-context="Popup/Embed/Title/Noun">Preview</translate>
|
||||
</a>
|
||||
</h3>
|
||||
<iframe :width="frameWidth" :height="height" scrolling="no" frameborder="no" :src="iframeSrc"></iframe>
|
||||
|
|
|
@ -7,25 +7,25 @@
|
|||
:disabled="!playable"
|
||||
:class="buttonClasses.concat(['ui', {loading: isLoading}, {'mini': discrete}, {disabled: !playable}])">
|
||||
<i :class="[playIconClass, 'icon']"></i>
|
||||
<template v-if="!discrete && !iconOnly"><slot><translate :translate-context="'*/Queue/Button/Label/Short, Verb'">Play</translate></slot></template>
|
||||
<template v-if="!discrete && !iconOnly"><slot><translate translate-context="*/Queue/Button/Label/Short, Verb">Play</translate></slot></template>
|
||||
</button>
|
||||
<div v-if="!discrete && !iconOnly" :class="['ui', {disabled: !playable && !filterableArtist}, 'floating', 'dropdown', {'icon': !dropdownOnly}, {'button': !dropdownOnly}]">
|
||||
<i :class="dropdownIconClasses.concat(['icon'])" :title="title" ></i>
|
||||
<div class="menu">
|
||||
<button class="item basic" ref="add" data-ref="add" :disabled="!playable" @click.stop.prevent="add" :title="labels.addToQueue">
|
||||
<i class="plus icon"></i><translate :translate-context="'*/Queue/Dropdown/Button/Label/Short'">Add to queue</translate>
|
||||
<i class="plus icon"></i><translate translate-context="*/Queue/Dropdown/Button/Label/Short">Add to queue</translate>
|
||||
</button>
|
||||
<button class="item basic" ref="addNext" data-ref="addNext" :disabled="!playable" @click.stop.prevent="addNext()" :title="labels.playNext">
|
||||
<i class="step forward icon"></i><translate :translate-context="'*/Queue/Dropdown/Button/Label/Short'">Play next</translate>
|
||||
<i class="step forward icon"></i><translate translate-context="*/Queue/Dropdown/Button/Label/Short">Play next</translate>
|
||||
</button>
|
||||
<button class="item basic" ref="playNow" data-ref="playNow" :disabled="!playable" @click.stop.prevent="addNext(true)" :title="labels.playNow">
|
||||
<i class="play icon"></i><translate :translate-context="'*/Queue/Dropdown/Button/Label/Short'">Play now</translate>
|
||||
<i class="play icon"></i><translate translate-context="*/Queue/Dropdown/Button/Label/Short">Play now</translate>
|
||||
</button>
|
||||
<button v-if="track" class="item basic" :disabled="!playable" @click.stop.prevent="$store.dispatch('radios/start', {type: 'similar', objectId: track.id})" :title="labels.startRadio">
|
||||
<i class="feed icon"></i><translate :translate-context="'*/Queue/Dropdown/Button/Label/Short'">Start radio</translate>
|
||||
<i class="feed icon"></i><translate translate-context="*/Queue/Dropdown/Button/Label/Short">Start radio</translate>
|
||||
</button>
|
||||
<button v-if="filterableArtist" class="item basic" :disabled="!filterableArtist" @click.stop.prevent="filterArtist" :title="labels.hideArtist">
|
||||
<i class="eye slash outline icon"></i><translate :translate-context="'*/Queue/Dropdown/Button/Label/Short'">Hide content from this artist</translate>
|
||||
<i class="eye slash outline icon"></i><translate translate-context="*/Queue/Dropdown/Button/Label/Short">Hide content from this artist</translate>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -70,14 +70,14 @@
|
|||
</div>
|
||||
<div class="ui small warning message" v-if="currentTrack && errored">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Sidebar/Player/Error message.Title'">The track cannot be loaded</translate>
|
||||
<translate translate-context="Sidebar/Player/Error message.Title">The track cannot be loaded</translate>
|
||||
</div>
|
||||
<p v-if="hasNext && playing && $store.state.player.errorCount < $store.state.player.maxConsecutiveErrors">
|
||||
<translate :translate-context="'Sidebar/Player/Error message.Paragraph'">The next track will play automatically in a few seconds…</translate>
|
||||
<translate translate-context="Sidebar/Player/Error message.Paragraph">The next track will play automatically in a few seconds…</translate>
|
||||
<i class="loading spinner icon"></i>
|
||||
</p>
|
||||
<p>
|
||||
<translate :translate-context="'Sidebar/Player/Error message.Paragraph'">You may have a connectivity issue.</translate>
|
||||
<translate translate-context="Sidebar/Player/Error message.Paragraph">You may have a connectivity issue.</translate>
|
||||
</p>
|
||||
</div>
|
||||
<div class="two wide column controls ui grid">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div>
|
||||
<h2><translate :translate-context="'Content/Search/Title'">Search for some music</translate></h2>
|
||||
<h2><translate translate-context="Content/Search/Title">Search for some music</translate></h2>
|
||||
<div :class="['ui', {'loading': isLoading }, 'search']">
|
||||
<div class="ui icon big input">
|
||||
<i class="search icon"></i>
|
||||
|
@ -8,22 +8,22 @@
|
|||
</div>
|
||||
</div>
|
||||
<template v-if="query.length > 0">
|
||||
<h3 class="ui title"><translate :translate-context="'Content/Search/Title'">Artists</translate></h3>
|
||||
<h3 class="ui title"><translate translate-context="Content/Search/Title">Artists</translate></h3>
|
||||
<div v-if="results.artists.length > 0">
|
||||
<div class="ui cards">
|
||||
<artist-card :key="artist.id" v-for="artist in results.artists" :artist="artist" ></artist-card>
|
||||
</div>
|
||||
</div>
|
||||
<p v-else><translate :translate-context="'Content/Search/Paragraph'">No artist matched your query</translate></p>
|
||||
<p v-else><translate translate-context="Content/Search/Paragraph">No artist matched your query</translate></p>
|
||||
</template>
|
||||
<template v-if="query.length > 0">
|
||||
<h3 class="ui title"><translate :translate-context="'Content/Search/Title'">Albums</translate></h3>
|
||||
<h3 class="ui title"><translate translate-context="Content/Search/Title">Albums</translate></h3>
|
||||
<div v-if="results.albums.length > 0" class="ui stackable three column grid">
|
||||
<div class="column" :key="album.id" v-for="album in results.albums">
|
||||
<album-card class="fluid" :album="album" ></album-card>
|
||||
</div>
|
||||
</div>
|
||||
<p v-else><translate :translate-context="'Content/Search/Paragraph'">No album matched your query</translate></p>
|
||||
<p v-else><translate translate-context="Content/Search/Paragraph">No album matched your query</translate></p>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<div class="meta">
|
||||
<span>
|
||||
<router-link tag="span" :to="{name: 'library.artists.detail', params: {id: album.artist.id }}">
|
||||
<translate :translate-context="'Content/Album/Card'" :translate-params="{artist: album.artist.name}">By %{ artist }</translate>
|
||||
<translate translate-context="Content/Album/Card" :translate-params="{artist: album.artist.name}">By %{ artist }</translate>
|
||||
</router-link>
|
||||
</span><span class="time" v-if="album.release_date">– {{ album.release_date | year }}</span>
|
||||
</div>
|
||||
|
@ -36,21 +36,21 @@
|
|||
</table>
|
||||
<div class="center aligned segment" v-if="album.tracks.length > initialTracks">
|
||||
<em v-if="!showAllTracks" @click="showAllTracks = true" class="expand">
|
||||
<translate :translate-context="'Content/Album/Card.Link/Verb'" :translate-params="{count: album.tracks.length - initialTracks}" :translate-n="album.tracks.length - initialTracks" translate-plural="Show %{ count } more tracks">Show %{ count } more track</translate>
|
||||
<translate translate-context="Content/Album/Card.Link/Verb" :translate-params="{count: album.tracks.length - initialTracks}" :translate-n="album.tracks.length - initialTracks" translate-plural="Show %{ count } more tracks">Show %{ count } more track</translate>
|
||||
</em>
|
||||
<em v-else @click="showAllTracks = false" class="expand">
|
||||
<translate :translate-context="'Content/Album/Card.Link/Verb'">Collapse</translate>
|
||||
<translate translate-context="Content/Album/Card.Link/Verb">Collapse</translate>
|
||||
</em>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra content">
|
||||
<play-button class="mini basic orange right floated" :tracks="album.tracks" :album="album">
|
||||
<translate :translate-context="'Content/Queue/Card.Button.Label/Short, Verb'">Play all</translate>
|
||||
<translate translate-context="Content/Queue/Card.Button.Label/Short, Verb">Play all</translate>
|
||||
</play-button>
|
||||
<span>
|
||||
<i class="music icon"></i>
|
||||
<translate :translate-context="'Content/Album/Card'" :translate-params="{count: album.tracks.length}" :translate-n="album.tracks.length" translate-plural="%{ count } tracks">%{ count } track</translate>
|
||||
<translate translate-context="Content/Album/Card" :translate-params="{count: album.tracks.length}" :translate-n="album.tracks.length" translate-plural="%{ count } tracks">%{ count } track</translate>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -28,10 +28,10 @@
|
|||
</table>
|
||||
<div class="center aligned segment" v-if="artist.albums.length > initialAlbums">
|
||||
<em v-if="!showAllAlbums" @click="showAllAlbums = true" class="expand">
|
||||
<translate :translate-context="'Content/Artist/Card.Link'" :translate-params="{count: artist.albums.length - initialAlbums}" :translate-n="artist.albums.length - initialAlbums" translate-plural="Show %{ count } more albums">Show 1 more album</translate>
|
||||
<translate translate-context="Content/Artist/Card.Link" :translate-params="{count: artist.albums.length - initialAlbums}" :translate-n="artist.albums.length - initialAlbums" translate-plural="Show %{ count } more albums">Show 1 more album</translate>
|
||||
</em>
|
||||
<em v-else @click="showAllAlbums = false" class="expand">
|
||||
<translate :translate-context="'Content/Artist/Card.Link'">Collapse</translate>
|
||||
<translate translate-context="Content/Artist/Card.Link">Collapse</translate>
|
||||
</em>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -39,10 +39,10 @@
|
|||
<div class="extra content">
|
||||
<span>
|
||||
<i class="sound icon"></i>
|
||||
<translate :translate-context="'Content/Artist/Card'" :translate-params="{count: artist.albums.length}" :translate-n="artist.albums.length" translate-plural="%{ count } albums">1 album</translate>
|
||||
<translate translate-context="Content/Artist/Card" :translate-params="{count: artist.albums.length}" :translate-n="artist.albums.length" translate-plural="%{ count } albums">1 album</translate>
|
||||
</span>
|
||||
<play-button :is-playable="isPlayable" class="mini basic orange right floated" :artist="artist">
|
||||
<translate :translate-context="'Content/Queue/Button.Label/Short, Verb'">Play all</translate>
|
||||
<translate translate-context="Content/Queue/Button.Label/Short, Verb">Play all</translate>
|
||||
</play-button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
{{ time.parse(track.uploads[0].duration) }}
|
||||
</td>
|
||||
<td colspan="4" v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
<td colspan="2" class="align right">
|
||||
<track-favorite-icon class="favorite-icon" :track="track"></track-favorite-icon>
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th colspan="6"><translate :translate-context="'Content/Track/Table.Label'">Title</translate></th>
|
||||
<th colspan="4"><translate :translate-context="'Content/Track/Table.Label'">Artist</translate></th>
|
||||
<th colspan="4"><translate :translate-context="'Content/Track/Table.Label'">Album</translate></th>
|
||||
<th colspan="4"><translate :translate-context="'Content/Track/Table.Label'">Duration</translate></th>
|
||||
<th colspan="6"><translate translate-context="Content/Track/Table.Label">Title</translate></th>
|
||||
<th colspan="4"><translate translate-context="Content/Track/Table.Label">Artist</translate></th>
|
||||
<th colspan="4"><translate translate-context="Content/Track/Table.Label">Album</translate></th>
|
||||
<th colspan="4"><translate translate-context="Content/Track/Table.Label">Duration</translate></th>
|
||||
<th colspan="2"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
|
@ -2,20 +2,20 @@
|
|||
<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>
|
||||
<h2><translate translate-context="Content/Login/Title/Verb">Log in to your Funkwhale account</translate></h2>
|
||||
<form class="ui form" @submit.prevent="submit()">
|
||||
<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">
|
||||
<li v-if="error == 'invalid_credentials'"><translate :translate-context="'Content/Login/Error message.List item/Call to action'">Please double-check your username/password couple is correct</translate></li>
|
||||
<li v-else><translate :translate-context="'Content/Login/Error message/List item'">An unknown error happend, this can mean the server is down or cannot be reached</translate></li>
|
||||
<li v-if="error == 'invalid_credentials'"><translate translate-context="Content/Login/Error message.List item/Call to action">Please double-check your username/password couple is correct</translate></li>
|
||||
<li v-else><translate translate-context="Content/Login/Error message/List item">An unknown error happend, this can mean the server is down or cannot be reached</translate></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>
|
||||
<translate :translate-context="'Content/Login/Input.Label/Noun'">Username or email</translate> |
|
||||
<translate translate-context="Content/Login/Input.Label/Noun">Username or email</translate> |
|
||||
<router-link :to="{path: '/signup'}">
|
||||
<translate :translate-context="'Content/Login/Link/Verb'">Create an account</translate>
|
||||
<translate translate-context="Content/Login/Link/Verb">Create an account</translate>
|
||||
</router-link>
|
||||
</label>
|
||||
<input
|
||||
|
@ -31,16 +31,16 @@
|
|||
</div>
|
||||
<div class="field">
|
||||
<label>
|
||||
<translate :translate-context="'Content/Login/Input.Label'">Password</translate> |
|
||||
<translate translate-context="Content/Login/Input.Label">Password</translate> |
|
||||
<router-link :to="{name: 'auth.password-reset', query: {email: credentials.username}}">
|
||||
<translate :translate-context="'Content/Login/Link/Verb'">Reset your password</translate>
|
||||
<translate translate-context="Content/Login/Link/Verb">Reset your password</translate>
|
||||
</router-link>
|
||||
</label>
|
||||
<password-input :index="2" required v-model="credentials.password" />
|
||||
|
||||
</div>
|
||||
<button tabindex="3" :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit">
|
||||
<translate :translate-context="'Content/Login/Button.Label/Verb'">Login</translate>
|
||||
<translate translate-context="Content/Login/Button.Label/Verb">Login</translate>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<section class="ui vertical stripe segment">
|
||||
<div class="ui small text container">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/Login/Title'">Are you sure you want to log out?</translate>
|
||||
<translate translate-context="Content/Login/Title">Are you sure you want to log out?</translate>
|
||||
</h2>
|
||||
<p v-translate="{username: $store.state.auth.username}">You are currently logged in as %{ username }</p>
|
||||
<button class="ui button" @click="$store.dispatch('auth/logout')"><translate :translate-context="'Content/Login/Button.Label'">Yes, log me out!</translate></button>
|
||||
<button class="ui button" @click="$store.dispatch('auth/logout')"><translate translate-context="Content/Login/Button.Label">Yes, log me out!</translate></button>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
|
|
@ -14,14 +14,14 @@
|
|||
</div>
|
||||
</h2>
|
||||
<div class="ui basic green label">
|
||||
<translate :translate-context="'Content/Profile/Button.Paragraph'">This is you!</translate>
|
||||
<translate translate-context="Content/Profile/Button.Paragraph">This is you!</translate>
|
||||
</div>
|
||||
<a v-if="profile.is_staff"
|
||||
class="ui yellow label"
|
||||
:href="$store.getters['instance/absoluteUrl']('/api/admin')"
|
||||
target="_blank">
|
||||
<i class="star icon"></i>
|
||||
<translate :translate-context="'Content/Profile/Button.Label'">Staff member</translate>
|
||||
<translate translate-context="Content/Profile/Button.Label">Staff member</translate>
|
||||
</a>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -3,16 +3,16 @@
|
|||
<div class="ui vertical stripe segment">
|
||||
<section class="ui small text container">
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Settings/Title'">Account settings</translate>
|
||||
<translate translate-context="Content/Settings/Title">Account settings</translate>
|
||||
</h2>
|
||||
<form class="ui form" @submit.prevent="submitSettings()">
|
||||
<div v-if="settings.success" class="ui positive message">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Content/Settings/Message'">Settings updated</translate>
|
||||
<translate translate-context="Content/Settings/Message">Settings updated</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="settings.errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Settings/Error message.Title'">Your settings can't be updateds</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Settings/Error message.Title">Your settings can't be updateds</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in settings.errors">{{ error }}</li>
|
||||
</ul>
|
||||
|
@ -25,38 +25,38 @@
|
|||
</select>
|
||||
</div>
|
||||
<button :class="['ui', {'loading': isLoading}, 'button']" type="submit">
|
||||
<translate :translate-context="'Content/Settings/Button.Label/Verb'">Update settings</translate>
|
||||
<translate translate-context="Content/Settings/Button.Label/Verb">Update settings</translate>
|
||||
</button>
|
||||
</form>
|
||||
</section>
|
||||
<section class="ui small text container">
|
||||
<div class="ui hidden divider"></div>
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Settings/Title'">Avatar</translate>
|
||||
<translate translate-context="Content/Settings/Title">Avatar</translate>
|
||||
</h2>
|
||||
<div class="ui form">
|
||||
<div v-if="avatarErrors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Settings/Error message.Title'">Your avatar cannot be saved</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Settings/Error message.Title">Your avatar cannot be saved</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in avatarErrors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ui stackable grid">
|
||||
<div class="ui ten wide column">
|
||||
<h3 class="ui header"><translate :translate-context="'Content/Settings/Title/Verb'">Upload a new avatar</translate></h3>
|
||||
<p><translate :translate-context="'Content/Settings/Paragraph'">PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px.</translate></p>
|
||||
<h3 class="ui header"><translate translate-context="Content/Settings/Title/Verb">Upload a new avatar</translate></h3>
|
||||
<p><translate translate-context="Content/Settings/Paragraph">PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px.</translate></p>
|
||||
<input class="ui input" ref="avatar" type="file" />
|
||||
<div class="ui hidden divider"></div>
|
||||
<button @click="submitAvatar" :class="['ui', {'loading': isLoadingAvatar}, 'button']">
|
||||
<translate :translate-context="'Content/Settings/Button.Label/Verb'">Update avatar</translate>
|
||||
<translate translate-context="Content/Settings/Button.Label/Verb">Update avatar</translate>
|
||||
</button>
|
||||
</div>
|
||||
<div class="ui six wide column">
|
||||
<h3 class="ui header"><translate :translate-context="'Content/Settings/Title/Noun'">Current avatar</translate></h3>
|
||||
<h3 class="ui header"><translate translate-context="Content/Settings/Title/Noun">Current avatar</translate></h3>
|
||||
<img class="ui circular image" v-if="currentAvatar && currentAvatar.square_crop" v-lazy="$store.getters['instance/absoluteUrl'](currentAvatar.medium_square_crop)" />
|
||||
<div class="ui hidden divider"></div>
|
||||
<button @click="removeAvatar" v-if="currentAvatar && currentAvatar.square_crop" :class="['ui', {'loading': isLoadingAvatar}, ,'yellow', 'button']">
|
||||
<translate :translate-context="'Content/Settings/Button.Label/Verb'">Remove avatar</translate>
|
||||
<translate translate-context="Content/Settings/Button.Label/Verb">Remove avatar</translate>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -66,43 +66,43 @@
|
|||
<section class="ui small text container">
|
||||
<div class="ui hidden divider"></div>
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Settings/Title/Verb'">Change my password</translate>
|
||||
<translate translate-context="Content/Settings/Title/Verb">Change my password</translate>
|
||||
</h2>
|
||||
<div class="ui message">
|
||||
<translate :translate-context="'Content/Settings/Paragraph'">Changing your password will also change your Subsonic API password if you have requested one.</translate> <translate :translate-context="'Content/Settings/Paragraph'">You will have to update your password on your clients that use this password.</translate>
|
||||
<translate translate-context="Content/Settings/Paragraph'">Changing your password will also change your Subsonic API password if you have requested one.</translate> <translate translate-context="Content/Settings/Paragraph">You will have to update your password on your clients that use this password.</translate>
|
||||
</div>
|
||||
<form class="ui form" @submit.prevent="submitPassword()">
|
||||
<div v-if="passwordError" class="ui negative message">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Content/Settings/Error message.Title'">Your password cannot be changed</translate>
|
||||
<translate translate-context="Content/Settings/Error message.Title">Your password cannot be changed</translate>
|
||||
</div>
|
||||
<ul class="list">
|
||||
<li v-if="passwordError == 'invalid_credentials'"><translate :translate-context="'Content/Settings/Error message.List item/Call to action'">Please double-check your password is correct</translate></li>
|
||||
<li v-if="passwordError == 'invalid_credentials'"><translate translate-context="Content/Settings/Error message.List item/Call to action">Please double-check your password is correct</translate></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Settings/Input.Label'">Old password</translate></label>
|
||||
<label><translate translate-context="Content/Settings/Input.Label">Old password</translate></label>
|
||||
<password-input required v-model="old_password" />
|
||||
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Settings/Input.Label'">New password</translate></label>
|
||||
<label><translate translate-context="Content/Settings/Input.Label">New password</translate></label>
|
||||
<password-input required v-model="new_password" />
|
||||
</div>
|
||||
<dangerous-button
|
||||
color="yellow"
|
||||
:class="['ui', {'loading': isLoading}, 'button']"
|
||||
:action="submitPassword">
|
||||
<translate :translate-context="'Content/Settings/Button.Label'">Change password</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Settings/Title'">Change your password?</translate></p>
|
||||
<translate translate-context="Content/Settings/Button.Label">Change password</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Settings/Title">Change your password?</translate></p>
|
||||
<div slot="modal-content">
|
||||
<p><translate :translate-context="'Popup/Settings/Paragraph'">Changing your password will have the following consequences:</translate></p>
|
||||
<p><translate translate-context="Popup/Settings/Paragraph">Changing your password will have the following consequences:</translate></p>
|
||||
<ul>
|
||||
<li><translate :translate-context="'Popup/Settings/List item'">You will be logged out from this session and have to log in with the new one</translate></li>
|
||||
<li><translate :translate-context="'Popup/Settings/List item'">Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password</translate></li>
|
||||
<li><translate translate-context="Popup/Settings/List item">You will be logged out from this session and have to log in with the new one</translate></li>
|
||||
<li><translate translate-context="Popup/Settings/List item">Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password</translate></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Setting/Button.Label'">Disable access</translate></div>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Setting/Button.Label">Disable access</translate></div>
|
||||
</dangerous-button>
|
||||
</form>
|
||||
<div class="ui hidden divider" />
|
||||
|
@ -123,7 +123,7 @@
|
|||
@click="$store.dispatch('moderation/fetchContentFilters')"
|
||||
class="ui basic icon button">
|
||||
<i class="refresh icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label'">Refresh</translate>
|
||||
<translate translate-context="Content/*/Button.Label">Refresh</translate>
|
||||
</button>
|
||||
<h3 class="ui header">
|
||||
<translate>Hidden artists</translate>
|
||||
|
@ -131,8 +131,8 @@
|
|||
<table class="ui compact very basic unstackable table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><translate :translate-context="'Content/*/Table.Label'">Name</translate></th>
|
||||
<th><translate :translate-context="'Content/*/Table.Label'">Creation date</translate></th>
|
||||
<th><translate translate-context="Content/*/Table.Label">Name</translate></th>
|
||||
<th><translate translate-context="Content/*/Table.Label">Creation date</translate></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -148,7 +148,7 @@
|
|||
</td>
|
||||
<td>
|
||||
<button @click="$store.dispatch('moderation/deleteContentFilter', filter.uuid)" class="ui basic tiny button">
|
||||
<translate :translate-context="'Content/*/Button.Label'">Delete</translate>
|
||||
<translate translate-context="Content/*/Button.Label">Delete</translate>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
<template>
|
||||
<form class="ui form" @submit.prevent="requestNewToken()">
|
||||
<h2><translate :translate-context="'Content/Settings/Title'">Subsonic API password</translate></h2>
|
||||
<h2><translate translate-context="Content/Settings/Title">Subsonic API password</translate></h2>
|
||||
<p class="ui message" v-if="!subsonicEnabled">
|
||||
<translate :translate-context="'Content/Settings/Paragraph'">The Subsonic API is not available on this Funkwhale instance.</translate>
|
||||
<translate translate-context="Content/Settings/Paragraph">The Subsonic API is not available on this Funkwhale instance.</translate>
|
||||
</p>
|
||||
<p>
|
||||
<translate :translate-context="'Content/Settings/Paragraph'">Funkwhale is compatible with other music players that support the Subsonic API.</translate> <translate :translate-context="'Content/Settings/Paragraph'">You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance.</translate>
|
||||
<translate translate-context="Content/Settings/Paragraph'">Funkwhale is compatible with other music players that support the Subsonic API.</translate> <translate translate-context="Content/Settings/Paragraph">You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance.</translate>
|
||||
</p>
|
||||
<p>
|
||||
<translate :translate-context="'Content/Settings/Paragraph'">However, accessing Funkwhale from those clients require a separate password you can set below.</translate>
|
||||
<translate translate-context="Content/Settings/Paragraph">However, accessing Funkwhale from those clients require a separate password you can set below.</translate>
|
||||
</p>
|
||||
<p><a href="https://docs.funkwhale.audio/users/apps.html#subsonic-compatible-clients" target="_blank">
|
||||
<translate :translate-context="'Content/Settings/Link'">Discover how to use Funkwhale from other apps</translate>
|
||||
<translate translate-context="Content/Settings/Link">Discover how to use Funkwhale from other apps</translate>
|
||||
</a></p>
|
||||
<div v-if="success" class="ui positive message">
|
||||
<div class="header">{{ successMessage }}</div>
|
||||
</div>
|
||||
<div v-if="subsonicEnabled && errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Settings/Error message.Title'">Error</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Settings/Error message.Title">Error</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
|
@ -31,25 +31,25 @@
|
|||
color="grey"
|
||||
:class="['ui', {'loading': isLoading}, 'button']"
|
||||
:action="requestNewToken">
|
||||
<translate :translate-context="'Content/Settings/Button.Label/Verb'">Request a new password</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Settings/Title'">Request a new Subsonic API password?</translate></p>
|
||||
<p slot="modal-content"><translate :translate-context="'Popup/Settings/Paragraph'">This will log you out from existing devices that use the current password.</translate></p>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Settings/Button.Label/Verb'">Request a new password</translate></div>
|
||||
<translate translate-context="Content/Settings/Button.Label/Verb">Request a new password</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Settings/Title">Request a new Subsonic API password?</translate></p>
|
||||
<p slot="modal-content"><translate translate-context="Popup/Settings/Paragraph">This will log you out from existing devices that use the current password.</translate></p>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Settings/Button.Label/Verb">Request a new password</translate></div>
|
||||
</dangerous-button>
|
||||
<button
|
||||
v-else
|
||||
color="grey"
|
||||
:class="['ui', {'loading': isLoading}, 'button']"
|
||||
@click="requestNewToken"><translate :translate-context="'Content/Settings/Button.Label/Verb'">Request a password</translate></button>
|
||||
@click="requestNewToken"><translate translate-context="Content/Settings/Button.Label/Verb">Request a password</translate></button>
|
||||
<dangerous-button
|
||||
v-if="token"
|
||||
color="yellow"
|
||||
:class="['ui', {'loading': isLoading}, 'button']"
|
||||
:action="disable">
|
||||
<translate :translate-context="'Content/Settings/Button.Label/Verb'">Disable Subsonic access</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Settings/Title'">Disable Subsonic API access?</translate></p>
|
||||
<p slot="modal-content"><translate :translate-context="'Popup/Settings/Paragraph'">This will completely disable access to the Subsonic API using from account.</translate></p>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Settings/Button.Label'">Disable access</translate></div>
|
||||
<translate translate-context="Content/Settings/Button.Label/Verb">Disable Subsonic access</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Settings/Title">Disable Subsonic API access?</translate></p>
|
||||
<p slot="modal-content"><translate translate-context="Popup/Settings/Paragraph">This will completely disable access to the Subsonic API using from account.</translate></p>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Settings/Button.Label">Disable access</translate></div>
|
||||
</dangerous-button>
|
||||
</template>
|
||||
</form>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<th colspan="1000">
|
||||
<div v-if="refreshable" class="right floated">
|
||||
<span v-if="needsRefresh">
|
||||
<translate :translate-context="'Content/*/Button.Help text.Paragraph'">Content have been updated, click refresh to see up-to-date content</translate>
|
||||
<translate translate-context="Content/*/Button.Help text.Paragraph">Content have been updated, click refresh to see up-to-date content</translate>
|
||||
</span>
|
||||
<button
|
||||
@click="$emit('refresh')"
|
||||
|
@ -20,7 +20,7 @@
|
|||
<div class="ui small left floated form" v-if="actionUrl && actions.length > 0">
|
||||
<div class="ui inline fields">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/*/Dropdown.Label/Noun'">Actions</translate></label>
|
||||
<label><translate translate-context="Content/*/Dropdown.Label/Noun">Actions</translate></label>
|
||||
<select class="ui dropdown" v-model="currentActionName">
|
||||
<option v-for="action in actions" :value="action.name">
|
||||
{{ action.label }}
|
||||
|
@ -33,9 +33,9 @@
|
|||
confirm-color="green"
|
||||
color=""
|
||||
@confirm="launchAction">
|
||||
<translate :translate-context="'Content/*/Button.Label/Short, Verb'">Go</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Short, Verb">Go</translate>
|
||||
<p slot="modal-header">
|
||||
<translate :translate-context="'Modal/*/Title'"
|
||||
<translate translate-context="Modal/*/Title"
|
||||
key="1"
|
||||
:translate-n="affectedObjectsCount"
|
||||
:translate-params="{count: affectedObjectsCount, action: currentActionName}"
|
||||
|
@ -44,19 +44,19 @@
|
|||
</translate>
|
||||
</p>
|
||||
<p slot="modal-content">
|
||||
<translate :translate-context="'Modal/*/Paragraph'">This may affect a lot of elements or have irreversible consequences, please double check this is really what you want.</translate>
|
||||
<translate translate-context="Modal/*/Paragraph">This may affect a lot of elements or have irreversible consequences, please double check this is really what you want.</translate>
|
||||
</p>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Modal/*/Button.Label/Short, Verb'">Launch</translate></div>
|
||||
<div slot="modal-confirm"><translate translate-context="Modal/*/Button.Label/Short, Verb">Launch</translate></div>
|
||||
</dangerous-button>
|
||||
<div
|
||||
v-else
|
||||
@click="launchAction"
|
||||
:disabled="checked.length === 0"
|
||||
:class="['ui', {disabled: checked.length === 0}, {'loading': actionLoading}, 'button']">
|
||||
<translate :translate-context="'Content/*/Button.Label/Short, Verb'">Go</translate></div>
|
||||
<translate translate-context="Content/*/Button.Label/Short, Verb">Go</translate></div>
|
||||
</div>
|
||||
<div class="count field">
|
||||
<translate :translate-context="'Content/*/Paragraph'"
|
||||
<translate translate-context="Content/*/Paragraph"
|
||||
tag="span"
|
||||
v-if="selectAll"
|
||||
key="1"
|
||||
|
@ -65,7 +65,7 @@
|
|||
translate-plural="All %{ count } elements selected">
|
||||
All %{ count } element selected
|
||||
</translate>
|
||||
<translate :translate-context="'Content/*/Paragraph'"
|
||||
<translate translate-context="Content/*/Paragraph"
|
||||
tag="span"
|
||||
v-else
|
||||
key="2"
|
||||
|
@ -76,7 +76,7 @@
|
|||
</translate>
|
||||
<template v-if="currentAction.allowAll && checkable.length > 0 && checkable.length === checked.length">
|
||||
<a @click="selectAll = true" v-if="!selectAll">
|
||||
<translate :translate-context="'Content/*/Link/Verb'"
|
||||
<translate translate-context="Content/*/Link/Verb"
|
||||
key="3"
|
||||
:translate-n="objectsData.count"
|
||||
:translate-params="{total: objectsData.count}"
|
||||
|
@ -85,20 +85,20 @@
|
|||
</translate>
|
||||
</a>
|
||||
<a @click="selectAll = false" v-else>
|
||||
<translate :translate-context="'Content/*/Link/Verb'" key="4">Select only current page</translate>
|
||||
<translate translate-context="Content/*/Link/Verb" key="4">Select only current page</translate>
|
||||
</a>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="actionErrors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/*/Error message/Header'">Error while applying action</translate></div>
|
||||
<div class="header"><translate translate-context="Content/*/Error message/Header">Error while applying action</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in actionErrors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="actionResult" class="ui positive message">
|
||||
<p>
|
||||
<translate :translate-context="'Content/*/Paragraph'"
|
||||
<translate translate-context="Content/*/Paragraph"
|
||||
:translate-n="actionResult.updated"
|
||||
:translate-params="{count: actionResult.updated, action: actionResult.action}"
|
||||
translate-plural="Action %{ action } was launched successfully on %{ count } elements">
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<template>
|
||||
<div class="ui fluid action input">
|
||||
<p class="message" v-if="copied">
|
||||
<translate :translate-context="'Content/*/Paragraph/Short'">Text copied to clipboard!</translate>
|
||||
<translate translate-context="Content/*/Paragraph/Short">Text copied to clipboard!</translate>
|
||||
</p>
|
||||
<input ref="input" :value="value" type="text">
|
||||
<button @click="copy" :class="['ui', buttonClasses, 'right', 'labeled', 'icon', 'button']">
|
||||
<i class="copy icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label/Short, Verb'">Copy</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Short, Verb">Copy</translate>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<modal class="small" :show.sync="showModal">
|
||||
<div class="header">
|
||||
<slot name="modal-header">
|
||||
<translate :translate-context="'Modal/*/Title'">Do you want to confirm this action?</translate>
|
||||
<translate translate-context="Modal/*/Title">Do you want to confirm this action?</translate>
|
||||
</slot>
|
||||
</div>
|
||||
<div class="scrolling content">
|
||||
|
@ -15,11 +15,11 @@
|
|||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui cancel button">
|
||||
<translate :translate-context="'Modal/*/Button.Label/Short, Verb'">Cancel</translate>
|
||||
<translate translate-context="Modal/*/Button.Label/Short, Verb">Cancel</translate>
|
||||
</div>
|
||||
<div :class="['ui', 'confirm', confirmButtonColor, 'button']" @click="confirm">
|
||||
<slot name="modal-confirm">
|
||||
<translate :translate-context="'Modal/*/Button.Label/Short, Verb'">Confirm</translate>
|
||||
<translate translate-context="Modal/*/Button.Label/Short, Verb">Confirm</translate>
|
||||
</slot>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<template>
|
||||
<span>
|
||||
<translate :translate-context="'Content/*/Paragraph'"
|
||||
<translate translate-context="Content/*/Paragraph"
|
||||
v-if="durationData.hours > 0"
|
||||
:translate-params="{minutes: durationData.minutes, hours: durationData.hours}">%{ hours } h %{ minutes } min</translate>
|
||||
<translate :translate-context="'Content/*/Paragraph'"
|
||||
<translate translate-context="Content/*/Paragraph"
|
||||
v-else
|
||||
:translate-params="{minutes: durationData.minutes}">%{ minutes } min</translate>
|
||||
</span>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<slot name="title">
|
||||
|
||||
<i class="search icon"></i>
|
||||
<translate :translate-context="'Content/*/Paragraph'">
|
||||
<translate translate-context="Content/*/Paragraph">
|
||||
No results were found.
|
||||
</translate>
|
||||
</slot>
|
||||
|
@ -14,7 +14,7 @@
|
|||
<div class="inline">
|
||||
<slot></slot>
|
||||
<button v-if="refresh" class="ui button" @click="$emit('refresh')">
|
||||
<translate :translate-context="'Content/*/Button.Label/Short, Verb'">
|
||||
<translate translate-context="Content/*/Button.Label/Short, Verb">
|
||||
Refresh
|
||||
</translate></button>
|
||||
</button>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<section class="ui vertical center aligned stripe segment">
|
||||
<div :class="['ui', {'active': isLoading}, 'inverted', 'dimmer']">
|
||||
<div class="ui text loader">
|
||||
<translate :translate-context="'Content/Favorites/Message'">Loading your favorites…</translate>
|
||||
<translate translate-context="Content/Favorites/Message">Loading your favorites…</translate>
|
||||
</div>
|
||||
</div>
|
||||
<h2 v-if="results" class="ui center aligned icon header">
|
||||
|
@ -12,7 +12,7 @@
|
|||
translate-plural="%{ count } favorites"
|
||||
:translate-n="$store.state.favorites.count"
|
||||
:translate-params="{count: results.count}"
|
||||
:translate-context="'Content/Favorites/Title'">
|
||||
translate-context="Content/Favorites/Title">
|
||||
1 favorite
|
||||
</translate>
|
||||
</h2>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<div :class="['ui', {'loading': isLoading}, 'form']">
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Favorites/Dropdown.Title/Short, Name'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Favorites/Dropdown.Title/Short, Name">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -30,14 +30,14 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/*/Dropdown.Label/Short, Name'">Order</translate></label>
|
||||
<label><translate translate-context="Content/*/Dropdown.Label/Short, Name">Order</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/*/Dropdown/Short'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/*/Short'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/*/Dropdown/Short">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/*/Short">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/*/Dropdown.Label/Short, Name'">Results per page</translate></label>
|
||||
<label><translate translate-context="Content/*/Dropdown.Label/Short, Name">Results per page</translate></label>
|
||||
<select class="ui dropdown" v-model="paginateBy">
|
||||
<option :value="parseInt(12)">12</option>
|
||||
<option :value="parseInt(25)">25</option>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<button @click="$store.dispatch('favorites/toggle', track.id)" v-if="button" :class="['ui', 'pink', {'inverted': isFavorite}, {'favorited': isFavorite}, 'icon', 'labeled', 'button']">
|
||||
<i class="heart icon"></i>
|
||||
<translate v-if="isFavorite" :translate-context="'Content/Track/Button.Message'">In favorites</translate>
|
||||
<translate v-else :translate-context="'Content/Track/Button.Message'">Add to favorites</translate>
|
||||
<translate v-if="isFavorite" translate-context="Content/Track/Button.Message">In favorites</translate>
|
||||
<translate v-else translate-context="Content/Track/Button.Message">Add to favorites</translate>
|
||||
</button>
|
||||
<button
|
||||
v-else
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<slot name="title"></slot>
|
||||
</h3>
|
||||
<p v-if="!isLoading && libraries.length > 0" class="ui subtitle"><slot name="subtitle"></slot></p>
|
||||
<p v-if="!isLoading && libraries.length === 0" class="ui subtitle"><translate :translate-context="'Content/Federation/Paragraph'">No matching library.</translate></p>
|
||||
<p v-if="!isLoading && libraries.length === 0" class="ui subtitle"><translate translate-context="Content/Federation/Paragraph">No matching library.</translate></p>
|
||||
<i @click="fetchData(previousPage)" :disabled="!previousPage" :class="['ui', {disabled: !previousPage}, 'circular', 'angle left', 'icon']">
|
||||
</i>
|
||||
<i @click="fetchData(nextPage)" :disabled="!nextPage" :class="['ui', {disabled: !nextPage}, 'circular', 'angle right', 'icon']">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div v-if="stats" class="ui stackable two column grid">
|
||||
<div class="column">
|
||||
<h3 class="ui left aligned header">
|
||||
<translate :translate-context="'Content/About/Title/Noun'">User activity</translate>
|
||||
<translate translate-context="Content/About/Title/Noun">User activity</translate>
|
||||
</h3>
|
||||
<div v-if="stats" class="ui mini horizontal statistics">
|
||||
<div class="statistic">
|
||||
|
@ -11,48 +11,48 @@
|
|||
<i class="green user icon"></i>
|
||||
{{ stats.users }}
|
||||
</div>
|
||||
<div class="label"><translate :translate-context="'Content/About/Paragraph/Unit'">users</translate></div>
|
||||
<div class="label"><translate translate-context="Content/About/Paragraph/Unit">users</translate></div>
|
||||
</div>
|
||||
<div class="statistic">
|
||||
<div class="value">
|
||||
<i class="orange sound icon"></i> {{ stats.listenings }}
|
||||
</div>
|
||||
<div class="label"><translate :translate-context="'Content/About/Paragraph/Unit'">tracks listened</translate></div>
|
||||
<div class="label"><translate translate-context="Content/About/Paragraph/Unit">tracks listened</translate></div>
|
||||
</div>
|
||||
<div class="statistic">
|
||||
<div class="value">
|
||||
<i class="pink heart icon"></i> {{ stats.trackFavorites }}
|
||||
</div>
|
||||
<div class="label"><translate :translate-context="'Content/About/Paragraph/Unit'">Tracks favorited</translate></div>
|
||||
<div class="label"><translate translate-context="Content/About/Paragraph/Unit">Tracks favorited</translate></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3 class="ui left aligned header"><translate :translate-context="'Content/About/Title/Noun'">Library</translate></h3>
|
||||
<h3 class="ui left aligned header"><translate translate-context="Content/About/Title/Noun">Library</translate></h3>
|
||||
<div class="ui mini horizontal statistics">
|
||||
<div class="statistic">
|
||||
<div class="value">
|
||||
{{ parseInt(stats.musicDuration) }}
|
||||
</div>
|
||||
<div class="label"><translate :translate-context="'Content/About/Paragraph/Unit'">Hours of music</translate></div>
|
||||
<div class="label"><translate translate-context="Content/About/Paragraph/Unit">Hours of music</translate></div>
|
||||
</div>
|
||||
<div class="statistic">
|
||||
<div class="value">
|
||||
{{ stats.artists }}
|
||||
</div>
|
||||
<div class="label"><translate :translate-context="'Content/About/Paragraph/Unit'">Artists</translate></div>
|
||||
<div class="label"><translate translate-context="Content/About/Paragraph/Unit">Artists</translate></div>
|
||||
</div>
|
||||
<div class="statistic">
|
||||
<div class="value">
|
||||
{{ stats.albums }}
|
||||
</div>
|
||||
<div class="label"><translate :translate-context="'Content/About/Paragraph/Unit'">Albums</translate></div>
|
||||
<div class="label"><translate translate-context="Content/About/Paragraph/Unit">Albums</translate></div>
|
||||
</div>
|
||||
<div class="statistic">
|
||||
<div class="value">
|
||||
{{ stats.tracks }}
|
||||
</div>
|
||||
<div class="label"><translate :translate-context="'Content/About/Paragraph/Unit'">Tracks</translate></div>
|
||||
<div class="label"><translate translate-context="Content/About/Paragraph/Unit">Tracks</translate></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -15,27 +15,27 @@
|
|||
</h2>
|
||||
<div class="ui hidden divider"></div>
|
||||
<play-button class="orange" :tracks="album.tracks">
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb, Short'">Play all</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb, Short">Play all</translate>
|
||||
</play-button>
|
||||
|
||||
<a :href="wikipediaUrl" target="_blank" class="ui icon labeled button">
|
||||
<i class="wikipedia w icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb'">Search on Wikipedia</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb">Search on Wikipedia</translate>
|
||||
</a>
|
||||
<a v-if="musicbrainzUrl" :href="musicbrainzUrl" target="_blank" class="ui icon labeled button">
|
||||
<i class="external icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb'">View on MusicBrainz</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb">View on MusicBrainz</translate>
|
||||
</a>
|
||||
<template v-if="publicLibraries.length > 0">
|
||||
<button
|
||||
@click="showEmbedModal = !showEmbedModal"
|
||||
class="ui button icon labeled">
|
||||
<i class="code icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb'">Embed</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb">Embed</translate>
|
||||
</button>
|
||||
<modal :show.sync="showEmbedModal">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Popup/Album/Title/Verb'">Embed this album on your website</translate>
|
||||
<translate translate-context="Popup/Album/Title/Verb">Embed this album on your website</translate>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="description">
|
||||
|
@ -45,7 +45,7 @@
|
|||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui deny button">
|
||||
<translate :translate-context="'Popup/*/Button.Label/Verb'">Cancel</translate>
|
||||
<translate translate-context="Popup/*/Button.Label/Verb">Cancel</translate>
|
||||
</div>
|
||||
</div>
|
||||
</modal>
|
||||
|
@ -58,10 +58,10 @@
|
|||
tag="h2"
|
||||
class="left floated"
|
||||
:translate-params="{number: disc_number + 1}"
|
||||
:translate-context="'Content/Album/'"
|
||||
translate-context="Content/Album/"
|
||||
>Volume %{ number }</translate>
|
||||
<play-button class="right floated orange" :tracks="tracks">
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb, Short'">Play all</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb, Short">Play all</translate>
|
||||
</play-button>
|
||||
<track-table :artist="album.artist" :display-position="true" :tracks="tracks"></track-table>
|
||||
</section>
|
||||
|
@ -69,17 +69,17 @@
|
|||
<template v-else>
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/*/Title/Name'">Tracks</translate>
|
||||
<translate translate-context="Content/*/Title/Name">Tracks</translate>
|
||||
</h2>
|
||||
<track-table v-if="album" :artist="album.artist" :display-position="true" :tracks="album.tracks"></track-table>
|
||||
</section>
|
||||
</template>
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/*/Title/Name'">User libraries</translate>
|
||||
<translate translate-context="Content/*/Title/Name">User libraries</translate>
|
||||
</h2>
|
||||
<library-widget @loaded="libraries = $event" :url="'albums/' + id + '/libraries/'">
|
||||
<translate slot="subtitle" :translate-context="'Content/Album/Paragraph'">This album is present in the following libraries:</translate>
|
||||
<translate slot="subtitle" translate-context="Content/Album/Paragraph">This album is present in the following libraries:</translate>
|
||||
</library-widget>
|
||||
</section>
|
||||
</template>
|
||||
|
|
|
@ -2,18 +2,18 @@
|
|||
<main v-title="labels.title">
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Album/Title'">Browsing albums</translate>
|
||||
<translate translate-context="Content/Album/Title">Browsing albums</translate>
|
||||
</h2>
|
||||
<div :class="['ui', {'loading': isLoading}, 'form']">
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label>
|
||||
<translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate>
|
||||
<translate translate-context="Content/Search/Input.Label/Verb">Search</translate>
|
||||
</label>
|
||||
<input type="text" name="search" v-model="query" :placeholder="labels.searchPlaceholder"/>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -21,14 +21,14 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering direction</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering direction</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Results per page</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Results per page</translate></label>
|
||||
<select class="ui dropdown" v-model="paginateBy">
|
||||
<option :value="parseInt(12)">12</option>
|
||||
<option :value="parseInt(25)">25</option>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<div class="content">
|
||||
{{ artist.name }}
|
||||
<div class="sub header" v-if="albums">
|
||||
<translate :translate-context="'Content/Artist/Paragraph'"
|
||||
<translate translate-context="Content/Artist/Paragraph"
|
||||
tag="div"
|
||||
translate-plural="%{ count } tracks in %{ albumsCount } albums"
|
||||
:translate-n="totalTracks"
|
||||
|
@ -24,27 +24,27 @@
|
|||
<div class="ui hidden divider"></div>
|
||||
<radio-button type="artist" :object-id="artist.id"></radio-button>
|
||||
<play-button :is-playable="isPlayable" class="orange" :artist="artist">
|
||||
<translate :translate-context="'Content/Artist/Button.Label/Verb'">Play all albums</translate>
|
||||
<translate translate-context="Content/Artist/Button.Label/Verb">Play all albums</translate>
|
||||
</play-button>
|
||||
|
||||
<a :href="wikipediaUrl" target="_blank" class="ui icon labeled button">
|
||||
<i class="wikipedia w icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb'">Search on Wikipedia</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb">Search on Wikipedia</translate>
|
||||
</a>
|
||||
<a v-if="musicbrainzUrl" :href="musicbrainzUrl" target="_blank" class="ui button">
|
||||
<i class="external icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb'">View on MusicBrainz</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb">View on MusicBrainz</translate>
|
||||
</a>
|
||||
<template v-if="publicLibraries.length > 0">
|
||||
<button
|
||||
@click="showEmbedModal = !showEmbedModal"
|
||||
class="ui button icon labeled">
|
||||
<i class="code icon"></i>
|
||||
<translate :translate-context="'Content/*/Button.Label/Verb'">Embed</translate>
|
||||
<translate translate-context="Content/*/Button.Label/Verb">Embed</translate>
|
||||
</button>
|
||||
<modal :show.sync="showEmbedModal">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Popup/Artist/Title/Verb'">Embed this artist work on your website</translate>
|
||||
<translate translate-context="Popup/Artist/Title/Verb">Embed this artist work on your website</translate>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="description">
|
||||
|
@ -54,7 +54,7 @@
|
|||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui deny button">
|
||||
<translate :translate-context="'Popup/*/Button.Label/Verb'">Cancel</translate>
|
||||
<translate translate-context="Popup/*/Button.Label/Verb">Cancel</translate>
|
||||
</div>
|
||||
</div>
|
||||
</modal>
|
||||
|
@ -68,10 +68,10 @@
|
|||
<translate>You are currently hiding content related to this artist.</translate>
|
||||
</p>
|
||||
<router-link class="right floated" :to="{name: 'settings'}">
|
||||
<translate :translate-context="'Content/Moderation/Link'">Review my filters</translate>
|
||||
<translate translate-context="Content/Moderation/Link">Review my filters</translate>
|
||||
</router-link>
|
||||
<button @click="$store.dispatch('moderation/deleteContentFilter', contentFilter.uuid)" class="ui basic tiny button">
|
||||
<translate :translate-context="'Content/Moderation/Button.Label'">Remove filter</translate>
|
||||
<translate translate-context="Content/Moderation/Button.Label">Remove filter</translate>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -80,7 +80,7 @@
|
|||
</section>
|
||||
<section v-else-if="albums && albums.length > 0" class="ui vertical stripe segment">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/Artist/Title'">Albums by this artist</translate>
|
||||
<translate translate-context="Content/Artist/Title">Albums by this artist</translate>
|
||||
</h2>
|
||||
<div class="ui cards" >
|
||||
<album-card :mode="'rich'" :album="album" :key="album.id" v-for="album in albums"></album-card>
|
||||
|
@ -88,16 +88,16 @@
|
|||
</section>
|
||||
<section v-if="tracks.length > 0" class="ui vertical stripe segment">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/Artist/Title'">Tracks by this artist</translate>
|
||||
<translate translate-context="Content/Artist/Title">Tracks by this artist</translate>
|
||||
</h2>
|
||||
<track-table :display-position="true" :tracks="tracks"></track-table>
|
||||
</section>
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/Artist/Title'">User libraries</translate>
|
||||
<translate translate-context="Content/Artist/Title">User libraries</translate>
|
||||
</h2>
|
||||
<library-widget @loaded="libraries = $event" :url="'artists/' + id + '/libraries/'">
|
||||
<translate :translate-context="'Content/Artist/Paragraph'" slot="subtitle">This artist is present in the following libraries:</translate>
|
||||
<translate translate-context="Content/Artist/Paragraph" slot="subtitle">This artist is present in the following libraries:</translate>
|
||||
</library-widget>
|
||||
</section>
|
||||
</template>
|
||||
|
|
|
@ -2,18 +2,18 @@
|
|||
<main v-title="labels.title">
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Artist/Title'">Browsing artists</translate>
|
||||
<translate translate-context="Content/Artist/Title">Browsing artists</translate>
|
||||
</h2>
|
||||
<div :class="['ui', {'loading': isLoading}, 'form']">
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label>
|
||||
<translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate>
|
||||
<translate translate-context="Content/Search/Input.Label/Verb">Search</translate>
|
||||
</label>
|
||||
<input type="text" name="search" v-model="query" :placeholder="labels.searchPlaceholder"/>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -21,14 +21,14 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Ordering direction</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering direction</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Results per page</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label">Results per page</translate></label>
|
||||
<select class="ui dropdown" v-model="paginateBy">
|
||||
<option :value="parseInt(12)">12</option>
|
||||
<option :value="parseInt(25)">25</option>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div class="content">
|
||||
<div class="header">
|
||||
<router-link :to="detailUrl">
|
||||
<translate :translate-context="'Content/Library/Card/Short'" :translate-params="{id: obj.uuid.substring(0, 8)}">Modification %{ id }</translate>
|
||||
<translate translate-context="Content/Library/Card/Short" :translate-params="{id: obj.uuid.substring(0, 8)}">Modification %{ id }</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="meta">
|
||||
|
@ -11,7 +11,7 @@
|
|||
v-if="obj.target && obj.target.type === 'track'"
|
||||
:to="{name: 'library.tracks.detail', params: {id: obj.target.id }}">
|
||||
<i class="music icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card/Short'" :translate-params="{id: obj.target.id, name: obj.target.repr}">Track #%{ id } - %{ name }</translate>
|
||||
<translate translate-context="Content/Library/Card/Short" :translate-params="{id: obj.target.id, name: obj.target.repr}">Track #%{ id } - %{ name }</translate>
|
||||
</router-link>
|
||||
<br>
|
||||
<human-date :date="obj.creation_date" :icon="true"></human-date>
|
||||
|
@ -19,19 +19,19 @@
|
|||
<span class="right floated">
|
||||
<span v-if="obj.is_approved && obj.is_applied">
|
||||
<i class="green check icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card/Short'">Approved and applied</translate>
|
||||
<translate translate-context="Content/Library/Card/Short">Approved and applied</translate>
|
||||
</span>
|
||||
<span v-else-if="obj.is_approved">
|
||||
<i class="green check icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card/Short'">Approved</translate>
|
||||
<translate translate-context="Content/Library/Card/Short">Approved</translate>
|
||||
</span>
|
||||
<span v-else-if="obj.is_approved === null">
|
||||
<i class="yellow hourglass icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card/Short'">Pending review</translate>
|
||||
<translate translate-context="Content/Library/Card/Short">Pending review</translate>
|
||||
</span>
|
||||
<span v-else-if="obj.is_approved === false">
|
||||
<i class="red x icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card/Short'">Rejected</translate>
|
||||
<translate translate-context="Content/Library/Card/Short">Rejected</translate>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -43,9 +43,9 @@
|
|||
<table v-if="obj.type === 'update'" class="ui celled very basic fixed stacking table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><translate :translate-context="'Content/Library/Card.Table.Header/Short'">Field</translate></th>
|
||||
<th><translate :translate-context="'Content/Library/Card.Table.Header/Short'">Old value</translate></th>
|
||||
<th><translate :translate-context="'Content/Library/Card.Table.Header/Short'">New value</translate></th>
|
||||
<th><translate translate-context="Content/Library/Card.Table.Header/Short">Field</translate></th>
|
||||
<th><translate translate-context="Content/Library/Card.Table.Header/Short">Old value</translate></th>
|
||||
<th><translate translate-context="Content/Library/Card.Table.Header/Short">New value</translate></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -58,7 +58,7 @@
|
|||
</span>
|
||||
</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
|
||||
<td v-if="field.diff">
|
||||
|
@ -79,24 +79,24 @@
|
|||
v-if="canApprove && obj.is_approved !== true"
|
||||
@click="approve(true)"
|
||||
:class="['ui', {loading: isLoading}, 'green', 'basic', 'button']">
|
||||
<translate :translate-context="'Content/Library/Button.Label'">Approve</translate>
|
||||
<translate translate-context="Content/Library/Button.Label">Approve</translate>
|
||||
</button>
|
||||
<button
|
||||
v-if="canApprove && obj.is_approved === null"
|
||||
@click="approve(false)"
|
||||
:class="['ui', {loading: isLoading}, 'yellow', 'basic', 'button']">
|
||||
<translate :translate-context="'Content/Library/Button.Label'">Reject</translate>
|
||||
<translate translate-context="Content/Library/Button.Label">Reject</translate>
|
||||
</button>
|
||||
<dangerous-button
|
||||
v-if="canDelete"
|
||||
:class="['ui', {loading: isLoading}, 'basic button']"
|
||||
:action="remove">
|
||||
<translate :translate-context="'*/*/*/Verb'">Delete</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Library/Title'">Delete this suggestion?</translate></p>
|
||||
<translate translate-context="*/*/*/Verb">Delete</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Library/Title">Delete this suggestion?</translate></p>
|
||||
<div slot="modal-content">
|
||||
<p><translate :translate-context="'Popup/Library/Paragraph'">The suggestion will be completely removed, this action is irreversible.</translate></p>
|
||||
<p><translate translate-context="Popup/Library/Paragraph">The suggestion will be completely removed, this action is irreversible.</translate></p>
|
||||
</div>
|
||||
<p slot="modal-confirm"><translate :translate-context="'Popup/Library/Button.Label'">Delete</translate></p>
|
||||
<p slot="modal-confirm"><translate translate-context="Popup/Library/Button.Label">Delete</translate></p>
|
||||
</dangerous-button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<div v-if="submittedMutation">
|
||||
<div class="ui positive message">
|
||||
<div class="header"><translate :translate-context="'Content/Library/Paragraph'">Your edit was successfully submitted.</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Library/Paragraph">Your edit was successfully submitted.</translate></div>
|
||||
</div>
|
||||
<edit-card :obj="submittedMutation" :current-state="currentState" />
|
||||
<button class="ui button" @click.prevent="submittedMutation = null">
|
||||
<translate :translate-context="'Content/Library/Button.Label'">
|
||||
<translate translate-context="Content/Library/Button.Label">
|
||||
Submit another edit
|
||||
</translate>
|
||||
</button>
|
||||
|
@ -15,28 +15,28 @@
|
|||
<edit-list :filters="editListFilters" :url="mutationsUrl" :obj="object" :currentState="currentState">
|
||||
<div slot="title">
|
||||
<template v-if="showPendingReview">
|
||||
<translate :translate-context="'Content/Library/Paragraph'">
|
||||
<translate translate-context="Content/Library/Paragraph">
|
||||
Recent edits awaiting review
|
||||
</translate>
|
||||
<button class="ui tiny basic right floated button" @click.prevent="showPendingReview = false">
|
||||
<translate :translate-context="'Content/Library/Button.Label'">
|
||||
<translate translate-context="Content/Library/Button.Label">
|
||||
Show all edits
|
||||
</translate>
|
||||
</button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<translate :translate-context="'Content/Library/Paragraph'">
|
||||
<translate translate-context="Content/Library/Paragraph">
|
||||
Recent edits
|
||||
</translate>
|
||||
<button class="ui tiny basic right floated button" @click.prevent="showPendingReview = true">
|
||||
<translate :translate-context="'Content/Library/Button.Label'">
|
||||
<translate translate-context="Content/Library/Button.Label">
|
||||
Retrict to unreviewed edits
|
||||
</translate>
|
||||
</button>
|
||||
</template>
|
||||
</div>
|
||||
<empty-state slot="empty-state">
|
||||
<translate :translate-context="'Content/Library/Paragraph'">
|
||||
<translate translate-context="Content/Library/Paragraph">
|
||||
Suggest a change using the form below.
|
||||
</translate>
|
||||
</empty-state>
|
||||
|
@ -44,13 +44,13 @@
|
|||
<form class="ui form" @submit.prevent="submit()">
|
||||
<div class="ui hidden divider"></div>
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Library/Error message.Title'">Error while submitting edit</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Library/Error message.Title">Error while submitting edit</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="!canEdit" class="ui message">
|
||||
<translate :translate-context="'Content/Library/Paragraph'">
|
||||
<translate translate-context="Content/Library/Paragraph">
|
||||
You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval.
|
||||
</translate>
|
||||
</div>
|
||||
|
@ -62,12 +62,12 @@
|
|||
<div v-if="values[fieldConfig.id] != initialValues[fieldConfig.id]">
|
||||
<button class="ui tiny basic right floated reset button" form="noop" @click.prevent="values[fieldConfig.id] = initialValues[fieldConfig.id]">
|
||||
<i class="undo icon"></i>
|
||||
<translate :translate-context="'Content/Library/Button.Label'" :translate-params="{value: initialValues[fieldConfig.id]}">Reset to initial value: %{ value }</translate>
|
||||
<translate translate-context="Content/Library/Button.Label" :translate-params="{value: initialValues[fieldConfig.id]}">Reset to initial value: %{ value }</translate>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="summary"><translate :translate-context="'*/*/*'">Summary (optional)</translate></label>
|
||||
<label for="summary"><translate translate-context="*/*/*">Summary (optional)</translate></label>
|
||||
<textarea name="change-summary" v-model="summary" id="change-summary" rows="3" :placeholder="labels.summaryPlaceholder"></textarea>
|
||||
</div>
|
||||
<router-link
|
||||
|
@ -75,11 +75,11 @@
|
|||
v-if="objectType === 'track'"
|
||||
:to="{name: 'library.tracks.detail', params: {id: object.id }}"
|
||||
>
|
||||
<translate :translate-context="'Content/*/Button.Label'">Cancel</translate>
|
||||
<translate translate-context="Content/*/Button.Label">Cancel</translate>
|
||||
</router-link>
|
||||
<button :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit" :disabled="isLoading || !mutationPayload">
|
||||
<translate v-if="canEdit" key="1" :translate-context="'Content/Library/Button.Label/Verb'">Submit and apply edit</translate>
|
||||
<translate v-else key="2" :translate-context="'Content/Library/Button.Label/Verb'">Submit suggestion</translate>
|
||||
<translate v-if="canEdit" key="1" translate-context="Content/Library/Button.Label/Verb">Submit and apply edit</translate>
|
||||
<translate v-else key="2" translate-context="Content/Library/Button.Label/Verb">Submit suggestion</translate>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="ui top attached tabular menu">
|
||||
<a :class="['item', {active: currentTab === 'summary'}]" @click="currentTab = 'summary'"><translate :translate-context="'Content/Library/Tab.Title/Short'">Summary</translate></a>
|
||||
<a :class="['item', {active: currentTab === 'summary'}]" @click="currentTab = 'summary'"><translate translate-context="Content/Library/Tab.Title/Short">Summary</translate></a>
|
||||
<a :class="['item', {active: currentTab === 'uploads'}]" @click="currentTab = 'uploads'">
|
||||
<translate :translate-context="'Content/Library/Tab.Title/Short'">Uploading</translate>
|
||||
<translate translate-context="Content/Library/Tab.Title/Short">Uploading</translate>
|
||||
<div v-if="files.length === 0" class="ui label">
|
||||
0
|
||||
</div>
|
||||
|
@ -15,7 +15,7 @@
|
|||
</div>
|
||||
</a>
|
||||
<a :class="['item', {active: currentTab === 'processing'}]" @click="currentTab = 'processing'">
|
||||
<translate :translate-context="'Content/Library/Tab.Title/Short'">Processing</translate>
|
||||
<translate translate-context="Content/Library/Tab.Title/Short">Processing</translate>
|
||||
<div v-if="processableFiles === 0" class="ui label">
|
||||
0
|
||||
</div>
|
||||
|
@ -29,19 +29,19 @@
|
|||
</div>
|
||||
|
||||
<div :class="['ui', 'bottom', 'attached', 'segment', {hidden: currentTab != 'summary'}]">
|
||||
<h2 class="ui header"><translate :translate-context="'Content/Library/Title/Verb'">Upload new tracks</translate></h2>
|
||||
<h2 class="ui header"><translate translate-context="Content/Library/Title/Verb">Upload new tracks</translate></h2>
|
||||
<div class="ui message">
|
||||
<p><translate :translate-context="'Content/Library/Paragraph'">You are about to upload music to your library. Before proceeding, please ensure that:</translate></p>
|
||||
<p><translate translate-context="Content/Library/Paragraph">You are about to upload music to your library. Before proceeding, please ensure that:</translate></p>
|
||||
<ul>
|
||||
<li v-if="library.privacy_level != 'me'">
|
||||
<translate :translate-context="'Content/Library/List item'">You are not uploading copyrighted content in a public library, otherwise you may be infringing the law</translate>
|
||||
<translate translate-context="Content/Library/List item">You are not uploading copyrighted content in a public library, otherwise you may be infringing the law</translate>
|
||||
</li>
|
||||
<li>
|
||||
<translate :translate-context="'Content/Library/List item'">The music files you are uploading are tagged properly.</translate>
|
||||
<a href="http://picard.musicbrainz.org/" target='_blank'><translate :translate-context="'Content/Library/Link'">We recommend using Picard for that purpose.</translate></a>
|
||||
<translate translate-context="Content/Library/List item">The music files you are uploading are tagged properly.</translate>
|
||||
<a href="http://picard.musicbrainz.org/" target='_blank'><translate translate-context="Content/Library/Link">We recommend using Picard for that purpose.</translate></a>
|
||||
</li>
|
||||
<li>
|
||||
<translate :translate-context="'Content/Library/List item'">The uploaded music files are in OGG, Flac or MP3 format</translate>
|
||||
<translate translate-context="Content/Library/List item">The uploaded music files are in OGG, Flac or MP3 format</translate>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -49,14 +49,14 @@
|
|||
<div class="ui form">
|
||||
<div class="fields">
|
||||
<div class="ui four wide field">
|
||||
<label><translate :translate-context="'Content/Library/Input.Label/Noun'">Import reference</translate></label>
|
||||
<p><translate :translate-context="'Content/Library/Paragraph'">This reference will be used to group imported files together.</translate></p>
|
||||
<label><translate translate-context="Content/Library/Input.Label/Noun">Import reference</translate></label>
|
||||
<p><translate translate-context="Content/Library/Paragraph">This reference will be used to group imported files together.</translate></p>
|
||||
<input name="import-ref" type="text" v-model="importReference" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="ui green button" @click="currentTab = 'uploads'"><translate :translate-context="'Content/Library/Button.Label'">Proceed</translate></div>
|
||||
<div class="ui green button" @click="currentTab = 'uploads'"><translate translate-context="Content/Library/Button.Label">Proceed</translate></div>
|
||||
</div>
|
||||
<div :class="['ui', 'bottom', 'attached', 'segment', {hidden: currentTab != 'uploads'}]">
|
||||
<div class="ui container">
|
||||
|
@ -73,10 +73,10 @@
|
|||
@input-file="inputFile"
|
||||
ref="upload">
|
||||
<i class="upload icon"></i>
|
||||
<translate :translate-context="'Content/Library/Paragraph/Call to action'">Click to select files to upload or drag and drop files or directories</translate>
|
||||
<translate translate-context="Content/Library/Paragraph/Call to action">Click to select files to upload or drag and drop files or directories</translate>
|
||||
<br />
|
||||
<br />
|
||||
<i><translate :translate-context="'Content/Library/Paragraph'" :translate-params="{extensions: supportedExtensions.join(', ')}">Supported extensions: %{ extensions }</translate></i>
|
||||
<i><translate translate-context="Content/Library/Paragraph" :translate-params="{extensions: supportedExtensions.join(', ')}">Supported extensions: %{ extensions }</translate></i>
|
||||
</file-upload-widget>
|
||||
</div>
|
||||
<div v-if="files.length > 0" class="table-wrapper">
|
||||
|
@ -84,9 +84,9 @@
|
|||
<table class="ui unstackable table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><translate :translate-context="'Content/Library/Table.Label'">Filename</translate></th>
|
||||
<th><translate :translate-context="'Content/Library/Table.Label'">Size</translate></th>
|
||||
<th><translate :translate-context="'Content/Library/Table.Label'">Status</translate></th>
|
||||
<th><translate translate-context="Content/Library/Table.Label">Filename</translate></th>
|
||||
<th><translate translate-context="Content/Library/Table.Label">Size</translate></th>
|
||||
<th><translate translate-context="Content/Library/Table.Label">Status</translate></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -100,14 +100,14 @@
|
|||
</span>
|
||||
</span>
|
||||
<span v-else-if="file.success" class="ui green label">
|
||||
<translate :translate-context="'Content/Library/Table'" key="1">Uploaded</translate>
|
||||
<translate translate-context="Content/Library/Table" key="1">Uploaded</translate>
|
||||
</span>
|
||||
<span v-else-if="file.active" class="ui yellow label">
|
||||
<translate :translate-context="'Content/Library/Table'" key="2">Uploading…</translate>
|
||||
<translate translate-context="Content/Library/Table" key="2">Uploading…</translate>
|
||||
({{ parseInt(file.progress) }}%)
|
||||
</span>
|
||||
<template v-else>
|
||||
<span class="ui label"><translate :translate-context="'Content/Library/Table'" key="3">Pending</translate></span>
|
||||
<span class="ui label"><translate translate-context="Content/Library/Table" key="3">Pending</translate></span>
|
||||
<button class="ui tiny basic red icon button" @click.prevent="$refs.upload.remove(file)"><i class="delete icon"></i></button>
|
||||
</template>
|
||||
</td>
|
||||
|
|
|
@ -4,17 +4,17 @@
|
|||
<div class="ui stackable three column grid">
|
||||
<div class="column">
|
||||
<track-widget :url="'history/listenings/'" :filters="{scope: 'user', ordering: '-creation_date'}">
|
||||
<template slot="title"><translate :translate-context="'Content/Home/Title'">Recently listened</translate></template>
|
||||
<template slot="title"><translate translate-context="Content/Home/Title">Recently listened</translate></template>
|
||||
</track-widget>
|
||||
</div>
|
||||
<div class="column">
|
||||
<track-widget :url="'favorites/tracks/'" :filters="{scope: 'user', ordering: '-creation_date'}">
|
||||
<template slot="title"><translate :translate-context="'Content/Home/Title'">Recently favorited</translate></template>
|
||||
<template slot="title"><translate translate-context="Content/Home/Title">Recently favorited</translate></template>
|
||||
</track-widget>
|
||||
</div>
|
||||
<div class="column">
|
||||
<playlist-widget :url="'playlists/'" :filters="{scope: 'user', playable: true, ordering: '-creation_date'}">
|
||||
<template slot="title"><translate :translate-context="'Content/Home/Title'">Playlists</translate></template>
|
||||
<template slot="title"><translate translate-context="Content/Home/Title">Playlists</translate></template>
|
||||
</playlist-widget>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<div class="ui stackable one column grid">
|
||||
<div class="column">
|
||||
<album-widget :filters="{playable: true, ordering: '-creation_date'}">
|
||||
<template slot="title"><translate :translate-context="'Content/Home/Title'">Recently added</translate></template>
|
||||
<template slot="title"><translate translate-context="Content/Home/Title">Recently added</translate></template>
|
||||
</album-widget>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
<div class="main library pusher">
|
||||
<nav class="ui secondary pointing menu" role="navigation" :aria-label="labels.secondaryMenu">
|
||||
<router-link class="ui item" to="/library" exact>
|
||||
<translate :translate-context="'Menu/Home/Link/Verb'">Browse</translate>
|
||||
<translate translate-context="Menu/Home/Link/Verb">Browse</translate>
|
||||
</router-link>
|
||||
<router-link class="ui item" to="/library/albums" exact>
|
||||
<translate :translate-context="'Menu/Home/Link'">Albums</translate>
|
||||
<translate translate-context="Menu/Home/Link">Albums</translate>
|
||||
</router-link>
|
||||
<router-link class="ui item" to="/library/artists" exact>
|
||||
<translate :translate-context="'Menu/Home/Link'">Artists</translate>
|
||||
<translate translate-context="Menu/Home/Link">Artists</translate>
|
||||
</router-link>
|
||||
<router-link class="ui item" to="/library/radios" exact>
|
||||
<translate :translate-context="'Menu/Home/Link'">Radios</translate>
|
||||
<translate translate-context="Menu/Home/Link">Radios</translate>
|
||||
</router-link>
|
||||
<router-link class="ui item" to="/library/playlists" exact>
|
||||
<translate :translate-context="'Menu/Home/Link'">Playlists</translate>
|
||||
<translate translate-context="Menu/Home/Link">Playlists</translate>
|
||||
</router-link>
|
||||
</nav>
|
||||
<router-view :key="$route.fullPath"></router-view>
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
<main v-title="labels.title">
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Radio/Title'">Browsing radios</translate>
|
||||
<translate translate-context="Content/Radio/Title">Browsing radios</translate>
|
||||
</h2>
|
||||
<div class="ui hidden divider"></div>
|
||||
<div class="ui row">
|
||||
<h3 class="ui header">
|
||||
<translate :translate-context="'Content/Radio/Title'">Instance radios</translate>
|
||||
<translate translate-context="Content/Radio/Title">Instance radios</translate>
|
||||
</h3>
|
||||
<div class="ui cards">
|
||||
<radio-card :type="'favorites'"></radio-card>
|
||||
|
@ -18,20 +18,20 @@
|
|||
|
||||
<div class="ui hidden divider"></div>
|
||||
<h3 class="ui header">
|
||||
<translate :translate-context="'Content/Radio/Title'">User radios</translate>
|
||||
<translate translate-context="Content/Radio/Title">User radios</translate>
|
||||
</h3>
|
||||
<router-link class="ui green basic button" to="/library/radios/build" exact>
|
||||
<translate :translate-context="'Content/Radio/Button.Label/Verb'">Create your own radio</translate>
|
||||
<translate translate-context="Content/Radio/Button.Label/Verb">Create your own radio</translate>
|
||||
</router-link>
|
||||
<div class="ui hidden divider"></div>
|
||||
<div :class="['ui', {'loading': isLoading}, 'form']">
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Verb">Search</translate></label>
|
||||
<input name="search" type="text" v-model="query" :placeholder="labels.searchPlaceholder"/>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -39,18 +39,18 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Order</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label">Order</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+">
|
||||
<translate :translate-context="'Content/Search/Dropdown'">Ascending</translate>
|
||||
<translate translate-context="Content/Search/Dropdown">Ascending</translate>
|
||||
</option>
|
||||
<option value="-">
|
||||
<translate :translate-context="'Content/Search/Dropdown'">Descending</translate>
|
||||
<translate translate-context="Content/Search/Dropdown">Descending</translate>
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Results per page</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label">Results per page</translate></label>
|
||||
<select class="ui dropdown" v-model="paginateBy">
|
||||
<option :value="parseInt(12)">12</option>
|
||||
<option :value="parseInt(25)">25</option>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<div class="content">
|
||||
{{ track.title }}
|
||||
<div class="sub header">
|
||||
<div :translate-context="'Content/Track/Paragraph'"
|
||||
<div translate-context="Content/Track/Paragraph"
|
||||
v-translate="{album: track.album.title, artist: track.artist.name, albumUrl: albumUrl, artistUrl: artistUrl}"
|
||||
>From album <a class="internal" href="%{ albumUrl }">%{ album }</a> by <a class="internal" href="%{ artistUrl }">%{ artist }</a></div>
|
||||
</div>
|
||||
|
@ -23,33 +23,33 @@
|
|||
</h2>
|
||||
|
||||
<play-button class="orange" :track="track">
|
||||
<translate :translate-context="'*/Queue/Button.Label/Short, Verb'">Play</translate>
|
||||
<translate translate-context="*/Queue/Button.Label/Short, Verb">Play</translate>
|
||||
</play-button>
|
||||
<track-favorite-icon :track="track" :button="true"></track-favorite-icon>
|
||||
<track-playlist-icon :button="true" v-if="$store.state.auth.authenticated" :track="track"></track-playlist-icon>
|
||||
|
||||
<a :href="wikipediaUrl" target="_blank" class="ui icon labeled button">
|
||||
<i class="wikipedia w icon"></i>
|
||||
<translate :translate-context="'Content/*/Link/Verb'">Search on Wikipedia</translate>
|
||||
<translate translate-context="Content/*/Link/Verb">Search on Wikipedia</translate>
|
||||
</a>
|
||||
<a v-if="musicbrainzUrl" :href="musicbrainzUrl" target="_blank" class="ui icon labeled button">
|
||||
<i class="external icon"></i>
|
||||
<translate :translate-context="'Content/*/Link/Verb'">View on MusicBrainz</translate>
|
||||
<translate translate-context="Content/*/Link/Verb">View on MusicBrainz</translate>
|
||||
</a>
|
||||
<a v-if="upload" :href="downloadUrl" target="_blank" class="ui icon labeled button">
|
||||
<i class="download icon"></i>
|
||||
<translate :translate-context="'Content/Track/Link/Verb'">Download</translate>
|
||||
<translate translate-context="Content/Track/Link/Verb">Download</translate>
|
||||
</a>
|
||||
<template v-if="publicLibraries.length > 0">
|
||||
<button
|
||||
@click="showEmbedModal = !showEmbedModal"
|
||||
class="ui icon labeled button">
|
||||
<i class="code icon"></i>
|
||||
<translate :translate-context="'Content/Track/Button.Label/Verb'">Embed</translate>
|
||||
<translate translate-context="Content/Track/Button.Label/Verb">Embed</translate>
|
||||
</button>
|
||||
<modal :show.sync="showEmbedModal">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Popup/Track/Title'">Embed this track on your website</translate>
|
||||
<translate translate-context="Popup/Track/Title">Embed this track on your website</translate>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="description">
|
||||
|
@ -59,7 +59,7 @@
|
|||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui deny button">
|
||||
<translate :translate-context="'Popup/Track/Button/Verb'">Cancel</translate>
|
||||
<translate translate-context="Popup/Track/Button/Verb">Cancel</translate>
|
||||
</div>
|
||||
</div>
|
||||
</modal>
|
||||
|
@ -68,7 +68,7 @@
|
|||
:to="{name: 'library.tracks.edit', params: {id: track.id }}"
|
||||
class="ui icon labeled button">
|
||||
<i class="edit icon"></i>
|
||||
<translate :translate-context="'Content/Track/Button.Label/Verb'">Edit…</translate>
|
||||
<translate translate-context="Content/Track/Button.Label/Verb">Edit…</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
@ -3,64 +3,64 @@
|
|||
<div v-if="track">
|
||||
<section class="ui vertical stripe center aligned segment">
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Track/Title/Noun'">Track information</translate>
|
||||
<translate translate-context="Content/Track/Title/Noun">Track information</translate>
|
||||
</h2>
|
||||
<table class="ui very basic collapsing celled center aligned table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Track/Table.Label/Noun'">Copyright</translate>
|
||||
<translate translate-context="Content/Track/Table.Label/Noun">Copyright</translate>
|
||||
</td>
|
||||
<td v-if="track.copyright" :title="track.copyright">{{ track.copyright|truncate(50) }}</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'Content/Track/Table.Paragraph'">No copyright information available for this track</translate>
|
||||
<translate translate-context="Content/Track/Table.Paragraph">No copyright information available for this track</translate>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Track/Table.Label/Noun'">License</translate>
|
||||
<translate translate-context="Content/Track/Table.Label/Noun">License</translate>
|
||||
</td>
|
||||
<td v-if="license">
|
||||
<a :href="license.url" target="_blank" rel="noopener noreferrer">{{ license.name }}</a>
|
||||
</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'Content/Track/Table.Paragraph'">No licensing information for this track</translate>
|
||||
<translate translate-context="Content/Track/Table.Paragraph">No licensing information for this track</translate>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Track/Table.Label'">Duration</translate>
|
||||
<translate translate-context="Content/Track/Table.Label">Duration</translate>
|
||||
</td>
|
||||
<td v-if="upload && upload.duration">{{ time.parse(upload.duration) }}</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Track/Table.Label'">Size</translate>
|
||||
<translate translate-context="Content/Track/Table.Label">Size</translate>
|
||||
</td>
|
||||
<td v-if="upload && upload.size">{{ upload.size | humanSize }}</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Track/Table.Label'">Bitrate</translate>
|
||||
<translate translate-context="Content/Track/Table.Label">Bitrate</translate>
|
||||
</td>
|
||||
<td v-if="upload && upload.bitrate">{{ upload.bitrate | humanSize }}/s</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Track/Table.Label/Noun'">Type</translate>
|
||||
<translate translate-context="Content/Track/Table.Label/Noun">Type</translate>
|
||||
</td>
|
||||
<td v-if="upload && upload.extension">{{ upload.extension }}</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -68,7 +68,7 @@
|
|||
</section>
|
||||
<section class="ui vertical stripe center aligned segment">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/Track/Title'">Lyrics</translate>
|
||||
<translate translate-context="Content/Track/Title">Lyrics</translate>
|
||||
</h2>
|
||||
<div v-if="isLoadingLyrics" class="ui vertical segment">
|
||||
<div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
|
||||
|
@ -76,20 +76,20 @@
|
|||
<div v-if="lyrics" v-html="lyrics.content_rendered"></div>
|
||||
<template v-if="!isLoadingLyrics & !lyrics">
|
||||
<p>
|
||||
<translate :translate-context="'Content/Track/Paragraph'">No lyrics available for this track.</translate>
|
||||
<translate translate-context="Content/Track/Paragraph">No lyrics available for this track.</translate>
|
||||
</p>
|
||||
<a class="ui button" target="_blank" :href="lyricsSearchUrl">
|
||||
<i class="search icon"></i>
|
||||
<translate :translate-context="'Content/Track/Link/Verb'">Search on lyrics.wikia.com</translate>
|
||||
<translate translate-context="Content/Track/Link/Verb">Search on lyrics.wikia.com</translate>
|
||||
</a>
|
||||
</template>
|
||||
</section>
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2>
|
||||
<translate :translate-context="'Content/Track/Title'">User libraries</translate>
|
||||
<translate translate-context="Content/Track/Title">User libraries</translate>
|
||||
</h2>
|
||||
<library-widget @loaded="$emit('libraries-loaded', $event)" :url="'tracks/' + id + '/libraries/'">
|
||||
<translate :translate-context="'Content/Track/Paragraph'" slot="subtitle">This track is present in the following libraries:</translate>
|
||||
<translate translate-context="Content/Track/Paragraph" slot="subtitle">This track is present in the following libraries:</translate>
|
||||
</library-widget>
|
||||
</section>
|
||||
</div>
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
<section class="ui vertical stripe segment">
|
||||
<div class="ui text container">
|
||||
<h2>
|
||||
<translate v-if="canEdit" key="1" :translate-context="'Content/*/Title'">Edit this track</translate>
|
||||
<translate v-else key="2" :translate-context="'Content/*/Title'">Suggest an edit on this track</translate>
|
||||
<translate v-if="canEdit" key="1" translate-context="Content/*/Title">Edit this track</translate>
|
||||
<translate v-else key="2" translate-context="Content/*/Title">Suggest an edit on this track</translate>
|
||||
</h2>
|
||||
<edit-form :object-type="objectType" :object="object" :can-edit="canEdit"></edit-form>
|
||||
</div>
|
||||
|
|
|
@ -3,53 +3,53 @@
|
|||
<div>
|
||||
<section>
|
||||
<h2 class="ui header">
|
||||
<translate :translate-context="'Content/Radio/Title'">Builder</translate>
|
||||
<translate translate-context="Content/Radio/Title">Builder</translate>
|
||||
</h2>
|
||||
<p><translate :translate-context="'Content/Radio/Paragraph'">You can use this interface to build your own custom radio, which will play tracks according to your criteria.</translate></p>
|
||||
<p><translate translate-context="Content/Radio/Paragraph">You can use this interface to build your own custom radio, which will play tracks according to your criteria.</translate></p>
|
||||
<div class="ui form">
|
||||
<div v-if="success" class="ui positive message">
|
||||
<div class="header">
|
||||
<template v-if="radioName">
|
||||
<translate :translate-context="'Content/Radio/Message'">Radio updated</translate>
|
||||
<translate translate-context="Content/Radio/Message">Radio updated</translate>
|
||||
</template>
|
||||
<template v-else>
|
||||
<translate :translate-context="'Content/Radio/Message'">Radio created</translate>
|
||||
<translate translate-context="Content/Radio/Message">Radio created</translate>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="">
|
||||
<div class="field">
|
||||
<label for="name"><translate :translate-context="'Content/Radio/Input.Label/Noun'">Radio name</translate></label>
|
||||
<label for="name"><translate translate-context="Content/Radio/Input.Label/Noun">Radio name</translate></label>
|
||||
<input id="name" name="name" type="text" v-model="radioName" :placeholder="labels.placeholder.name" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="description"><translate :translate-context="'Content/Radio/Input.Label'">Description</translate></label>
|
||||
<label for="description"><translate translate-context="Content/Radio/Input.Label">Description</translate></label>
|
||||
<textarea rows="2" id="description" type="text" v-model="radioDesc" :placeholder="labels.placeholder.description" />
|
||||
</div>
|
||||
<div class="ui toggle checkbox">
|
||||
<input id="public" type="checkbox" v-model="isPublic" />
|
||||
<label for="public"><translate :translate-context="'Content/Radio/Checkbox.Label/Verb'">Display publicly</translate></label>
|
||||
<label for="public"><translate translate-context="Content/Radio/Checkbox.Label/Verb">Display publicly</translate></label>
|
||||
</div>
|
||||
<div class="ui hidden divider"></div>
|
||||
<button :disabled="!canSave" @click="save" :class="['ui', 'green', {loading: isLoading}, 'button']">
|
||||
<translate :translate-context="'Content/Radio/Button.Label/Verb'">Save</translate>
|
||||
<translate translate-context="Content/Radio/Button.Label/Verb">Save</translate>
|
||||
</button>
|
||||
<radio-button v-if="id" type="custom" :custom-radio-id="id"></radio-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui form">
|
||||
<p>
|
||||
<translate :translate-context="'Content/Radio/Paragraph'">Add filters to customize your radio</translate>
|
||||
<translate translate-context="Content/Radio/Paragraph">Add filters to customize your radio</translate>
|
||||
</p>
|
||||
<div class="inline field">
|
||||
<select class="ui dropdown" v-model="currentFilterType">
|
||||
<option value="">
|
||||
<translate :translate-context="'Content/Radio/Dropdown.Placeholder/Verb'">Select a filter</translate>
|
||||
<translate translate-context="Content/Radio/Dropdown.Placeholder/Verb">Select a filter</translate>
|
||||
</option>
|
||||
<option v-for="f in availableFilters" :value="f.type">{{ f.label }}</option>
|
||||
</select>
|
||||
<button :disabled="!currentFilterType" @click="add" class="ui button">
|
||||
<translate :translate-context="'Content/Radio/Button.Label/Verb'">Add filter</translate>
|
||||
<translate translate-context="Content/Radio/Button.Label/Verb">Add filter</translate>
|
||||
</button>
|
||||
</div>
|
||||
<p v-if="currentFilter">
|
||||
|
@ -59,11 +59,11 @@
|
|||
<table class="ui table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="two wide"><translate :translate-context="'Content/Radio/Table.Label/Noun'">Filter name</translate></th>
|
||||
<th class="one wide"><translate :translate-context="'Content/Radio/Table.Label/Verb'">Exclude</translate></th>
|
||||
<th class="six wide"><translate :translate-context="'Content/Radio/Table.Label/Verb (Value is a List of Parameters)'">Config</translate></th>
|
||||
<th class="five wide"><translate :translate-context="'Content/Radio/Table.Label/Noun (Value is a number of Tracks)'">Candidates</translate></th>
|
||||
<th class="two wide"><translate :translate-context="'Content/Radio/Table.Label/Noun (Value is a Button)'">Actions</translate></th>
|
||||
<th class="two wide"><translate translate-context="Content/Radio/Table.Label/Noun">Filter name</translate></th>
|
||||
<th class="one wide"><translate translate-context="Content/Radio/Table.Label/Verb">Exclude</translate></th>
|
||||
<th class="six wide"><translate translate-context="Content/Radio/Table.Label/Verb (Value is a List of Parameters)">Config</translate></th>
|
||||
<th class="five wide"><translate translate-context="Content/Radio/Table.Label/Noun (Value is a number of Tracks)">Candidates</translate></th>
|
||||
<th class="two wide"><translate translate-context="Content/Radio/Table.Label/Noun (Value is a Button)">Actions</translate></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
</span>
|
||||
<modal v-if="checkResult" :show.sync="showCandidadesModal">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Popup/Radio/Title/Noun'">Tracks matching filter</translate>
|
||||
<translate translate-context="Popup/Radio/Title/Noun">Tracks matching filter</translate>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="description">
|
||||
|
@ -51,13 +51,13 @@
|
|||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui black deny button">
|
||||
<translate :translate-context="'Popup/Radio/Button.Label/Verb'">Cancel</translate>
|
||||
<translate translate-context="Popup/Radio/Button.Label/Verb">Cancel</translate>
|
||||
</div>
|
||||
</div>
|
||||
</modal>
|
||||
</td>
|
||||
<td>
|
||||
<button @click="$emit('delete', index)" class="ui basic red button"><translate :translate-context="'Content/Radio/Button.Label/Verb'">Remove</translate></button>
|
||||
<button @click="$emit('delete', index)" class="ui basic red button"><translate translate-context="Content/Radio/Button.Label/Verb">Remove</translate></button>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
|
|
@ -4,30 +4,30 @@
|
|||
<div class="ui inline form">
|
||||
<div class="fields">
|
||||
<div class="ui field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Search</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Search</translate></label>
|
||||
<form @submit.prevent="search.query = $refs.search.value">
|
||||
<input name="search" ref="search" type="text" :value="search.query" :placeholder="labels.searchPlaceholder" />
|
||||
</form>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Status</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label">Status</translate></label>
|
||||
<select class="ui dropdown" @change="addSearchToken('is_approved', $event.target.value)" :value="getTokenValue('is_approved', '')">
|
||||
<option value="">
|
||||
<translate :translate-context="'Content/Admin/Dropdown'">All</translate>
|
||||
<translate translate-context="Content/Admin/Dropdown">All</translate>
|
||||
</option>
|
||||
<option value="null">
|
||||
<translate :translate-context="'Content/Admin/Dropdown'">Pending review</translate>
|
||||
<translate translate-context="Content/Admin/Dropdown">Pending review</translate>
|
||||
</option>
|
||||
<option value="yes">
|
||||
<translate :translate-context="'Content/Admin/Dropdown'">Approved</translate>
|
||||
<translate translate-context="Content/Admin/Dropdown">Approved</translate>
|
||||
</option>
|
||||
<option value="no">
|
||||
<translate :translate-context="'Content/Admin/Dropdown'">Rejected</translate>
|
||||
<translate translate-context="Content/Admin/Dropdown">Rejected</translate>
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -35,10 +35,10 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Order</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Order</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -70,7 +70,7 @@
|
|||
></pagination>
|
||||
|
||||
<span v-if="result && result.results.length > 0">
|
||||
<translate :translate-context="'Content/Library/Paragraph'"
|
||||
<translate translate-context="Content/Library/Paragraph"
|
||||
:translate-params="{start: ((page-1) * paginateBy) + 1, end: ((page-1) * paginateBy) + result.results.length, total: result.count}">
|
||||
Showing results %{ start }-%{ end } on %{ total }
|
||||
</translate>
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<div class="ui inline form">
|
||||
<div class="fields">
|
||||
<div class="ui six wide field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Search</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Search</translate></label>
|
||||
<form @submit.prevent="search.query = $refs.search.value">
|
||||
<input name="search" ref="search" type="text" :value="search.query" :placeholder="labels.searchPlaceholder" />
|
||||
</form>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -17,10 +17,10 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Ordering direction</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Ordering direction</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -37,12 +37,12 @@
|
|||
action-url="manage/accounts/action/"
|
||||
:filters="actionFilters">
|
||||
<template slot="header-cells">
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label'">Name</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label'">Domain</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label/Noun'">Uploads</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label/Noun'">First seen</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label/Noun'">Last seen</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label/Short, Noun'">Under moderation rule</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label">Name</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label">Domain</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label/Noun">First seen</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label/Noun">Last seen</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label/Short, Noun">Under moderation rule</translate></th>
|
||||
</template>
|
||||
<template slot="row-cells" slot-scope="scope">
|
||||
<td>
|
||||
|
@ -57,7 +57,7 @@
|
|||
</template>
|
||||
<span role="button" v-else class="ui tiny teal icon link label" @click="addSearchToken('domain', scope.obj.domain)">
|
||||
<i class="home icon"></i>
|
||||
<translate :translate-context="'Content/Moderation/Table/Short, Noun'">Local account</translate>
|
||||
<translate translate-context="Content/Moderation/Table/Short, Noun">Local account</translate>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
|
@ -70,7 +70,7 @@
|
|||
<human-date v-if="scope.obj.last_fetch_date" :date="scope.obj.last_fetch_date"></human-date>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="scope.obj.instance_policy"><i class="shield icon"></i> <translate :translate-context="'*/*/*'">Yes</translate></span>
|
||||
<span v-if="scope.obj.instance_policy"><i class="shield icon"></i> <translate translate-context="*/*/*">Yes</translate></span>
|
||||
</td>
|
||||
</template>
|
||||
</action-table>
|
||||
|
@ -86,7 +86,7 @@
|
|||
></pagination>
|
||||
|
||||
<span v-if="result && result.results.length > 0">
|
||||
<translate :translate-context="'Content/Moderation/Paragraph'"
|
||||
<translate translate-context="Content/Moderation/Paragraph"
|
||||
:translate-params="{start: ((page-1) * paginateBy) + 1, end: ((page-1) * paginateBy) + result.results.length, total: result.count}">
|
||||
Showing results %{ start }-%{ end } on %{ total }
|
||||
</translate>
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
<div class="ui inline form">
|
||||
<div class="fields">
|
||||
<div class="ui field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Verb">Search</translate></label>
|
||||
<input name="search" type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -15,10 +15,10 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Ordering direction</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Ordering direction</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -36,11 +36,11 @@
|
|||
idField="name"
|
||||
:filters="actionFilters">
|
||||
<template slot="header-cells">
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label'">Name</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label'">Users</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label/Short, Noun'">Received messages</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label/Short, Noun'">First seen</translate></th>
|
||||
<th><translate :translate-context="'Content/Moderation/Table.Label/Short'">Under moderation rule</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label">Name</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label">Users</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label/Short, Noun">Received messages</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label/Short, Noun">First seen</translate></th>
|
||||
<th><translate translate-context="Content/Moderation/Table.Label/Short">Under moderation rule</translate></th>
|
||||
</template>
|
||||
<template slot="row-cells" slot-scope="scope">
|
||||
<td>
|
||||
|
@ -56,7 +56,7 @@
|
|||
<human-date :date="scope.obj.creation_date"></human-date>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="scope.obj.instance_policy"><i class="shield icon"></i> <translate :translate-context="'*/*/*'">Yes</translate></span>
|
||||
<span v-if="scope.obj.instance_policy"><i class="shield icon"></i> <translate translate-context="*/*/*">Yes</translate></span>
|
||||
</td>
|
||||
</template>
|
||||
</action-table>
|
||||
|
@ -72,7 +72,7 @@
|
|||
></pagination>
|
||||
|
||||
<span v-if="result && result.results.length > 0">
|
||||
<translate :translate-context="'Content/Moderation/Paragraph'"
|
||||
<translate translate-context="Content/Moderation/Paragraph"
|
||||
:translate-params="{start: ((page-1) * paginateBy) + 1, end: ((page-1) * paginateBy) + result.results.length, total: result.count}">
|
||||
Showing results %{ start }-%{ end } on %{ total }
|
||||
</translate>
|
||||
|
|
|
@ -6,44 +6,44 @@
|
|||
<i class="user icon"></i>{{ object.actor }}
|
||||
<template v-if="object.is_active">
|
||||
<i class="play icon"></i>
|
||||
<translate :translate-context="'*/*/*'">Enabled</translate>
|
||||
<translate translate-context="*/*/*">Enabled</translate>
|
||||
</template>
|
||||
<template v-if="!object.is_active">
|
||||
<i class="pause icon"></i>
|
||||
<translate :translate-context="'Content/Moderation/Card.List item'">Paused</translate>
|
||||
<translate translate-context="Content/Moderation/Card.List item">Paused</translate>
|
||||
</template>
|
||||
</p>
|
||||
<div>
|
||||
<p><strong><translate :translate-context="'Content/Moderation/Card.Title/Noun'">Rule</translate></strong></p>
|
||||
<p><strong><translate translate-context="Content/Moderation/Card.Title/Noun">Rule</translate></strong></p>
|
||||
<p v-if="object.block_all">
|
||||
<i class="ban icon"></i>
|
||||
<translate :translate-context="'Content/Moderation/Card.List item/Verb'">Block everything</translate>
|
||||
<translate translate-context="Content/Moderation/Card.List item/Verb">Block everything</translate>
|
||||
</p>
|
||||
<div v-else class="ui list">
|
||||
<div class="ui item" v-if="object.silence_activity">
|
||||
<i class="feed icon"></i>
|
||||
<div class="content"><translate :translate-context="'Content/Moderation/Card.List item/Verb'">Mute activity</translate></div>
|
||||
<div class="content"><translate translate-context="Content/Moderation/Card.List item/Verb">Mute activity</translate></div>
|
||||
</div>
|
||||
<div class="ui item" v-if="object.silence_notifications">
|
||||
<i class="bell icon"></i>
|
||||
<div class="content"><translate :translate-context="'Content/Moderation/Card.List item/Verb'">Mute notifications</translate></div>
|
||||
<div class="content"><translate translate-context="Content/Moderation/Card.List item/Verb">Mute notifications</translate></div>
|
||||
</div>
|
||||
<div class="ui item" v-if="object.reject_media">
|
||||
<i class="file icon"></i>
|
||||
<div class="content"><translate :translate-context="'Content/Moderation/Card.List item/Verb'">Reject media</translate></div>
|
||||
<div class="content"><translate translate-context="Content/Moderation/Card.List item/Verb">Reject media</translate></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="markdown && object.summary">
|
||||
<div class="ui hidden divider"></div>
|
||||
<p><strong><translate :translate-context="'Content/Moderation/Card.Title/Noun'">Reason</translate></strong></p>
|
||||
<p><strong><translate translate-context="Content/Moderation/Card.Title/Noun">Reason</translate></strong></p>
|
||||
<div v-html="markdown.makeHtml(object.summary)"></div>
|
||||
</div>
|
||||
<div class="ui hidden divider"></div>
|
||||
<button @click="$emit('update')" class="ui right floated labeled icon button">
|
||||
<i class="edit icon"></i>
|
||||
<translate :translate-context="'Content/Moderation/Card.Button.Label/Verb'">Edit</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Button.Label/Verb">Edit</translate>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<form class="ui form" @submit.prevent="createOrUpdate">
|
||||
<h3 class="ui header">
|
||||
<translate :translate-context="'Content/Moderation/Card.Title/Verb'" v-if="object" key="1">Edit moderation rule</translate>
|
||||
<translate :translate-context="'Content/Moderation/Card.Button.Label/Verb'" v-else key="2">Add a new moderation rule</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Title/Verb" v-if="object" key="1">Edit moderation rule</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Button.Label/Verb" v-else key="2">Add a new moderation rule</translate>
|
||||
</h3>
|
||||
<div v-if="errors && errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Moderation/Error message.Title'">Error while creating rule</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Moderation/Error message.Title">Error while creating rule</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
|
@ -15,15 +15,15 @@
|
|||
<div class="ui toggle checkbox">
|
||||
<input id="policy-is-active" v-model="current.isActive" type="checkbox">
|
||||
<label for="policy-is-active">
|
||||
<translate :translate-context="'*/*/*'" v-if="current.isActive" key="1">Enabled</translate>
|
||||
<translate :translate-context="'*/*/*'" v-else key="2">Disabled</translate>
|
||||
<translate translate-context="*/*/*" v-if="current.isActive" key="1">Enabled</translate>
|
||||
<translate translate-context="*/*/*" v-else key="2">Disabled</translate>
|
||||
<tooltip :content="labels.isActiveHelp" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="policy-summary">
|
||||
<translate :translate-context="'Content/Moderation/Input.Label/Noun'">Reason</translate>
|
||||
<translate translate-context="Content/Moderation/Input.Label/Noun">Reason</translate>
|
||||
<tooltip :content="labels.summaryHelp" />
|
||||
</label>
|
||||
<textarea name="policy-summary" id="policy-summary" rows="5" v-model="current.summary"></textarea>
|
||||
|
@ -32,13 +32,13 @@
|
|||
<div class="ui toggle checkbox">
|
||||
<input id="policy-is-active" v-model="current.blockAll" type="checkbox">
|
||||
<label for="policy-is-active">
|
||||
<translate :translate-context="'Content/Moderation/Checkbox.Label/Verb'">Block everything</translate>
|
||||
<translate translate-context="Content/Moderation/Checkbox.Label/Verb">Block everything</translate>
|
||||
<tooltip :content="labels.blockAllHelp" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui horizontal divider">
|
||||
<translate :translate-context="'Content/Moderation/Card.Title'">Or customize your rule</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Title">Or customize your rule</translate>
|
||||
</div>
|
||||
<div v-for="config in fieldConfig" :class="['field']">
|
||||
<div class="ui toggle checkbox">
|
||||
|
@ -52,22 +52,22 @@
|
|||
</div>
|
||||
<div class="ui hidden divider"></div>
|
||||
<button @click="$emit('cancel')" class="ui basic left floated button">
|
||||
<translate :translate-context="'Content/Moderation/Card.Button.Label/Verb'">Cancel</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Button.Label/Verb">Cancel</translate>
|
||||
</button>
|
||||
<button :class="['ui', 'right', 'floated', 'green', {'disabled loading': isLoading}, 'button']" :disabled="isLoading">
|
||||
<translate :translate-context="'Content/Moderation/Card.Button.Label/Verb'" v-if="object" key="1">Update</translate>
|
||||
<translate :translate-context="'Content/Moderation/Card.Button.Label/Verb'" v-else key="2">Create</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Button.Label/Verb" v-if="object" key="1">Update</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Button.Label/Verb" v-else key="2">Create</translate>
|
||||
</button>
|
||||
<dangerous-button v-if="object" class="right floated basic button" color='red' @confirm="remove">
|
||||
<translate :translate-context="'Content/Moderation/Card.Button.Label/Verb'">Delete</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Button.Label/Verb">Delete</translate>
|
||||
<p slot="modal-header">
|
||||
<translate :translate-context="'Popup/Moderation/Title'">Delete this moderation rule?</translate>
|
||||
<translate translate-context="Popup/Moderation/Title">Delete this moderation rule?</translate>
|
||||
</p>
|
||||
<p slot="modal-content">
|
||||
<translate :translate-context="'Popup/Moderation/Paragraph'">This action is irreversible.</translate>
|
||||
<translate translate-context="Popup/Moderation/Paragraph">This action is irreversible.</translate>
|
||||
</p>
|
||||
<div slot="modal-confirm">
|
||||
<translate :translate-context="'Popup/Moderation/Button.Label/Verb'">Delete moderation rule</translate>
|
||||
<translate translate-context="Popup/Moderation/Button.Label/Verb">Delete moderation rule</translate>
|
||||
</div>
|
||||
</dangerous-button>
|
||||
</form>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
<div>
|
||||
<form class="ui form" @submit.prevent="submit">
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Admin/Error message.Title'">Error while creating invitation</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Admin/Error message.Title">Error while creating invitation</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="inline fields">
|
||||
<div class="ui field">
|
||||
<label><translate :translate-context="'Content/Admin/Input.Label/Noun'">Invitation code</translate></label>
|
||||
<label><translate translate-context="$1">Invitation code</translate></label>
|
||||
<input name="code" type="text" v-model="code" :placeholder="labels.placeholder" />
|
||||
</div>
|
||||
<div class="ui field">
|
||||
<button :class="['ui', {loading: isLoading}, 'button']" :disabled="isLoading" type="submit">
|
||||
<translate :translate-context="'Content/Admin/Button.Label/Verb'">Get a new invitation</translate>
|
||||
<translate translate-context="Content/Admin/Button.Label/Verb">Get a new invitation</translate>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -24,8 +24,8 @@
|
|||
<table class="ui ui basic table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label/Noun'">Code</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label/Noun'">Share link</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label/Noun">Code</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label/Noun">Share link</translate></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -35,7 +35,7 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button class="ui basic button" @click="invitations = []"><translate :translate-context="'Content/Admin/Button.Label/Verb'">Clear</translate></button>
|
||||
<button class="ui basic button" @click="invitations = []"><translate translate-context="Content/Admin/Button.Label/Verb">Clear</translate></button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
<div class="ui inline form">
|
||||
<div class="fields">
|
||||
<div class="ui field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Verb'">Search</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Verb">Search</translate></label>
|
||||
<input name="search" type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -15,11 +15,11 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Admin/Dropdown.Label'">Status</translate></label>
|
||||
<label><translate translate-context="Content/Admin/Dropdown.Label">Status</translate></label>
|
||||
<select class="ui dropdown" v-model="isOpen">
|
||||
<option :value="null"><translate :translate-context="'Content/Admin/Dropdown'">All</translate></option>
|
||||
<option :value="true"><translate :translate-context="'Content/Admin/Dropdown/Adjective'">Open</translate></option>
|
||||
<option :value="false"><translate :translate-context="'Content/Admin/Dropdown/Adjective'">Expired/used</translate></option>
|
||||
<option :value="null"><translate translate-context="Content/Admin/Dropdown">All</translate></option>
|
||||
<option :value="true"><translate translate-context="Content/Admin/Dropdown/Adjective">Open</translate></option>
|
||||
<option :value="false"><translate translate-context="Content/Admin/Dropdown/Adjective">Expired/used</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -36,20 +36,20 @@
|
|||
:action-url="'manage/users/invitations/action/'"
|
||||
:filters="actionFilters">
|
||||
<template slot="header-cells">
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label'">Owner</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label'">Status</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label'">Creation date</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label'">Expiration date</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label'">Code</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label">Owner</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label">Status</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label">Creation date</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label">Expiration date</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label">Code</translate></th>
|
||||
</template>
|
||||
<template slot="row-cells" slot-scope="scope">
|
||||
<td>
|
||||
<router-link :to="{name: 'manage.users.users.detail', params: {id: scope.obj.id }}">{{ scope.obj.owner.username }}</router-link>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="scope.obj.users.length > 0" class="ui green basic label"><translate :translate-context="'Content/Admin/Table'">Used</translate></span>
|
||||
<span v-else-if="moment().isAfter(scope.obj.expiration_date)" class="ui red basic label"><translate :translate-context="'Content/Admin/Table'">Expired</translate></span>
|
||||
<span v-else class="ui basic label"><translate :translate-context="'Content/Admin/Table'">Not used</translate></span>
|
||||
<span v-if="scope.obj.users.length > 0" class="ui green basic label"><translate translate-context="Content/Admin/Table">Used</translate></span>
|
||||
<span v-else-if="moment().isAfter(scope.obj.expiration_date)" class="ui red basic label"><translate translate-context="Content/Admin/Table">Expired</translate></span>
|
||||
<span v-else class="ui basic label"><translate translate-context="Content/Admin/Table">Not used</translate></span>
|
||||
</td>
|
||||
<td>
|
||||
<human-date :date="scope.obj.creation_date"></human-date>
|
||||
|
@ -74,7 +74,7 @@
|
|||
></pagination>
|
||||
|
||||
<span v-if="result && result.results.length > 0">
|
||||
<translate :translate-context="'Content/Admin/Paragraph'"
|
||||
<translate translate-context="Content/Admin/Paragraph"
|
||||
:translate-params="{start: ((page-1) * paginateBy) + 1, end: ((page-1) * paginateBy) + result.results.length, total: result.count}">
|
||||
Showing results %{ start }-%{ end } on %{ total }
|
||||
</translate>
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
<div class="ui inline form">
|
||||
<div class="fields">
|
||||
<div class="ui field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/verb'">Search</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/verb">Search</translate></label>
|
||||
<input name="search" type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Input.Label/Noun'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Search/Input.Label/Noun">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -15,10 +15,10 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Search/Dropdown.Label/Noun'">Order</translate></label>
|
||||
<label><translate translate-context="Content/Search/Dropdown.Label/Noun">Order</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/Search/Dropdown'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/Search/Dropdown'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -35,13 +35,13 @@
|
|||
:action-url="'manage/library/uploads/action/'"
|
||||
:filters="actionFilters">
|
||||
<template slot="header-cells">
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label'">Username</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label'">Email</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label/Short, Noun'">Account status</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label/Short, Noun (Value is a date)'">Sign-up</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label/Short, Noun (Value is a date)'">Last activity</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label/Noun'">Permissions</translate></th>
|
||||
<th><translate :translate-context="'Content/Admin/Table.Label/Noun'">Status</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label">Username</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label">Email</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label/Short, Noun">Account status</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label/Short, Noun (Value is a date)">Sign-up</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label/Short, Noun (Value is a date)">Last activity</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label/Noun">Permissions</translate></th>
|
||||
<th><translate translate-context="Content/Admin/Table.Label/Noun">Status</translate></th>
|
||||
</template>
|
||||
<template slot="row-cells" slot-scope="scope">
|
||||
<td>
|
||||
|
@ -51,15 +51,15 @@
|
|||
<span>{{ scope.obj.email }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="scope.obj.is_active" class="ui basic green label"><translate :translate-context="'Content/Admin/Table'">Active</translate></span>
|
||||
<span v-else class="ui basic grey label"><translate :translate-context="'Content/Admin/Table'">Inactive</translate></span>
|
||||
<span v-if="scope.obj.is_active" class="ui basic green label"><translate translate-context="Content/Admin/Table">Active</translate></span>
|
||||
<span v-else class="ui basic grey label"><translate translate-context="Content/Admin/Table">Inactive</translate></span>
|
||||
</td>
|
||||
<td>
|
||||
<human-date :date="scope.obj.date_joined"></human-date>
|
||||
</td>
|
||||
<td>
|
||||
<human-date v-if="scope.obj.last_activity" :date="scope.obj.last_activity"></human-date>
|
||||
<template v-else><translate :translate-context="'*/*/*'">N/A</translate></template>
|
||||
<template v-else><translate translate-context="*/*/*">N/A</translate></template>
|
||||
</td>
|
||||
<td>
|
||||
<template v-for="p in permissions">
|
||||
|
@ -67,9 +67,9 @@
|
|||
</template>
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="scope.obj.is_superuser" class="ui pink label"><translate :translate-context="'Content/Admin/Table.User role'">Admin</translate></span>
|
||||
<span v-else-if="scope.obj.is_staff" class="ui purple label"><translate :translate-context="'Content/Admin/Table.User role'">Staff member</translate></span>
|
||||
<span v-else class="ui basic label"><translate :translate-context="'Content/Admin/Table, User role'">regular user</translate></span>
|
||||
<span v-if="scope.obj.is_superuser" class="ui pink label"><translate translate-context="Content/Admin/Table.User role">Admin</translate></span>
|
||||
<span v-else-if="scope.obj.is_staff" class="ui purple label"><translate translate-context="Content/Admin/Table.User role">Staff member</translate></span>
|
||||
<span v-else class="ui basic label"><translate translate-context="Content/Admin/Table, User role">regular user</translate></span>
|
||||
</td>
|
||||
</template>
|
||||
</action-table>
|
||||
|
@ -85,7 +85,7 @@
|
|||
></pagination>
|
||||
|
||||
<span v-if="result && result.results.length > 0">
|
||||
<translate :translate-context="'Content/Admin/Paragraph'"
|
||||
<translate translate-context="Content/Admin/Paragraph"
|
||||
:translate-params="{start: ((page-1) * paginateBy) + 1, end: ((page-1) * paginateBy) + result.results.length, total: result.count}">
|
||||
Showing results %{ start }-%{ end } on %{ total }
|
||||
</translate>
|
||||
|
|
|
@ -4,32 +4,32 @@
|
|||
<translate
|
||||
v-if="type === 'artist'"
|
||||
key="1"
|
||||
:translate-context="'Popup/Moderation/Title/Verb'"
|
||||
translate-context="Popup/Moderation/Title/Verb"
|
||||
:translate-params="{name: target.name}">Do you want to hide content from artist "%{ name }"?</translate>
|
||||
</div>
|
||||
<div class="scrolling content">
|
||||
<div class="description">
|
||||
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Popup/Moderation/Error message'">Error while creating filter</translate></div>
|
||||
<div class="header"><translate translate-context="Popup/Moderation/Error message">Error while creating filter</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<template v-if="type === 'artist'">
|
||||
<p>
|
||||
<translate :translate-context="'Popup/Moderation/Paragraph'">
|
||||
<translate translate-context="Popup/Moderation/Paragraph">
|
||||
You will not see tracks, albums and user activity linked to this artist anymore:
|
||||
</translate>
|
||||
</p>
|
||||
<ul>
|
||||
<li><translate :translate-context="'Popup/Moderation/List item'">In other users favorites and listening history</translate></li>
|
||||
<li><translate :translate-context="'Popup/Moderation/List item'">In "Recently added" widget</translate></li>
|
||||
<li><translate :translate-context="'Popup/Moderation/List item'">In artists and album listings</translate></li>
|
||||
<li><translate :translate-context="'Popup/Moderation/List item'">In radio suggestions</translate></li>
|
||||
<li><translate translate-context="Popup/Moderation/List item">In other users favorites and listening history</translate></li>
|
||||
<li><translate translate-context="Popup/Moderation/List item">In "Recently added" widget</translate></li>
|
||||
<li><translate translate-context="Popup/Moderation/List item">In artists and album listings</translate></li>
|
||||
<li><translate translate-context="Popup/Moderation/List item">In radio suggestions</translate></li>
|
||||
</ul>
|
||||
<p>
|
||||
<translate :translate-context="'Popup/Moderation/Paragraph'">
|
||||
<translate translate-context="Popup/Moderation/Paragraph">
|
||||
You can manage and update your filters anytime from your account settings.
|
||||
</translate>
|
||||
</p>
|
||||
|
@ -37,8 +37,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui cancel button"><translate :translate-context="'Popup/*/Button.Label'">Cancel</translate></div>
|
||||
<div :class="['ui', 'green', {loading: isLoading}, 'button']" @click="hide"><translate :translate-context="'Popup/*/Button.Label'">Hide content</translate></div>
|
||||
<div class="ui cancel button"><translate translate-context="Popup/*/Button.Label">Cancel</translate></div>
|
||||
<div :class="['ui', 'green', {loading: isLoading}, 'button']" @click="hide"><translate translate-context="Popup/*/Button.Label">Hide content</translate></div>
|
||||
</div>
|
||||
</modal>
|
||||
</template>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<duration :seconds="playlist.duration" />
|
||||
|
|
||||
<i class="sound icon"></i>
|
||||
<translate :translate-context="'Content/*/Card/List item'"
|
||||
<translate translate-context="Content/*/Card/List item"
|
||||
translate-plural="%{ count } tracks"
|
||||
:translate-n="playlist.tracks_count"
|
||||
:translate-params="{count: playlist.tracks_count}">
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
<div class="ui text container">
|
||||
<playlist-form @updated="$emit('playlist-updated', $event)" :title="false" :playlist="playlist"></playlist-form>
|
||||
<h3 class="ui top attached header">
|
||||
<translate :translate-context="'Content/Playlist/Title'">Playlist editor</translate>
|
||||
<translate translate-context="Content/Playlist/Title">Playlist editor</translate>
|
||||
</h3>
|
||||
<div class="ui attached segment">
|
||||
<template v-if="status === 'loading'">
|
||||
<div class="ui active tiny inline loader"></div>
|
||||
<translate :translate-context="'Content/Playlist/Paragraph'">Syncing changes to server…</translate>
|
||||
<translate translate-context="Content/Playlist/Paragraph">Syncing changes to server…</translate>
|
||||
</template>
|
||||
<template v-else-if="status === 'errored'">
|
||||
<i class="red close icon"></i>
|
||||
<translate :translate-context="'Content/Playlist/Error message.Title'">An error occured while saving your changes</translate>
|
||||
<translate translate-context="Content/Playlist/Error message.Title">An error occured while saving your changes</translate>
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
|
@ -19,7 +19,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<template v-else-if="status === 'saved'">
|
||||
<i class="green check icon"></i> <translate :translate-context="'Content/Playlist/Paragraph'">Changes synced with server</translate>
|
||||
<i class="green check icon"></i> <translate translate-context="Content/Playlist/Paragraph">Changes synced with server</translate>
|
||||
</template>
|
||||
</div>
|
||||
<div class="ui bottom attached segment">
|
||||
|
@ -29,7 +29,7 @@
|
|||
:class="['ui', {disabled: queueTracks.length === 0}, 'labeled', 'icon', 'button']"
|
||||
:title="labels.copyTitle">
|
||||
<i class="plus icon"></i>
|
||||
<translate :translate-context="'Content/Playlist/Button.Label/Verb'"
|
||||
<translate translate-context="Content/Playlist/Button.Label/Verb"
|
||||
translate-plural="Insert from queue (%{ count } tracks)"
|
||||
:translate-n="queueTracks.length"
|
||||
:translate-params="{count: queueTracks.length}">
|
||||
|
@ -38,16 +38,16 @@
|
|||
</div>
|
||||
|
||||
<dangerous-button :disabled="plts.length === 0" class="labeled right floated icon" color='yellow' :action="clearPlaylist">
|
||||
<i class="eraser icon"></i> <translate :translate-context="'Content/Playlist/Button.Label/Verb'">Clear playlist</translate>
|
||||
<i class="eraser icon"></i> <translate translate-context="Content/Playlist/Button.Label/Verb">Clear playlist</translate>
|
||||
<p slot="modal-header">
|
||||
<translate :translate-context="'Popup/Playlist/Title'" :translate-params="{playlist: playlist.name}">Do you want to clear the playlist "%{ playlist }"?</translate>
|
||||
<translate translate-context="Popup/Playlist/Title" :translate-params="{playlist: playlist.name}">Do you want to clear the playlist "%{ playlist }"?</translate>
|
||||
</p>
|
||||
<p slot="modal-content"><translate :translate-context="'Popup/Playlist/Paragraph'">This will remove all tracks from this playlist and cannot be undone.</translate></p>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Playlist/Button.Label'">Clear playlist</translate></div>
|
||||
<p slot="modal-content"><translate translate-context="Popup/Playlist/Paragraph">This will remove all tracks from this playlist and cannot be undone.</translate></p>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Playlist/Button.Label">Clear playlist</translate></div>
|
||||
</dangerous-button>
|
||||
<div class="ui hidden divider"></div>
|
||||
<template v-if="plts.length > 0">
|
||||
<p><translate :translate-context="'Content/Playlist/Paragraph/Call to action'">Drag and drop rows to reorder tracks in the playlist</translate></p>
|
||||
<p><translate translate-context="Content/Playlist/Paragraph/Call to action">Drag and drop rows to reorder tracks in the playlist</translate></p>
|
||||
<div class="table-wrapper">
|
||||
<table class="ui compact very basic unstackable table">
|
||||
<draggable v-model="plts" element="tbody" @update="reorder">
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
<template>
|
||||
<form class="ui form" @submit.prevent="submit()">
|
||||
<h4 v-if="title" class="ui header"><translate :translate-context="'Popup/Playlist/Title/Verb'">Create a new playlist</translate></h4>
|
||||
<h4 v-if="title" class="ui header"><translate translate-context="Popup/Playlist/Title/Verb">Create a new playlist</translate></h4>
|
||||
<div v-if="success" class="ui positive message">
|
||||
<div class="header">
|
||||
<template v-if="playlist">
|
||||
<translate :translate-context="'Content/Playlist/Message'">Playlist updated</translate>
|
||||
<translate translate-context="Content/Playlist/Message">Playlist updated</translate>
|
||||
</template>
|
||||
<template v-else>
|
||||
<translate :translate-context="'Content/Playlist/Message'">Playlist created</translate>
|
||||
<translate translate-context="Content/Playlist/Message">Playlist created</translate>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Playlist/Error message.Title'">The playlist could not be created</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Playlist/Error message.Title">The playlist could not be created</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="three fields">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Playlist/Input.Label'">Playlist name</translate></label>
|
||||
<label><translate translate-context="Content/Playlist/Input.Label">Playlist name</translate></label>
|
||||
<input name="name" v-model="name" required type="text" :placeholder="labels.placeholder" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Playlist/Dropdown.Label'">Playlist visibility</translate></label>
|
||||
<label><translate translate-context="Content/Playlist/Dropdown.Label">Playlist visibility</translate></label>
|
||||
<select class="ui dropdown" v-model="privacyLevel">
|
||||
<option :value="c.value" v-for="c in privacyLevelChoices">{{ c.label }}</option>
|
||||
</select>
|
||||
|
@ -31,8 +31,8 @@
|
|||
<div class="field">
|
||||
<label> </label>
|
||||
<button :class="['ui', 'fluid', {'loading': isLoading}, 'button']" type="submit">
|
||||
<template v-if="playlist"><translate :translate-context="'Content/Playlist/Button.Label/Verb'">Update playlist</translate></template>
|
||||
<template v-else><translate :translate-context="'Content/Playlist/Button.Label/Verb'">Create playlist</translate></template>
|
||||
<template v-if="playlist"><translate translate-context="Content/Playlist/Button.Label/Verb">Update playlist</translate></template>
|
||||
<template v-else><translate translate-context="Content/Playlist/Button.Label/Verb">Create playlist</translate></template>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<template>
|
||||
<modal @update:show="update" :show="$store.state.playlists.showModal">
|
||||
<div class="header">
|
||||
<translate :translate-context="'Popup/Playlist/Title/Verb'">Manage playlists</translate>
|
||||
<translate translate-context="Popup/Playlist/Title/Verb">Manage playlists</translate>
|
||||
</div>
|
||||
<div class="scrolling content">
|
||||
<div class="description">
|
||||
<template v-if="track">
|
||||
<h4 class="ui header"><translate :translate-context="'Popup/Playlist/Title'">Current track</translate></h4>
|
||||
<translate :translate-context="'Popup/Playlist/Paragraph'"
|
||||
<h4 class="ui header"><translate translate-context="Popup/Playlist/Title">Current track</translate></h4>
|
||||
<translate translate-context="Popup/Playlist/Paragraph"
|
||||
v-translate="{artist: track.artist.name, title: track.title}"
|
||||
:translate-params="{artist: track.artist.name, title: track.title}">
|
||||
"%{ title }", by %{ artist }
|
||||
|
@ -18,20 +18,20 @@
|
|||
<playlist-form :key="formKey"></playlist-form>
|
||||
<div class="ui divider"></div>
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Popup/Playlist/Error message.Title'">The track can't be added to a playlist</translate></div>
|
||||
<div class="header"><translate translate-context="Popup/Playlist/Error message.Title">The track can't be added to a playlist</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="ui header"><translate :translate-context="'Popup/Playlist/Title'">Available playlists</translate></h4>
|
||||
<h4 class="ui header"><translate translate-context="Popup/Playlist/Title">Available playlists</translate></h4>
|
||||
<table class="ui unstackable very basic table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th><translate :translate-context="'*/*/Table.Label'">Name</translate></th>
|
||||
<th class="sorted descending"><translate :translate-context="'Popup/Playlist/Table.Label/Short'">Last modification</translate></th>
|
||||
<th><translate :translate-context="'*/*/Table.Label'">Tracks</translate></th>
|
||||
<th><translate translate-context="*/*/Table.Label">Name</translate></th>
|
||||
<th class="sorted descending"><translate translate-context="Popup/Playlist/Table.Label/Short">Last modification</translate></th>
|
||||
<th><translate translate-context="*/*/Table.Label">Tracks</translate></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -52,7 +52,7 @@
|
|||
class="ui green icon basic small right floated button"
|
||||
:title="labels.addToPlaylist"
|
||||
@click="addToPlaylist(playlist.id)">
|
||||
<i class="plus icon"></i> <translate :translate-context="'Popup/Playlist/Table.Button.Label/Verb'">Add track</translate>
|
||||
<i class="plus icon"></i> <translate translate-context="Popup/Playlist/Table.Button.Label/Verb">Add track</translate>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -61,7 +61,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui cancel button"><translate :translate-context="'Popup/Playlist/Button.Label'">Cancel</translate></div>
|
||||
<div class="ui cancel button"><translate translate-context="Popup/Playlist/Button.Label">Cancel</translate></div>
|
||||
</div>
|
||||
</modal>
|
||||
</template>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
v-if="button"
|
||||
:class="['ui', 'icon', 'labeled', 'button']">
|
||||
<i class="list icon"></i>
|
||||
<translate :translate-context="'Sidebar/Player/Icon.Tooltip/Verb'">Add to playlist…</translate>
|
||||
<translate translate-context="Sidebar/Player/Icon.Tooltip/Verb">Add to playlist…</translate>
|
||||
</button>
|
||||
<button
|
||||
v-else
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<button @click="toggleRadio" :class="['ui', 'blue', {'inverted': running}, 'icon', 'labeled', 'button']">
|
||||
<i class="ui feed icon"></i>
|
||||
<template v-if="running"><translate :translate-context="'Content/Radio/Button.Label/Short, Verb'">Stop radio</translate></template>
|
||||
<template v-else><translate :translate-context="'Content/Radio/Button.Label/Short, Verb'">Start radio</translate></template>
|
||||
<template v-if="running"><translate translate-context="Content/Radio/Button.Label/Short, Verb">Stop radio</translate></template>
|
||||
<template v-else><translate translate-context="Content/Radio/Button.Label/Short, Verb">Start radio</translate></template>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
class="ui basic yellow button right floated"
|
||||
v-if="$store.state.auth.authenticated && type === 'custom' && radio.user.id === $store.state.auth.profile.id"
|
||||
:to="{name: 'library.radios.edit', params: {id: customRadioId }}">
|
||||
<translate :translate-context="'Content/Radio/Card.Button.Label/Short, Verb'">Edit…</translate>
|
||||
<translate translate-context="Content/Radio/Card.Button.Label/Short, Verb">Edit…</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,22 +2,22 @@
|
|||
<main class="main pusher" v-title="labels.title">
|
||||
<section class="ui vertical aligned stripe segment">
|
||||
<div class="ui container">
|
||||
<h1 class="ui header"><translate :translate-context="'Content/Notifications/Title'">Your notifications</translate></h1>
|
||||
<h1 class="ui header"><translate translate-context="Content/Notifications/Title">Your notifications</translate></h1>
|
||||
<div class="ui toggle checkbox">
|
||||
<input v-model="filters.is_read" type="checkbox">
|
||||
<label><translate :translate-context="'Content/Notifications/Form.Label/Verb'">Show read notifications</translate></label>
|
||||
<label><translate translate-context="Content/Notifications/Form.Label/Verb">Show read notifications</translate></label>
|
||||
</div>
|
||||
<div
|
||||
v-if="filters.is_read === false && notifications.count > 0"
|
||||
@click="markAllAsRead"
|
||||
class="ui basic labeled icon right floated button">
|
||||
<i class="ui check icon" />
|
||||
<translate :translate-context="'Content/Notifications/Button.Label/Verb'">Mark all as read</translate>
|
||||
<translate translate-context="Content/Notifications/Button.Label/Verb">Mark all as read</translate>
|
||||
</div>
|
||||
<div class="ui hidden divider" />
|
||||
|
||||
<div v-if="isLoading" :class="['ui', {'active': isLoading}, 'inverted', 'dimmer']">
|
||||
<div class="ui text loader"><translate :translate-context="'Content/Notifications/Paragraph'">Loading notifications…</translate></div>
|
||||
<div class="ui text loader"><translate translate-context="Content/Notifications/Paragraph">Loading notifications…</translate></div>
|
||||
</div>
|
||||
|
||||
<table v-else-if="notifications.count > 0" class="ui table">
|
||||
|
@ -26,7 +26,7 @@
|
|||
</tbody>
|
||||
</table>
|
||||
<p v-else>
|
||||
<translate :translate-context="'Content/Notifications/Paragraph'">No notification to show.</translate>
|
||||
<translate translate-context="Content/Notifications/Paragraph">No notification to show.</translate>
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
</div>
|
||||
<div class="four wide column">
|
||||
<div class="ui sticky vertical secondary menu">
|
||||
<div class="header item"><translate :translate-context="'Content/Admin/Menu.Title'">Sections</translate></div>
|
||||
<div class="header item"><translate translate-context="Content/Admin/Menu.Title">Sections</translate></div>
|
||||
<a :class="['menu', {active: group.id === current}, 'item']"
|
||||
@click.prevent="scrollTo(group.id)"
|
||||
:href="'#' + group.id"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<nav class="ui secondary pointing menu" role="navigation" :aria-label="labels.secondaryMenu">
|
||||
<router-link
|
||||
class="ui item"
|
||||
:to="{name: 'manage.library.edits'}"><translate :translate-context="'Menu/Admin/Link'">Edits</translate></router-link>
|
||||
:to="{name: 'manage.library.edits'}"><translate translate-context="Menu/Admin/Link">Edits</translate></router-link>
|
||||
</nav>
|
||||
<router-view :key="$route.fullPath"></router-view>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<main v-title="labels.title">
|
||||
<section class="ui vertical stripe segment">
|
||||
<edits-card-list :update-url="true" :default-query="defaultQuery">
|
||||
<h2 class="ui header"><translate :translate-context="'Content/Admin/Title/Noun'">Library edits</translate></h2>
|
||||
<h2 class="ui header"><translate translate-context="Content/Admin/Title/Noun">Library edits</translate></h2>
|
||||
</edits-card-list>
|
||||
</section>
|
||||
</main>
|
||||
|
|
|
@ -16,12 +16,12 @@
|
|||
<template v-if="object.user">
|
||||
<span class="ui tiny teal icon label">
|
||||
<i class="home icon"></i>
|
||||
<translate :translate-context="'Content/Moderation/List item'">Local account</translate>
|
||||
<translate translate-context="Content/Moderation/List item">Local account</translate>
|
||||
</span>
|
||||
|
||||
</template>
|
||||
<a :href="object.url || object.fid" target="_blank" rel="noopener noreferrer">
|
||||
<translate :translate-context="'Content/Moderation/Link/Verb'">Open profile</translate>
|
||||
<translate translate-context="Content/Moderation/Link/Verb">Open profile</translate>
|
||||
<i class="external icon"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -44,16 +44,16 @@
|
|||
<header class="ui header">
|
||||
<h3>
|
||||
<i class="shield icon"></i>
|
||||
<translate :translate-context="'Content/Moderation/Card.Title'">You don't have any rule in place for this account.</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Title">You don't have any rule in place for this account.</translate>
|
||||
</h3>
|
||||
</header>
|
||||
<p><translate :translate-context="'Content/Moderation/Card.Paragraph'">Moderation policies help you control how your instance interact with a given domain or account.</translate></p>
|
||||
<button @click="showPolicyForm = true" class="ui primary button"><translate :translate-context="'Content/Moderation/Button/Verb'">Add a moderation policy</translate></button>
|
||||
<p><translate translate-context="Content/Moderation/Card.Paragraph">Moderation policies help you control how your instance interact with a given domain or account.</translate></p>
|
||||
<button @click="showPolicyForm = true" class="ui primary button"><translate translate-context="Content/Moderation/Button/Verb">Add a moderation policy</translate></button>
|
||||
</template>
|
||||
<instance-policy-card v-else-if="policy && !showPolicyForm" :object="policy" @update="showPolicyForm = true">
|
||||
<header class="ui header">
|
||||
<h3>
|
||||
<translate :translate-context="'Content/Moderation/Card.Title'">This domain is subject to specific moderation rules</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Title">This domain is subject to specific moderation rules</translate>
|
||||
</h3>
|
||||
</header>
|
||||
</instance-policy-card>
|
||||
|
@ -76,14 +76,14 @@
|
|||
<h3 class="ui header">
|
||||
<i class="info icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/Moderation/Title'">Account data</translate>
|
||||
<translate translate-context="Content/Moderation/Title">Account data</translate>
|
||||
</div>
|
||||
</h3>
|
||||
<table class="ui very basic table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Username</translate>
|
||||
<translate translate-context="Content/*/*">Username</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ object.preferred_username }}
|
||||
|
@ -91,7 +91,7 @@
|
|||
</tr>
|
||||
<tr v-if="!object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Domain</translate>
|
||||
<translate translate-context="Content/*/*">Domain</translate>
|
||||
</td>
|
||||
<td>
|
||||
<router-link :to="{name: 'manage.moderation.domains.detail', params: {id: object.domain }}">
|
||||
|
@ -109,7 +109,7 @@
|
|||
</tr>
|
||||
<tr v-if="object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Email address</translate>
|
||||
<translate translate-context="Content/*/*">Email address</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ object.user.email }}
|
||||
|
@ -117,7 +117,7 @@
|
|||
</tr>
|
||||
<tr v-if="object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*/Noun'">Login status</translate>
|
||||
<translate translate-context="Content/*/*/Noun">Login status</translate>
|
||||
</td>
|
||||
<td>
|
||||
<div class="ui toggle checkbox" v-if="object.user.username != $store.state.auth.profile.username">
|
||||
|
@ -125,17 +125,17 @@
|
|||
@change="updateUser('is_active')"
|
||||
v-model="object.user.is_active" type="checkbox">
|
||||
<label>
|
||||
<translate v-if="object.user.is_active" key="1" :translate-context="'Content/*/Label'">Enabled</translate>
|
||||
<translate v-else key="2" :translate-context="'Content/*/Label'">Disabled</translate>
|
||||
<translate v-if="object.user.is_active" key="1" translate-context="Content/*/Label">Enabled</translate>
|
||||
<translate v-else key="2" translate-context="Content/*/Label">Disabled</translate>
|
||||
</label>
|
||||
</div>
|
||||
<translate v-else-if="object.user.is_active" key="1" :translate-context="'Content/*/Label'">Enabled</translate>
|
||||
<translate v-else key="2" :translate-context="'Content/*/Label'">Disabled</translate>
|
||||
<translate v-else-if="object.user.is_active" key="1" translate-context="Content/*/Label">Enabled</translate>
|
||||
<translate v-else key="2" translate-context="Content/*/Label">Disabled</translate>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label'">Permissions</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label">Permissions</translate>
|
||||
</td>
|
||||
<td>
|
||||
<select
|
||||
|
@ -149,7 +149,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Type</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Type</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ object.type }}
|
||||
|
@ -157,7 +157,7 @@
|
|||
</tr>
|
||||
<tr v-if="!object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/Table.Label'">First seen</translate>
|
||||
<translate translate-context="Content/*/Table.Label">First seen</translate>
|
||||
</td>
|
||||
<td>
|
||||
<human-date :date="object.creation_date"></human-date>
|
||||
|
@ -165,16 +165,16 @@
|
|||
</tr>
|
||||
<tr v-if="!object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/Table.Label'">Last checked</translate>
|
||||
<translate translate-context="Content/*/Table.Label">Last checked</translate>
|
||||
</td>
|
||||
<td>
|
||||
<human-date v-if="object.last_fetch_date" :date="object.last_fetch_date"></human-date>
|
||||
<translate v-else :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate v-else translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/Table.Label'">Sign-up date</translate>
|
||||
<translate translate-context="Content/*/Table.Label">Sign-up date</translate>
|
||||
</td>
|
||||
<td>
|
||||
<human-date :date="object.user.date_joined"></human-date>
|
||||
|
@ -182,7 +182,7 @@
|
|||
</tr>
|
||||
<tr v-if="object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/Table.Label'">Last activity</translate>
|
||||
<translate translate-context="Content/*/Table.Label">Last activity</translate>
|
||||
</td>
|
||||
<td>
|
||||
<human-date :date="object.user.last_activity"></human-date>
|
||||
|
@ -197,7 +197,7 @@
|
|||
<h3 class="ui header">
|
||||
<i class="feed icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/Moderation/Title'">Activity</translate>
|
||||
<translate translate-context="Content/Moderation/Title">Activity</translate>
|
||||
<span :data-tooltip="labels.statsWarning"><i class="question circle icon"></i></span>
|
||||
|
||||
</div>
|
||||
|
@ -212,7 +212,7 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Emitted messages</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Emitted messages</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.outbox_activities}}
|
||||
|
@ -220,7 +220,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Received library follows</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Received library follows</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.received_library_follows}}
|
||||
|
@ -228,7 +228,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Emitted library follows</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Emitted library follows</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.emitted_library_follows}}
|
||||
|
@ -243,7 +243,7 @@
|
|||
<h3 class="ui header">
|
||||
<i class="music icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/Moderation/Title'">Audio content</translate>
|
||||
<translate translate-context="Content/Moderation/Title">Audio content</translate>
|
||||
<span :data-tooltip="labels.statsWarning"><i class="question circle icon"></i></span>
|
||||
|
||||
</div>
|
||||
|
@ -259,7 +259,7 @@
|
|||
|
||||
<tr v-if="!object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Cached size</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Cached size</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.media_downloaded_size | humanSize }}
|
||||
|
@ -267,7 +267,7 @@
|
|||
</tr>
|
||||
<tr v-if="object.user">
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'" >Upload quota</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun" >Upload quota</translate>
|
||||
<span :data-tooltip="labels.uploadQuota"><i class="question circle icon"></i></span>
|
||||
</td>
|
||||
<td>
|
||||
|
@ -279,14 +279,14 @@
|
|||
step="100"
|
||||
type="number" />
|
||||
<div class="ui basic label">
|
||||
<translate :translate-context="'Content/*/*/Unit'">MB</translate>
|
||||
<translate translate-context="Content/*/*/Unit">MB</translate>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Total size</translate>
|
||||
<translate translate-context="Content/*/*">Total size</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.media_total_size | humanSize }}
|
||||
|
@ -295,7 +295,7 @@
|
|||
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label'">Libraries</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label">Libraries</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.libraries }}
|
||||
|
@ -303,7 +303,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Uploads</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.uploads }}
|
||||
|
@ -311,7 +311,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Artists</translate>
|
||||
<translate translate-context="Content/*/*">Artists</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.artists }}
|
||||
|
@ -319,7 +319,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Albums</translate>
|
||||
<translate translate-context="Content/*/*">Albums</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.albums}}
|
||||
|
@ -327,7 +327,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Tracks</translate>
|
||||
<translate translate-context="Content/*/*">Tracks</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.tracks }}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<main v-title="labels.accounts">
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2 class="ui header"><translate :translate-context="'Content/Moderation/Title'">Accounts</translate></h2>
|
||||
<h2 class="ui header"><translate translate-context="Content/Moderation/Title">Accounts</translate></h2>
|
||||
<div class="ui hidden divider"></div>
|
||||
<accounts-table :update-url="true" :default-query="defaultQuery"></accounts-table>
|
||||
</section>
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<nav class="ui secondary pointing menu" role="navigation" :aria-label="labels.secondaryMenu">
|
||||
<router-link
|
||||
class="ui item"
|
||||
:to="{name: 'manage.moderation.domains.list'}"><translate :translate-context="'Menu/Moderation/Tab'">Domains</translate></router-link>
|
||||
:to="{name: 'manage.moderation.domains.list'}"><translate translate-context="Menu/Moderation/Tab">Domains</translate></router-link>
|
||||
<router-link
|
||||
class="ui item"
|
||||
:to="{name: 'manage.moderation.accounts.list'}"><translate :translate-context="'Menu/Moderation/Tab'">Accounts</translate></router-link>
|
||||
:to="{name: 'manage.moderation.accounts.list'}"><translate translate-context="Menu/Moderation/Tab">Accounts</translate></router-link>
|
||||
|
||||
</nav>
|
||||
<router-view :key="$route.fullPath"></router-view>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
{{ object.name }}
|
||||
<div class="sub header">
|
||||
<a :href="externalUrl" target="_blank" rel="noopener noreferrer" class="logo-wrapper">
|
||||
<translate :translate-context="'Content/Moderation/Link/Verb'">Open website</translate>
|
||||
<translate translate-context="Content/Moderation/Link/Verb">Open website</translate>
|
||||
<i class="external icon"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -37,16 +37,16 @@
|
|||
<header class="ui header">
|
||||
<h3>
|
||||
<i class="shield icon"></i>
|
||||
<translate :translate-context="'Content/Moderation/Card.Title'">You don't have any rule in place for this domain.</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Title">You don't have any rule in place for this domain.</translate>
|
||||
</h3>
|
||||
</header>
|
||||
<p><translate :translate-context="'Content/Moderation/Card.Paragraph'">Moderation policies help you control how your instance interact with a given domain or account.</translate></p>
|
||||
<p><translate translate-context="Content/Moderation/Card.Paragraph">Moderation policies help you control how your instance interact with a given domain or account.</translate></p>
|
||||
<button @click="showPolicyForm = true" class="ui primary button">Add a moderation policy</button>
|
||||
</template>
|
||||
<instance-policy-card v-else-if="policy && !showPolicyForm" :object="policy" @update="showPolicyForm = true">
|
||||
<header class="ui header">
|
||||
<h3>
|
||||
<translate :translate-context="'Content/Moderation/Card.Title'">This domain is subject to specific moderation rules</translate>
|
||||
<translate translate-context="Content/Moderation/Card.Title">This domain is subject to specific moderation rules</translate>
|
||||
</h3>
|
||||
</header>
|
||||
</instance-policy-card>
|
||||
|
@ -69,14 +69,14 @@
|
|||
<h3 class="ui header">
|
||||
<i class="info icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/Moderation/Title'">Instance data</translate>
|
||||
<translate translate-context="Content/Moderation/Title">Instance data</translate>
|
||||
</div>
|
||||
</h3>
|
||||
<table class="ui very basic table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/Table.Label'">First seen</translate>
|
||||
<translate translate-context="Content/*/Table.Label">First seen</translate>
|
||||
</td>
|
||||
<td>
|
||||
<human-date :date="object.creation_date"></human-date>
|
||||
|
@ -84,18 +84,18 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/Table.Label'">Last checked</translate>
|
||||
<translate translate-context="Content/*/Table.Label">Last checked</translate>
|
||||
</td>
|
||||
<td>
|
||||
<human-date v-if="object.nodeinfo_fetch_date" :date="object.nodeinfo_fetch_date"></human-date>
|
||||
<translate v-else :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate v-else translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<template v-if="object.nodeinfo && object.nodeinfo.status === 'ok'">
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label'">Software</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label">Software</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ lodash.get(object, 'nodeinfo.payload.software.name', $gettext('N/A')) }} ({{ lodash.get(object, 'nodeinfo.payload.software.version', $gettext('N/A')) }})
|
||||
|
@ -103,7 +103,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label'">Name</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label">Name</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ lodash.get(object, 'nodeinfo.payload.metadata.nodeName', $gettext('N/A')) }}
|
||||
|
@ -111,7 +111,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Total users</translate>
|
||||
<translate translate-context="Content/*/*">Total users</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ lodash.get(object, 'nodeinfo.payload.usage.users.total', $gettext('N/A')) }}
|
||||
|
@ -121,10 +121,10 @@
|
|||
<template v-if="object.nodeinfo && object.nodeinfo.status === 'error'">
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label'">Status</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label">Status</translate>
|
||||
</td>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table'">Error while fetching node info</translate>
|
||||
<translate translate-context="Content/Moderation/Table">Error while fetching node info</translate>
|
||||
|
||||
<span :data-tooltip="object.nodeinfo.error"><i class="question circle icon"></i></span>
|
||||
</td>
|
||||
|
@ -133,7 +133,7 @@
|
|||
</tbody>
|
||||
</table>
|
||||
<ajax-button @action-done="refreshNodeInfo" method="get" :url="'manage/federation/domains/' + object.name + '/nodeinfo/'">
|
||||
<translate :translate-context="'Content/Moderation/Button.Label/Verb'">Refresh node info</translate>
|
||||
<translate translate-context="Content/Moderation/Button.Label/Verb">Refresh node info</translate>
|
||||
</ajax-button>
|
||||
</section>
|
||||
</div>
|
||||
|
@ -142,7 +142,7 @@
|
|||
<h3 class="ui header">
|
||||
<i class="feed icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/Moderation/Title'">Activity</translate>
|
||||
<translate translate-context="Content/Moderation/Title">Activity</translate>
|
||||
<span :data-tooltip="labels.statsWarning"><i class="question circle icon"></i></span>
|
||||
|
||||
</div>
|
||||
|
@ -159,7 +159,7 @@
|
|||
<td>
|
||||
<router-link
|
||||
:to="{name: 'manage.moderation.accounts.list', query: {q: 'domain:' + object.name }}">
|
||||
<translate :translate-context="'Content/Moderation/Table.Label.Link'">Known accounts</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label.Link">Known accounts</translate>
|
||||
</router-link>
|
||||
|
||||
</td>
|
||||
|
@ -169,7 +169,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Emitted messages</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Emitted messages</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.outbox_activities}}
|
||||
|
@ -177,7 +177,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Received library follows</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Received library follows</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.received_library_follows}}
|
||||
|
@ -185,7 +185,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Emitted library follows</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Emitted library follows</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.emitted_library_follows}}
|
||||
|
@ -200,7 +200,7 @@
|
|||
<h3 class="ui header">
|
||||
<i class="music icon"></i>
|
||||
<div class="content">
|
||||
<translate :translate-context="'Content/Moderation/Title'">Audio content</translate>
|
||||
<translate translate-context="Content/Moderation/Title">Audio content</translate>
|
||||
<span :data-tooltip="labels.statsWarning"><i class="question circle icon"></i></span>
|
||||
|
||||
</div>
|
||||
|
@ -215,7 +215,7 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Cached size</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Cached size</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.media_downloaded_size | humanSize }}
|
||||
|
@ -223,7 +223,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label'">Total size</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label">Total size</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.media_total_size | humanSize }}
|
||||
|
@ -231,7 +231,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label'">Libraries</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label">Libraries</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.libraries }}
|
||||
|
@ -239,7 +239,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/Moderation/Table.Label/Noun'">Uploads</translate>
|
||||
<translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.uploads }}
|
||||
|
@ -247,7 +247,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Artists</translate>
|
||||
<translate translate-context="Content/*/*">Artists</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.artists }}
|
||||
|
@ -255,7 +255,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Albums</translate>
|
||||
<translate translate-context="Content/*/*">Albums</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.albums}}
|
||||
|
@ -263,7 +263,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<translate :translate-context="'Content/*/*'">Tracks</translate>
|
||||
<translate translate-context="Content/*/*">Tracks</translate>
|
||||
</td>
|
||||
<td>
|
||||
{{ stats.tracks }}
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
<template>
|
||||
<main v-title="labels.domains">
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2 class="ui left floated header"><translate :translate-context="'Content/Moderation/Title'">Domains</translate></h2>
|
||||
<h2 class="ui left floated header"><translate translate-context="Content/Moderation/Title">Domains</translate></h2>
|
||||
<form class="ui right floated form" @submit.prevent="createDomain">
|
||||
<div v-if="errors && errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Moderation/Message.Title'">Error while creating domain</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Moderation/Message.Title">Error while creating domain</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="inline fields">
|
||||
<div class="field">
|
||||
<label for="domain"><translate :translate-context="'Content/Moderation/Form.Label/Verb'">Add a domain</translate></label>
|
||||
<label for="domain"><translate translate-context="Content/Moderation/Form.Label/Verb">Add a domain</translate></label>
|
||||
<input type="text" name="domain" id="domain" v-model="domainName">
|
||||
</div>
|
||||
<div class="field">
|
||||
<button :class="['ui', {'loading': isCreating}, 'green', 'button']" type="submit" :disabled="isCreating">
|
||||
<label for="domain"><translate :translate-context="'Content/Moderation/Button/Verb'">Add</translate></label>
|
||||
<label for="domain"><translate translate-context="Content/Moderation/Button/Verb">Add</translate></label>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<nav class="ui secondary pointing menu" role="navigation" :aria-label="labels.secondaryMenu">
|
||||
<router-link
|
||||
class="ui item"
|
||||
:to="{name: 'manage.users.users.list'}"><translate :translate-context="'*/Admin/Link'">Users</translate></router-link>
|
||||
:to="{name: 'manage.users.users.list'}"><translate translate-context="*/Admin/Link">Users</translate></router-link>
|
||||
<router-link
|
||||
class="ui item"
|
||||
:to="{name: 'manage.users.invitations.list'}"><translate :translate-context="'Menu/Admin/Link'">Invitations</translate></router-link>
|
||||
:to="{name: 'manage.users.invitations.list'}"><translate translate-context="Menu/Admin/Link">Invitations</translate></router-link>
|
||||
</nav>
|
||||
<router-view :key="$route.fullPath"></router-view>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<main v-title="labels.invitations">
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2 class="ui header"><translate :translate-context="'*/Admin/Title'">Invitations</translate></h2>
|
||||
<h2 class="ui header"><translate translate-context="*/Admin/Title">Invitations</translate></h2>
|
||||
<invitation-form></invitation-form>
|
||||
<div class="ui hidden divider"></div>
|
||||
<invitations-table></invitations-table>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<main v-title="labels.users">
|
||||
<section class="ui vertical stripe segment">
|
||||
<h2 class="ui header"><translate :translate-context="'*/Admin/Title'">Users</translate></h2>
|
||||
<h2 class="ui header"><translate translate-context="*/Admin/Title">Users</translate></h2>
|
||||
<div class="ui hidden divider"></div>
|
||||
<users-table></users-table>
|
||||
</section>
|
||||
|
|
|
@ -2,29 +2,29 @@
|
|||
<main class="main pusher" v-title="labels.confirm">
|
||||
<section class="ui vertical stripe segment">
|
||||
<div class="ui small text container">
|
||||
<h2><translate :translate-context="'Content/Signup/Title'">Confirm your e-mail address</translate></h2>
|
||||
<h2><translate translate-context="Content/Signup/Title">Confirm your e-mail address</translate></h2>
|
||||
<form v-if="!success" class="ui form" @submit.prevent="submit()">
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Signup/Paragraph'">Could not confirm your e-mail address</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Signup/Paragraph">Could not confirm your e-mail address</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Signup/Form.Label'">Confirmation code</translate></label>
|
||||
<label><translate translate-context="Content/Signup/Form.Label">Confirmation code</translate></label>
|
||||
<input name="confirmation-code" type="text" required v-model="key" />
|
||||
</div>
|
||||
<router-link :to="{path: '/login'}">
|
||||
<translate :translate-context="'Content/Signup/Link/Verb'">Return to login</translate>
|
||||
<translate translate-context="Content/Signup/Link/Verb">Return to login</translate>
|
||||
</router-link>
|
||||
<button :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit">
|
||||
<translate :translate-context="'Content/Signup/Button.Label/Verb'">Confirm your e-mail address</translate></button>
|
||||
<translate translate-context="Content/Signup/Button.Label/Verb">Confirm your e-mail address</translate></button>
|
||||
</form>
|
||||
<div v-else class="ui positive message">
|
||||
<div class="header"><translate :translate-context="'Content/Signup/Message'">E-mail address confirmed</translate></div>
|
||||
<p><translate :translate-context="'Content/Signup/Paragraph'">You can now use the service without limitations.</translate></p>
|
||||
<div class="header"><translate translate-context="Content/Signup/Message">E-mail address confirmed</translate></div>
|
||||
<p><translate translate-context="Content/Signup/Paragraph">You can now use the service without limitations.</translate></p>
|
||||
<router-link :to="{name: 'login'}">
|
||||
<translate :translate-context="'Content/Signup/Link/Verb'">Proceed to login</translate>
|
||||
<translate translate-context="Content/Signup/Link/Verb">Proceed to login</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
<main class="main pusher" v-title="labels.reset">
|
||||
<section class="ui vertical stripe segment">
|
||||
<div class="ui small text container">
|
||||
<h2><translate :translate-context="'Content/Signup/Title'">Reset your password</translate></h2>
|
||||
<h2><translate translate-context="Content/Signup/Title">Reset your password</translate></h2>
|
||||
<form class="ui form" @submit.prevent="submit()">
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Signup/Card.Title'">Error while asking for a password reset</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Signup/Card.Title">Error while asking for a password reset</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p><translate :translate-context="'Content/Signup/Paragraph'">Use this form to request a password reset. We will send an email to the given address with instructions to reset your password.</translate></p>
|
||||
<p><translate translate-context="Content/Signup/Paragraph">Use this form to request a password reset. We will send an email to the given address with instructions to reset your password.</translate></p>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Signup/Input.Label'">Account's email</translate></label>
|
||||
<label><translate translate-context="Content/Signup/Input.Label">Account's email</translate></label>
|
||||
<input
|
||||
required
|
||||
ref="email"
|
||||
|
@ -23,10 +23,10 @@
|
|||
v-model="email">
|
||||
</div>
|
||||
<router-link :to="{path: '/login'}">
|
||||
<translate :translate-context="'Content/Signup/Link'">Back to login</translate>
|
||||
<translate translate-context="Content/Signup/Link">Back to login</translate>
|
||||
</router-link>
|
||||
<button :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit">
|
||||
<translate :translate-context="'Content/Signup/Button.Label/Verb'">Ask for a password reset</translate></button>
|
||||
<translate translate-context="Content/Signup/Button.Label/Verb">Ask for a password reset</translate></button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
@ -2,34 +2,34 @@
|
|||
<main class="main pusher" v-title="labels.changePassword">
|
||||
<section class="ui vertical stripe segment">
|
||||
<div class="ui small text container">
|
||||
<h2><translate :translate-context="'Content/Signup/Title'">Change your password</translate></h2>
|
||||
<h2><translate translate-context="Content/Signup/Title">Change your password</translate></h2>
|
||||
<form v-if="!success" class="ui form" @submit.prevent="submit()">
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Signup/Card.Title'">Error while changing your password</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Signup/Card.Title">Error while changing your password</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<template v-if="token && uid">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Signup/Input.Label'">New password</translate></label>
|
||||
<label><translate translate-context="Content/Signup/Input.Label">New password</translate></label>
|
||||
<password-input v-model="newPassword" />
|
||||
</div>
|
||||
<router-link :to="{path: '/login'}">
|
||||
<translate :translate-context="'Content/Signup/Link'">Back to login</translate>
|
||||
<translate translate-context="Content/Signup/Link">Back to login</translate>
|
||||
</router-link>
|
||||
<button :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit">
|
||||
<translate :translate-context="'Content/Signup/Button.Label'">Update your password</translate></button>
|
||||
<translate translate-context="Content/Signup/Button.Label">Update your password</translate></button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<p><translate :translate-context="'Content/Signup/Paragraph'">If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes.</translate></p>
|
||||
<p><translate translate-context="Content/Signup/Paragraph">If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes.</translate></p>
|
||||
</template>
|
||||
</form>
|
||||
<div v-else class="ui positive message">
|
||||
<div class="header"><translate :translate-context="'Content/Signup/Card.Title'">Password updated successfully</translate></div>
|
||||
<p><translate :translate-context="'Content/Signup/Card.Paragraph'">Your password has been updated successfully.</translate></p>
|
||||
<div class="header"><translate translate-context="Content/Signup/Card.Title">Password updated successfully</translate></div>
|
||||
<p><translate translate-context="Content/Signup/Card.Paragraph">Your password has been updated successfully.</translate></p>
|
||||
<router-link :to="{name: 'login'}">
|
||||
<translate :translate-context="'Content/Signup/Link/Verb'">Proceed to login</translate>
|
||||
<translate translate-context="Content/Signup/Link/Verb">Proceed to login</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<nav class="ui secondary pointing menu" role="navigation" :aria-label="labels.secondaryMenu">
|
||||
<router-link
|
||||
class="ui item"
|
||||
:to="{name: 'content.libraries.index'}"><translate :translate-context="'Menu/Library/Tab.Link'">Libraries</translate></router-link>
|
||||
:to="{name: 'content.libraries.index'}"><translate translate-context="Menu/Library/Tab.Link">Libraries</translate></router-link>
|
||||
<router-link
|
||||
class="ui item"
|
||||
:to="{name: 'content.libraries.files'}"><translate :translate-context="'Menu/Library/Tab.Link'">Tracks</translate></router-link>
|
||||
:to="{name: 'content.libraries.files'}"><translate translate-context="Menu/Library/Tab.Link">Tracks</translate></router-link>
|
||||
</nav>
|
||||
<router-view :key="$route.fullPath"></router-view>
|
||||
</main>
|
||||
|
|
|
@ -2,22 +2,22 @@
|
|||
<section class="ui vertical aligned stripe segment" v-title="labels.title">
|
||||
<div class="ui text container">
|
||||
<h1>{{ labels.title }}</h1>
|
||||
<p><translate :translate-context="'Content/Library/Paragraph'">There are various ways to grab new content and make it available here.</translate></p>
|
||||
<p><translate translate-context="Content/Library/Paragraph">There are various ways to grab new content and make it available here.</translate></p>
|
||||
<div class="ui segment">
|
||||
<h2><translate :translate-context="'Content/Library/Title/Verb'">Upload audio content</translate></h2>
|
||||
<p><translate :translate-context="'Content/Library/Paragraph'">Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here.</translate></p>
|
||||
<h2><translate translate-context="Content/Library/Title/Verb">Upload audio content</translate></h2>
|
||||
<p><translate translate-context="Content/Library/Paragraph">Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here.</translate></p>
|
||||
<p>
|
||||
<strong><translate :translate-context="'Content/Library/Paragraph'" :translate-params="{quota: defaultQuota}">This instance offers up to %{quota} of storage space for every user.</translate></strong>
|
||||
<strong><translate translate-context="Content/Library/Paragraph" :translate-params="{quota: defaultQuota}">This instance offers up to %{quota} of storage space for every user.</translate></strong>
|
||||
</p>
|
||||
<router-link :to="{name: 'content.libraries.index'}" class="ui green button">
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'">Get started</translate>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb">Get started</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="ui segment">
|
||||
<h2><translate :translate-context="'Content/Library/Title/Verb'">Follow remote libraries</translate></h2>
|
||||
<p><translate :translate-context="'Content/Library/Paragraph'">You can follow libraries from other users to get access to new music. Public libraries can be followed immediatly, while following a private library requires approval from its owner.</translate></p>
|
||||
<h2><translate translate-context="Content/Library/Title/Verb">Follow remote libraries</translate></h2>
|
||||
<p><translate translate-context="Content/Library/Paragraph">You can follow libraries from other users to get access to new music. Public libraries can be followed immediatly, while following a private library requires approval from its owner.</translate></p>
|
||||
<router-link :to="{name: 'content.remote.index'}" class="ui green button">
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'">Get started</translate>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb">Get started</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -37,15 +37,15 @@
|
|||
{{ library.size | humanSize }}
|
||||
</span>
|
||||
<i class="music icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.List item'" :translate-params="{count: library.uploads_count}" :translate-n="library.uploads_count" translate-plural="%{ count } tracks">%{ count } track</translate>
|
||||
<translate translate-context="Content/Library/Card.List item" :translate-params="{count: library.uploads_count}" :translate-n="library.uploads_count" translate-plural="%{ count } tracks">%{ count } track</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui bottom basic attached buttons">
|
||||
<router-link :to="{name: 'content.libraries.detail.upload', params: {id: library.uuid}}" class="ui button">
|
||||
<translate :translate-context="'Content/Library/Card.Button.Label/Verb'">Upload</translate>
|
||||
<translate translate-context="Content/Library/Card.Button.Label/Verb">Upload</translate>
|
||||
</router-link>
|
||||
<router-link :to="{name: 'content.libraries.detail', params: {id: library.uuid}}" exact class="ui button">
|
||||
<translate :translate-context="'Content/Library/Card.Button.Label/Noun'">Details</translate>
|
||||
<translate translate-context="Content/Library/Card.Button.Label/Noun">Details</translate>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,33 +1,33 @@
|
|||
<template>
|
||||
<section class="ui vertical aligned stripe segment">
|
||||
<div v-if="isLoadingLibrary" :class="['ui', {'active': isLoadingLibrary}, 'inverted', 'dimmer']">
|
||||
<div class="ui text loader"><translate :translate-context="'Content/Library/Paragraph'">Loading library data…</translate></div>
|
||||
<div class="ui text loader"><translate translate-context="Content/Library/Paragraph">Loading library data…</translate></div>
|
||||
</div>
|
||||
<detail-area v-else :library="library">
|
||||
<div class="ui top attached tabular menu">
|
||||
<a :class="['item', {active: currentTab === 'follows'}]" @click="currentTab = 'follows'"><translate :translate-context="'Content/Library/Tab.Title'">Followers</translate></a>
|
||||
<a :class="['item', {active: currentTab === 'tracks'}]" @click="currentTab = 'tracks'"><translate :translate-context="'*/*/*'">Tracks</translate></a>
|
||||
<a :class="['item', {active: currentTab === 'edit'}]" @click="currentTab = 'edit'"><translate :translate-context="'*/*/*/Verb'">Edit</translate></a>
|
||||
<a :class="['item', {active: currentTab === 'follows'}]" @click="currentTab = 'follows'"><translate translate-context="Content/Library/Tab.Title">Followers</translate></a>
|
||||
<a :class="['item', {active: currentTab === 'tracks'}]" @click="currentTab = 'tracks'"><translate translate-context="*/*/*">Tracks</translate></a>
|
||||
<a :class="['item', {active: currentTab === 'edit'}]" @click="currentTab = 'edit'"><translate translate-context="*/*/*/Verb">Edit</translate></a>
|
||||
</div>
|
||||
<div :class="['ui', 'bottom', 'attached', 'segment', {hidden: currentTab != 'follows'}]">
|
||||
<div class="ui form">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Library/Title'">Sharing link</translate></label>
|
||||
<p><translate :translate-context="'Content/Library/Paragraph'">Share this link with other users so they can request access to your library.</translate></p>
|
||||
<label><translate translate-context="Content/Library/Title">Sharing link</translate></label>
|
||||
<p><translate translate-context="Content/Library/Paragraph">Share this link with other users so they can request access to your library.</translate></p>
|
||||
<copy-input :value="library.fid" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui hidden divider"></div>
|
||||
<div v-if="isLoadingFollows" :class="['ui', {'active': isLoadingFollows}, 'inverted', 'dimmer']">
|
||||
<div class="ui text loader"><translate :translate-context="'Content/Library/Paragraph'">Loading followers…</translate></div>
|
||||
<div class="ui text loader"><translate translate-context="Content/Library/Paragraph">Loading followers…</translate></div>
|
||||
</div>
|
||||
<table v-else-if="follows && follows.count > 0" class="ui table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><translate :translate-context="'Content/Library/Table.Label'">User</translate></th>
|
||||
<th><translate :translate-context="'Content/Library/Table.Label'">Date</translate></th>
|
||||
<th><translate :translate-context="'Content/Library/Table.Label'">Status</translate></th>
|
||||
<th><translate :translate-context="'Content/Library/Table.Label'">Action</translate></th>
|
||||
<th><translate translate-context="Content/Library/Table.Label">User</translate></th>
|
||||
<th><translate translate-context="Content/Library/Table.Label">Date</translate></th>
|
||||
<th><translate translate-context="Content/Library/Table.Label">Status</translate></th>
|
||||
<th><translate translate-context="Content/Library/Table.Label">Action</translate></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr v-for="follow in follows.results" :key="follow.fid">
|
||||
|
@ -35,27 +35,27 @@
|
|||
<td><human-date :date="follow.creation_date" /></td>
|
||||
<td>
|
||||
<span :class="['ui', 'yellow', 'basic', 'label']" v-if="follow.approved === null">
|
||||
<translate :translate-context="'Content/Library/Table/Short'">Pending approval</translate>
|
||||
<translate translate-context="Content/Library/Table/Short">Pending approval</translate>
|
||||
</span>
|
||||
<span :class="['ui', 'green', 'basic', 'label']" v-else-if="follow.approved === true">
|
||||
<translate :translate-context="'Content/Library/Table/Short'">Accepted</translate>
|
||||
<translate translate-context="Content/Library/Table/Short">Accepted</translate>
|
||||
</span>
|
||||
<span :class="['ui', 'red', 'basic', 'label']" v-else-if="follow.approved === false">
|
||||
<translate :translate-context="'Content/Library/Table/Short'">Rejected</translate>
|
||||
<translate translate-context="Content/Library/Table/Short">Rejected</translate>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<div @click="updateApproved(follow, true)" :class="['ui', 'mini', 'icon', 'labeled', 'green', 'button']" v-if="follow.approved === null || follow.approved === false">
|
||||
<i class="ui check icon"></i> <translate :translate-context="'Content/Library/Button.Label'">Accept</translate>
|
||||
<i class="ui check icon"></i> <translate translate-context="Content/Library/Button.Label">Accept</translate>
|
||||
</div>
|
||||
<div @click="updateApproved(follow, false)" :class="['ui', 'mini', 'icon', 'labeled', 'red', 'button']" v-if="follow.approved === null || follow.approved === true">
|
||||
<i class="ui x icon"></i> <translate :translate-context="'Content/Library/Button.Label'">Reject</translate>
|
||||
<i class="ui x icon"></i> <translate translate-context="Content/Library/Button.Label">Reject</translate>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<p v-else><translate :translate-context="'Content/Library/Paragraph'">Nobody is following this library</translate></p>
|
||||
<p v-else><translate translate-context="Content/Library/Paragraph">Nobody is following this library</translate></p>
|
||||
</div>
|
||||
<div :class="['ui', 'bottom', 'attached', 'segment', {hidden: currentTab != 'tracks'}]">
|
||||
<library-files-table :filters="{library: library.uuid}"></library-files-table>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div>
|
||||
<div class="ui two column row">
|
||||
<div class="column">
|
||||
<h3 class="ui header"><translate :translate-context="'Content/Library/Title'">Current library</translate></h3>
|
||||
<h3 class="ui header"><translate translate-context="Content/Library/Title">Current library</translate></h3>
|
||||
<library-card :library="library" />
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,23 +3,23 @@
|
|||
<div class="ui inline form">
|
||||
<div class="fields">
|
||||
<div class="ui six wide field">
|
||||
<label><translate :translate-context="'Content/Library/Input.Label/Verb'">Search</translate></label>
|
||||
<label><translate translate-context="Content/Library/Input.Label/Verb">Search</translate></label>
|
||||
<form @submit.prevent="search.query = $refs.search.value">
|
||||
<input name="search" ref="search" type="text" :value="search.query" :placeholder="labels.searchPlaceholder" />
|
||||
</form>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Library/Dropdown.Label/Noun'">Import status</translate></label>
|
||||
<label><translate translate-context="Content/Library/Dropdown.Label/Noun">Import status</translate></label>
|
||||
<select class="ui dropdown" @change="addSearchToken('status', $event.target.value)" :value="getTokenValue('status', '')">
|
||||
<option value=""><translate :translate-context="'Content/Library/Dropdown'">All</translate></option>
|
||||
<option value="pending"><translate :translate-context="'Content/Library/Dropdown'">Pending</translate></option>
|
||||
<option value="skipped"><translate :translate-context="'Content/Library/Dropdown'">Skipped</translate></option>
|
||||
<option value="errored"><translate :translate-context="'Content/Library/Dropdown'">Failed</translate></option>
|
||||
<option value="finished"><translate :translate-context="'Content/Library/Dropdown'">Finished</translate></option>
|
||||
<option value=""><translate translate-context="Content/Library/Dropdown">All</translate></option>
|
||||
<option value="pending"><translate translate-context="Content/Library/Dropdown">Pending</translate></option>
|
||||
<option value="skipped"><translate translate-context="Content/Library/Dropdown">Skipped</translate></option>
|
||||
<option value="errored"><translate translate-context="Content/Library/Dropdown">Failed</translate></option>
|
||||
<option value="finished"><translate translate-context="Content/Library/Dropdown">Finished</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Library/Dropdown.Label/Noun'">Ordering</translate></label>
|
||||
<label><translate translate-context="Content/Library/Dropdown.Label/Noun">Ordering</translate></label>
|
||||
<select class="ui dropdown" v-model="ordering">
|
||||
<option v-for="option in orderingOptions" :value="option[0]">
|
||||
{{ sharedLabels.filters[option[1]] }}
|
||||
|
@ -27,10 +27,10 @@
|
|||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Library/Dropdown.Label/Noun'">Ordering direction</translate></label>
|
||||
<label><translate translate-context="Content/Library/Dropdown.Label/Noun">Ordering direction</translate></label>
|
||||
<select class="ui dropdown" v-model="orderingDirection">
|
||||
<option value="+"><translate :translate-context="'Content/Library/Dropdown'">Ascending</translate></option>
|
||||
<option value="-"><translate :translate-context="'Content/Library/Dropdown'">Descending</translate></option>
|
||||
<option value="+"><translate translate-context="Content/Library/Dropdown">Ascending</translate></option>
|
||||
<option value="-"><translate translate-context="Content/Library/Dropdown">Descending</translate></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -52,13 +52,13 @@
|
|||
@refresh="fetchData"
|
||||
:filters="actionFilters">
|
||||
<template slot="header-cells">
|
||||
<th><translate :translate-context="'*/*/*'">Title</translate></th>
|
||||
<th><translate :translate-context="'*/*/*'">Artist</translate></th>
|
||||
<th><translate :translate-context="'*/*/*'">Album</translate></th>
|
||||
<th><translate :translate-context="'*/*/*/Noun'">Upload date</translate></th>
|
||||
<th><translate :translate-context="'*/*/*/Noun'">Import status</translate></th>
|
||||
<th><translate :translate-context="'*/*/*'">Duration</translate></th>
|
||||
<th><translate :translate-context="'*/*/*'">Size</translate></th>
|
||||
<th><translate translate-context="*/*/*">Title</translate></th>
|
||||
<th><translate translate-context="*/*/*">Artist</translate></th>
|
||||
<th><translate translate-context="*/*/*">Album</translate></th>
|
||||
<th><translate translate-context="*/*/*/Noun">Upload date</translate></th>
|
||||
<th><translate translate-context="*/*/*/Noun">Import status</translate></th>
|
||||
<th><translate translate-context="*/*/*">Duration</translate></th>
|
||||
<th><translate translate-context="*/*/*">Size</translate></th>
|
||||
</template>
|
||||
<template slot="row-cells" slot-scope="scope">
|
||||
<template v-if="scope.obj.track">
|
||||
|
@ -90,13 +90,13 @@
|
|||
{{ time.parse(scope.obj.duration) }}
|
||||
</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
<td v-if="scope.obj.size">
|
||||
{{ scope.obj.size | humanSize }}
|
||||
</td>
|
||||
<td v-else>
|
||||
<translate :translate-context="'*/*/*'">N/A</translate>
|
||||
<translate translate-context="*/*/*">N/A</translate>
|
||||
</td>
|
||||
</template>
|
||||
</action-table>
|
||||
|
@ -112,7 +112,7 @@
|
|||
></pagination>
|
||||
|
||||
<span v-if="result && result.results.length > 0">
|
||||
<translate :translate-context="'Content/Library/Paragraph'"
|
||||
<translate translate-context="Content/Library/Paragraph"
|
||||
:translate-params="{start: ((page-1) * paginateBy) + 1, end: ((page-1) * paginateBy) + result.results.length, total: result.count}">
|
||||
Showing results %{ start }-%{ end } on %{ total }
|
||||
</translate>
|
||||
|
|
|
@ -1,43 +1,43 @@
|
|||
<template>
|
||||
<form class="ui form" @submit.prevent="submit">
|
||||
<p v-if="!library"><translate :translate-context="'Content/Library/Paragraph'">Libraries help you organize and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.</translate></p>
|
||||
<p v-if="!library"><translate translate-context="Content/Library/Paragraph">Libraries help you organize and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.</translate></p>
|
||||
<div v-if="errors.length > 0" class="ui negative message">
|
||||
<div class="header"><translate :translate-context="'Content/Library/Error message.Title'">Error</translate></div>
|
||||
<div class="header"><translate translate-context="Content/Library/Error message.Title">Error</translate></div>
|
||||
<ul class="list">
|
||||
<li v-for="error in errors">{{ error }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="required field">
|
||||
<label><translate :translate-context="'Content/Library/Input.Label'">Name</translate></label>
|
||||
<label><translate translate-context="Content/Library/Input.Label">Name</translate></label>
|
||||
<input name="name" v-model="currentName" :placeholder="labels.namePlaceholder" required maxlength="100">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Library/Input.Label'">Description</translate></label>
|
||||
<label><translate translate-context="Content/Library/Input.Label">Description</translate></label>
|
||||
<textarea v-model="currentDescription" :placeholder="labels.descriptionPlaceholder" maxlength="2000"></textarea>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Library/Dropdown.Label'">Visibility</translate></label>
|
||||
<p><translate :translate-context="'Content/Library/Paragraph'">You are able to share your library with other people, regardless of its visibility.</translate></p>
|
||||
<label><translate translate-context="Content/Library/Dropdown.Label">Visibility</translate></label>
|
||||
<p><translate translate-context="Content/Library/Paragraph">You are able to share your library with other people, regardless of its visibility.</translate></p>
|
||||
<select class="ui dropdown" v-model="currentVisibilityLevel">
|
||||
<option :value="c" v-for="c in ['me', 'instance', 'everyone']">{{ labels.visibility[c] }}</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="ui submit button" type="submit">
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'" v-if="library">Update library</translate>
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'" v-else>Create library</translate>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb" v-if="library">Update library</translate>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb" v-else>Create library</translate>
|
||||
</button>
|
||||
<dangerous-button v-if="library" class="right floated basic button" color='red' @confirm="remove()">
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'">Delete</translate>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb">Delete</translate>
|
||||
<p slot="modal-header">
|
||||
<translate :translate-context="'Popup/Library/Title'">Delete this library?</translate>
|
||||
<translate translate-context="Popup/Library/Title">Delete this library?</translate>
|
||||
</p>
|
||||
<p slot="modal-content">
|
||||
<translate :translate-context="'Popup/Library/Paragraph'">
|
||||
<translate translate-context="Popup/Library/Paragraph">
|
||||
The library and all its tracks will be deleted. This can not be undone.
|
||||
</translate>
|
||||
</p>
|
||||
<div slot="modal-confirm">
|
||||
<translate :translate-context="'Popup/Library/Button.Label/Verb'">Delete library</translate>
|
||||
<translate translate-context="Popup/Library/Button.Label/Verb">Delete library</translate>
|
||||
</div>
|
||||
</dangerous-button>
|
||||
</form>
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<template>
|
||||
<section class="ui vertical aligned stripe segment">
|
||||
<div v-if="isLoading" :class="['ui', {'active': isLoading}, 'inverted', 'dimmer']">
|
||||
<div class="ui text loader"><translate :translate-context="'Content/Library/Paragraph'">Loading Libraries…</translate></div>
|
||||
<div class="ui text loader"><translate translate-context="Content/Library/Paragraph">Loading Libraries…</translate></div>
|
||||
</div>
|
||||
<div v-else class="ui text container">
|
||||
<h1 class="ui header"><translate :translate-context="'Content/Library/Title'">My libraries</translate></h1>
|
||||
<h1 class="ui header"><translate translate-context="Content/Library/Title">My libraries</translate></h1>
|
||||
|
||||
<p v-if="libraries.length == 0">
|
||||
<translate :translate-context="'Content/Library/Paragraph'">Looks like you don't have a library, it's time to create one.</translate>
|
||||
<translate translate-context="Content/Library/Paragraph">Looks like you don't have a library, it's time to create one.</translate>
|
||||
</p>
|
||||
<a @click="hiddenForm = !hiddenForm">
|
||||
<i class="plus icon" v-if="hiddenForm" />
|
||||
<i class="minus icon" v-else />
|
||||
<translate :translate-context="'Content/Library/Link/Verb'">Create a new library</translate>
|
||||
<translate translate-context="Content/Library/Link/Verb">Create a new library</translate>
|
||||
</a>
|
||||
<library-form :library="null" v-if="!hiddenForm" @created="libraryCreated" />
|
||||
<div class="ui hidden divider"></div>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<template>
|
||||
<div class="ui segment">
|
||||
<h3 class="ui header"><translate :translate-context="'Content/Library/Title'">Current usage</translate></h3>
|
||||
<h3 class="ui header"><translate translate-context="Content/Library/Title">Current usage</translate></h3>
|
||||
<div v-if="isLoading" :class="['ui', {'active': isLoading}, 'inverted', 'dimmer']">
|
||||
<div class="ui text loader"><translate :translate-context="'Content/Library/Paragraph'">Loading usage data…</translate></div>
|
||||
<div class="ui text loader"><translate translate-context="Content/Library/Paragraph">Loading usage data…</translate></div>
|
||||
</div>
|
||||
<div :class="['ui', {'success': progress < 60}, {'yellow': progress >= 60 && progress < 96}, {'error': progress >= 95}, 'progress']">
|
||||
<div class="bar" :style="{width: `${progress}%`}">
|
||||
<div class="progress">{{ progress }}%</div>
|
||||
</div>
|
||||
<div class="label" v-if="quotaStatus">
|
||||
<translate :translate-context="'Content/Library/Paragraph'" :translate-params="{max: humanSize(quotaStatus.max * 1000 * 1000), current: humanSize(quotaStatus.current * 1000 * 1000)}">%{ current } used on %{ max } allowed</translate>
|
||||
<translate translate-context="Content/Library/Paragraph" :translate-params="{max: humanSize(quotaStatus.max * 1000 * 1000), current: humanSize(quotaStatus.current * 1000 * 1000)}">%{ current } used on %{ max } allowed</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui hidden divider"></div>
|
||||
|
@ -20,24 +20,24 @@
|
|||
{{ humanSize(quotaStatus.pending * 1000 * 1000) }}
|
||||
</div>
|
||||
<div class="label">
|
||||
<translate :translate-context="'Content/Library/Label'">Pending files</translate>
|
||||
<translate translate-context="Content/Library/Label">Pending files</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<router-link
|
||||
class="ui basic blue tiny button"
|
||||
:to="{name: 'content.libraries.files', query: {q: compileTokens([{field: 'status', value: 'pending'}])}}">
|
||||
<translate :translate-context="'Content/Library/Link/Verb'">View files</translate>
|
||||
<translate translate-context="Content/Library/Link/Verb">View files</translate>
|
||||
</router-link>
|
||||
|
||||
<dangerous-button
|
||||
color="grey"
|
||||
class="basic tiny"
|
||||
:action="purgePendingFiles">
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'">Purge</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Library/Title'">Purge pending files?</translate></p>
|
||||
<p slot="modal-content"><translate :translate-context="'Popup/Library/Paragraph'">Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota.</translate></p>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Library/Button.Label'">Purge</translate></div>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb">Purge</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Library/Title">Purge pending files?</translate></p>
|
||||
<p slot="modal-content"><translate translate-context="Popup/Library/Paragraph">Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota.</translate></p>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Library/Button.Label">Purge</translate></div>
|
||||
</dangerous-button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -47,23 +47,23 @@
|
|||
{{ humanSize(quotaStatus.skipped * 1000 * 1000) }}
|
||||
</div>
|
||||
<div class="label">
|
||||
<translate :translate-context="'Content/Library/Label'">Skipped files</translate>
|
||||
<translate translate-context="Content/Library/Label">Skipped files</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<router-link
|
||||
class="ui basic blue tiny button"
|
||||
:to="{name: 'content.libraries.files', query: {q: compileTokens([{field: 'status', value: 'skipped'}])}}">
|
||||
<translate :translate-context="'Content/Library/Link/Verb'">View files</translate>
|
||||
<translate translate-context="Content/Library/Link/Verb">View files</translate>
|
||||
</router-link>
|
||||
<dangerous-button
|
||||
color="grey"
|
||||
class="basic tiny"
|
||||
:action="purgeSkippedFiles">
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'">Purge</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Library/Title'">Purge skipped files?</translate></p>
|
||||
<p slot="modal-content"><translate :translate-context="'Popup/Library/Paragraph'">Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota.</translate></p>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Library/Button.Label'">Purge</translate></div>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb">Purge</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Library/Title">Purge skipped files?</translate></p>
|
||||
<p slot="modal-content"><translate translate-context="Popup/Library/Paragraph">Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota.</translate></p>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Library/Button.Label">Purge</translate></div>
|
||||
</dangerous-button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -73,23 +73,23 @@
|
|||
{{ humanSize(quotaStatus.errored * 1000 * 1000) }}
|
||||
</div>
|
||||
<div class="label">
|
||||
<translate :translate-context="'Content/Library/Label'">Errored files</translate>
|
||||
<translate translate-context="Content/Library/Label">Errored files</translate>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<router-link
|
||||
class="ui basic blue tiny button"
|
||||
:to="{name: 'content.libraries.files', query: {q: compileTokens([{field: 'status', value: 'errored'}])}}">
|
||||
<translate :translate-context="'Content/Library/Link/Verb'">View files</translate>
|
||||
<translate translate-context="Content/Library/Link/Verb">View files</translate>
|
||||
</router-link>
|
||||
<dangerous-button
|
||||
color="grey"
|
||||
class="basic tiny"
|
||||
:action="purgeErroredFiles">
|
||||
<translate :translate-context="'Content/Library/Button.Label/Verb'">Purge</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Library/Title'">Purge errored files?</translate></p>
|
||||
<p slot="modal-content"><translate :translate-context="'Popup/Library/Paragraph'">Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota.</translate></p>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Library/Button.Label'">Purge</translate></div>
|
||||
<translate translate-context="Content/Library/Button.Label/Verb">Purge</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Library/Title">Purge errored files?</translate></p>
|
||||
<p slot="modal-content"><translate translate-context="Popup/Library/Paragraph">Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota.</translate></p>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Library/Button.Label">Purge</translate></div>
|
||||
</dangerous-button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="ui vertical aligned stripe segment">
|
||||
<div v-if="isLoadingLibrary" :class="['ui', {'active': isLoadingLibrary}, 'inverted', 'dimmer']">
|
||||
<div class="ui text loader"><translate :translate-context="'Content/Library/Paragraph'">Loading library data…</translate></div>
|
||||
<div class="ui text loader"><translate translate-context="Content/Library/Paragraph">Loading library data…</translate></div>
|
||||
</div>
|
||||
<detail-area v-else :library="library">
|
||||
<file-upload :default-import-reference="defaultImportReference" :library="library" />
|
||||
|
|
|
@ -24,44 +24,44 @@
|
|||
</div>
|
||||
<div class="meta">
|
||||
<i class="music icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.List item'" :translate-params="{count: library.uploads_count}" :translate-n="library.uploads_count" translate-plural="%{ count } tracks">%{ count } track</translate>
|
||||
<translate translate-context="Content/Library/Card.List item" :translate-params="{count: library.uploads_count}" :translate-n="library.uploads_count" translate-plural="%{ count } tracks">%{ count } track</translate>
|
||||
</div>
|
||||
<div v-if="displayScan && latestScan" class="meta">
|
||||
<template v-if="latestScan.status === 'pending'">
|
||||
<i class="hourglass icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.List item'">Scan pending</translate>
|
||||
<translate translate-context="Content/Library/Card.List item">Scan pending</translate>
|
||||
</template>
|
||||
<template v-if="latestScan.status === 'scanning'">
|
||||
<i class="loading spinner icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.List item'" :translate-params="{progress: scanProgress}">Scanning… (%{ progress }%)</translate>
|
||||
<translate translate-context="Content/Library/Card.List item" :translate-params="{progress: scanProgress}">Scanning… (%{ progress }%)</translate>
|
||||
</template>
|
||||
<template v-else-if="latestScan.status === 'errored'">
|
||||
<i class="red download icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.List item'">Problem during scanning</translate>
|
||||
<translate translate-context="Content/Library/Card.List item">Problem during scanning</translate>
|
||||
</template>
|
||||
<template v-else-if="latestScan.status === 'finished' && latestScan.errored_files === 0">
|
||||
<i class="green download icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.List item'">Scanned</translate>
|
||||
<translate translate-context="Content/Library/Card.List item">Scanned</translate>
|
||||
</template>
|
||||
<template v-else-if="latestScan.status === 'finished' && latestScan.errored_files > 0">
|
||||
<i class="yellow download icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.List item'">Scanned with errors</translate>
|
||||
<translate translate-context="Content/Library/Card.List item">Scanned with errors</translate>
|
||||
</template>
|
||||
<span class="link right floated" @click="showScan = !showScan">
|
||||
<translate :translate-context="'Content/Library/Card.Link'">Details</translate>
|
||||
<translate translate-context="Content/Library/Card.Link">Details</translate>
|
||||
<i v-if="showScan" class="angle down icon" />
|
||||
<i v-else class="angle right icon" />
|
||||
</span>
|
||||
<div v-if="showScan">
|
||||
<template v-if="latestScan.modification_date">
|
||||
<translate :translate-context="'Content/Library/Card.List item/Noun'">Last update:</translate><human-date :date="latestScan.modification_date" /><br />
|
||||
<translate translate-context="Content/Library/Card.List item/Noun">Last update:</translate><human-date :date="latestScan.modification_date" /><br />
|
||||
</template>
|
||||
<translate :translate-context="'Content/Library/Card.List item/Noun'">Failed tracks:</translate> {{ latestScan.errored_files }}
|
||||
<translate translate-context="Content/Library/Card.List item/Noun">Failed tracks:</translate> {{ latestScan.errored_files }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="displayScan && canLaunchScan" class="clearfix">
|
||||
<span class="right floated link" @click="launchScan">
|
||||
<translate :translate-context="'Content/Library/Card.Button.Label/Verb'">Scan now</translate> <i class="paper plane icon" />
|
||||
<translate translate-context="Content/Library/Card.Button.Label/Verb">Scan now</translate> <i class="paper plane icon" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -71,7 +71,7 @@
|
|||
<div v-if="displayCopyFid" class="extra content">
|
||||
<div class="ui form">
|
||||
<div class="field">
|
||||
<label><translate :translate-context="'Content/Library/Title'">Sharing link</translate></label>
|
||||
<label><translate translate-context="Content/Library/Title">Sharing link</translate></label>
|
||||
<copy-input :button-classes="'basic'" :value="library.fid" />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -81,29 +81,29 @@
|
|||
v-if="!library.follow"
|
||||
@click="follow()"
|
||||
:class="['ui', 'green', {'loading': isLoadingFollow}, 'button']">
|
||||
<translate :translate-context="'Content/Library/Card.Button.Label/Verb'">Follow</translate>
|
||||
<translate translate-context="Content/Library/Card.Button.Label/Verb">Follow</translate>
|
||||
</button>
|
||||
<button
|
||||
v-else-if="!library.follow.approved"
|
||||
class="ui disabled button"><i class="hourglass icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.Paragraph'">Follow request pending approval</translate>
|
||||
<translate translate-context="Content/Library/Card.Paragraph">Follow request pending approval</translate>
|
||||
</button>
|
||||
<button
|
||||
v-else-if="!library.follow.approved"
|
||||
class="ui disabled button"><i class="check icon"></i>
|
||||
<translate :translate-context="'Content/Library/Card.Paragraph'">Following</translate>
|
||||
<translate translate-context="Content/Library/Card.Paragraph">Following</translate>
|
||||
</button>
|
||||
<dangerous-button
|
||||
v-else-if="library.follow.approved"
|
||||
color=""
|
||||
:class="['ui', 'button']"
|
||||
:action="unfollow">
|
||||
<translate :translate-context="'Content/Library/Card.Button.Label/Verb'">Unfollow</translate>
|
||||
<p slot="modal-header"><translate :translate-context="'Popup/Library/Title'">Unfollow this library?</translate></p>
|
||||
<translate translate-context="Content/Library/Card.Button.Label/Verb">Unfollow</translate>
|
||||
<p slot="modal-header"><translate translate-context="Popup/Library/Title">Unfollow this library?</translate></p>
|
||||
<div slot="modal-content">
|
||||
<p><translate :translate-context="'Popup/Library/Paragraph'">By unfollowing this library, you loose access to its content.</translate></p>
|
||||
<p><translate translate-context="Popup/Library/Paragraph">By unfollowing this library, you loose access to its content.</translate></p>
|
||||
</div>
|
||||
<div slot="modal-confirm"><translate :translate-context="'Popup/Library/Button.Label'">Unfollow</translate></div>
|
||||
<div slot="modal-confirm"><translate translate-context="Popup/Library/Button.Label">Unfollow</translate></div>
|
||||
</dangerous-button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue