Files
Cloud-CMS/views/playlist-form-add.twig
Matt Batchelder 05ce0da296 Initial Upload
2025-12-02 10:32:59 -05:00

216 lines
12 KiB
Twig
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{#
/**
* Copyright (C) 2022 Xibo Signage Ltd
*
* Xibo - Digital Signage - http://www.xibo.org.uk
*
* This file is part of Xibo.
*
* Xibo is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* Xibo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
*/
#}
{% extends "form-base.twig" %}
{% import "forms.twig" as forms %}
{% block formTitle %}
{% trans "Add Playlist" %}
{% endblock %}
{% block formButtons %}
{% trans "Cancel" %}, XiboDialogClose()
{% trans "Save" %}, $("#playlistAddForm").submit()
{% endblock %}
{% block callBack %}playlistFormOpen{% endblock %}
{% block formFieldActions %}
[{
"field": "isDynamic",
"trigger": "init",
"value": false,
"operation": "is:checked",
"actions": {
".dynamic-message": { "display": "none" },
".static-message": { "display": "" }
}
},{
"field": "isDynamic",
"trigger": "change",
"value": false,
"operation": "is:checked",
"actions": {
".dynamic-message": { "display": "none" },
".static-message": { "display": "" }
}
},{
"field": "isDynamic",
"trigger": "init",
"value": true,
"operation": "is:checked",
"actions": {
".dynamic-message": { "display": "" },
".static-message": { "display": "none" }
}
},{
"field": "isDynamic",
"trigger": "change",
"value": true,
"operation": "is:checked",
"actions": {
".dynamic-message": { "display": "" },
".static-message": { "display": "none" }
}
}]
{% endblock %}
{% block formHtml %}
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item"><a class="nav-link active" href="#general" role="tab" data-toggle="tab"><span>{% trans "General" %}</span></a></li>
<li class="nav-item"><a class="nav-link" href="#populate" role="tab" data-toggle="tab"><span>{% trans "Filter" %}</span></a></li>
</ul>
<form id="playlistAddForm" class="XiboForm form-horizontal playlistForm" method="post" action="{{ url_for("playlist.add") }}" data-gettag="{{ url_for("tag.getByName") }}">
<div class="tab-content">
<div class="tab-pane active" id="general">
{% if currentUser.featureEnabled('folder.view') %}
<div class="form-group row">
<label class="col-sm-2 control-label">{% trans "Folder" %}</label>
<div class="col-sm-10">
<button type="button" class="btn btn-info" id="select-folder-button" data-toggle="modal" data-target="#folder-tree-form-modal">{% trans "Select Folder" %}</button>
<span id="selectedFormFolder"></span>
</div>
</div>
{{ forms.hidden('folderId') }}
{% endif %}
{% set title %}{% trans "Name" %}{% endset %}
{% set helpText %}{% trans "The Name of the Playlist - (1 - 50 characters)" %}{% endset %}
{{ forms.input("name", title, "", helpText) }}
{% if currentUser.featureEnabled("tag.tagging") %}
{% set title %}{% trans "Tags" %}{% endset %}
{% set helpText %}{% trans "Tags for this Playlist - Comma separated string of Tags or Tag|Value format. If you choose a Tag that has associated values, they will be shown for selection below." %}{% endset %}
{{ forms.inputWithTags("tags", title, "", helpText, 'tags-with-value') }}
<p id="loadingValues" style="margin-left: 17%"></p>
{% set title %}{% trans "Tag value" %}{% endset %}
{{ forms.dropdown("tagValue", "single", title, "", options, "key", "value") }}
<div id="tagValueContainer">
{% set title %}{% trans "Tag value" %}{% endset %}
{% set helpText %}{% trans "Please provide the value for this Tag and confirm by pressing enter on your keyboard." %}{% endset %}
{{ forms.input("tagValueInput", title, "", helpText) }}
</div>
<div id="tagValueRequired" class="alert alert-info">
<p>{% trans "This tag requires a set value, please select one from the Tag value dropdown or provide Tag value in the dedicated field." %}</p>
</div>
{% endif %}
{% set title %}{% trans "Dynamic?" %}{% endset %}
{% set helpText %}{% trans "Is the Playlist to have Library media assignments managed automatically by the CMS based on filter criteria? Set a filter on the next tab." %}{% endset %}
{{ forms.checkbox("isDynamic", title, 0, helpText) }}
{% set title %}{% trans "Enable Playlist Stats Collection?" %}{% endset %}
{% set helpText %}{% trans "Enable the collection of Proof of Play statistics for this Playlist. Ensure that Enable Stats Collection is set to On in the Display Settings." %}{% endset %}
{% set message %}{% trans "If you want to prepopulate your Playlist with Media using a search, then you can do so on the filter tab. Leave the Dynamic checkbox unticked to make it a one-time assignment." %}{% endset %}
{{ forms.alert(message, "info") }}
{% set offOption %}{% trans "Off" %}{% endset %}
{% set onOption %}{% trans "On" %}{% endset %}
{% set inheritOption %}{% trans "Inherit" %}{% endset %}
{% set options = [
{ id: "Off", value: offOption },
{ id: "On", value: onOption },
{ id: "Inherit", value: inheritOption }
] %}
{{ forms.dropdown("enableStat", "single", title, theme.getSetting("PLAYLIST_STATS_ENABLED_DEFAULT"), options, "id", "value", helpText) }}
</div>
<div class="tab-pane" id="populate">
<div class="dynamic-message">
{% set message = "Populate with Library Media matching the criteria below and automatically maintain the Playlist."|trans %}
{{ forms.message(message) }}
</div>
<div class="static-message">
{% set message = "Populate with Library Media matching the criteria below. This is a one time assignment and is not automatically maintained."|trans %}
{{ forms.message(message) }}
</div>
<div class="widget">
<div class="widget-title">{% trans "Library Media" %}</div>
<div class="widget-body">
<div class="FilterDiv" id="Filter">
{% set title %}{% trans "Name filter" %}{% endset %}
{{ forms.inputWithLogicalOperator("filterMediaName", title) }}
{% if currentUser.featureEnabled("tag.tagging") %}
{% set title %}{% trans "Tag filter" %}{% endset %}
{% set exactTagTitle %}{% trans "Exact match?" %}{% endset %}
{% set logicalOperatorTitle %}{% trans "When filtering by multiple Tags, which logical operator should be used?" %}{% endset %}
{% set helpText %}{% trans "A comma separated set of tags to match against tags on library media." %}{% endset %}
{{ forms.inputWithTags("filterMediaTag", title, "", helpText, "", null, null, "exactTags", exactTagTitle, logicalOperatorTitle) }}
{% endif %}
{% if currentUser.featureEnabled("folder.view") %}
{% set title %}{% trans "Folder Filter" %}{% endset %}
{% set helpText %}{% trans "Select a folder to filter the media items." %}{% endset %}
{% set attributes = [
{ name: "data-width", value: "100%" },
{ name: "data-search-url", value: url_for("folders.search") },
{ name: "data-filter-options", value: '{"gridView":1}' },
{ name: "data-search-term", value: "folderName" },
{ name: "data-id-property", value: "folderId" },
{ name: "data-text-property", value: "text" },
{ name: "data-initial-key", value: "folderId" },
{ name: "data-allow-clear", value: "true" },
{ name: "data-placeholder--id", value: null },
{ name: "data-placeholder--value", value: "" }
] %}
{{ forms.dropdown("filterFolderId", "single", title, "", null, "", "", helpText, "pagedSelect", "", "", "", attributes) }}
{% endif %}
{% set title %}{% trans "Max number of Items" %}{% endset %}
{% set helpText %}{% trans "The upper limit on number of Media items that can be dynamically assigned to this Playlist" %}{% endset %}
{{ forms.number("maxNumberOfItems", title, settings.DEFAULT_DYNAMIC_PLAYLIST_MAXNUMBER, helpText, 'dynamic-message', '', '', settings.DEFAULT_DYNAMIC_PLAYLIST_MAXNUMBER_LIMIT) }}
</div>
<div class="XiboData card pt-3">
<table id="playlistLibraryMedia" class="table table-striped">
<thead>
<tr>
<th>{% trans "ID" %}</th>
<th>{% trans "Name" %}</th>
<th>{% trans "Type" %}</th>
{% if currentUser.featureEnabled("tag.tagging") %}<th>{% trans "Tags" %}</th>{% endif %}
<th>{% trans "Duration" %}</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
{% endblock %}