Merge branch 'master' into smartblock-overflow
This commit is contained in:
commit
c7b55f60e4
72 changed files with 3804 additions and 3949 deletions
|
@ -7,6 +7,11 @@
|
|||
font-size: 12px;
|
||||
/*width: 25%;*/
|
||||
width: 310px;
|
||||
max-height: calc(100vh - 144px);
|
||||
overflow-y: scroll;
|
||||
}
|
||||
.usability_hint:not(.hidden) + .wrapper #schedule-add-show{
|
||||
max-height: calc(100vh - 172px);
|
||||
}
|
||||
|
||||
#schedule-add-show textarea {
|
||||
|
@ -85,6 +90,9 @@ label.wrapp-label input[type="checkbox"] {
|
|||
#schedule-add-show fieldset dd input[type="checkbox"] {
|
||||
margin-top: 6px;
|
||||
}
|
||||
#schedule-show-auto input[type="checkbox"] {
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
#add_show_day_check-element.block-display {
|
||||
margin-bottom: 15px;
|
||||
|
|
|
@ -314,7 +314,8 @@ a.fc-event {
|
|||
.fc-event-time,
|
||||
.fc-event-title {
|
||||
padding: 0 1px;
|
||||
}
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
|
||||
display: block;
|
||||
|
|
1
airtime_mvc/public/css/images/icon-clock.svg
Normal file
1
airtime_mvc/public/css/images/icon-clock.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g data-name="Layer 2"><g data-name="clock"><rect width="24" height="24" transform="rotate(180 12 12)" opacity="0"/><path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm4 11h-4a1 1 0 0 1-1-1V8a1 1 0 0 1 2 0v3h3a1 1 0 0 1 0 2z" fill="#fff"/></g></g></svg>
|
After Width: | Height: | Size: 313 B |
|
@ -204,14 +204,18 @@ img.logo
|
|||
.airtime_auth_help_icon, .custom_auth_help_icon, .stream_username_help_icon,
|
||||
.playlist_type_help_icon, .repeat_tracks_help_icon, .show_linking_help_icon,
|
||||
.admin_username_help_icon, .stream_type_help_icon, .overflow_tracks_help_icon,
|
||||
.show_timezone_help_icon{
|
||||
.show_timezone_help_icon, .show_autoplaylist_help_icon {
|
||||
cursor: help;
|
||||
position: relative;
|
||||
display:inline-block; zoom:1;
|
||||
width:14px; height:14px;
|
||||
background:url(images/icon_info.png) 0 0 no-repeat;
|
||||
top:2px; right:7px; left: 3px;
|
||||
left: 3px;
|
||||
line-height:16px !important;
|
||||
vertical-align: text-top;
|
||||
}
|
||||
.qtip a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Clearfix */
|
||||
|
@ -2040,7 +2044,7 @@ span.errors.sp-errors{
|
|||
margin: 0 0 8px 0;
|
||||
}
|
||||
#schedule-add-show .button-bar.bottom {
|
||||
margin: 16px 0 0;
|
||||
margin: 16px 0 8px;
|
||||
}
|
||||
.schedule {
|
||||
text-align:left;
|
||||
|
@ -2268,14 +2272,15 @@ span.errors.sp-errors{
|
|||
height:10px;
|
||||
float:right;
|
||||
margin-left:3px;
|
||||
margin-top:2px;
|
||||
}
|
||||
.small-icon.linked {
|
||||
background:url(images/icon_link.png) no-repeat 0 0;
|
||||
margin-top: 0px !important;
|
||||
}
|
||||
.small-icon.autoplaylist {
|
||||
background:url(images/icon_alert_cal_autoplaylist.png) no-repeat 0 0;
|
||||
background: url(images/icon-clock.svg) black no-repeat center center;
|
||||
border-radius: 2px;
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
.small-icon.recording {
|
||||
|
@ -2888,7 +2893,6 @@ dt.block-display.info-block {
|
|||
text-align:center;
|
||||
letter-spacing:-.3px;
|
||||
text-shadow: rgba(248,248,248,.3) 0 1px 0, rgba(0,0,0,.8) 0 -1px 0;
|
||||
rgba(51,51,51,.9)
|
||||
}
|
||||
.error-content p {
|
||||
color: #acacac;
|
||||
|
|
|
@ -310,17 +310,6 @@ function setAddShowEvents(form) {
|
|||
$(this).blur();
|
||||
form.find("#add_show_playlist_dropdown").toggle();
|
||||
form.find("#add_show_autoplaylist_repeat").toggle();
|
||||
|
||||
var checkBoxSelected = false;
|
||||
|
||||
//must switch rebroadcast displays
|
||||
if(form.find("#add_show_has_autoplaylist").attr('checked')) {
|
||||
form.find("#add_show_playlist_dropdown").show();
|
||||
form.find("#add_show_autoplaylist_repeat").show();
|
||||
}
|
||||
else {
|
||||
form.find("#add_show_playlist_downdown").hide();
|
||||
}
|
||||
});
|
||||
|
||||
form.find("#add_show_repeats").click(function(){
|
||||
|
@ -491,6 +480,27 @@ function setAddShowEvents(form) {
|
|||
at: "right center"
|
||||
}
|
||||
});
|
||||
|
||||
form.find(".show_autoplaylist_help_icon").qtip({
|
||||
content: {
|
||||
text: $.i18n._("Autoloading playlists' contents are added to shows one hour before the show airs. <a target='_blank' href='http://libretime.org/manual/calendar/#autoloading-playlist'>More information</a>")
|
||||
},
|
||||
hide: {
|
||||
delay: 500,
|
||||
fixed: true
|
||||
},
|
||||
style: {
|
||||
border: {
|
||||
width: 0,
|
||||
radius: 4
|
||||
},
|
||||
classes: "ui-tooltip-dark ui-tooltip-rounded"
|
||||
},
|
||||
position: {
|
||||
my: "left bottom",
|
||||
at: "right center"
|
||||
}
|
||||
});
|
||||
|
||||
form.find(".airtime_auth_help_icon").qtip({
|
||||
content: {
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
*/
|
||||
|
||||
function scheduleRefetchEvents(json) {
|
||||
if(json.show_error == true){
|
||||
if (json.show_error == true) {
|
||||
alert($.i18n._("The show instance doesn't exist anymore!"));
|
||||
}
|
||||
if(json.show_id) {
|
||||
if (json.show_id) {
|
||||
var dialog_id = parseInt($("#add_show_id").val(), 10);
|
||||
|
||||
//if you've deleted the show you are currently editing, close the add show dialog.
|
||||
|
@ -16,10 +16,10 @@ function scheduleRefetchEvents(json) {
|
|||
$("#add-show-close").click();
|
||||
}
|
||||
}
|
||||
$("#schedule_calendar").fullCalendar( 'refetchEvents' );
|
||||
$("#schedule_calendar").fullCalendar('refetchEvents');
|
||||
}
|
||||
|
||||
function makeTimeStamp(date){
|
||||
function makeTimeStamp(date) {
|
||||
var sy, sm, sd, h, m, s, timestamp;
|
||||
sy = date.getFullYear();
|
||||
sm = date.getMonth() + 1;
|
||||
|
@ -28,19 +28,19 @@ function makeTimeStamp(date){
|
|||
m = date.getMinutes();
|
||||
s = date.getSeconds();
|
||||
|
||||
timestamp = sy+"-"+ pad(sm, 2) +"-"+ pad(sd, 2) +" "+ pad(h, 2) +":"+ pad(m, 2) +":"+ pad(s, 2);
|
||||
timestamp = sy + "-" + pad(sm, 2) + "-" + pad(sd, 2) + " " + pad(h, 2) + ":" + pad(m, 2) + ":" + pad(s, 2);
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
function dayClick(date, allDay, jsEvent, view){
|
||||
function dayClick(date, allDay, jsEvent, view) {
|
||||
// The show from will be preloaded if the user is admin or program manager.
|
||||
// Hence, if the user if DJ then it won't open anything.
|
||||
if(userType == "S" || userType == "A" || userType == "P"){
|
||||
if (userType == "S" || userType == "A" || userType == "P") {
|
||||
var now, today, selected, chosenDate, chosenTime;
|
||||
|
||||
now = adjustDateToServerDate(new Date(), serverTimezoneOffset);
|
||||
|
||||
if(view.name === "month") {
|
||||
if (view.name === "month") {
|
||||
today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
selected = new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
||||
}
|
||||
|
@ -49,12 +49,12 @@ function dayClick(date, allDay, jsEvent, view){
|
|||
selected = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
|
||||
}
|
||||
|
||||
if(selected >= today) {
|
||||
if (selected >= today) {
|
||||
var addShow = $('.add-button');
|
||||
|
||||
//remove the +show button if it exists.
|
||||
if(addShow.length == 1){
|
||||
var span = $(addShow).parent();
|
||||
if (addShow.length == 1) {
|
||||
var span = $(addShow).parent();
|
||||
|
||||
$(span).next().remove();
|
||||
$(span).remove();
|
||||
|
@ -65,10 +65,10 @@ function dayClick(date, allDay, jsEvent, view){
|
|||
var duration_info = duration_string.split(" ");
|
||||
var duration_h = 0;
|
||||
var duration_m = 0;
|
||||
if(duration_info[0] != null){
|
||||
if (duration_info[0] != null) {
|
||||
duration_h = parseInt(duration_info[0], 10);
|
||||
}
|
||||
if(duration_info[1] != null){
|
||||
if (duration_info[1] != null) {
|
||||
duration_m = parseInt(duration_info[1], 10);
|
||||
}
|
||||
// duration in milisec
|
||||
|
@ -77,28 +77,28 @@ function dayClick(date, allDay, jsEvent, view){
|
|||
var startTime_string;
|
||||
var startTime = 0;
|
||||
// get start time value on the form
|
||||
if(view.name === "month") {
|
||||
if (view.name === "month") {
|
||||
startTime_string = $("#add_show_start_time").val();
|
||||
var startTime_info = startTime_string.split(':');
|
||||
if (startTime_info.length == 2) {
|
||||
var start_time_temp = (parseInt(startTime_info[0],10) * 60 * 60 * 1000)
|
||||
var start_time_temp = (parseInt(startTime_info[0], 10) * 60 * 60 * 1000)
|
||||
+ (parseInt(startTime_info[1], 10) * 60 * 1000);
|
||||
if (!isNaN(start_time_temp)) {
|
||||
startTime = start_time_temp;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
// if in day or week view, selected has all the time info as well
|
||||
// so we don't ahve to calculate it explicitly
|
||||
startTime_string = pad(selected.getHours(),2)+":"+pad(selected.getMinutes(),2)
|
||||
startTime_string = pad(selected.getHours(), 2) + ":" + pad(selected.getMinutes(), 2)
|
||||
startTime = 0
|
||||
}
|
||||
|
||||
// calculate endDateTime
|
||||
var endDateTime = new Date(selected.getTime() + startTime + duration);
|
||||
|
||||
chosenDate = selected.getFullYear() + '-' + pad(selected.getMonth()+1,2) + '-' + pad(selected.getDate(),2);
|
||||
var endDateFormat = endDateTime.getFullYear() + '-' + pad(endDateTime.getMonth()+1,2) + '-' + pad(endDateTime.getDate(),2);
|
||||
chosenDate = selected.getFullYear() + '-' + pad(selected.getMonth() + 1, 2) + '-' + pad(selected.getDate(), 2);
|
||||
var endDateFormat = endDateTime.getFullYear() + '-' + pad(endDateTime.getMonth() + 1, 2) + '-' + pad(endDateTime.getDate(), 2);
|
||||
|
||||
|
||||
//TODO: This should all be refactored into a proper initialize() function for the show form.
|
||||
|
@ -108,8 +108,8 @@ function dayClick(date, allDay, jsEvent, view){
|
|||
$("#add_show_start_date").val(chosenDate);
|
||||
$("#add_show_end_date_no_repeat").val(endDateFormat);
|
||||
$("#add_show_end_date").val(endDateFormat);
|
||||
if(view.name !== "month") {
|
||||
var endTimeString = pad(endDateTime.getHours(),2)+":"+pad(endDateTime.getMinutes(),2);
|
||||
if (view.name !== "month") {
|
||||
var endTimeString = pad(endDateTime.getHours(), 2) + ":" + pad(endDateTime.getMinutes(), 2);
|
||||
$("#add_show_start_time").val(startTime_string)
|
||||
$("#add_show_end_time").val(endTimeString)
|
||||
}
|
||||
|
@ -123,21 +123,21 @@ function dayClick(date, allDay, jsEvent, view){
|
|||
}
|
||||
}
|
||||
|
||||
function viewDisplay( view ) {
|
||||
function viewDisplay(view) {
|
||||
view_name = view.name;
|
||||
|
||||
if(view.name === 'agendaDay' || view.name === 'agendaWeek') {
|
||||
|
||||
if (view.name === 'agendaDay' || view.name === 'agendaWeek') {
|
||||
|
||||
var calendarEl = this;
|
||||
|
||||
var select = $('<select class="schedule_change_slots input_select"/>')
|
||||
.append('<option value="1">'+$.i18n._("1m")+'</option>')
|
||||
.append('<option value="5">'+$.i18n._("5m")+'</option>')
|
||||
.append('<option value="10">'+$.i18n._("10m")+'</option>')
|
||||
.append('<option value="15">'+$.i18n._("15m")+'</option>')
|
||||
.append('<option value="30">'+$.i18n._("30m")+'</option>')
|
||||
.append('<option value="60">'+$.i18n._("60m")+'</option>')
|
||||
.change(function(){
|
||||
.append('<option value="1">' + $.i18n._("1m") + '</option>')
|
||||
.append('<option value="5">' + $.i18n._("5m") + '</option>')
|
||||
.append('<option value="10">' + $.i18n._("10m") + '</option>')
|
||||
.append('<option value="15">' + $.i18n._("15m") + '</option>')
|
||||
.append('<option value="30">' + $.i18n._("30m") + '</option>')
|
||||
.append('<option value="60">' + $.i18n._("60m") + '</option>')
|
||||
.change(function () {
|
||||
var slotMin = $(this).val();
|
||||
var opt = view.calendar.options;
|
||||
var date = $(calendarEl).fullCalendar('getDate');
|
||||
|
@ -150,11 +150,11 @@ function viewDisplay( view ) {
|
|||
$(calendarEl)
|
||||
.fullCalendar('destroy')
|
||||
.fullCalendar(opt)
|
||||
.fullCalendar( 'gotoDate', date );
|
||||
.fullCalendar('gotoDate', date);
|
||||
|
||||
//save slotMin value to db
|
||||
var url = baseUrl+'Schedule/set-time-interval/format/json';
|
||||
$.post(url, {timeInterval: slotMin});
|
||||
var url = baseUrl + 'Schedule/set-time-interval/format/json';
|
||||
$.post(url, { timeInterval: slotMin });
|
||||
});
|
||||
|
||||
var topLeft = $(view.element).find("table.fc-agenda-days > thead th:first");
|
||||
|
@ -166,33 +166,33 @@ function viewDisplay( view ) {
|
|||
.append(select);
|
||||
|
||||
var slotMin = view.calendar.options.slotMinutes;
|
||||
$('.schedule_change_slots option[value="'+slotMin+'"]').attr('selected', 'selected');
|
||||
$('.schedule_change_slots option[value="' + slotMin + '"]').attr('selected', 'selected');
|
||||
}
|
||||
|
||||
if(($("#add-show-form").length == 1) && ($("#add-show-form").css('display')=='none') && ($('.fc-header-left > span').length == 5)) {
|
||||
if (($("#add-show-form").length == 1) && ($("#add-show-form").css('display') == 'none') && ($('.fc-header-left > span').length == 5)) {
|
||||
|
||||
//userType is defined in bootstrap.php, and is derived from the currently logged in user.
|
||||
if(userType == "S" || userType == "A" || userType == "P"){
|
||||
if (userType == "S" || userType == "A" || userType == "P") {
|
||||
makeAddShowButton();
|
||||
}
|
||||
}
|
||||
|
||||
//save view name to db if it was changed
|
||||
if (calendarPref.timeScale !== view.name) {
|
||||
var url = baseUrl+'Schedule/set-time-scale/format/json';
|
||||
$.post(url, {timeScale: view.name});
|
||||
var url = baseUrl + 'Schedule/set-time-scale/format/json';
|
||||
$.post(url, { timeScale: view.name });
|
||||
calendarPref.timeScale = view.name;
|
||||
}
|
||||
}
|
||||
|
||||
function eventRender(event, element, view) {
|
||||
$(element).addClass("fc-show-instance-"+event.id);
|
||||
$(element).addClass("fc-show-instance-" + event.id);
|
||||
$(element).attr("data-show-id", event.showId);
|
||||
$(element).attr("data-show-linked", event.linked);
|
||||
$(element).data("event", event);
|
||||
|
||||
//only put progress bar on shows that aren't being recorded.
|
||||
if((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.record === 0) {
|
||||
if ((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.record === 0) {
|
||||
var div = $('<div/>');
|
||||
div
|
||||
.height('5px')
|
||||
|
@ -212,15 +212,15 @@ function eventRender(event, element, view) {
|
|||
if (event.show_empty === 1) {
|
||||
if (event.linked) {
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon linked"></span><span class="small-icon show-empty"></span>');
|
||||
// in theory a linked show shouldn't have an automatic playlist so adding this here
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon linked"></span><span class="small-icon show-empty"></span>');
|
||||
// in theory a linked show shouldn't have an automatic playlist so adding this here
|
||||
} else if (event.show_has_auto_playlist === true) {
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon autoplaylist"></span><span class="small-icon show-empty"></span>');
|
||||
.before('<span class="small-icon autoplaylist"></span>');
|
||||
}
|
||||
else {
|
||||
else {
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon show-empty"></span>');
|
||||
|
@ -231,10 +231,10 @@ function eventRender(event, element, view) {
|
|||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon linked"></span><span class="small-icon show-partial-filled"></span>');
|
||||
} else if (event.show_has_auto_playlist === true) {
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon autoplaylist"></span><span class="small-icon show-partial-filled"></span>');
|
||||
} else {
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon autoplaylist"></span>');
|
||||
} else {
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon show-partial-filled"></span>');
|
||||
|
@ -245,25 +245,25 @@ function eventRender(event, element, view) {
|
|||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon linked"></span>');
|
||||
} else if (event.show_has_auto_playlist === true) {
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon autoplaylist"></span>');
|
||||
$(element)
|
||||
.find(".fc-event-time")
|
||||
.before('<span class="small-icon autoplaylist"></span>');
|
||||
}
|
||||
}
|
||||
} else if (view.name === 'month') {
|
||||
if (event.show_empty === 1) {
|
||||
if (event.linked) {
|
||||
$(element)
|
||||
$(element)
|
||||
.find(".fc-event-title")
|
||||
.after('<span class="small-icon linked"></span><span title="'+$.i18n._("Show is empty")+'" class="small-icon show-empty"></span>');
|
||||
.after('<span class="small-icon linked"></span><span title="' + $.i18n._("Show is empty") + '" class="small-icon show-empty"></span>');
|
||||
} else if (event.show_has_auto_playlist === true) {
|
||||
$(element)
|
||||
$(element)
|
||||
.find(".fc-event-title")
|
||||
.after('<span title="'+$.i18n._("Show has an automatic playlist")+'"class="small-icon autoplaylist"></span><span title="'+$.i18n._("Show is empty")+'" class="small-icon show-empty"></span>');
|
||||
.after('<span title="' + $.i18n._("Show has an automatic playlist") + '"class="small-icon autoplaylist"></span>');
|
||||
} else {
|
||||
$(element)
|
||||
$(element)
|
||||
.find(".fc-event-title")
|
||||
.after('<span title="'+$.i18n._("Show is empty")+'" class="small-icon show-empty"></span>');
|
||||
.after('<span title="' + $.i18n._("Show is empty") + '" class="small-icon show-empty"></span>');
|
||||
}
|
||||
} else if (event.show_partial_filled === true) {
|
||||
if (event.linked) {
|
||||
|
@ -271,13 +271,13 @@ function eventRender(event, element, view) {
|
|||
.find(".fc-event-title")
|
||||
.after('<span class="small-icon linked"></span><span title="' + $.i18n._("Show is partially filled") + '" class="small-icon show-partial-filled"></span>');
|
||||
} else if (event.show_has_auto_playlist === true) {
|
||||
$(element)
|
||||
$(element)
|
||||
.find(".fc-event-title")
|
||||
.after('<span title="'+$.i18n._("Show has an automatic playlist")+'"class="small-icon autoplaylist"></span><span title="'+$.i18n._("Show is partially filled")+'" class="small-icon show-partial-filled"></span>');
|
||||
.after('<span title="' + $.i18n._("Show has an automatic playlist") + '"class="small-icon autoplaylist"></span>');
|
||||
} else {
|
||||
$(element)
|
||||
$(element)
|
||||
.find(".fc-event-title")
|
||||
.after('<span title="'+$.i18n._("Show is partially filled")+'" class="small-icon show-partial-filled"></span>');
|
||||
.after('<span title="' + $.i18n._("Show is partially filled") + '" class="small-icon show-partial-filled"></span>');
|
||||
}
|
||||
} else {
|
||||
if (event.linked) {
|
||||
|
@ -301,44 +301,44 @@ function eventRender(event, element, view) {
|
|||
$(element).find(".fc-event-title").after('<span class="small-icon rebroadcast"></span>');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//now playing icon.
|
||||
var span = '<span class="small-icon now-playing"></span>';
|
||||
|
||||
if (event.nowPlaying === true) {
|
||||
|
||||
if (view_name === 'agendaDay' || view_name === 'agendaWeek') {
|
||||
|
||||
$(element).find(".fc-event-time").before(span);
|
||||
}
|
||||
else if (view_name === 'month') {
|
||||
|
||||
$(element).find(".fc-event-title").after(span);
|
||||
}
|
||||
}
|
||||
if (event.nowPlaying === true) {
|
||||
|
||||
if (view_name === 'agendaDay' || view_name === 'agendaWeek') {
|
||||
|
||||
$(element).find(".fc-event-time").before(span);
|
||||
}
|
||||
else if (view_name === 'month') {
|
||||
|
||||
$(element).find(".fc-event-title").after(span);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function eventAfterRender( event, element, view ) {
|
||||
function eventAfterRender(event, element, view) {
|
||||
|
||||
$(element).find(".small-icon").live('mouseover',function(){
|
||||
$(element).find(".small-icon").live('mouseover', function () {
|
||||
addQtipsToIcons($(this), event.id);
|
||||
});
|
||||
}
|
||||
|
||||
function eventDrop(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view) {
|
||||
var url = baseUrl+'Schedule/move-show/format/json';
|
||||
var url = baseUrl + 'Schedule/move-show/format/json';
|
||||
|
||||
$.post(url,
|
||||
{day: dayDelta, min: minuteDelta, showInstanceId: event.id},
|
||||
function(json){
|
||||
if(json.show_error == true){
|
||||
{ day: dayDelta, min: minuteDelta, showInstanceId: event.id },
|
||||
function (json) {
|
||||
if (json.show_error == true) {
|
||||
alertShowErrorAndReload();
|
||||
}
|
||||
if(json.error) {
|
||||
if (json.error) {
|
||||
alert(json.error);
|
||||
revertFunc();
|
||||
}
|
||||
|
||||
|
||||
//Workaround for cases where FullCalendar handles events over DST
|
||||
//time changes in a different way than Airtime does.
|
||||
//(Airtime preserves show duration, FullCalendar doesn't.)
|
||||
|
@ -347,16 +347,16 @@ function eventDrop(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui
|
|||
});
|
||||
}
|
||||
|
||||
function eventResize( event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view ) {
|
||||
var url = baseUrl+'Schedule/resize-show/format/json';
|
||||
function eventResize(event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view) {
|
||||
var url = baseUrl + 'Schedule/resize-show/format/json';
|
||||
|
||||
$.post(url,
|
||||
{day: dayDelta, min: minuteDelta, showId: event.showId, instanceId: event.id},
|
||||
function(json){
|
||||
if(json.show_error == true){
|
||||
{ day: dayDelta, min: minuteDelta, showId: event.showId, instanceId: event.id },
|
||||
function (json) {
|
||||
if (json.show_error == true) {
|
||||
alertShowErrorAndReload();
|
||||
}
|
||||
if(json.error) {
|
||||
if (json.error) {
|
||||
alert(json.error);
|
||||
revertFunc();
|
||||
}
|
||||
|
@ -365,20 +365,20 @@ function eventResize( event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, vie
|
|||
});
|
||||
}
|
||||
|
||||
function windowResize() {
|
||||
// 200 px for top dashboard and 50 for padding on main content
|
||||
// this calculation was copied from schedule.js line 326
|
||||
var mainHeight = $(window).height() - 200 - 24;
|
||||
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight);
|
||||
function windowResize() {
|
||||
// 200 px for top dashboard and 50 for padding on main content
|
||||
// this calculation was copied from schedule.js line 326
|
||||
var mainHeight = $(window).height() - 200 - 24;
|
||||
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight);
|
||||
}
|
||||
|
||||
function preloadEventFeed () {
|
||||
createFullCalendar({calendarInit: calendarPref});
|
||||
function preloadEventFeed() {
|
||||
createFullCalendar({ calendarInit: calendarPref });
|
||||
}
|
||||
|
||||
var initialLoad = true;
|
||||
function getFullCalendarEvents(start, end, callback) {
|
||||
|
||||
|
||||
if (initialLoad) {
|
||||
initialLoad = false;
|
||||
callback(calendarEvents);
|
||||
|
@ -387,39 +387,39 @@ function getFullCalendarEvents(start, end, callback) {
|
|||
|
||||
start_date = makeTimeStamp(start);
|
||||
end_date = makeTimeStamp(end);
|
||||
url = baseUrl+'Schedule/event-feed';
|
||||
url = baseUrl + 'Schedule/event-feed';
|
||||
|
||||
var d = new Date();
|
||||
$.post(url, {format: "json", start: start_date, end: end_date, cachep: d.getTime()}, function(json){
|
||||
callback(json.events);
|
||||
getUsabilityHint();
|
||||
});
|
||||
$.post(url, { format: "json", start: start_date, end: end_date, cachep: d.getTime() }, function (json) {
|
||||
callback(json.events);
|
||||
getUsabilityHint();
|
||||
});
|
||||
}
|
||||
|
||||
$(".fc-button").addClass("btn").addClass("btn-small");
|
||||
//$("span.fc-button > :button").addClass("btn btn-small");
|
||||
}
|
||||
|
||||
function checkSCUploadStatus(){
|
||||
var url = baseUrl+'Library/get-upload-to-soundcloud-status/format/json',
|
||||
id;
|
||||
$("span[class*=progress]").each(function(){
|
||||
function checkSCUploadStatus() {
|
||||
var url = baseUrl + 'Library/get-upload-to-soundcloud-status/format/json',
|
||||
id;
|
||||
$("span[class*=progress]").each(function () {
|
||||
id = $(this).parents("div.fc-event").data("event").id;
|
||||
|
||||
$.post(url, {format: "json", id: id, type:"show"}, function(json){
|
||||
if (json.sc_id > 0){
|
||||
$(".fc-show-instance-"+id)
|
||||
.find(".progress")
|
||||
.removeClass("progress")
|
||||
.addClass("soundcloud");
|
||||
|
||||
$.post(url, { format: "json", id: id, type: "show" }, function (json) {
|
||||
if (json.sc_id > 0) {
|
||||
$(".fc-show-instance-" + id)
|
||||
.find(".progress")
|
||||
.removeClass("progress")
|
||||
.addClass("soundcloud");
|
||||
}
|
||||
else if (json.sc_id == "-3"){
|
||||
$(".fc-show-instance-"+id)
|
||||
.find(".progress")
|
||||
.removeClass("progress")
|
||||
.addClass("sc-error");
|
||||
else if (json.sc_id == "-3") {
|
||||
$(".fc-show-instance-" + id)
|
||||
.find(".progress")
|
||||
.removeClass("progress")
|
||||
.addClass("sc-error");
|
||||
}
|
||||
|
||||
|
||||
setTimeout(checkSCUploadStatus, 5000);
|
||||
});
|
||||
});
|
||||
|
@ -429,47 +429,47 @@ function checkSCUploadStatus(){
|
|||
* show icon
|
||||
*/
|
||||
function getCurrentShow() {
|
||||
|
||||
var url = baseUrl+'Schedule/get-current-show/format/json';
|
||||
|
||||
|
||||
var url = baseUrl + 'Schedule/get-current-show/format/json';
|
||||
|
||||
function addNowPlaying(json) {
|
||||
|
||||
var $el,
|
||||
span = '<span class="small-icon now-playing"></span>';
|
||||
|
||||
$(".now-playing").remove();
|
||||
|
||||
|
||||
var $el,
|
||||
span = '<span class="small-icon now-playing"></span>';
|
||||
|
||||
$(".now-playing").remove();
|
||||
|
||||
if (json.current_show === true) {
|
||||
|
||||
$el = $(".fc-show-instance-"+json.si_id);
|
||||
|
||||
if (view_name === 'agendaDay' || view_name === 'agendaWeek') {
|
||||
|
||||
$el.find(".fc-event-time").before(span);
|
||||
}
|
||||
else if (view_name === 'month') {
|
||||
|
||||
$el.find(".fc-event-title").after(span);
|
||||
}
|
||||
|
||||
$el = $(".fc-show-instance-" + json.si_id);
|
||||
|
||||
if (view_name === 'agendaDay' || view_name === 'agendaWeek') {
|
||||
|
||||
$el.find(".fc-event-time").before(span);
|
||||
}
|
||||
else if (view_name === 'month') {
|
||||
|
||||
$el.find(".fc-event-title").after(span);
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout(getCurrentShow, 5000);
|
||||
}
|
||||
|
||||
$.post(url, {format: "json"}, addNowPlaying);
|
||||
|
||||
$.post(url, { format: "json" }, addNowPlaying);
|
||||
}
|
||||
|
||||
function addQtipsToIcons(ele, id){
|
||||
|
||||
if ($(ele).hasClass("progress")){
|
||||
function addQtipsToIcons(ele, id) {
|
||||
|
||||
if ($(ele).hasClass("progress")) {
|
||||
$(ele).qtip({
|
||||
content: {
|
||||
text: $.i18n._("Uploading in progress...")
|
||||
},
|
||||
position:{
|
||||
position: {
|
||||
adjust: {
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
},
|
||||
at: "right center",
|
||||
my: "left top",
|
||||
|
@ -482,23 +482,23 @@ function addQtipsToIcons(ele, id){
|
|||
ready: true // Needed to make it show on first mouseover event
|
||||
}
|
||||
});
|
||||
}else if($(ele).hasClass("soundcloud")){
|
||||
} else if ($(ele).hasClass("soundcloud")) {
|
||||
$(ele).qtip({
|
||||
content: {
|
||||
text: $.i18n._("Retreiving data from the server..."),
|
||||
ajax: {
|
||||
url: baseUrl+"Library/get-upload-to-soundcloud-status",
|
||||
url: baseUrl + "Library/get-upload-to-soundcloud-status",
|
||||
type: "post",
|
||||
data: ({format: "json", id : id, type: "show"}),
|
||||
success: function(json, status){
|
||||
this.set('content.text', $.i18n._("The soundcloud id for this file is: ")+json.sc_id);
|
||||
data: ({ format: "json", id: id, type: "show" }),
|
||||
success: function (json, status) {
|
||||
this.set('content.text', $.i18n._("The soundcloud id for this file is: ") + json.sc_id);
|
||||
}
|
||||
}
|
||||
},
|
||||
position:{
|
||||
position: {
|
||||
adjust: {
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
},
|
||||
at: "right center",
|
||||
my: "left top",
|
||||
|
@ -511,24 +511,24 @@ function addQtipsToIcons(ele, id){
|
|||
ready: true // Needed to make it show on first mouseover event
|
||||
}
|
||||
});
|
||||
}else if($(ele).hasClass("sc-error")){
|
||||
} else if ($(ele).hasClass("sc-error")) {
|
||||
$(ele).qtip({
|
||||
content: {
|
||||
text: $.i18n._("Retreiving data from the server..."),
|
||||
ajax: {
|
||||
url: baseUrl+"Library/get-upload-to-soundcloud-status",
|
||||
url: baseUrl + "Library/get-upload-to-soundcloud-status",
|
||||
type: "post",
|
||||
data: ({format: "json", id : id, type: "show"}),
|
||||
success: function(json, status){
|
||||
this.set('content.text', $.i18n._("There was error while uploading to soundcloud.")+"<br>"+$.i18n._("Error code: ")+json.error_code+
|
||||
"<br>"+$.i18n._("Error msg: ")+json.error_msg+"<br>");
|
||||
data: ({ format: "json", id: id, type: "show" }),
|
||||
success: function (json, status) {
|
||||
this.set('content.text', $.i18n._("There was error while uploading to soundcloud.") + "<br>" + $.i18n._("Error code: ") + json.error_code +
|
||||
"<br>" + $.i18n._("Error msg: ") + json.error_msg + "<br>");
|
||||
}
|
||||
}
|
||||
},
|
||||
position:{
|
||||
position: {
|
||||
adjust: {
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
},
|
||||
at: "right center",
|
||||
my: "left top",
|
||||
|
@ -541,15 +541,15 @@ function addQtipsToIcons(ele, id){
|
|||
ready: true // Needed to make it show on first mouseover event
|
||||
}
|
||||
});
|
||||
}else if ($(ele).hasClass("show-empty")){
|
||||
} else if ($(ele).hasClass("show-empty")) {
|
||||
$(ele).qtip({
|
||||
content: {
|
||||
text: $.i18n._("This show has no scheduled content.")
|
||||
},
|
||||
position:{
|
||||
position: {
|
||||
adjust: {
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
},
|
||||
at: "right center",
|
||||
my: "left top",
|
||||
|
@ -562,15 +562,15 @@ function addQtipsToIcons(ele, id){
|
|||
ready: true // Needed to make it show on first mouseover event
|
||||
}
|
||||
});
|
||||
} else if ($(ele).hasClass("show-partial-filled")){
|
||||
} else if ($(ele).hasClass("show-partial-filled")) {
|
||||
$(ele).qtip({
|
||||
content: {
|
||||
text: $.i18n._("This show is not completely filled with content.")
|
||||
},
|
||||
position:{
|
||||
position: {
|
||||
adjust: {
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
resize: true,
|
||||
method: "flip flip"
|
||||
},
|
||||
at: "right center",
|
||||
my: "left top",
|
||||
|
@ -587,12 +587,12 @@ function addQtipsToIcons(ele, id){
|
|||
}
|
||||
//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();
|
||||
function alertShowErrorAndReload() {
|
||||
alert($.i18n._("The show instance doesn't exist anymore!"));
|
||||
window.location.reload();
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$(document).ready(function () {
|
||||
preloadEventFeed();
|
||||
checkSCUploadStatus();
|
||||
getCurrentShow();
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,19 +1,19 @@
|
|||
//Serbian Latin
|
||||
|
||||
{
|
||||
"sProcessing": "Obrada...",
|
||||
"sLengthMenu": "_MENU_ Rezultati po stranici",
|
||||
"sZeroRecords": "Ništa nije pronađeno",
|
||||
"sInfo": "Rezultati: _START_ - _END_ Ukupno: _TOTAL_",
|
||||
"sInfoEmpty": "Nula Rezultat",
|
||||
"sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Filter",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Prva",
|
||||
"sPrevious": "Nazad",
|
||||
"sNext": "Napred",
|
||||
"sLast": "Zadnja"
|
||||
}
|
||||
//Serbian Latin
|
||||
|
||||
{
|
||||
"sProcessing": "Obrada...",
|
||||
"sLengthMenu": "_MENU_ Rezultati po stranici",
|
||||
"sZeroRecords": "Ništa nije pronađeno",
|
||||
"sInfo": "Rezultati: _START_ - _END_ Ukupno: _TOTAL_",
|
||||
"sInfoEmpty": "Nula Rezultat",
|
||||
"sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)",
|
||||
"sInfoPostFix": "",
|
||||
"sSearch": "Filter",
|
||||
"sUrl": "",
|
||||
"oPaginate": {
|
||||
"sFirst": "Prva",
|
||||
"sPrevious": "Nazad",
|
||||
"sNext": "Napred",
|
||||
"sLast": "Zadnja"
|
||||
}
|
||||
}
|
|
@ -1,111 +1,111 @@
|
|||
/*
|
||||
* jQuery.stickyPanel
|
||||
* ----------------------
|
||||
* version: 1.4.1
|
||||
* date: 7/21/11
|
||||
*
|
||||
* Copyright (c) 2011 Donny Velazquez
|
||||
* http://donnyvblog.blogspot.com/
|
||||
* http://code.google.com/p/sticky-panel/
|
||||
*
|
||||
* Licensed under the Apache License 2.0
|
||||
*
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
$.fn.stickyPanel = function (options) {
|
||||
|
||||
var options = $.extend({}, $.fn.stickyPanel.defaults, options);
|
||||
|
||||
return this.each(function () {
|
||||
$(window).bind("scroll.stickyPanel", { selected: $(this), options: options }, Scroll);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
function Scroll(event) {
|
||||
|
||||
var node = event.data.selected;
|
||||
var o = event.data.options;
|
||||
|
||||
var isMobile = navigator.userAgent.toLowerCase().indexOf('mobile') > 0;
|
||||
|
||||
var windowHeight = $(window).height();
|
||||
var nodeHeight = node.outerHeight(true);
|
||||
var scrollTop = $(document).scrollTop();
|
||||
|
||||
// when top of window reaches the top of the panel detach
|
||||
if (!isMobile &&
|
||||
scrollTop <= $(document).height() - windowHeight && // Fix for rubberband scrolling in Safari on Lion
|
||||
scrollTop > node.offset().top - o.topPadding) {
|
||||
|
||||
// topPadding
|
||||
var newNodeTop = 0;
|
||||
if (o.topPadding != "undefined") {
|
||||
newNodeTop = newNodeTop + o.topPadding;
|
||||
}
|
||||
|
||||
// get left before adding spacer
|
||||
var nodeLeft = node.offset().left;
|
||||
|
||||
// save panels top
|
||||
node.data("PanelsTop", node.offset().top - newNodeTop);
|
||||
|
||||
// MOVED: savePanelSpace before afterDetachCSSClass to handle afterDetachCSSClass changing size of node
|
||||
// savePanelSpace
|
||||
if (o.savePanelSpace == true) {
|
||||
var nodeWidth = node.outerWidth(true);
|
||||
var nodeCssfloat = node.css("float");
|
||||
var nodeCssdisplay = node.css("display");
|
||||
var randomNum = Math.ceil(Math.random() * 9999); /* Pick random number between 1 and 9999 */
|
||||
node.data("PanelSpaceID", "stickyPanelSpace" + randomNum);
|
||||
node.before("<div id='" + node.data("PanelSpaceID") + "' style='width:" + nodeWidth + "px;height:" + nodeHeight + "px;float:" + nodeCssfloat + ";display:" + nodeCssdisplay + ";'> </div>");
|
||||
}
|
||||
|
||||
// afterDetachCSSClass
|
||||
if (o.afterDetachCSSClass != "") {
|
||||
node.addClass(o.afterDetachCSSClass);
|
||||
}
|
||||
|
||||
// save inline css
|
||||
node.data("Original_Inline_CSS", (!node.attr("style") ? "" : node.attr("style")));
|
||||
|
||||
// detach panel
|
||||
node.css({
|
||||
"margin": 0,
|
||||
"left": nodeLeft,
|
||||
"top": newNodeTop,
|
||||
"position": "fixed"
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// ADDED: css top check to avoid continuous reattachment
|
||||
if (scrollTop <= node.data("PanelsTop") && node.css("top") != "auto") {
|
||||
|
||||
if (o.savePanelSpace == true) {
|
||||
$("#" + node.data("PanelSpaceID")).remove();
|
||||
}
|
||||
|
||||
// attach panel
|
||||
node.attr("style", node.data("Original_Inline_CSS"));
|
||||
|
||||
if (o.afterDetachCSSClass != "") {
|
||||
node.removeClass(o.afterDetachCSSClass);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$.fn.stickyPanel.defaults = {
|
||||
topPadding: 0,
|
||||
// Use this to set the top margin of the detached panel.
|
||||
|
||||
afterDetachCSSClass: "",
|
||||
// This class is applied when the panel detaches.
|
||||
|
||||
savePanelSpace: false
|
||||
// When set to true the space where the panel was is kept open.
|
||||
};
|
||||
|
||||
/*
|
||||
* jQuery.stickyPanel
|
||||
* ----------------------
|
||||
* version: 1.4.1
|
||||
* date: 7/21/11
|
||||
*
|
||||
* Copyright (c) 2011 Donny Velazquez
|
||||
* http://donnyvblog.blogspot.com/
|
||||
* http://code.google.com/p/sticky-panel/
|
||||
*
|
||||
* Licensed under the Apache License 2.0
|
||||
*
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
$.fn.stickyPanel = function (options) {
|
||||
|
||||
var options = $.extend({}, $.fn.stickyPanel.defaults, options);
|
||||
|
||||
return this.each(function () {
|
||||
$(window).bind("scroll.stickyPanel", { selected: $(this), options: options }, Scroll);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
function Scroll(event) {
|
||||
|
||||
var node = event.data.selected;
|
||||
var o = event.data.options;
|
||||
|
||||
var isMobile = navigator.userAgent.toLowerCase().indexOf('mobile') > 0;
|
||||
|
||||
var windowHeight = $(window).height();
|
||||
var nodeHeight = node.outerHeight(true);
|
||||
var scrollTop = $(document).scrollTop();
|
||||
|
||||
// when top of window reaches the top of the panel detach
|
||||
if (!isMobile &&
|
||||
scrollTop <= $(document).height() - windowHeight && // Fix for rubberband scrolling in Safari on Lion
|
||||
scrollTop > node.offset().top - o.topPadding) {
|
||||
|
||||
// topPadding
|
||||
var newNodeTop = 0;
|
||||
if (o.topPadding != "undefined") {
|
||||
newNodeTop = newNodeTop + o.topPadding;
|
||||
}
|
||||
|
||||
// get left before adding spacer
|
||||
var nodeLeft = node.offset().left;
|
||||
|
||||
// save panels top
|
||||
node.data("PanelsTop", node.offset().top - newNodeTop);
|
||||
|
||||
// MOVED: savePanelSpace before afterDetachCSSClass to handle afterDetachCSSClass changing size of node
|
||||
// savePanelSpace
|
||||
if (o.savePanelSpace == true) {
|
||||
var nodeWidth = node.outerWidth(true);
|
||||
var nodeCssfloat = node.css("float");
|
||||
var nodeCssdisplay = node.css("display");
|
||||
var randomNum = Math.ceil(Math.random() * 9999); /* Pick random number between 1 and 9999 */
|
||||
node.data("PanelSpaceID", "stickyPanelSpace" + randomNum);
|
||||
node.before("<div id='" + node.data("PanelSpaceID") + "' style='width:" + nodeWidth + "px;height:" + nodeHeight + "px;float:" + nodeCssfloat + ";display:" + nodeCssdisplay + ";'> </div>");
|
||||
}
|
||||
|
||||
// afterDetachCSSClass
|
||||
if (o.afterDetachCSSClass != "") {
|
||||
node.addClass(o.afterDetachCSSClass);
|
||||
}
|
||||
|
||||
// save inline css
|
||||
node.data("Original_Inline_CSS", (!node.attr("style") ? "" : node.attr("style")));
|
||||
|
||||
// detach panel
|
||||
node.css({
|
||||
"margin": 0,
|
||||
"left": nodeLeft,
|
||||
"top": newNodeTop,
|
||||
"position": "fixed"
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// ADDED: css top check to avoid continuous reattachment
|
||||
if (scrollTop <= node.data("PanelsTop") && node.css("top") != "auto") {
|
||||
|
||||
if (o.savePanelSpace == true) {
|
||||
$("#" + node.data("PanelSpaceID")).remove();
|
||||
}
|
||||
|
||||
// attach panel
|
||||
node.attr("style", node.data("Original_Inline_CSS"));
|
||||
|
||||
if (o.afterDetachCSSClass != "") {
|
||||
node.removeClass(o.afterDetachCSSClass);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$.fn.stickyPanel.defaults = {
|
||||
topPadding: 0,
|
||||
// Use this to set the top margin of the detached panel.
|
||||
|
||||
afterDetachCSSClass: "",
|
||||
// This class is applied when the panel detaches.
|
||||
|
||||
savePanelSpace: false
|
||||
// When set to true the space where the panel was is kept open.
|
||||
};
|
||||
|
||||
})(jQuery);
|
|
@ -1,25 +1,25 @@
|
|||
// Croatian
|
||||
plupload.addI18n({
|
||||
'Select files': 'Izaberite datoteke:',
|
||||
'Add files to the upload queue and click the start button.': 'Dodajte datoteke u listu i kliknite Upload.',
|
||||
'Filename': 'Ime datoteke',
|
||||
'Status': 'Status',
|
||||
'Size': 'Veličina',
|
||||
'Add files': 'Dodajte datoteke',
|
||||
'Stop current upload': 'Zaustavi trenutan upload',
|
||||
'Start uploading queue': 'Pokreni Upload',
|
||||
'Uploaded %d/%d files': 'Uploadano %d/%d datoteka',
|
||||
'N/A': 'N/A',
|
||||
'Drag files here.': 'Dovucite datoteke ovdje',
|
||||
'File extension error.': 'Greška ekstenzije datoteke.',
|
||||
'File size error.': 'Greška veličine datoteke.',
|
||||
'Init error.': 'Greška inicijalizacije.',
|
||||
'HTTP Error.': 'HTTP greška.',
|
||||
'Security error.': 'Sigurnosna greška.',
|
||||
'Generic error.': 'Generička greška.',
|
||||
'IO error.': 'I/O greška.',
|
||||
'Stop Upload': 'Zaustavi upload.',
|
||||
'Add Files': 'Dodaj datoteke',
|
||||
'Start Upload': 'Pokreni upload.',
|
||||
'%d files queued': '%d datoteka na čekanju.'
|
||||
// Croatian
|
||||
plupload.addI18n({
|
||||
'Select files': 'Izaberite datoteke:',
|
||||
'Add files to the upload queue and click the start button.': 'Dodajte datoteke u listu i kliknite Upload.',
|
||||
'Filename': 'Ime datoteke',
|
||||
'Status': 'Status',
|
||||
'Size': 'Veličina',
|
||||
'Add files': 'Dodajte datoteke',
|
||||
'Stop current upload': 'Zaustavi trenutan upload',
|
||||
'Start uploading queue': 'Pokreni Upload',
|
||||
'Uploaded %d/%d files': 'Uploadano %d/%d datoteka',
|
||||
'N/A': 'N/A',
|
||||
'Drag files here.': 'Dovucite datoteke ovdje',
|
||||
'File extension error.': 'Greška ekstenzije datoteke.',
|
||||
'File size error.': 'Greška veličine datoteke.',
|
||||
'Init error.': 'Greška inicijalizacije.',
|
||||
'HTTP Error.': 'HTTP greška.',
|
||||
'Security error.': 'Sigurnosna greška.',
|
||||
'Generic error.': 'Generička greška.',
|
||||
'IO error.': 'I/O greška.',
|
||||
'Stop Upload': 'Zaustavi upload.',
|
||||
'Add Files': 'Dodaj datoteke',
|
||||
'Start Upload': 'Pokreni upload.',
|
||||
'%d files queued': '%d datoteka na čekanju.'
|
||||
});
|
|
@ -1,14 +1,14 @@
|
|||
// Serbian Cyrillic
|
||||
plupload.addI18n({
|
||||
'Select files' : 'Изаберите фајлове',
|
||||
'Add files to the upload queue and click the start button.' : 'Додајте фајлове у листу и кликните на дугме Старт.',
|
||||
'Filename' : 'Назив фајла',
|
||||
'Status' : 'Status',
|
||||
'Size' : 'Величина',
|
||||
'Add Files' : 'Додај фајлове',
|
||||
'Stop current upload' : 'Заустави upload',
|
||||
'Start uploading queue' : 'Почни upload',
|
||||
'Drag files here.' : 'Превуци фајлове овде.',
|
||||
'Start Upload': 'Почни upload',
|
||||
'Uploaded %d/%d files': 'Снимљено %d/%d фајлова'
|
||||
});
|
||||
// Serbian Cyrillic
|
||||
plupload.addI18n({
|
||||
'Select files' : 'Изаберите фајлове',
|
||||
'Add files to the upload queue and click the start button.' : 'Додајте фајлове у листу и кликните на дугме Старт.',
|
||||
'Filename' : 'Назив фајла',
|
||||
'Status' : 'Status',
|
||||
'Size' : 'Величина',
|
||||
'Add Files' : 'Додај фајлове',
|
||||
'Stop current upload' : 'Заустави upload',
|
||||
'Start uploading queue' : 'Почни upload',
|
||||
'Drag files here.' : 'Превуци фајлове овде.',
|
||||
'Start Upload': 'Почни upload',
|
||||
'Uploaded %d/%d files': 'Снимљено %d/%d фајлова'
|
||||
});
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// Serbian Latin
|
||||
plupload.addI18n({
|
||||
'Select files' : 'Izaberite fajlove',
|
||||
'Add files to the upload queue and click the start button.' : 'Dodajte fajlove u listu i kliknite na dugme Start.',
|
||||
'Filename' : 'Naziv fajla',
|
||||
'Status' : 'Status',
|
||||
'Size' : 'Veličina',
|
||||
'Add Files' : 'Dodaj fajlove',
|
||||
'Stop current upload' : 'Zaustavi upload',
|
||||
'Start uploading queue' : 'Počni upload',
|
||||
'Drag files here.' : 'Prevucite fajlove ovde.',
|
||||
'Start Upload': 'Počni upload',
|
||||
'Uploaded %d/%d files': 'Snimljeno %d/%d fajlova'
|
||||
});
|
||||
// Serbian Latin
|
||||
plupload.addI18n({
|
||||
'Select files' : 'Izaberite fajlove',
|
||||
'Add files to the upload queue and click the start button.' : 'Dodajte fajlove u listu i kliknite na dugme Start.',
|
||||
'Filename' : 'Naziv fajla',
|
||||
'Status' : 'Status',
|
||||
'Size' : 'Veličina',
|
||||
'Add Files' : 'Dodaj fajlove',
|
||||
'Stop current upload' : 'Zaustavi upload',
|
||||
'Start uploading queue' : 'Počni upload',
|
||||
'Drag files here.' : 'Prevucite fajlove ovde.',
|
||||
'Start Upload': 'Počni upload',
|
||||
'Uploaded %d/%d files': 'Snimljeno %d/%d fajlova'
|
||||
});
|
||||
|
|
|
@ -1,183 +1,183 @@
|
|||
/**
|
||||
sprintf() for JavaScript 0.7-beta1
|
||||
http://www.diveintojavascript.com/projects/javascript-sprintf
|
||||
|
||||
Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of sprintf() for JavaScript nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
Changelog:
|
||||
2010.09.06 - 0.7-beta1
|
||||
- features: vsprintf, support for named placeholders
|
||||
- enhancements: format cache, reduced global namespace pollution
|
||||
|
||||
2010.05.22 - 0.6:
|
||||
- reverted to 0.4 and fixed the bug regarding the sign of the number 0
|
||||
Note:
|
||||
Thanks to Raphael Pigulla <raph (at] n3rd [dot) org> (http://www.n3rd.org/)
|
||||
who warned me about a bug in 0.5, I discovered that the last update was
|
||||
a regress. I appologize for that.
|
||||
|
||||
2010.05.09 - 0.5:
|
||||
- bug fix: 0 is now preceeded with a + sign
|
||||
- bug fix: the sign was not at the right position on padded results (Kamal Abdali)
|
||||
- switched from GPL to BSD license
|
||||
|
||||
2007.10.21 - 0.4:
|
||||
- unit test and patch (David Baird)
|
||||
|
||||
2007.09.17 - 0.3:
|
||||
- bug fix: no longer throws exception on empty paramenters (Hans Pufal)
|
||||
|
||||
2007.09.11 - 0.2:
|
||||
- feature: added argument swapping
|
||||
|
||||
2007.04.03 - 0.1:
|
||||
- initial release
|
||||
**/
|
||||
|
||||
var sprintf = (function() {
|
||||
function get_type(variable) {
|
||||
return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
|
||||
}
|
||||
function str_repeat(input, multiplier) {
|
||||
for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}
|
||||
return output.join('');
|
||||
}
|
||||
|
||||
var str_format = function() {
|
||||
if (!str_format.cache.hasOwnProperty(arguments[0])) {
|
||||
str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
|
||||
}
|
||||
return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
|
||||
};
|
||||
|
||||
str_format.format = function(parse_tree, argv) {
|
||||
var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
|
||||
for (i = 0; i < tree_length; i++) {
|
||||
node_type = get_type(parse_tree[i]);
|
||||
if (node_type === 'string') {
|
||||
output.push(parse_tree[i]);
|
||||
}
|
||||
else if (node_type === 'array') {
|
||||
match = parse_tree[i]; // convenience purposes only
|
||||
if (match[2]) { // keyword argument
|
||||
arg = argv[cursor];
|
||||
for (k = 0; k < match[2].length; k++) {
|
||||
if (!arg.hasOwnProperty(match[2][k])) {
|
||||
throw(sprintf('[sprintf] property "%s" does not exist', match[2][k]));
|
||||
}
|
||||
arg = arg[match[2][k]];
|
||||
}
|
||||
}
|
||||
else if (match[1]) { // positional argument (explicit)
|
||||
arg = argv[match[1]];
|
||||
}
|
||||
else { // positional argument (implicit)
|
||||
arg = argv[cursor++];
|
||||
}
|
||||
|
||||
if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
|
||||
throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));
|
||||
}
|
||||
switch (match[8]) {
|
||||
case 'b': arg = arg.toString(2); break;
|
||||
case 'c': arg = String.fromCharCode(arg); break;
|
||||
case 'd': arg = parseInt(arg, 10); break;
|
||||
case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
|
||||
case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
|
||||
case 'o': arg = arg.toString(8); break;
|
||||
case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
|
||||
case 'u': arg = Math.abs(arg); break;
|
||||
case 'x': arg = arg.toString(16); break;
|
||||
case 'X': arg = arg.toString(16).toUpperCase(); break;
|
||||
}
|
||||
arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
|
||||
pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
|
||||
pad_length = match[6] - String(arg).length;
|
||||
pad = match[6] ? str_repeat(pad_character, pad_length) : '';
|
||||
output.push(match[5] ? arg + pad : pad + arg);
|
||||
}
|
||||
}
|
||||
return output.join('');
|
||||
};
|
||||
|
||||
str_format.cache = {};
|
||||
|
||||
str_format.parse = function(fmt) {
|
||||
var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
|
||||
while (_fmt) {
|
||||
if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
|
||||
parse_tree.push(match[0]);
|
||||
}
|
||||
else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
|
||||
parse_tree.push('%');
|
||||
}
|
||||
else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
|
||||
if (match[2]) {
|
||||
arg_names |= 1;
|
||||
var field_list = [], replacement_field = match[2], field_match = [];
|
||||
if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
|
||||
field_list.push(field_match[1]);
|
||||
while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
|
||||
if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
|
||||
field_list.push(field_match[1]);
|
||||
}
|
||||
else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
|
||||
field_list.push(field_match[1]);
|
||||
}
|
||||
else {
|
||||
throw('[sprintf] huh?');
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw('[sprintf] huh?');
|
||||
}
|
||||
match[2] = field_list;
|
||||
}
|
||||
else {
|
||||
arg_names |= 2;
|
||||
}
|
||||
if (arg_names === 3) {
|
||||
throw('[sprintf] mixing positional and named placeholders is not (yet) supported');
|
||||
}
|
||||
parse_tree.push(match);
|
||||
}
|
||||
else {
|
||||
throw('[sprintf] huh?');
|
||||
}
|
||||
_fmt = _fmt.substring(match[0].length);
|
||||
}
|
||||
return parse_tree;
|
||||
};
|
||||
|
||||
return str_format;
|
||||
})();
|
||||
|
||||
var vsprintf = function(fmt, argv) {
|
||||
argv.unshift(fmt);
|
||||
return sprintf.apply(null, argv);
|
||||
};
|
||||
/**
|
||||
sprintf() for JavaScript 0.7-beta1
|
||||
http://www.diveintojavascript.com/projects/javascript-sprintf
|
||||
|
||||
Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of sprintf() for JavaScript nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
Changelog:
|
||||
2010.09.06 - 0.7-beta1
|
||||
- features: vsprintf, support for named placeholders
|
||||
- enhancements: format cache, reduced global namespace pollution
|
||||
|
||||
2010.05.22 - 0.6:
|
||||
- reverted to 0.4 and fixed the bug regarding the sign of the number 0
|
||||
Note:
|
||||
Thanks to Raphael Pigulla <raph (at] n3rd [dot) org> (http://www.n3rd.org/)
|
||||
who warned me about a bug in 0.5, I discovered that the last update was
|
||||
a regress. I appologize for that.
|
||||
|
||||
2010.05.09 - 0.5:
|
||||
- bug fix: 0 is now preceeded with a + sign
|
||||
- bug fix: the sign was not at the right position on padded results (Kamal Abdali)
|
||||
- switched from GPL to BSD license
|
||||
|
||||
2007.10.21 - 0.4:
|
||||
- unit test and patch (David Baird)
|
||||
|
||||
2007.09.17 - 0.3:
|
||||
- bug fix: no longer throws exception on empty paramenters (Hans Pufal)
|
||||
|
||||
2007.09.11 - 0.2:
|
||||
- feature: added argument swapping
|
||||
|
||||
2007.04.03 - 0.1:
|
||||
- initial release
|
||||
**/
|
||||
|
||||
var sprintf = (function() {
|
||||
function get_type(variable) {
|
||||
return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
|
||||
}
|
||||
function str_repeat(input, multiplier) {
|
||||
for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}
|
||||
return output.join('');
|
||||
}
|
||||
|
||||
var str_format = function() {
|
||||
if (!str_format.cache.hasOwnProperty(arguments[0])) {
|
||||
str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
|
||||
}
|
||||
return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
|
||||
};
|
||||
|
||||
str_format.format = function(parse_tree, argv) {
|
||||
var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
|
||||
for (i = 0; i < tree_length; i++) {
|
||||
node_type = get_type(parse_tree[i]);
|
||||
if (node_type === 'string') {
|
||||
output.push(parse_tree[i]);
|
||||
}
|
||||
else if (node_type === 'array') {
|
||||
match = parse_tree[i]; // convenience purposes only
|
||||
if (match[2]) { // keyword argument
|
||||
arg = argv[cursor];
|
||||
for (k = 0; k < match[2].length; k++) {
|
||||
if (!arg.hasOwnProperty(match[2][k])) {
|
||||
throw(sprintf('[sprintf] property "%s" does not exist', match[2][k]));
|
||||
}
|
||||
arg = arg[match[2][k]];
|
||||
}
|
||||
}
|
||||
else if (match[1]) { // positional argument (explicit)
|
||||
arg = argv[match[1]];
|
||||
}
|
||||
else { // positional argument (implicit)
|
||||
arg = argv[cursor++];
|
||||
}
|
||||
|
||||
if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
|
||||
throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));
|
||||
}
|
||||
switch (match[8]) {
|
||||
case 'b': arg = arg.toString(2); break;
|
||||
case 'c': arg = String.fromCharCode(arg); break;
|
||||
case 'd': arg = parseInt(arg, 10); break;
|
||||
case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
|
||||
case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
|
||||
case 'o': arg = arg.toString(8); break;
|
||||
case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
|
||||
case 'u': arg = Math.abs(arg); break;
|
||||
case 'x': arg = arg.toString(16); break;
|
||||
case 'X': arg = arg.toString(16).toUpperCase(); break;
|
||||
}
|
||||
arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
|
||||
pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
|
||||
pad_length = match[6] - String(arg).length;
|
||||
pad = match[6] ? str_repeat(pad_character, pad_length) : '';
|
||||
output.push(match[5] ? arg + pad : pad + arg);
|
||||
}
|
||||
}
|
||||
return output.join('');
|
||||
};
|
||||
|
||||
str_format.cache = {};
|
||||
|
||||
str_format.parse = function(fmt) {
|
||||
var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
|
||||
while (_fmt) {
|
||||
if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
|
||||
parse_tree.push(match[0]);
|
||||
}
|
||||
else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
|
||||
parse_tree.push('%');
|
||||
}
|
||||
else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
|
||||
if (match[2]) {
|
||||
arg_names |= 1;
|
||||
var field_list = [], replacement_field = match[2], field_match = [];
|
||||
if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
|
||||
field_list.push(field_match[1]);
|
||||
while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
|
||||
if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
|
||||
field_list.push(field_match[1]);
|
||||
}
|
||||
else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
|
||||
field_list.push(field_match[1]);
|
||||
}
|
||||
else {
|
||||
throw('[sprintf] huh?');
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw('[sprintf] huh?');
|
||||
}
|
||||
match[2] = field_list;
|
||||
}
|
||||
else {
|
||||
arg_names |= 2;
|
||||
}
|
||||
if (arg_names === 3) {
|
||||
throw('[sprintf] mixing positional and named placeholders is not (yet) supported');
|
||||
}
|
||||
parse_tree.push(match);
|
||||
}
|
||||
else {
|
||||
throw('[sprintf] huh?');
|
||||
}
|
||||
_fmt = _fmt.substring(match[0].length);
|
||||
}
|
||||
return parse_tree;
|
||||
};
|
||||
|
||||
return str_format;
|
||||
})();
|
||||
|
||||
var vsprintf = function(fmt, argv) {
|
||||
argv.unshift(fmt);
|
||||
return sprintf.apply(null, argv);
|
||||
};
|
||||
|
|
2690
airtime_mvc/public/js/timepicker/jquery.ui.timepicker.js
vendored
2690
airtime_mvc/public/js/timepicker/jquery.ui.timepicker.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
Code taken from http://www.jspatterns.com/book/7/observer-game.html
|
||||
|
||||
Pub/Sub
|
||||
*/
|
||||
|
||||
var publisher = {
|
||||
subscribers: {
|
||||
any: []
|
||||
},
|
||||
on: function (type, fn, context) {
|
||||
type = type || 'any';
|
||||
fn = typeof fn === "function" ? fn : context[fn];
|
||||
|
||||
if (typeof this.subscribers[type] === "undefined") {
|
||||
this.subscribers[type] = [];
|
||||
}
|
||||
this.subscribers[type].push({fn: fn, context: context || this});
|
||||
},
|
||||
remove: function (type, fn, context) {
|
||||
this.visitSubscribers('unsubscribe', type, fn, context);
|
||||
},
|
||||
fire: function (type, publication) {
|
||||
this.visitSubscribers('publish', type, publication);
|
||||
},
|
||||
reset: function (type) {
|
||||
|
||||
},
|
||||
visitSubscribers: function (action, type, arg, context) {
|
||||
var pubtype = type || 'any',
|
||||
subscribers = this.subscribers[pubtype],
|
||||
i,
|
||||
max = subscribers ? subscribers.length : 0;
|
||||
|
||||
for (i = 0; i < max; i += 1) {
|
||||
if (action === 'publish') {
|
||||
subscribers[i].fn.call(subscribers[i].context, arg);
|
||||
}
|
||||
else {
|
||||
if (subscribers[i].fn === arg && subscribers[i].context === context) {
|
||||
subscribers.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function makePublisher(o) {
|
||||
var i;
|
||||
for (i in publisher) {
|
||||
if (publisher.hasOwnProperty(i) && typeof publisher[i] === "function") {
|
||||
o[i] = publisher[i];
|
||||
}
|
||||
}
|
||||
o.subscribers = {any: []};
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
<form class="form-inline">
|
||||
<select id="time_format">
|
||||
<option value="seconds">seconds</option>
|
||||
<option value="thousandths">thousandths</option>
|
||||
<option value="hh:mm:ss">hh:mm:ss</option>
|
||||
<option value="hh:mm:ss.uu">hh:mm:ss + hundredths</option>
|
||||
<option value="hh:mm:ss.uuu">hh:mm:ss + milliseconds</option>
|
||||
</select>
|
||||
<input id="audio_start" type="text" class="input-small">
|
||||
<input id="audio_end" type="text" class="input-small">
|
||||
<input id="audio_pos" type="text" class="input-small">
|
||||
<select id="audio_resolution">
|
||||
<option>4000</option>
|
||||
<option>5000</option>
|
||||
<option>6000</option>
|
||||
<option>7000</option>
|
||||
<option>8000</option>
|
||||
<option>9000</option>
|
||||
<option>10000</option>
|
||||
<option>11000</option>
|
||||
<option>12000</option>
|
||||
<option>15000</option>
|
||||
<option>20000</option>
|
||||
</select>
|
||||
</form>
|
Loading…
Add table
Add a link
Reference in a new issue