AIRTIME = (function(AIRTIME) { var viewport, $lib, $libWrapper, $builder, $fs, widgetHeight, screenWidth, resizeTimeout, oBaseDatePickerSettings, oBaseTimePickerSettings, oRange, dateStartId = "#sb_date_start", timeStartId = "#sb_time_start", dateEndId = "#sb_date_end", timeEndId = "#sb_time_end", mod; if (AIRTIME.builderMain === undefined) { AIRTIME.builderMain = {}; } mod = AIRTIME.builderMain; oBaseDatePickerSettings = { dateFormat: 'yy-mm-dd', //i18n_months, i18n_days_short are in common.js monthNames: i18n_months, dayNamesMin: i18n_days_short, onClick: function(sDate, oDatePicker) { $(this).datepicker( "setDate", sDate ); }, onClose: validateTimeRange }; oBaseTimePickerSettings = { showPeriodLabels: false, showCloseButton: true, closeButtonText: $.i18n._("Done"), showLeadingZero: false, defaultTime: '0:00', hourText: $.i18n._("Hour"), minuteText: $.i18n._("Minute"), onClose: validateTimeRange }; function setWidgetSize() { viewport = AIRTIME.utilities.findViewportDimensions(); widgetHeight = viewport.height - 180; screenWidth = Math.floor(viewport.width - 50); var libTableHeight = widgetHeight - 175, builderTableHeight = widgetHeight - 95, oTable; if ($fs.is(':visible')) { builderTableHeight = builderTableHeight - 40; } //set the heights of the main widgets. $builder//.height(widgetHeight) .find(".dataTables_scrolling") //.css("max-height", builderTableHeight) .end(); //.width(screenWidth); $lib//.height(widgetHeight) .find(".dataTables_scrolling") //.css("max-height", libTableHeight) .end(); if ($lib.filter(':visible').length > 0) { //$lib.width(Math.floor(screenWidth * 0.47)); $builder//.width(Math.floor(screenWidth * 0.47)) .find("#sb_edit") .remove() .end() .find("#sb_date_start") .css("margin-left", 0) .end(); oTable = $('#show_builder_table').dataTable(); //oTable.fnDraw(); } } function showSearchSubmit() { var fn, op, oTable = $('#show_builder_table').dataTable(), check; check = validateTimeRange(); if (check.isValid) { //reset timestamp value since input values could have changed. AIRTIME.showbuilder.resetTimestamp(); fn = oTable.fnSettings().fnServerData; fn.start = check.start; fn.end = check.end; op = $("div.sb-options-form"); if (op.is(":visible")) { if (fn.ops === undefined) { fn.ops = {}; } fn.ops.showFilter = op.find("#sb_show_filter").val(); // Hacky? fn.ops.myShows = (fn.ops.showFilter == -1) ? 1 : 0; } oTable.fnDraw(); } } function highlightMediaTypeSelector() { $(".media_type_selector:first").addClass("highlight"); var selected; if (location.hash === "") { location.hash = "tracks"; selected = $("a[href$='#tracks']"); } else { selected = $("a[href$='"+location.hash+"']"); } selected.parent().addClass("selected"); $("#library_filter").text(selected.text()); // Slightly hacky way of triggering the click event when it's outside of the anchor text $(".media_type_selector").on("click", function() { // Need get(0) here so we don't create a stack overflow by recurring the click on the parent $(this).find("a").get(0).click(); }); $(window).on('hashchange', function() { var selected = $("a[href$='"+location.hash+"']"), dashboardLink = $(".media_type_selector:first"), tableType; if (selected.parent().data("selection-id") == AIRTIME.library.MediaTypeIntegerEnum.PODCAST) { tableType = AIRTIME.library.DataTableTypeEnum.PODCAST; } else { tableType = AIRTIME.library.DataTableTypeEnum.LIBRARY; } dashboardLink.find("a").attr("href", selected.attr("href")); AIRTIME.library.selectNone(); $(".media_type_selector").each(function () { $(this).removeClass("selected"); }); selected.parent().addClass("selected"); AIRTIME.library.setCurrentTable(tableType); $("#library_filter").text(selected.text()); // Highlight the dashboard link dashboardLink.addClass("highlight"); }); } mod.onReady = function() { // Normally we would just use audio/*, but it includes file types that we can't handle (like .m4a) // We initialize the acceptedMimeTypes variable in Bootstrap so we don't have to duplicate the list Dropzone.options.content = { url:'/rest/media', clickable: false, acceptedFiles: acceptedMimeTypes.join(), init: function () { this.on("sending", function (file, xhr, data) { data.append("csrf_token", $("#csrf").val()); }); }, dictDefaultMessage: '', createImageThumbnails: false, previewTemplate : '
' }; // define module vars. $lib = $("#library_content"); $builder = $("#show_builder"); $fs = $builder.find('fieldset'); //Highlight the media type selector we're currently on. highlightMediaTypeSelector(); /* * Icon hover states for search. */ $builder.on("mouseenter", ".sb-timerange .ui-button", function(ev) { $(this).addClass("ui-state-hover"); }); $builder.on("mouseleave", ".sb-timerange .ui-button", function(ev) { $(this).removeClass("ui-state-hover"); }); $builder.find(dateStartId) .datepicker(oBaseDatePickerSettings) .blur(validateTimeRange); $builder.find(timeStartId) .timepicker(oBaseTimePickerSettings) .blur(validateTimeRange); $builder.find(dateEndId) .datepicker(oBaseDatePickerSettings) .blur(validateTimeRange); $builder.find(timeEndId) .timepicker(oBaseTimePickerSettings) .blur(validateTimeRange); oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId); AIRTIME.showbuilder.fnServerData.start = oRange.start; AIRTIME.showbuilder.fnServerData.end = oRange.end; //the user might not have the library on the page (guest user) if (AIRTIME.library !== undefined) { AIRTIME.library.libraryInit(); } AIRTIME.showbuilder.builderDataTable(); setWidgetSize(); $libWrapper = $lib.find("#library_display_wrapper"); //$builder.find('.dataTables_scrolling').css("max-height", // widgetHeight - 95); $builder.on("click", "#sb_submit", showSearchSubmit); $builder.on("click", "#sb_edit", function(ev) { var schedTable = $("#show_builder_table").dataTable(); // reset timestamp to redraw the cursors. AIRTIME.showbuilder.resetTimestamp(); $lib.show().width(Math.floor(screenWidth * 0.48)); $builder.width(Math.floor(screenWidth * 0.48)).find("#sb_edit") .remove().end().find("#sb_date_start") .css("margin-left", 0).end(); schedTable.fnDraw(); $.ajax( { url : baseUrl+"usersettings/set-now-playing-screen-settings", type : "POST", data : { settings : { library : true }, format : "json" }, dataType : "json", success : function() { } }); }); $lib.on("click", "#sb_lib_close", function() { var schedTable = $("#show_builder_table").dataTable(); $lib.hide(); $builder.width(screenWidth).find(".sb-timerange").find("#sb_date_start").css("margin-left", 30) .end().end(); schedTable.fnDraw(); $.ajax( { url : baseUrl+"usersettings/set-now-playing-screen-settings", type : "POST", data : { settings : { library : false }, format : "json" }, dataType : "json", success : function() { } }); }); $builder.find('legend').click( function(ev, item) { if ($fs.hasClass("closed")) { $fs.removeClass("closed"); //$builder.find('.dataTables_scrolling').css( // "max-height", widgetHeight - 150); } else { $fs.addClass("closed"); // set defaults for the options. $fs.find('select').val(0); $fs.find('input[type="checkbox"]').attr("checked", false); //$builder.find('.dataTables_scrolling').css( // "max-height", widgetHeight - 110); } }); // set click event for all my shows checkbox. $builder.on("click", "#sb_my_shows", function(ev) { if ($(this).is(':checked')) { $(ev.delegateTarget).find('#sb_show_filter').val(0); } showSearchSubmit(); }); //set select event for choosing a show. $builder.on("change", '#sb_show_filter', function(ev) { if ($(this).val() !== 0) { $(ev.delegateTarget).find('#sb_my_shows') .attr("checked", false); } showSearchSubmit(); }); function checkScheduleUpdates() { var data = {}, oTable = $('#show_builder_table').dataTable(), fn = oTable .fnSettings().fnServerData, start = fn.start, end = fn.end; data["format"] = "json"; data["start"] = start; data["end"] = end; data["timestamp"] = AIRTIME.showbuilder.getTimestamp(); data["instances"] = AIRTIME.showbuilder.getShowInstances(); if (fn.hasOwnProperty("ops")) { data["myShows"] = fn.ops.myShows; data["showFilter"] = fn.ops.showFilter; data["showInstanceFilter"] = fn.ops.showInstanceFilter; } $.ajax( { "dataType" : "json", "type" : "GET", "url" : baseUrl+"showbuilder/check-builder-feed", "data" : data, "success" : function(json) { if (json.update === true) { oTable.fnDraw(); } setTimeout(checkScheduleUpdates, 5000); } }); //check if the timeline view needs updating. setTimeout(checkScheduleUpdates, 5000); } }; mod.onResize = function() { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(setWidgetSize, 100); }; return AIRTIME; } (AIRTIME || {})); $(document).ready(AIRTIME.builderMain.onReady); $(window).resize(AIRTIME.builderMain.onResize);