26
26
{% if layout.backgroundImageId == 0 %}
27
27
{% set backgroundCss = layout.backgroundColor %}
29
{% set backgroundCss %}url('{{ urlFor("layout.download.background", {id: layout.layoutId}) }}?preview=1&width={{ width }}&height={{ height }}&proportional=0&layoutBackgroundId={{ layout.backgroundImageId }}') top center no-repeat; background-color: {{ layout.backgroundColor }}{% endset %}
29
{% set backgroundCss %}url('{{ urlFor("library.download", {id: layout.backgroundImageId}) }}?preview=1&width={{ width }}&height={{ height }}') top center no-repeat; background-color: {{ layout.backgroundColor }}{% endset %}
33
<div class="layout-toolbox row">
34
<div class="col-md-12">
35
<div class="panel bttm-fix with-nav-tabs panel-primary">
36
<div class="panel-heading">
37
<ul class="nav nav-tabs">
38
<li class="active tab-design">
39
<a class="text-center" id="designer-tab" href="#tab1primary" data-toggle="tab"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> {% trans "Designer" %}</a>
41
<li class="tab-design">
42
<a class="text-center" id="action-tab" href="#tab2primary" data-toggle="tab"><i class="fa fa-bell" aria-hidden="true"></i> {% trans "Actions" %}</a>
44
<div class="pull-right">
45
<span class="text-center" data-toggle="tooltip" data-placement="bottom" data-title="{% trans "Layout Duration: Duration may change depending on the exact number of items in ticker/twitter media items." %}">
46
<i class="fa fa-clock-o" aria-hidden="true"></i>
47
<span id="layout-duration" class="label label-success big-duration"></span></span>
48
<span>| <b>Currently Editing</b></span>
49
<select id="layoutJumpList" data-live-search="true" data-width="auto">
50
{% for item in layouts %}
51
<option value="{{ urlFor("layout.designer", {id: item.layoutId}) }}"{% if item.layoutId == layout.layoutId %} selected{% endif %}>{{ item.layout }}</option>
57
<div class="panel-body">
58
<div class="tab-content">
59
<div class="tab-pane no-pad fade in active" id="tab1primary">
60
<div class="col-md-3 text-center">
62
<div class="btn-group btn-group-justified" role="group" aria-label="...">
63
<div class="btn-group" role="group">
64
<a class="XiboFormButton btn btn-default btn-sm" role="button" href="{{ urlFor("layout.edit.form", {id: layout.layoutId}) }}" title="{% trans "Edit the Layout Properties" %}"><span><i class="fa fa-picture-o" aria-hidden="true"></i> {% trans "Background" %}</span></a>
66
<div class="btn-group" role="group">
67
<a class="btn btn-info btn-sm" id="regionAddButton" role="button" href="{{ urlFor("region.add", {id: layout.layoutId}) }}"><span><i class="fa fa-plus" aria-hidden="true"></i> {% trans "Region" %}</span></a>
72
<div class="col-md-2 text-center">
73
{% if currentUser.routeViewable("/user") %}
74
<div class="designer-control-panel-checkbox override-layout">
75
<input type="checkbox" class="switch-check-box" name="lockPosition" data-size="small" data-off-color="danger" data-on-color="success" data-label-width="100" data-label-text="{% trans "Lock Positions" %}" {% if currentUser.getOptionValue("lockPosition", "false") == "true" %}checked="checked"{% endif %}
76
data-on-text="{% trans "On" %}" data-off-text="{% trans "Off" %}"/>
80
<div class="col-md-2 text-center">
81
{% if currentUser.routeViewable("/user") %}
82
<div class="designer-control-panel-checkbox override-layout">
83
<input type="checkbox" data-size="small" data-off-color="danger" data-on-color="success" class="switch-check-box" data-label-text="{% trans "Hide Controls" %}" data-label-width="100" name="hideControls" {% if currentUser.getOptionValue("hideControls", "false") == "true" %}checked="checked"{% endif %}
84
data-on-text="{% trans "On" %}" data-off-text="{% trans "Off" %}"/>
88
<div class="col-md-2 text-center">
89
<div class="btn-group btn-group-justified" role="group" aria-label="...">
90
<div class="btn-group" role="group">
92
<a class="btn btn-default btn-sm" data-toggle="tooltip" data-placement="bottom" title="{% trans "Decrease the canvas size" %}" role="button" href="{{ urlFor("layout.designer", {id: layout.layoutId}) }}?zoom={{ zoom - 0.3 }}" ><span><i class="fa fa-search-minus" aria-hidden="true"></i></span> </a>
94
<div class="btn-group" role="group">
96
<a class="btn btn-default btn-sm" data-toggle="tooltip" data-placement="bottom" title="{% trans "Increase the canvas size" %}" role="button" href="{{ urlFor("layout.designer", {id: layout.layoutId}) }}?zoom={{ zoom + 0.3 }}"><span><i class="fa fa-search-plus" aria-hidden="true"></i></span></a>
98
<div class="btn-group" role="group">
99
<button id="saveDesignerSize" data-toggle="tooltip" data-placement="bottom" title="{% trans "Save canvas size as default" %}" class="btn btn-success btn-sm " role="button" data-designer-size="{{ zoom }}">
100
<i class="fa fa-floppy-o" aria-hidden="true"></i></button>
105
<div class="col-md-3 text-center">
106
<div class="btn-group" role="group" aria-label="...">
107
<div class="btn-group" role="group">
108
<button id="layout-revert" class="btn btn-warning btn-sm disabled btn-block">
109
<i class="fa fa-undo" aria-hidden="true"></i> {% trans "Undo" %}</button>
111
<div class="btn-group" role="group">
112
<button id="layout-save-all" class="btn btn-success btn-sm disabled btn-block">
113
<i class="fa fa-floppy-o" aria-hidden="true"></i> {% trans "Save Region Positions" %}
120
<div class="tab-pane no-pad fade" id="tab2primary">
121
<div class="col-md-6">
122
<div class="btn-group btn-group-justified" role="group" aria-label="...">
123
<div class="btn-group" role="group">
124
<a class="btn btn-success btn-sm" role="button" href="{{ urlFor("layout.preview", {id: layout.layoutId}) }}" target="_blank"><span><i class="fa fa-eye" aria-hidden="true"></i> {% trans "Preview Layout" %}</span></a>
126
<div class="btn-group" role="group">
127
<a class="XiboFormButton btn btn-info btn-sm" id="schedule-btn" role="button" href="{{ urlFor("schedule.now.form", {id: layout.campaignId, from: "Campaign"}) }}"><span><i class="fa fa-clock-o" aria-hidden="true"></i> {% trans "Schedule Now" %}</span></a>
129
<div class="btn-group" role="group">
130
<a class="XiboFormButton btn btn-warning btn-sm" role="button" href="{{ urlFor("template.from.layout.form", {id: layout.layoutId}) }}"><span><i class="fa fa-floppy-o" aria-hidden="true"></i> {% trans "Save Template" %}</span></a>
132
{% if layout.schemaVersion < 2 %}
133
<div class="btn-group" role="group">
134
<a class="XiboFormButton btn btn-warning btn-sm" role="button" href="{{ urlFor("layout.upgrade.form", {id: layout.layoutId}) }}"><span><i class="fa fa-floppy-o" aria-hidden="true"></i> {% trans "Upgrade Layout" %}</span></a>
139
<div class="col-md-6">
141
<div class="alert no-pad alert-info text-right">{% trans "Editing a Template will only affect future Layouts." %}</div>
143
<div id="layout-status" class="alert no-pad text-center" style="margin-bottom: 0px;"></div>
33
<div class="col-sm-12 text-center">
34
<h4>{% trans "Layout Design" %} - {{ layout.layout }}</h4>
155
<div class="col-md-12">
156
<div id="layout" zoom="{{ zoom }}" tip_scale="1" designer_scale="{{ designerScale }}" class="layout center-block" layoutid="{{ layout.layoutId }}" data-background-color="{{ layout.backgroundColor }}" data-status-url="{{ urlFor("layout.status", {id: layout.layoutId}) }}" data-position-all-url="{{ urlFor("region.position.all", {id: layout.layoutId}) }}" style="position:relative; width:{{ width }}px; height:{{ height }}px; background:{{ backgroundCss }};">
38
<div class="col-sm-2">
40
<div class="col-sm-12">
41
<div id="layout-status" class="alert"></div>
45
<div class="col-sm-12">
46
<p data-toggle="tooltip" data-title="{% trans "Duration may change depending on the exact number of items in ticker/twitter media items." %}">{% trans "Layout Duration" %} <span id="layout-duration"></span></p>
50
<div class="col-sm-12 layoutJumpListContainer">
51
<select id="layoutJumpList" data-live-search="true">
52
{% for item in layouts %}
53
<option value="{{ urlFor("layout.designer", {id: item.layoutId}) }}"{% if item.layoutId == layout.layoutId %} selected{% endif %}>{{ item.layout }}</option>
59
<div class="col-sm-12 designer-control-panel">
60
<a class="XiboFormButton btn btn-default btn-block" href="{{ urlFor("layout.edit.form", {id: layout.layoutId}) }}" title="{% trans "Edit the Layout Properties" %}"><span>{% trans "Background / Properties" %}</span></a>
61
<a class="btn btn-default btn-block" href="{{ urlFor("layout.preview", {id: layout.layoutId}) }}" target="_blank"><span>{% trans "Preview Layout" %}</span></a>
62
<a class="XiboFormButton btn btn-default btn-block" href="{{ urlFor("schedule.now.form", {id: layout.campaignId, from: "Campaign"}) }}"><span>{% trans "Schedule Now" %}</span></a>
63
<a class="XiboFormButton btn btn-default btn-block" href="{{ urlFor("template.from.layout.form", {id: layout.layoutId}) }}"><span>{% trans "Save Template" %}</span></a>
64
{% if layout.schemaVersion < 2 %}
65
<a class="XiboFormButton btn btn-default btn-block" href="{{ urlFor("layout.upgrade.form", {id: layout.layoutId}) }}"><span>{% trans "Upgrade Layout" %}</span></a>
71
<div class="col-sm-12">
72
<h4>{% trans "Regions" %}</h4>
76
<div class="col-sm-12 designer-control-panel">
77
<a class="btn btn-default btn-block" id="regionAddButton" href="{{ urlFor("region.add", {id: layout.layoutId}) }}"><span>{% trans "Add Region" %}</span></a>
78
<button id="layout-save-all" class="btn btn-default btn-block disabled">{% trans "Save Positions" %}</button>
79
<button id="layout-revert" class="btn btn-default btn-block disabled">{% trans "Undo" %}</button>
80
<div class="designer-control-panel-checkbox"><input type="checkbox" class="switch-check-box" name="lockPosition" {% if currentUser.getOptionValue("lockPosition", "false") == "true" %}checked="checked"{% endif %} data-on-text="{% trans "On" %}" data-off-text="{% trans "Off" %}" /> {% trans "Lock Positions" %}</div>
81
<div class="designer-control-panel-checkbox"><input type="checkbox" class="switch-check-box" name="hideControls" {% if currentUser.getOptionValue("hideControls", "false") == "true" %}checked="checked"{% endif %} data-on-text="{% trans "On" %}" data-off-text="{% trans "Off" %}" /> {% trans "Hide Controls" %}</div>
85
<div class="col-sm-12">
86
<h4>{% trans "Designer Size" %}</h4>
90
<div class="col-sm-6 designer-control-panel">
91
<a class="btn btn-default btn-block" href="{{ urlFor("layout.designer", {id: layout.layoutId}) }}?zoom={{ zoom + 0.3 }}"><span>{% trans "+" %}</span></a>
93
<div class="col-sm-6 designer-control-panel">
94
<a class="btn btn-default btn-block" href="{{ urlFor("layout.designer", {id: layout.layoutId}) }}?zoom={{ zoom - 0.3 }}"><span>{% trans "-" %}</span></a>
98
<div class="col-sm-12 designer-control-panel">
99
<button id="saveDesignerSize" class="btn btn-default btn-block" data-designer-size="{{ zoom }}">{% trans "Save as Default Size" %}</button>
103
<div class="col-sm-10">
107
designer_scale="{{ designerScale }}"
109
layoutid="{{ layout.layoutId }}"
110
data-background-color="{{ layout.backgroundColor }}"
111
data-status-url="{{ urlFor("layout.status", {id: layout.layoutId}) }}"
112
data-position-all-url="{{ urlFor("region.position.all", {id: layout.layoutId}) }}"
113
style="position:relative; width:{{ width }}px; height:{{ height }}px; background:{{ backgroundCss }};">
158
115
{% for region in layout.regions %}
159
116
{% set regionWidth = region.width * designerScale %}
176
133
{% set previewCss = "" %}
179
<div id="region_{{ region.regionId }}" regionEnabled="{{ currentUser.checkEditable(region) }}" regionid="{{ region.regionId }}" layoutid="{{ layout.layoutId }}" zindex="{{ region.zIndex }}" tip_scale="1" designer_scale="{{ designerScale }}" width="{{ region.width }}" height="{{ region.height }}" href="{{ urlFor("region.timeline.form", {id: region.regionId}) }}" {% if currentUser.checkEditable(region) %}ondblclick="XiboFormRender($(this))"{% endif %} class="{{ disabledCss }} {{ previewCss }}" data-preview-url="{{ urlFor("region.preview", {id: region.regionId}) }}" style="position:absolute; width:{{ regionWidth }}px; height:{{ regionHeight }}px; top: {{ regionTop }}px; left:{{ regionLeft }}px; z-index: {{ region.zIndex }};">
136
<div id="region_{{ region.regionId }}"
137
regionEnabled="{{ currentUser.checkEditable(region) }}"
138
regionid="{{ region.regionId }}"
139
layoutid="{{ layout.layoutId }}"
140
zindex="{{ region.zIndex }}"
142
designer_scale="{{ designerScale }}"
143
width="{{ region.width }}"
144
height="{{ region.height }}"
145
href="{{ urlFor("region.timeline.form", {id: region.regionId}) }}"
146
{% if currentUser.checkEditable(region) %}ondblclick="XiboFormRender($(this).attr('href'))"{% endif %}
147
class="{{ disabledCss }} {{ previewCss }}"
148
data-preview-url="{{ urlFor("region.preview", {id: region.regionId}) }}"
149
style="position:absolute; width:{{ regionWidth }}px; height:{{ regionHeight }}px; top: {{ regionTop }}px; left:{{ regionLeft }}px; z-index: {{ region.zIndex }};">
180
150
<div class="regionTransparency {{ transparencyCss }}" style="width:100%; height:100%;"></div>
182
152
{% if currentUser.checkEditable(region) %}
183
153
<div class="btn-group regionInfo pull-right">
184
154
<button class="btn dropdown-toggle" data-toggle="dropdown">
185
<span class="region-tip">{{ region.width|round }} x {{ region.height|round }} ({{ region.left|round }} ,{{ region.top|round }})</span> <span class="caret"></span>
155
<span class="region-tip">{{ region.width|round }} x {{ region.height|round }} ({{ region.left|round }},{{ region.top|round }})</span>
156
<span class="caret"></span>
187
158
<ul class="dropdown-menu">
189
<a class="XiboFormButton" href="{{ urlFor("region.timeline.form", {id: region.regionId}) }}">{% trans "Edit Timeline" %}</a>
192
<a class="RegionOptionsMenuItem" href="{{ urlFor("region.edit.form", {id: region.regionId}) }}">{% trans "Options" %}</a>
195
<a class="XiboFormButton" href="{{ urlFor("region.delete.form", {id: region.regionId}) }}">{% trans "Delete" %}</a>
198
<a class="XiboFormButton" href="{{ urlFor("user.permissions.form", {entity: "Region", id: region.regionId}) }}">{% trans "Permissions" %}</a>
159
<li><a class="XiboFormButton" href="{{ urlFor("region.timeline.form", {id: region.regionId}) }}">{% trans "Edit Timeline" %}</a></li>
160
<li><a class="RegionOptionsMenuItem" href="{{ urlFor("region.edit.form", {id: region.regionId}) }}">{% trans "Options" %}</a></li>
161
<li><a class="XiboFormButton" href="{{ urlFor("region.delete.form", {id: region.regionId}) }}">{% trans "Delete" %}</a></li>
162
<li><a class="XiboFormButton" href="{{ urlFor("user.permissions.form", {entity: "Region", id: region.regionId}) }}">{% trans "Permissions" %}</a></li>
202
165
{% elseif layout.schemaVersion >= 2 and currentUser.checkViewable(region) %}
203
166
<div class="regionInfo">
204
<span class="region-tip">{{ region.width|round }} x {{ region.height|round }}
205
({{ region.left|round }}
206
,{{ region.top|round }})</span>
167
<span class="region-tip">{{ region.width|round }} x {{ region.height|round }} ({{ region.left|round }},{{ region.top|round }})</span>
209
170
<div class="preview">
221
181
{% if layout.schemaVersion < 2 %}
223
<div class="col-sm-12">
224
<p class="alert alert-danger">{% trans "This is an old format layout, please consider upgrading using Actions tab" %}</p>
183
<div class="col-sm-offset-1 col-sm-5">
184
<p class="alert alert-danger">{% trans "This is an old format layout, please consider upgrading using the options menu" %}</p>
228
188
{% if designerScale < 0.41 %}
229
189
<div class="row">
230
<div class="col-sm-12">
231
<p class="alert alert-danger">{% trans "This Layout is very large, so we have disabled region drag and drop. You could enlarge the designer from the options menu or use Region Options to Manually Position your regions." %}</p>
190
<div class="col-sm-offset-1 col-sm-5">
191
<p class="alert alert-danger">{% trans "This Layout is very large, so we have disabled region drag and drop. You could enlarge the designer from the options menu or use Region Options to Manually Position your regions." %}</p>
237
{% block javaScript %}
238
<script src="{{ theme.uri("js/xibo-layout-designer.js") }}?{{ version }}"></script>
239
<script type="text/javascript">
241
savePositionsFirst: "{% autoescape "js" %}{{ "Please save the pending position changes first by clicking Save Positions or cancel by clicking Undo."|trans }}{% endautoescape %}"
244
// Callback for the media form
245
function mediaFormCallBack(dialog) {
247
$(dialog).closest(".modal").addClass("modal-big");
249
// prevent filter form submit
250
$("#libraryAssignFilterOptions").find("form").on("submit", function(e) {
255
var mediaTable = $("#mediaAssignments").DataTable({
256
"language": dataTablesLanguage,
257
serverSide: true, stateSave: true, stateDuration: 0,
259
"order": [[1, "asc"]],
262
url: "{{ urlFor("library.search") }}",
263
"data": function (d) {
264
$.extend(d, $("#libraryAssignFilterOptions").find("form").serializeObject());
270
{"data": "mediaType"},
274
"render": function (data, type, row, meta) {
275
if (type === "display") {
276
// Return only the image part of the data
277
if (data.thumbnailUrl === '')
280
return '<img src="' + data.thumbnailUrl + '"/>';
289
"data": function (data, type, row, meta) {
290
if (type !== "display")
293
// Create a click-able span
294
return "<a href=\"#\" class=\"assignItem\"><span class=\"glyphicon glyphicon-plus-sign\"></a>";
300
mediaTable.on('draw', function (e, settings) {
301
dataTableDraw(e, settings);
303
// Clicky on the +spans
304
$(".assignItem", "#mediaAssignments").click(function () {
305
// Get the row that this is in.
306
var data = mediaTable.row($(this).closest("tr")).data();
308
// Construct a new list item for the lower list and append it.
309
var newItem = $("<li/>", {
310
"text": " " + data.name,
311
"data-media-id": data.mediaId,
312
"class": "li-sortable",
313
"dblclick": function () {
318
newItem.appendTo("#LibraryAssignSortable");
320
// Add a span to that new item
322
"class": "glyphicon glyphicon-minus-sign",
324
$(this).parent().remove();
326
}).prependTo(newItem);
197
{% block javaScript %}
198
<script src="{{ theme.uri("js/xibo-layout-designer.js") }}"></script>
199
<script type="text/javascript">
201
savePositionsFirst: "{% trans "Please save the pending position changes first by clicking Save Positions or cancel by clicking Undo." %}"
204
// Callback for the media form
205
function mediaFormCallBack() {
206
var mediaTable = $("#mediaAssignments").DataTable({ "language": dataTablesLanguage,
207
serverSide: true, stateSave: true,
209
"order": [[ 0, "asc"]],
212
url: "{{ urlFor("library.search") }}",
213
"data": function(d) {
214
$.extend(d, $("#libraryAssignFilterOptions").find("form").serializeObject());
219
{ "data": "mediaType" },
222
"data": function(data, type, row, meta) {
223
if (type != "display")
226
// Create a click-able span
227
return "<a href=\"#\" class=\"assignItem\"><span class=\"glyphicon glyphicon-plus-sign\"></a>";
233
mediaTable.on('draw', function(e, settings) {
234
dataTableDraw(e, settings);
236
// Clicky on the +spans
237
$(".assignItem", "#mediaAssignments").click(function() {
238
// Get the row that this is in.
239
var data = mediaTable.row($(this).closest("tr")).data();
241
// Construct a new list item for the lower list and append it.
242
var newItem = $("<li/>", {
244
"data-media-id": data.mediaId,
245
"class": "li-sortable",
246
"dblclick": function(){
329
mediaTable.on('processing.dt', dataTableProcessing);
331
// Make our little list sortable
332
$("#LibraryAssignSortable").sortable();
334
// Bind the filter form
335
$("#libraryAssignFilterOptions").find("input, select").change(function () {
336
mediaTable.ajax.reload();
343
function openUploadForm(templateOptions, buttons) {
345
// Close the current dialog
348
var template = Handlebars.compile($("#template-file-upload").html());
350
// Handle bars and open a dialog
352
message: template(templateOptions),
353
title: "{% trans "Upload media" %}",
356
updateInAllChecked: {% if settings.LIBRARY_MEDIA_UPDATEINALL_CHECKB == "Checked" %}true{% else %}false{% endif %},
357
deleteOldRevisionsChecked: {% if settings.LIBRARY_MEDIA_DELETEOLDVER_CHECKB == "Checked" %}true{% else %}false{% endif %}
360
openUploadFormModelShown($(".modal-body").find("form"));
366
function openUploadFormModelShown(form) {
251
newItem.appendTo("#LibraryAssignSortable");
253
// Add a span to that new item
255
"class": "glyphicon glyphicon-minus-sign",
257
$(this).parent().remove();
259
}).appendTo(newItem);
262
mediaTable.on('processing.dt', dataTableProcessing);
264
// Make our little list sortable
265
$("#LibraryAssignSortable").sortable();
267
// Bind the filter form
268
$("#libraryAssignFilterOptions").find("input, select").change(function() {
269
mediaTable.ajax.reload();
276
function openUploadForm(templateOptions, buttons) {
278
// Close the current dialog
281
var template = Handlebars.compile($("#template-file-upload").html());
283
// Handle bars and open a dialog
285
message: template(templateOptions),
286
title: "{% trans "Upload media" %}",
288
updateInAllChecked: {% if settings.LIBRARY_MEDIA_UPDATEINALL_CHECKB == "Checked" %}true{% else %}false{% endif %},
289
deleteOldRevisionsChecked: {% if settings.LIBRARY_MEDIA_DELETEOLDVER_CHECKB == "Checked" %}true{% else %}false{% endif %}
290
}).on('shown.bs.modal', function() {
367
291
// Configure the upload form
368
292
var url = "{{ urlFor("library.add") }}";
293
var form = $(this).find("form");
370
295
// Initialize the jQuery File Upload widget:
371
296
form.fileupload({
373
disableImageResize: true
298
disableImageResize: false
376
301
// Upload server status check for browsers with CORS support:
405
330
inputs.filter("input").prop("disabled", true);
409
// Click Handler for Library Upload Buttons (image, video, powerpoint, flash)
410
function libraryUploadClick(e) {
335
// Click Handler for Library Upload Buttons (image, video, powerpoint, flash)
336
function libraryUploadClick(e) {
339
var validExt = $(this).data().validExt.replace(/,/g, "|");
340
var playlistId = $(this).data().playlistId;
344
addFiles: "{% trans "Add files" %}",
345
startUpload: "{% trans "Start upload" %}",
346
cancelUpload: "{% trans "Cancel upload" %}"
349
maxSize: {{ libraryUpload.maxSize }},
350
maxSizeMessage: "{{ libraryUpload.maxSizeMessage }}",
353
playlistId: playlistId
356
label: "{% trans "View Library" %}",
357
callback: function() {
358
XiboFormRender("{{ urlFor("playlist.library.assign.form") }}".replace(":id", playlistId));
362
label: "{% trans "Done" %}",
363
className: "btn-primary",
364
callback: function() {
365
XiboFormRender(timelineForm.url, timelineForm.value);
374
function mediaEditFormOpen(dialog) {
376
if (dialog.find("form").data().mediaEditable != 1)
379
// Create a new button
380
var footer = dialog.find(".modal-footer");
381
var mediaId = dialog.find("form").data().mediaId;
382
var widgetId = dialog.find("form").data().widgetId;
383
var validExtensions = dialog.find("form").data().validExtensions;
386
var replaceButton = $('<button class="btn btn-warning">').html("{% trans "Replace" %}");
387
replaceButton.click(function(e) {
411
388
e.preventDefault();
413
var validExt = $(this).data().validExt.replace(/,/g, "|");
414
var playlistId = $(this).data().playlistId;
390
// Open the upload dialog with our options.
394
{% if config.LIBRARY_MEDIA_UPDATEINALL_CHECKB == "Checked" %}
395
updateInAllChecked: true,
397
updateInAllChecked: false,
418
addFiles: "{% trans "Add files" %}",
419
startUpload: "{% trans "Start upload" %}",
420
cancelUpload: "{% trans "Cancel upload" %}"
400
addFiles: "{% trans "Add Replacement" %}",
401
startUpload: "{% trans "Start Replace" %}",
402
cancelUpload: "{% trans "Cancel Replace" %}",
404
title: "{% trans "Update this media in all layouts it is assigned to?" %}",
405
helpText: "{% trans "Note: It will only be updated in layouts you have permission to edit." %}"
407
deleteOldRevisions: {
408
title: "{% trans "Delete the old version?" %}",
409
helpText: "{% trans "Completely remove the old version of this media item if a new file is being uploaded." %}"
423
413
maxSize: {{ libraryUpload.maxSize }},
424
maxSizeMessage: "{{ libraryUpload.maxSizeMessage }}",
427
playlistId: playlistId
414
maxSizeMessage: "{{ libraryUpload.maxSizeMessage }}",
415
validExt: validExtensions
430
label: "{% trans "View Library" %}",
431
callback: function () {
432
XiboFormRender("{{ urlFor("playlist.library.assign.form") }}".replace(":id", playlistId));
436
419
label: "{% trans "Done" %}",
437
420
className: "btn-primary",
438
callback: function () {
421
callback: function() {
439
422
XiboFormRender(timelineForm.url, timelineForm.value);
448
function mediaEditFormOpen(dialog) {
450
if (dialog.find("form").data().mediaEditable != 1)
453
// Create a new button
454
var footer = dialog.find(".modal-footer");
455
var mediaId = dialog.find("form").data().mediaId;
456
var widgetId = dialog.find("form").data().widgetId;
457
var validExtensions = dialog.find("form").data().validExtensions;
460
var replaceButton = $('<button class="btn btn-warning">').html("{% trans "Replace" %}");
461
replaceButton.click(function (e) {
464
// Open the upload dialog with our options.
468
{% if config.LIBRARY_MEDIA_UPDATEINALL_CHECKB == "Checked" %}
469
updateInAllChecked: true,
471
updateInAllChecked: false,
474
addFiles: "{% trans "Add Replacement" %}",
475
startUpload: "{% trans "Start Replace" %}",
476
cancelUpload: "{% trans "Cancel Replace" %}",
478
title: "{% trans "Update this media in all layouts it is assigned to?" %}",
479
helpText: "{% trans "Note: It will only be updated in layouts you have permission to edit." %}"
481
deleteOldRevisions: {
482
title: "{% trans "Delete the old version?" %}",
483
helpText: "{% trans "Completely remove the old version of this media item if a new file is being uploaded." %}"
487
maxSize: {{ libraryUpload.maxSize }},
488
maxSizeMessage: "{{ libraryUpload.maxSizeMessage }}",
489
validExt: validExtensions
493
label: "{% trans "Done" %}",
494
className: "btn-primary",
495
callback: function () {
496
XiboFormRender(timelineForm.url, timelineForm.value);
502
footer.find(".btn-primary").before(replaceButton);
505
function timelineGridCallback(dialog) {
507
dialog.addClass("modal-big");
509
var timelineWidgetTabel = $("#timelineWidgets").DataTable({
510
"language": dataTablesLanguage,
511
serverSide: true, stateSave: true, stateDuration: 0,
514
"order": [[0, "asc"]],
516
url: "{{ urlFor("playlist.widget.search") }}",
517
"data": function (d) {
518
$.extend(d, $("#timelineWidgets").closest(".XiboGrid").find(".FilterDiv form").serializeObject());
522
{"data": "displayOrder"},
523
{"data": "name", "orderable": false},
526
"data": "calculatedDuration",
527
"render": function(data) {
528
return (data == 0) ? 'N/A' : data;
531
{"data": "transition"},
534
"data": dataTableButtonsColumn
539
timelineWidgetTabel.on('draw', dataTableDraw);
540
timelineWidgetTabel.on('processing.dt', dataTableProcessing);
542
// Hook up the library Upload Buttons
543
$(".libraryUploadForm").click(libraryUploadClick);
546
function DeleteRegion(form, regionId) {
428
footer.find(".btn-primary").before(replaceButton);
431
function timelineGridCallback(dialog) {
433
dialog.addClass("modal-big");
435
var timelineWidgetTabel = $("#timelineWidgets").DataTable({ "language": dataTablesLanguage,
436
serverSide: true, stateSave: true,
439
"order": [[ 0, "asc"]],
441
url: "{{ urlFor("playlist.widget.search") }}",
442
"data": function(d) {
443
$.extend(d, $("#timelineWidgets").closest(".XiboGrid").find(".FilterDiv form").serializeObject());
447
{ "data": "displayOrder" },
448
{ "data": "name", "orderable": false },
450
{ "data": "duration" },
451
{ "data": "transition" },
454
"data": dataTableButtonsColumn
459
timelineWidgetTabel.on('draw', dataTableDraw);
460
timelineWidgetTabel.on('processing.dt', dataTableProcessing);
463
function DeleteRegion(form, regionId) {
465
type: form.attr("method"),
466
url: form.attr("action"),
469
data: form.serialize(),
470
success: function(xhr, textStatus, error) {
472
XiboSubmitResponse(xhr, form);
475
$("#region_" + regionId).remove();
477
error: function(xhr, textStatus, errorThrown) {
478
SystemMessage(xhr.responseText, false);
483
// Bind to the add button when we load
484
$(document).ready(function() {
487
$("#regionAddButton").click(function(e) {
548
type: form.attr("method"),
549
url: form.attr("action"),
552
data: form.serialize(),
553
success: function (xhr, textStatus, error) {
555
XiboSubmitResponse(xhr, form);
558
$("#region_" + regionId).remove();
560
error: function (xhr, textStatus, errorThrown) {
561
SystemMessage(xhr.responseText, false);
491
url: $(this).attr("href"),
494
success: function(xhr, textStatus, error) {
496
XiboSubmitResponse(xhr);
499
// Reload the designer
500
window.location.reload();
566
// Bind to the add button when we load
567
$(document).ready(function () {
570
$("#regionAddButton").click(function (e) {
574
url: $(this).attr("href"),
577
success: function (xhr, textStatus, error) {
579
XiboSubmitResponse(xhr);
582
// Reload the designer
583
window.location.reload();
590
$("[name='my-checkbox']").bootstrapSwitch();
597
{% for module in modules %}
598
{% if module.layoutDesignerJavaScript() != "" %}
599
{% include module.layoutDesignerJavaScript() ~ ".twig" %}
508
{% for module in modules %}
509
{% if module.layoutDesignerJavaScript() != "" %}
510
{% include module.layoutDesignerJavaScript() ~ ".twig" %}