});
}
+function father_tag_links(parent_element, tags) {
+ tags.forEach((tag) => {
+ const a_tag = new_child_to('a', parent_element, tag);
+ a_tag.href = `?needed_tag=${encodeURIComponent(tag)}`;
+ parent_element.appendChild(document.createTextNode(' '));
+ });
+}
+
event_handlers.push(function(data) { // update player state
for (const [id, text] of [
- ["playing_tags", data.title_tags ? `(tags: ${data.title_tags})` : ""],
["a_playing", data.title],
["player_state", data.is_running ? (data.is_playing ? "playing:" : "paused:") : "stopped" + (data.title ? ':' : '')],
["btn_play", data.is_playing ? "pause" : "play"]]) {
- document.getElementById(id).textContent = text; }
+ document.getElementById(id).textContent = text;
+ }
+ const span_tags = document.getElementById("playing_tags");
+ span_tags.innerHTML = "";
+ father_tag_links(span_tags, data.title_tags);
for (const btn of document.getElementsByClassName("btn_if_can_play")) {
- btn.disabled = !data.can_play; }
- document.getElementById("a_playing").href = data.title_digest ? `${PATH_PREFIX_FILE}${data.title_digest}` : PATH_PLAYLIST ; })
+ btn.disabled = !data.can_play;
+ }
+ document.getElementById("a_playing").href = data.title_digest ? `${PATH_PREFIX_FILE}${data.title_digest}` : PATH_PLAYLIST ;
+})
{% block script %}
{% endblock %}
{% for tag in file.tags_showable %}
<tr>
<td class="tag_checkboxes"><input type="checkbox" name="tags" value="{{tag}}" checked{% if not allow_edit %} disabled{% endif %}/></td>
-<td>{{tag}}</td>
+<td><a href="/{{page_names.files}}?needed_tag={{tag|urlencode}}">{{tag}}</a></td>
</tr>
{% endfor %}
{% if allow_edit %}
const PATH_FILES_JSON = "/{{page_names.files_json}}";
const all_tags = {{showable_tags|tojson|safe}};
-var needed_tags = [];
+var needed_tags = {{needed_tags|tojson|safe}};
var filtered_files = [];
function select_tag() {
btn_inject.onclick = function() { player_command(`inject_${file.digest}`) };
btn_inject.disabled = !file.present;
btn_inject.textContent = 'inject';
- new_child_to('td', tr, file.tags_showable.join(", "));
+ father_tag_links(new_child_to('td', tr), file.tags_showable);
const td_link = new_child_to('td', tr);
const a = new_child_to('a', td_link, file.rel_path);
a.href = `${PATH_PREFIX_FILE}${file.digest}`;
conn, self.server.player.current_digest)
if last_sent < self.server.player.last_update:
last_sent = self.server.player.last_update
- title, tags, digest = '', '', ''
+ title, digest, tags = '', '', []
if selected:
- tags = selected.tags_showable.joined
title = str(selected.rel_path)
digest = selected.digest.b64
+ tags = selected.tags_showable.as_str_list
payload['is_running'] = self.server.player.is_running
payload['is_playing'] = self.server.player.is_playing
payload['can_play'] = self.server.player.can_play
def _send_files_index(self) -> None:
with DbConn() as conn:
showable_tags = sorted(list(VideoFile.all_tags_showable(conn)))
- self._send_rendered_template(_NAME_TEMPLATE_FILES,
- {'showable_tags': showable_tags})
+ self._send_rendered_template(_NAME_TEMPLATE_FILES, {
+ 'showable_tags': showable_tags,
+ 'needed_tags': self.params.all_for('needed_tag')})
def _send_files_json(self) -> None:
with DbConn() as conn: