Integrate the schedule in the admin interface
Integrate the schedule in the admin interface while adapting it to the new associations and models.
|
|
@ -1,126 +0,0 @@
|
|||
/*
|
||||
* Date Format 1.2.3
|
||||
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
|
||||
* MIT license
|
||||
*
|
||||
* Includes enhancements by Scott Trenda <scott.trenda.net>
|
||||
* and Kris Kowal <cixar.com/~kris.kowal/>
|
||||
*
|
||||
* Accepts a date, a mask, or a date and a mask.
|
||||
* Returns a formatted version of the given date.
|
||||
* The date defaults to the current date/time.
|
||||
* The mask defaults to dateFormat.masks.default.
|
||||
*/
|
||||
|
||||
var dateFormat = function () {
|
||||
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
|
||||
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
|
||||
timezoneClip = /[^-+\dA-Z]/g,
|
||||
pad = function (val, len) {
|
||||
val = String(val);
|
||||
len = len || 2;
|
||||
while (val.length < len) val = "0" + val;
|
||||
return val;
|
||||
};
|
||||
|
||||
// Regexes and supporting functions are cached through closure
|
||||
return function (date, mask, utc) {
|
||||
var dF = dateFormat;
|
||||
|
||||
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
|
||||
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
|
||||
mask = date;
|
||||
date = undefined;
|
||||
}
|
||||
|
||||
// Passing date through Date applies Date.parse, if necessary
|
||||
date = date ? new Date(date) : new Date;
|
||||
if (isNaN(date)) throw SyntaxError("invalid date");
|
||||
|
||||
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
|
||||
|
||||
// Allow setting the utc argument via the mask
|
||||
if (mask.slice(0, 4) == "UTC:") {
|
||||
mask = mask.slice(4);
|
||||
utc = true;
|
||||
}
|
||||
|
||||
var _ = utc ? "getUTC" : "get",
|
||||
d = date[_ + "Date"](),
|
||||
D = date[_ + "Day"](),
|
||||
m = date[_ + "Month"](),
|
||||
y = date[_ + "FullYear"](),
|
||||
H = date[_ + "Hours"](),
|
||||
M = date[_ + "Minutes"](),
|
||||
s = date[_ + "Seconds"](),
|
||||
L = date[_ + "Milliseconds"](),
|
||||
o = utc ? 0 : date.getTimezoneOffset(),
|
||||
flags = {
|
||||
d: d,
|
||||
dd: pad(d),
|
||||
ddd: dF.i18n.dayNames[D],
|
||||
dddd: dF.i18n.dayNames[D + 7],
|
||||
m: m + 1,
|
||||
mm: pad(m + 1),
|
||||
mmm: dF.i18n.monthNames[m],
|
||||
mmmm: dF.i18n.monthNames[m + 12],
|
||||
yy: String(y).slice(2),
|
||||
yyyy: y,
|
||||
h: H % 12 || 12,
|
||||
hh: pad(H % 12 || 12),
|
||||
H: H,
|
||||
HH: pad(H),
|
||||
M: M,
|
||||
MM: pad(M),
|
||||
s: s,
|
||||
ss: pad(s),
|
||||
l: pad(L, 3),
|
||||
L: pad(L > 99 ? Math.round(L / 10) : L),
|
||||
t: H < 12 ? "a" : "p",
|
||||
tt: H < 12 ? "am" : "pm",
|
||||
T: H < 12 ? "A" : "P",
|
||||
TT: H < 12 ? "AM" : "PM",
|
||||
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
|
||||
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
|
||||
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
|
||||
};
|
||||
|
||||
return mask.replace(token, function ($0) {
|
||||
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
|
||||
});
|
||||
};
|
||||
}();
|
||||
|
||||
// Some common format strings
|
||||
dateFormat.masks = {
|
||||
"default": "ddd mmm dd yyyy HH:MM:ss",
|
||||
shortDate: "m/d/yy",
|
||||
mediumDate: "mmm d, yyyy",
|
||||
longDate: "mmmm d, yyyy",
|
||||
fullDate: "dddd, mmmm d, yyyy",
|
||||
shortTime: "h:MM TT",
|
||||
mediumTime: "h:MM:ss TT",
|
||||
longTime: "h:MM:ss TT Z",
|
||||
isoDate: "yyyy-mm-dd",
|
||||
isoTime: "HH:MM:ss",
|
||||
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
|
||||
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
|
||||
};
|
||||
|
||||
// Internationalization strings
|
||||
dateFormat.i18n = {
|
||||
dayNames: [
|
||||
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
|
||||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
||||
],
|
||||
monthNames: [
|
||||
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
|
||||
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
|
||||
]
|
||||
};
|
||||
|
||||
// For convenience...
|
||||
Date.prototype.format = function (mask, utc) {
|
||||
return dateFormat(this, mask, utc);
|
||||
};
|
||||
|
||||
9472
public/javascripts/schedule/jquery-1.8.3.js
vendored
|
|
@ -1,178 +0,0 @@
|
|||
Array.prototype.remove = function() {
|
||||
var what, a = arguments, L = a.length, ax;
|
||||
while (L && this.length) {
|
||||
what = a[--L];
|
||||
while ((ax = this.indexOf(what)) !== -1) {
|
||||
this.splice(ax, 1);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Date.prototype.addDays = function(days) {
|
||||
var dat = new Date(this.valueOf())
|
||||
dat.setDate(dat.getDate() + days);
|
||||
return dat;
|
||||
}
|
||||
|
||||
function getDates(startDate, stopDate) {
|
||||
var dateArray = new Array();
|
||||
var currentDate = startDate;
|
||||
while (currentDate <= stopDate) {
|
||||
dateArray.push(currentDate)
|
||||
currentDate = currentDate.addDays(1);
|
||||
}
|
||||
return dateArray;
|
||||
}
|
||||
|
||||
var scheduleDayEvents = {};
|
||||
|
||||
var Schedule = {
|
||||
loadEvents: function(conference_id, start_date) {
|
||||
var eventDates = {};
|
||||
var url = '/admin/conference/' + conference_id + '/program/events';
|
||||
var params = { start: $('#start').text(), end: $('#end').text()};
|
||||
var callback = function(data) {
|
||||
$.each(data, function(key, val) {
|
||||
Schedule.newEvent(val, conference_id);
|
||||
});
|
||||
Schedule.changeDay(start_date);
|
||||
};
|
||||
$.getJSON(url, params, callback);
|
||||
},
|
||||
newEvent: function(vars, conference_id) {
|
||||
var newEvent = $('<div>'
|
||||
+ '<div onclick="Schedule.remove(\'event-' + vars["guid"] + '\', \'' + conference_id +'\');" class="schedule-event-delete-button">X</div>'
|
||||
+ '<div>' + vars["title"] + '</div></div>');
|
||||
var date = "none";
|
||||
var hour = "12";
|
||||
var minute = "0";
|
||||
console.log(vars);
|
||||
if (vars["start_time"] != null) {
|
||||
var d = new Date(vars["start_time"]);
|
||||
date = d.getUTCFullYear() + "-"
|
||||
+ ('0' + (d.getUTCMonth() +1)).slice(-2) + '-'
|
||||
+ ('0' + d.getUTCDate()).slice(-2);
|
||||
hour = d.getUTCHours();
|
||||
minute = d.getUTCMinutes();
|
||||
console.log("date: " + d);
|
||||
}
|
||||
newEvent.addClass("schedule-event");
|
||||
newEvent.css('background-color',vars["track_color"]);
|
||||
newEvent.attr("id", "event-" + vars["guid"]);
|
||||
newEvent.attr("room", vars["room_guid"]);
|
||||
newEvent.attr("guid", vars["guid"]);
|
||||
newEvent.attr("length", vars["length"]);
|
||||
newEvent.attr("date", date);
|
||||
newEvent.attr("hour", hour);
|
||||
newEvent.attr("minute", minute);
|
||||
newEvent.draggable({
|
||||
snap: '.schedule-track-slot',
|
||||
revertDuration: 200,
|
||||
revert: function (event, ui) {
|
||||
// $(this).data("draggable").originalPosition = {
|
||||
// top: 0,
|
||||
// left: 0
|
||||
// };
|
||||
console.log(event.attr);
|
||||
return !event;
|
||||
},
|
||||
stop: function(event, ui) {
|
||||
this._originalPosition = this._originalPosition || ui.originalPosition;
|
||||
ui.helper.animate( this._originalPosition );
|
||||
},
|
||||
start: function( event, ui ) {
|
||||
$(ui.helper).height(ui.helper.attr("length") * 2 - 7);
|
||||
|
||||
},
|
||||
opacity: 0.7,
|
||||
snapMode: "inner",
|
||||
zIndex: 2
|
||||
});
|
||||
if (date == "none" || vars["room_id"] == null) {
|
||||
$('#unscheduled').append(newEvent);
|
||||
} else {
|
||||
if (!scheduleDayEvents.hasOwnProperty(date)) {
|
||||
scheduleDayEvents[date] = new Array();
|
||||
}
|
||||
newEvent.height(newEvent.attr("length") * 2 - 7);
|
||||
newEvent.width(200 - 10);
|
||||
scheduleDayEvents[date].push(newEvent);
|
||||
}
|
||||
},
|
||||
remove: function(element, conference_id) {
|
||||
var e = $("#" + element);
|
||||
var unscheduled = $("#unscheduled");
|
||||
|
||||
var url = '/admin/conference/' + conference_id + '/schedule';
|
||||
var params = {
|
||||
event: e.attr("guid"),
|
||||
room: "none",
|
||||
date: "none",
|
||||
time: "none"
|
||||
};
|
||||
var callback = function(data) {
|
||||
console.log(data);
|
||||
e.height(10);
|
||||
e.width(unscheduled.width())
|
||||
e.appendTo(unscheduled);
|
||||
}
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'PUT',
|
||||
data: params,
|
||||
success: callback,
|
||||
dataType : 'json'
|
||||
});
|
||||
},
|
||||
changeDay: function(date) {
|
||||
$(".date-selector").removeClass("active");
|
||||
$(".date-selector #" + date + "-selector").parent().addClass("active");
|
||||
$(".schedule-room-slot").attr("date", date);
|
||||
// Now clear all of the attached events
|
||||
$(".schedule-rooms-container .schedule-event").remove();
|
||||
if (scheduleDayEvents.hasOwnProperty(date)) {
|
||||
var events = scheduleDayEvents[date];
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
var elem = events[i];
|
||||
elem.draggable({
|
||||
grid: [200,31],
|
||||
snap: '.schedule-track-slot',
|
||||
revert: function (event, ui) {
|
||||
$(this).data("draggable").originalPosition = {
|
||||
top: 0,
|
||||
left: 0
|
||||
};
|
||||
return !event;
|
||||
},
|
||||
opacity: 0.7,
|
||||
snapMode: "inner",
|
||||
zIndex: 2
|
||||
});
|
||||
|
||||
var attachStr = "#schedule-room-" + elem.attr("room") + "-" + elem.attr("hour") + "-" + elem.attr("minute");
|
||||
$(attachStr).append(elem);
|
||||
}
|
||||
}
|
||||
},
|
||||
save: function (conference_id, event_id, room_id, date, time) {
|
||||
var url = '/admin/conference/' + conference_id + '/schedule';
|
||||
var params = {
|
||||
event: event_id,
|
||||
room: room_id,
|
||||
date: date,
|
||||
time: time
|
||||
};
|
||||
var callback = function(data) {
|
||||
console.log(data);
|
||||
}
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'PUT',
|
||||
data: params,
|
||||
success: callback,
|
||||
dataType : 'json'
|
||||
});
|
||||
},
|
||||
|
||||
};
|
||||
|
Before Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 178 B |
|
Before Width: | Height: | Size: 120 B |
|
Before Width: | Height: | Size: 105 B |
|
Before Width: | Height: | Size: 111 B |
|
Before Width: | Height: | Size: 110 B |
|
Before Width: | Height: | Size: 119 B |
|
Before Width: | Height: | Size: 101 B |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
|
@ -1,195 +0,0 @@
|
|||
html, body {
|
||||
height: 100%;
|
||||
overflow:hidden;
|
||||
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: #333;
|
||||
}
|
||||
.schedule-content {
|
||||
width:100%;
|
||||
height:100%;
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
font-family:Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
width: 125px;
|
||||
display : inline-block;
|
||||
background: #009ed8;
|
||||
|
||||
}
|
||||
|
||||
li:hover ul {
|
||||
display:block;
|
||||
}
|
||||
|
||||
li a {
|
||||
display: block;
|
||||
padding: 5px 10px 5px 10px;
|
||||
text-decoration: none;
|
||||
border-right: 0px solid black;
|
||||
width: auto;
|
||||
color: #fff;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
li a:hover {
|
||||
background: #80dcff;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.active {
|
||||
background: #1A6907;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
li ul {
|
||||
margin-left: 85px;
|
||||
margin-top: -25px;
|
||||
position: absolute;
|
||||
display: none;
|
||||
z-index: 99;
|
||||
display : inline-block;
|
||||
|
||||
}
|
||||
|
||||
li:hover ul {
|
||||
visibility: block;
|
||||
}
|
||||
|
||||
li ul li {
|
||||
float: none;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
li ul li a {
|
||||
width: auto;
|
||||
background: #009ed8;
|
||||
}
|
||||
|
||||
li ul li a:hover {
|
||||
background: #80dcff;
|
||||
color: #fff;
|
||||
}
|
||||
.schedule-dates-header {
|
||||
position:absolute;
|
||||
top:50px;
|
||||
left: 180px;
|
||||
right:0px;
|
||||
|
||||
}
|
||||
.unscheduled {
|
||||
border:1px solid #bbb;
|
||||
margin-right: 10px;
|
||||
top:100px;
|
||||
left:10px;
|
||||
width:200px;
|
||||
bottom:50px;
|
||||
position:absolute;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
float: left;
|
||||
width: 100%;
|
||||
height: 700px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.schedule-rooms-container {
|
||||
position:absolute;
|
||||
top:100px;
|
||||
left:220px;
|
||||
right:0px;
|
||||
bottom:50px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.schedule {
|
||||
}
|
||||
|
||||
.schedule-room-column-header {
|
||||
float:left;
|
||||
padding-top:4px;
|
||||
text-align:center;
|
||||
width: 200px;
|
||||
position: relative;
|
||||
background: #C4E2E2;
|
||||
}
|
||||
|
||||
.unscheduled-header {
|
||||
text-align:center;
|
||||
padding-top:4px;
|
||||
width: 200px;
|
||||
position: relative;
|
||||
background: #111953;
|
||||
color: white;
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
|
||||
.schedule-time-column-header {
|
||||
float:left;
|
||||
padding-top:4px;
|
||||
width: 200px;
|
||||
position: relative;
|
||||
background: #C4E2E2;
|
||||
}
|
||||
|
||||
.schedule-time-column {
|
||||
border:1px solid #bbb;
|
||||
float:left;
|
||||
position:relative;
|
||||
width:100px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.schedule-room-column {
|
||||
border:1px solid #bbb;
|
||||
float:left;
|
||||
position:relative;
|
||||
width:200px;
|
||||
}
|
||||
|
||||
.schedule-time-slot {
|
||||
border-bottom: 1px solid #bbb;
|
||||
float:left;
|
||||
position:relative;
|
||||
width:100px;
|
||||
height:30px;
|
||||
}
|
||||
|
||||
.schedule-room-slot {
|
||||
border-bottom: 1px solid #bbb;
|
||||
float:left;
|
||||
position:relative;
|
||||
width:200px;
|
||||
height:30px;
|
||||
}
|
||||
|
||||
.schedule-event {
|
||||
overflow:hidden;
|
||||
text-overflow: ellipsis;
|
||||
position:relative;
|
||||
border: 1px solid #000000;
|
||||
left: 0;
|
||||
width:200px;
|
||||
min-height:32px;
|
||||
background: #6af;
|
||||
color: #000;
|
||||
z-index:1;
|
||||
cursor:move;
|
||||
|
||||
}
|
||||
|
||||
.schedule-event-delete-button {
|
||||
position:absolute;
|
||||
top:3px;
|
||||
right:4px;
|
||||
font-weight:bold;
|
||||
cursor:pointer
|
||||
}
|
||||