Merge branch 'stable' into develop
This commit is contained in:
commit
b39bd5f349
59
CHANGELOG
59
CHANGELOG
|
@ -10,6 +10,63 @@ This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.
|
||||||
|
|
||||||
.. towncrier
|
.. towncrier
|
||||||
|
|
||||||
|
1.2.2 (2020-02-04)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Upgrade instructions are available at
|
||||||
|
https://docs.funkwhale.audio/admin/upgrading.html
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
|
||||||
|
- Fix an issue where the tracks tab in a library doesn't show any tracks (#1683)
|
||||||
|
- Fix an issue with the embedded player not showing any content (#1675)
|
||||||
|
- Fix broken instance description if it contains a line break #1673
|
||||||
|
|
||||||
|
Dependency Updates:
|
||||||
|
|
||||||
|
Update dependency vue-template-compiler to 2.6.14
|
||||||
|
Update dependency vue to ^2.6.14
|
||||||
|
Update dependency vuex-persistedstate to ^2.7.1
|
||||||
|
Update dependency vuedraggable to ^2.24.3
|
||||||
|
Update dependency vue-lazyload to ^1.3.3
|
||||||
|
Update dependency vue-plyr to ^5.1.3
|
||||||
|
Update dependency vue-upload-component to ^2.8.22
|
||||||
|
Update dependency vue-gettext to ^2.1.12
|
||||||
|
Update dependency showdown to ^1.9.1
|
||||||
|
Update dependency js-logger to ^1.6.1
|
||||||
|
Update dependency register-service-worker to ^1.7.2
|
||||||
|
Update dependency howler to ^2.2.3
|
||||||
|
Update dependency fomantic-ui-css to ^2.8.8
|
||||||
|
Update dependency diff to ^4.0.2
|
||||||
|
Update dependency axios-auth-refresh to ^2.2.8
|
||||||
|
|
||||||
|
Contributors to our Issues:
|
||||||
|
|
||||||
|
- Ciarán Ainsworth
|
||||||
|
- Georg Krause
|
||||||
|
- JuniorJPDJ
|
||||||
|
- Marcos Peña
|
||||||
|
- Mathieu Jourdan
|
||||||
|
- Micha Gläß-Stöcker
|
||||||
|
- Ricardo
|
||||||
|
- petitminion
|
||||||
|
|
||||||
|
Contributors to our Merge Requests:
|
||||||
|
|
||||||
|
- Ciarán Ainsworth
|
||||||
|
- Georg Krause
|
||||||
|
- JuniorJPDJ
|
||||||
|
- Marcos Peña
|
||||||
|
|
||||||
|
Committers
|
||||||
|
|
||||||
|
- Ciarán Ainsworth
|
||||||
|
- Georg Krause
|
||||||
|
- JuniorJPDJ
|
||||||
|
- Keunes
|
||||||
|
- Marcos Peña
|
||||||
|
|
||||||
|
|
||||||
1.2.1 (2022-01-06)
|
1.2.1 (2022-01-06)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@ -47,7 +104,7 @@ nztvar
|
||||||
Upgrade instructions are available at
|
Upgrade instructions are available at
|
||||||
https://docs.funkwhale.audio/admin/upgrading.html
|
https://docs.funkwhale.audio/admin/upgrading.html
|
||||||
|
|
||||||
Due to a bug in our CI Pipeline frontend artifacts are not available at
|
Due to a bug in our CI Pipeline frontend artifacts are not available at
|
||||||
https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/1.2.0/download?job=build_front as they would usually.
|
https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/1.2.0/download?job=build_front as they would usually.
|
||||||
Please use this URL to get your frontend build: https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download
|
Please use this URL to get your frontend build: https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
__version__ = "1.2.1"
|
__version__ = "1.2.2"
|
||||||
__version_info__ = tuple(
|
__version_info__ = tuple(
|
||||||
[
|
[
|
||||||
int(num) if num.isdigit() else num
|
int(num) if num.isdigit() else num
|
||||||
|
|
|
@ -252,7 +252,7 @@ function getURLParams () {
|
||||||
const decode = function (s) { return decodeURIComponent(s.replace(pl, ' ')) }
|
const decode = function (s) { return decodeURIComponent(s.replace(pl, ' ')) }
|
||||||
const query = window.location.search.substring(1)
|
const query = window.location.search.substring(1)
|
||||||
|
|
||||||
while (match === search.exec(query)) { urlParams[decode(match[1])] = decode(match[2]) }
|
while ((match = search.exec(query)) !== null) { urlParams[decode(match[1])] = decode(match[2]) }
|
||||||
return urlParams
|
return urlParams
|
||||||
}
|
}
|
||||||
export default {
|
export default {
|
||||||
|
|
|
@ -39,23 +39,24 @@
|
||||||
>
|
>
|
||||||
<div class="ui stackable grid">
|
<div class="ui stackable grid">
|
||||||
<div class="eight wide column">
|
<div class="eight wide column">
|
||||||
<p v-if="!truncatedDescription">
|
<p v-if="!renderedDescription">
|
||||||
<translate translate-context="Content/Home/Paragraph">
|
<translate translate-context="Content/Home/Paragraph">
|
||||||
No description available.
|
No description available.
|
||||||
</translate>
|
</translate>
|
||||||
</p>
|
</p>
|
||||||
<template v-if="truncatedDescription || rules">
|
<template v-if="renderedDescription || rules">
|
||||||
<div
|
<div
|
||||||
v-if="truncatedDescription"
|
v-if="renderedDescription"
|
||||||
v-html="truncatedDescription"
|
id="renderedDescription"
|
||||||
|
v-html="renderedDescription"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
v-if="truncatedDescription"
|
v-if="renderedDescription"
|
||||||
class="ui hidden divider"
|
class="ui hidden divider"
|
||||||
/>
|
/>
|
||||||
<div class="ui relaxed list">
|
<div class="ui relaxed list">
|
||||||
<div
|
<div
|
||||||
v-if="truncatedDescription"
|
v-if="renderedDescription"
|
||||||
class="item"
|
class="item"
|
||||||
>
|
>
|
||||||
<i class="arrow right icon" />
|
<i class="arrow right icon" />
|
||||||
|
@ -324,7 +325,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import $ from 'jquery'
|
|
||||||
import _ from '@/lodash'
|
import _ from '@/lodash'
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import showdown from 'showdown'
|
import showdown from 'showdown'
|
||||||
|
@ -372,22 +372,12 @@ export default {
|
||||||
rules () {
|
rules () {
|
||||||
return _.get(this.nodeinfo, 'metadata.rules')
|
return _.get(this.nodeinfo, 'metadata.rules')
|
||||||
},
|
},
|
||||||
truncatedDescription () {
|
renderedDescription () {
|
||||||
if (!this.longDescription) {
|
if (!this.longDescription) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const doc = this.markdown.makeHtml(this.longDescription)
|
const doc = this.markdown.makeHtml(this.longDescription)
|
||||||
const nodes = $.parseHTML(doc)
|
return doc
|
||||||
const excerptParts = []
|
|
||||||
let handled = 0
|
|
||||||
nodes.forEach((n) => {
|
|
||||||
const content = n.innerHTML || n.nodeValue
|
|
||||||
if (handled < this.excerptLength && content.trim()) {
|
|
||||||
excerptParts.push(n)
|
|
||||||
handled += 1
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return excerptParts.map((p) => { return p.outerHTML }).join('')
|
|
||||||
},
|
},
|
||||||
stats () {
|
stats () {
|
||||||
const data = {
|
const data = {
|
||||||
|
|
|
@ -123,11 +123,6 @@ export default {
|
||||||
artist: this.$pgettext('*/*/*/Noun', 'Artist')
|
artist: this.$pgettext('*/*/*/Noun', 'Artist')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
updatePage: function (page) {
|
|
||||||
this.$emit('page-changed', page)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,8 +5,9 @@
|
||||||
v-if="search"
|
v-if="search"
|
||||||
v-model="query"
|
v-model="query"
|
||||||
@search="
|
@search="
|
||||||
|
currentPage = 1;
|
||||||
additionalTracks = [];
|
additionalTracks = [];
|
||||||
fetchData();
|
fetchData('tracks/');
|
||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
@ -106,10 +107,10 @@
|
||||||
class="ui center aligned basic segment desktop-and-up"
|
class="ui center aligned basic segment desktop-and-up"
|
||||||
>
|
>
|
||||||
<pagination
|
<pagination
|
||||||
:total="total"
|
:total="totalTracks"
|
||||||
:current="page"
|
:current=" tracks.length > 0 ? page : {currentPage}"
|
||||||
:paginate-by="paginateBy"
|
:paginate-by="paginateBy"
|
||||||
v-on="$listeners"
|
@page-changed="updatePage"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -140,15 +141,16 @@
|
||||||
:is-podcast="isPodcast"
|
:is-podcast="isPodcast"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
v-if="paginateResults"
|
v-if="paginateResults && totalTracks > paginateBy"
|
||||||
class="ui center aligned basic segment tablet-and-below"
|
class="ui center aligned basic segment tablet-and-below"
|
||||||
>
|
>
|
||||||
<pagination
|
<pagination
|
||||||
v-if="paginateResults"
|
v-if="paginateResults && totalTracks > paginateBy"
|
||||||
:total="total"
|
:paginate-by="paginateBy"
|
||||||
:current="page"
|
:total="totalTracks"
|
||||||
|
:current="tracks.length > 0 ? page : {currentPage}"
|
||||||
:compact="true"
|
:compact="true"
|
||||||
v-on="$listeners"
|
@page-changed="updatePage"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -194,10 +196,11 @@ export default {
|
||||||
fetchDataUrl: this.nextUrl,
|
fetchDataUrl: this.nextUrl,
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
additionalTracks: [],
|
additionalTracks: [],
|
||||||
query: ''
|
query: '',
|
||||||
|
totalTracks: this.total,
|
||||||
|
currentPage: this.page
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
allTracks () {
|
allTracks () {
|
||||||
return (this.tracks || []).concat(this.additionalTracks)
|
return (this.tracks || []).concat(this.additionalTracks)
|
||||||
|
@ -212,7 +215,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
if (!this.tracks) {
|
if (this.tracks.length === 0) {
|
||||||
this.fetchData('tracks/')
|
this.fetchData('tracks/')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -224,15 +227,15 @@ export default {
|
||||||
this.isLoading = true
|
this.isLoading = true
|
||||||
const self = this
|
const self = this
|
||||||
const params = _.clone(this.filters)
|
const params = _.clone(this.filters)
|
||||||
const tracksPromise = axios.get(url, { params: params })
|
params.page_size = this.paginateBy
|
||||||
params.page_size = this.limit
|
params.page = this.currentPage
|
||||||
params.page = this.page
|
|
||||||
params.include_channels = true
|
params.include_channels = true
|
||||||
|
params.q = this.query
|
||||||
|
const tracksPromise = await axios.get(url, { params: params })
|
||||||
try {
|
try {
|
||||||
await tracksPromise
|
self.fetchDataUrl = tracksPromise.data.next
|
||||||
self.nextPage = tracksPromise.data.next
|
self.additionalTracks = tracksPromise.data.results
|
||||||
self.objects = tracksPromise.data.results
|
self.totalTracks = tracksPromise.data.count
|
||||||
self.count = tracksPromise.data.count
|
|
||||||
self.$emit('fetched', tracksPromise.data)
|
self.$emit('fetched', tracksPromise.data)
|
||||||
self.isLoading = false
|
self.isLoading = false
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -241,7 +244,12 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updatePage: function (page) {
|
updatePage: function (page) {
|
||||||
this.$emit('page-changed', page)
|
if (this.tracks.length === 0) {
|
||||||
|
this.currentPage = page
|
||||||
|
this.fetchData('tracks/')
|
||||||
|
} else {
|
||||||
|
this.$emit('page-changed', page)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,3 +31,18 @@
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#renderedDescription {
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 5;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#renderedDescription p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#renderedDescription *:not(:first-child) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ export default {
|
||||||
TrackTable
|
TrackTable
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
object: { type: String, required: true },
|
object: { type: [Object, String], required: true },
|
||||||
isOwner: { type: Boolean, required: true }
|
isOwner: { type: Boolean, required: true }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue