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(''); aData.image = ''; } } 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) + "
" + $.i18n._(opts.subtext) + "
" + $.i18n._("Learn about " + opts.media) + "", ); } 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(""); } 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 = $("
") .attr("id", "draggingContainer") .append("") .find("tr") .append("") .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 || {});