Rename airtime_mvc/ to legacy/
This commit is contained in:
parent
f0879322c2
commit
3e18d42c8b
1316 changed files with 0 additions and 0 deletions
511
legacy/public/js/airtime/schedule/schedule.js
Normal file
511
legacy/public/js/airtime/schedule/schedule.js
Normal file
|
@ -0,0 +1,511 @@
|
|||
var AIRTIME = (function(AIRTIME){
|
||||
var mod;
|
||||
|
||||
if (AIRTIME.schedule === undefined) {
|
||||
AIRTIME.schedule = {};
|
||||
}
|
||||
mod = AIRTIME.schedule;
|
||||
|
||||
return AIRTIME;
|
||||
|
||||
}(AIRTIME || {}));
|
||||
|
||||
var serverTimezoneOffset = 0;
|
||||
|
||||
function closeDialogCalendar(event, ui) {
|
||||
|
||||
$el = $(this);
|
||||
$el.dialog('destroy');
|
||||
$el.remove();
|
||||
|
||||
//need to refetch the events to update scheduled status.
|
||||
$("#schedule_calendar").fullCalendar( 'refetchEvents' );
|
||||
}
|
||||
|
||||
function confirmCancelShow(show_instance_id){
|
||||
if (confirm($.i18n._('Cancel Current Show?'))) {
|
||||
var url = baseUrl+"Schedule/cancel-current-show";
|
||||
$.ajax({
|
||||
url: url,
|
||||
data: {format: "json", id: show_instance_id},
|
||||
success: function(data){
|
||||
scheduleRefetchEvents(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function confirmCancelRecordedShow(show_instance_id){
|
||||
if (confirm($.i18n._('Stop recording current show?'))) {
|
||||
var url = baseUrl+"Schedule/cancel-current-show";
|
||||
$.ajax({
|
||||
url: url,
|
||||
data: {format: "json", id: show_instance_id},
|
||||
success: function(data){
|
||||
scheduleRefetchEvents(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function findViewportDimensions() {
|
||||
var viewportwidth,
|
||||
viewportheight;
|
||||
|
||||
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use
|
||||
// window.innerWidth and window.innerHeight
|
||||
if (typeof window.innerWidth != 'undefined') {
|
||||
viewportwidth = window.innerWidth, viewportheight = window.innerHeight;
|
||||
}
|
||||
// IE6 in standards compliant mode (i.e. with a valid doctype as the first
|
||||
// line in the document)
|
||||
else if (typeof document.documentElement != 'undefined'
|
||||
&& typeof document.documentElement.clientWidth != 'undefined'
|
||||
&& document.documentElement.clientWidth != 0) {
|
||||
viewportwidth = document.documentElement.clientWidth;
|
||||
viewportheight = document.documentElement.clientHeight;
|
||||
}
|
||||
// older versions of IE
|
||||
else {
|
||||
viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
|
||||
viewportheight = document.getElementsByTagName('body')[0].clientHeight;
|
||||
}
|
||||
|
||||
return {
|
||||
width: viewportwidth,
|
||||
height: viewportheight-45
|
||||
};
|
||||
}
|
||||
|
||||
function highlightMediaTypeSelector(dialog) {
|
||||
var selected;
|
||||
if (location.hash === "") {
|
||||
selected = dialog.find("a[href$='#tracks']");
|
||||
} else {
|
||||
selected = dialog.find("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
|
||||
dialog.find(".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 = dialog.find("a[href$='"+location.hash+"']");
|
||||
AIRTIME.library.selectNone();
|
||||
dialog.find(".media_type_selector").each(function () {
|
||||
$(this).removeClass("selected");
|
||||
});
|
||||
$("#library_filter").text(selected.text());
|
||||
selected.parent().addClass("selected");
|
||||
oTable.fnDraw();
|
||||
});
|
||||
}
|
||||
|
||||
function buildTimerange(dialog) {
|
||||
var builder = dialog.find("#show_builder"),
|
||||
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
|
||||
};
|
||||
|
||||
/*
|
||||
* 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);
|
||||
builder.find(timeStartId)
|
||||
.timepicker(oBaseTimePickerSettings);
|
||||
builder.find(dateEndId)
|
||||
.datepicker(oBaseDatePickerSettings);
|
||||
builder.find(timeEndId)
|
||||
.timepicker(oBaseTimePickerSettings);
|
||||
|
||||
var oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId,
|
||||
dateEndId, timeEndId);
|
||||
AIRTIME.showbuilder.fnServerData.start = oRange.start;
|
||||
AIRTIME.showbuilder.fnServerData.end = oRange.end;
|
||||
}
|
||||
|
||||
function buildScheduleDialog (json, instance_id) {
|
||||
var dialog = $(json.dialog),
|
||||
viewport = findViewportDimensions(),
|
||||
height = Math.floor(viewport.height * 0.96),
|
||||
width = Math.floor(viewport.width * 0.96),
|
||||
fnServer = AIRTIME.showbuilder.fnServerData;
|
||||
|
||||
dialog.dialog({
|
||||
autoOpen: false,
|
||||
title: json.title,
|
||||
width: width,
|
||||
height: height,
|
||||
resizable: false,
|
||||
draggable: true,
|
||||
modal: true,
|
||||
close: closeDialogCalendar,
|
||||
buttons: [
|
||||
{
|
||||
text: $.i18n._("Ok"),
|
||||
class: "btn",
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
//getUsabilityHint();
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
//set the start end times so the builder datatables knows its time range.
|
||||
fnServer.start = json.start;
|
||||
fnServer.end = json.end;
|
||||
fnServer.ops = {};
|
||||
fnServer.ops.showFilter = 0;
|
||||
fnServer.ops.showInstanceFilter = instance_id;
|
||||
fnServer.ops.myShows = 0;
|
||||
|
||||
AIRTIME.library.libraryInit();
|
||||
AIRTIME.showbuilder.builderDataTable();
|
||||
|
||||
dialog.dialog('open');
|
||||
highlightMediaTypeSelector(dialog);
|
||||
buildTimerange(dialog);
|
||||
}
|
||||
|
||||
function buildContentDialog (json){
|
||||
var dialog = $(json.dialog),
|
||||
viewport = findViewportDimensions(),
|
||||
height = viewport.height * 2/3,
|
||||
width = viewport.width * 4/5;
|
||||
|
||||
if (json.show_error == true){
|
||||
alertShowErrorAndReload();
|
||||
}
|
||||
|
||||
dialog.find("#show_progressbar").progressbar({
|
||||
value: json.percentFilled
|
||||
});
|
||||
|
||||
dialog.dialog({
|
||||
autoOpen: false,
|
||||
title: $.i18n._("Contents of Show") +" '" + json.showTitle + "'",
|
||||
width: width,
|
||||
height: height,
|
||||
modal: true,
|
||||
close: closeDialogCalendar,
|
||||
buttons: [
|
||||
{
|
||||
text: $.i18n._("Ok"),
|
||||
"class": "btn",
|
||||
click: function() {
|
||||
dialog.remove();
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
dialog.dialog('open');
|
||||
}
|
||||
|
||||
/**
|
||||
* Use user preference for time scale; defaults to month if preference was never set
|
||||
*/
|
||||
function getTimeScalePreference(data) {
|
||||
return data.calendarInit.timeScale;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use user preference for time interval; defaults to 30m if preference was never set
|
||||
*/
|
||||
function getTimeIntervalPreference(data) {
|
||||
return parseInt(data.calendarInit.timeInterval);
|
||||
}
|
||||
|
||||
function createFullCalendar(data){
|
||||
|
||||
serverTimezoneOffset = data.calendarInit.timezoneOffset;
|
||||
|
||||
var mainHeight = $(window).height() - 200 - 35;
|
||||
|
||||
$('#schedule_calendar').fullCalendar({
|
||||
header: {
|
||||
left: 'prev, next, today',
|
||||
center: 'title',
|
||||
right: 'agendaDay, agendaWeek, month'
|
||||
},
|
||||
defaultView: getTimeScalePreference(data),
|
||||
slotMinutes: getTimeIntervalPreference(data),
|
||||
firstDay: data.calendarInit.weekStartDay,
|
||||
editable: false,
|
||||
allDaySlot: false,
|
||||
axisFormat: 'H:mm',
|
||||
timeFormat: {
|
||||
agenda: 'H:mm{ - H:mm}',
|
||||
month: 'H:mm{ - H:mm}'
|
||||
},
|
||||
//i18n_months is in common.js
|
||||
monthNames: i18n_months,
|
||||
monthNamesShort: [
|
||||
$.i18n._('Jan'),
|
||||
$.i18n._('Feb'),
|
||||
$.i18n._('Mar'),
|
||||
$.i18n._('Apr'),
|
||||
$.i18n._('May'),
|
||||
$.i18n._('Jun'),
|
||||
$.i18n._('Jul'),
|
||||
$.i18n._('Aug'),
|
||||
$.i18n._('Sep'),
|
||||
$.i18n._('Oct'),
|
||||
$.i18n._('Nov'),
|
||||
$.i18n._('Dec')
|
||||
],
|
||||
buttonText: {
|
||||
today: $.i18n._('Today'),
|
||||
month: $.i18n._('Month'),
|
||||
week: $.i18n._('Week'),
|
||||
day: $.i18n._('Day')
|
||||
},
|
||||
dayNames: [
|
||||
$.i18n._('Sunday'),
|
||||
$.i18n._('Monday'),
|
||||
$.i18n._('Tuesday'),
|
||||
$.i18n._('Wednesday'),
|
||||
$.i18n._('Thursday'),
|
||||
$.i18n._('Friday'),
|
||||
$.i18n._('Saturday')
|
||||
],
|
||||
dayNamesShort: [
|
||||
$.i18n._('Sun'),
|
||||
$.i18n._('Mon'),
|
||||
$.i18n._('Tue'),
|
||||
$.i18n._('Wed'),
|
||||
$.i18n._('Thu'),
|
||||
$.i18n._('Fri'),
|
||||
$.i18n._('Sat')
|
||||
],
|
||||
contentHeight: mainHeight,
|
||||
theme: true,
|
||||
lazyFetching: true,
|
||||
serverTimestamp: parseInt(data.calendarInit.timestamp, 10),
|
||||
serverTimezoneOffset: parseInt(data.calendarInit.timezoneOffset, 10),
|
||||
|
||||
events: getFullCalendarEvents,
|
||||
|
||||
//callbacks (in full-calendar-functions.js)
|
||||
viewDisplay: viewDisplay,
|
||||
dayClick: dayClick,
|
||||
eventRender: eventRender,
|
||||
eventAfterRender: eventAfterRender,
|
||||
eventDrop: eventDrop,
|
||||
eventResize: eventResize,
|
||||
windowResize: windowResize
|
||||
});
|
||||
}
|
||||
|
||||
//Alert the error and reload the page
|
||||
//this function is used to resolve concurrency issue
|
||||
function alertShowErrorAndReload(){
|
||||
alert($.i18n._("The show instance doesn't exist anymore!"));
|
||||
window.location.reload();
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
$.contextMenu({
|
||||
selector: 'div.fc-event',
|
||||
trigger: "left",
|
||||
ignoreRightClick: true,
|
||||
className: 'calendar-context-menu',
|
||||
|
||||
build: function($el, e) {
|
||||
var data,
|
||||
items,
|
||||
callback;
|
||||
|
||||
data = $el.data("event");
|
||||
|
||||
function processMenuItems(oItems) {
|
||||
|
||||
//define a schedule callback.
|
||||
if (oItems.schedule !== undefined) {
|
||||
|
||||
callback = function() {
|
||||
$.post(oItems.schedule.url, {format: "json", id: data.id}, function(json){
|
||||
buildScheduleDialog(json, data.id);
|
||||
});
|
||||
};
|
||||
|
||||
oItems.schedule.callback = callback;
|
||||
}
|
||||
|
||||
//define a clear callback.
|
||||
if (oItems.clear !== undefined) {
|
||||
|
||||
callback = function() {
|
||||
if (confirm($.i18n._("Remove all content?"))) {
|
||||
$.post(oItems.clear.url, {format: "json", id: data.id}, function(json){
|
||||
scheduleRefetchEvents(json);
|
||||
});
|
||||
}
|
||||
};
|
||||
oItems.clear.callback = callback;
|
||||
}
|
||||
|
||||
//define an edit callback.
|
||||
if (oItems.edit !== undefined) {
|
||||
if(oItems.edit.items !== undefined){
|
||||
var edit = oItems.edit.items;
|
||||
|
||||
|
||||
//edit a single instance
|
||||
callback = function() {
|
||||
$.get(edit.instance.url, {format: "json", showId: data.showId, instanceId: data.id, type: "instance"}, function(json){
|
||||
beginEditShow(json);
|
||||
});
|
||||
};
|
||||
edit.instance.callback = callback;
|
||||
|
||||
//edit this instance and all
|
||||
callback = function() {
|
||||
$.get(edit.all.url, {format: "json", showId: data.showId, instanceId: data.id, type: "all"}, function(json){
|
||||
beginEditShow(json);
|
||||
});
|
||||
};
|
||||
edit.all.callback = callback;
|
||||
}else{
|
||||
callback = function() {
|
||||
$.get(oItems.edit.url, {format: "json", showId: data.showId, instanceId: data.id, type: oItems.edit._type}, function(json){
|
||||
beginEditShow(json);
|
||||
});
|
||||
};
|
||||
oItems.edit.callback = callback;
|
||||
}
|
||||
}
|
||||
|
||||
//define a content callback.
|
||||
if (oItems.content !== undefined) {
|
||||
|
||||
callback = function() {
|
||||
$.get(oItems.content.url, {format: "json", id: data.id}, function(json){
|
||||
buildContentDialog(json);
|
||||
});
|
||||
};
|
||||
oItems.content.callback = callback;
|
||||
}
|
||||
|
||||
//define a cancel recorded show callback.
|
||||
if (oItems.cancel_recorded !== undefined) {
|
||||
|
||||
callback = function() {
|
||||
confirmCancelRecordedShow(data.id);
|
||||
};
|
||||
oItems.cancel_recorded.callback = callback;
|
||||
}
|
||||
|
||||
//define a view recorded callback.
|
||||
if (oItems.view_recorded !== undefined) {
|
||||
callback = function() {
|
||||
$.get(oItems.view_recorded.url, {format: "json"}, function(json){
|
||||
//in library.js
|
||||
buildEditMetadataDialog(json);
|
||||
});
|
||||
};
|
||||
oItems.view_recorded.callback = callback;
|
||||
}
|
||||
|
||||
//define a cancel callback.
|
||||
if (oItems.cancel !== undefined) {
|
||||
|
||||
callback = function() {
|
||||
confirmCancelShow(data.id);
|
||||
};
|
||||
oItems.cancel.callback = callback;
|
||||
}
|
||||
|
||||
//define a delete callback.
|
||||
if (oItems.del !== undefined) {
|
||||
|
||||
//repeating show multiple delete options
|
||||
if (oItems.del.items !== undefined) {
|
||||
var del = oItems.del.items;
|
||||
|
||||
//delete a single instance
|
||||
callback = function() {
|
||||
$.post(del.single.url, {format: "json", id: data.id}, function(json){
|
||||
scheduleRefetchEvents(json);
|
||||
});
|
||||
};
|
||||
del.single.callback = callback;
|
||||
|
||||
//delete this instance and all following instances.
|
||||
callback = function() {
|
||||
$.post(del.following.url, {format: "json", id: data.id}, function(json){
|
||||
scheduleRefetchEvents(json);
|
||||
});
|
||||
};
|
||||
del.following.callback = callback;
|
||||
|
||||
}
|
||||
//single show
|
||||
else {
|
||||
callback = function() {
|
||||
$.post(oItems.del.url, {format: "json", id: data.id}, function(json){
|
||||
scheduleRefetchEvents(json);
|
||||
});
|
||||
};
|
||||
oItems.del.callback = callback;
|
||||
}
|
||||
}
|
||||
|
||||
items = oItems;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: baseUrl+"schedule/make-context-menu",
|
||||
type: "GET",
|
||||
data: {instanceId : data.id, showId: data.showId, format: "json"},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(json){
|
||||
processMenuItems(json.items);
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
className: 'calendar-context-menu',
|
||||
items: items,
|
||||
determinePosition : function($menu, x, y) {
|
||||
$menu.css('display', 'block')
|
||||
.position({ my: "left top", at: "right top", of: this, offset: "-20 10", collision: "fit"})
|
||||
.css('display', 'none');
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue