From 8ac0f419873355c35b7ea27e01d38c48b1c65ce2 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 29 Oct 2012 11:57:20 -0400 Subject: [PATCH 01/38] CC-4590: New smart block says 'Empty playlist' -fixed --- .../application/views/scripts/playlist/update.phtml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/views/scripts/playlist/update.phtml b/airtime_mvc/application/views/scripts/playlist/update.phtml index 70176ff9e..87cd0662f 100644 --- a/airtime_mvc/application/views/scripts/playlist/update.phtml +++ b/airtime_mvc/application/views/scripts/playlist/update.phtml @@ -92,5 +92,13 @@ if ($item['type'] == 2) { -
  • Empty playlist
  • +
  • +obj instanceof Application_Model_Block) { + echo 'Empty smart block'; + } else { + echo 'Empty playlist'; + } +?> +
  • From fdd889d7a8e2f661945cd047896f33a36be42719 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 29 Oct 2012 12:09:11 -0400 Subject: [PATCH 02/38] - fixed formatting --- .../js/airtime/showbuilder/main_builder.js | 336 +++++++++--------- 1 file changed, 171 insertions(+), 165 deletions(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/main_builder.js b/airtime_mvc/public/js/airtime/showbuilder/main_builder.js index b640a2882..48e503ac6 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/main_builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/main_builder.js @@ -113,174 +113,180 @@ AIRTIME = (function(AIRTIME) { } mod.onReady = function() { - //define module vars. - $lib = $("#library_content"); - $builder = $("#show_builder"); - $fs = $builder.find('fieldset'); - - /* - * 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); - - oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId); - AIRTIME.showbuilder.fnServerData.start = oRange.start; - AIRTIME.showbuilder.fnServerData.end = oRange.end; + // define module vars. + $lib = $("#library_content"); + $builder = $("#show_builder"); + $fs = $builder.find('fieldset'); - AIRTIME.library.libraryInit(); - AIRTIME.showbuilder.builderDataTable(); - setWidgetSize(); - - $libWrapper = $lib.find("#library_display_wrapper"); - $libWrapper.prepend($libClose); - - $builder.find('.dataTables_scrolling').css("max-height", widgetHeight - 95); - - $builder.on("click", "#sb_submit", showSearchSubmit); + /* + * 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.on("click","#sb_edit", function (ev){ - var schedTable = $("#show_builder_table").dataTable(); - - //reset timestamp to redraw the cursors. - AIRTIME.showbuilder.resetTimestamp(); - - $lib.show() - .width(Math.floor(screenWidth * 0.48)); - - $builder.width(Math.floor(screenWidth * 0.48)) - .find("#sb_edit") - .remove() - .end() - .find("#sb_date_start") - .css("margin-left", 0) - .end(); - - schedTable.fnDraw(); - - $.ajax({ - url: "/usersettings/set-now-playing-screen-settings", - type: "POST", - data: {settings : {library : true}, format: "json"}, - dataType: "json", - success: function(){} - }); - }); - - $lib.on("click", "#sb_lib_close", function() { - var schedTable = $("#show_builder_table").dataTable(); + $builder.find(dateStartId).datepicker(oBaseDatePickerSettings); + $builder.find(timeStartId).timepicker(oBaseTimePickerSettings); + $builder.find(dateEndId).datepicker(oBaseDatePickerSettings); + $builder.find(timeEndId).timepicker(oBaseTimePickerSettings); + + oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, + dateEndId, timeEndId); + AIRTIME.showbuilder.fnServerData.start = oRange.start; + AIRTIME.showbuilder.fnServerData.end = oRange.end; + + AIRTIME.library.libraryInit(); + AIRTIME.showbuilder.builderDataTable(); + setWidgetSize(); + + $libWrapper = $lib.find("#library_display_wrapper"); + $libWrapper.prepend($libClose); + + $builder.find('.dataTables_scrolling').css("max-height", + widgetHeight - 95); + + $builder.on("click", "#sb_submit", showSearchSubmit); + + $builder.on("click", "#sb_edit", function(ev) { + var schedTable = $("#show_builder_table").dataTable(); + + // reset timestamp to redraw the cursors. + AIRTIME.showbuilder.resetTimestamp(); + + $lib.show().width(Math.floor(screenWidth * 0.48)); + + $builder.width(Math.floor(screenWidth * 0.48)).find("#sb_edit") + .remove().end().find("#sb_date_start") + .css("margin-left", 0).end(); + + schedTable.fnDraw(); + + $.ajax( { + url : "/usersettings/set-now-playing-screen-settings", + type : "POST", + data : { + settings : { + library : true + }, + format : "json" + }, + dataType : "json", + success : function() { + } + }); + }); + + $lib.on("click", "#sb_lib_close", function() { + var schedTable = $("#show_builder_table").dataTable(); + + $lib.hide(); + $builder.width(screenWidth).find(".sb-timerange").prepend( + $toggleLib).find("#sb_date_start").css("margin-left", 30) + .end().end(); + + $toggleLib.removeClass("ui-state-hover"); + schedTable.fnDraw(); + + $.ajax( { + url : "/usersettings/set-now-playing-screen-settings", + type : "POST", + data : { + settings : { + library : false + }, + format : "json" + }, + dataType : "json", + success : function() { + } + }); + }); + + $builder.find('legend').click( + function(ev, item) { + + if ($fs.hasClass("closed")) { + + $fs.removeClass("closed"); + $builder.find('.dataTables_scrolling').css( + "max-height", widgetHeight - 150); + } else { + $fs.addClass("closed"); + + // set defaults for the options. + $fs.find('select').val(0); + $fs.find('input[type="checkbox"]').attr("checked", + false); + $builder.find('.dataTables_scrolling').css( + "max-height", widgetHeight - 110); + } + }); + + // set click event for all my shows checkbox. + $builder.on("click", "#sb_my_shows", function(ev) { + + if ($(this).is(':checked')) { + $(ev.delegateTarget).find('#sb_show_filter').val(0); + } + + showSearchSubmit(); + }); + + //set select event for choosing a show. + $builder.on("change", '#sb_show_filter', function(ev) { + + if ($(this).val() !== 0) { + $(ev.delegateTarget).find('#sb_my_shows') + .attr("checked", false); + } + + showSearchSubmit(); + + }); + + function checkScheduleUpdates() { + var data = {}, oTable = $('#show_builder_table').dataTable(), fn = oTable + .fnSettings().fnServerData, start = fn.start, end = fn.end; + + data["format"] = "json"; + data["start"] = start; + data["end"] = end; + data["timestamp"] = AIRTIME.showbuilder.getTimestamp(); + data["instances"] = AIRTIME.showbuilder.getShowInstances(); + + if (fn.hasOwnProperty("ops")) { + data["myShows"] = fn.ops.myShows; + data["showFilter"] = fn.ops.showFilter; + } + + $.ajax( { + "dataType" : "json", + "type" : "GET", + "url" : "/showbuilder/check-builder-feed", + "data" : data, + "success" : function(json) { + if (json.update === true) { + oTable.fnDraw(); + } + } + }); + } + + //check if the timeline view needs updating. + setInterval(checkScheduleUpdates, 5 * 1000); //need refresh in milliseconds + }; + + mod.onResize = function() { + + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(setWidgetSize, 100); + }; + + return AIRTIME; - $lib.hide(); - $builder.width(screenWidth) - .find(".sb-timerange") - .prepend($toggleLib) - .find("#sb_date_start") - .css("margin-left", 30) - .end() - .end(); - - $toggleLib.removeClass("ui-state-hover"); - schedTable.fnDraw(); - - $.ajax({ - url: "/usersettings/set-now-playing-screen-settings", - type: "POST", - data: {settings : {library : false}, format: "json"}, - dataType: "json", - success: function(){} - }); - }); - - $builder.find('legend').click(function(ev, item){ - - if ($fs.hasClass("closed")) { - - $fs.removeClass("closed"); - $builder.find('.dataTables_scrolling').css("max-height", widgetHeight - 150); - } - else { - $fs.addClass("closed"); - - //set defaults for the options. - $fs.find('select').val(0); - $fs.find('input[type="checkbox"]').attr("checked", false); - $builder.find('.dataTables_scrolling').css("max-height", widgetHeight - 110); - } - }); - - //set click event for all my shows checkbox. - $builder.on("click", "#sb_my_shows", function(ev) { - - if ($(this).is(':checked')) { - $(ev.delegateTarget).find('#sb_show_filter').val(0); - } - - showSearchSubmit(); - }); - - //set select event for choosing a show. - $builder.on("change", '#sb_show_filter', function(ev) { - - if ($(this).val() !== 0) { - $(ev.delegateTarget).find('#sb_my_shows').attr("checked", false); - } - - showSearchSubmit(); - - }); - - function checkScheduleUpdates(){ - var data = {}, - oTable = $('#show_builder_table').dataTable(), - fn = oTable.fnSettings().fnServerData, - start = fn.start, - end = fn.end; - - data["format"] = "json"; - data["start"] = start; - data["end"] = end; - data["timestamp"] = AIRTIME.showbuilder.getTimestamp(); - data["instances"] = AIRTIME.showbuilder.getShowInstances(); - - if (fn.hasOwnProperty("ops")) { - data["myShows"] = fn.ops.myShows; - data["showFilter"] = fn.ops.showFilter; - } - - $.ajax( { - "dataType": "json", - "type": "GET", - "url": "/showbuilder/check-builder-feed", - "data": data, - "success": function(json) { - if (json.update === true) { - oTable.fnDraw(); - } - } - } ); - } - - //check if the timeline view needs updating. - setInterval(checkScheduleUpdates, 5 * 1000); //need refresh in milliseconds - }; - - mod.onResize = function() { - - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(setWidgetSize, 100); - }; - - return AIRTIME; - } (AIRTIME || {})); $(document).ready(AIRTIME.builderMain.onReady); From 332f9993c0890a52101bf9cecb8c0283b2325021 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 29 Oct 2012 15:20:16 -0400 Subject: [PATCH 03/38] CC-4640: Automatically jump to current song when loading the Now Playing page. -done --- .../public/js/airtime/showbuilder/builder.js | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index fc8463481..daf44a510 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -339,11 +339,23 @@ var AIRTIME = (function(AIRTIME){ }); }; + mod.jumpToCurrentTrack = function() { + var $scroll = $sbContent.find(".dataTables_scrolling"); + var scrolled = $scroll.scrollTop(); + var scrollingTop = $scroll.offset().top; + var oTable = $('#show_builder_table').dataTable(); + var current = $sbTable.find("."+NOW_PLAYING_CLASS); + var currentTop = current.offset().top; + + $scroll.scrollTop(currentTop - scrollingTop + scrolled); + } + mod.builderDataTable = function() { $sbContent = $('#show_builder'); $lib = $("#library_content"), $sbTable = $sbContent.find('table'); - + var isInitialized = false; + oSchedTable = $sbTable.dataTable( { "aoColumns": [ /* checkbox */ {"mDataProp": "allowed", "sTitle": "", "sWidth": "15px", "sClass": "sb-checkbox"}, @@ -636,6 +648,11 @@ var AIRTIME = (function(AIRTIME){ $("#draggingContainer").remove(); }, "fnDrawCallback": function fnBuilderDrawCallback(oSettings, json) { + if (!isInitialized) { + mod.jumpToCurrentTrack(); + } + + isInitialized = true; var wrapperDiv, markerDiv, $td, @@ -1021,7 +1038,7 @@ var AIRTIME = (function(AIRTIME){ if (AIRTIME.button.isDisabled('icon-step-forward', true) === true) { return; } - + /* var $scroll = $sbContent.find(".dataTables_scrolling"), scrolled = $scroll.scrollTop(), scrollingTop = $scroll.offset().top, @@ -1029,6 +1046,8 @@ var AIRTIME = (function(AIRTIME){ currentTop = current.offset().top; $scroll.scrollTop(currentTop - scrollingTop + scrolled); + */ + mod.jumpToCurrentTrack(); }); //delete overbooked tracks. @@ -1196,7 +1215,7 @@ var AIRTIME = (function(AIRTIME){ }; } - }); + }); }; return AIRTIME; From d97afabaea958660053db8ff7f2e3a474d4424d3 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 29 Oct 2012 15:40:58 -0400 Subject: [PATCH 04/38] CC-4640: Automatically jump to current song when loading the Now Playing page. -added check to see if a show is currently playing --- airtime_mvc/public/js/airtime/showbuilder/builder.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index daf44a510..21d0b5c43 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -649,7 +649,9 @@ var AIRTIME = (function(AIRTIME){ }, "fnDrawCallback": function fnBuilderDrawCallback(oSettings, json) { if (!isInitialized) { - mod.jumpToCurrentTrack(); + if ($(this).find("."+NOW_PLAYING_CLASS).length > 0) { + mod.jumpToCurrentTrack(); + } } isInitialized = true; From 48613978727d2185961f31c09b234da4bc38d17f Mon Sep 17 00:00:00 2001 From: James Date: Mon, 29 Oct 2012 16:19:23 -0400 Subject: [PATCH 05/38] CC-4644: Exception from zendphp.log - fixed --- airtime_mvc/application/models/Schedule.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index b668f13e5..58f7bbdba 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -268,7 +268,7 @@ SQL; //We need to search 24 hours before and after the show times so that that we - //capture all of the show's contents. + //capture all of the show's contents. $p_track_start= $p_start->sub(new DateInterval("PT24H"))->format("Y-m-d H:i:s"); $p_track_end = $p_end->add(new DateInterval("PT24H"))->format("Y-m-d H:i:s"); @@ -661,6 +661,7 @@ SQL; $data["media"][$switch_start]['start'] = $switch_start; $data["media"][$switch_start]['end'] = $switch_start; $data["media"][$switch_start]['event_type'] = "switch_off"; + $data["media"][$kick_start]['type'] = "event"; $data["media"][$switch_start]['independent_event'] = true; } } From e40d49219bf3a04d68bafc0b2c70772dbb2e0af8 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 29 Oct 2012 16:29:10 -0400 Subject: [PATCH 06/38] add missing gstreamer.liq file --- .../liquidsoap_scripts/library/gstreamer.liq | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 python_apps/pypo/liquidsoap_scripts/library/gstreamer.liq diff --git a/python_apps/pypo/liquidsoap_scripts/library/gstreamer.liq b/python_apps/pypo/liquidsoap_scripts/library/gstreamer.liq new file mode 100644 index 000000000..d3a364abd --- /dev/null +++ b/python_apps/pypo/liquidsoap_scripts/library/gstreamer.liq @@ -0,0 +1,34 @@ +%ifdef input.gstreamer.video +# Stream from a video4linux 2 input device, such as a webcam. +# @category Source / Input +# @param ~id Force the value of the source ID. +# @param ~clock_safe Force the use of the dedicated v4l clock. +# @param ~device V4L2 device to use. +def input.v4l2(~id="",~clock_safe=true,~device="/dev/video0") + pipeline = "v4l2src device=#{device}" + input.gstreamer.video(id=id, clock_safe=clock_safe, pipeline=pipeline) +end + +# Stream from a video4linux 2 input device, such as a webcam. +# @category Source / Input +# @param ~id Force the value of the source ID. +# @param ~clock_safe Force the use of the dedicated v4l clock. +# @param ~device V4L2 device to use. +def input.v4l2_with_audio(~id="",~clock_safe=true,~device="/dev/video0") + audio_pipeline = "autoaudiosrc" + video_pipeline = "v4l2src device=#{device}" + input.gstreamer.audio_video(id=id, clock_safe=clock_safe, audio_pipeline=audio_pipeline, video_pipeline=video_pipeline) +end + +def gstreamer.encode_x264_avi(fname, source) + output.gstreamer.video(pipeline="videoconvert ! x264enc ! avimux ! filesink location=\"#{fname}\"", source) +end + +def gstreamer.encode_jpeg_avi(fname, source) + output.gstreamer.video(pipeline="videoconvert ! jpegenc ! avimux ! filesink location=\"#{fname}\"", source) +end + +def gstreamer.encode_mp3(fname, source) + output.gstreamer.audio(pipeline="audioconvert ! lamemp3enc ! filesink location=\"#{fname}\"", source) +end +%endif \ No newline at end of file From 5651dbce5615221b73f5c6de168388b4031adf89 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 29 Oct 2012 16:37:27 -0400 Subject: [PATCH 07/38] CC-4644: Exception from zendphp.log - fixed --- airtime_mvc/application/models/Schedule.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 58f7bbdba..c6776a43e 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -661,7 +661,7 @@ SQL; $data["media"][$switch_start]['start'] = $switch_start; $data["media"][$switch_start]['end'] = $switch_start; $data["media"][$switch_start]['event_type'] = "switch_off"; - $data["media"][$kick_start]['type'] = "event"; + $data["media"][$switch_start]['type'] = "event"; $data["media"][$switch_start]['independent_event'] = true; } } From 7276985bb401f8b8aba5482f987ec86b83deaddb Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 29 Oct 2012 19:19:48 -0400 Subject: [PATCH 08/38] test commit --- airtime_mvc/tests/phpunit.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/airtime_mvc/tests/phpunit.xml b/airtime_mvc/tests/phpunit.xml index e69de29bb..01ad1609e 100644 --- a/airtime_mvc/tests/phpunit.xml +++ b/airtime_mvc/tests/phpunit.xml @@ -0,0 +1,2 @@ + + From b08f5091b5fc1d871ce8846c71404e377d30c90d Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 30 Oct 2012 11:18:11 -0400 Subject: [PATCH 09/38] CC-4609: Calendar -> Add/Remove contents: Please remove useless buttons: 'Jump to current playing song' and 'Cancel current show' -done --- airtime_mvc/public/js/airtime/showbuilder/builder.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index 21d0b5c43..c64825393 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -649,6 +649,8 @@ var AIRTIME = (function(AIRTIME){ }, "fnDrawCallback": function fnBuilderDrawCallback(oSettings, json) { if (!isInitialized) { + //when coming to 'Now Playing' page we want the page + //to jump to the current track if ($(this).find("."+NOW_PLAYING_CLASS).length > 0) { mod.jumpToCurrentTrack(); } @@ -985,13 +987,18 @@ var AIRTIME = (function(AIRTIME){ "") .append("
    " + "
    ") - .append("
    " + + "
    "); + + //if 'Add/Remove content' was chosen from the context menu + //in the Calendar do not append these buttons + if ($(".ui-dialog-content").length === 0) { + $menu.append("
    " + "
    ") .append("
    " + "
    "); + } $toolbar.append($menu); $menu = undefined; From 695c0fa926b73901b04ec8cf7cbf3ded60f2a2ed Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 30 Oct 2012 11:45:53 -0400 Subject: [PATCH 10/38] CC-4607: Library: Please make the 'Add x items' following mouse's point -fixed --- .../js/airtime/library/events/library_playlistbuilder.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js index 4b139f66e..5392cbd49 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js @@ -64,8 +64,9 @@ var AIRTIME = (function(AIRTIME) { helper : function() { var $el = $(this), selected = mod - .getChosenAudioFilesLength(), container, message, li = $("#side_playlist ul[id='spl_sortable'] li:first"), width = li - .width(), height = 55; + .getChosenAudioFilesLength(), container, message, li = $("#side_playlist ul[id='spl_sortable'] li:first"), + width = li.width(), height = 55; + if (width > 798) width = 798; // dragging an element that has an unselected // checkbox. From 71291b14f0b99e0ea832176745f0c3bc92f40818 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 30 Oct 2012 11:59:52 -0400 Subject: [PATCH 11/38] CC-4646: Library: Make advanced search options hidden by default -done --- airtime_mvc/application/views/scripts/library/library.phtml | 2 +- .../application/views/scripts/showbuilder/builderDialog.phtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/views/scripts/library/library.phtml b/airtime_mvc/application/views/scripts/library/library.phtml index 0b60020c5..ec96a3a44 100644 --- a/airtime_mvc/application/views/scripts/library/library.phtml +++ b/airtime_mvc/application/views/scripts/library/library.phtml @@ -1,5 +1,5 @@ -
    +
    Advanced Search Options
    diff --git a/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml b/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml index 92331d6cc..46ce9488e 100644 --- a/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml +++ b/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml @@ -1,7 +1,7 @@
    -
    +
    Advanced Search Options
    From 5061dfa05d3b6078cf136936cba4d8f14186734e Mon Sep 17 00:00:00 2001 From: James Date: Tue, 30 Oct 2012 12:36:50 -0400 Subject: [PATCH 12/38] CC-4647: apache error log entries - fixed --- airtime_mvc/application/models/Block.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index eb1aab691..80fae297d 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -308,10 +308,11 @@ SQL; $length = $value." ".$modifier; } else { $hour = "00"; + $mins = "00"; if ($modifier == "minutes") { if ($value >59) { $hour = intval($value/60); - $value = $value%60; + $mins = $value%60; } } elseif ($modifier == "hours") { From b8039e315a2730e59a36c48a0b6d70a256865356 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 30 Oct 2012 13:02:55 -0400 Subject: [PATCH 13/38] CC-4577: Webstream UI: little improvement about 'SAVE' button and input boxes for URL and length -done --- .../views/scripts/webstream/webstream.phtml | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/airtime_mvc/application/views/scripts/webstream/webstream.phtml b/airtime_mvc/application/views/scripts/webstream/webstream.phtml index 1757f9be0..6695c82fc 100644 --- a/airtime_mvc/application/views/scripts/webstream/webstream.phtml +++ b/airtime_mvc/application/views/scripts/webstream/webstream.phtml @@ -9,6 +9,10 @@
  • New Webstream
  • + +
    + +
    obj)) : ?>
    @@ -37,24 +41,23 @@
    - - -
    -
    - -
    - -
    -
    - -
    -
    - -
    +
    - - + +
    + + +
    +
    + +
    + +
    +
    + +
    +
    No webstream
    From 3e60ac4393d8bc5f0f18163105f1cd7d09eee580 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 30 Oct 2012 13:23:09 -0400 Subject: [PATCH 14/38] remove \r line endings --- .../views/scripts/api/status.phtml | 4 +- .../views/scripts/form/register-dialog.phtml | 364 +- .../views/scripts/schedule/show-list.phtml | 2 +- airtime_mvc/public/css/add-show.css | 258 +- .../css/colorpicker/css/colorpicker.css | 324 +- .../public/css/jquery.ui.timepicker.css | 142 +- airtime_mvc/public/css/plupload.queue.css | 352 +- airtime_mvc/public/css/pro_dropdown_3.css | 370 +- .../css/redmond/jquery-ui-1.8.8.custom.css | 3046 +++++++------- .../common/Version20120405114454.php | 16 +- .../common/Version20120410104441.php | 18 +- .../common/Version20120410143340.php | 2 +- .../propel/airtime/CcShowInstances.php | 54 +- .../upgrade-template/UpgradeCommon.php | 40 +- .../icecast2/airtime-icecast-status.xsl | 14 +- widgets/css/airtime-widgets.css | 424 +- widgets/widget_schedule.html | 3646 ++++++++--------- widgets/widgets.html | 102 +- 18 files changed, 4589 insertions(+), 4589 deletions(-) diff --git a/airtime_mvc/application/views/scripts/api/status.phtml b/airtime_mvc/application/views/scripts/api/status.phtml index 1cffa8b84..b597b4b71 100644 --- a/airtime_mvc/application/views/scripts/api/status.phtml +++ b/airtime_mvc/application/views/scripts/api/status.phtml @@ -1,3 +1,3 @@ - -
    -
    -
    -
    - Help Airtime improve by letting us know how you are using it. This info - will be collected regularly in order to enhance your user experience. -

    - Click "Yes, help Airtime" and we'll make sure the features you use are - constantly improving. -
    -
    - - element->getElement('SupportFeedback')->hasErrors()) : ?> -
      - element->getElement('SupportFeedback')->getMessages() as $error): ?> -
    • - -
    - -
    -
    - Click the box below to advertise your station on - Sourcefabric.org. - In order to promote your station, "Send support feedback" must be enabled. This data will be collected in addition to the support feedback. -
    -
    - - element->getElement('Publicise')->hasErrors()) : ?> -
      - element->getElement('Publicise')->getMessages() as $error): ?> -
    • - -
    - -
    -
    - -
    - -
    -
    - Show me what I am sending -
    - element->getElement('SendInfo') ?> -
    -
    -
    -
    -
    - privacyChecked){?> - - - Terms and Conditions - -
    -
    - + diff --git a/airtime_mvc/application/views/scripts/schedule/show-list.phtml b/airtime_mvc/application/views/scripts/schedule/show-list.phtml index 992701db3..939ab6afd 100644 --- a/airtime_mvc/application/views/scripts/schedule/show-list.phtml +++ b/airtime_mvc/application/views/scripts/schedule/show-list.phtml @@ -1,2 +1,2 @@ -
    +
    \ No newline at end of file diff --git a/airtime_mvc/public/css/add-show.css b/airtime_mvc/public/css/add-show.css index 0dd479a3c..4ca5dc469 100644 --- a/airtime_mvc/public/css/add-show.css +++ b/airtime_mvc/public/css/add-show.css @@ -1,129 +1,129 @@ -#schedule-add-show, -#fullcalendar_show_display { - float: left; -} - -#schedule-add-show { - font-size: 12px; - /*width: 25%;*/ - width:310px; -} - -#schedule-add-show textarea { - width: 99%; - height: 80px; -} - -#fullcalendar_show_display { - width: 60%; -} - - - -#schedule-add-show .ui-tabs-panel { - padding-top: 8px; -} -#schedule-add-show fieldset { - padding:8px; - margin-bottom:8px; -} - -#schedule-add-show dl { - padding:8px; - margin-bottom:8px; - margin:0; - padding:0; - width:100%; -} -#schedule-add-show dd { - padding: 4px 0; - float: left; - font-size: 1.2em; - margin: 0; - padding: 4px 0 4px 15px; -} -#schedule-add-show dt, #schedule-add-show dt.big { - clear: left; - color: #666666; - float: left; - font-size: 1.2em; - font-weight: bold; - margin: 0; - padding: 4px 0; - text-align: left; - min-width:103px; - clear:left; -} -#schedule-add-show dt.big { - min-width:130px; -} -#schedule-add-show dt.block-display, #schedule-add-show dd.block-display { - display:block; - float:none; - margin-left:0; - padding-left:0; -} - -#schedule-add-show dt label { - padding-right:0; -} -.wrapp-label { - padding:0; - height:16px; - display:block; - line-height:18px; -} -label.wrapp-label input[type="checkbox"] { - float:left; - margin:-1px 2px 0 0; -} - -#schedule-add-show fieldset:last-child { - margin-bottom:0; -} -#schedule-add-show fieldset dd input[type="checkbox"] { - margin-top:2px; -} -#add_show_day_check-element.block-display { - margin-bottom:15px; - margin-top:7px; -} -#add_show_day_check-element.block-display label.wrapp-label { - font-size:12px; - float:left; - margin-right:10px; -} -#add_show_name-element .input_text { - /*width:99%;*/ -} - -#schedule-add-show-overlap { - border: 1px solid #c83f3f; - background: #c6b4b4; - margin-top:8px; - padding:8px; - color:#902d2d; - display:none; -} - -#add_show_hosts-element { - max-height: 80px; - min-width: 150px; - overflow: auto; -} - -#add_show_start_time, #add_show_end_time { - width: 54px; - margin-left:10px; -} - -#add_show_end_date_no_repeat, #add_show_start_date { - width: 89px; - -} - -#add_show_duration { - background: #AAAAAA; - cursor: default; - width: 65px; -} +#schedule-add-show, +#fullcalendar_show_display { + float: left; +} + +#schedule-add-show { + font-size: 12px; + /*width: 25%;*/ + width:310px; +} + +#schedule-add-show textarea { + width: 99%; + height: 80px; +} + +#fullcalendar_show_display { + width: 60%; +} + + + +#schedule-add-show .ui-tabs-panel { + padding-top: 8px; +} +#schedule-add-show fieldset { + padding:8px; + margin-bottom:8px; +} + +#schedule-add-show dl { + padding:8px; + margin-bottom:8px; + margin:0; + padding:0; + width:100%; +} +#schedule-add-show dd { + padding: 4px 0; + float: left; + font-size: 1.2em; + margin: 0; + padding: 4px 0 4px 15px; +} +#schedule-add-show dt, #schedule-add-show dt.big { + clear: left; + color: #666666; + float: left; + font-size: 1.2em; + font-weight: bold; + margin: 0; + padding: 4px 0; + text-align: left; + min-width:103px; + clear:left; +} +#schedule-add-show dt.big { + min-width:130px; +} +#schedule-add-show dt.block-display, #schedule-add-show dd.block-display { + display:block; + float:none; + margin-left:0; + padding-left:0; +} + +#schedule-add-show dt label { + padding-right:0; +} +.wrapp-label { + padding:0; + height:16px; + display:block; + line-height:18px; +} +label.wrapp-label input[type="checkbox"] { + float:left; + margin:-1px 2px 0 0; +} + +#schedule-add-show fieldset:last-child { + margin-bottom:0; +} +#schedule-add-show fieldset dd input[type="checkbox"] { + margin-top:2px; +} +#add_show_day_check-element.block-display { + margin-bottom:15px; + margin-top:7px; +} +#add_show_day_check-element.block-display label.wrapp-label { + font-size:12px; + float:left; + margin-right:10px; +} +#add_show_name-element .input_text { + /*width:99%;*/ +} + +#schedule-add-show-overlap { + border: 1px solid #c83f3f; + background: #c6b4b4; + margin-top:8px; + padding:8px; + color:#902d2d; + display:none; +} + +#add_show_hosts-element { + max-height: 80px; + min-width: 150px; + overflow: auto; +} + +#add_show_start_time, #add_show_end_time { + width: 54px; + margin-left:10px; +} + +#add_show_end_date_no_repeat, #add_show_start_date { + width: 89px; + +} + +#add_show_duration { + background: #AAAAAA; + cursor: default; + width: 65px; +} diff --git a/airtime_mvc/public/css/colorpicker/css/colorpicker.css b/airtime_mvc/public/css/colorpicker/css/colorpicker.css index d704c4c64..9b449e780 100644 --- a/airtime_mvc/public/css/colorpicker/css/colorpicker.css +++ b/airtime_mvc/public/css/colorpicker/css/colorpicker.css @@ -1,162 +1,162 @@ -.colorpicker { - width: 356px; - height: 176px; - overflow: hidden; - position: absolute; - background: url(../images/colorpicker_background.png); - font-family: Arial, Helvetica, sans-serif; - display: none; - z-index: 1003; /* so it can display above the jQuery dialog*/ -} -.colorpicker_color { - width: 150px; - height: 150px; - left: 14px; - top: 13px; - position: absolute; - background: #f00; - overflow: hidden; - cursor: crosshair; -} -.colorpicker_color div { - position: absolute; - top: 0; - left: 0; - width: 150px; - height: 150px; - background: url(../images/colorpicker_overlay.png); -} -.colorpicker_color div div { - position: absolute; - top: 0; - left: 0; - width: 11px; - height: 11px; - overflow: hidden; - background: url(../images/colorpicker_select.gif); - margin: -5px 0 0 -5px; -} -.colorpicker_hue { - position: absolute; - top: 13px; - left: 171px; - width: 35px; - height: 150px; - cursor: n-resize; -} -.colorpicker_hue div { - position: absolute; - width: 35px; - height: 9px; - overflow: hidden; - background: url(../images/colorpicker_indic.gif) left top; - margin: -4px 0 0 0; - left: 0px; -} -.colorpicker_new_color { - position: absolute; - width: 60px; - height: 30px; - left: 213px; - top: 13px; - background: #f00; -} -.colorpicker_current_color { - position: absolute; - width: 60px; - height: 30px; - left: 283px; - top: 13px; - background: #f00; -} -.colorpicker input { - background-color: transparent; - border: 1px solid transparent; - position: absolute; - font-size: 10px; - font-family: Arial, Helvetica, sans-serif; - color: #898989; - top: 4px; - right: 11px; - text-align: right; - margin: 0; - padding: 0; - height: 11px; -} -.colorpicker_hex { - position: absolute; - width: 72px; - height: 22px; - background: url(../images/colorpicker_hex.png) top; - left: 212px; - top: 142px; -} -.colorpicker_hex input { - right: 6px; -} -.colorpicker_field { - height: 22px; - width: 62px; - background-position: top; - position: absolute; -} -.colorpicker_field span { - position: absolute; - width: 12px; - height: 22px; - overflow: hidden; - top: 0; - right: 0; - cursor: n-resize; -} -.colorpicker_rgb_r { - background-image: url(../images/colorpicker_rgb_r.png); - top: 52px; - left: 212px; -} -.colorpicker_rgb_g { - background-image: url(../images/colorpicker_rgb_g.png); - top: 82px; - left: 212px; -} -.colorpicker_rgb_b { - background-image: url(../images/colorpicker_rgb_b.png); - top: 112px; - left: 212px; -} -.colorpicker_hsb_h { - background-image: url(../images/colorpicker_hsb_h.png); - top: 52px; - left: 282px; -} -.colorpicker_hsb_s { - background-image: url(../images/colorpicker_hsb_s.png); - top: 82px; - left: 282px; -} -.colorpicker_hsb_b { - background-image: url(../images/colorpicker_hsb_b.png); - top: 112px; - left: 282px; -} -.colorpicker_submit { - position: absolute; - width: 22px; - height: 22px; - background: url(../images/colorpicker_submit.png) top; - left: 322px; - top: 142px; - overflow: hidden; -} -.colorpicker_focus { - background-position: center; -} -.colorpicker_hex.colorpicker_focus { - background-position: bottom; -} -.colorpicker_submit.colorpicker_focus { - background-position: bottom; -} -.colorpicker_slider { - background-position: bottom; -} +.colorpicker { + width: 356px; + height: 176px; + overflow: hidden; + position: absolute; + background: url(../images/colorpicker_background.png); + font-family: Arial, Helvetica, sans-serif; + display: none; + z-index: 1003; /* so it can display above the jQuery dialog*/ +} +.colorpicker_color { + width: 150px; + height: 150px; + left: 14px; + top: 13px; + position: absolute; + background: #f00; + overflow: hidden; + cursor: crosshair; +} +.colorpicker_color div { + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: url(../images/colorpicker_overlay.png); +} +.colorpicker_color div div { + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/colorpicker_select.gif); + margin: -5px 0 0 -5px; +} +.colorpicker_hue { + position: absolute; + top: 13px; + left: 171px; + width: 35px; + height: 150px; + cursor: n-resize; +} +.colorpicker_hue div { + position: absolute; + width: 35px; + height: 9px; + overflow: hidden; + background: url(../images/colorpicker_indic.gif) left top; + margin: -4px 0 0 0; + left: 0px; +} +.colorpicker_new_color { + position: absolute; + width: 60px; + height: 30px; + left: 213px; + top: 13px; + background: #f00; +} +.colorpicker_current_color { + position: absolute; + width: 60px; + height: 30px; + left: 283px; + top: 13px; + background: #f00; +} +.colorpicker input { + background-color: transparent; + border: 1px solid transparent; + position: absolute; + font-size: 10px; + font-family: Arial, Helvetica, sans-serif; + color: #898989; + top: 4px; + right: 11px; + text-align: right; + margin: 0; + padding: 0; + height: 11px; +} +.colorpicker_hex { + position: absolute; + width: 72px; + height: 22px; + background: url(../images/colorpicker_hex.png) top; + left: 212px; + top: 142px; +} +.colorpicker_hex input { + right: 6px; +} +.colorpicker_field { + height: 22px; + width: 62px; + background-position: top; + position: absolute; +} +.colorpicker_field span { + position: absolute; + width: 12px; + height: 22px; + overflow: hidden; + top: 0; + right: 0; + cursor: n-resize; +} +.colorpicker_rgb_r { + background-image: url(../images/colorpicker_rgb_r.png); + top: 52px; + left: 212px; +} +.colorpicker_rgb_g { + background-image: url(../images/colorpicker_rgb_g.png); + top: 82px; + left: 212px; +} +.colorpicker_rgb_b { + background-image: url(../images/colorpicker_rgb_b.png); + top: 112px; + left: 212px; +} +.colorpicker_hsb_h { + background-image: url(../images/colorpicker_hsb_h.png); + top: 52px; + left: 282px; +} +.colorpicker_hsb_s { + background-image: url(../images/colorpicker_hsb_s.png); + top: 82px; + left: 282px; +} +.colorpicker_hsb_b { + background-image: url(../images/colorpicker_hsb_b.png); + top: 112px; + left: 282px; +} +.colorpicker_submit { + position: absolute; + width: 22px; + height: 22px; + background: url(../images/colorpicker_submit.png) top; + left: 322px; + top: 142px; + overflow: hidden; +} +.colorpicker_focus { + background-position: center; +} +.colorpicker_hex.colorpicker_focus { + background-position: bottom; +} +.colorpicker_submit.colorpicker_focus { + background-position: bottom; +} +.colorpicker_slider { + background-position: bottom; +} diff --git a/airtime_mvc/public/css/jquery.ui.timepicker.css b/airtime_mvc/public/css/jquery.ui.timepicker.css index 374da6bbb..01f57a5a9 100644 --- a/airtime_mvc/public/css/jquery.ui.timepicker.css +++ b/airtime_mvc/public/css/jquery.ui.timepicker.css @@ -1,72 +1,72 @@ -/* - * Timepicker stylesheet - * Highly inspired from datepicker - * FG - Nov 2010 - Web3R - * - * version 0.0.3 : Fixed some settings, more dynamic - * version 0.0.4 : Removed width:100% on tables - * version 0.1.1 : set width 0 on tables to fix an ie6 bug - */ - -.ui-timepicker-inline { display: inline; } - -#ui-timepicker-div { - padding: 0.2em; - z-index: 1000; -} -.ui-timepicker-table { display: inline-table; width: 0; } -.ui-timepicker-table table { margin:0.15em 0 0 0; border-collapse: collapse; } - -.ui-timepicker-hours, .ui-timepicker-minutes { padding: 0.2em; } - -.ui-timepicker-table .ui-timepicker-title { line-height: 1.8em; text-align: center; } -.ui-timepicker-table td { padding: 0.1em; width: 2.2em; } -.ui-timepicker-table th.periods { padding: 0.1em; width: 2.2em; } - -/* span for disabled cells */ -.ui-timepicker-table td span { - display:block; - padding:0.2em 0.3em 0.2em 0.5em; - width: 1.2em; - - text-align:right; - text-decoration:none; -} -/* anchors for clickable cells */ -.ui-timepicker-table td a { - display:block; - padding:0.2em 0.3em 0.2em 0.5em; - width: 1.2em; - cursor: pointer; - text-align:right; - text-decoration:none; -} - - -/* buttons and button pane styling */ -.ui-timepicker .ui-timepicker-buttonpane { - background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; -} -.ui-timepicker .ui-timepicker-buttonpane button { margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -/* The close button */ -.ui-timepicker .ui-timepicker-close { float: right } - -/* the now button */ -.ui-timepicker .ui-timepicker-now { float: left; } - -/* the deselect button */ -.ui-timepicker .ui-timepicker-deselect { float: left; } - - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-timepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ +/* + * Timepicker stylesheet + * Highly inspired from datepicker + * FG - Nov 2010 - Web3R + * + * version 0.0.3 : Fixed some settings, more dynamic + * version 0.0.4 : Removed width:100% on tables + * version 0.1.1 : set width 0 on tables to fix an ie6 bug + */ + +.ui-timepicker-inline { display: inline; } + +#ui-timepicker-div { + padding: 0.2em; + z-index: 1000; +} +.ui-timepicker-table { display: inline-table; width: 0; } +.ui-timepicker-table table { margin:0.15em 0 0 0; border-collapse: collapse; } + +.ui-timepicker-hours, .ui-timepicker-minutes { padding: 0.2em; } + +.ui-timepicker-table .ui-timepicker-title { line-height: 1.8em; text-align: center; } +.ui-timepicker-table td { padding: 0.1em; width: 2.2em; } +.ui-timepicker-table th.periods { padding: 0.1em; width: 2.2em; } + +/* span for disabled cells */ +.ui-timepicker-table td span { + display:block; + padding:0.2em 0.3em 0.2em 0.5em; + width: 1.2em; + + text-align:right; + text-decoration:none; +} +/* anchors for clickable cells */ +.ui-timepicker-table td a { + display:block; + padding:0.2em 0.3em 0.2em 0.5em; + width: 1.2em; + cursor: pointer; + text-align:right; + text-decoration:none; +} + + +/* buttons and button pane styling */ +.ui-timepicker .ui-timepicker-buttonpane { + background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; +} +.ui-timepicker .ui-timepicker-buttonpane button { margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +/* The close button */ +.ui-timepicker .ui-timepicker-close { float: right } + +/* the now button */ +.ui-timepicker .ui-timepicker-now { float: left; } + +/* the deselect button */ +.ui-timepicker .ui-timepicker-deselect { float: left; } + + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-timepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ } \ No newline at end of file diff --git a/airtime_mvc/public/css/plupload.queue.css b/airtime_mvc/public/css/plupload.queue.css index 3766a71f7..3d5f8d042 100644 --- a/airtime_mvc/public/css/plupload.queue.css +++ b/airtime_mvc/public/css/plupload.queue.css @@ -1,176 +1,176 @@ -/* - Plupload -------------------------------------------------------------------- */ - -.plupload_button { - display: -moz-inline-box; /* FF < 3*/ - display: inline-block; - font: normal 12px sans-serif; - text-decoration: none; - color: #42454a; - border: 1px solid #bababa; - padding: 2px 8px 3px 20px; - margin-right: 4px; - background: #f3f3f3 url('img/buttons.png') no-repeat 0 center; - outline: 0; - - /* Optional rounded corners for browsers that support it */ - -moz-border-radius: 3px; - -khtml-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -.plupload_button:hover { - color: #000; - text-decoration: none; -} - -.plupload_disabled, a.plupload_disabled:hover { - color: #737373; - border-color: #c5c5c5; - background: #ededed url('img/buttons-disabled.png') no-repeat 0 center; - cursor: default; -} - -.plupload_add { - background-position: -181px center; -} - -.plupload_wrapper { - font: normal 11px Verdana,sans-serif; - width: 100%; -} - -.plupload_container { - padding: 8px; - background: url('img/transp50.png'); - /*-moz-border-radius: 5px;*/ -} - -.plupload_container input { - border: 1px solid #DDD; - font: normal 11px Verdana,sans-serif; - width: 98%; -} - -.plupload_header {background: #2A2C2E url('img/backgrounds.gif') repeat-x;} -.plupload_header_content { - min-height: 56px; - padding-left: 10px; - color: #FFF; -} -.plupload_header_title { - font: normal 18px sans-serif; - padding: 6px 0 3px; -} -.plupload_header_text { - font: normal 12px sans-serif; -} - -.plupload_filelist { - margin: 0; - padding: 0; - list-style: none; -} - -.plupload_scroll .plupload_filelist { - height: 185px; - background: #F5F5F5; - overflow-y: scroll; -} - -.plupload_filelist li { - padding: 10px 8px; - background: #F5F5F5 url('img/backgrounds.gif') repeat-x 0 -156px; - border-bottom: 1px solid #DDD; -} - -.plupload_filelist_header, .plupload_filelist_footer { - background: #DFDFDF; - padding: 8px 8px; - color: #42454A; -} -.plupload_filelist_header { - border-top: 1px solid #EEE; - border-bottom: 1px solid #CDCDCD; -} - -.plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;} -.plupload_file_name {float: left; overflow: hidden} -.plupload_file_status {color: #777;} -.plupload_file_status span {color: #42454A;} -.plupload_file_size, .plupload_file_status, .plupload_progress { - float: right; - width: 80px; -} -.plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;} - -.plupload_filelist .plupload_file_name {width: 68%;} - -.plupload_file_action { - float: right; - width: 16px; - height: 16px; - margin-left: 15px; -} - -.plupload_file_action * { - display: none; - width: 16px; - height: 16px; -} - -li.plupload_uploading {background: #ECF3DC url('img/backgrounds.gif') repeat-x 0 -238px;} -li.plupload_done {color:#AAA} - -li.plupload_delete a { - background: url('img/delete.gif'); -} - -li.plupload_failed a { - background: url('img/error.gif'); - cursor: default; -} - -li.plupload_done a { - background: url('img/done.gif'); - cursor: default; -} - -.plupload_progress, .plupload_upload_status { - display: none; -} - -.plupload_progress_container { - margin-top: 3px; - border: 1px solid #CCC; - background: #FFF; - padding: 1px; -} -.plupload_progress_bar { - width: 0px; - height: 7px; - background: #CDEB8B; -} - -.plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action { - margin-right: 17px; -} - -/* Floats */ - -.plupload_clear,.plupload_clearer {clear: both;} -.plupload_clearer, .plupload_progress_bar { - display: block; - font-size: 0; - line-height: 0; -} - -li.plupload_droptext { - background: transparent; - text-align: center; - vertical-align: middle; - border: 0; - line-height: 165px; -} +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_button { + display: -moz-inline-box; /* FF < 3*/ + display: inline-block; + font: normal 12px sans-serif; + text-decoration: none; + color: #42454a; + border: 1px solid #bababa; + padding: 2px 8px 3px 20px; + margin-right: 4px; + background: #f3f3f3 url('img/buttons.png') no-repeat 0 center; + outline: 0; + + /* Optional rounded corners for browsers that support it */ + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.plupload_button:hover { + color: #000; + text-decoration: none; +} + +.plupload_disabled, a.plupload_disabled:hover { + color: #737373; + border-color: #c5c5c5; + background: #ededed url('img/buttons-disabled.png') no-repeat 0 center; + cursor: default; +} + +.plupload_add { + background-position: -181px center; +} + +.plupload_wrapper { + font: normal 11px Verdana,sans-serif; + width: 100%; +} + +.plupload_container { + padding: 8px; + background: url('img/transp50.png'); + /*-moz-border-radius: 5px;*/ +} + +.plupload_container input { + border: 1px solid #DDD; + font: normal 11px Verdana,sans-serif; + width: 98%; +} + +.plupload_header {background: #2A2C2E url('img/backgrounds.gif') repeat-x;} +.plupload_header_content { + min-height: 56px; + padding-left: 10px; + color: #FFF; +} +.plupload_header_title { + font: normal 18px sans-serif; + padding: 6px 0 3px; +} +.plupload_header_text { + font: normal 12px sans-serif; +} + +.plupload_filelist { + margin: 0; + padding: 0; + list-style: none; +} + +.plupload_scroll .plupload_filelist { + height: 185px; + background: #F5F5F5; + overflow-y: scroll; +} + +.plupload_filelist li { + padding: 10px 8px; + background: #F5F5F5 url('img/backgrounds.gif') repeat-x 0 -156px; + border-bottom: 1px solid #DDD; +} + +.plupload_filelist_header, .plupload_filelist_footer { + background: #DFDFDF; + padding: 8px 8px; + color: #42454A; +} +.plupload_filelist_header { + border-top: 1px solid #EEE; + border-bottom: 1px solid #CDCDCD; +} + +.plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;} +.plupload_file_name {float: left; overflow: hidden} +.plupload_file_status {color: #777;} +.plupload_file_status span {color: #42454A;} +.plupload_file_size, .plupload_file_status, .plupload_progress { + float: right; + width: 80px; +} +.plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;} + +.plupload_filelist .plupload_file_name {width: 68%;} + +.plupload_file_action { + float: right; + width: 16px; + height: 16px; + margin-left: 15px; +} + +.plupload_file_action * { + display: none; + width: 16px; + height: 16px; +} + +li.plupload_uploading {background: #ECF3DC url('img/backgrounds.gif') repeat-x 0 -238px;} +li.plupload_done {color:#AAA} + +li.plupload_delete a { + background: url('img/delete.gif'); +} + +li.plupload_failed a { + background: url('img/error.gif'); + cursor: default; +} + +li.plupload_done a { + background: url('img/done.gif'); + cursor: default; +} + +.plupload_progress, .plupload_upload_status { + display: none; +} + +.plupload_progress_container { + margin-top: 3px; + border: 1px solid #CCC; + background: #FFF; + padding: 1px; +} +.plupload_progress_bar { + width: 0px; + height: 7px; + background: #CDEB8B; +} + +.plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action { + margin-right: 17px; +} + +/* Floats */ + +.plupload_clear,.plupload_clearer {clear: both;} +.plupload_clearer, .plupload_progress_bar { + display: block; + font-size: 0; + line-height: 0; +} + +li.plupload_droptext { + background: transparent; + text-align: center; + vertical-align: middle; + border: 0; + line-height: 165px; +} diff --git a/airtime_mvc/public/css/pro_dropdown_3.css b/airtime_mvc/public/css/pro_dropdown_3.css index f83211876..ad31500ae 100644 --- a/airtime_mvc/public/css/pro_dropdown_3.css +++ b/airtime_mvc/public/css/pro_dropdown_3.css @@ -1,185 +1,185 @@ -/* ================================================================ -This copyright notice must be kept untouched in the stylesheet at -all times. - -The original version of this stylesheet and the associated (x)html -is available at http://www.stunicholls.com/menu/pro_dropdown_3.html -Copyright (c) 2005-2007 Stu Nicholls. All rights reserved. -This stylesheet and the associated (x)html may be modified in any -way to fit your requirements. -=================================================================== */ - -#nav { - padding:7px 0 0 6px; - margin:0; - list-style:none; - height:28px; - background:#353535; - position:relative; - z-index:500; - font-family:Arial, Helvetica, sans-serif; - border-top:1px solid #7e7e7e; - border-bottom:1px solid #242424; - -moz-box-shadow: 0 2px 5px rgba(0,0,0,.35); - -webkit-box-shadow: 0 2px 5px rgba(0,0,0,.35); - box-shadow: 0 2px 5px rgba(0,0,0,.35); -} -#nav li.top { - display:block; - float:left; - margin:0 5px 0 0; -} -#nav li a.top_link { - display:block; - float:left; - height:18px; - color:#ccc; - text-decoration:none; - font-size:11px; - text-transform:uppercase; - font-weight:bold; - padding:4px 0 0 14px; - cursor:pointer; -} -#nav li a.top_link span { - float:left; - display:block; - padding:0 14px 0 0; -} -#nav li a.top_link span.down { - float:left; - display:block; - padding:0 28px 0 0px; - background:url(images/down_arrow.png) no-repeat right 50%; - -} -#nav li:hover a.top_link, #nav li.active a.top_link, #nav li.active:hover a.top_link { - color:#fff; - background:#000; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -#nav li:hover a.top_link span { - -} -#nav li:hover a.top_link span.down { - background:url(images/down_arrow.png) no-repeat right 50%; -} -/* Default list styling */ - -#nav li:hover { - position:relative; - z-index:200; -} -#nav li:hover ul.sub { - left:1px; - top:22px; - background: #202020; - padding:3px; - border:1px solid #161616; - white-space:nowrap; - width:200px; - height:auto; - z-index:300; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -} -#nav li:hover ul.sub li { - display:block; - height:22px; - position:relative; - float:left; - width:200px; - font-weight:normal; -} -#nav li:hover ul.sub li a { - display:block; - font-size:12px; - height:20px; - width:198px; - line-height:20px; - text-indent:5px; - color:#fff; - text-decoration:none; - border:1px solid #202020; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} -#nav li ul.sub li a.fly { - background:#202020 url(images/arrow.png) 190px 6px no-repeat; -} -#nav li:hover ul.sub li a:hover { - background:#3d3d3d; - color:#fff; - border-color:#4e4e4e; -} -#nav li:hover ul.sub li a.fly:hover { - background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; - color:#fff; -} -#nav li strong { - display:block; - font-size:12px; - height:20px; - width:198px; - line-height:20px; - margin-bottom:3px; - text-indent:6px; - color:#ff5d1a; - border-bottom:1px solid #414141; - cursor:default; - font-weight:bold; -} -#nav li:hover li:hover ul, #nav li:hover li:hover li:hover ul, #nav li:hover li:hover li:hover li:hover ul, #nav li:hover li:hover li:hover li:hover li:hover ul { - left:200px; - top:-4px; - background: #202020; - padding:3px; - border:1px solid #161616; - white-space:nowrap; - width:200px; - z-index:400; - height:auto; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -#nav ul, #nav li:hover ul ul, #nav li:hover li:hover ul ul, #nav li:hover li:hover li:hover ul ul, #nav li:hover li:hover li:hover li:hover ul ul { - position:absolute; - left:-9999px; - top:-9999px; - width:0; - height:0; - margin:0; - padding:0; - list-style:none; -} -#nav li:hover li:hover a.fly, #nav li:hover li:hover li:hover a.fly, #nav li:hover li:hover li:hover li:hover a.fly, #nav li:hover li:hover li:hover li:hover li:hover a.fly { - background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; - color:#fff; - border-color:#4e4e4e; -} - - -#nav li:hover li:hover li:hover a.fly { - background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; - color:#fff; - border-color:#4e4e4e; -} -#nav li:hover li:hover li:hover li:hover li:hover a.fly { - background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; - color:#fff; - border-color:#4e4e4e; -} -#nav li:hover li:hover li a.fly, -#nav li:hover li:hover li:hover li a.fly, -#nav li:hover li:hover li:hover li:hover li a.fly { - background:#202020 url(images/arrow.png) 190px 6px no-repeat; - color:#fff; - border-color:#202020; -} - +/* ================================================================ +This copyright notice must be kept untouched in the stylesheet at +all times. + +The original version of this stylesheet and the associated (x)html +is available at http://www.stunicholls.com/menu/pro_dropdown_3.html +Copyright (c) 2005-2007 Stu Nicholls. All rights reserved. +This stylesheet and the associated (x)html may be modified in any +way to fit your requirements. +=================================================================== */ + +#nav { + padding:7px 0 0 6px; + margin:0; + list-style:none; + height:28px; + background:#353535; + position:relative; + z-index:500; + font-family:Arial, Helvetica, sans-serif; + border-top:1px solid #7e7e7e; + border-bottom:1px solid #242424; + -moz-box-shadow: 0 2px 5px rgba(0,0,0,.35); + -webkit-box-shadow: 0 2px 5px rgba(0,0,0,.35); + box-shadow: 0 2px 5px rgba(0,0,0,.35); +} +#nav li.top { + display:block; + float:left; + margin:0 5px 0 0; +} +#nav li a.top_link { + display:block; + float:left; + height:18px; + color:#ccc; + text-decoration:none; + font-size:11px; + text-transform:uppercase; + font-weight:bold; + padding:4px 0 0 14px; + cursor:pointer; +} +#nav li a.top_link span { + float:left; + display:block; + padding:0 14px 0 0; +} +#nav li a.top_link span.down { + float:left; + display:block; + padding:0 28px 0 0px; + background:url(images/down_arrow.png) no-repeat right 50%; + +} +#nav li:hover a.top_link, #nav li.active a.top_link, #nav li.active:hover a.top_link { + color:#fff; + background:#000; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +#nav li:hover a.top_link span { + +} +#nav li:hover a.top_link span.down { + background:url(images/down_arrow.png) no-repeat right 50%; +} +/* Default list styling */ + +#nav li:hover { + position:relative; + z-index:200; +} +#nav li:hover ul.sub { + left:1px; + top:22px; + background: #202020; + padding:3px; + border:1px solid #161616; + white-space:nowrap; + width:200px; + height:auto; + z-index:300; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + +} +#nav li:hover ul.sub li { + display:block; + height:22px; + position:relative; + float:left; + width:200px; + font-weight:normal; +} +#nav li:hover ul.sub li a { + display:block; + font-size:12px; + height:20px; + width:198px; + line-height:20px; + text-indent:5px; + color:#fff; + text-decoration:none; + border:1px solid #202020; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} +#nav li ul.sub li a.fly { + background:#202020 url(images/arrow.png) 190px 6px no-repeat; +} +#nav li:hover ul.sub li a:hover { + background:#3d3d3d; + color:#fff; + border-color:#4e4e4e; +} +#nav li:hover ul.sub li a.fly:hover { + background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; + color:#fff; +} +#nav li strong { + display:block; + font-size:12px; + height:20px; + width:198px; + line-height:20px; + margin-bottom:3px; + text-indent:6px; + color:#ff5d1a; + border-bottom:1px solid #414141; + cursor:default; + font-weight:bold; +} +#nav li:hover li:hover ul, #nav li:hover li:hover li:hover ul, #nav li:hover li:hover li:hover li:hover ul, #nav li:hover li:hover li:hover li:hover li:hover ul { + left:200px; + top:-4px; + background: #202020; + padding:3px; + border:1px solid #161616; + white-space:nowrap; + width:200px; + z-index:400; + height:auto; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +#nav ul, #nav li:hover ul ul, #nav li:hover li:hover ul ul, #nav li:hover li:hover li:hover ul ul, #nav li:hover li:hover li:hover li:hover ul ul { + position:absolute; + left:-9999px; + top:-9999px; + width:0; + height:0; + margin:0; + padding:0; + list-style:none; +} +#nav li:hover li:hover a.fly, #nav li:hover li:hover li:hover a.fly, #nav li:hover li:hover li:hover li:hover a.fly, #nav li:hover li:hover li:hover li:hover li:hover a.fly { + background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; + color:#fff; + border-color:#4e4e4e; +} + + +#nav li:hover li:hover li:hover a.fly { + background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; + color:#fff; + border-color:#4e4e4e; +} +#nav li:hover li:hover li:hover li:hover li:hover a.fly { + background:#3d3d3d url(images/arrow_over.png) 190px 6px no-repeat; + color:#fff; + border-color:#4e4e4e; +} +#nav li:hover li:hover li a.fly, +#nav li:hover li:hover li:hover li a.fly, +#nav li:hover li:hover li:hover li:hover li a.fly { + background:#202020 url(images/arrow.png) 190px 6px no-repeat; + color:#fff; + border-color:#202020; +} + diff --git a/airtime_mvc/public/css/redmond/jquery-ui-1.8.8.custom.css b/airtime_mvc/public/css/redmond/jquery-ui-1.8.8.custom.css index 4956e096e..3ac07ab95 100644 --- a/airtime_mvc/public/css/redmond/jquery-ui-1.8.8.custom.css +++ b/airtime_mvc/public/css/redmond/jquery-ui-1.8.8.custom.css @@ -1,1524 +1,1524 @@ -/* - * jQuery UI CSS Framework 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - position: absolute; - left: -99999999px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} -.ui-helper-clearfix { - display: inline-block; -} -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { - height:1%; -} -.ui-helper-clearfix { - display:block; -} -/* end clearfix */ -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); -} -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; -} -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -/* - * jQuery UI CSS Framework 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Helvetica,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.2em&cornerRadius=0px&bgColorHeader=ebebeb&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=50&borderColorHeader=d3d3d3&fcHeader=444444&iconColorHeader=007fb3&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=dddddd&fcContent=444444&iconColorContent=ff0084&bgColorDefault=f6f6f6&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=100&borderColorDefault=d3d3d3&fcDefault=3b3b3b&iconColorDefault=666666&bgColorHover=007fb3&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=25&borderColorHover=007fb3&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=d3d3d3&fcActive=007fb3&iconColorActive=454545&bgColorHighlight=eff6eb&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=65a539&fcHighlight=65a539&iconColorHighlight=65a539&bgColorError=fae5e5&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=d00000&fcError=d00000&iconColorError=d00000&bgColorOverlay=9d9d9d&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=50&bgColorShadow=6c6c6c&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=6px&offsetTopShadow=-6px&offsetLeftShadow=-6px&cornerRadiusShadow=0px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Helvetica, Arial, sans-serif; - font-size: 1.2em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { - font-family: Helvetica, Arial, sans-serif; - font-size: 12px; -} -.ui-widget-content { - border: 1px solid #5b5b5b; - background: #aaaaaa url(images/ui-bg_default_aaaaaa.png) repeat-x 0 0; - color: #1c1c1c; -} -.ui-widget-content a { - color: #444444; -} -.ui-widget-header { - border: 1px solid #5b5b5b; - background: #9a9a9a url(images/ui-bg_highlight.png) 0 0 repeat-x; - color: #444444; - font-weight: bold; -} -.ui-widget-header a { - color: #444444; -} -/* Interaction states -----------------------------------*/ - - -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { - border: 1px solid #5b5b5b; - background-color: #6e6e6e; - background: -moz-linear-gradient(top, #868686 0, #6e6e6e 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #868686), color-stop(100%, #6e6e6e)); - color: #ffffff; -} -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { - color: #ffffff; - text-decoration: none; -} -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { - border: 1px solid #242424; - background-color: #292929; - background: -moz-linear-gradient(top, #3b3b3b 0, #292929 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3b3b3b), color-stop(100%, #292929)); - color: #ffffff; -} -.ui-state-hover a, .ui-state-hover a:hover { - color: #ffffff; - text-decoration: none; -} -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { - border: 1px solid #5b5b5b; - background: #c6c6c6; - color: #000; - outline:none; -} -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { - color: #000; - text-decoration: none; -} -.ui-widget :active { - outline: none; -} -.ui-widget-header .ui-state-default, -.ui-widget-header .ui-state-hover, -.ui-widget-header .ui-state-focus, -.ui-widget-header .ui-state-active { - font-weight:bold; -} -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { - border: 1px solid #65a539; - background: #eff6eb url(images/ui-bg_flat_55_eff6eb_40x100.png) 50% 50% repeat-x; - color: #65a539; -} -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { - color: #65a539; -} -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { - border: 1px solid #d00000; - background: #fae5e5 url(images/ui-bg_flat_55_fae5e5_40x100.png) 50% 50% repeat-x; - color: #d00000; -} -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { - color: #d00000; -} -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { - color: #d00000; -} -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); - font-weight: normal; -} -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); - background-image: none; -} -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; - background-image: url(images/ui-icons_ffffff_256x240.png); -} -.ui-widget-content .ui-icon { - background-image: url(images/ui-icons_ffffff_256x240.png); -} -.ui-widget-header .ui-icon { - background-image: url(images/ui-icons_ffffff_256x240.png); -} -.ui-state-default .ui-icon { - background-image: url(images/ui-icons_ffffff_256x240.png); -} -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon { - background-image: url(images/ui-icons_ff5d1a_256x240.png); -} -.ui-state-active .ui-icon { - background-image: url(images/ui-icons_ff5d1a_256x240.png); -} -.ui-state-highlight .ui-icon { - background-image: url(images/ui-icons_65a539_256x240.png); -} -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon { - background-image: url(images/ui-icons_d00000_256x240.png); -} -/* positioning */ -.ui-icon-carat-1-n { - background-position: 0 0; -} -.ui-icon-carat-1-ne { - background-position: -16px 0; -} -.ui-icon-carat-1-e { - background-position: -32px 0; -} -.ui-icon-carat-1-se { - background-position: -48px 0; -} -.ui-icon-carat-1-s { - background-position: -64px 0; -} -.ui-icon-carat-1-sw { - background-position: -80px 0; -} -.ui-icon-carat-1-w { - background-position: -96px 0; -} -.ui-icon-carat-1-nw { - background-position: -112px 0; -} -.ui-icon-carat-2-n-s { - background-position: -128px 0; -} -.ui-icon-carat-2-e-w { - background-position: -144px 0; -} -.ui-icon-triangle-1-n { - background-position: 0 -16px; -} -.ui-icon-triangle-1-ne { - background-position: -16px -16px; -} -.ui-icon-triangle-1-e { - background-position: -32px -16px; -} -.ui-icon-triangle-1-se { - background-position: -48px -16px; -} -.ui-icon-triangle-1-s { - background-position: -64px -16px; -} -.ui-icon-triangle-1-sw { - background-position: -80px -16px; -} -.ui-icon-triangle-1-w { - background-position: -96px -16px; -} -.ui-icon-triangle-1-nw { - background-position: -112px -16px; -} -.ui-icon-triangle-2-n-s { - background-position: -128px -16px; -} -.ui-icon-triangle-2-e-w { - background-position: -144px -16px; -} -.ui-icon-arrow-1-n { - background-position: 0 -32px; -} -.ui-icon-arrow-1-ne { - background-position: -16px -32px; -} -.ui-icon-arrow-1-e { - background-position: -32px -32px; -} -.ui-icon-arrow-1-se { - background-position: -48px -32px; -} -.ui-icon-arrow-1-s { - background-position: -64px -32px; -} -.ui-icon-arrow-1-sw { - background-position: -80px -32px; -} -.ui-icon-arrow-1-w { - background-position: -96px -32px; -} -.ui-icon-arrow-1-nw { - background-position: -112px -32px; -} -.ui-icon-arrow-2-n-s { - background-position: -128px -32px; -} -.ui-icon-arrow-2-ne-sw { - background-position: -144px -32px; -} -.ui-icon-arrow-2-e-w { - background-position: -160px -32px; -} -.ui-icon-arrow-2-se-nw { - background-position: -176px -32px; -} -.ui-icon-arrowstop-1-n { - background-position: -192px -32px; -} -.ui-icon-arrowstop-1-e { - background-position: -208px -32px; -} -.ui-icon-arrowstop-1-s { - background-position: -224px -32px; -} -.ui-icon-arrowstop-1-w { - background-position: -240px -32px; -} -.ui-icon-arrowthick-1-n { - background-position: 0 -48px; -} -.ui-icon-arrowthick-1-ne { - background-position: -16px -48px; -} -.ui-icon-arrowthick-1-e { - background-position: -32px -48px; -} -.ui-icon-arrowthick-1-se { - background-position: -48px -48px; -} -.ui-icon-arrowthick-1-s { - background-position: -64px -48px; -} -.ui-icon-arrowthick-1-sw { - background-position: -80px -48px; -} -.ui-icon-arrowthick-1-w { - background-position: -96px -48px; -} -.ui-icon-arrowthick-1-nw { - background-position: -112px -48px; -} -.ui-icon-arrowthick-2-n-s { - background-position: -128px -48px; -} -.ui-icon-arrowthick-2-ne-sw { - background-position: -144px -48px; -} -.ui-icon-arrowthick-2-e-w { - background-position: -160px -48px; -} -.ui-icon-arrowthick-2-se-nw { - background-position: -176px -48px; -} -.ui-icon-arrowthickstop-1-n { - background-position: -192px -48px; -} -.ui-icon-arrowthickstop-1-e { - background-position: -208px -48px; -} -.ui-icon-arrowthickstop-1-s { - background-position: -224px -48px; -} -.ui-icon-arrowthickstop-1-w { - background-position: -240px -48px; -} -.ui-icon-arrowreturnthick-1-w { - background-position: 0 -64px; -} -.ui-icon-arrowreturnthick-1-n { - background-position: -16px -64px; -} -.ui-icon-arrowreturnthick-1-e { - background-position: -32px -64px; -} -.ui-icon-arrowreturnthick-1-s { - background-position: -48px -64px; -} -.ui-icon-arrowreturn-1-w { - background-position: -64px -64px; -} -.ui-icon-arrowreturn-1-n { - background-position: -80px -64px; -} -.ui-icon-arrowreturn-1-e { - background-position: -96px -64px; -} -.ui-icon-arrowreturn-1-s { - background-position: -112px -64px; -} -.ui-icon-arrowrefresh-1-w { - background-position: -128px -64px; -} -.ui-icon-arrowrefresh-1-n { - background-position: -144px -64px; -} -.ui-icon-arrowrefresh-1-e { - background-position: -160px -64px; -} -.ui-icon-arrowrefresh-1-s { - background-position: -176px -64px; -} -.ui-icon-arrow-4 { - background-position: 0 -80px; -} -.ui-icon-arrow-4-diag { - background-position: -16px -80px; -} -.ui-icon-extlink { - background-position: -32px -80px; -} -.ui-icon-newwin { - background-position: -48px -80px; -} -.ui-icon-refresh { - background-position: -64px -80px; -} -.ui-icon-shuffle { - background-position: -80px -80px; -} -.ui-icon-transfer-e-w { - background-position: -96px -80px; -} -.ui-icon-transferthick-e-w { - background-position: -112px -80px; -} -.ui-icon-folder-collapsed { - background-position: 0 -96px; -} -.ui-icon-folder-open { - background-position: -16px -96px; -} -.ui-icon-document { - background-position: -32px -96px; -} -.ui-icon-document-b { - background-position: -48px -96px; -} -.ui-icon-note { - background-position: -64px -96px; -} -.ui-icon-mail-closed { - background-position: -80px -96px; -} -.ui-icon-mail-open { - background-position: -96px -96px; -} -.ui-icon-suitcase { - background-position: -112px -96px; -} -.ui-icon-comment { - background-position: -128px -96px; -} -.ui-icon-person { - background-position: -144px -96px; -} -.ui-icon-print { - background-position: -160px -96px; -} -.ui-icon-trash { - background-position: -176px -96px; -} -.ui-icon-locked { - background-position: -192px -96px; -} -.ui-icon-unlocked { - background-position: -208px -96px; -} -.ui-icon-bookmark { - background-position: -224px -96px; -} -.ui-icon-tag { - background-position: -240px -96px; -} -.ui-icon-home { - background-position: 0 -112px; -} -.ui-icon-flag { - background-position: -16px -112px; -} -.ui-icon-calendar { - background-position: -32px -112px; -} -.ui-icon-cart { - background-position: -48px -112px; -} -.ui-icon-pencil { - background-position: -64px -112px; -} -.ui-icon-clock { - background-position: -80px -112px; -} -.ui-icon-disk { - background-position: -96px -112px; -} -.ui-icon-calculator { - background-position: -112px -112px; -} -.ui-icon-zoomin { - background-position: -128px -112px; -} -.ui-icon-zoomout { - background-position: -144px -112px; -} -.ui-icon-search { - background-position: -160px -112px; -} -.ui-icon-wrench { - background-position: -176px -112px; -} -.ui-icon-gear { - background-position: -192px -112px; -} -.ui-icon-heart { - background-position: -208px -112px; -} -.ui-icon-star { - background-position: -224px -112px; -} -.ui-icon-link { - background-position: -240px -112px; -} -.ui-icon-cancel { - background-position: 0 -128px; -} -.ui-icon-plus { - background-position: -16px -128px; -} -.ui-icon-plusthick { - background-position: -32px -128px; -} -.ui-icon-minus { - background-position: -48px -128px; -} -.ui-icon-minusthick { - background-position: -64px -128px; -} -.ui-icon-close { - background-position: -80px -128px; -} -.ui-icon-closethick { - background-position: -96px -128px; -} -.ui-icon-key { - background-position: -112px -128px; -} -.ui-icon-lightbulb { - background-position: -128px -128px; -} -.ui-icon-scissors { - background-position: -144px -128px; -} -.ui-icon-clipboard { - background-position: -160px -128px; -} -.ui-icon-copy { - background-position: -176px -128px; -} -.ui-icon-contact { - background-position: -192px -128px; -} -.ui-icon-image { - background-position: -208px -128px; -} -.ui-icon-video { - background-position: -224px -128px; -} -.ui-icon-script { - background-position: -240px -128px; -} -.ui-icon-alert { - background-position: 0 -144px; -} -.ui-icon-info { - background-position: -16px -144px; -} -.ui-icon-notice { - background-position: -32px -144px; -} -.ui-icon-help { - background-position: -48px -144px; -} -.ui-icon-check { - background-position: -64px -144px; -} -.ui-icon-bullet { - background-position: -80px -144px; -} -.ui-icon-radio-off { - background-position: -96px -144px; -} -.ui-icon-radio-on { - background-position: -112px -144px; -} -.ui-icon-pin-w { - background-position: -128px -144px; -} -.ui-icon-pin-s { - background-position: -144px -144px; -} -.ui-icon-play { - background-position: 0 -160px; -} -.ui-icon-pause { - background-position: -16px -160px; -} -.ui-icon-seek-next { - background-position: -32px -160px; -} -.ui-icon-seek-prev { - background-position: -48px -160px; -} -.ui-icon-seek-end { - background-position: -64px -160px; -} -.ui-icon-seek-start { - background-position: -80px -160px; -} -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { - background-position: -80px -160px; -} -.ui-icon-stop { - background-position: -96px -160px; -} -.ui-icon-eject { - background-position: -112px -160px; -} -.ui-icon-volume-off { - background-position: -128px -160px; -} -.ui-icon-volume-on { - background-position: -144px -160px; -} -.ui-icon-power { - background-position: 0 -176px; -} -.ui-icon-signal-diag { - background-position: -16px -176px; -} -.ui-icon-signal { - background-position: -32px -176px; -} -.ui-icon-battery-0 { - background-position: -48px -176px; -} -.ui-icon-battery-1 { - background-position: -64px -176px; -} -.ui-icon-battery-2 { - background-position: -80px -176px; -} -.ui-icon-battery-3 { - background-position: -96px -176px; -} -.ui-icon-circle-plus { - background-position: 0 -192px; -} -.ui-icon-circle-minus { - background-position: -16px -192px; -} -.ui-icon-circle-close { - background-position: -32px -192px; -} -.ui-icon-circle-triangle-e { - background-position: -48px -192px; -} -.ui-icon-circle-triangle-s { - background-position: -64px -192px; -} -.ui-icon-circle-triangle-w { - background-position: -80px -192px; -} -.ui-icon-circle-triangle-n { - background-position: -96px -192px; -} -.ui-icon-circle-arrow-e { - background-position: -112px -192px; -} -.ui-icon-circle-arrow-s { - background-position: -128px -192px; -} -.ui-icon-circle-arrow-w { - background-position: -144px -192px; -} -.ui-icon-circle-arrow-n { - background-position: -160px -192px; -} -.ui-icon-circle-zoomin { - background-position: -176px -192px; -} -.ui-icon-circle-zoomout { - background-position: -192px -192px; -} -.ui-icon-circle-check { - background-position: -208px -192px; -} -.ui-icon-circlesmall-plus { - background-position: 0 -208px; -} -.ui-icon-circlesmall-minus { - background-position: -16px -208px; -} -.ui-icon-circlesmall-close { - background-position: -32px -208px; -} -.ui-icon-squaresmall-plus { - background-position: -48px -208px; -} -.ui-icon-squaresmall-minus { - background-position: -64px -208px; -} -.ui-icon-squaresmall-close { - background-position: -80px -208px; -} -.ui-icon-grip-dotted-vertical { - background-position: 0 -224px; -} -.ui-icon-grip-dotted-horizontal { - background-position: -16px -224px; -} -.ui-icon-grip-solid-vertical { - background-position: -32px -224px; -} -.ui-icon-grip-solid-horizontal { - background-position: -48px -224px; -} -.ui-icon-gripsmall-diagonal-se { - background-position: -64px -224px; -} -.ui-icon-grip-diagonal-se { - background-position: -80px -224px; -} -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { - -moz-border-radius-topleft: 0px; - -webkit-border-top-left-radius: 0px; - border-top-left-radius: 0px; -} -.ui-corner-tr { - -moz-border-radius-topright: 0px; - -webkit-border-top-right-radius: 0px; - border-top-right-radius: 0px; -} -.ui-corner-bl { - -moz-border-radius-bottomleft: 0px; - -webkit-border-bottom-left-radius: 0px; - border-bottom-left-radius: 0px; -} -.ui-corner-br { - -moz-border-radius-bottomright: 0px; - -webkit-border-bottom-right-radius: 0px; - border-bottom-right-radius: 0px; -} -.ui-corner-top { - -moz-border-radius-topleft: 0px; - -webkit-border-top-left-radius: 0px; - border-top-left-radius: 0px; - -moz-border-radius-topright: 0px; - -webkit-border-top-right-radius: 0px; - border-top-right-radius: 0px; -} -.ui-corner-bottom { - -moz-border-radius-bottomleft: 0px; - -webkit-border-bottom-left-radius: 0px; - border-bottom-left-radius: 0px; - -moz-border-radius-bottomright: 0px; - -webkit-border-bottom-right-radius: 0px; - border-bottom-right-radius: 0px; -} -.ui-corner-right { - -moz-border-radius-topright: 0px; - -webkit-border-top-right-radius: 0px; - border-top-right-radius: 0px; - -moz-border-radius-bottomright: 0px; - -webkit-border-bottom-right-radius: 0px; - border-bottom-right-radius: 0px; -} -.ui-corner-left { - -moz-border-radius-topleft: 0px; - -webkit-border-top-left-radius: 0px; - border-top-left-radius: 0px; - -moz-border-radius-bottomleft: 0px; - -webkit-border-bottom-left-radius: 0px; - border-bottom-left-radius: 0px; -} -.ui-corner-all { - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; -} -/* Overlays */ -.ui-widget-overlay { - background: #9d9d9d url(images/ui-bg_flat_0_9d9d9d_40x100.png) 50% 50% repeat-x; - opacity: .50; - filter:Alpha(Opacity=50); -} -.ui-widget-shadow { - margin: -6px 0 0 -6px; - padding: 6px; - background: #6c6c6c url(images/ui-bg_flat_0_6c6c6c_40x100.png) 50% 50% repeat-x; - opacity: .60; - filter:Alpha(Opacity=60); - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; -}/* - * jQuery UI Resizable 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizable#theming - */ -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - font-size: 0.1px; - z-index: 99999; - display: block; -} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - cursor: n-resize; - height: 7px; - width: 100%; - top: -5px; - left: 0; -} -.ui-resizable-s { - cursor: s-resize; - height: 7px; - width: 100%; - bottom: -5px; - left: 0; -} -.ui-resizable-e { - cursor: e-resize; - width: 7px; - right: -5px; - top: 0; - height: 100%; -} -.ui-resizable-w { - cursor: w-resize; - width: 7px; - left: -5px; - top: 0; - height: 100%; -} -.ui-resizable-se { - cursor: se-resize; - width: 12px; - height: 12px; - right: 1px; - bottom: 1px; -} -.ui-resizable-sw { - cursor: sw-resize; - width: 9px; - height: 9px; - left: -5px; - bottom: -5px; -} -.ui-resizable-nw { - cursor: nw-resize; - width: 9px; - height: 9px; - left: -5px; - top: -5px; -} -.ui-resizable-ne { - cursor: ne-resize; - width: 9px; - height: 9px; - right: -5px; - top: -5px; -}/* - * jQuery UI Selectable 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectable#theming - */ -.ui-selectable-helper { - position: absolute; - z-index: 100; - border:1px dotted black; -} -/* - * jQuery UI Accordion 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion#theming - */ -/* IE/Win - Fix animation bug - #4615 */ -.ui-accordion { - width: 100%; -} -.ui-accordion .ui-accordion-header { - cursor: pointer; - position: relative; - margin-top: 1px; - zoom: 1; - font-weight:bold; -} -.ui-accordion .ui-accordion-li-fix { - display: inline; -} -.ui-accordion .ui-accordion-header-active { - border-bottom: 0 !important; -} -.ui-accordion .ui-accordion-header a { - display: block; - font-size: 1em; - padding: .5em .5em .5em .7em; -} -.ui-accordion-icons .ui-accordion-header a { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-header .ui-icon { - position: absolute; - left: .5em; - top: 50%; - margin-top: -8px; -} -.ui-accordion .ui-accordion-content { - padding: 10px; - border-top: 0; - margin-top: -2px; - position: relative; - top: 1px; - margin-bottom: 2px; - overflow: auto; - display: none; - zoom: 1; -} -.ui-accordion .ui-accordion-content-active { - display: block; -}/* - * jQuery UI Autocomplete 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { - position: absolute; - cursor: default; -} -/* workarounds */ -* html .ui-autocomplete { - width:1px; -} /* without this, the menu expands to 100% in IE6 */ -/* - * jQuery UI Menu 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} -/* - * jQuery UI Button 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button#theming - */ -.ui-button { - display: inline-block; - position: relative; - padding: 0; - margin-right: .1em; - text-decoration: none !important; - cursor: pointer; - text-align: center; - zoom: 1; - overflow: visible; -} /* the overflow property removes extra width in IE */ -.ui-button-icon-only { - width: 2.2em; -} /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { - width: 2.4em; -} /* button elements seem to need a little more width */ -.ui-button-icons-only { - width: 3.4em; -} -button.ui-button-icons-only { - width: 3.7em; -} -/*button text element */ -.ui-button .ui-button-text { - display: block; - line-height: 1.4; -} -.ui-button-text-only .ui-button-text { - padding: .4em 1em; -} -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { - padding: .4em; - text-indent: -9999999px; -} -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { - padding: .4em 1em .4em 2.1em; -} -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { - padding: .4em 2.1em .4em 1em; -} -.ui-button-text-icons .ui-button-text { - padding-left: 2.1em; - padding-right: 2.1em; -} -/* no icon support for input elements, provide padding by default */ -input.ui-button { - padding: .4em 1em; -} -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { - position: absolute; - top: 50%; - margin-top: -8px; - left: 0.2em; -} -.ui-button-icon-only .ui-icon { - left: 50%; - margin-left: -8px; -} -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { - left: .5em; -} -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { - right: .5em; -} -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { - right: .5em; -} -/*button sets*/ -.ui-buttonset { - margin-right: 7px; -} -.ui-buttonset .ui-button { - margin-left: 0; - margin-right: -.3em; -} - -/* workarounds */ - -button.ui-button.::-moz-focus-inner { - border: 0; - padding: 0; -} - - /* reset extra padding in Firefox */ -/* - * jQuery UI Dialog 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { - position: absolute; - padding: .4em; - width: 300px; - overflow: hidden; - border-width: 3px; -} -.ui-dialog .ui-dialog-titlebar { - padding: 6px 8px 6px 8px; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 16px .2em 0; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 19px; - margin: -10px 0 0 0; - padding: 1px; - height: 18px; -} -.ui-dialog .ui-dialog-titlebar-close span { - display: block; - margin: 1px; -} -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { - padding: 0; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; - zoom: 1; - -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background: none; - margin: .5em 0 0 0; - margin: 0.3em -0.4em 0; - padding: 0.3em 1em 0 0.4em; - border-color: #9f9f9f; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-se { - width: 14px; - height: 14px; - right: 3px; - bottom: 3px; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -/* - * jQuery UI Slider 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider#theming - */ -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -}/* - * jQuery UI Tabs 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs#theming - */ -.ui-tabs { - position: relative; - padding: 4px; - zoom: 1; -} /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 1px; - margin: 0 .2em 1px 0; - border-bottom: 0 !important; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav li a { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { - margin-bottom: 0; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { - cursor: text; -} -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { - cursor: pointer; -} /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - /*padding: 1em 1.4em;*/ - background: none; -} -.ui-tabs .ui-tabs-hide { - display: none !important; -} -/* - * jQuery UI Datepicker 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker#theming - */ -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; -} -.ui-datepicker .ui-datepicker-header { - position:relative; - padding:.2em 0; -} -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { - position:absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left:2px; -} -.ui-datepicker .ui-datepicker-next { - right:2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left:1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right:1px; -} -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size:1em; - margin:1px 0; -} -.ui-datepicker select.ui-datepicker-month-year { - width: 100%; -} -.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { - width: 49%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin:0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, .ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding:0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width:auto; - overflow:visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float:left; -} -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width:auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float:left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width:95%; - margin:0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width:50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width:33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width:25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { - border-left-width:0; -} -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width:0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear:left; -} -.ui-datepicker-row-break { - clear:both; - width:100%; -} -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear:right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { - float:right; -} -.ui-datepicker-rtl .ui-datepicker-group { - float:right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { - border-right-width:0; - border-left-width:1px; -} -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width:0; - border-left-width:1px; -} -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* - * jQuery UI Progressbar 1.8.6 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar#theming - */ -.ui-progressbar { - height:2em; - text-align: left; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height:100%; -} - - -.ui-datepicker { - display:none; +/* + * jQuery UI CSS Framework 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + position: absolute; + left: -99999999px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +.ui-helper-clearfix { + display: inline-block; +} +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { + height:1%; +} +.ui-helper-clearfix { + display:block; +} +/* end clearfix */ +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +/* + * jQuery UI CSS Framework 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Helvetica,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.2em&cornerRadius=0px&bgColorHeader=ebebeb&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=50&borderColorHeader=d3d3d3&fcHeader=444444&iconColorHeader=007fb3&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=dddddd&fcContent=444444&iconColorContent=ff0084&bgColorDefault=f6f6f6&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=100&borderColorDefault=d3d3d3&fcDefault=3b3b3b&iconColorDefault=666666&bgColorHover=007fb3&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=25&borderColorHover=007fb3&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=d3d3d3&fcActive=007fb3&iconColorActive=454545&bgColorHighlight=eff6eb&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=65a539&fcHighlight=65a539&iconColorHighlight=65a539&bgColorError=fae5e5&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=d00000&fcError=d00000&iconColorError=d00000&bgColorOverlay=9d9d9d&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=50&bgColorShadow=6c6c6c&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=6px&offsetTopShadow=-6px&offsetLeftShadow=-6px&cornerRadiusShadow=0px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Helvetica, Arial, sans-serif; + font-size: 1.2em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; +} +.ui-widget-content { + border: 1px solid #5b5b5b; + background: #aaaaaa url(images/ui-bg_default_aaaaaa.png) repeat-x 0 0; + color: #1c1c1c; +} +.ui-widget-content a { + color: #444444; +} +.ui-widget-header { + border: 1px solid #5b5b5b; + background: #9a9a9a url(images/ui-bg_highlight.png) 0 0 repeat-x; + color: #444444; + font-weight: bold; +} +.ui-widget-header a { + color: #444444; +} +/* Interaction states +----------------------------------*/ + + +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { + border: 1px solid #5b5b5b; + background-color: #6e6e6e; + background: -moz-linear-gradient(top, #868686 0, #6e6e6e 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #868686), color-stop(100%, #6e6e6e)); + color: #ffffff; +} +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { + color: #ffffff; + text-decoration: none; +} +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { + border: 1px solid #242424; + background-color: #292929; + background: -moz-linear-gradient(top, #3b3b3b 0, #292929 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3b3b3b), color-stop(100%, #292929)); + color: #ffffff; +} +.ui-state-hover a, .ui-state-hover a:hover { + color: #ffffff; + text-decoration: none; +} +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { + border: 1px solid #5b5b5b; + background: #c6c6c6; + color: #000; + outline:none; +} +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { + color: #000; + text-decoration: none; +} +.ui-widget :active { + outline: none; +} +.ui-widget-header .ui-state-default, +.ui-widget-header .ui-state-hover, +.ui-widget-header .ui-state-focus, +.ui-widget-header .ui-state-active { + font-weight:bold; +} +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { + border: 1px solid #65a539; + background: #eff6eb url(images/ui-bg_flat_55_eff6eb_40x100.png) 50% 50% repeat-x; + color: #65a539; +} +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { + color: #65a539; +} +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { + border: 1px solid #d00000; + background: #fae5e5 url(images/ui-bg_flat_55_fae5e5_40x100.png) 50% 50% repeat-x; + color: #d00000; +} +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { + color: #d00000; +} +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { + color: #d00000; +} +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; + background-image: url(images/ui-icons_ffffff_256x240.png); +} +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_ffffff_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_ffffff_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_ffffff_256x240.png); +} +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon { + background-image: url(images/ui-icons_ff5d1a_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_ff5d1a_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_65a539_256x240.png); +} +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_d00000_256x240.png); +} +/* positioning */ +.ui-icon-carat-1-n { + background-position: 0 0; +} +.ui-icon-carat-1-ne { + background-position: -16px 0; +} +.ui-icon-carat-1-e { + background-position: -32px 0; +} +.ui-icon-carat-1-se { + background-position: -48px 0; +} +.ui-icon-carat-1-s { + background-position: -64px 0; +} +.ui-icon-carat-1-sw { + background-position: -80px 0; +} +.ui-icon-carat-1-w { + background-position: -96px 0; +} +.ui-icon-carat-1-nw { + background-position: -112px 0; +} +.ui-icon-carat-2-n-s { + background-position: -128px 0; +} +.ui-icon-carat-2-e-w { + background-position: -144px 0; +} +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} +.ui-icon-triangle-1-s { + background-position: -64px -16px; +} +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} +.ui-icon-arrow-1-s { + background-position: -64px -32px; +} +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} +.ui-icon-arrowthick-1-n { + background-position: 0 -48px; +} +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} +.ui-icon-arrow-4 { + background-position: 0 -80px; +} +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} +.ui-icon-extlink { + background-position: -32px -80px; +} +.ui-icon-newwin { + background-position: -48px -80px; +} +.ui-icon-refresh { + background-position: -64px -80px; +} +.ui-icon-shuffle { + background-position: -80px -80px; +} +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} +.ui-icon-folder-open { + background-position: -16px -96px; +} +.ui-icon-document { + background-position: -32px -96px; +} +.ui-icon-document-b { + background-position: -48px -96px; +} +.ui-icon-note { + background-position: -64px -96px; +} +.ui-icon-mail-closed { + background-position: -80px -96px; +} +.ui-icon-mail-open { + background-position: -96px -96px; +} +.ui-icon-suitcase { + background-position: -112px -96px; +} +.ui-icon-comment { + background-position: -128px -96px; +} +.ui-icon-person { + background-position: -144px -96px; +} +.ui-icon-print { + background-position: -160px -96px; +} +.ui-icon-trash { + background-position: -176px -96px; +} +.ui-icon-locked { + background-position: -192px -96px; +} +.ui-icon-unlocked { + background-position: -208px -96px; +} +.ui-icon-bookmark { + background-position: -224px -96px; +} +.ui-icon-tag { + background-position: -240px -96px; +} +.ui-icon-home { + background-position: 0 -112px; +} +.ui-icon-flag { + background-position: -16px -112px; +} +.ui-icon-calendar { + background-position: -32px -112px; +} +.ui-icon-cart { + background-position: -48px -112px; +} +.ui-icon-pencil { + background-position: -64px -112px; +} +.ui-icon-clock { + background-position: -80px -112px; +} +.ui-icon-disk { + background-position: -96px -112px; +} +.ui-icon-calculator { + background-position: -112px -112px; +} +.ui-icon-zoomin { + background-position: -128px -112px; +} +.ui-icon-zoomout { + background-position: -144px -112px; +} +.ui-icon-search { + background-position: -160px -112px; +} +.ui-icon-wrench { + background-position: -176px -112px; +} +.ui-icon-gear { + background-position: -192px -112px; +} +.ui-icon-heart { + background-position: -208px -112px; +} +.ui-icon-star { + background-position: -224px -112px; +} +.ui-icon-link { + background-position: -240px -112px; +} +.ui-icon-cancel { + background-position: 0 -128px; +} +.ui-icon-plus { + background-position: -16px -128px; +} +.ui-icon-plusthick { + background-position: -32px -128px; +} +.ui-icon-minus { + background-position: -48px -128px; +} +.ui-icon-minusthick { + background-position: -64px -128px; +} +.ui-icon-close { + background-position: -80px -128px; +} +.ui-icon-closethick { + background-position: -96px -128px; +} +.ui-icon-key { + background-position: -112px -128px; +} +.ui-icon-lightbulb { + background-position: -128px -128px; +} +.ui-icon-scissors { + background-position: -144px -128px; +} +.ui-icon-clipboard { + background-position: -160px -128px; +} +.ui-icon-copy { + background-position: -176px -128px; +} +.ui-icon-contact { + background-position: -192px -128px; +} +.ui-icon-image { + background-position: -208px -128px; +} +.ui-icon-video { + background-position: -224px -128px; +} +.ui-icon-script { + background-position: -240px -128px; +} +.ui-icon-alert { + background-position: 0 -144px; +} +.ui-icon-info { + background-position: -16px -144px; +} +.ui-icon-notice { + background-position: -32px -144px; +} +.ui-icon-help { + background-position: -48px -144px; +} +.ui-icon-check { + background-position: -64px -144px; +} +.ui-icon-bullet { + background-position: -80px -144px; +} +.ui-icon-radio-off { + background-position: -96px -144px; +} +.ui-icon-radio-on { + background-position: -112px -144px; +} +.ui-icon-pin-w { + background-position: -128px -144px; +} +.ui-icon-pin-s { + background-position: -144px -144px; +} +.ui-icon-play { + background-position: 0 -160px; +} +.ui-icon-pause { + background-position: -16px -160px; +} +.ui-icon-seek-next { + background-position: -32px -160px; +} +.ui-icon-seek-prev { + background-position: -48px -160px; +} +.ui-icon-seek-end { + background-position: -64px -160px; +} +.ui-icon-seek-start { + background-position: -80px -160px; +} +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} +.ui-icon-stop { + background-position: -96px -160px; +} +.ui-icon-eject { + background-position: -112px -160px; +} +.ui-icon-volume-off { + background-position: -128px -160px; +} +.ui-icon-volume-on { + background-position: -144px -160px; +} +.ui-icon-power { + background-position: 0 -176px; +} +.ui-icon-signal-diag { + background-position: -16px -176px; +} +.ui-icon-signal { + background-position: -32px -176px; +} +.ui-icon-battery-0 { + background-position: -48px -176px; +} +.ui-icon-battery-1 { + background-position: -64px -176px; +} +.ui-icon-battery-2 { + background-position: -80px -176px; +} +.ui-icon-battery-3 { + background-position: -96px -176px; +} +.ui-icon-circle-plus { + background-position: 0 -192px; +} +.ui-icon-circle-minus { + background-position: -16px -192px; +} +.ui-icon-circle-close { + background-position: -32px -192px; +} +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} +.ui-icon-circle-check { + background-position: -208px -192px; +} +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { + -moz-border-radius-topleft: 0px; + -webkit-border-top-left-radius: 0px; + border-top-left-radius: 0px; +} +.ui-corner-tr { + -moz-border-radius-topright: 0px; + -webkit-border-top-right-radius: 0px; + border-top-right-radius: 0px; +} +.ui-corner-bl { + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; +} +.ui-corner-br { + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; +} +.ui-corner-top { + -moz-border-radius-topleft: 0px; + -webkit-border-top-left-radius: 0px; + border-top-left-radius: 0px; + -moz-border-radius-topright: 0px; + -webkit-border-top-right-radius: 0px; + border-top-right-radius: 0px; +} +.ui-corner-bottom { + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; +} +.ui-corner-right { + -moz-border-radius-topright: 0px; + -webkit-border-top-right-radius: 0px; + border-top-right-radius: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; +} +.ui-corner-left { + -moz-border-radius-topleft: 0px; + -webkit-border-top-left-radius: 0px; + border-top-left-radius: 0px; + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; +} +.ui-corner-all { + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; +} +/* Overlays */ +.ui-widget-overlay { + background: #9d9d9d url(images/ui-bg_flat_0_9d9d9d_40x100.png) 50% 50% repeat-x; + opacity: .50; + filter:Alpha(Opacity=50); +} +.ui-widget-shadow { + margin: -6px 0 0 -6px; + padding: 6px; + background: #6c6c6c url(images/ui-bg_flat_0_6c6c6c_40x100.png) 50% 50% repeat-x; + opacity: .60; + filter:Alpha(Opacity=60); + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; +}/* + * jQuery UI Resizable 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + z-index: 99999; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +}/* + * jQuery UI Selectable 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { + position: absolute; + z-index: 100; + border:1px dotted black; +} +/* + * jQuery UI Accordion 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { + width: 100%; +} +.ui-accordion .ui-accordion-header { + cursor: pointer; + position: relative; + margin-top: 1px; + zoom: 1; + font-weight:bold; +} +.ui-accordion .ui-accordion-li-fix { + display: inline; +} +.ui-accordion .ui-accordion-header-active { + border-bottom: 0 !important; +} +.ui-accordion .ui-accordion-header a { + display: block; + font-size: 1em; + padding: .5em .5em .5em .7em; +} +.ui-accordion-icons .ui-accordion-header a { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 10px; + border-top: 0; + margin-top: -2px; + position: relative; + top: 1px; + margin-bottom: 2px; + overflow: auto; + display: none; + zoom: 1; +} +.ui-accordion .ui-accordion-content-active { + display: block; +}/* + * jQuery UI Autocomplete 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { + position: absolute; + cursor: default; +} +/* workarounds */ +* html .ui-autocomplete { + width:1px; +} /* without this, the menu expands to 100% in IE6 */ +/* + * jQuery UI Menu 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { + display: inline-block; + position: relative; + padding: 0; + margin-right: .1em; + text-decoration: none !important; + cursor: pointer; + text-align: center; + zoom: 1; + overflow: visible; +} /* the overflow property removes extra width in IE */ +.ui-button-icon-only { + width: 2.2em; +} /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { + width: 2.4em; +} /* button elements seem to need a little more width */ +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} +/*button text element */ +.ui-button .ui-button-text { + display: block; + line-height: 1.4; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; + left: 0.2em; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} +/*button sets*/ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ + +button.ui-button.::-moz-focus-inner { + border: 0; + padding: 0; +} + + /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { + position: absolute; + padding: .4em; + width: 300px; + overflow: hidden; + border-width: 3px; +} +.ui-dialog .ui-dialog-titlebar { + padding: 6px 8px 6px 8px; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 16px .2em 0; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 19px; + margin: -10px 0 0 0; + padding: 1px; + height: 18px; +} +.ui-dialog .ui-dialog-titlebar-close span { + display: block; + margin: 1px; +} +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { + padding: 0; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; + zoom: 1; + +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background: none; + margin: .5em 0 0 0; + margin: 0.3em -0.4em 0; + padding: 0.3em 1em 0 0.4em; + border-color: #9f9f9f; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 14px; + height: 14px; + right: 3px; + bottom: 3px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +/* + * jQuery UI Slider 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +}/* + * jQuery UI Tabs 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { + position: relative; + padding: 4px; + zoom: 1; +} /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 1px; + margin: 0 .2em 1px 0; + border-bottom: 0 !important; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { + margin-bottom: 0; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { + cursor: text; +} +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { + cursor: pointer; +} /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + /*padding: 1em 1.4em;*/ + background: none; +} +.ui-tabs .ui-tabs-hide { + display: none !important; +} +/* + * jQuery UI Datepicker 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; +} +.ui-datepicker .ui-datepicker-header { + position:relative; + padding:.2em 0; +} +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { + position:absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left:2px; +} +.ui-datepicker .ui-datepicker-next { + right:2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left:1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right:1px; +} +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size:1em; + margin:1px 0; +} +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} +.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { + width: 49%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin:0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, .ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding:0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width:auto; + overflow:visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float:left; +} +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width:auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float:left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width:95%; + margin:0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width:50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width:33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width:25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { + border-left-width:0; +} +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width:0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear:left; +} +.ui-datepicker-row-break { + clear:both; + width:100%; +} +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear:right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { + float:right; +} +.ui-datepicker-rtl .ui-datepicker-group { + float:right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { + border-right-width:0; + border-left-width:1px; +} +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width:0; + border-left-width:1px; +} +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { + height:2em; + text-align: left; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height:100%; +} + + +.ui-datepicker { + display:none; } \ No newline at end of file diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120405114454.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120405114454.php index 1f17976d0..073457cbb 100644 --- a/install_minimal/upgrades/airtime-2.1.0/common/Version20120405114454.php +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120405114454.php @@ -9,16 +9,16 @@ class Version20120405114454 extends AbstractMigration { public function up(Schema $schema) { - //create cc_subjs_token table - $cc_subjs_token = $schema->createTable('cc_subjs_token'); - + //create cc_subjs_token table + $cc_subjs_token = $schema->createTable('cc_subjs_token'); + $cc_subjs_token->addColumn('id', 'integer', array('unsigned' => true, 'autoincrement' => true)); - $cc_subjs_token->addColumn('user_id', 'integer', array('notnull' => 1)); - $cc_subjs_token->addColumn('action', 'string', array('length' => 255, 'notnull' => 1)); + $cc_subjs_token->addColumn('user_id', 'integer', array('notnull' => 1)); + $cc_subjs_token->addColumn('action', 'string', array('length' => 255, 'notnull' => 1)); $cc_subjs_token->addColumn('token', 'string', array('length' => 40, 'notnull' => 1)); - $cc_subjs_token->addColumn('created', 'datetime', array('notnull' => 1)); - - $cc_subjs_token->setPrimaryKey(array('id')); + $cc_subjs_token->addColumn('created', 'datetime', array('notnull' => 1)); + + $cc_subjs_token->setPrimaryKey(array('id')); //end create cc_subjs_token table } diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php index aada5793c..80db8b1b3 100644 --- a/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120410104441.php @@ -24,21 +24,21 @@ class Version20120410104441 extends AbstractMigration $this->_addSql("ALTER TABLE cc_files ADD temp_br integer"); $this->_addSql("ALTER TABLE cc_files ADD temp_sr integer"); - $this->_addSql("UPDATE cc_files SET temp_br = bit_rate::integer"); - $this->_addSql("UPDATE cc_files SET temp_sr = sample_rate::integer"); + $this->_addSql("UPDATE cc_files SET temp_br = bit_rate::integer"); + $this->_addSql("UPDATE cc_files SET temp_sr = sample_rate::integer"); - $this->_addSql("ALTER TABLE cc_files DROP COLUMN sample_rate"); + $this->_addSql("ALTER TABLE cc_files DROP COLUMN sample_rate"); $this->_addSql("ALTER TABLE cc_files DROP COLUMN bit_rate"); - - $this->_addSql("ALTER TABLE cc_files RENAME COLUMN temp_sr TO sample_rate"); + + $this->_addSql("ALTER TABLE cc_files RENAME COLUMN temp_sr TO sample_rate"); $this->_addSql("ALTER TABLE cc_files RENAME COLUMN temp_br TO bit_rate"); - //add utime, lptime - $this->_addSql("ALTER TABLE cc_files ADD utime timestamp"); + //add utime, lptime + $this->_addSql("ALTER TABLE cc_files ADD utime timestamp"); $this->_addSql("ALTER TABLE cc_files ADD lptime timestamp"); - //setting these to a default now for timeline refresh purposes. - $now = gmdate("Y-m-d H:i:s"); + //setting these to a default now for timeline refresh purposes. + $now = gmdate("Y-m-d H:i:s"); $this->_addSql("UPDATE cc_files SET utime = '$now'"); } diff --git a/install_minimal/upgrades/airtime-2.1.0/common/Version20120410143340.php b/install_minimal/upgrades/airtime-2.1.0/common/Version20120410143340.php index a4468606b..9cd72c7fc 100644 --- a/install_minimal/upgrades/airtime-2.1.0/common/Version20120410143340.php +++ b/install_minimal/upgrades/airtime-2.1.0/common/Version20120410143340.php @@ -12,7 +12,7 @@ class Version20120410143340 extends AbstractMigration */ public function up(Schema $schema) { - //convert column creator to be creator_id on cc_playlist + //convert column creator to be creator_id on cc_playlist $this->_addSql("ALTER TABLE cc_playlist ADD creator_id integer"); $this->_addSql("UPDATE cc_playlist SET creator_id = (SELECT id FROM cc_subjs WHERE creator = login)"); $this->_addSql("ALTER TABLE cc_playlist DROP COLUMN creator"); diff --git a/install_minimal/upgrades/airtime-2.1.0/propel/airtime/CcShowInstances.php b/install_minimal/upgrades/airtime-2.1.0/propel/airtime/CcShowInstances.php index 9cf5407ca..260fee1f9 100644 --- a/install_minimal/upgrades/airtime-2.1.0/propel/airtime/CcShowInstances.php +++ b/install_minimal/upgrades/airtime-2.1.0/propel/airtime/CcShowInstances.php @@ -136,36 +136,36 @@ class CcShowInstances extends BaseCcShowInstances { ->update(array('DbPlayoutStatus' => 0), $con); } - /** - * Computes the value of the aggregate column time_filled - * - * @param PropelPDO $con A connection object - * - * @return mixed The scalar result from the aggregate query - */ - public function computeDbTimeFilled(PropelPDO $con) - { - $stmt = $con->prepare('SELECT SUM(clip_length) FROM "cc_schedule" WHERE cc_schedule.INSTANCE_ID = :p1'); - $stmt->bindValue(':p1', $this->getDbId()); - $stmt->execute(); - return $stmt->fetchColumn(); - } - - /** - * Updates the aggregate column time_filled - * - * @param PropelPDO $con A connection object - */ - public function updateDbTimeFilled(PropelPDO $con) - { - $this->setDbTimeFilled($this->computeDbTimeFilled($con)); - $this->save($con); + /** + * Computes the value of the aggregate column time_filled + * + * @param PropelPDO $con A connection object + * + * @return mixed The scalar result from the aggregate query + */ + public function computeDbTimeFilled(PropelPDO $con) + { + $stmt = $con->prepare('SELECT SUM(clip_length) FROM "cc_schedule" WHERE cc_schedule.INSTANCE_ID = :p1'); + $stmt->bindValue(':p1', $this->getDbId()); + $stmt->execute(); + return $stmt->fetchColumn(); + } + + /** + * Updates the aggregate column time_filled + * + * @param PropelPDO $con A connection object + */ + public function updateDbTimeFilled(PropelPDO $con) + { + $this->setDbTimeFilled($this->computeDbTimeFilled($con)); + $this->save($con); } public function preInsert(PropelPDO $con = null) { - $now = new DateTime("now", new DateTimeZone("UTC")); - $this->setDbCreated($now); - return true; + $now = new DateTime("now", new DateTimeZone("UTC")); + $this->setDbCreated($now); + return true; } } // CcShowInstances diff --git a/install_minimal/upgrades/upgrade-template/UpgradeCommon.php b/install_minimal/upgrades/upgrade-template/UpgradeCommon.php index 218ecfa3c..8792c89cf 100644 --- a/install_minimal/upgrades/upgrade-template/UpgradeCommon.php +++ b/install_minimal/upgrades/upgrade-template/UpgradeCommon.php @@ -26,31 +26,31 @@ class UpgradeCommon { */ public static function connectToDatabase($p_exitOnError = true) { - try { - $con = Propel::getConnection(); - } catch (Exception $e) { - echo $e->getMessage().PHP_EOL; - echo "Database connection problem.".PHP_EOL; - echo "Check if database exists with corresponding permissions.".PHP_EOL; - if ($p_exitOnError) { - exit(1); - } - return false; - } - return true; + try { + $con = Propel::getConnection(); + } catch (Exception $e) { + echo $e->getMessage().PHP_EOL; + echo "Database connection problem.".PHP_EOL; + echo "Check if database exists with corresponding permissions.".PHP_EOL; + if ($p_exitOnError) { + exit(1); + } + return false; + } + return true; } public static function DbTableExists($p_name) { - $con = Propel::getConnection(); - try { - $sql = "SELECT * FROM ".$p_name." LIMIT 1"; - $con->query($sql); - } catch (PDOException $e){ - return false; - } - return true; + $con = Propel::getConnection(); + try { + $sql = "SELECT * FROM ".$p_name." LIMIT 1"; + $con->query($sql); + } catch (PDOException $e){ + return false; + } + return true; } private static function GetAirtimeSrcDir() diff --git a/python_apps/icecast2/airtime-icecast-status.xsl b/python_apps/icecast2/airtime-icecast-status.xsl index 565c81ebe..c69ba714d 100644 --- a/python_apps/icecast2/airtime-icecast-status.xsl +++ b/python_apps/icecast2/airtime-icecast-status.xsl @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/widgets/css/airtime-widgets.css b/widgets/css/airtime-widgets.css index 7ff364ead..29527cc39 100644 --- a/widgets/css/airtime-widgets.css +++ b/widgets/css/airtime-widgets.css @@ -1,213 +1,213 @@ -@charset "utf-8"; -/* CSS Document */ - - -#headerLiveHolder { - overflow: hidden; - position:relative; - width:300px!important; - font-family: Arial,Helvetica,sans-serif; - font-size: 13px; - margin: 0; - padding: 0; - } - #headerLiveHolder * { - margin: 0; - padding: 0; - } - #headerLiveHolder ul { - list-style-type:none; - margin: 0; - padding: 0; - } - #headerLiveHolder h4 { - font-size:10px; - color:#68bd44; - text-transform:uppercase; - font-weight:normal; - line-height:12px; - } - #headerLiveHolder ul li { - overflow:hidden; - position:relative; - height:12px; - padding-right:70px; - font-size:11px; - color:#999999; - line-height:11px; - } - #headerLiveHolder ul li.current { - font-weight:bold; - color:#666666; - } - #headerLiveHolder ul li span { - position:absolute; - right:0px; - top:0px; - } - #headerLiveHolder ul li span#time-elapsed { - right: 50px; - } - #headerLiveHolder ul li span#time-elapsed:before { - content: "e."; - } - #headerLiveHolder ul li span#time-remaining:before { - content: "r."; - } - -#onAirToday { - width:300px; - margin-bottom:15px; - border:1px solid #999999; - font-family: Arial,Helvetica,sans-serif; - } - #onAirToday h3 { - margin:0; - padding:0 10px; - font-size:13px; - color:#ffffff; - line-height:28px; - background: #999999; - } - #onAirToday table { - border-collapse: collapse; - clear: both; - padding: 0; - } - #onAirToday table tbody { - color: #000; - font-size:12px; - } - #onAirToday table tbody tr { - height: 30px; - } - #onAirToday table tbody tr td { - border-bottom: 1px dotted #d9d9d9; - height: 30px; - padding-left: 10px; - font-weight:bold; - } - #onAirToday table tbody tr td a { - text-decoration:none; - } - #onAirToday table tbody tr td a:hover { - text-decoration:underline; - } - #onAirToday table tbody tr:last-child td { - border-bottom: none; - } - #onAirToday table tbody tr td.time { - font-weight:normal; - color: #666666; - } -/* = PROGRAM SCHEDULE ---------------- */ - - /* - + Center Column */ - #scheduleTabs { - font-family: Arial,Helvetica,sans-serif; - } - #scheduleTabs ul { - overflow:hidden; - height:28px; - background: url( widget-img/schedule-tabs-list-bgr.png) repeat-x left bottom; - list-style-type:none; - margin:0; - padding:0; - } - #scheduleTabs ul li { - float:left; - height:28px; - margin:0; - padding:0; - } - #scheduleTabs ul li a { - display:block; - float:left; - height:25px; - padding:0 10px; - margin-top:3px; - font-size:12px; - font-weight:bold; - color:#666; - line-height:25px; - border-right:1px solid #dbdbdb; - border-left:1px solid #f4f4f4; - text-decoration:none; - } - #scheduleTabs ul li a:hover { - color:#000; - text-decoration:none; - } - #scheduleTabs ul li.ui-tabs-selected a { - height:27px; - margin-top:0px; - line-height:27px; - color:#333333; - background:#ffffff; - border:1px solid #cac9c9; border-bottom:none; - } - #scheduleTabs table { - clear:both; - padding:0px; - border-collapse:collapse; - width:100%; - } - #scheduleTabs table thead { - height:35px; - font-size:12px; color:#333333; line-height:35px; - background-color: #fff; - background: -moz-linear-gradient(top, #ffffff 10%, #f4f4f4 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(10%, #ffffff), color-stop(100%, #f4f4f4)); - border-bottom:1px solid #d4d4d4; - } - #scheduleTabs table thead tr { - height:35px; - } - #scheduleTabs table thead tr td { - padding-left:10px; - font-size:11px; color:#999999; text-transform:uppercase; - } - #scheduleTabs table tfoot { - } - #scheduleTabs table tbody { - font-size:13px; color:#666666; font-weight:bold; - } - #scheduleTabs table tbody tr { - height:30px; - } - #scheduleTabs table tbody tr td { - height:30px; - padding-left:10px; - border-bottom:1px dotted #b3b3b3; - } - #scheduleTabs table tbody tr td h4 { - color:#333333; font-size:12px; - margin:0; - padding:0; - } - #scheduleTabs table tbody tr td ul { - background:none !important; - list-style-type:none; - } - #scheduleTabs table tbody tr td ul li { - float:left; - height:30px !important; - padding:0 2px; - font-size:12px; color:#cc0000; font-weight:normal; line-height:30px !important; - } - #scheduleTabs table tbody tr td ul li a { - height:30px !important; - margin:0px !important; padding:0px !important; - font-size:12px; color:#68BD44 !important; font-weight:normal !important; text-transform:uppercase; line-height:30px !important; - background:none !important; - border:none !important; - } - #scheduleTabs table tbody tr td ul li a:hover { - text-decoration:underline; - } - -#scheduleTabs.ui-tabs .ui-tabs-hide { - display: none; -} +@charset "utf-8"; +/* CSS Document */ + + +#headerLiveHolder { + overflow: hidden; + position:relative; + width:300px!important; + font-family: Arial,Helvetica,sans-serif; + font-size: 13px; + margin: 0; + padding: 0; + } + #headerLiveHolder * { + margin: 0; + padding: 0; + } + #headerLiveHolder ul { + list-style-type:none; + margin: 0; + padding: 0; + } + #headerLiveHolder h4 { + font-size:10px; + color:#68bd44; + text-transform:uppercase; + font-weight:normal; + line-height:12px; + } + #headerLiveHolder ul li { + overflow:hidden; + position:relative; + height:12px; + padding-right:70px; + font-size:11px; + color:#999999; + line-height:11px; + } + #headerLiveHolder ul li.current { + font-weight:bold; + color:#666666; + } + #headerLiveHolder ul li span { + position:absolute; + right:0px; + top:0px; + } + #headerLiveHolder ul li span#time-elapsed { + right: 50px; + } + #headerLiveHolder ul li span#time-elapsed:before { + content: "e."; + } + #headerLiveHolder ul li span#time-remaining:before { + content: "r."; + } + +#onAirToday { + width:300px; + margin-bottom:15px; + border:1px solid #999999; + font-family: Arial,Helvetica,sans-serif; + } + #onAirToday h3 { + margin:0; + padding:0 10px; + font-size:13px; + color:#ffffff; + line-height:28px; + background: #999999; + } + #onAirToday table { + border-collapse: collapse; + clear: both; + padding: 0; + } + #onAirToday table tbody { + color: #000; + font-size:12px; + } + #onAirToday table tbody tr { + height: 30px; + } + #onAirToday table tbody tr td { + border-bottom: 1px dotted #d9d9d9; + height: 30px; + padding-left: 10px; + font-weight:bold; + } + #onAirToday table tbody tr td a { + text-decoration:none; + } + #onAirToday table tbody tr td a:hover { + text-decoration:underline; + } + #onAirToday table tbody tr:last-child td { + border-bottom: none; + } + #onAirToday table tbody tr td.time { + font-weight:normal; + color: #666666; + } +/* = PROGRAM SCHEDULE ---------------- */ + + /* + + Center Column */ + #scheduleTabs { + font-family: Arial,Helvetica,sans-serif; + } + #scheduleTabs ul { + overflow:hidden; + height:28px; + background: url( widget-img/schedule-tabs-list-bgr.png) repeat-x left bottom; + list-style-type:none; + margin:0; + padding:0; + } + #scheduleTabs ul li { + float:left; + height:28px; + margin:0; + padding:0; + } + #scheduleTabs ul li a { + display:block; + float:left; + height:25px; + padding:0 10px; + margin-top:3px; + font-size:12px; + font-weight:bold; + color:#666; + line-height:25px; + border-right:1px solid #dbdbdb; + border-left:1px solid #f4f4f4; + text-decoration:none; + } + #scheduleTabs ul li a:hover { + color:#000; + text-decoration:none; + } + #scheduleTabs ul li.ui-tabs-selected a { + height:27px; + margin-top:0px; + line-height:27px; + color:#333333; + background:#ffffff; + border:1px solid #cac9c9; border-bottom:none; + } + #scheduleTabs table { + clear:both; + padding:0px; + border-collapse:collapse; + width:100%; + } + #scheduleTabs table thead { + height:35px; + font-size:12px; color:#333333; line-height:35px; + background-color: #fff; + background: -moz-linear-gradient(top, #ffffff 10%, #f4f4f4 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(10%, #ffffff), color-stop(100%, #f4f4f4)); + border-bottom:1px solid #d4d4d4; + } + #scheduleTabs table thead tr { + height:35px; + } + #scheduleTabs table thead tr td { + padding-left:10px; + font-size:11px; color:#999999; text-transform:uppercase; + } + #scheduleTabs table tfoot { + } + #scheduleTabs table tbody { + font-size:13px; color:#666666; font-weight:bold; + } + #scheduleTabs table tbody tr { + height:30px; + } + #scheduleTabs table tbody tr td { + height:30px; + padding-left:10px; + border-bottom:1px dotted #b3b3b3; + } + #scheduleTabs table tbody tr td h4 { + color:#333333; font-size:12px; + margin:0; + padding:0; + } + #scheduleTabs table tbody tr td ul { + background:none !important; + list-style-type:none; + } + #scheduleTabs table tbody tr td ul li { + float:left; + height:30px !important; + padding:0 2px; + font-size:12px; color:#cc0000; font-weight:normal; line-height:30px !important; + } + #scheduleTabs table tbody tr td ul li a { + height:30px !important; + margin:0px !important; padding:0px !important; + font-size:12px; color:#68BD44 !important; font-weight:normal !important; text-transform:uppercase; line-height:30px !important; + background:none !important; + border:none !important; + } + #scheduleTabs table tbody tr td ul li a:hover { + text-decoration:underline; + } + +#scheduleTabs.ui-tabs .ui-tabs-hide { + display: none; +} \ No newline at end of file diff --git a/widgets/widget_schedule.html b/widgets/widget_schedule.html index f7e8ae2de..66b02c546 100644 --- a/widgets/widget_schedule.html +++ b/widgets/widget_schedule.html @@ -1,1823 +1,1823 @@ - - - - -Airtime widgets - - - - - - - - - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TimeProgram NameDetails
    00:00 - 00:30

    The Interview (EN)

    00:30 - 01:00

    The Interview (EN)

    00:30 - 01:00

    Applause (EN)

    01:00 - 01:30

    L'invité

    01:30 - 02:00

    Applaudissement (FR)

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    The Interview (EN)

    03:00 - 03:30

    Newslink

      -
    • -
    03:30 - 04:00

    Applause (EN)

    04:00 - 04:30

    L'invité

    04:30 - 05:00

    Applaudissement (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Well Body

    08:00 - 08:30

    L'info chez vous (FR)

    09:00 - 09:30

    Brèves - Music - Promo

    09:30 - 10:00

    Youth Connection

    09:30 - 10:00

    Growing Matters (EN)

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Well Body

    13:00 - 13:30

    L'info chez vous (FR)

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    17:00 - 17:30

    L'Info Chez-Vous

    18:30 - 19:00

    Youth Connection

    19:00 - 19:30

    L'info chez vous (FR)

    19:30 - 20:00

    Réseau jeunesse

    20:00 - 20:30

    Newslink (EN)

    20:30 - 21:00

    Well Body

    22:30 - 23:00

    Youth Connection

    23:30 - 00:00

    Réseau jeunesse

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    01:00 - 01:30

    L'Info chez-vous

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      -
    • -
    03:30 - 04:00

    Well Body

    04:00 - 04:30

    L'info chez-vous (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Choices (EN)

    08:00 - 08:30

    L'info chez vous (FR)

    09:00 - 09:30

    Brèves - Music - Promo

    10:30 - 11:00

    Le Grenier

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Choices (EN)

    13:00 - 13:30

    L'info chez vous (FR)

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    16:30 - 17:00

    Applause (EN)

    17:00 - 17:30

    L'Info Chez-Vous

    19:00 - 19:30

    L'info chez vous (FR)

    19:30 - 20:00

    Le Grenier

    20:00 - 20:30

    Newslink (EN)

    20:30 - 21:00

    Choices (EN)

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    00:30 - 01:00

    Applause (EN)

    01:00 - 01:30

    L'Info chez-vous

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      -
    • -
    03:30 - 04:00

    Choices (EN)

    04:00 - 04:30

    L'info chez-vous (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    08:00 - 08:30

    L'info chez vous (FR)

    08:30 - 09:00

    Fifty Fifty (FR)

    09:00 - 09:30

    Brèves - Music - Promo

    09:30 - 10:00

    Well Body

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    13:00 - 13:30

    L'info chez vous (FR)

    13:30 - 14:00

    Fifty Fifty (FR)

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    16:30 - 16:45

    The Citizen (EN)

    17:00 - 17:30

    L'Info Chez-Vous

    17:30 - 17:45

    Le Citoyen

    17:30 - 17:45

    Le Citoyen

    18:30 - 19:00

    Well Body

    19:00 - 19:30

    L'info chez vous (FR)

    20:00 - 20:30

    Newslink (EN)

    21:30 - 22:00

    Fifty Fifty (FR)

    22:00 - 22:15

    The Citizen (EN)

    22:30 - 23:00

    Well Body (EN)

    23:00 - 23:15

    Le Citoyen

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    00:30 - 00:45

    The Citizen (EN)

    01:00 - 01:30

    L'Info chez-vous

    01:30 - 01:45

    Le Citoyen

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      -
    • -
    04:00 - 04:30

    L'info chez-vous (FR)

    04:30 - 05:00

    Fifty Fifty (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Growing Matters (EN)

    08:00 - 08:30

    L'info chez vous (FR)

    08:30 - 09:00

    Le Grenier

    09:00 - 09:30

    Brèves - Music - Promo

    09:30 - 10:00

    Choices (EN)

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Growing Matters (EN)

    13:00 - 13:30

    L'info chez vous (FR)

    13:30 - 14:00

    Le Grenier

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    16:30 - 17:00

    Pages of History (EN)

    17:00 - 17:30

    L'Info Chez-Vous

    17:30 - 04:00

    Pages d'histoire

    18:30 - 19:00

    Choices (EN)

    19:00 - 19:30

    L'info chez vous (FR)

    20:00 - 20:30

    Newslink (EN)

    20:30 - 21:00

    Growing Matters (EN)

    21:30 - 22:00

    Le Grenier

    22:00 - 22:30

    Pages of History (EN)

    22:30 - 23:00

    Choices (EN)

    23:00 - 09:30

    Pages d'histoire

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    00:30 - 01:00

    Pages of History (EN)

    01:00 - 01:30

    L'Info chez-vous

    01:30 - 12:00

    Pages d'histoire

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      -
    • -
    03:30 - 04:00

    Growing Matters (EN)

    04:00 - 04:30

    L'info chez-vous (FR)

    04:30 - 05:00

    Le Grenier

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Youth Connection

    08:00 - 08:30

    L'info chez vous (FR)

    08:30 - 09:00

    Réseau jeunesse

    09:00 - 09:30

    Brèves - Music - Promo

    10:30 - 11:00

    Fifty Fifty (FR)

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Youth Connection

    13:00 - 13:30

    L'info chez vous (FR)

    13:30 - 14:00

    Réseau jeunesse

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    17:00 - 17:30

    L'Info Chez-Vous

    17:30 - 18:00

    Mano River Press (EN)

    19:00 - 19:30

    L'info chez vous (FR)

    19:30 - 20:00

    Réseau jeunesse

    20:00 - 20:30

    Newslink (EN)

    21:30 - 22:00

    Fifty Fifty (FR)

    22:30 - 23:00

    Youth Connection

    23:30 - 00:00

    Réseau jeunesse

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    01:00 - 01:30

    L'Info chez-vous

    03:00 - 03:30

    Newslink

      -
    • -
    03:30 - 04:00

    Youth Connection

    04:00 - 04:30

    L'info chez-vous (FR)

    04:30 - 05:00

    Réseau jeunesse

    07:00 - 07:30

    Mano River Press (EN)

    07:30 - 08:00

    Weekend Review (EN)

    08:30 - 09:00

    Focus (FR)

    09:15 - 09:30

    The Stadium (EN)

    09:30 - 10:00

    Echoes of Charles Taylor Trial

      -
    • -
    11:45 - 12:00

    The Stadium (EN)

    12:30 - 13:00

    Weekend Review (EN)

    12:30 - 13:00

    Mano River Press (EN)

    13:30 - 14:00

    Focus (FR)

    16:00 - 16:30

    Mano River Press (EN)

    16:30 - 17:00

    Weekend Review (EN)

    17:30 - 18:00

    Focus (FR)

    18:00 - 18:15

    The Stadium (EN)

    18:30 - 19:00

    Echoes of Charles Taylor Trial

      -
    • -
    20:00 - 20:30

    Mano River Press (EN)

    20:30 - 21:00

    Weekend Review (EN)

    21:30 - 22:00

    Focus (FR)

    22:00 - 22:15

    The Stadium (EN)

    22:30 - 23:00

    Echoes of Charles Taylor Trial

      -
    • -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TimeProgram NameDetails
    00:00 - 00:30

    Mano River Press (EN)

    00:30 - 01:00

    Weekend Review (EN)

    01:30 - 02:00

    Focus (FR)

    03:00 - 03:30

    Mano River Press (EN)

    03:30 - 04:00

    Weekend Review (EN)

    04:30 - 05:00

    Focus (FR)

    07:00 - 07:30

    The Interview (EN)

    07:30 - 08:00

    Applause (EN)

    08:00 - 08:30

    L'invité

    08:30 - 09:00

    Applaudissement (FR)

    09:15 - 09:30

    The Citizen (EN)

    09:30 - 10:00

    Pages of History (EN)

    10:15 - 10:30

    Le Citoyen

    11:45 - 12:00

    The Citizen (EN)

    12:00 - 12:30

    The Interview (EN)

    12:30 - 13:00

    Applause (EN)

    13:00 - 13:30

    L'invité

    13:30 - 14:00

    Applaudissement (FR)

    16:00 - 16:30

    The Interview (EN)

    16:30 - 17:00

    Applause (EN)

    16:30 - 17:00

    The Interview (EN)

    17:00 - 17:30

    L'invité

    17:30 - 18:00

    Applaudissement (FR)

    18:00 - 18:15

    The Citizen (EN)

    18:30 - 19:00

    Pages of History (EN)

    19:00 - 19:15

    Le Citoyen

    20:00 - 20:30

    The Interview (EN)

    20:30 - 21:00

    Applause (EN)

    21:00 - 21:30

    L'invité

    21:30 - 22:00

    Applaudissement (FR)

    22:00 - 22:30

    The Interview (EN)

    22:00 - 22:30

    Pages of History (EN)

    -
    -
    - - + + + + +Airtime widgets + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TimeProgram NameDetails
    00:00 - 00:30

    The Interview (EN)

    00:30 - 01:00

    The Interview (EN)

    00:30 - 01:00

    Applause (EN)

    01:00 - 01:30

    L'invité

    01:30 - 02:00

    Applaudissement (FR)

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    The Interview (EN)

    03:00 - 03:30

    Newslink

      +
    • +
    03:30 - 04:00

    Applause (EN)

    04:00 - 04:30

    L'invité

    04:30 - 05:00

    Applaudissement (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Well Body

    08:00 - 08:30

    L'info chez vous (FR)

    09:00 - 09:30

    Brèves - Music - Promo

    09:30 - 10:00

    Youth Connection

    09:30 - 10:00

    Growing Matters (EN)

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Well Body

    13:00 - 13:30

    L'info chez vous (FR)

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    17:00 - 17:30

    L'Info Chez-Vous

    18:30 - 19:00

    Youth Connection

    19:00 - 19:30

    L'info chez vous (FR)

    19:30 - 20:00

    Réseau jeunesse

    20:00 - 20:30

    Newslink (EN)

    20:30 - 21:00

    Well Body

    22:30 - 23:00

    Youth Connection

    23:30 - 00:00

    Réseau jeunesse

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    01:00 - 01:30

    L'Info chez-vous

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      +
    • +
    03:30 - 04:00

    Well Body

    04:00 - 04:30

    L'info chez-vous (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Choices (EN)

    08:00 - 08:30

    L'info chez vous (FR)

    09:00 - 09:30

    Brèves - Music - Promo

    10:30 - 11:00

    Le Grenier

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Choices (EN)

    13:00 - 13:30

    L'info chez vous (FR)

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    16:30 - 17:00

    Applause (EN)

    17:00 - 17:30

    L'Info Chez-Vous

    19:00 - 19:30

    L'info chez vous (FR)

    19:30 - 20:00

    Le Grenier

    20:00 - 20:30

    Newslink (EN)

    20:30 - 21:00

    Choices (EN)

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    00:30 - 01:00

    Applause (EN)

    01:00 - 01:30

    L'Info chez-vous

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      +
    • +
    03:30 - 04:00

    Choices (EN)

    04:00 - 04:30

    L'info chez-vous (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    08:00 - 08:30

    L'info chez vous (FR)

    08:30 - 09:00

    Fifty Fifty (FR)

    09:00 - 09:30

    Brèves - Music - Promo

    09:30 - 10:00

    Well Body

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    13:00 - 13:30

    L'info chez vous (FR)

    13:30 - 14:00

    Fifty Fifty (FR)

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    16:30 - 16:45

    The Citizen (EN)

    17:00 - 17:30

    L'Info Chez-Vous

    17:30 - 17:45

    Le Citoyen

    17:30 - 17:45

    Le Citoyen

    18:30 - 19:00

    Well Body

    19:00 - 19:30

    L'info chez vous (FR)

    20:00 - 20:30

    Newslink (EN)

    21:30 - 22:00

    Fifty Fifty (FR)

    22:00 - 22:15

    The Citizen (EN)

    22:30 - 23:00

    Well Body (EN)

    23:00 - 23:15

    Le Citoyen

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    00:30 - 00:45

    The Citizen (EN)

    01:00 - 01:30

    L'Info chez-vous

    01:30 - 01:45

    Le Citoyen

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      +
    • +
    04:00 - 04:30

    L'info chez-vous (FR)

    04:30 - 05:00

    Fifty Fifty (FR)

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Growing Matters (EN)

    08:00 - 08:30

    L'info chez vous (FR)

    08:30 - 09:00

    Le Grenier

    09:00 - 09:30

    Brèves - Music - Promo

    09:30 - 10:00

    Choices (EN)

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Growing Matters (EN)

    13:00 - 13:30

    L'info chez vous (FR)

    13:30 - 14:00

    Le Grenier

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    16:30 - 17:00

    Pages of History (EN)

    17:00 - 17:30

    L'Info Chez-Vous

    17:30 - 04:00

    Pages d'histoire

    18:30 - 19:00

    Choices (EN)

    19:00 - 19:30

    L'info chez vous (FR)

    20:00 - 20:30

    Newslink (EN)

    20:30 - 21:00

    Growing Matters (EN)

    21:30 - 22:00

    Le Grenier

    22:00 - 22:30

    Pages of History (EN)

    22:30 - 23:00

    Choices (EN)

    23:00 - 09:30

    Pages d'histoire

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    00:30 - 01:00

    Pages of History (EN)

    01:00 - 01:30

    L'Info chez-vous

    01:30 - 12:00

    Pages d'histoire

    02:00 - 02:30

    Music From Countries - Promo

    02:30 - 03:00

    Music From Countries - Promo

    03:00 - 03:30

    Newslink

      +
    • +
    03:30 - 04:00

    Growing Matters (EN)

    04:00 - 04:30

    L'info chez-vous (FR)

    04:30 - 05:00

    Le Grenier

    05:00 - 05:30

    Music From Countries - Promo

    05:30 - 06:00

    Music From Countries - Promo

    06:00 - 06:30

    Music From Countries - Promo

    06:30 - 07:00

    Music From Countries - Promo

    07:00 - 07:30

    Newslink (EN)

    07:30 - 08:00

    Youth Connection

    08:00 - 08:30

    L'info chez vous (FR)

    08:30 - 09:00

    Réseau jeunesse

    09:00 - 09:30

    Brèves - Music - Promo

    10:30 - 11:00

    Fifty Fifty (FR)

    11:00 - 12:00

    Breves-Music-Promo

    12:00 - 12:30

    Newslink (EN)

    12:30 - 13:00

    Youth Connection

    13:00 - 13:30

    L'info chez vous (FR)

    13:30 - 14:00

    Réseau jeunesse

    14:00 - 15:00

    Brèves - Music - Promo

    15:00 - 16:00

    Brèves - Music - Promo

    16:00 - 16:30

    Newslink

    17:00 - 17:30

    L'Info Chez-Vous

    17:30 - 18:00

    Mano River Press (EN)

    19:00 - 19:30

    L'info chez vous (FR)

    19:30 - 20:00

    Réseau jeunesse

    20:00 - 20:30

    Newslink (EN)

    21:30 - 22:00

    Fifty Fifty (FR)

    22:30 - 23:00

    Youth Connection

    23:30 - 00:00

    Réseau jeunesse

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TimeProgram NameDetails
    00:00 - 00:30

    Newslink (EN)

    01:00 - 01:30

    L'Info chez-vous

    03:00 - 03:30

    Newslink

      +
    • +
    03:30 - 04:00

    Youth Connection

    04:00 - 04:30

    L'info chez-vous (FR)

    04:30 - 05:00

    Réseau jeunesse

    07:00 - 07:30

    Mano River Press (EN)

    07:30 - 08:00

    Weekend Review (EN)

    08:30 - 09:00

    Focus (FR)

    09:15 - 09:30

    The Stadium (EN)

    09:30 - 10:00

    Echoes of Charles Taylor Trial

      +
    • +
    11:45 - 12:00

    The Stadium (EN)

    12:30 - 13:00

    Weekend Review (EN)

    12:30 - 13:00

    Mano River Press (EN)

    13:30 - 14:00

    Focus (FR)

    16:00 - 16:30

    Mano River Press (EN)

    16:30 - 17:00

    Weekend Review (EN)

    17:30 - 18:00

    Focus (FR)

    18:00 - 18:15

    The Stadium (EN)

    18:30 - 19:00

    Echoes of Charles Taylor Trial

      +
    • +
    20:00 - 20:30

    Mano River Press (EN)

    20:30 - 21:00

    Weekend Review (EN)

    21:30 - 22:00

    Focus (FR)

    22:00 - 22:15

    The Stadium (EN)

    22:30 - 23:00

    Echoes of Charles Taylor Trial

      +
    • +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TimeProgram NameDetails
    00:00 - 00:30

    Mano River Press (EN)

    00:30 - 01:00

    Weekend Review (EN)

    01:30 - 02:00

    Focus (FR)

    03:00 - 03:30

    Mano River Press (EN)

    03:30 - 04:00

    Weekend Review (EN)

    04:30 - 05:00

    Focus (FR)

    07:00 - 07:30

    The Interview (EN)

    07:30 - 08:00

    Applause (EN)

    08:00 - 08:30

    L'invité

    08:30 - 09:00

    Applaudissement (FR)

    09:15 - 09:30

    The Citizen (EN)

    09:30 - 10:00

    Pages of History (EN)

    10:15 - 10:30

    Le Citoyen

    11:45 - 12:00

    The Citizen (EN)

    12:00 - 12:30

    The Interview (EN)

    12:30 - 13:00

    Applause (EN)

    13:00 - 13:30

    L'invité

    13:30 - 14:00

    Applaudissement (FR)

    16:00 - 16:30

    The Interview (EN)

    16:30 - 17:00

    Applause (EN)

    16:30 - 17:00

    The Interview (EN)

    17:00 - 17:30

    L'invité

    17:30 - 18:00

    Applaudissement (FR)

    18:00 - 18:15

    The Citizen (EN)

    18:30 - 19:00

    Pages of History (EN)

    19:00 - 19:15

    Le Citoyen

    20:00 - 20:30

    The Interview (EN)

    20:30 - 21:00

    Applause (EN)

    21:00 - 21:30

    L'invité

    21:30 - 22:00

    Applaudissement (FR)

    22:00 - 22:30

    The Interview (EN)

    22:00 - 22:30

    Pages of History (EN)

    +
    +
    + + diff --git a/widgets/widgets.html b/widgets/widgets.html index 0c1ba7e2c..c4b8bc4dc 100644 --- a/widgets/widgets.html +++ b/widgets/widgets.html @@ -1,51 +1,51 @@ - - - - -Airtime widgets - - - - -
    -

    On air now >>

    -
      -
    • Current: Réseau jeunesse02:2227:37
    • - -
    -
    -
    -
    -
    -

    On air today

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    04:30 - 05:00Réseau jeunesse
    07:00 - 07:30Mano River Press (EN)
    07:30 - 08:00Weekend Review (EN)
    08:30 - 09:00Focus (FR)
    09:15 - 09:30The Stadium (EN)
    09:30 - 10:00Echoes of Charles Taylor Trial
    -
    - - + + + + +Airtime widgets + + + + +
    +

    On air now >>

    +
      +
    • Current: Réseau jeunesse02:2227:37
    • + +
    +
    +
    +
    +
    +

    On air today

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    04:30 - 05:00Réseau jeunesse
    07:00 - 07:30Mano River Press (EN)
    07:30 - 08:00Weekend Review (EN)
    08:30 - 09:00Focus (FR)
    09:15 - 09:30The Stadium (EN)
    09:30 - 10:00Echoes of Charles Taylor Trial
    +
    + + From cabe583a3b9327579fe98cd7150c4fe08cb64539 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 30 Oct 2012 15:01:46 -0400 Subject: [PATCH 15/38] CC-4649: Library -> Disable simple search if advanced search fields are open -done --- airtime_mvc/public/js/airtime/library/library.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index a832134c1..c50b2a375 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -675,13 +675,16 @@ var AIRTIME = (function(AIRTIME) { oTable.fnSetFilteringDelay(350); $libContent.on("click", "legend", function(){ + $simpleSearch = $libContent.find("#library_display_filter label"); var $fs = $(this).parents("fieldset"); if ($fs.hasClass("closed")) { $fs.removeClass("closed"); + $simpleSearch.addClass("sp-invisible"); } else { $fs.addClass("closed"); + $simpleSearch.removeClass("sp-invisible"); } }); From 00947f9d7e93c8cedcf5ccede491b4460fb76768 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 30 Oct 2012 15:34:38 -0400 Subject: [PATCH 16/38] CC-4640: Automatically jump to current song when loading the Now Playing page. -small fix --- airtime_mvc/public/js/airtime/showbuilder/builder.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index c64825393..de9142190 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -648,6 +648,8 @@ var AIRTIME = (function(AIRTIME){ $("#draggingContainer").remove(); }, "fnDrawCallback": function fnBuilderDrawCallback(oSettings, json) { + var isInitialized = false; + if (!isInitialized) { //when coming to 'Now Playing' page we want the page //to jump to the current track From 8c90c1a12f4048b68f066b92e4013f3478f0e38c Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 30 Oct 2012 17:19:40 -0400 Subject: [PATCH 17/38] CC-4645: Add support for x-scpls playlist types -fixed --- airtime_mvc/application/models/Webstream.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Webstream.php b/airtime_mvc/application/models/Webstream.php index 45d3caf9a..90afbe973 100644 --- a/airtime_mvc/application/models/Webstream.php +++ b/airtime_mvc/application/models/Webstream.php @@ -185,7 +185,7 @@ class Application_Model_Webstream implements Application_Model_LibraryEditable } $mediaUrl = self::getMediaUrl($url, $mime, $content_length_found); - if (preg_match("/(x-mpegurl)|(xspf\+xml)|(pls\+xml)/", $mime)) { + if (preg_match("/(x-mpegurl)|(xspf\+xml)|(pls\+xml)|(x-scpls)/", $mime)) { list($mime, $content_length_found) = self::discoverStreamMime($mediaUrl); } } catch (Exception $e) { @@ -307,7 +307,7 @@ class Application_Model_Webstream implements Application_Model_LibraryEditable $media_url = self::getM3uUrl($url); } elseif (preg_match("/xspf\+xml/", $mime)) { $media_url = self::getXspfUrl($url); - } elseif (preg_match("/pls\+xml/", $mime)) { + } elseif (preg_match("/pls\+xml/", $mime) || preg_match("/x-scpls/", $mime)) { $media_url = self::getPlsUrl($url); } elseif (preg_match("/(mpeg|ogg)/", $mime)) { if ($content_length_found) { From 9d495ebc03e0a1ab7c033917d2b105de5deeef8e Mon Sep 17 00:00:00 2001 From: James Date: Tue, 30 Oct 2012 17:57:58 -0400 Subject: [PATCH 18/38] CC-4639: Give an option to allow smart blocks to reuse tracks if not enough tracks meet the time limit. - done --- .../controllers/PlaylistController.php | 1 + .../application/forms/SmartBlockCriteria.php | 10 +++- airtime_mvc/application/models/Block.php | 60 ++++++++++++++++--- .../scripts/form/smart-block-criteria.phtml | 14 +++++ airtime_mvc/public/css/styles.css | 2 +- .../js/airtime/playlist/smart_blockbuilder.js | 22 +++++++ 6 files changed, 99 insertions(+), 10 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 2cca81ac2..0d2ead443 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -513,6 +513,7 @@ class PlaylistController extends Zend_Controller_Action } catch (BlockNotFoundException $e) { $this->playlistNotFound('block', true); } catch (Exception $e) { + Logging::info($e); $this->playlistUnknownError($e); } } diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index 55a28c79a..8d716b461 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -212,6 +212,14 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm }//for + $repeatTracks = new Zend_Form_Element_Checkbox('sp_repeat_tracks'); + $repeatTracks->setDecorators(array('viewHelper')) + ->setLabel('Allow Repeat Tracks:'); + if (isset($storedCrit["repeat_tracks"])) { + $repeatTracks->setChecked($storedCrit["repeat_tracks"]["value"] == 1?true:false); + } + $this->addElement($repeatTracks); + $limit = new Zend_Form_Element_Select('sp_limit_options'); $limit->setAttrib('class', 'sp_input_select') ->setDecorators(array('viewHelper')) @@ -220,7 +228,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $limit->setValue($storedCrit["limit"]["modifier"]); } $this->addElement($limit); - + $limitValue = new Zend_Form_Element_Text('sp_limit_value'); $limitValue->setAttrib('class', 'sp_input_text_limit') ->setLabel('Limit to') diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index 80fae297d..364c11ef0 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1093,6 +1093,14 @@ SQL; ->setDbValue($p_criteriaData['etc']['sp_limit_value']) ->setDbBlockId($this->id) ->save(); + + // insert repeate track option + $qry = new CcBlockcriteria(); + $qry->setDbCriteria("repeat_tracks") + ->setDbModifier("N/A") + ->setDbValue($p_criteriaData['etc']['sp_repeat_tracks']) + ->setDbBlockId($this->id) + ->save(); } /** @@ -1105,7 +1113,7 @@ SQL; $this->saveSmartBlockCriteria($p_criteria); $insertList = $this->getListOfFilesUnderLimit(); $this->deleteAllFilesFromBlock(); - $this->addAudioClips(array_keys($insertList)); + $this->addAudioClips(array_values($insertList)); // update length in playlist contents. $this->updateBlockLengthInAllPlaylist(); @@ -1134,6 +1142,7 @@ SQL; $info = $this->getListofFilesMeetCriteria(); $files = $info['files']; $limit = $info['limit']; + $repeat = $info['repeat_tracks']; $insertList = array(); $totalTime = 0; @@ -1142,19 +1151,45 @@ SQL; // this moves the pointer to the first element in the collection $files->getFirst(); $iterator = $files->getIterator(); - while ($iterator->valid() && $totalTime < $limit['time']) { + + $isBlockFull = false; + + while ($iterator->valid()) { $id = $iterator->current()->getDbId(); $length = Application_Common_DateHelper::calculateLengthInSeconds($iterator->current()->getDbLength()); - $insertList[$id] = $length; + $insertList[] = $id; $totalTime += $length; $totalItems++; - - if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500) { - break; + + if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500 || $totalTime > $limit['time']) { + $isBlockFull = true; + break; } $iterator->next(); } + + // if block is not full and reapeat_track is check, fill up more + while (!$isBlockFull && $repeat == 1) { + if (!$iterator->valid()) { + $iterator->closeCursor(); + $info = $this->getListofFilesMeetCriteria(); + $files = $info['files']; + $files->getFirst(); + $iterator = $files->getIterator(); + } + $id = $iterator->current()->getDbId(); + $length = Application_Common_DateHelper::calculateLengthInSeconds($iterator->current()->getDbLength()); + $insertList[] = $id; + $totalTime += $length; + $totalItems++; + + if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500 || $totalTime > $limit['time']) { + break; + } + + $iterator->next(); + } return $insertList; } @@ -1202,6 +1237,8 @@ SQL; if ($criteria == "limit") { $storedCrit["limit"] = array("value"=>$value, "modifier"=>$modifier); + } else if($criteria == "repeat_tracks") { + $storedCrit["repeat_tracks"] = array("value"=>$value); } else { $storedCrit["crit"][$criteria][] = array("criteria"=>$criteria, "value"=>$value, "modifier"=>$modifier, "extra"=>$extra, "display_name"=>$criteriaOptions[$criteria]); } @@ -1317,6 +1354,7 @@ SQL; } // construct limit restriction $limits = array(); + if (isset($storedCrit['limit'])) { if ($storedCrit['limit']['modifier'] == "items") { $limits['time'] = 1440 * 60; @@ -1328,10 +1366,16 @@ SQL; $limits['items'] = null; } } + + $repeatTracks = 0; + if (isset($storedCrit['repeat_tracks'])) { + $repeatTracks = $storedCrit['repeat_tracks']['value']; + } + try { $out = $qry->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)->find(); - return array("files"=>$out, "limit"=>$limits, "count"=>$out->count()); + return array("files"=>$out, "limit"=>$limits, "repeat_tracks"=> $repeatTracks, "count"=>$out->count()); } catch (Exception $e) { Logging::info($e); } @@ -1377,7 +1421,7 @@ SQL; $output['etc'][$ele['name']] = $ele['value']; } } - + return $output; } // smart block functions end diff --git a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml index 0f27248ca..c75791fe1 100644 --- a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml +++ b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml @@ -59,6 +59,20 @@
    +
    + element->getElement('sp_repeat_tracks')->getLabel() ?> + + element->getElement('sp_repeat_tracks')?> + element->getElement("sp_repeat_tracks")->hasErrors()) : ?> + element->getElement("sp_repeat_tracks")->getMessages() as $error): ?> + + + + + +
    +
    +
    element->getElement('sp_limit_value')->getLabel() ?> element->getElement('sp_limit_value')?> diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index b14b77251..c47192450 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -105,7 +105,7 @@ select { } .airtime_auth_help_icon, .custom_auth_help_icon, .stream_username_help_icon, -.playlist_type_help_icon, .master_username_help_icon { +.playlist_type_help_icon, .master_username_help_icon, .repeat_tracks_help_icon{ cursor: help; position: relative; display:inline-block; zoom:1; diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js index 0dc3bc0a9..fc736b84a 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js @@ -384,6 +384,28 @@ function setupUI() { at: "right center" }, }); + + $(".repeat_tracks_help_icon").qtip({ + content: { + text: "If your criteria is too strict, Airtime may not be able to fill up the desired smart block length." + + " Hence, if you check this option, tracks will be used more than once." + }, + 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" + }, + }); } function enableAndShowExtraField(valEle, index) { From 1899d588eea2e0eb4b4cbedd9330999dbac385f0 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 30 Oct 2012 18:03:03 -0400 Subject: [PATCH 19/38] - CRLF fix --- .../application/forms/SmartBlockCriteria.php | 8 +++---- airtime_mvc/application/models/Block.php | 24 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index 8d716b461..e48fc7590 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -212,11 +212,11 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm }//for - $repeatTracks = new Zend_Form_Element_Checkbox('sp_repeat_tracks'); - $repeatTracks->setDecorators(array('viewHelper')) + $repeatTracks = new Zend_Form_Element_Checkbox('sp_repeat_tracks'); + $repeatTracks->setDecorators(array('viewHelper')) ->setLabel('Allow Repeat Tracks:'); - if (isset($storedCrit["repeat_tracks"])) { - $repeatTracks->setChecked($storedCrit["repeat_tracks"]["value"] == 1?true:false); + if (isset($storedCrit["repeat_tracks"])) { + $repeatTracks->setChecked($storedCrit["repeat_tracks"]["value"] == 1?true:false); } $this->addElement($repeatTracks); diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index 364c11ef0..c0a3fe41f 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1097,9 +1097,9 @@ SQL; // insert repeate track option $qry = new CcBlockcriteria(); $qry->setDbCriteria("repeat_tracks") - ->setDbModifier("N/A") - ->setDbValue($p_criteriaData['etc']['sp_repeat_tracks']) - ->setDbBlockId($this->id) + ->setDbModifier("N/A") + ->setDbValue($p_criteriaData['etc']['sp_repeat_tracks']) + ->setDbBlockId($this->id) ->save(); } @@ -1161,9 +1161,9 @@ SQL; $totalTime += $length; $totalItems++; - if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500 || $totalTime > $limit['time']) { - $isBlockFull = true; - break; + if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500 || $totalTime > $limit['time']) { + $isBlockFull = true; + break; } $iterator->next(); @@ -1172,10 +1172,10 @@ SQL; // if block is not full and reapeat_track is check, fill up more while (!$isBlockFull && $repeat == 1) { if (!$iterator->valid()) { - $iterator->closeCursor(); - $info = $this->getListofFilesMeetCriteria(); - $files = $info['files']; - $files->getFirst(); + $iterator->closeCursor(); + $info = $this->getListofFilesMeetCriteria(); + $files = $info['files']; + $files->getFirst(); $iterator = $files->getIterator(); } $id = $iterator->current()->getDbId(); @@ -1184,8 +1184,8 @@ SQL; $totalTime += $length; $totalItems++; - if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500 || $totalTime > $limit['time']) { - break; + if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500 || $totalTime > $limit['time']) { + break; } $iterator->next(); From 9293a26738afcf7fa01e2a515776dc251e7d429b Mon Sep 17 00:00:00 2001 From: james Date: Wed, 31 Oct 2012 12:05:17 -0400 Subject: [PATCH 20/38] CC-4639: Give an option to allow smart blocks to reuse tracks if not enough tracks meet the time limit - code optimazation --- .../controllers/PlaylistController.php | 2 +- airtime_mvc/application/models/Block.php | 27 +++++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 0d2ead443..38dbd4fd2 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -513,7 +513,7 @@ class PlaylistController extends Zend_Controller_Action } catch (BlockNotFoundException $e) { $this->playlistNotFound('block', true); } catch (Exception $e) { - Logging::info($e); + //Logging::info($e); $this->playlistUnknownError($e); } } diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index c0a3fe41f..57018ad5f 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1113,7 +1113,12 @@ SQL; $this->saveSmartBlockCriteria($p_criteria); $insertList = $this->getListOfFilesUnderLimit(); $this->deleteAllFilesFromBlock(); - $this->addAudioClips(array_values($insertList)); + // constrcut id array + $ids = array(); + foreach ($insertList as $ele) { + $ids[] = $ele['id']; + } + $this->addAudioClips(array_values($ids)); // update length in playlist contents. $this->updateBlockLengthInAllPlaylist(); @@ -1157,7 +1162,7 @@ SQL; while ($iterator->valid()) { $id = $iterator->current()->getDbId(); $length = Application_Common_DateHelper::calculateLengthInSeconds($iterator->current()->getDbLength()); - $insertList[] = $id; + $insertList[] = array('id'=>$id, 'length'=>$length); $totalTime += $length; $totalItems++; @@ -1169,26 +1174,18 @@ SQL; $iterator->next(); } + $sizeOfInsert = count($insertList); + // if block is not full and reapeat_track is check, fill up more while (!$isBlockFull && $repeat == 1) { - if (!$iterator->valid()) { - $iterator->closeCursor(); - $info = $this->getListofFilesMeetCriteria(); - $files = $info['files']; - $files->getFirst(); - $iterator = $files->getIterator(); - } - $id = $iterator->current()->getDbId(); - $length = Application_Common_DateHelper::calculateLengthInSeconds($iterator->current()->getDbLength()); - $insertList[] = $id; - $totalTime += $length; + $randomEleKey = array_rand(array_slice($insertList, 0, $sizeOfInsert)); + $insertList[] = $insertList[$randomEleKey]; + $totalTime += $insertList[$randomEleKey]['length']; $totalItems++; if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500 || $totalTime > $limit['time']) { break; } - - $iterator->next(); } return $insertList; From 2e4d5ec14259eb7d7f63a42c5b0d3f93515d796a Mon Sep 17 00:00:00 2001 From: james Date: Wed, 31 Oct 2012 12:32:40 -0400 Subject: [PATCH 21/38] CC-4539: Advanced search: Sample rate searched on Hz, but search results shown in kHz - fixed --- airtime_mvc/application/models/Datatables.php | 6 +++--- airtime_mvc/public/js/airtime/library/library.js | 2 +- .../public/js/datatables/plugin/dataTables.columnFilter.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/application/models/Datatables.php b/airtime_mvc/application/models/Datatables.php index 65e7b1256..7545aec71 100644 --- a/airtime_mvc/application/models/Datatables.php +++ b/airtime_mvc/application/models/Datatables.php @@ -13,9 +13,9 @@ class Application_Model_Datatables if ($dbname == 'utime' || $dbname == 'mtime') { $input1 = isset($info[0])?Application_Common_DateHelper::ConvertToUtcDateTimeString($info[0]):null; $input2 = isset($info[1])?Application_Common_DateHelper::ConvertToUtcDateTimeString($info[1]):null; - } else if($dbname == 'bit_rate') { - $input1 = isset($info[0])?intval($info[0]) * 1000:null; - $input2 = isset($info[1])?intval($info[1]) * 1000:null; + } else if($dbname == 'bit_rate' || $dbname == 'sample_rate') { + $input1 = isset($info[0])?doubleval($info[0]) * 1000:null; + $input2 = isset($info[1])?doubleval($info[1]) * 1000:null; } else { $input1 = isset($info[0])?$info[0]:null; $input2 = isset($info[1])?$info[1]:null; diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index c50b2a375..6a9b8b459 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -1195,7 +1195,7 @@ var validationTypes = { "owner_id" : "s", "rating" : "i", "replay_gain" : "n", - "sample_rate" : "i", + "sample_rate" : "n", "track_title" : "s", "track_number" : "i", "info_url" : "s", diff --git a/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js b/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js index 4084fbbdb..80cb011cf 100644 --- a/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js +++ b/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js @@ -190,7 +190,7 @@ } else if (th.attr('id') == "length") { label = " hh:mm:ss.t"; } else if (th.attr('id') == "sample_rate") { - label = " Hz"; + label = " kHz"; } th.html(_fnRangeLabelPart(0)); From fd0e1c3c95a00d77ff1dc60d7c262de9e3aaf6df Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 31 Oct 2012 12:36:45 -0400 Subject: [PATCH 22/38] CC-4641: Now Playing: Extending show's length won't change the overbooked track's style -fixed --- airtime_mvc/application/models/Show.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 41ffbeefd..e52091968 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -270,6 +270,8 @@ SQL; try { //update the status flag in cc_schedule. + + CcShowInstancesPeer::clearInstancePool(); $instances = CcShowInstancesQuery::create() ->filterByDbEnds($current_timestamp, Criteria::GREATER_THAN) ->filterByDbShowId($this->_showId) @@ -1253,6 +1255,7 @@ SQL; if ($data['add_show_id'] != -1) { $con = Propel::getConnection(CcSchedulePeer::DATABASE_NAME); $con->beginTransaction(); + //current timesamp in UTC. $current_timestamp = gmdate("Y-m-d H:i:s"); From cc40dfdf4ef29c1f3d7c2bb02bbfa408abe60fa5 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 31 Oct 2012 14:16:16 -0400 Subject: [PATCH 23/38] CC-4641: Now Playing: Extending show's length won't change the overbooked track's style -added comment --- airtime_mvc/application/models/Show.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index e52091968..6f088046d 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -270,8 +270,13 @@ SQL; try { //update the status flag in cc_schedule. - + + /* Since we didn't use a propel object when updating + * cc_show_instances table we need to clear the instances + * so the correct information is retrieved from the db + */ CcShowInstancesPeer::clearInstancePool(); + $instances = CcShowInstancesQuery::create() ->filterByDbEnds($current_timestamp, Criteria::GREATER_THAN) ->filterByDbShowId($this->_showId) From dfd52eedf15f2b25ddf8b0df2dc1231db9e7891f Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 31 Oct 2012 15:24:50 -0400 Subject: [PATCH 24/38] CC-4654: Library -> Simple search still has effects even if you are doing an advanced search -fixed --- .../public/js/airtime/library/library.js | 210 ++++++++++-------- 1 file changed, 121 insertions(+), 89 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 6a9b8b459..504fa8b59 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -70,7 +70,7 @@ var AIRTIME = (function(AIRTIME) { }; mod.getChosenAudioFilesLength = function(){ - //var files = Object.keys(chosenItems), + // var files = Object.keys(chosenItems), var files, $trs, cItem, @@ -215,7 +215,7 @@ var AIRTIME = (function(AIRTIME) { mod.removeFromChosen = function($el) { var id = $el.attr("id"); - //used to not keep dragged items selected. + // used to not keep dragged items selected. if (!$el.hasClass(LIB_SELECTED_CLASS)) { delete chosenItems[id]; } @@ -252,11 +252,11 @@ var AIRTIME = (function(AIRTIME) { }; /* - * selects all items which the user can currently see. - * (behaviour taken from gmail) + * selects all items which the user can currently see. (behaviour taken from + * gmail) * - * by default the items are selected in reverse order - * so we need to reverse it back + * by default the items are selected in reverse order so we need to reverse + * it back */ mod.selectCurrentPage = function() { $.fn.reverse = [].reverse; @@ -276,8 +276,8 @@ var AIRTIME = (function(AIRTIME) { }; /* - * deselects all items that the user can currently see. - * (behaviour taken from gmail) + * deselects all items that the user can currently see. (behaviour taken + * from gmail) */ mod.deselectCurrentPage = function() { var $inputs = $libTable.find("tbody input:checkbox"), @@ -328,7 +328,7 @@ var AIRTIME = (function(AIRTIME) { temp, aMedia = []; - //process selected files/playlists. + // process selected files/playlists. for (item in aData) { temp = aData[item]; if (temp !== null && temp.hasOwnProperty('id') ) { @@ -433,36 +433,37 @@ var AIRTIME = (function(AIRTIME) { oTable = $libTable.dataTable( { - //put hidden columns at the top to insure they can never be visible on the table through column reordering. + // put hidden columns at the top to insure they can never be visible + // on the table through column reordering. "aoColumns": [ - /* ftype */ { "sTitle" : "" , "mDataProp" : "ftype" , "bSearchable" : false , "bVisible" : false } , - /* Checkbox */ { "sTitle" : "" , "mDataProp" : "checkbox" , "bSortable" : false , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_checkbox" } , - /* Type */ { "sTitle" : "" , "mDataProp" : "image" , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_type" , "iDataSort" : 0 } , - /* Title */ { "sTitle" : "Title" , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" } , - /* Creator */ { "sTitle" : "Creator" , "mDataProp" : "artist_name" , "sClass" : "library_creator" , "sWidth" : "160px" } , - /* Album */ { "sTitle" : "Album" , "mDataProp" : "album_title" , "sClass" : "library_album" , "sWidth" : "150px" } , - /* Bit Rate */ { "sTitle" : "Bit Rate" , "mDataProp" : "bit_rate" , "bVisible" : false , "sClass" : "library_bitrate" , "sWidth" : "80px" }, - /* BPM */ { "sTitle" : "BPM" , "mDataProp" : "bpm" , "bVisible" : false , "sClass" : "library_bpm" , "sWidth" : "50px" }, - /* Composer */ { "sTitle" : "Composer" , "mDataProp" : "composer" , "bVisible" : false , "sClass" : "library_composer" , "sWidth" : "150px" }, - /* Conductor */ { "sTitle" : "Conductor" , "mDataProp" : "conductor" , "bVisible" : false , "sClass" : "library_conductor" , "sWidth" : "125px" }, - /* Copyright */ { "sTitle" : "Copyright" , "mDataProp" : "copyright" , "bVisible" : false , "sClass" : "library_copyright" , "sWidth" : "125px" }, - /* Encoded */ { "sTitle" : "Encoded By" , "mDataProp" : "encoded_by" , "bVisible" : false , "sClass" : "library_encoded" , "sWidth" : "150px" }, - /* Genre */ { "sTitle" : "Genre" , "mDataProp" : "genre" , "bVisible" : false , "sClass" : "library_genre" , "sWidth" : "100px" }, - /* ISRC Number */ { "sTitle" : "ISRC" , "mDataProp" : "isrc_number" , "bVisible" : false , "sClass" : "library_isrc" , "sWidth" : "150px" }, - /* Label */ { "sTitle" : "Label" , "mDataProp" : "label" , "bVisible" : false , "sClass" : "library_label" , "sWidth" : "125px" }, - /* Language */ { "sTitle" : "Language" , "mDataProp" : "language" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" }, + /* ftype */ { "sTitle" : "" , "mDataProp" : "ftype" , "bSearchable" : false , "bVisible" : false } , + /* Checkbox */ { "sTitle" : "" , "mDataProp" : "checkbox" , "bSortable" : false , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_checkbox" } , + /* Type */ { "sTitle" : "" , "mDataProp" : "image" , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_type" , "iDataSort" : 0 } , + /* Title */ { "sTitle" : "Title" , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" } , + /* Creator */ { "sTitle" : "Creator" , "mDataProp" : "artist_name" , "sClass" : "library_creator" , "sWidth" : "160px" } , + /* Album */ { "sTitle" : "Album" , "mDataProp" : "album_title" , "sClass" : "library_album" , "sWidth" : "150px" } , + /* Bit Rate */ { "sTitle" : "Bit Rate" , "mDataProp" : "bit_rate" , "bVisible" : false , "sClass" : "library_bitrate" , "sWidth" : "80px" }, + /* BPM */ { "sTitle" : "BPM" , "mDataProp" : "bpm" , "bVisible" : false , "sClass" : "library_bpm" , "sWidth" : "50px" }, + /* Composer */ { "sTitle" : "Composer" , "mDataProp" : "composer" , "bVisible" : false , "sClass" : "library_composer" , "sWidth" : "150px" }, + /* Conductor */ { "sTitle" : "Conductor" , "mDataProp" : "conductor" , "bVisible" : false , "sClass" : "library_conductor" , "sWidth" : "125px" }, + /* Copyright */ { "sTitle" : "Copyright" , "mDataProp" : "copyright" , "bVisible" : false , "sClass" : "library_copyright" , "sWidth" : "125px" }, + /* Encoded */ { "sTitle" : "Encoded By" , "mDataProp" : "encoded_by" , "bVisible" : false , "sClass" : "library_encoded" , "sWidth" : "150px" }, + /* Genre */ { "sTitle" : "Genre" , "mDataProp" : "genre" , "bVisible" : false , "sClass" : "library_genre" , "sWidth" : "100px" }, + /* ISRC Number */ { "sTitle" : "ISRC" , "mDataProp" : "isrc_number" , "bVisible" : false , "sClass" : "library_isrc" , "sWidth" : "150px" }, + /* Label */ { "sTitle" : "Label" , "mDataProp" : "label" , "bVisible" : false , "sClass" : "library_label" , "sWidth" : "125px" }, + /* Language */ { "sTitle" : "Language" , "mDataProp" : "language" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" }, /* Last Modified */ { "sTitle" : "Last Modified" , "mDataProp" : "mtime" , "bVisible" : false , "sClass" : "library_modified_time" , "sWidth" : "125px" }, - /* Last Played */ { "sTitle" : "Last Played " , "mDataProp" : "lptime" , "bVisible" : false , "sClass" : "library_modified_time" , "sWidth" : "125px" }, - /* Length */ { "sTitle" : "Length" , "mDataProp" : "length" , "sClass" : "library_length" , "sWidth" : "80px" } , - /* Mime */ { "sTitle" : "Mime" , "mDataProp" : "mime" , "bVisible" : false , "sClass" : "library_mime" , "sWidth" : "80px" }, - /* Mood */ { "sTitle" : "Mood" , "mDataProp" : "mood" , "bVisible" : false , "sClass" : "library_mood" , "sWidth" : "70px" }, - /* Owner */ { "sTitle" : "Owner" , "mDataProp" : "owner_id" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" }, - /* Replay Gain */ { "sTitle" : "Replay Gain" , "mDataProp" : "replay_gain" , "bVisible" : false , "sClass" : "library_replay_gain" , "sWidth" : "80px" }, - /* Sample Rate */ { "sTitle" : "Sample Rate" , "mDataProp" : "sample_rate" , "bVisible" : false , "sClass" : "library_sr" , "sWidth" : "80px" }, - /* Track Number */ { "sTitle" : "Track Number" , "mDataProp" : "track_number" , "bVisible" : false , "sClass" : "library_track" , "sWidth" : "65px" }, - /* Upload Time */ { "sTitle" : "Uploaded" , "mDataProp" : "utime" , "sClass" : "library_upload_time" , "sWidth" : "125px" } , - /* Website */ { "sTitle" : "Website" , "mDataProp" : "info_url" , "bVisible" : false , "sClass" : "library_url" , "sWidth" : "150px" }, - /* Year */ { "sTitle" : "Year" , "mDataProp" : "year" , "bVisible" : false , "sClass" : "library_year" , "sWidth" : "60px" } + /* Last Played */ { "sTitle" : "Last Played " , "mDataProp" : "lptime" , "bVisible" : false , "sClass" : "library_modified_time" , "sWidth" : "125px" }, + /* Length */ { "sTitle" : "Length" , "mDataProp" : "length" , "sClass" : "library_length" , "sWidth" : "80px" } , + /* Mime */ { "sTitle" : "Mime" , "mDataProp" : "mime" , "bVisible" : false , "sClass" : "library_mime" , "sWidth" : "80px" }, + /* Mood */ { "sTitle" : "Mood" , "mDataProp" : "mood" , "bVisible" : false , "sClass" : "library_mood" , "sWidth" : "70px" }, + /* Owner */ { "sTitle" : "Owner" , "mDataProp" : "owner_id" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" }, + /* Replay Gain */ { "sTitle" : "Replay Gain" , "mDataProp" : "replay_gain" , "bVisible" : false , "sClass" : "library_replay_gain" , "sWidth" : "80px" }, + /* Sample Rate */ { "sTitle" : "Sample Rate" , "mDataProp" : "sample_rate" , "bVisible" : false , "sClass" : "library_sr" , "sWidth" : "80px" }, + /* Track Number */ { "sTitle" : "Track Number" , "mDataProp" : "track_number" , "bVisible" : false , "sClass" : "library_track" , "sWidth" : "65px" }, + /* Upload Time */ { "sTitle" : "Uploaded" , "mDataProp" : "utime" , "sClass" : "library_upload_time" , "sWidth" : "125px" } , + /* Website */ { "sTitle" : "Website" , "mDataProp" : "info_url" , "bVisible" : false , "sClass" : "library_url" , "sWidth" : "150px" }, + /* Year */ { "sTitle" : "Year" , "mDataProp" : "year" , "bVisible" : false , "sClass" : "library_year" , "sWidth" : "60px" } ], "bProcessing": true, @@ -472,7 +473,7 @@ var AIRTIME = (function(AIRTIME) { "bStateSave": true, "fnStateSaveParams": function (oSettings, oData) { - //remove oData components we don't want to save. + // remove oData components we don't want to save. delete oData.oSearch; delete oData.aoSearchCols; }, @@ -499,8 +500,8 @@ var AIRTIME = (function(AIRTIME) { length, a = oData.abVisCols; - //putting serialized data back into the correct js type to make - //sure everything works properly. + // putting serialized data back into the correct js type to make + // sure everything works properly. for (i = 0, length = a.length; i < length; i++) { if (typeof(a[i]) === "string") { a[i] = (a[i] === "true") ? true : false; @@ -524,11 +525,12 @@ var AIRTIME = (function(AIRTIME) { "sAjaxDataProp": "files", "fnServerData": function ( sSource, aoData, fnCallback ) { - /* The real validation check is done in dataTables.columnFilter.js - * We also need to check it here because datatable is redrawn everytime - * an action is performed in the Library page. - * In order for datatable to redraw the advanced search fields - * MUST all be valid. + /* + * The real validation check is done in + * dataTables.columnFilter.js We also need to check it here + * because datatable is redrawn everytime an action is performed + * in the Library page. In order for datatable to redraw the + * advanced search fields MUST all be valid. */ var advSearchFields = $("div#advanced_search").children(':visible'); var advSearchValid = validateAdvancedSearch(advSearchFields); @@ -536,7 +538,7 @@ var AIRTIME = (function(AIRTIME) { aoData.push( { name: "format", value: "json"} ); aoData.push( { name: "advSearch", value: advSearchValid} ); - //push whether to search files/playlists or all. + // push whether to search files/playlists or all. type = $("#library_display_type").find("select").val(); type = (type === undefined) ? 0 : type; aoData.push( { name: "type", value: type} ); @@ -552,30 +554,37 @@ var AIRTIME = (function(AIRTIME) { "fnRowCallback": AIRTIME.library.fnRowCallback, "fnCreatedRow": function( nRow, aData, iDataIndex ) { - //add the play function to the library_type td + // add the play function to the library_type td $(nRow).find('td.library_type').click(function(){ if (aData.ftype === 'playlist' && aData.length !== '0.0'){ - playlistIndex = $(this).parent().attr('id').substring(3); //remove the pl_ + playlistIndex = $(this).parent().attr('id').substring(3); // remove + // the + // pl_ open_playlist_preview(playlistIndex, 0); } else if (aData.ftype === 'audioclip') { open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name); } else if (aData.ftype == 'stream') { open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name); } else if (aData.ftype == 'block' && aData.bl_type == 'static') { - blockIndex = $(this).parent().attr('id').substring(3); //remove the bl_ + blockIndex = $(this).parent().attr('id').substring(3); // remove + // the + // bl_ open_block_preview(blockIndex, 0); } return false; }); alreadyclicked=false; - //call the context menu so we can prevent the event from propagating. + // call the context menu so we can prevent the event from + // propagating. $(nRow).find('td:not(.library_checkbox, .library_type)').click(function(e){ var el=$(this); if (alreadyclicked) { alreadyclicked=false; // reset - clearTimeout(alreadyclickedTimeout); // prevent this from happening + clearTimeout(alreadyclickedTimeout); // prevent this + // from + // happening // do what needs to happen on double click. $tr = $(el).parent(); @@ -587,8 +596,8 @@ var AIRTIME = (function(AIRTIME) { alreadyclicked=true; alreadyclickedTimeout=setTimeout(function(){ alreadyclicked=false; // reset when it happens - // do what needs to happen on single click. - // use el instead of $(this) because $(this) is + // do what needs to happen on single click. + // use el instead of $(this) because $(this) is // no longer the element el.contextMenu({x: e.pageX, y: e.pageY}); },300); // <-- dblclick tolerance here @@ -596,7 +605,8 @@ var AIRTIME = (function(AIRTIME) { return false; }); - //add a tool tip to appear when the user clicks on the type icon. + // add a tool tip to appear when the user clicks on the type + // icon. $(nRow).find("td:not(.library_checkbox, .library_type)").qtip({ content: { text: "Loading...", @@ -620,7 +630,8 @@ var AIRTIME = (function(AIRTIME) { }, my: 'left center', at: 'right center', - viewport: $(window), // Keep the tooltip on-screen at all times + viewport: $(window), // Keep the tooltip on-screen at + // all times effect: false // Disable positioning animation }, style: { @@ -638,10 +649,11 @@ var AIRTIME = (function(AIRTIME) { hide: {event:'mouseout', delay: 50, fixed:true} }); }, - //remove any selected nodes before the draw. + // remove any selected nodes before the draw. "fnPreDrawCallback": function( oSettings ) { - //make sure any dragging helpers are removed or else they'll be stranded on the screen. + // make sure any dragging helpers are removed or else they'll be + // stranded on the screen. $("#draggingContainer").remove(); }, "fnDrawCallback": AIRTIME.library.fnDrawCallback, @@ -673,18 +685,33 @@ var AIRTIME = (function(AIRTIME) { setColumnFilter(oTable); oTable.fnSetFilteringDelay(350); - + + var simpleSearchText; + $libContent.on("click", "legend", function(){ $simpleSearch = $libContent.find("#library_display_filter label"); var $fs = $(this).parents("fieldset"); if ($fs.hasClass("closed")) { $fs.removeClass("closed"); + + //keep value of simple search for when user switches back to it + simpleSearchText = $simpleSearch.find('input').val(); + + // clear the simple search text field and reset datatable + $(".dataTables_filter input").val("").keyup(); + $simpleSearch.addClass("sp-invisible"); } else { - $fs.addClass("closed"); + //clear the advanced search fields and reset datatable + $(".filter_column input").val("").keyup(); + + //reset datatable with previous simple search results (if any) + $(".dataTables_filter input").val(simpleSearchText).keyup(); + $simpleSearch.removeClass("sp-invisible"); + $fs.addClass("closed"); } }); @@ -737,7 +764,7 @@ var AIRTIME = (function(AIRTIME) { addQtipToSCIcons(); - //begin context menu initialization. + // begin context menu initialization. $.contextMenu({ selector: '#library_display td:not(.library_checkbox)', trigger: "left", @@ -752,7 +779,7 @@ var AIRTIME = (function(AIRTIME) { function processMenuItems(oItems) { - //define an add to playlist callback. + // define an add to playlist callback. if (oItems.pl_add !== undefined) { var aItems = []; @@ -764,7 +791,7 @@ var AIRTIME = (function(AIRTIME) { oItems.pl_add.callback = callback; } - //define an edit callback. + // define an edit callback. if (oItems.edit !== undefined) { if (data.ftype === "audioclip") { @@ -788,7 +815,7 @@ var AIRTIME = (function(AIRTIME) { oItems.edit.callback = callback; } - //define a play callback. + // define a play callback. if (oItems.play !== undefined) { if (oItems.play.mime !== undefined) { @@ -799,23 +826,28 @@ var AIRTIME = (function(AIRTIME) { callback = function() { if (data.ftype === 'playlist' && data.length !== '0.0'){ - playlistIndex = $(this).parent().attr('id').substring(3); //remove the pl_ + playlistIndex = $(this).parent().attr('id').substring(3); // remove + // the + // pl_ open_playlist_preview(playlistIndex, 0); } else if (data.ftype === 'audioclip' || data.ftype === 'stream') { open_audio_preview(data.ftype, data.audioFile, data.track_title, data.artist_name); } else if (data.ftype === 'block') { - blockIndex = $(this).parent().attr('id').substring(3); //remove the pl_ + blockIndex = $(this).parent().attr('id').substring(3); // remove + // the + // pl_ open_block_preview(blockIndex, 0); } }; oItems.play.callback = callback; } - //define a delete callback. + // define a delete callback. if (oItems.del !== undefined) { - //delete through the playlist controller, will reset - //playlist screen if this is the currently edited playlist. + // delete through the playlist controller, will reset + // playlist screen if this is the currently edited + // playlist. if ((data.ftype === "playlist" || data.ftype === "block") && screen === "playlist") { callback = function() { aMedia = []; @@ -849,7 +881,7 @@ var AIRTIME = (function(AIRTIME) { oItems.del.callback = callback; } - //define a download callback. + // define a download callback. if (oItems.download !== undefined) { callback = function() { @@ -857,11 +889,11 @@ var AIRTIME = (function(AIRTIME) { }; oItems.download.callback = callback; } - //add callbacks for Soundcloud menu items. + // add callbacks for Soundcloud menu items. if (oItems.soundcloud !== undefined) { var soundcloud = oItems.soundcloud.items; - //define an upload to soundcloud callback. + // define an upload to soundcloud callback. if (soundcloud.upload !== undefined) { callback = function() { @@ -872,7 +904,7 @@ var AIRTIME = (function(AIRTIME) { soundcloud.upload.callback = callback; } - //define a view on soundcloud callback + // define a view on soundcloud callback if (soundcloud.view !== undefined) { callback = function() { @@ -988,7 +1020,8 @@ function addQtipToSCIcons(){ viewport: $(window) }, show: { - ready: true // Needed to make it show on first mouseover event + ready: true // Needed to make it show on first mouseover + // event } }); } @@ -1015,7 +1048,8 @@ function addQtipToSCIcons(){ viewport: $(window) }, show: { - ready: true // Needed to make it show on first mouseover event + ready: true // Needed to make it show on first mouseover + // event } }); }else if($(this).hasClass("sc-error")){ @@ -1042,7 +1076,8 @@ function addQtipToSCIcons(){ viewport: $(window) }, show: { - ready: true // Needed to make it show on first mouseover event + ready: true // Needed to make it show on first mouseover + // event } }); } @@ -1096,7 +1131,7 @@ function validateAdvancedSearch(divs) { } } - //string fields do not need validation + // string fields do not need validation if (searchTermType !== "s") { valid = regExpr.test(searchTerm[i]); if (!valid) allValid = false; @@ -1104,11 +1139,11 @@ function validateAdvancedSearch(divs) { addRemoveValidationIcons(valid, $(field), searchTermType); - /* Empty fields should not have valid/invalid indicator - * Range values are considered valid even if only the - * 'From' value is provided. Therefore, if the 'To' value - * is empty but the 'From' value is not empty we need to - * keep the validation icon on screen. + /* + * Empty fields should not have valid/invalid indicator Range values + * are considered valid even if only the 'From' value is provided. + * Therefore, if the 'To' value is empty but the 'From' value is not + * empty we need to keep the validation icon on screen. */ } else if (searchTerm[0] === "" && searchTerm[1] !== "" || searchTerm[0] === "" && searchTerm[1] === ""){ @@ -1144,7 +1179,7 @@ function addRemoveValidationIcons(valid, field, searchTermType) { if (valid) { if (!field.closest('div').children(':last-child').hasClass('checked-icon')) { - //remove invalid icon before adding valid icon + // remove invalid icon before adding valid icon if (field.closest('div').children(':last-child').hasClass('not-available-icon')) { field.closest('div').children(':last-child').remove(); } @@ -1152,7 +1187,7 @@ function addRemoveValidationIcons(valid, field, searchTermType) { } } else { if (!field.closest('div').children(':last-child').hasClass('not-available-icon')) { - //remove valid icon before adding invalid icon + // remove valid icon before adding invalid icon if (field.closest('div').children(':last-child').hasClass('checked-icon')) { field.closest('div').children(':last-child').remove(); } @@ -1161,12 +1196,9 @@ function addRemoveValidationIcons(valid, field, searchTermType) { } } -/* Validation types: - * s => string - * i => integer - * n => numeric (positive/negative, whole/decimals) - * t => timestamp - * l => length +/* + * Validation types: s => string i => integer n => numeric (positive/negative, + * whole/decimals) t => timestamp l => length */ var validationTypes = { "album_title" : "s", From fc613aa597dd31f87373c0320e8c252a90edb857 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 31 Oct 2012 16:01:17 -0400 Subject: [PATCH 25/38] CC-4604: Edit Metadata: DJ's cannot edit metadata on their own files -fixed --- .../application/controllers/LibraryController.php | 13 ++++++++----- airtime_mvc/application/models/StoredFile.php | 4 ++++ .../views/scripts/library/edit-file-md.phtml | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index a1d0d245e..72111cbc1 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -181,7 +181,8 @@ class LibraryController extends Zend_Controller_Action } } } - if ($isAdminOrPM) { + + if ($isAdminOrPM || $file->getFileOwnerId() == $user->getId()) { $menu["del"] = array("name"=> "Delete", "icon" => "delete", "url" => "/library/delete"); $menu["edit"] = array("name"=> "Edit Metadata", "icon" => "edit", "url" => "/library/edit-file-md/id/{$id}"); } @@ -364,15 +365,17 @@ class LibraryController extends Zend_Controller_Action { $user = Application_Model_User::getCurrentUser(); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); - if (!$isAdminOrPM) { - return; - } $request = $this->getRequest(); - $form = new Application_Form_EditAudioMD(); $file_id = $this->_getParam('id', null); $file = Application_Model_StoredFile::Recall($file_id); + + if (!$isAdminOrPM && $file->getFileOwnerId() != $user->getId()) { + return; + } + + $form = new Application_Form_EditAudioMD(); $form->populate($file->getDbColMetadata()); if ($request->isPost()) { diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 2300f4eb7..41178f2e3 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -1161,6 +1161,10 @@ SQL; return $this->_file->getDbFileExists(); } + public function getFileOwnerId() + { + return $this->_file->getDbOwnerId(); + } // note: never call this method from controllers because it does a sleep public function uploadToSoundCloud() diff --git a/airtime_mvc/application/views/scripts/library/edit-file-md.phtml b/airtime_mvc/application/views/scripts/library/edit-file-md.phtml index 6b7696c0a..bdead9832 100644 --- a/airtime_mvc/application/views/scripts/library/edit-file-md.phtml +++ b/airtime_mvc/application/views/scripts/library/edit-file-md.phtml @@ -1,6 +1,6 @@

    Edit Metadata

    - form->setAction($this->url()); + form->setAction($this->url()); echo $this->form; ?>
    From 766a17bc2bbbd099093e2f79c531ff2d9bc91d9a Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 31 Oct 2012 16:38:53 -0400 Subject: [PATCH 26/38] CC-4657: Don't use deb-multimedia.org for package liblame --- install_full/ubuntu/airtime-full-install | 4 ++-- install_full/ubuntu/airtime-full-install-nginx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install index 11bff85ec..955ec3ac7 100755 --- a/install_full/ubuntu/airtime-full-install +++ b/install_full/ubuntu/airtime-full-install @@ -27,11 +27,11 @@ code=`lsb_release -cs` if [ "$dist" = "Debian" ]; then set +e - grep -E "deb +http://www.deb-multimedia.org/? squeeze +main +non-free" /etc/apt/sources.list + grep -E "deb http://backports.debian.org/debian-backports squeeze-backports main" /etc/apt/sources.list returncode=$? set -e if [ "$returncode" -ne "0" ]; then - echo "deb http://www.deb-multimedia.org squeeze main non-free" >> /etc/apt/sources.list + echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list fi fi diff --git a/install_full/ubuntu/airtime-full-install-nginx b/install_full/ubuntu/airtime-full-install-nginx index 6b802b3bb..7e38e34cb 100755 --- a/install_full/ubuntu/airtime-full-install-nginx +++ b/install_full/ubuntu/airtime-full-install-nginx @@ -29,9 +29,9 @@ dist=`lsb_release -is` code=`lsb_release -cs` if [ "$dist" -eq "Debian" ]; then - grep "deb http://www.deb-multimedia.org squeeze main non-free" /etc/apt/sources.list + grep "deb http://backports.debian.org/debian-backports squeeze-backports main" /etc/apt/sources.list if [ "$?" -ne "0" ]; then - echo "deb http://www.deb-multimedia.org squeeze main non-free" >> /etc/apt/sources.list + echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list fi fi From 2507e0f8a498878daa6a06ea828afdbf54dad64f Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 31 Oct 2012 16:51:29 -0400 Subject: [PATCH 27/38] CC-4655: DJ's can delete files that they do not own -fixed --- airtime_mvc/application/controllers/LibraryController.php | 2 ++ airtime_mvc/application/models/StoredFile.php | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 72111cbc1..8260616f4 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -319,6 +319,8 @@ class LibraryController extends Zend_Controller_Action if (isset($file)) { try { $res = $file->delete(true); + } catch (FileNoPermissionException $e) { + $this->view->message = "You don't have permission to delete selected items."; } catch (Exception $e) { //could throw a scheduled in future exception. $message = "Could not delete some scheduled files."; diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 41178f2e3..2bd6470ea 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -344,6 +344,13 @@ SQL; throw new DeleteScheduledFileException(); } + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $user = new Application_Model_User($userInfo->id); + $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); + if (!$isAdminOrPM && $this->getFileOwnerId() != $user->getId()) { + throw new FileNoPermissionException(); + } + $music_dir = Application_Model_MusicDir::getDirByPK($this->_file->getDbDirectory()); $type = $music_dir->getType(); @@ -1213,3 +1220,4 @@ SQL; class DeleteScheduledFileException extends Exception {} class FileDoesNotExistException extends Exception {} +class FileNoPermissionException extends Exception {} From 5b14c4fe8885236e831a75359fdd7370a07bed5b Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 31 Oct 2012 17:19:27 -0400 Subject: [PATCH 28/38] CC-4656: Library -> No error message when a dj tries to delete smart blocks and webstreams they do not own -fixed --- .../application/controllers/LibraryController.php | 11 +++++++---- airtime_mvc/application/models/Webstream.php | 5 ++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 8260616f4..353d131f8 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -277,6 +277,7 @@ class LibraryController extends Zend_Controller_Action $streams = array(); $message = null; + $noPermissionMsg = "You don't have permission to delete selected items."; foreach ($mediaItems as $media) { @@ -294,19 +295,21 @@ class LibraryController extends Zend_Controller_Action try { Application_Model_Playlist::deletePlaylists($playlists, $user->getId()); } catch (PlaylistNoPermissionException $e) { - $this->view->message = "You don't have permission to delete selected items."; - - return; + $message = $noPermissionMsg; } try { Application_Model_Block::deleteBlocks($blocks, $user->getId()); + } catch (BlockNoPermissionException $e) { + $message = $noPermissionMsg; } catch (Exception $e) { //TODO: warn user that not all blocks could be deleted. } try { Application_Model_Webstream::deleteStreams($streams, $user->getId()); + } catch (WebstreamNoPermissionException $e) { + $message = $noPermissionMsg; } catch (Exception $e) { //TODO: warn user that not all streams could be deleted. Logging::info($e); @@ -320,7 +323,7 @@ class LibraryController extends Zend_Controller_Action try { $res = $file->delete(true); } catch (FileNoPermissionException $e) { - $this->view->message = "You don't have permission to delete selected items."; + $message = $noPermissionMsg; } catch (Exception $e) { //could throw a scheduled in future exception. $message = "Could not delete some scheduled files."; diff --git a/airtime_mvc/application/models/Webstream.php b/airtime_mvc/application/models/Webstream.php index 90afbe973..ef3f32605 100644 --- a/airtime_mvc/application/models/Webstream.php +++ b/airtime_mvc/application/models/Webstream.php @@ -92,7 +92,7 @@ class Application_Model_Webstream implements Application_Model_LibraryEditable if (count($leftOver) == 0) { CcWebstreamQuery::create()->findPKs($p_ids)->delete(); } else { - throw new Exception("Invalid user permissions"); + throw new WebstreamNoPermissionException; } } @@ -370,3 +370,6 @@ class Application_Model_Webstream implements Application_Model_LibraryEditable return $webstream->getDbId(); } } + +class WebstreamNoPermissionException extends Exception {} + From c0dc38be621378f87cda86533eaedc982f34082a Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Thu, 1 Nov 2012 15:16:23 -0400 Subject: [PATCH 29/38] cc-4652: added logging for when watch fails on startup --- python_apps/media-monitor2/mm2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python_apps/media-monitor2/mm2.py b/python_apps/media-monitor2/mm2.py index ea1178a2f..2964b001b 100644 --- a/python_apps/media-monitor2/mm2.py +++ b/python_apps/media-monitor2/mm2.py @@ -115,6 +115,7 @@ def main(global_config, api_client_config, log_config, (given from the database)." % watch_dir) if os.path.exists(watch_dir): airtime_receiver.new_watch({ 'directory':watch_dir }, restart=True) + else: log.info("Failed to add watch on %s" % str(watch_dir)) bs = Bootstrapper( db=sdb, watch_signal='watch' ) From d7a5ab4d943ec0b0ecd33d8cc03484a02243f5ab Mon Sep 17 00:00:00 2001 From: James Date: Thu, 1 Nov 2012 15:21:56 -0400 Subject: [PATCH 30/38] CC-4622: Library: AAC file can be preview but is blocked from playlist and content menu - fixed --- airtime_mvc/public/js/airtime/common/audioplaytest.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/common/audioplaytest.js b/airtime_mvc/public/js/airtime/common/audioplaytest.js index 76bc5d7c1..f96ad09af 100644 --- a/airtime_mvc/public/js/airtime/common/audioplaytest.js +++ b/airtime_mvc/public/js/airtime/common/audioplaytest.js @@ -14,5 +14,6 @@ function isAudioSupported(mime){ //Note that checking the navigator.mimeTypes value does not work for IE7, but the alternative //is adding a javascript library to do the work for you, which seems like overkill.... return (!!audio.canPlayType && audio.canPlayType(bMime) != "") || - (mime.indexOf("mp3") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined); + (mime.indexOf("mp3") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined) || + (mime.indexOf("mp4") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined); } From 176f2c45ba5079b416ec45ea65f088cb30bd6c18 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Thu, 1 Nov 2012 15:42:58 -0400 Subject: [PATCH 31/38] Added information message when media monitor is restarted --- python_apps/media-monitor2/mm2.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python_apps/media-monitor2/mm2.py b/python_apps/media-monitor2/mm2.py index 2964b001b..217cfcfc8 100644 --- a/python_apps/media-monitor2/mm2.py +++ b/python_apps/media-monitor2/mm2.py @@ -104,6 +104,9 @@ def main(global_config, api_client_config, log_config, airtime_notifier = AirtimeNotifier(config, airtime_receiver) store = apiclient.setup_media_monitor() + + log.info("Initing with the following airtime response:%s" % str(store)) + airtime_receiver.change_storage({ 'directory':store[u'stor'] }) for watch_dir in store[u'watched_dirs']: From bf363dcdde1cbce1cc7813a172039104067954ef Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Thu, 1 Nov 2012 15:48:26 -0400 Subject: [PATCH 32/38] cc-4652: Added code to create the stor/ structure before adding any watched --- python_apps/media-monitor2/media/monitor/manager.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python_apps/media-monitor2/media/monitor/manager.py b/python_apps/media-monitor2/media/monitor/manager.py index 33dc90468..a2fc47028 100644 --- a/python_apps/media-monitor2/media/monitor/manager.py +++ b/python_apps/media-monitor2/media/monitor/manager.py @@ -202,6 +202,12 @@ class Manager(Loggable): organize. """ store_paths = mmp.expand_storage(store) + # First attempt to make sure that all paths exist before adding any + # watches + for path_type, path in store_paths.iteritems(): + try: mmp.create_dir(path) + except mmp.FailedToCreateDir as e: self.unexpected_exception(e) + self.set_problem_files_path(store_paths['problem_files']) self.set_imported_path(store_paths['imported']) self.set_recorded_path(store_paths['recorded']) From 575400b4c217a9aec6b72bded9d890b6f7ca92da Mon Sep 17 00:00:00 2001 From: James Date: Thu, 1 Nov 2012 16:44:37 -0400 Subject: [PATCH 33/38] CC-4623: Library: Preview button for Flac does not work - fixed --- airtime_mvc/application/models/Schedule.php | 6 ++++-- airtime_mvc/application/models/ShowBuilder.php | 4 +++- .../airtime/library/events/library_playlistbuilder.js | 5 +++++ .../js/airtime/library/events/library_showbuilder.js | 5 +++++ airtime_mvc/public/js/airtime/library/library.js | 6 ++++-- airtime_mvc/public/js/airtime/showbuilder/builder.js | 10 ++++++++-- 6 files changed, 29 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index c6776a43e..3a03a4369 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -292,7 +292,8 @@ SQL; ft.artist_name AS file_artist_name, ft.album_title AS file_album_title, ft.length AS file_length, - ft.file_exists AS file_exists + ft.file_exists AS file_exists, + ft.mime AS file_mime SQL; $filesJoin = << "", "fadeout" => "", "image" => false, + "mime" => null, "color" => "", //in hex without the '#' sign. "backgroundColor" => "", //in hex without the '#' sign. ); @@ -277,6 +278,7 @@ class Application_Model_ShowBuilder $row["cueout"] = $p_item["cue_out"]; $row["fadein"] = round(substr($p_item["fade_in"], 6), 6); $row["fadeout"] = round(substr($p_item["fade_out"], 6), 6); + $row["mime"] = $p_item["file_mime"]; $row["pos"] = $this->pos++; @@ -471,7 +473,7 @@ class Application_Model_ShowBuilder $display_items[] = $this->makeFooterRow($scheduled_items[ count($scheduled_items)-1]); } - + return array( "schedule" => $display_items, "showInstances" => $this->showInstances); diff --git a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js index 5392cbd49..fd9851f33 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js @@ -37,6 +37,11 @@ var AIRTIME = (function(AIRTIME) { var $nRow = $(nRow); if (aData.ftype === "audioclip") { $nRow.addClass("lib-audio"); + $image = $nRow.find('td.library_type'); + if (!isAudioSupported(aData.mime)) { + $image.html(''); + aData.image = ''; + } } else if (aData.ftype === "stream") { $nRow.addClass("lib-stream"); } else if (aData.ftype === "block") { diff --git a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js index 67151e869..ba03586d0 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js @@ -29,6 +29,11 @@ var AIRTIME = (function(AIRTIME) { if (aData.ftype === "audioclip") { $nRow.addClass("lib-audio"); + $image = $nRow.find('td.library_type'); + if (!isAudioSupported(aData.mime)) { + $image.html(''); + aData.image = ''; + } } else if (aData.ftype === "stream") { $nRow.addClass("lib-stream"); } else { diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 504fa8b59..b463610bc 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -542,7 +542,7 @@ var AIRTIME = (function(AIRTIME) { type = $("#library_display_type").find("select").val(); type = (type === undefined) ? 0 : type; aoData.push( { name: "type", value: type} ); - + $.ajax( { "dataType": 'json', "type": "POST", @@ -562,7 +562,9 @@ var AIRTIME = (function(AIRTIME) { // pl_ open_playlist_preview(playlistIndex, 0); } else if (aData.ftype === 'audioclip') { - open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name); + if (isAudioSupported(aData.mime)) { + open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name); + } } else if (aData.ftype == 'stream') { open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name); } else if (aData.ftype == 'block' && aData.bl_type == 'static') { diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index de9142190..48015f92c 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -369,7 +369,8 @@ var AIRTIME = (function(AIRTIME){ /* cue in */ {"mDataProp": "cuein", "sTitle": "Cue In", "bVisible": false, "sClass": "sb-cue-in"}, /* cue out */ {"mDataProp": "cueout", "sTitle": "Cue Out", "bVisible": false, "sClass": "sb-cue-out"}, /* fade in */ {"mDataProp": "fadein", "sTitle": "Fade In", "bVisible": false, "sClass": "sb-fade-in"}, - /* fade out */ {"mDataProp": "fadeout", "sTitle": "Fade Out", "bVisible": false, "sClass": "sb-fade-out"} + /* fade out */ {"mDataProp": "fadeout", "sTitle": "Fade Out", "bVisible": false, "sClass": "sb-fade-out"}, + /* Mime */ {"mDataProp" : "mime", "sTitle" : "Mime", "bVisible": false, "sClass": "sb-mime"} ], "bJQueryUI": true, @@ -549,11 +550,16 @@ var AIRTIME = (function(AIRTIME){ $image = $nRow.find('td.sb-image'); //check if the file exists. if (aData.image === true) { - $image.html('') + $nRow.addClass("lib-audio"); + if (!isAudioSupported(aData.mime)) { + $image.html(''); + } else { + $image.html('') .click(function() { open_show_preview(aData.instance, aData.pos); return false; }); + } } else { $image.html(''); From 6bcadd7ed6d9477123c53ccd5c2ece36be08f875 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Thu, 1 Nov 2012 16:49:23 -0400 Subject: [PATCH 34/38] cc-4630: Added permission set on permission folder before watching it --- utils/airtime-import/airtime-import.py | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/airtime-import/airtime-import.py b/utils/airtime-import/airtime-import.py index 408bd91ac..c77a0f21e 100644 --- a/utils/airtime-import/airtime-import.py +++ b/utils/airtime-import/airtime-import.py @@ -159,6 +159,7 @@ def WatchAddAction(option, opt, value, parser): path = currentDir+path path = apc.encode_to(path, 'utf-8') if(os.path.isdir(path)): + os.chmod(path, 0765) res = api_client.add_watched_dir(path) if(res is None): exit("Unable to connect to the server.") From b746f653040285c5dc797d712b9cdff14bcbee92 Mon Sep 17 00:00:00 2001 From: James Date: Thu, 1 Nov 2012 17:24:41 -0400 Subject: [PATCH 35/38] CC-4601: Do not rewrite metadata for master source and show source streams. - fixed --- python_apps/pypo/liquidsoap_scripts/ls_script.liq | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 1f476b919..34e56786e 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -201,9 +201,6 @@ def append_dj_inputs(master_harbor_input_port, master_harbor_input_mount_point, dj_live = mksafe(audio_to_stereo(input.harbor(id="live_dj_harbor", dj_harbor_input_mount_point, port=dj_harbor_input_port, auth=check_dj_client, max=40., on_connect=live_dj_connect, on_disconnect=live_dj_disconnect))) - master_dj = rewrite_metadata([("artist","Airtime"), ("title", "Master Dj")],master_dj) - dj_live = rewrite_metadata([("artist","Airtime"), ("title", "Live Dj")],dj_live) - ignore(output.dummy(master_dj, fallible=true)) ignore(output.dummy(dj_live, fallible=true)) switch(id="master_dj_switch", track_sensitive=false, transitions=[transition, transition, transition], [({!master_dj_enabled},master_dj), ({!live_dj_enabled},dj_live), ({true}, s)]) @@ -211,14 +208,12 @@ def append_dj_inputs(master_harbor_input_port, master_harbor_input_mount_point, master_dj = mksafe(audio_to_stereo(input.harbor(id="master_harbor", master_harbor_input_mount_point, port=master_harbor_input_port, auth=check_master_dj_client, max=40., on_connect=master_dj_connect, on_disconnect=master_dj_disconnect))) ignore(output.dummy(master_dj, fallible=true)) - master_dj = rewrite_metadata([("artist","Airtime"), ("title", "Master Dj")],master_dj) + switch(id="master_dj_switch", track_sensitive=false, transitions=[transition, transition], [({!master_dj_enabled},master_dj), ({true}, s)]) elsif dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then dj_live = mksafe(audio_to_stereo(input.harbor(id="live_dj_harbor", dj_harbor_input_mount_point, port=dj_harbor_input_port, auth=check_dj_client, max=40., on_connect=live_dj_connect, on_disconnect=live_dj_disconnect))) - dj_live = rewrite_metadata([("artist","Airtime"), ("title", "Live Dj")],dj_live) - ignore(output.dummy(dj_live, fallible=true)) switch(id="live_dj_switch", track_sensitive=false, transitions=[transition, transition], [({!live_dj_enabled},dj_live), ({true}, s)]) else From feb6c9d6f5c90c2e5685176ef0beee2579098e1a Mon Sep 17 00:00:00 2001 From: James Date: Thu, 1 Nov 2012 17:45:28 -0400 Subject: [PATCH 36/38] CC-4636: Exception happens when trying to remove user that have created some smart block - doing delete cascade on cc_block on deleting users --- airtime_mvc/application/models/airtime/map/CcBlockTableMap.php | 2 +- airtime_mvc/application/models/airtime/map/CcSubjsTableMap.php | 2 +- airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php | 3 +++ airtime_mvc/build/schema.xml | 2 +- airtime_mvc/build/sql/schema.sql | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/models/airtime/map/CcBlockTableMap.php b/airtime_mvc/application/models/airtime/map/CcBlockTableMap.php index 4495c9b1d..0ce86613c 100644 --- a/airtime_mvc/application/models/airtime/map/CcBlockTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcBlockTableMap.php @@ -54,7 +54,7 @@ class CcBlockTableMap extends TableMap { */ public function buildRelations() { - $this->addRelation('CcSubjs', 'CcSubjs', RelationMap::MANY_TO_ONE, array('creator_id' => 'id', ), null, null); + $this->addRelation('CcSubjs', 'CcSubjs', RelationMap::MANY_TO_ONE, array('creator_id' => 'id', ), 'CASCADE', null); $this->addRelation('CcPlaylistcontents', 'CcPlaylistcontents', RelationMap::ONE_TO_MANY, array('id' => 'block_id', ), 'CASCADE', null); $this->addRelation('CcBlockcontents', 'CcBlockcontents', RelationMap::ONE_TO_MANY, array('id' => 'block_id', ), 'CASCADE', null); $this->addRelation('CcBlockcriteria', 'CcBlockcriteria', RelationMap::ONE_TO_MANY, array('id' => 'block_id', ), 'CASCADE', null); diff --git a/airtime_mvc/application/models/airtime/map/CcSubjsTableMap.php b/airtime_mvc/application/models/airtime/map/CcSubjsTableMap.php index ffbe8cded..d4f83529a 100644 --- a/airtime_mvc/application/models/airtime/map/CcSubjsTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcSubjsTableMap.php @@ -64,7 +64,7 @@ class CcSubjsTableMap extends TableMap { $this->addRelation('CcPerms', 'CcPerms', RelationMap::ONE_TO_MANY, array('id' => 'subj', ), 'CASCADE', null); $this->addRelation('CcShowHosts', 'CcShowHosts', RelationMap::ONE_TO_MANY, array('id' => 'subjs_id', ), 'CASCADE', null); $this->addRelation('CcPlaylist', 'CcPlaylist', RelationMap::ONE_TO_MANY, array('id' => 'creator_id', ), 'CASCADE', null); - $this->addRelation('CcBlock', 'CcBlock', RelationMap::ONE_TO_MANY, array('id' => 'creator_id', ), null, null); + $this->addRelation('CcBlock', 'CcBlock', RelationMap::ONE_TO_MANY, array('id' => 'creator_id', ), 'CASCADE', null); $this->addRelation('CcPref', 'CcPref', RelationMap::ONE_TO_MANY, array('id' => 'subjid', ), 'CASCADE', null); $this->addRelation('CcSess', 'CcSess', RelationMap::ONE_TO_MANY, array('id' => 'userid', ), 'CASCADE', null); $this->addRelation('CcSubjsToken', 'CcSubjsToken', RelationMap::ONE_TO_MANY, array('id' => 'user_id', ), 'CASCADE', null); diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php index dbd9978d7..ad60edbb4 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcSubjsPeer.php @@ -407,6 +407,9 @@ abstract class BaseCcSubjsPeer { // Invalidate objects in CcPlaylistPeer instance pool, // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. CcPlaylistPeer::clearInstancePool(); + // Invalidate objects in CcBlockPeer instance pool, + // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. + CcBlockPeer::clearInstancePool(); // Invalidate objects in CcPrefPeer instance pool, // since one or more of them may be deleted by ON DELETE CASCADE/SETNULL rule. CcPrefPeer::clearInstancePool(); diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index fc3e6a51f..1a69020d3 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -250,7 +250,7 @@ - + diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index d7e1107a4..d30faa09d 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -697,7 +697,7 @@ ALTER TABLE "cc_playlistcontents" ADD CONSTRAINT "cc_playlistcontents_block_id_f ALTER TABLE "cc_playlistcontents" ADD CONSTRAINT "cc_playlistcontents_playlist_id_fkey" FOREIGN KEY ("playlist_id") REFERENCES "cc_playlist" ("id") ON DELETE CASCADE; -ALTER TABLE "cc_block" ADD CONSTRAINT "cc_block_createdby_fkey" FOREIGN KEY ("creator_id") REFERENCES "cc_subjs" ("id"); +ALTER TABLE "cc_block" ADD CONSTRAINT "cc_block_createdby_fkey" FOREIGN KEY ("creator_id") REFERENCES "cc_subjs" ("id") ON DELETE CASCADE; ALTER TABLE "cc_blockcontents" ADD CONSTRAINT "cc_blockcontents_file_id_fkey" FOREIGN KEY ("file_id") REFERENCES "cc_files" ("id") ON DELETE CASCADE; From cc208da2fb2279a38300fff82f383aee6da83378 Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 2 Nov 2012 10:48:08 -0400 Subject: [PATCH 37/38] CC-4536: Smart block criteria use AND logic, but additional modifiers use OR logic, without labels to show the difference -added labels --- .../scripts/form/smart-block-criteria.phtml | 21 +++++++++++++-- airtime_mvc/public/css/styles.css | 3 +++ .../js/airtime/playlist/smart_blockbuilder.js | 26 ++++++++++++++----- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml index c75791fe1..3c5ab4643 100644 --- a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml +++ b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml @@ -30,8 +30,22 @@
    criteriasLength; $i++) {?> - modRowMap[$i]; $j++) {?> -
    0) && ($this->element->getElement("sp_criteria_field_".$i."_".$j)->getAttrib('disabled') == 'disabled')) { + modRowMap[$i]; $j++) { + if ($this->modRowMap[$i] > 1 && $j != $this->modRowMap[$i]-1) $logicLabel = 'or'; + else $logicLabel = 'and'; + $disabled = $this->element->getElement("sp_criteria_field_".$i."_".$j)->getAttrib('disabled') == 'disabled'?true:false; + // determine if the next row is disabled and only display the logic label if it isn't + if ($j == $this->modRowMap[$i]-1 && $i < 25) { + $n = $i+1; + $nextIndex = $n."_0"; + } elseif ($j+1 < $this->modRowMap[$i]-1) { + $n = $j+1; + $nextIndex = $i."_".$n; + + } + $nextDisabled = $this->element->getElement("sp_criteria_field_".$nextIndex)->getAttrib('disabled') == 'disabled'?true:false; + ?> +
    0) && $disabled) { echo 'style=display:none'; } ?>> element->getElement("sp_criteria_field_".$i."_".$j) ?> @@ -45,6 +59,9 @@ + > + + element->getElement("sp_criteria_field_".$i."_".$j)->hasErrors()) : ?> element->getElement("sp_criteria_field_".$i."_".$j)->getMessages() as $error): ?> diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index c47192450..1b0a12dd3 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -514,6 +514,9 @@ table.library-get-file-md.table-small{ /***** SMART BLOCK SPECIFIC STYLES BEGIN *****/ +.db-logic-label{ + font-size:11px; +} .sp-invisible{ visibility: hidden; } diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js index fc736b84a..c33ccc351 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js @@ -8,14 +8,17 @@ function setSmartBlockEvents() { /********** ADD CRITERIA ROW **********/ form.find('#criteria_add').live('click', function(){ - var div = $('dd[id="sp_criteria-element"]').children('div:visible:last').next(); - - div.show(); + var div = $('dd[id="sp_criteria-element"]').children('div:visible:last'); + + div.find('.db-logic-label').text('and').show(); + div = div.next().show(); + div.children().removeAttr('disabled'); div = div.next(); if (div.length === 0) { $(this).hide(); } + appendAddButton(); appendModAddButton(); removeButtonCheck(); @@ -24,7 +27,7 @@ function setSmartBlockEvents() { /********** ADD MODIFIER ROW **********/ form.find('a[id^="modifier_add"]').live('click', function(){ var criteria_value = $(this).siblings('select[name^="sp_criteria_field"]').val(); - + //make new modifier row var newRow = $(this).parent().clone(), newRowCrit = newRow.find('select[name^="sp_criteria_field"]'), @@ -285,6 +288,11 @@ function reindexElements() { var divs = $('#smart-block-form').find('div select[name^="sp_criteria_field"]').parent(), index = 0, modIndex = 0; + /* Hide all logic labels + * We will re-add them as each row gets indexed + */ + $('.db-logic-label').text('').hide(); + $.each(divs, function(i, div){ if (i > 0 && index < 26) { @@ -292,8 +300,14 @@ function reindexElements() { * a modifier row */ if ($(div).find('select[name^="sp_criteria_field"]').hasClass('sp-invisible')) { + if ($(div).is(':visible')) { + $(div).prev().find('.db-logic-label').text('or').show(); + } modIndex++; } else { + if ($(div).is(':visible')) { + $(div).prev().find('.db-logic-label').text('and').show(); + } index++; modIndex = 0; } @@ -337,8 +351,8 @@ function setupUI() { */ var plContents = $('#spl_sortable').children(); var shuffleButton = $('button[id="shuffle_button"]'); - - if (plContents.text() !== 'Empty playlist') { + + if (!plContents.hasClass('spl_empty')) { if (shuffleButton.hasClass('ui-state-disabled')) { shuffleButton.removeClass('ui-state-disabled'); shuffleButton.removeAttr('disabled'); From 715a21acb24e9eacd8997c0a56d466a60c0dea8f Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 2 Nov 2012 11:59:36 -0400 Subject: [PATCH 38/38] CC-4625: On tablet you cannot create a playlist, smart block or webstream -upgraded bootstrap-dropdown.js to v2.2.1 --- airtime_mvc/public/js/bootstrap/bootstrap.js | 22 +++++++++----------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/airtime_mvc/public/js/bootstrap/bootstrap.js b/airtime_mvc/public/js/bootstrap/bootstrap.js index 7f303eb88..3ba659d60 100644 --- a/airtime_mvc/public/js/bootstrap/bootstrap.js +++ b/airtime_mvc/public/js/bootstrap/bootstrap.js @@ -574,7 +574,7 @@ }) }(window.jQuery);/* ============================================================ - * bootstrap-dropdown.js v2.1.0 + * bootstrap-dropdown.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. @@ -675,8 +675,9 @@ } function clearMenus() { - getParent($(toggle)) - .removeClass('open') + $(toggle).each(function () { + getParent($(this)).removeClass('open') + }) } function getParent($this) { @@ -685,7 +686,7 @@ if (!selector) { selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } $parent = $(selector) @@ -713,14 +714,11 @@ /* APPLY TO STANDARD DROPDOWN ELEMENTS * =================================== */ - $(function () { - $('html') - .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) - $('body') - .on('click.dropdown touchstart.dropdown.data-api', '.dropdown', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) - }) + $(document) + .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) + .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) }(window.jQuery);/* ========================================================= * bootstrap-modal.js v2.1.0