sintonia/legacy/public/js/airtime/library/events/library_showbuilder.js

440 lines
12 KiB
JavaScript

var AIRTIME = (function (AIRTIME) {
var mod;
if (AIRTIME.library === undefined) {
AIRTIME.library = {};
}
mod = AIRTIME.library;
mod.checkAddButton = function () {
var selected = mod.getChosenItemsLength(),
$cursor = $("tr.sb-selected"),
check = false,
shows = $("tr.sb-header"),
current = $("tr.sb-current-show"),
// TODO: this is an ugly way of doing this... we should find a more robust way of checking which view we're in.
btnText =
window.location.href.toLowerCase().indexOf("schedule") > -1
? $.i18n._("Add to show")
: $.i18n._("Add to next show");
// make sure library items are selected and a cursor is selected.
if (selected !== 0) {
check = true;
}
var sortable = $(".spl_sortable");
if ($("#show_builder_table").is(":visible")) {
if (shows.length === 0) {
check = false;
}
if ($cursor.length !== 0) {
btnText = $.i18n._("Add after selected items");
} else if (current.length !== 0) {
btnText = $.i18n._("Add to current show");
}
} else if (sortable.length > 0 && sortable.is(":visible")) {
var objType = $(".active-tab .obj_type").val();
if (objType === "block") {
btnText = $.i18n._("Add to current smart block");
} else {
btnText = $.i18n._("Add to current playlist");
}
} else {
check = false;
}
if (check) {
AIRTIME.button.enableButton("btn-group #library-plus", false);
} else {
AIRTIME.button.disableButton("btn-group #library-plus", false);
}
AIRTIME.library.changeAddButtonText(
$(".btn-group #library-plus #lib-plus-text"),
btnText,
);
};
mod.fnRowCallback = function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
var $nRow = $(nRow);
if (aData.ftype === "audioclip") {
$nRow.addClass("lib-audio");
$image = $nRow.find("td.library_type");
if (!isAudioSupported(aData.mime)) {
$image.html('<span class="ui-icon ui-icon-locked"></span>');
aData.image = '<span class="ui-icon ui-icon-locked"></span>';
}
} else if (aData.ftype === "stream") {
$nRow.addClass("lib-stream");
} else {
$nRow.addClass("lib-pl");
}
$nRow
.attr("id", aData["tr_id"])
.data("aData", aData)
.data("screen", "timeline");
};
/**
* Draw a placeholder for the given table to show if it has no data.
*
* @param {Object} table jQuery object containing the table DOM node
*/
mod.drawEmptyPlaceholder = function (table) {
var opts;
if (table instanceof AIRTIME.widgets.Table) {
opts = table.getEmptyPlaceholder();
table = table.getDatatable();
if (!table) {
return;
}
}
var emptyRow = table.find("tr:has(td.dataTables_empty)"),
wrapper = table.closest(".dataTables_wrapper"),
libEmpty = wrapper.find(".empty_placeholder");
if (emptyRow.length > 0) {
emptyRow.hide();
var mediaType = parseInt(
$(".media_type_selector.selected").data("selection-id"),
),
img = wrapper.find(".empty_placeholder_image");
if (!opts && isNaN(mediaType)) {
return;
}
// Remove all classes for when we change between empty media types
img.removeClass(function () {
return $(this).attr("class");
});
if (opts) {
img.addClass("empty_placeholder_image " + opts.iconClass);
wrapper.find(".empty_placeholder_text").html(opts.html);
} else {
opts = AIRTIME.library.placeholder(mediaType);
img.addClass("empty_placeholder_image icon-white " + opts.icon);
wrapper
.find(".empty_placeholder_text")
.html(
$.i18n._("You haven't added any " + opts.media) +
"<br/>" +
$.i18n._(opts.subtext) +
"<br/><a target='_blank' href='" +
opts.href +
"'>" +
$.i18n._("Learn about " + opts.media) +
"</a>",
);
}
libEmpty.show();
} else {
libEmpty.hide();
}
};
mod.fnDrawCallback = function fnLibDrawCallback() {
var table = $("#library_display"),
cb = table.find('th[class*="checkbox"]');
if (cb.find("input").length == 0) {
cb.append("<input id='super-checkbox' type='checkbox'>");
}
mod.redrawChosen();
mod.checkToolBarIcons();
mod.drawEmptyPlaceholder(table);
var sortable;
if ($("#show_builder_table").is(":visible")) {
sortable = "#show_builder_table";
} else {
sortable = ".active-tab .spl_sortable";
}
$('#library_display tr[class*="lib-"]').draggable({
helper: function () {
var $el = $(this),
selected = mod.getChosenItemsLength(),
container,
thead = $("#show_builder_table thead"),
colspan = thead.find("th").length,
width = $el.width(),
message;
// dragging an element that has an unselected
// checkbox.
if (mod.isChosenItem($el) === false) {
selected++;
}
if (selected === 1) {
message = $.i18n._("Adding 1 Item");
} else {
message = sprintf($.i18n._("Adding %s Items"), selected);
}
container = $("<div/>")
.attr("id", "draggingContainer")
.append("<tr/>")
.find("tr")
.append("<td/>")
.find("td")
.attr("colspan", colspan)
.width(width)
.addClass("ui-state-highlight")
.append(message)
.end()
.end();
return container;
},
create: function (event, ui) {
$(this).draggable("option", "cursorAt", {
top: 20,
left: Math.floor($(this).outerWidth() / 2),
});
},
tolerance: "pointer",
cursor: "move",
distance: 25, // min-distance for dragging
connectToSortable: sortable,
});
};
mod.dblClickAdd = function (data, type) {
var i,
length,
temp,
aMediaIds = [],
aSchedIds = [],
aData = [];
if ($("#show_builder_table").is(":visible")) {
// process selected files/playlists.
aMediaIds.push({
id: data.id,
type: type,
});
$("#show_builder_table tr.sb-selected").each(function (i, el) {
aData.push($(el).data("aData"));
});
// process selected schedule rows to add media after.
for (i = 0, length = aData.length; i < length; i++) {
temp = aData[i];
aSchedIds.push({
id: temp.id,
instance: temp.instance,
timestamp: temp.timestamp,
});
}
if (aSchedIds.length == 0) {
if (!addToCurrentOrNext(aSchedIds)) {
return;
}
}
AIRTIME.showbuilder.fnAdd(aMediaIds, aSchedIds);
} else {
// process selected files/playlists.
aMediaIds.push(new Array(data.id, data.ftype));
// check if a playlist/block is open before adding items
if (
$(".active-tab .obj_type").val() == "playlist" ||
$(".active-tab .obj_type").val() == "block"
) {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, "after");
}
}
};
function addToCurrentOrNext(arr) {
var el;
// Add to the end of the current or next show by getting the footer
el = $(".sb-footer.sb-future:first");
var data = el.prev().data("aData");
if (data === undefined) {
alert(
$.i18n._("Cannot schedule outside a show.\nTry creating a show first."),
);
return false;
}
arr.push({
id: data.id,
instance: data.instance,
timestamp: data.timestamp,
});
if (!isInView(el)) {
$(".dataTables_scrolling.sb-padded").animate(
{
scrollTop: el.offset().top,
},
0,
);
}
return true;
}
mod.addToSchedule = function (selected) {
console.log(selected);
var aMediaIds = [],
aSchedIds = [],
aData = [];
$.each(selected, function () {
aMediaIds.push({
id: this.id,
type: this.ftype,
});
});
// process selected files/playlists.
$("#show_builder_table")
.find("tr.sb-selected")
.each(function (i, el) {
aData.push($(el).data("aData"));
});
// process selected schedule rows to add media after.
$.each(aData, function () {
aSchedIds.push({
id: this.id,
instance: this.instance,
timestamp: this.timestamp,
});
});
if (aSchedIds.length == 0) {
if (!addToCurrentOrNext(aSchedIds)) {
return;
}
}
AIRTIME.showbuilder.fnAdd(aMediaIds, aSchedIds);
};
mod.setupLibraryToolbar = function () {
var $toolbar = $(".lib-content .fg-toolbar:first");
mod.createToolbarButtons();
//mod.moveSearchBarToHeader();
$("#advanced_search").click(function (e) {
e.stopPropagation();
});
if (localStorage.getItem("user-type") != "G") {
$toolbar.append($menu);
// add to timeline button
$toolbar.find("#library-plus").click(function () {
if (AIRTIME.button.isDisabled("btn-group #library-plus") === true) {
return;
}
var selected = AIRTIME.library.getSelectedData(),
aMediaIds = [];
if ($("#show_builder_table").is(":visible")) {
mod.addToSchedule(selected);
} else {
$.each(selected, function () {
aMediaIds.push([this.id, this.ftype]);
});
// check if a playlist/block is open before adding items
if (
$(".active-tab .obj_type").val() == "playlist" ||
$(".active-tab .obj_type").val() == "block"
) {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, "after");
}
}
});
$toolbar.find("#publish-btn").click(function () {
if (AIRTIME.button.isDisabled("btn-group #publish-btn") === true) {
return;
}
var selected = $(".lib-selected");
selected.each(function (i, el) {
var data = $(el).data("aData");
AIRTIME.publish.openPublishDialog(data.id);
});
});
// delete from library.
$toolbar.find("#sb-delete").click(function () {
if (AIRTIME.button.isDisabled("btn-group #sb-delete") === true) {
return;
}
AIRTIME.library.fnDeleteSelectedItems();
});
$toolbar.find("#sb-new").click(function () {
if (AIRTIME.button.isDisabled("btn-group #sb-new") === true) {
return;
}
var selection = $(".media_type_selector.selected").data("selection-id");
if (selection == AIRTIME.library.MediaTypeIntegerEnum.PLAYLIST) {
AIRTIME.playlist.fnNew();
} else if (selection == AIRTIME.library.MediaTypeIntegerEnum.BLOCK) {
AIRTIME.playlist.fnNewBlock();
} else if (
selection == AIRTIME.library.MediaTypeIntegerEnum.WEBSTREAM
) {
AIRTIME.playlist.fnWsNew();
}
});
$toolbar.find("#sb-edit").click(function () {
if (AIRTIME.button.isDisabled("btn-group #sb-edit") === true) {
return;
}
var selected = $(".lib-selected");
selected.each(function (i, el) {
var data = $(el).data("aData");
if (data.ftype === "audioclip") {
$.get(
baseUrl + "library/edit-file-md/id/" + data.id,
{ format: "json" },
function (json) {
AIRTIME.playlist.fileMdEdit(json, data.tr_id);
//buildEditMetadataDialog(json);
},
);
} else if (data.ftype === "playlist" || data.ftype === "block") {
AIRTIME.playlist.fnEdit(data, baseUrl + "playlist/edit");
AIRTIME.playlist.validatePlaylistElements();
} else if (data.ftype === "stream") {
AIRTIME.playlist.fnEdit(data, baseUrl + "webstream/edit");
}
});
});
mod.createToolbarDropDown();
}
};
return AIRTIME;
})(AIRTIME || {});