Compare commits
3 Commits
1f9a0ea586
...
9ad5795475
Author | SHA1 | Date |
---|---|---|
Annika Backstrom | 9ad5795475 | |
Annika Backstrom | 06e1e19f72 | |
Annika Backstrom | ee5dd22f5f |
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
"media_path": "/path/to/media",
|
"media_path": "/path/to/media",
|
||||||
"script_path": "/path/to/scripts",
|
"script_path": "/path/to/scripts",
|
||||||
|
"db": "/path/to/jukebox.sqlite3",
|
||||||
|
|
||||||
"play_throttle": 5000,
|
"play_throttle": 5000,
|
||||||
"pause_throttle": 2000,
|
"pause_throttle": 2000,
|
||||||
|
|
|
@ -29,12 +29,21 @@ footer {
|
||||||
margin-top: 2em;
|
margin-top: 2em;
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.media-track {
|
.media-track {
|
||||||
margin: 1ex 0;
|
margin: 1ex 0;
|
||||||
padding: 1ex;
|
padding: 1ex;
|
||||||
border: 1px solid hsl(0, 0%, 88.2%);
|
border: 1px solid hsl(0, 0%, 88.2%);
|
||||||
}
|
}
|
||||||
|
.media-track-highlighted {
|
||||||
|
background-color: hsl(81, 100%, 96.1%);
|
||||||
|
border-color: hsl(118.1, 72%, 58%);
|
||||||
|
border-style: dotted;
|
||||||
|
}
|
||||||
|
.media-track-tagless {
|
||||||
|
background-color: hsl(0, 100%, 95.7%);
|
||||||
|
border-color: hsl(0, 79.5%, 67.5%);
|
||||||
|
border-style: dashed;
|
||||||
|
}
|
||||||
option.unused {
|
option.unused {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
color: red;
|
color: red;
|
||||||
|
|
|
@ -3,14 +3,20 @@
|
||||||
var appData = {
|
var appData = {
|
||||||
tracks: [],
|
tracks: [],
|
||||||
tags: [],
|
tags: [],
|
||||||
|
highlightedTag: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
const MediaTrack = {
|
const MediaTrack = {
|
||||||
props: ['track', 'tags'],
|
props: [
|
||||||
|
'track',
|
||||||
|
'tags',
|
||||||
|
'highlightedTag',
|
||||||
|
],
|
||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
editing: false,
|
editing: false,
|
||||||
saving: false,
|
saving: false,
|
||||||
|
trackForReset: {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -20,9 +26,17 @@
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
edit: function() {
|
edit: function() {
|
||||||
|
if (this.editing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.trackForReset = Object.assign({}, this.track);
|
||||||
this.saving = false;
|
this.saving = false;
|
||||||
this.editing = true;
|
this.editing = true;
|
||||||
},
|
},
|
||||||
|
cancel: function() {
|
||||||
|
this.track = Object.assign({}, this.trackForReset);
|
||||||
|
this.editing = false;
|
||||||
|
},
|
||||||
save: function() {
|
save: function() {
|
||||||
this.saving = true;
|
this.saving = true;
|
||||||
|
|
||||||
|
@ -51,11 +65,21 @@
|
||||||
console.error(error)
|
console.error(error)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
highlightTag: function() {
|
||||||
|
this.$root.highlightedTag = this.track.tag;
|
||||||
|
},
|
||||||
|
highlightNone: function() {
|
||||||
|
this.$root.highlightedTag = null;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="media-track" @click="edit()">
|
<div class="media-track"
|
||||||
|
:class="{ 'media-track-highlighted': track.tag === highlightedTag, 'media-track-tagless': track.tag === '' }"
|
||||||
|
@click="edit()"
|
||||||
|
@mouseover="highlightTag()"
|
||||||
|
@mouseout="highlightNone()">
|
||||||
<template v-if="editing">
|
<template v-if="editing">
|
||||||
<form method="patch" :action="patch_url">
|
<form method="patch" :action="patch_url" @keyup.27="cancel">
|
||||||
<select v-model="track.tag" :disabled="saving">
|
<select v-model="track.tag" :disabled="saving">
|
||||||
<option value=""></option>
|
<option value=""></option>
|
||||||
<option :class="{unused: tag.tag_count == 0}" v-for="tag in tags">
|
<option :class="{unused: tag.tag_count == 0}" v-for="tag in tags">
|
||||||
|
@ -72,7 +96,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
const MediaLibrary = {
|
const MediaLibrary = {
|
||||||
props: ['tracks', 'tags'],
|
props: ['tracks', 'tags', 'highlightedTag'],
|
||||||
components: {
|
components: {
|
||||||
'media-track': MediaTrack,
|
'media-track': MediaTrack,
|
||||||
},
|
},
|
||||||
|
@ -82,6 +106,7 @@
|
||||||
:key="track.uuid"
|
:key="track.uuid"
|
||||||
:track="track"
|
:track="track"
|
||||||
:tags="tags"
|
:tags="tags"
|
||||||
|
:highlightedTag="highlightedTag"
|
||||||
></media-track>
|
></media-track>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<media-library
|
<media-library
|
||||||
v-bind:tracks="tracks"
|
:tracks="tracks"
|
||||||
v-bind:tags="tags"
|
:tags="tags"
|
||||||
|
:highlighted-tag="highlightedTag"
|
||||||
></media-library>
|
></media-library>
|
||||||
<upload-box></upload-box>
|
<upload-box></upload-box>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue