forked from rc/aircox
Compare commits
No commits in common. "14ac22ed96ca84ed917f0493992c5222bdd0151b" and "ccc6ed26fdafb3cde1c53e867fd7b9694742d030" have entirely different histories.
14ac22ed96
...
ccc6ed26fd
|
@ -14,27 +14,15 @@ class EpisodeForm(ChildPageForm):
|
||||||
fields = ChildPageForm.Meta.fields
|
fields = ChildPageForm.Meta.fields
|
||||||
|
|
||||||
|
|
||||||
class EpisodeSoundForm(forms.ModelForm):
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
if "instance" in kwargs:
|
|
||||||
"""Limit available sounds."""
|
|
||||||
episode_sounds = kwargs["instance"].episode.episodesound_set.all()
|
|
||||||
self.fields["sound"].queryset = models.Sound.objects.filter(id__in=[x.sound.id for x in episode_sounds])
|
|
||||||
|
|
||||||
|
|
||||||
EpisodeSoundFormSet = modelformset_factory(
|
EpisodeSoundFormSet = modelformset_factory(
|
||||||
models.EpisodeSound,
|
models.EpisodeSound,
|
||||||
form=EpisodeSoundForm,
|
|
||||||
fields=(
|
fields=(
|
||||||
"id",
|
|
||||||
"position",
|
"position",
|
||||||
"episode",
|
"episode",
|
||||||
"sound",
|
"sound",
|
||||||
"broadcast",
|
"broadcast",
|
||||||
),
|
),
|
||||||
widgets={
|
widgets={
|
||||||
"id": forms.HiddenInput(),
|
|
||||||
"broadcast": forms.CheckboxInput(),
|
"broadcast": forms.CheckboxInput(),
|
||||||
"episode": forms.HiddenInput(),
|
"episode": forms.HiddenInput(),
|
||||||
# "sound": forms.HiddenInput(),
|
# "sound": forms.HiddenInput(),
|
||||||
|
|
|
@ -5,7 +5,7 @@ from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic.base import View
|
from django.views.generic.base import View
|
||||||
|
|
||||||
from aircox.models import Episode, Program, StaticPage, Sound, Track
|
from aircox.models import Episode, Program, StaticPage, Track
|
||||||
from aircox import forms, filters, permissions
|
from aircox import forms, filters, permissions
|
||||||
|
|
||||||
from .mixins import VueFormDataMixin
|
from .mixins import VueFormDataMixin
|
||||||
|
@ -144,14 +144,6 @@ class EpisodeUpdateView(UserPassesTestMixin, VueFormDataMixin, PageUpdateView):
|
||||||
for key in ("soundlist_formset", "tracklist_formset"):
|
for key in ("soundlist_formset", "tracklist_formset"):
|
||||||
formset = kwargs[key]
|
formset = kwargs[key]
|
||||||
kwargs[f"{key}_data"] = self.get_formset_data(formset, {"episode": self.object.id})
|
kwargs[f"{key}_data"] = self.get_formset_data(formset, {"episode": self.object.id})
|
||||||
|
|
||||||
for i, episode_sound in enumerate(kwargs["soundlist_formset_data"]["initials"]):
|
|
||||||
# annotate sound properties for vuejs
|
|
||||||
sound = Sound.objects.get(id=episode_sound["sound"])
|
|
||||||
kwargs["soundlist_formset_data"]["initials"][i]["name"] = sound.name
|
|
||||||
kwargs["soundlist_formset_data"]["initials"][i]["url"] = sound.file.url
|
|
||||||
kwargs["soundlist_formset_data"]["initials"][i]["delete_attr_name"] = f"sounds-{i}-DELETE"
|
|
||||||
|
|
||||||
return super().get_context_data(**kwargs)
|
return super().get_context_data(**kwargs)
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
|
|
27
radiocampus/assets/src/backgroundLoad.js
Normal file
27
radiocampus/assets/src/backgroundLoad.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Enable styling body background while using vue hotreload
|
||||||
|
// Tags with side effect (<script> and <style>) are ignored in client component templates.
|
||||||
|
|
||||||
|
const backgrounds = new Map();
|
||||||
|
backgrounds.set('default', "linear-gradient(#738ef2, white)");
|
||||||
|
backgrounds.set('/', "url(/static/radiocampus/backgrounds/photo-04-20.jpg) no-repeat center center fixed");
|
||||||
|
|
||||||
|
|
||||||
|
export default class BackgroundLoad {
|
||||||
|
constructor () {
|
||||||
|
let url = new URL(document.location)
|
||||||
|
this.path = url.pathname
|
||||||
|
this.update()
|
||||||
|
document.addEventListener("pageLoaded", this.handlePageLoad.bind(this), false)
|
||||||
|
}
|
||||||
|
|
||||||
|
handlePageLoad (e) {
|
||||||
|
this.path = e.detail
|
||||||
|
this.update()
|
||||||
|
}
|
||||||
|
|
||||||
|
update () {
|
||||||
|
let background = backgrounds.get(this.path) || backgrounds.get("default")
|
||||||
|
document.body.style.background = background;
|
||||||
|
document.body.style.backgroundSize = "cover";
|
||||||
|
}
|
||||||
|
}
|
|
@ -108,7 +108,6 @@
|
||||||
|
|
||||||
//! If provided call this function instead of adding an item to rows on "+" button click.
|
//! If provided call this function instead of adding an item to rows on "+" button click.
|
||||||
actionAdd: Function,
|
actionAdd: Function,
|
||||||
actionRemove: Function,
|
|
||||||
|
|
||||||
//! If True, columns can be reordered
|
//! If True, columns can be reordered
|
||||||
columnsOrderable: Boolean,
|
columnsOrderable: Boolean,
|
||||||
|
@ -162,12 +161,14 @@
|
||||||
this.$emit('move', {...event, seŧ: set_})
|
this.$emit('move', {...event, seŧ: set_})
|
||||||
},
|
},
|
||||||
|
|
||||||
removeItem(row, item) {
|
removeItem(row) {
|
||||||
if(this.actionRemove) {
|
const item = this.items[row]
|
||||||
this.actionRemove(row, item);
|
if(item.id) {
|
||||||
return
|
// TODO
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.items.splice(row,1)
|
||||||
}
|
}
|
||||||
this.items.splice(row,1)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
//! Load items into set
|
//! Load items into set
|
||||||
|
|
|
@ -24,9 +24,7 @@
|
||||||
<a-form-set ref="formset" :form-data="formData" :labels="labels"
|
<a-form-set ref="formset" :form-data="formData" :labels="labels"
|
||||||
:initials="initData.items"
|
:initials="initData.items"
|
||||||
order-by="position"
|
order-by="position"
|
||||||
:action-add="actionAdd"
|
:action-add="actionAdd">
|
||||||
:action-remove="actionRemove"
|
|
||||||
>
|
|
||||||
<template v-for="[name,slot] of rowsSlots" :key="slot"
|
<template v-for="[name,slot] of rowsSlots" :key="slot"
|
||||||
v-slot:[slot]="data">
|
v-slot:[slot]="data">
|
||||||
<slot v-if="name != 'row-tail'" :name="name" v-bind="data"/>
|
<slot v-if="name != 'row-tail'" :name="name" v-bind="data"/>
|
||||||
|
@ -36,7 +34,6 @@
|
||||||
<label>{{ item.data.name }}</label><br>
|
<label>{{ item.data.name }}</label><br>
|
||||||
<audio controls :src="item.data.url"/>
|
<audio controls :src="item.data.url"/>
|
||||||
<input type="hidden" :name="inputName" :value="item.data.sound"/>
|
<input type="hidden" :name="inputName" :value="item.data.sound"/>
|
||||||
<input type="checkbox" :name="item.data.delete_attr_name" :id="item.data.delete_attr_name" style="display:none;">
|
|
||||||
</template>
|
</template>
|
||||||
</a-form-set>
|
</a-form-set>
|
||||||
</div>
|
</div>
|
||||||
|
@ -81,12 +78,6 @@ export default {
|
||||||
}
|
}
|
||||||
this.$refs.formset.set.push(data)
|
this.$refs.formset.set.push(data)
|
||||||
},
|
},
|
||||||
|
|
||||||
actionRemove(row, item) {
|
|
||||||
var ckbox = document.getElementById(item.data.delete_attr_name);
|
|
||||||
ckbox.checked = true;
|
|
||||||
ckbox.parentNode.parentNode.style["display"] = "none";
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {createApp} from 'vue'
|
import {createApp} from 'vue'
|
||||||
|
|
||||||
import PageLoad from './pageLoad'
|
import PageLoad from './pageLoad'
|
||||||
|
import BackgroundLoad from './backgroundLoad'
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,2 +0,0 @@
|
||||||
import{A as p}from"./index.js";import"vue";window.App=p;
|
|
||||||
//# sourceMappingURL=public.js.map
|
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"file":"public.js","sources":["../../radiocampus/assets/src/public.js"],"sourcesContent":["import \"./styles/public.scss\"\nimport './index.js'\nimport App from './app.js'\n\nwindow.App = App\n"],"names":["App"],"mappings":"2CAIA,OAAO,IAAMA"}
|
|
Loading…
Reference in New Issue
Block a user