diff --git a/app/Migrations/Schema/V110/Version20151214170800.php b/app/Migrations/Schema/V110/Version20151214170800.php index 2be3065297..4ec3e2effc 100644 --- a/app/Migrations/Schema/V110/Version20151214170800.php +++ b/app/Migrations/Schema/V110/Version20151214170800.php @@ -9,6 +9,12 @@ use Doctrine\DBAL\Types\Type; /** * Fix track_e_hotspot table and migrate hotspot/values + * In the wake of an issue with the hotspot code not being possible to update without moving from AS2 to AS3 (Flash), we + * have decided to rewrite the hotspot tool in JS. + * Little did we know that we would find out that the coordinates system in use by the Flash version of hotspot was in + * fact a projection into a square form of 360x360, not depending on the original size of the image, and that a square + * was defined by its center's coordinates and its width, with an initial not-null margin on the left and top borders. + * The migration below fixes those parallax issues. */ class Version20151214170800 extends AbstractMigrationChamilo { @@ -32,6 +38,7 @@ class Version20151214170800 extends AbstractMigrationChamilo "); foreach ($answers as $answer) { + // Recover the real image size to recalculate coordinates $imagePath = api_get_path(SYS_PATH) . "courses/{$answer['directory']}/document/images/{$answer['picture']}"; $imageSize = getimagesize($imagePath); $widthRatio = $imageSize[0] / 360; diff --git a/app/Resources/public/css/frames.css b/app/Resources/public/css/frames.css index e0533c52b3..5522507d40 100644 --- a/app/Resources/public/css/frames.css +++ b/app/Resources/public/css/frames.css @@ -6,7 +6,7 @@ alex.aragon@beeznest.com Version: 1.0 */ -@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,300italic,400italic); +@import url(//fonts.googleapis.com/css?family=Open+Sans:400,300,600,300italic,400italic); body{ color: #666; font-family: 'Open Sans', sans-serif; diff --git a/main/admin/career_dashboard.php b/main/admin/career_dashboard.php index 7a4580fdfd..8579e9577c 100755 --- a/main/admin/career_dashboard.php +++ b/main/admin/career_dashboard.php @@ -70,7 +70,7 @@ $i = 0; $grid_js = ''; $career_array = array(); if (!empty($careers)) { - foreach($careers as $career_item) { + foreach ($careers as $career_item) { $promotion = new Promotion(); // Getting all promotions $promotions = $promotion->get_all_promotions_by_career_id( @@ -80,7 +80,7 @@ if (!empty($careers)) { $career_content = ''; $promotion_array = array(); if (!empty($promotions)) { - foreach($promotions as $promotion_item) { + foreach ($promotions as $promotion_item) { if (!$promotion_item['status']) { continue; //avoid status = 0 } @@ -91,7 +91,7 @@ if (!empty($careers)) { ); $session_list = array(); - foreach($sessions as $session_item) { + foreach ($sessions as $session_item) { $course_list = SessionManager::get_course_list_by_session_id( $session_item['id'] ); @@ -115,52 +115,60 @@ if (!empty($careers)) { echo ''; -foreach($career_array as $career_id => $data) { - $career = $data['name']; - $promotions = $data['promotions']; - $career = Display::url($career,'careers.php?action=edit&id='.$career_id); - $career = Display::tag('h4',$career); - echo ''; - foreach($promotions as $promotion_id => $promotion) { - $promotion_name = $promotion['name']; - $promotion_url = Display::url($promotion_name,'promotions.php?action=edit&id='.$promotion_id); - $sessions = $promotion['sessions']; - echo ''; - $count = count($sessions); - $rowspan = ''; - if (!empty($count)) { - $count++; - $rowspan = 'rowspan="'.$count.'"'; - } - echo ''; - echo ''; - - if (!empty($sessions)) - foreach ($sessions as $session) { - $course_list = $session['courses']; - - $url = Display::url($session['data']['name'], 'resume_session.php?id_session='.$session['data']['id']); - echo ''; - //Session name - echo Display::tag('td', $url); - echo ''; + if (!empty($promotions)) { + foreach ($promotions as $promotion_id => $promotion) { + $promotion_name = $promotion['name']; + $promotion_url = Display::url($promotion_name, 'promotions.php?action=edit&id=' . $promotion_id); + $sessions = $promotion['sessions']; + echo ''; + $count = count($sessions); + $rowspan = ''; + if (!empty($count)) { + $count++; + $rowspan = 'rowspan="' . $count . '"'; + } + echo ''; - echo ''; + echo ''; + + if (!empty($sessions)) { + foreach ($sessions as $session) { + $course_list = $session['courses']; + + $url = Display::url($session['data']['name'], + '../session/resume_session.php?id_session=' . $session['data']['id']); + echo ''; + //Session name + echo Display::tag('td', $url); + echo ''; + echo ''; + } + } + } + } } } } diff --git a/main/document/document.php b/main/document/document.php index 063732681f..bf390f411b 100755 --- a/main/document/document.php +++ b/main/document/document.php @@ -860,8 +860,8 @@ if (isset($_GET['createdir'])) { $js_path = api_get_path(WEB_LIBRARY_PATH).'javascript/'; -$htmlHeadXtra[] = ''; -$htmlHeadXtra[] = ''; +$htmlHeadXtra[] = ''; +$htmlHeadXtra[] = ''; $mediaplayer_path = api_get_path(WEB_LIBRARY_PATH).'mediaplayer/player.swf'; $documentAndFolders = DocumentManager::get_all_document_data( @@ -1745,7 +1745,9 @@ if (isset($documentAndFolders) && is_array($documentAndFolders)) { $path_info = pathinfo($document_data['path']); - if (isset($path_info['extension']) && in_array($path_info['extension'], array('ogg', 'mp3', 'wav'))) { + if (isset($path_info['extension']) && + in_array($path_info['extension'], array('ogg', 'mp3', 'wav')) + ) { $count++; } diff --git a/main/document/showinframes.php b/main/document/showinframes.php index 7f0036c179..dce3f188a8 100755 --- a/main/document/showinframes.php +++ b/main/document/showinframes.php @@ -254,8 +254,8 @@ $execute_iframe = true; if ($jplayer_supported) { $extension = api_strtolower($pathinfo['extension']); $js_path = api_get_path(WEB_LIBRARY_PATH).'javascript/'; - $htmlHeadXtra[] = ''; - $htmlHeadXtra[] = ''; + $htmlHeadXtra[] = ''; + $htmlHeadXtra[] = ''; $jquery = ' $("#jquery_jplayer_1").jPlayer({ ready: function() { @@ -265,8 +265,7 @@ if ($jplayer_supported) { }, errorAlerts: false, warningAlerts: false, - //swfPath: "../inc/lib/javascript/jquery-jplayer", - swfPath: "'.$js_path.'jquery-jplayer", + swfPath: "'.$js_path.'jquery-jplayer/jplayer/", //supplied: "m4a, oga, mp3, ogg, wav", supplied: "'.$extension.'", //wmode: "window", diff --git a/main/exercice/exercise.class.php b/main/exercice/exercise.class.php index f46274ef1d..4edd6f9876 100755 --- a/main/exercice/exercise.class.php +++ b/main/exercice/exercise.class.php @@ -3026,10 +3026,43 @@ class Exercise $totalScore += $answerWeighting; } } else { - $studentChoice = $choice[$answerAutoId]; - if ($studentChoice) { - $questionScore += $answerWeighting; - $totalScore += $answerWeighting; + if (!isset($choice[$answerAutoId])) { + $choice[$answerAutoId] = 0; + } else { + $studentChoice = $choice[$answerAutoId]; + + $choiceIsValid = false; + + if (!empty($studentChoice)) { + $hotspotType = $objAnswerTmp->selectHotspotType($answerId); + $hotspotCoordinates = $objAnswerTmp->selectHotspotCoordinates($answerId); + $choicePoint = Geometry::decodePoint($studentChoice); + + switch ($hotspotType) { + case 'square': + $hotspotProperties = Geometry::decodeSquare($hotspotCoordinates); + $choiceIsValid = Geometry::pointIsInSquare($hotspotProperties, $choicePoint); + break; + + case 'circle': + $hotspotProperties = Geometry::decodeEllipse($hotspotCoordinates); + $choiceIsValid = Geometry::pointIsInEllipse($hotspotProperties, $choicePoint); + break; + + case 'poly': + $hotspotProperties = Geometry::decodePolygon($hotspotCoordinates); + $choiceIsValid = Geometry::pointIsInPolygon($hotspotProperties, $choicePoint); + break; + } + } + + $choice[$answerAutoId] = 0; + + if ($choiceIsValid) { + $questionScore += $answerWeighting; + $totalScore += $answerWeighting; + $choice[$answerAutoId] = 1; + } } } break; @@ -4029,12 +4062,28 @@ class Exercise Event::saveQuestionAttempt($questionScore, $answer, $quesId, $exeId, 0, $this->id); // } elseif ($answerType == HOT_SPOT || $answerType == HOT_SPOT_DELINEATION) { } elseif ($answerType == HOT_SPOT) { - Event::saveQuestionAttempt($questionScore, $answer, $quesId, $exeId, 0, $this->id); + $answer = []; + if (isset($exerciseResultCoordinates[$questionId]) && !empty($exerciseResultCoordinates[$questionId])) { + Database::delete( + Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT), + [ + 'hotspot_exe_id = ? AND hotspot_question_id = ? AND c_id = ?' => [ + $exeId, + $questionId, + api_get_course_int_id() + ] + ] + ); + foreach ($exerciseResultCoordinates[$questionId] as $idx => $val) { + $answer[] = $val; + Event::saveExerciseAttemptHotspot($exeId, $quesId, $idx, $choice[$idx], $val, false, $this->id); } } + + Event::saveQuestionAttempt($questionScore, implode('|', $answer), $quesId, $exeId, 0, $this->id); } else { Event::saveQuestionAttempt($questionScore, $answer, $quesId, $exeId, 0,$this->id); } diff --git a/main/exercice/hotspot_actionscript.as.php b/main/exercice/hotspot_actionscript.as.php index 67b6d084ab..e60c415116 100755 --- a/main/exercice/hotspot_actionscript.as.php +++ b/main/exercice/hotspot_actionscript.as.php @@ -10,10 +10,12 @@ session_cache_limiter("none"); -include('../inc/global.inc.php'); +require '../inc/global.inc.php'; +require api_get_path(LIBRARY_PATH) . 'geometry.lib.php'; // set vars $questionId = intval($_GET['modifyAnswers']); +$exerciseId = isset($_GET['exe_id']) ? intval($_GET['exe_id']) : 0; $objQuestion = Question::read($questionId); $answer_type = $objQuestion->selectType(); //very important $TBL_ANSWERS = Database::get_course_table(TABLE_QUIZ_ANSWER); @@ -62,6 +64,7 @@ $data['image_width'] = $pictureWidth; $data['image_height'] = $pictureHeight; $data['courseCode'] = $_course['path']; $data['hotspots'] = []; +$data['answers'] = []; $nmbrTries = 0; @@ -108,6 +111,20 @@ while ($hotspot = Database::fetch_assoc($result)) $data['hotspots'][] = $hotSpot; } +$attemptList = Event::getAllExerciseEventByExeId($exerciseId); + +if (!empty($attemptList)) { + $questionAttempt = $attemptList[$questionId][0]; + + if (!empty($questionAttempt['answer'])) { + $coordinates = explode('|', $questionAttempt['answer']); + + foreach ($coordinates as $coordinate) { + $data['answers'][] = Geometry::decodePoint($coordinate); + } + } +} + $data['nmbrTries'] = $nmbrTries; $data['done'] = 'done'; diff --git a/main/forum/forumfunction.inc.php b/main/forum/forumfunction.inc.php index 3746fde582..fe958914af 100755 --- a/main/forum/forumfunction.inc.php +++ b/main/forum/forumfunction.inc.php @@ -2582,7 +2582,13 @@ function show_add_post_form($current_forum, $forum_setting, $action = '', $id = $form = new FormValidator( 'thread', 'post', - api_get_self().'?forum='.intval($my_forum).'&gradebook='.$my_gradebook.'&thread='.intval($myThread).'&post='.intval($my_post).'&action='.$action.'&'.api_get_cidreq() + api_get_self() . '?' . http_build_query([ + 'forum' => intval($my_forum), + 'gradebook' => $my_gradebook, + 'thread' => intval($myThread), + 'post' => intval($my_post), + 'action' => $action, + ]) . '&' . api_get_cidreq() ); $form->setConstants(array('forum' => '5')); diff --git a/main/forum/reply.php b/main/forum/reply.php index 28aee60c2e..6399358c53 100755 --- a/main/forum/reply.php +++ b/main/forum/reply.php @@ -177,8 +177,6 @@ if ($origin != 'learnpath') { echo ''. Display::return_icon('back.png', get_lang('BackToThread'), '', ICON_SIZE_MEDIUM).''; echo ''; -} else { - echo '
 
'; } /*New display forum div*/ echo '
'; @@ -199,11 +197,20 @@ $values = show_add_post_form( $my_post, $my_elements ); -if (!empty($values) AND isset($_POST['SubmitPost'])) { +if (!empty($values) && isset($_POST['SubmitPost'])) { $result = store_reply($current_forum, $values); //@todo split the show_add_post_form function - - $url = 'viewthread.php?forum='.$current_thread['forum_id'].'&gradebook='.$gradebook.'&thread='.intval($_GET['thread']).'&gidReq='.api_get_group_id().'&origin='.(isset($origin)?$origin:'').'&msg='.$result['msg'].'&type='.$result['type']; + $origin = isset($_GET['origin']) && $_GET['origin'] === 'learnpath' ? 'learnpath' : null; + + $url = 'viewthread.php?' . http_build_query([ + 'forum' => $current_thread['forum_id'], + 'gradebook' => $gradebook, + 'thread' => intval($_GET['thread']), + 'gidReq' => api_get_group_id(), + 'origin' => $origin, + 'msg' => $result['msg'], + 'type' => $result['type'] + ]); echo ' @@ -1083,7 +1090,7 @@ HTML; return $s; } } elseif ($answerType == HOT_SPOT || $answerType == HOT_SPOT_DELINEATION) { - global $exerciseId; + global $exerciseId, $exe_id; // Question is a HOT_SPOT //checking document/images visibility if (api_is_platform_admin() || api_is_course_admin()) { @@ -1192,6 +1199,7 @@ HOTSPOT; $(document).on('ready', function () { new " . ($answerType == HOT_SPOT_DELINEATION ? 'DelineationQuestion' : 'HotspotQuestion') . "({ questionId: $questionId, + exerciseId: $exe_id, selector: '#question_div_' + $questionId + ' .hotspot-image', for: 'user' }); diff --git a/main/inc/lib/geometry.lib.php b/main/inc/lib/geometry.lib.php index ab2c688378..87ec183cc9 100755 --- a/main/inc/lib/geometry.lib.php +++ b/main/inc/lib/geometry.lib.php @@ -333,3 +333,147 @@ function poly_get_max(&$coords1, &$coords2) { } return array('x'=>$mx,'y'=>$my); } + +/** + * Class Geometry + * Utils for decode hotspots and check if the user choices are correct + */ +class Geometry +{ + /** + * Decode a user choice as a point + * @param string $coordinates + * @return array The x and y properties for a point + */ + public static function decodePoint($coordinates) + { + $coordinates = explode(';', $coordinates); + + return [ + 'x' => intval($coordinates[0]), + 'y' => intval($coordinates[1]) + ]; + } + + /** + * Decode a square info as properties + * @param string $coordinates + * @return array The x, y, width, and height properties for a square + */ + public static function decodeSquare($coordinates) + { + $coordinates = explode('|', $coordinates); + $originString = explode(';', $coordinates[0]); + + return [ + 'x' => intval($originString[0]), + 'y' => intval($originString[1]), + 'width' => intval($coordinates[1]), + 'height' => intval($coordinates[2]) + ]; + } + + /** + * Decode an ellipse info as properties + * @param string $coordinates + * @return array The center_x, center_y, radius_x, radius_x properties for an ellipse + */ + public static function decodeEllipse($coordinates) + { + $coordinates = explode('|', $coordinates); + $originString = explode(';', $coordinates[0]); + + return [ + 'center_x' => intval($originString[0]), + 'center_y' => intval($originString[1]), + 'radius_x' => intval($coordinates[1]), + 'radius_y' => intval($coordinates[2]) + ]; + } + + /** + * Decode a polygon info as properties + * @param string $coordinates + * @return array The array of points for a polygon + */ + public static function decodePolygon($coordinates) + { + $coordinates = explode('|', $coordinates); + + $points = []; + + foreach ($coordinates as $coordinate) { + $point = explode(';', $coordinate); + + $points[] = [ + intval($point[0]), + intval($point[1]) + ]; + } + + return $points; + } + + /** + * Check if the point is inside of a square + * @param array $properties The hotspot properties + * @param array $point The point properties + * @return boolean + */ + public static function pointIsInSquare($properties, $point) + { + $left = $properties['x']; + $right = $properties['x'] + $properties['width']; + $top = $properties['y']; + $bottom = $properties['y'] + $properties['height']; + + $xIsValid = $point['x'] >= $left && $point['x'] <= $right; + $yIsValid = $point['y'] >= $top && $point['y'] <= $bottom; + + return $xIsValid && $yIsValid; + } + + /** + * Check if the point is inside of an ellipse + * @param array $properties The hotspot properties + * @param array $point The point properties + * @return boolean + */ + public static function pointIsInEllipse($properties, $point) + { + $dX = $point['x'] - $properties['center_x']; + $dY = $point['y'] - $properties['center_y']; + + $dividend = pow($dX, 2) / pow($properties['radius_x'], 2); + $divider = pow($dY, 2) / pow($properties['radius_y'], 2); + + return $dividend + $divider <= 1; + } + + /** + * Check if the point is inside of a polygon + * @param array $properties The hotspot properties + * @param array $point The point properties + * @return boolean + */ + public static function pointIsInPolygon($properties, $point) { + $points = $properties; + $isInside = false; + + for ($i = 0, $j = count($points) - 1; $i < count($points); $j = $i++) { + $xi = $points[$i][0]; + $yi = $points[$i][1]; + $xj = $points[$j][0]; + $yj = $points[$j][1]; + + $intersect = (($yi > $point['y']) !== ($yj > $point['y'])) && + ($point['x'] < ($xj - $xi) * ($point['y'] - $yi) / ($yj - $yi) + $xi); + + if ($intersect) { + $isInside = !$isInside; + } + } + + return $isInside; + } +} diff --git a/main/inc/lib/javascript/ckeditor/plugins/asciimath/plugin.js b/main/inc/lib/javascript/ckeditor/plugins/asciimath/plugin.js index 7e84c66950..0fb7c92ff4 100644 --- a/main/inc/lib/javascript/ckeditor/plugins/asciimath/plugin.js +++ b/main/inc/lib/javascript/ckeditor/plugins/asciimath/plugin.js @@ -11,7 +11,7 @@ ( function() { - var cdn = 'http:\/\/cdn.mathjax.org\/mathjax\/2.4-latest\/MathJax.js?config=TeX-MML-AM_HTMLorMML-full'; + var cdn = '\/\/cdn.mathjax.org\/mathjax\/2.4-latest\/MathJax.js?config=TeX-MML-AM_HTMLorMML-full'; CKEDITOR.plugins.add( 'asciimath', { lang: 'ar,ca,cs,cy,de,el,en,en-gb,eo,es,fa,fi,fr,gl,he,hr,hu,it,ja,km,nb,nl,no,pl,pt,pt-br,ro,ru,sk,sl,sv,tr,tt,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% diff --git a/main/inc/lib/javascript/hotspot/js/hotspot.js b/main/inc/lib/javascript/hotspot/js/hotspot.js index bce9e0bb38..4046c46992 100755 --- a/main/inc/lib/javascript/hotspot/js/hotspot.js +++ b/main/inc/lib/javascript/hotspot/js/hotspot.js @@ -20,9 +20,6 @@ window.HotspotQuestion = (function () { HotspotModel.prototype.onChange = function (callback) { this.changeEvent = callback; }; - HotspotModel.prototype.checkPoint = function (x, y) { - return false; - }; HotspotModel.decode = function () { return new this; }; @@ -56,17 +53,6 @@ window.HotspotQuestion = (function () { this.set('height', y - startY); } }; - SquareModel.prototype.checkPoint = function (x, y) { - var left = this.get('x'), - right = this.get('x') + this.get('width'), - top = this.get('y'), - bottom = this.get('y') + this.get('height'); - - var xIsValid = x >= left && x <= right, - yIsValid = y >= top && y <= bottom; - - return xIsValid && yIsValid; - }; SquareModel.decode = function (hotspotInfo) { var coords = hotspotInfo.coord.split('|'), position = coords[0].split(';'), @@ -127,15 +113,6 @@ window.HotspotQuestion = (function () { this.set('centerY', startY + this.get('radiusY')); } }; - EllipseModel.prototype.checkPoint = function (x, y) { - var dX = x - this.get('centerX'), - dY = y - this.get('centerY'); - - var dividend = Math.pow(dX, 2) / Math.pow(this.get('radiusX'), 2), - divider = Math.pow(dY, 2) / Math.pow(this.get('radiusY'), 2); - - return dividend + divider <= 1; - }; EllipseModel.decode = function (hotspotInfo) { var coords = hotspotInfo.coord.split('|'), center = coords[0].split(';'), @@ -176,25 +153,6 @@ window.HotspotQuestion = (function () { this.set('points', points); }; - PolygonModel.prototype.checkPoint = function (x, y) { - var points = this.get('points'), - isInside = false; - - for (var i = 0, j = points.length - 1; i < points.length; j = i++) { - var xi = points[i][0], - yi = points[i][1], - xj = points[j][0], - yj = points[j][1]; - - var intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); - - if (intersect) { - isInside = !isInside; - } - } - - return isInside; - }; PolygonModel.decode = function (hotspotInfo) { var pairedPoints = hotspotInfo.coord.split('|'), points = []; @@ -825,12 +783,12 @@ window.HotspotQuestion = (function () { lang = questionInfo.lang; }; - var UserHotspotsSVG = function (hotspotsCollection, image) { + var UserHotspotsSVG = function (hotspotsCollection, answersCollection, image) { var self = this; this.el = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); this.hotspotsCollection = hotspotsCollection; - this.answersCollection = new AnswersCollection(); + this.answersCollection = answersCollection; this.image = image; this.answersCollection.onAdd(function (answerModel) { @@ -874,11 +832,7 @@ window.HotspotQuestion = (function () { type: 'hidden', name: 'choice[' + config.questionId + '][' + hotspot.id + ']' }).val(function () { - if (hotspot.checkPoint(x, y)) { - return 1; - } - - return 0; + return [x, y].join(';'); }).appendTo(this.el.parentNode); }; UserHotspotsSVG.prototype.setEvents = function () { @@ -968,11 +922,7 @@ window.HotspotQuestion = (function () { return [point.x, point.y].join(';'); }); $('[name="choice[' + config.questionId + '][' + hotspot.id + ']"]').val(function () { - if (hotspot.checkPoint(point.x, point.y)) { - return 1; - } - - return 0; + return [point.x, point.y].join(';'); }); isMoving = false; @@ -983,7 +933,8 @@ window.HotspotQuestion = (function () { var image = new Image(); image.onload = function () { var hotspotsCollection = new HotspotsCollection(), - hotspotsSVG = new UserHotspotsSVG(hotspotsCollection, this); + answersCollection = new AnswersCollection(), + hotspotsSVG = new UserHotspotsSVG(hotspotsCollection, answersCollection, this); $(config.selector).css('width', this.width).append(hotspotsSVG.render().el); @@ -1017,6 +968,15 @@ window.HotspotQuestion = (function () { hotspotsCollection.add(hotspot); }); + $.each(questionInfo.answers, function (index, answerInfo) { + var answerModel = new AnswerModel({ + x: answerInfo.x, + y: answerInfo.y + }); + + answersCollection.add(answerModel); + }); + $(config.selector).parent().find('#hotspot-messages-' + config.questionId + ' span:not(.fa)') .text( lang.NextAnswer + ' ' + hotspotsCollection.get(0).name @@ -1166,7 +1126,8 @@ window.HotspotQuestion = (function () { case 'user': xhrQuestion = $.getJSON('/main/exercice/hotspot_actionscript.as.php', { - modifyAnswers: parseInt(config.questionId) + modifyAnswers: parseInt(config.questionId), + exe_id: parseInt(config.exerciseId) }); break; diff --git a/main/inc/lib/javascript/jquery-jplayer/Jplayer.swf b/main/inc/lib/javascript/jquery-jplayer/Jplayer.swf deleted file mode 100755 index 4d50c86ae1..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/Jplayer.swf and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/jquery.jplayer.inspector.js b/main/inc/lib/javascript/jquery-jplayer/jquery.jplayer.inspector.js deleted file mode 100755 index 46c090a1b0..0000000000 --- a/main/inc/lib/javascript/jquery-jplayer/jquery.jplayer.inspector.js +++ /dev/null @@ -1,331 +0,0 @@ -/* - * jPlayerInspector Plugin for jPlayer (2.0.0+) Plugin for jQuery JavaScript Library - * http://www.happyworm.com/jquery/jplayer - * - * Copyright (c) 2009 - 2011 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Mark J Panaghiston - * Version: 1.0.3 - * Date: 7th August 2011 - * - * For use with jPlayer Version: 2.0.29 - * - * Note: Declare inspector instances after jPlayer instances. ie., Otherwise the jPlayer instance is nonsense. - */ - -(function($, undefined) { - $.jPlayerInspector = {}; - $.jPlayerInspector.i = 0; - $.jPlayerInspector.defaults = { - jPlayer: undefined, // The jQuery selector of the jPlayer instance to inspect. - idPrefix: "jplayer_inspector_", - visible: false - }; - - var methods = { - init: function(options) { - var self = this; - var $this = $(this); - - var config = $.extend({}, $.jPlayerInspector.defaults, options); - $(this).data("jPlayerInspector", config); - - config.id = $(this).attr("id"); - config.jPlayerId = config.jPlayer.attr("id"); - - config.windowId = config.idPrefix + "window_" + $.jPlayerInspector.i; - config.statusId = config.idPrefix + "status_" + $.jPlayerInspector.i; - config.configId = config.idPrefix + "config_" + $.jPlayerInspector.i; - config.toggleId = config.idPrefix + "toggle_" + $.jPlayerInspector.i; - config.eventResetId = config.idPrefix + "event_reset_" + $.jPlayerInspector.i; - config.updateId = config.idPrefix + "update_" + $.jPlayerInspector.i; - config.eventWindowId = config.idPrefix + "event_window_" + $.jPlayerInspector.i; - - config.eventId = {}; - config.eventJq = {}; - config.eventTimeout = {}; - config.eventOccurrence = {}; - - $.each($.jPlayer.event, function(eventName,eventType) { - config.eventId[eventType] = config.idPrefix + "event_" + eventName + "_" + $.jPlayerInspector.i; - config.eventOccurrence[eventType] = 0; - }); - - var structure = - '

' + (config.visible ? "Hide" : "Show") + ' jPlayer Inspector

' - + '
' - + '
' - + '
' - + '

jPlayer events that have occurred over the past 1 second:' - + '
(Backgrounds: Never occurred Occurred before Occurred Multiple occurrences reset)

'; - - // MJP: Would use the next 3 lines for ease, but the events are just slapped on the page. - // $.each($.jPlayer.event, function(eventName,eventType) { - // structure += '
' + eventName + '
'; - // }); - - var eventStyle = "float:left;margin:0 5px 5px 0;padding:0 5px;border:1px dotted #000;"; - // MJP: Doing it longhand so order and layout easier to control. - structure += - '
' - + '
' - + '
' - + '
' - + '
' - + '
' - + '
' - - + '
' - + '
' - + '
' - + '
' - - + '
' - + '
' - + '
' - + '
' - + '
' - + '
' - + '
' - - + '
' - + '
' - + '
' - + '
' - - + '
' - + '
' - + '
' - + '
' - + '
' - + '
' - - + '
'; - - // MJP: Would like a check here in case we missed an event. - - // MJP: Check fails, since it is not on the page yet. -/* $.each($.jPlayer.event, function(eventName,eventType) { - if($("#" + config.eventId[eventType])[0] === undefined) { - structure += '
' + eventName + '
'; - } - }); -*/ - structure += - '
' - + '

Update jPlayer Inspector

' - + '
' - + '
'; - $(this).html(structure); - - config.windowJq = $("#" + config.windowId); - config.statusJq = $("#" + config.statusId); - config.configJq = $("#" + config.configId); - config.toggleJq = $("#" + config.toggleId); - config.eventResetJq = $("#" + config.eventResetId); - config.updateJq = $("#" + config.updateId); - - $.each($.jPlayer.event, function(eventName,eventType) { - config.eventJq[eventType] = $("#" + config.eventId[eventType]); - config.eventJq[eventType].text(eventName + " (" + config.eventOccurrence[eventType] + ")"); // Sets the text to the event name and (0); - - config.jPlayer.bind(eventType + ".jPlayerInspector", function(e) { - config.eventOccurrence[e.type]++; - if(config.eventOccurrence[e.type] > 1) { - config.eventJq[e.type].css("background-color","#ff9"); - } else { - config.eventJq[e.type].css("background-color","#9f9"); - } - config.eventJq[e.type].text(eventName + " (" + config.eventOccurrence[e.type] + ")"); - // The timer to handle the color - clearTimeout(config.eventTimeout[e.type]); - config.eventTimeout[e.type] = setTimeout(function() { - config.eventJq[e.type].css("background-color","#fff"); - }, 1000); - // The timer to handle the occurences. - setTimeout(function() { - config.eventOccurrence[e.type]--; - config.eventJq[e.type].text(eventName + " (" + config.eventOccurrence[e.type] + ")"); - }, 1000); - if(config.visible) { // Update the status, if inspector open. - $this.jPlayerInspector("updateStatus"); - } - }); - }); - - config.jPlayer.bind($.jPlayer.event.ready + ".jPlayerInspector", function(e) { - $this.jPlayerInspector("updateConfig"); - }); - - config.toggleJq.click(function() { - if(config.visible) { - $(this).text("Show"); - config.windowJq.hide(); - config.statusJq.empty(); - config.configJq.empty(); - } else { - $(this).text("Hide"); - config.windowJq.show(); - config.updateJq.click(); - } - config.visible = !config.visible; - $(this).blur(); - return false; - }); - - config.eventResetJq.click(function() { - $.each($.jPlayer.event, function(eventName,eventType) { - config.eventJq[eventType].css("background-color","#eee"); - }); - $(this).blur(); - return false; - }); - - config.updateJq.click(function() { - $this.jPlayerInspector("updateStatus"); - $this.jPlayerInspector("updateConfig"); - return false; - }); - - if(!config.visible) { - config.windowJq.hide(); - } else { - // config.updateJq.click(); - } - - $.jPlayerInspector.i++; - - return this; - }, - destroy: function() { - $(this).data("jPlayerInspector") && $(this).data("jPlayerInspector").jPlayer.unbind(".jPlayerInspector"); - $(this).empty(); - }, - updateConfig: function() { // This displays information about jPlayer's configuration in inspector - - var jPlayerInfo = "

This jPlayer instance is running in your browser where:
" - - for(i = 0; i < $(this).data("jPlayerInspector").jPlayer.data("jPlayer").solutions.length; i++) { - var solution = $(this).data("jPlayerInspector").jPlayer.data("jPlayer").solutions[i]; - jPlayerInfo += " jPlayer's " + solution + " solution is"; - if($(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].used) { - jPlayerInfo += " being used and will support:"; - for(format in $(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].support) { - if($(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].support[format]) { - jPlayerInfo += " " + format; - } - } - jPlayerInfo += "
"; - } else { - jPlayerInfo += " not required
"; - } - } - jPlayerInfo += "

"; - - if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.active) { - if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").flash.active) { - jPlayerInfo += "Problem with jPlayer since both HTML5 and Flash are active."; - } else { - jPlayerInfo += "The HTML5 is active."; - } - } else { - if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").flash.active) { - jPlayerInfo += "The Flash is active."; - } else { - jPlayerInfo += "No solution is currently active. jPlayer needs a setMedia()."; - } - } - jPlayerInfo += "

"; - - var formatType = $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.formatType; - jPlayerInfo += "

status.formatType = '" + formatType + "'
"; - if(formatType) { - jPlayerInfo += "Browser canPlay('" + $.jPlayer.prototype.format[formatType].codec + "')"; - } else { - jPlayerInfo += "

"; - } - - jPlayerInfo += "

status.src = '" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.src + "'

"; - - jPlayerInfo += "

status.media = {
"; - for(prop in $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.media) { - jPlayerInfo += " " + prop + ": " + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.media[prop] + "
"; // Some are strings - } - jPlayerInfo += "};

" - - + "

Raw browser test for HTML5 support. Should equal a function if HTML5 is available.
"; - if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.audio.available) { - jPlayerInfo += "htmlElement.audio.canPlayType = " + (typeof $(this).data("jPlayerInspector").jPlayer.data("jPlayer").htmlElement.audio.canPlayType) +"
" - } - if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.video.available) { - jPlayerInfo += "htmlElement.video.canPlayType = " + (typeof $(this).data("jPlayerInspector").jPlayer.data("jPlayer").htmlElement.video.canPlayType) +""; - } - jPlayerInfo += "

"; - - jPlayerInfo += "

This instance is using the constructor options:
" - + "$('#" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").internal.self.id + "').jPlayer({
" - - + " swfPath: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "swfPath") + "',
" - - + " solution: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "solution") + "',
" - - + " supplied: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "supplied") + "',
" - - + " preload: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "preload") + "',
" - - + " volume: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "volume") + ",
" - - + " muted: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "muted") + ",
" - - + " backgroundColor: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "backgroundColor") + "',
" - - + " cssSelectorAncestor: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "cssSelectorAncestor") + "',
" - - + " cssSelector: {"; - - var cssSelector = $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "cssSelector"); - for(prop in cssSelector) { - - // jPlayerInfo += "
  " + prop + ": '" + cssSelector[prop] + "'," // This works too of course, but want to use option method for deep keys. - jPlayerInfo += "
  " + prop + ": '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "cssSelector." + prop) + "'," - } - - jPlayerInfo = jPlayerInfo.slice(0, -1); // Because the sloppy comma was bugging me. - - jPlayerInfo += "
 },
" - - + " errorAlerts: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "errorAlerts") + ",
" - - + " warningAlerts: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "warningAlerts") + "
" - - + "});

"; - $(this).data("jPlayerInspector").configJq.html(jPlayerInfo); - return this; - }, - updateStatus: function() { // This displays information about jPlayer's status in the inspector - $(this).data("jPlayerInspector").statusJq.html( - "

jPlayer is " + - ($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.paused ? "paused" : "playing") + - " at time: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentTime*10)/10 + "s." + - " (d: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.duration*10)/10 + "s" + - ", sp: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.seekPercent) + "%" + - ", cpr: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentPercentRelative) + "%" + - ", cpa: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentPercentAbsolute) + "%)

" - ); - return this; - } - }; - $.fn.jPlayerInspector = function( method ) { - // Method calling logic - if ( methods[method] ) { - return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof method === 'object' || ! method ) { - return methods.init.apply( this, arguments ); - } else { - $.error( 'Method ' + method + ' does not exist on jQuery.jPlayerInspector' ); - } - }; -})(jQuery); diff --git a/main/inc/lib/javascript/jquery-jplayer/jquery.jplayer.min.js b/main/inc/lib/javascript/jquery-jplayer/jquery.jplayer.min.js deleted file mode 100755 index bcf7901a0b..0000000000 --- a/main/inc/lib/javascript/jquery-jplayer/jquery.jplayer.min.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - * jPlayer Plugin for jQuery JavaScript Library - * http://www.jplayer.org - * - * Copyright (c) 2009 - 2011 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Mark J Panaghiston - * Version: 2.1.0 - * Date: 1st September 2011 - */ - -(function(b,f){b.fn.jPlayer=function(a){var c=typeof a==="string",d=Array.prototype.slice.call(arguments,1),e=this,a=!c&&d.length?b.extend.apply(null,[!0,a].concat(d)):a;if(c&&a.charAt(0)==="_")return e;c?this.each(function(){var c=b.data(this,"jPlayer"),h=c&&b.isFunction(c[a])?c[a].apply(c,d):c;if(h!==c&&h!==f)return e=h,!1}):this.each(function(){var c=b.data(this,"jPlayer");c?c.option(a||{}):b.data(this,"jPlayer",new b.jPlayer(a,this))});return e};b.jPlayer=function(a,c){if(arguments.length){this.element= -b(c);this.options=b.extend(!0,{},this.options,a);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()});this._init()}};b.jPlayer.emulateMethods="load play pause";b.jPlayer.emulateStatus="src readyState networkState currentTime duration paused ended playbackRate";b.jPlayer.emulateOptions="muted volume";b.jPlayer.reservedEvent="ready flashreset resize repeat error warning";b.jPlayer.event={ready:"jPlayer_ready",flashreset:"jPlayer_flashreset",resize:"jPlayer_resize",repeat:"jPlayer_repeat", -click:"jPlayer_click",error:"jPlayer_error",warning:"jPlayer_warning",loadstart:"jPlayer_loadstart",progress:"jPlayer_progress",suspend:"jPlayer_suspend",abort:"jPlayer_abort",emptied:"jPlayer_emptied",stalled:"jPlayer_stalled",play:"jPlayer_play",pause:"jPlayer_pause",loadedmetadata:"jPlayer_loadedmetadata",loadeddata:"jPlayer_loadeddata",waiting:"jPlayer_waiting",playing:"jPlayer_playing",canplay:"jPlayer_canplay",canplaythrough:"jPlayer_canplaythrough",seeking:"jPlayer_seeking",seeked:"jPlayer_seeked", -timeupdate:"jPlayer_timeupdate",ended:"jPlayer_ended",ratechange:"jPlayer_ratechange",durationchange:"jPlayer_durationchange",volumechange:"jPlayer_volumechange"};b.jPlayer.htmlEvent="loadstart,abort,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,ratechange".split(",");b.jPlayer.pause=function(){b.each(b.jPlayer.prototype.instances,function(a,b){b.data("jPlayer").status.srcSet&&b.jPlayer("pause")})};b.jPlayer.timeFormat={showHour:!1,showMin:!0,showSec:!0,padHour:!1,padMin:!0,padSec:!0, -sepHour:":",sepMin:":",sepSec:""};b.jPlayer.convertTime=function(a){var c=new Date(a*1E3),d=c.getUTCHours(),a=c.getUTCMinutes(),c=c.getUTCSeconds(),d=b.jPlayer.timeFormat.padHour&&d<10?"0"+d:d,a=b.jPlayer.timeFormat.padMin&&a<10?"0"+a:a,c=b.jPlayer.timeFormat.padSec&&c<10?"0"+c:c;return(b.jPlayer.timeFormat.showHour?d+b.jPlayer.timeFormat.sepHour:"")+(b.jPlayer.timeFormat.showMin?a+b.jPlayer.timeFormat.sepMin:"")+(b.jPlayer.timeFormat.showSec?c+b.jPlayer.timeFormat.sepSec:"")};b.jPlayer.uaBrowser= -function(a){var a=a.toLowerCase(),b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,e=/(mozilla)(?:.*? rv:([\w.]+))?/,a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||a.indexOf("compatible")<0&&e.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};b.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),d=/(android)/,e=/(mobile)/,a=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/.exec(b)||[],b=/(ipad|playbook)/.exec(b)||!e.exec(b)&&d.exec(b)||[];a[1]&&(a[1]=a[1].replace(/\s/g, -"_"));return{platform:a[1]||"",tablet:b[1]||""}};b.jPlayer.browser={};b.jPlayer.platform={};var i=b.jPlayer.uaBrowser(navigator.userAgent);if(i.browser)b.jPlayer.browser[i.browser]=!0,b.jPlayer.browser.version=i.version;i=b.jPlayer.uaPlatform(navigator.userAgent);if(i.platform)b.jPlayer.platform[i.platform]=!0,b.jPlayer.platform.mobile=!i.tablet,b.jPlayer.platform.tablet=!!i.tablet;b.jPlayer.prototype={count:0,version:{script:"2.1.0",needFlash:"2.1.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash", -supplied:"mp3",preload:"metadata",volume:0.8,muted:!1,wmode:"opaque",backgroundColor:"#000000",cssSelectorAncestor:"#jp_container_1",cssSelector:{videoPlay:".jp-video-play",play:".jp-play",pause:".jp-pause",stop:".jp-stop",seekBar:".jp-seek-bar",playBar:".jp-play-bar",mute:".jp-mute",unmute:".jp-unmute",volumeBar:".jp-volume-bar",volumeBarValue:".jp-volume-bar-value",volumeMax:".jp-volume-max",currentTime:".jp-current-time",duration:".jp-duration",fullScreen:".jp-full-screen",restoreScreen:".jp-restore-screen", -repeat:".jp-repeat",repeatOff:".jp-repeat-off",gui:".jp-gui",noSolution:".jp-no-solution"},fullScreen:!1,autohide:{restored:!1,full:!0,fadeIn:200,fadeOut:600,hold:1E3},loop:!1,repeat:function(a){a.jPlayer.options.loop?b(this).unbind(".jPlayerRepeat").bind(b.jPlayer.event.ended+".jPlayer.jPlayerRepeat",function(){b(this).jPlayer("play")}):b(this).unbind(".jPlayerRepeat")},nativeVideoControls:{},noFullScreen:{msie:/msie [0-6]/,ipad:/ipad.*?os [0-4]/,iphone:/iphone/,ipod:/ipod/,android_pad:/android [0-3](?!.*?mobile)/, -android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,webos:/webos/},noVolume:{ipad:/ipad/,iphone:/iphone/,ipod:/ipod/,android_pad:/android(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,webos:/webos/,playbook:/playbook/},verticalVolume:!1,idPrefix:"jp",noConflict:"jQuery",emulateHtml:!1,errorAlerts:!1,warningAlerts:!1},optionsAudio:{size:{width:"0px",height:"0px",cssClass:""},sizeFull:{width:"0px",height:"0px",cssClass:""}}, -optionsVideo:{size:{width:"480px",height:"270px",cssClass:"jp-video-270p"},sizeFull:{width:"100%",height:"100%",cssClass:"jp-video-full"}},instances:{},status:{src:"",media:{},paused:!0,format:{},formatType:"",waitForPlay:!0,waitForLoad:!0,srcSet:!1,video:!1,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0,readyState:0,networkState:0,playbackRate:1,ended:0},internal:{ready:!1},solution:{html:!0,flash:!0},format:{mp3:{codec:'audio/mpeg; codecs="mp3"',flashCanPlay:!0, -media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:!0,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis"',flashCanPlay:!1,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:!1,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:!1,media:"audio"},fla:{codec:"audio/x-flv",flashCanPlay:!0,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!0,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"',flashCanPlay:!1, -media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:!1,media:"video"},flv:{codec:"video/x-flv",flashCanPlay:!0,media:"video"}},_init:function(){var a=this;this.element.empty();this.status=b.extend({},this.status);this.internal=b.extend({},this.internal);this.internal.domNode=this.element.get(0);this.formats=[];this.solutions=[];this.require={};this.htmlElement={};this.html={};this.html.audio={};this.html.video={};this.flash={};this.css={};this.css.cs={};this.css.jq={};this.ancestorJq= -[];this.options.volume=this._limitValue(this.options.volume,0,1);b.each(this.options.supplied.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.format[e]){var f=!1;b.each(a.formats,function(a,b){if(e===b)return f=!0,!1});f||a.formats.push(e)}});b.each(this.options.solution.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.solution[e]){var f=!1;b.each(a.solutions,function(a,b){if(e===b)return f=!0,!1});f||a.solutions.push(e)}});this.internal.instance= -"jp_"+this.count;this.instances[this.internal.instance]=this.element;this.element.attr("id")||this.element.attr("id",this.options.idPrefix+"_jplayer_"+this.count);this.internal.self=b.extend({},{id:this.element.attr("id"),jq:this.element});this.internal.audio=b.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:f});this.internal.video=b.extend({},{id:this.options.idPrefix+"_video_"+this.count,jq:f});this.internal.flash=b.extend({},{id:this.options.idPrefix+"_flash_"+this.count,jq:f,swf:this.options.swfPath+ -(this.options.swfPath.toLowerCase().slice(-4)!==".swf"?(this.options.swfPath&&this.options.swfPath.slice(-1)!=="/"?"/":"")+"Jplayer.swf":"")});this.internal.poster=b.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:f});b.each(b.jPlayer.event,function(b,c){a.options[b]!==f&&(a.element.bind(c+".jPlayer",a.options[b]),a.options[b]=f)});this.require.audio=!1;this.require.video=!1;b.each(this.formats,function(b,c){a.require[a.format[c].media]=!0});this.options=this.require.video?b.extend(!0, -{},this.optionsVideo,this.options):b.extend(!0,{},this.optionsAudio,this.options);this._setSize();this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullScreen=this._uaBlocklist(this.options.noFullScreen);this.status.noVolume=this._uaBlocklist(this.options.noVolume);this._restrictNativeVideoControls();this.htmlElement.poster=document.createElement("img");this.htmlElement.poster.id=this.internal.poster.id;this.htmlElement.poster.onload=function(){(!a.status.video|| -a.status.waitForPlay)&&a.internal.poster.jq.show()};this.element.append(this.htmlElement.poster);this.internal.poster.jq=b("#"+this.internal.poster.id);this.internal.poster.jq.css({width:this.status.width,height:this.status.height});this.internal.poster.jq.hide();this.internal.poster.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)});this.html.audio.available=!1;if(this.require.audio)this.htmlElement.audio=document.createElement("audio"),this.htmlElement.audio.id=this.internal.audio.id, -this.html.audio.available=!!this.htmlElement.audio.canPlayType&&this._testCanPlayType(this.htmlElement.audio);this.html.video.available=!1;if(this.require.video)this.htmlElement.video=document.createElement("video"),this.htmlElement.video.id=this.internal.video.id,this.html.video.available=!!this.htmlElement.video.canPlayType&&this._testCanPlayType(this.htmlElement.video);this.flash.available=this._checkForFlash(10);this.html.canPlay={};this.flash.canPlay={};b.each(this.formats,function(b,c){a.html.canPlay[c]= -a.html[a.format[c].media].available&&""!==a.htmlElement[a.format[c].media].canPlayType(a.format[c].codec);a.flash.canPlay[c]=a.format[c].flashCanPlay&&a.flash.available});this.html.desired=!1;this.flash.desired=!1;b.each(this.solutions,function(c,d){if(c===0)a[d].desired=!0;else{var e=!1,f=!1;b.each(a.formats,function(b,c){a[a.solutions[0]].canPlay[c]&&(a.format[c].media==="video"?f=!0:e=!0)});a[d].desired=a.require.audio&&!e||a.require.video&&!f}});this.html.support={};this.flash.support={};b.each(this.formats, -function(b,c){a.html.support[c]=a.html.canPlay[c]&&a.html.desired;a.flash.support[c]=a.flash.canPlay[c]&&a.flash.desired});this.html.used=!1;this.flash.used=!1;b.each(this.solutions,function(c,d){b.each(a.formats,function(b,c){if(a[d].support[c])return a[d].used=!0,!1})});this._resetActive();this._resetGate();this._cssSelectorAncestor(this.options.cssSelectorAncestor);!this.html.used&&!this.flash.used?(this._error({type:b.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+ -this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SOLUTION,hint:b.jPlayer.errorHint.NO_SOLUTION}),this.css.jq.noSolution.length&&this.css.jq.noSolution.show()):this.css.jq.noSolution.length&&this.css.jq.noSolution.hide();if(this.flash.used){var c,d="jQuery="+encodeURI(this.options.noConflict)+"&id="+encodeURI(this.internal.self.id)+"&vol="+this.options.volume+"&muted="+this.options.muted;if(b.browser.msie&&Number(b.browser.version)<=8){d=['','','','',''];c=document.createElement('');for(var e=0;e0?100*d/this.status.duration:0;typeof a.seekable==="object"&&a.seekable.length>0?(g=this.status.duration>0?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100,f=100*a.currentTime/a.seekable.end(a.seekable.length-1)):(g=100,f=e);b&&(e=f=d=0);this.status.seekPercent=g;this.status.currentPercentRelative=f;this.status.currentPercentAbsolute=e;this.status.currentTime=d;this.status.readyState=a.readyState;this.status.networkState=a.networkState;this.status.playbackRate= -a.playbackRate;this.status.ended=a.ended},_resetStatus:function(){this.status=b.extend({},this.status,b.jPlayer.prototype.status)},_trigger:function(a,c,d){a=b.Event(a);a.jPlayer={};a.jPlayer.version=b.extend({},this.version);a.jPlayer.options=b.extend(!0,{},this.options);a.jPlayer.status=b.extend(!0,{},this.status);a.jPlayer.html=b.extend(!0,{},this.html);a.jPlayer.flash=b.extend(!0,{},this.flash);if(c)a.jPlayer.error=b.extend({},c);if(d)a.jPlayer.warning=b.extend({},d);this.element.trigger(a)}, -jPlayerFlashEvent:function(a,c){if(a===b.jPlayer.event.ready)if(this.internal.ready){if(this.flash.gate){if(this.status.srcSet){var d=this.status.currentTime,e=this.status.paused;this.setMedia(this.status.media);d>0&&(e?this.pause(d):this.play(d))}this._trigger(b.jPlayer.event.flashreset)}}else this.internal.ready=!0,this.internal.flash.jq.css({width:"0px",height:"0px"}),this.version.flash=c.version,this.version.needFlash!==this.version.flash&&this._error({type:b.jPlayer.error.VERSION,context:this.version.flash, -message:b.jPlayer.errorMsg.VERSION+this.version.flash,hint:b.jPlayer.errorHint.VERSION}),this._trigger(b.jPlayer.event.repeat),this._trigger(a);if(this.flash.gate)switch(a){case b.jPlayer.event.progress:this._getFlashStatus(c);this._updateInterface();this._trigger(a);break;case b.jPlayer.event.timeupdate:this._getFlashStatus(c);this._updateInterface();this._trigger(a);break;case b.jPlayer.event.play:this._seeked();this._updateButtons(!0);this._trigger(a);break;case b.jPlayer.event.pause:this._updateButtons(!1); -this._trigger(a);break;case b.jPlayer.event.ended:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.click:this._trigger(a);break;case b.jPlayer.event.error:this.status.waitForLoad=!0;this.status.waitForPlay=!0;this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"});this._validString(this.status.media.poster)&&this.internal.poster.jq.show();this.css.jq.videoPlay.length&&this.status.video&&this.css.jq.videoPlay.show();this.status.video?this._flash_setVideo(this.status.media): -this._flash_setAudio(this.status.media);this._updateButtons(!1);this._error({type:b.jPlayer.error.URL,context:c.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL});break;case b.jPlayer.event.seeking:this._seeking();this._trigger(a);break;case b.jPlayer.event.seeked:this._seeked();this._trigger(a);break;case b.jPlayer.event.ready:break;default:this._trigger(a)}return!1},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent;this.status.currentPercentRelative=a.currentPercentRelative; -this.status.currentPercentAbsolute=a.currentPercentAbsolute;this.status.currentTime=a.currentTime;this.status.duration=a.duration;this.status.readyState=4;this.status.networkState=0;this.status.playbackRate=1;this.status.ended=!1},_updateButtons:function(a){if(a!==f)this.status.paused=!a,this.css.jq.play.length&&this.css.jq.pause.length&&(a?(this.css.jq.play.hide(),this.css.jq.pause.show()):(this.css.jq.play.show(),this.css.jq.pause.hide()));this.css.jq.restoreScreen.length&&this.css.jq.fullScreen.length&& -(this.status.noFullScreen?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.hide()):this.options.fullScreen?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.show()):(this.css.jq.fullScreen.show(),this.css.jq.restoreScreen.hide()));this.css.jq.repeat.length&&this.css.jq.repeatOff.length&&(this.options.loop?(this.css.jq.repeat.hide(),this.css.jq.repeatOff.show()):(this.css.jq.repeat.show(),this.css.jq.repeatOff.hide()))},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+ -"%");this.css.jq.playBar.length&&this.css.jq.playBar.width(this.status.currentPercentRelative+"%");this.css.jq.currentTime.length&&this.css.jq.currentTime.text(b.jPlayer.convertTime(this.status.currentTime));this.css.jq.duration.length&&this.css.jq.duration.text(b.jPlayer.convertTime(this.status.duration))},_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg")}, -_resetGate:function(){this.html.audio.gate=!1;this.html.video.gate=!1;this.flash.gate=!1},_resetActive:function(){this.html.active=!1;this.flash.active=!1},setMedia:function(a){var c=this,d=!1,e=this.status.media.poster!==a.poster;this._resetMedia();this._resetGate();this._resetActive();b.each(this.formats,function(e,f){var i=c.format[f].media==="video";b.each(c.solutions,function(b,e){if(c[e].support[f]&&c._validString(a[f])){var g=e==="html";i?(g?(c.html.video.gate=!0,c._html_setVideo(a),c.html.active= -!0):(c.flash.gate=!0,c._flash_setVideo(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.show(),c.status.video=!0):(g?(c.html.audio.gate=!0,c._html_setAudio(a),c.html.active=!0):(c.flash.gate=!0,c._flash_setAudio(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.hide(),c.status.video=!1);d=!0;return!1}});if(d)return!1});if(d){if((!this.status.nativeVideoControls||!this.html.video.gate)&&this._validString(a.poster))e?this.htmlElement.poster.src=a.poster:this.internal.poster.jq.show(); -this.status.srcSet=!0;this.status.media=b.extend({},a);this._updateButtons(!1);this._updateInterface()}else this._error({type:b.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SUPPORT,hint:b.jPlayer.errorHint.NO_SUPPORT})},_resetMedia:function(){this._resetStatus();this._updateButtons(!1);this._updateInterface();this._seeked();this.internal.poster.jq.hide();clearTimeout(this.internal.htmlDlyCmdId);this.html.active?this._html_resetMedia():this.flash.active&& -this._flash_resetMedia()},clearMedia:function(){this._resetMedia();this.html.active?this._html_clearMedia():this.flash.active&&this._flash_clearMedia();this._resetGate();this._resetActive()},load:function(){this.status.srcSet?this.html.active?this._html_load():this.flash.active&&this._flash_load():this._urlNotSetError("load")},play:function(a){a=typeof a==="number"?a:NaN;this.status.srcSet?this.html.active?this._html_play(a):this.flash.active&&this._flash_play(a):this._urlNotSetError("play")},videoPlay:function(){this.play()}, -pause:function(a){a=typeof a==="number"?a:NaN;this.status.srcSet?this.html.active?this._html_pause(a):this.flash.active&&this._flash_pause(a):this._urlNotSetError("pause")},pauseOthers:function(){var a=this;b.each(this.instances,function(b,d){a.element!==d&&d.data("jPlayer").status.srcSet&&d.jPlayer("pause")})},stop:function(){this.status.srcSet?this.html.active?this._html_pause(0):this.flash.active&&this._flash_pause(0):this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100); -this.status.srcSet?this.html.active?this._html_playHead(a):this.flash.active&&this._flash_playHead(a):this._urlNotSetError("playHead")},_muted:function(a){this.options.muted=a;this.html.used&&this._html_mute(a);this.flash.used&&this._flash_mute(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateMute(a),this._updateVolume(this.options.volume),this._trigger(b.jPlayer.event.volumechange))},mute:function(a){a=a===f?!0:!!a;this._muted(a)},unmute:function(a){a=a===f?!0:!!a;this._muted(!a)},_updateMute:function(a){if(a=== -f)a=this.options.muted;this.css.jq.mute.length&&this.css.jq.unmute.length&&(this.status.noVolume?(this.css.jq.mute.hide(),this.css.jq.unmute.hide()):a?(this.css.jq.mute.hide(),this.css.jq.unmute.show()):(this.css.jq.mute.show(),this.css.jq.unmute.hide()))},volume:function(a){a=this._limitValue(a,0,1);this.options.volume=a;this.html.used&&this._html_volume(a);this.flash.used&&this._flash_volume(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateVolume(a),this._trigger(b.jPlayer.event.volumechange))}, -volumeBar:function(a){if(this.css.jq.volumeBar.length){var b=this.css.jq.volumeBar.offset(),d=a.pageX-b.left,e=this.css.jq.volumeBar.width(),a=this.css.jq.volumeBar.height()-a.pageY+b.top,b=this.css.jq.volumeBar.height();this.options.verticalVolume?this.volume(a/b):this.volume(d/e)}this.options.muted&&this._muted(!1)},volumeBarValue:function(a){this.volumeBar(a)},_updateVolume:function(a){if(a===f)a=this.options.volume;a=this.options.muted?0:a;this.status.noVolume?(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.hide(), -this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.hide(),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.hide()):(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.show(),this.css.jq.volumeBarValue.length&&(this.css.jq.volumeBarValue.show(),this.css.jq.volumeBarValue[this.options.verticalVolume?"height":"width"](a*100+"%")),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.show())},volumeMax:function(){this.volume(1);this.options.muted&&this._muted(!1)},_cssSelectorAncestor:function(a){var c= -this;this.options.cssSelectorAncestor=a;this._removeUiClass();this.ancestorJq=a?b(a):[];a&&this.ancestorJq.length!==1&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.ancestorJq.length+" found for cssSelectorAncestor.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT});this._addUiClass();b.each(this.options.cssSelector,function(a,b){c._cssSelector(a,b)})},_cssSelector:function(a,c){var d=this;typeof c==="string"?b.jPlayer.prototype.options.cssSelector[a]? -(this.css.jq[a]&&this.css.jq[a].length&&this.css.jq[a].unbind(".jPlayer"),this.options.cssSelector[a]=c,this.css.cs[a]=this.options.cssSelectorAncestor+" "+c,this.css.jq[a]=c?b(this.css.cs[a]):[],this.css.jq[a].length&&this.css.jq[a].bind("click.jPlayer",function(c){d[a](c);b(this).blur();return!1}),c&&this.css.jq[a].length!==1&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[a],message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[a].length+" found for "+a+" method.", -hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT})):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_METHOD,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:b.jPlayer.warningHint.CSS_SELECTOR_METHOD}):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_STRING,context:c,message:b.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:b.jPlayer.warningHint.CSS_SELECTOR_STRING})},seekBar:function(a){if(this.css.jq.seekBar){var b=this.css.jq.seekBar.offset(),a=a.pageX-b.left,b=this.css.jq.seekBar.width(); -this.playHead(100*a/b)}},playBar:function(a){this.seekBar(a)},repeat:function(){this._loop(!0)},repeatOff:function(){this._loop(!1)},_loop:function(a){if(this.options.loop!==a)this.options.loop=a,this._updateButtons(),this._trigger(b.jPlayer.event.repeat)},currentTime:function(){},duration:function(){},gui:function(){},noSolution:function(){},option:function(a,c){var d=a;if(arguments.length===0)return b.extend(!0,{},this.options);if(typeof a==="string"){var e=a.split(".");if(c===f){for(var d=b.extend(!0, -{},this.options),g=0;g0?this._html_load():clearTimeout(this.internal.htmlDlyCmdId);this.htmlElement.media.pause();if(!isNaN(a))try{this.htmlElement.media.currentTime=a}catch(d){this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},100);return}a>0&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this;this._html_load();try{if(typeof this.htmlElement.media.seekable==="object"&&this.htmlElement.media.seekable.length>0)this.htmlElement.media.currentTime= -a*this.htmlElement.media.seekable.end(this.htmlElement.media.seekable.length-1)/100;else if(this.htmlElement.media.duration>0&&!isNaN(this.htmlElement.media.duration))this.htmlElement.media.currentTime=a*this.htmlElement.media.duration/100;else throw"e";}catch(d){this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},100);return}this.status.waitForLoad||this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){if(this.status.waitForPlay)this.status.waitForPlay=!1,this.css.jq.videoPlay.length&& -this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height}))},_html_volume:function(a){if(this.html.audio.available)this.htmlElement.audio.volume=a;if(this.html.video.available)this.htmlElement.video.volume=a},_html_mute:function(a){if(this.html.audio.available)this.htmlElement.audio.muted=a;if(this.html.video.available)this.htmlElement.video.muted=a},_flash_setAudio:function(a){var c=this;try{if(b.each(this.formats, -function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4a":case "fla":c._getMovie().fl_setAudio_m4a(a[d]);break;case "mp3":c._getMovie().fl_setAudio_mp3(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),this.options.preload==="auto")this._flash_load(),this.status.waitForLoad=!1}catch(d){this._flashError(d)}},_flash_setVideo:function(a){var c=this;try{if(b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4v":case "flv":c._getMovie().fl_setVideo_m4v(a[d])}c.status.src= -a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),this.options.preload==="auto")this._flash_load(),this.status.waitForLoad=!1}catch(d){this._flashError(d)}},_flash_resetMedia:function(){this.internal.flash.jq.css({width:"0px",height:"0px"});this._flash_pause(NaN)},_flash_clearMedia:function(){try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=!1},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad= -!1;this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}if(a>0)this.status.waitForLoad=!1,this._flash_checkWaitForPlay()},_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){if(this.status.waitForPlay)this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&& -(this.internal.poster.jq.hide(),this.internal.flash.jq.css({width:this.status.width,height:this.status.height}))},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}},_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_checkForFlash:function(a){var b=!1,d;if(window.ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+a),b=!0}catch(e){}else navigator.plugins&& -navigator.mimeTypes.length>0&&(d=navigator.plugins["Shockwave Flash"])&&navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/,"$1")>=a&&(b=!0);return b},_validString:function(a){return a&&typeof a==="string"},_limitValue:function(a,b,d){return ad?d:a},_urlNotSetError:function(a){this._error({type:b.jPlayer.error.URL_NOT_SET,context:a,message:b.jPlayer.errorMsg.URL_NOT_SET,hint:b.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){var c;c=this.internal.ready?"FLASH_DISABLED": -"FLASH";this._error({type:b.jPlayer.error[c],context:this.internal.flash.swf,message:b.jPlayer.errorMsg[c]+a.message,hint:b.jPlayer.errorHint[c]});this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(a){this._trigger(b.jPlayer.event.error,a);this.options.errorAlerts&&this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(b.jPlayer.event.warning,f,a);this.options.warningAlerts&&this._alert("Warning!"+ -(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)},_emulateHtmlBridge:function(){var a=this;b.each(b.jPlayer.emulateMethods.split(/\s+/g),function(b,d){a.internal.domNode[d]=function(b){a[d](b)}});b.each(b.jPlayer.event,function(c,d){var e=!0;b.each(b.jPlayer.reservedEvent.split(/\s+/g),function(a,b){if(b===c)return e=!1});e&&a.element.bind(d+".jPlayer.jPlayerHtml", -function(){a._emulateHtmlUpdate();var b=document.createEvent("Event");b.initEvent(c,!1,!0);a.internal.domNode.dispatchEvent(b)})})},_emulateHtmlUpdate:function(){var a=this;b.each(b.jPlayer.emulateStatus.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.status[d]});b.each(b.jPlayer.emulateOptions.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.options[d]})},_destroyHtmlBridge:function(){var a=this;this.element.unbind(".jPlayerHtml");b.each((b.jPlayer.emulateMethods+" "+b.jPlayer.emulateStatus+ -" "+b.jPlayer.emulateOptions).split(/\s+/g),function(b,d){delete a.internal.domNode[d]})}};b.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};b.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ", -NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.",NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+b.jPlayer.prototype.version.script+" needs Jplayer.swf version "+b.jPlayer.prototype.version.needFlash+" but found "};b.jPlayer.errorHint= -{FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.",NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};b.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method", -CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};b.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ",CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."};b.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.", -CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}})(jQuery); \ No newline at end of file diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/Jplayer.swf b/main/inc/lib/javascript/jquery-jplayer/skins/Jplayer.swf deleted file mode 100755 index 4d50c86ae1..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/Jplayer.swf and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.css b/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.css deleted file mode 100755 index b070eca02f..0000000000 --- a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.css +++ /dev/null @@ -1,625 +0,0 @@ -/* - * Skin for jPlayer Plugin (jQuery JavaScript Library) - * http://www.happyworm.com/jquery/jplayer - * - * Skin Name: Blue Monday - * - * Copyright (c) 2010-2011 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Silvia Benvenuti - * Skin Version: 4.0 (jPlayer 2.1.0) - * Date: 1st September 2011 - */ - -div.jp-audio, -div.jp-video { - - /* Edit the font-size to counteract inherited font sizing. - * Eg. 1.25em = 1 / 0.8em - */ - - font-size:1.25em; /* 1.25em for testing in site pages */ /* No parent CSS that can effect the size in the demos ZIP */ - - font-family:Verdana, Arial, sans-serif; - line-height:1.6; - color: #666; - border:1px solid #009be3; - background-color:#eee; - position:relative; -} -div.jp-audio { - width:420px; -} -div.jp-video-270p { - width:480px; -} -div.jp-video-360p { - width:640px; -} -div.jp-video-full { - /* Rules for IE6 (full-screen) */ - width:480px; - height:270px; - /* Rules for IE7 (full-screen) - Otherwise the relative container causes other page items that are not position:static (default) to appear over the video/gui. */ - position:static !important; position:relative -} - -div.jp-video-full div.jp-jplayer { - top: 0; - left: 0; - position: fixed !important; position: relative; /* Rules for IE6 (full-screen) */ - overflow: hidden; - z-index:1000; -} - -div.jp-video-full div.jp-gui { - position: fixed !important; position: static; /* Rules for IE6 (full-screen) */ - top: 0; - left: 0; - width:100%; - height:100%; - z-index:1000; -} - -div.jp-video-full div.jp-interface { - position: absolute !important; position: relative; /* Rules for IE6 (full-screen) */ - bottom: 0; - left: 0; - z-index:1000; -} - -div.jp-interface { - position: relative; - background-color:#eee; - width:100%; -} - -div.jp-audio div.jp-type-single div.jp-interface { - height:80px; -} -div.jp-audio div.jp-type-playlist div.jp-interface { - height:80px; -} - -div.jp-video div.jp-interface { - border-top:1px solid #009be3; -} - -/* @group CONTROLS */ - -div.jp-controls-holder { - clear: both; - width:440px; - margin:0 auto; - position: relative; - overflow:hidden; - top:-8px; /* This negative value depends on the size of the text in jp-currentTime and jp-duration */ -} - -div.jp-interface ul.jp-controls { - list-style-type:none; - margin:0; - padding: 0; - overflow:hidden; -} - -div.jp-audio ul.jp-controls { - width: 380px; - padding:20px 20px 0 20px; -} - -div.jp-video div.jp-type-single ul.jp-controls { - width: 78px; - margin-left: 200px; -} - -div.jp-video div.jp-type-playlist ul.jp-controls { - width: 134px; - margin-left: 172px; -} -div.jp-video ul.jp-controls, -div.jp-interface ul.jp-controls li { - display:inline; - float: left; -} - -div.jp-interface ul.jp-controls a { - display:block; - overflow:hidden; - text-indent:-9999px; -} -a.jp-play, -a.jp-pause { - width:40px; - height:40px; -} - -a.jp-play { - background: url("jplayer.blue.monday.jpg") 0 0 no-repeat; -} -a.jp-play:hover { - background: url("jplayer.blue.monday.jpg") -41px 0 no-repeat; -} -a.jp-pause { - background: url("jplayer.blue.monday.jpg") 0 -42px no-repeat; - display: none; -} -a.jp-pause:hover { - background: url("jplayer.blue.monday.jpg") -41px -42px no-repeat; -} - -a.jp-stop, a.jp-previous, a.jp-next { - width:28px; - height:28px; - margin-top:6px; -} - -a.jp-stop { - background: url("jplayer.blue.monday.jpg") 0 -83px no-repeat; - margin-left:10px; -} - -a.jp-stop:hover { - background: url("jplayer.blue.monday.jpg") -29px -83px no-repeat; -} - -a.jp-previous { - background: url("jplayer.blue.monday.jpg") 0 -112px no-repeat; -} -a.jp-previous:hover { - background: url("jplayer.blue.monday.jpg") -29px -112px no-repeat; -} - -a.jp-next { - background: url("jplayer.blue.monday.jpg") 0 -141px no-repeat; -} -a.jp-next:hover { - background: url("jplayer.blue.monday.jpg") -29px -141px no-repeat; -} - -/* @end */ - -/* @group progress bar */ - -div.jp-progress { - overflow:hidden; - background-color: #ddd; -} -div.jp-audio div.jp-progress { - position: absolute; - top:32px; - height:15px; -} -div.jp-audio div.jp-type-single div.jp-progress { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-progress { - left:166px; - width:130px; -} -div.jp-video div.jp-progress { - top:0px; - left:0px; - width:100%; - height:10px; -} -div.jp-seek-bar { - background: url("jplayer.blue.monday.jpg") 0 -202px repeat-x; - width:0px; - height:100%; - cursor: pointer; -} -div.jp-play-bar { - background: url("jplayer.blue.monday.jpg") 0 -218px repeat-x ; - width:0px; - height:100%; -} - -/* The seeking class is added/removed inside jPlayer */ -div.jp-seeking-bg { - background: url("jplayer.blue.monday.seeking.gif"); -} - -/* @end */ - -/* @group volume controls */ - - -a.jp-mute, -a.jp-unmute, -a.jp-volume-max { - width:18px; - height:15px; - margin-top:12px; -} - -div.jp-audio div.jp-type-single a.jp-mute, -div.jp-audio div.jp-type-single a.jp-unmute { - margin-left: 210px; -} - -div.jp-audio div.jp-type-playlist a.jp-mute, -div.jp-audio div.jp-type-playlist a.jp-unmute { - margin-left: 154px; -} - -div.jp-audio a.jp-volume-max { - margin-left: 56px; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute, -div.jp-video a.jp-volume-max { - position: absolute; - top:12px; - margin-top:0; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute { - left: 50px; -} - - -div.jp-video a.jp-volume-max { - left: 134px; -} - -a.jp-mute { - background: url("jplayer.blue.monday.jpg") 0 -170px no-repeat; -} -a.jp-mute:hover { - background: url("jplayer.blue.monday.jpg") -19px -170px no-repeat; -} -a.jp-unmute { - background: url("jplayer.blue.monday.jpg") -60px -170px no-repeat; - display: none; -} -a.jp-unmute:hover { - background: url("jplayer.blue.monday.jpg") -79px -170px no-repeat; -} - -a.jp-volume-max { - background: url("jplayer.blue.monday.jpg") 0 -186px no-repeat; -} -a.jp-volume-max:hover { - background: url("jplayer.blue.monday.jpg") -19px -186px no-repeat; -} - -div.jp-volume-bar { - position: absolute; - overflow:hidden; - background: url("jplayer.blue.monday.jpg") 0 -250px repeat-x; - width:46px; - height:5px; - cursor: pointer; -} -div.jp-audio div.jp-volume-bar { - top:37px; - left:330px; -} -div.jp-video div.jp-volume-bar { - top:17px; - left:72px; -} -div.jp-volume-bar-value { - background: url("jplayer.blue.monday.jpg") 0 -256px repeat-x; - width:0px; - height:5px; -} - -/* @end */ - -/* @group current time and duration */ - -div.jp-audio div.jp-time-holder { - position:absolute; - top:50px; -} -div.jp-audio div.jp-type-single div.jp-time-holder { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-time-holder { - left:166px; - width:130px; -} - -div.jp-current-time, -div.jp-duration { - width:60px; - font-size:.64em; - font-style:oblique; -} -div.jp-current-time { - float: left; - display:inline; -} -div.jp-duration { - float: right; - display:inline; - text-align: right; -} - -div.jp-video div.jp-current-time { - margin-left:20px; -} -div.jp-video div.jp-duration { - margin-right:20px; -} - -/* @end */ - -/* @group playlist */ - -div.jp-title { - font-weight:bold; - text-align:center; -} - -div.jp-title, -div.jp-playlist { - width:100%; - background-color:#ccc; - border-top:1px solid #009be3; -} -div.jp-type-single div.jp-title, -div.jp-type-playlist div.jp-title, -div.jp-type-single div.jp-playlist { - border-top:none; -} -div.jp-title ul, -div.jp-playlist ul { - list-style-type:none; - margin:0; - padding:0 20px; - font-size:.72em; -} - -div.jp-title li { - padding:5px 0; - font-weight:bold; -} -div.jp-playlist li { - padding:5px 0 4px 20px; - border-bottom:1px solid #eee; -} - -div.jp-playlist li div { - display:inline; -} - -/* Note that the first-child (IE6) and last-child (IE6/7/8) selectors do not work on IE */ - -div.jp-type-playlist div.jp-playlist li:last-child { - padding:5px 0 5px 20px; - border-bottom:none; -} -div.jp-type-playlist div.jp-playlist li.jp-playlist-current { - list-style-type:square; - list-style-position:inside; - padding-left:7px; -} -div.jp-type-playlist div.jp-playlist a { - color: #333; - text-decoration: none; -} -div.jp-type-playlist div.jp-playlist a:hover { - color:#0d88c1; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-current { - color:#0d88c1; -} - -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove { - float:right; - display:inline; - text-align:right; - margin-right:10px; - font-weight:bold; - color:#666; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove:hover { - color:#0d88c1; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media { - float:right; - display:inline; - text-align:right; - margin-right:10px; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a{ - color:#666; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a:hover{ - color:#0d88c1; -} -span.jp-artist { - font-size:.8em; - color:#666; -} - -/* @end */ - -div.jp-video-play { - position:absolute; - top:0; - left:0; - width:100%; - cursor:pointer; - background-color:rgba(0,0,0,0); /* Makes IE9 work with the active area over the whole video area. IE6/7/8 only have the button as active area. */ -} -div.jp-video-270p div.jp-video-play { - height:270px; -} -div.jp-video-360p div.jp-video-play { - height:360px; -} -div.jp-video-full div.jp-video-play { - height:100%; - z-index:1000; -} -a.jp-video-play-icon { - position:relative; - display:block; - width: 112px; - height: 100px; - - margin-left:-56px; - margin-top:-50px; - left:50%; - top:50%; - - background: url("jplayer.blue.monday.video.play.png") 0 0 no-repeat; - text-indent:-9999px; -} -div.jp-video-play:hover a.jp-video-play-icon { - background: url("jplayer.blue.monday.video.play.png") 0 -100px no-repeat; -} - - - - - -div.jp-jplayer audio, -div.jp-jplayer { - width:0px; - height:0px; -} - -div.jp-jplayer { - background-color: #000000; -} - - - - - -/* @group TOGGLES */ - -/* The audio toggles are nested inside jp-time-holder */ - -ul.jp-toggles { - list-style-type:none; - padding:0; - margin:0 auto; - overflow:hidden; -} - -div.jp-audio .jp-type-single ul.jp-toggles { - width:25px; -} -div.jp-audio .jp-type-playlist ul.jp-toggles { - width:55px; - margin: 0; - position: absolute; - left: 325px; - top: 50px; -} - -div.jp-video ul.jp-toggles { - margin-top:10px; - width:100px; -} - -ul.jp-toggles li { - display:block; - float:right; -} - -ul.jp-toggles li a { - display:block; - width:25px; - height:18px; - text-indent:-9999px; - line-height:100%; /* need this for IE6 */ -} - -a.jp-full-screen { - background: url("jplayer.blue.monday.jpg") 0 -310px no-repeat; - margin-left: 20px; -} - -a.jp-full-screen:hover { - background: url("jplayer.blue.monday.jpg") -30px -310px no-repeat; -} - -a.jp-restore-screen { - background: url("jplayer.blue.monday.jpg") -60px -310px no-repeat; - margin-left: 20px; -} - -a.jp-restore-screen:hover { - background: url("jplayer.blue.monday.jpg") -90px -310px no-repeat; -} - -a.jp-repeat { - background: url("jplayer.blue.monday.jpg") 0 -290px no-repeat; -} - -a.jp-repeat:hover { - background: url("jplayer.blue.monday.jpg") -30px -290px no-repeat; -} - -a.jp-repeat-off { - background: url("jplayer.blue.monday.jpg") -60px -290px no-repeat; -} - -a.jp-repeat-off:hover { - background: url("jplayer.blue.monday.jpg") -90px -290px no-repeat; -} - -a.jp-shuffle { - background: url("jplayer.blue.monday.jpg") 0 -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle:hover { - background: url("jplayer.blue.monday.jpg") -30px -270px no-repeat; -} - -a.jp-shuffle-off { - background: url("jplayer.blue.monday.jpg") -60px -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle-off:hover { - background: url("jplayer.blue.monday.jpg") -90px -270px no-repeat; -} - - -/* @end */ - -/* @group NO SOLUTION error feedback */ - -.jp-no-solution { - position:absolute; - width:390px; - margin-left:-202px; - left:50%; - top: 10px; - - padding:5px; - font-size:.8em; - background-color:#eee; - border:2px solid #009be3; - color:#000; - display:none; -} - -.jp-no-solution a { - color:#000; -} - -.jp-no-solution span { - font-size:1em; - display:block; - text-align:center; - font-weight:bold; -} - -/* @end */ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.jpg b/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.jpg deleted file mode 100755 index adab53ff7b..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.jpg and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.seeking.gif b/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.seeking.gif deleted file mode 100755 index dbd2105ab9..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.seeking.gif and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.video.play.png b/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.video.play.png deleted file mode 100755 index 1fbd393da0..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/blue/jplayer.blue.monday.video.play.png and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.css b/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.css deleted file mode 100755 index b72bdad8a9..0000000000 --- a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.css +++ /dev/null @@ -1,626 +0,0 @@ -/* - * Skin for jPlayer Plugin (jQuery JavaScript Library) - * http://www.happyworm.com/jquery/jplayer - * - * Skin Name: Blue Monday - * - * Copyright (c) 2010-2011 Happyworm Ltd - * Dual licensed under the MIT and GPL licenses. - * - http://www.opensource.org/licenses/mit-license.php - * - http://www.gnu.org/copyleft/gpl.html - * - * Author: Silvia Benvenuti - * Skin Version: 4.0 (jPlayer 2.1.0) - * Date: 1st September 2011 - */ - -div.jp-audio, -div.jp-video { - - /* Edit the font-size to counteract inherited font sizing. - * Eg. 1.25em = 1 / 0.8em - */ - - font-size:1em; /* 1.25em for testing in site pages */ /* No parent CSS that can effect the size in the demos ZIP */ - - font-family:Verdana, Arial, sans-serif; - line-height:1.6; - color: #666; -/* border:1px solid #009be3; - background-color:#eee;*/ - position:relative; - margin:-8px; -} -div.jp-audio { -/* width:420px;*/ -} -div.jp-video-270p { - width:480px; -} -div.jp-video-360p { - width:640px; -} -div.jp-video-full { - /* Rules for IE6 (full-screen) */ - width:480px; - height:270px; - /* Rules for IE7 (full-screen) - Otherwise the relative container causes other page items that are not position:static (default) to appear over the video/gui. */ - position:static !important; position:relative -} - -div.jp-video-full div.jp-jplayer { - top: 0; - left: 0; - position: fixed !important; position: relative; /* Rules for IE6 (full-screen) */ - overflow: hidden; - z-index:1000; -} - -div.jp-video-full div.jp-gui { - position: fixed !important; position: static; /* Rules for IE6 (full-screen) */ - top: 0; - left: 0; - width:100%; - height:100%; - z-index:1000; -} - -div.jp-video-full div.jp-interface { - position: absolute !important; position: relative; /* Rules for IE6 (full-screen) */ - bottom: 0; - left: 0; - z-index:1000; -} - -div.jp-interface { - position: relative; -/* background-color:#eee; - width:100%;*/ -} - -div.jp-audio div.jp-type-single div.jp-interface { -/* height:80px;*/ -} -div.jp-audio div.jp-type-playlist div.jp-interface { - height:80px; -} - -div.jp-video div.jp-interface { - border-top:1px solid #009be3; -} - -/* @group CONTROLS */ - -div.jp-controls-holder { - clear: both; - width:440px; - margin:0 auto; - position: relative; - overflow:hidden; - top:-8px; /* This negative value depends on the size of the text in jp-currentTime and jp-duration */ -} - -div.jp-interface ul.jp-controls { - list-style-type:none; - margin:0; - padding: 0; - overflow:hidden; -} - -div.jp-audio ul.jp-controls { -/* width: 380px;*/ -/* padding:20px 20px 0 20px;*/ -} - -div.jp-video div.jp-type-single ul.jp-controls { - width: 78px; - margin-left: 200px; -} - -div.jp-video div.jp-type-playlist ul.jp-controls { - width: 134px; - margin-left: 172px; -} -div.jp-video ul.jp-controls, -div.jp-interface ul.jp-controls li { - display:inline; - float: left; -} - -div.jp-interface ul.jp-controls a { - display:block; - overflow:hidden; - text-indent:-9999px; -} -a.jp-play, -a.jp-pause { - width:40px; - height:40px; -} - -a.jp-play { - background: url("jplayer.blue.monday.png") 0 0 no-repeat; -} -a.jp-play:hover { - background: url("jplayer.blue.monday.png") -41px 0 no-repeat; -} -a.jp-pause { - background: url("jplayer.blue.monday.png") 0 -42px no-repeat; - display: none; -} -a.jp-pause:hover { - background: url("jplayer.blue.monday.png") -41px -42px no-repeat; -} - -a.jp-stop, a.jp-previous, a.jp-next { - width:28px; - height:28px; - margin-top:6px; -} - -a.jp-stop { - background: url("jplayer.blue.monday.png") 0 -83px no-repeat; - margin-left:10px; -} - -a.jp-stop:hover { - background: url("jplayer.blue.monday.png") -29px -83px no-repeat; -} - -a.jp-previous { - background: url("jplayer.blue.monday.png") 0 -112px no-repeat; -} -a.jp-previous:hover { - background: url("jplayer.blue.monday.png") -29px -112px no-repeat; -} - -a.jp-next { - background: url("jplayer.blue.monday.png") 0 -141px no-repeat; -} -a.jp-next:hover { - background: url("jplayer.blue.monday.png") -29px -141px no-repeat; -} - -/* @end */ - -/* @group progress bar */ - -div.jp-progress { - overflow:hidden; - background-color: #ddd; -} -div.jp-audio div.jp-progress { - position: absolute; - top:32px; - height:15px; -} -div.jp-audio div.jp-type-single div.jp-progress { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-progress { - left:166px; - width:130px; -} -div.jp-video div.jp-progress { - top:0px; - left:0px; - width:100%; - height:10px; -} -div.jp-seek-bar { - background: url("jplayer.blue.monday.png") 0 -202px repeat-x; - width:0px; - height:100%; - cursor: pointer; -} -div.jp-play-bar { - background: url("jplayer.blue.monday.png") 0 -218px repeat-x ; - width:0px; - height:100%; -} - -/* The seeking class is added/removed inside jPlayer */ -div.jp-seeking-bg { - background: url("jplayer.blue.monday.seeking.gif"); -} - -/* @end */ - -/* @group volume controls */ - - -a.jp-mute, -a.jp-unmute, -a.jp-volume-max { - width:18px; - height:15px; - margin-top:12px; -} - -div.jp-audio div.jp-type-single a.jp-mute, -div.jp-audio div.jp-type-single a.jp-unmute { - margin-left: 210px; -} - -div.jp-audio div.jp-type-playlist a.jp-mute, -div.jp-audio div.jp-type-playlist a.jp-unmute { - margin-left: 154px; -} - -div.jp-audio a.jp-volume-max { - margin-left: 56px; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute, -div.jp-video a.jp-volume-max { - position: absolute; - top:12px; - margin-top:0; -} - -div.jp-video a.jp-mute, -div.jp-video a.jp-unmute { - left: 50px; -} - - -div.jp-video a.jp-volume-max { - left: 134px; -} - -a.jp-mute { - background: url("jplayer.blue.monday.png") 0 -170px no-repeat; -} -a.jp-mute:hover { - background: url("jplayer.blue.monday.png") -19px -170px no-repeat; -} -a.jp-unmute { - background: url("jplayer.blue.monday.png") -60px -170px no-repeat; - display: none; -} -a.jp-unmute:hover { - background: url("jplayer.blue.monday.png") -79px -170px no-repeat; -} - -a.jp-volume-max { - background: url("jplayer.blue.monday.png") 0 -186px no-repeat; -} -a.jp-volume-max:hover { - background: url("jplayer.blue.monday.png") -19px -186px no-repeat; -} - -div.jp-volume-bar { - position: absolute; - overflow:hidden; - background: url("jplayer.blue.monday.png") 0 -250px repeat-x; - width:46px; - height:5px; - cursor: pointer; -} -div.jp-audio div.jp-volume-bar { - top:37px; - left:330px; -} -div.jp-video div.jp-volume-bar { - top:17px; - left:72px; -} -div.jp-volume-bar-value { - background: url("jplayer.blue.monday.png") 0 -256px repeat-x; - width:0px; - height:5px; -} - -/* @end */ - -/* @group current time and duration */ - -div.jp-audio div.jp-time-holder { - position:absolute; - top:50px; -} -div.jp-audio div.jp-type-single div.jp-time-holder { - left:110px; - width:186px; -} -div.jp-audio div.jp-type-playlist div.jp-time-holder { - left:166px; - width:130px; -} - -div.jp-current-time, -div.jp-duration { - width:60px; - font-size:.64em; - font-style:oblique; -} -div.jp-current-time { - float: left; - display:inline; -} -div.jp-duration { - float: right; - display:inline; - text-align: right; -} - -div.jp-video div.jp-current-time { - margin-left:20px; -} -div.jp-video div.jp-duration { - margin-right:20px; -} - -/* @end */ - -/* @group playlist */ - -div.jp-title { - font-weight:bold; - text-align:center; -} - -div.jp-title, -div.jp-playlist { - width:100%; - background-color:#ccc; - border-top:1px solid #009be3; -} -div.jp-type-single div.jp-title, -div.jp-type-playlist div.jp-title, -div.jp-type-single div.jp-playlist { - border-top:none; -} -div.jp-title ul, -div.jp-playlist ul { - list-style-type:none; - margin:0; - padding:0 20px; - font-size:.72em; -} - -div.jp-title li { - padding:5px 0; - font-weight:bold; -} -div.jp-playlist li { - padding:5px 0 4px 20px; - border-bottom:1px solid #eee; -} - -div.jp-playlist li div { - display:inline; -} - -/* Note that the first-child (IE6) and last-child (IE6/7/8) selectors do not work on IE */ - -div.jp-type-playlist div.jp-playlist li:last-child { - padding:5px 0 5px 20px; - border-bottom:none; -} -div.jp-type-playlist div.jp-playlist li.jp-playlist-current { - list-style-type:square; - list-style-position:inside; - padding-left:7px; -} -div.jp-type-playlist div.jp-playlist a { - color: #333; - text-decoration: none; -} -div.jp-type-playlist div.jp-playlist a:hover { - color:#0d88c1; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-current { - color:#0d88c1; -} - -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove { - float:right; - display:inline; - text-align:right; - margin-right:10px; - font-weight:bold; - color:#666; -} -div.jp-type-playlist div.jp-playlist a.jp-playlist-item-remove:hover { - color:#0d88c1; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media { - float:right; - display:inline; - text-align:right; - margin-right:10px; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a{ - color:#666; -} -div.jp-type-playlist div.jp-playlist span.jp-free-media a:hover{ - color:#0d88c1; -} -span.jp-artist { - font-size:.8em; - color:#666; -} - -/* @end */ - -div.jp-video-play { - position:absolute; - top:0; - left:0; - width:100%; - cursor:pointer; - background-color:rgba(0,0,0,0); /* Makes IE9 work with the active area over the whole video area. IE6/7/8 only have the button as active area. */ -} -div.jp-video-270p div.jp-video-play { - height:270px; -} -div.jp-video-360p div.jp-video-play { - height:360px; -} -div.jp-video-full div.jp-video-play { - height:100%; - z-index:1000; -} -a.jp-video-play-icon { - position:relative; - display:block; - width: 112px; - height: 100px; - - margin-left:-56px; - margin-top:-50px; - left:50%; - top:50%; - - background: url("jplayer.blue.monday.video.play.png") 0 0 no-repeat; - text-indent:-9999px; -} -div.jp-video-play:hover a.jp-video-play-icon { - background: url("jplayer.blue.monday.video.play.png") 0 -100px no-repeat; -} - - - - - -div.jp-jplayer audio, -div.jp-jplayer { - width:0px; - height:0px; -} - -div.jp-jplayer { - background-color: #000000; -} - - - - - -/* @group TOGGLES */ - -/* The audio toggles are nested inside jp-time-holder */ - -ul.jp-toggles { - list-style-type:none; - padding:0; - margin:0 auto; - overflow:hidden; -} - -div.jp-audio .jp-type-single ul.jp-toggles { - width:25px; -} -div.jp-audio .jp-type-playlist ul.jp-toggles { - width:55px; - margin: 0; - position: absolute; - left: 325px; - top: 50px; -} - -div.jp-video ul.jp-toggles { - margin-top:10px; - width:100px; -} - -ul.jp-toggles li { - display:block; - float:right; -} - -ul.jp-toggles li a { - display:block; - width:25px; - height:18px; - text-indent:-9999px; - line-height:100%; /* need this for IE6 */ -} - -a.jp-full-screen { - background: url("jplayer.blue.monday.png") 0 -310px no-repeat; - margin-left: 20px; -} - -a.jp-full-screen:hover { - background: url("jplayer.blue.monday.png") -30px -310px no-repeat; -} - -a.jp-restore-screen { - background: url("jplayer.blue.monday.png") -60px -310px no-repeat; - margin-left: 20px; -} - -a.jp-restore-screen:hover { - background: url("jplayer.blue.monday.png") -90px -310px no-repeat; -} - -a.jp-repeat { - background: url("jplayer.blue.monday.png") 0 -290px no-repeat; -} - -a.jp-repeat:hover { - background: url("jplayer.blue.monday.png") -30px -290px no-repeat; -} - -a.jp-repeat-off { - background: url("jplayer.blue.monday.png") -60px -290px no-repeat; -} - -a.jp-repeat-off:hover { - background: url("jplayer.blue.monday.png") -90px -290px no-repeat; -} - -a.jp-shuffle { - background: url("jplayer.blue.monday.png") 0 -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle:hover { - background: url("jplayer.blue.monday.png") -30px -270px no-repeat; -} - -a.jp-shuffle-off { - background: url("jplayer.blue.monday.png") -60px -270px no-repeat; - margin-left: 5px; -} - -a.jp-shuffle-off:hover { - background: url("jplayer.blue.monday.png") -90px -270px no-repeat; -} - - -/* @end */ - -/* @group NO SOLUTION error feedback */ - -.jp-no-solution { - position:absolute; - width:390px; - margin-left:-202px; - left:50%; - top: 10px; - - padding:5px; - font-size:.8em; - background-color:#eee; - border:2px solid #009be3; - color:#000; - display:none; -} - -.jp-no-solution a { - color:#000; -} - -.jp-no-solution span { - font-size:1em; - display:block; - text-align:center; - font-weight:bold; -} - -/* @end */ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.jpg b/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.jpg deleted file mode 100755 index be1fb73d96..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.jpg and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.png b/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.png deleted file mode 100755 index c39b83f4bb..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.png and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.seeking.gif b/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.seeking.gif deleted file mode 100755 index dbd2105ab9..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.seeking.gif and /dev/null differ diff --git a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.video.play.png b/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.video.play.png deleted file mode 100755 index 8e97df0110..0000000000 Binary files a/main/inc/lib/javascript/jquery-jplayer/skins/chamilo/jplayer.blue.monday.video.play.png and /dev/null differ diff --git a/main/inc/lib/nanogong.lib.php b/main/inc/lib/nanogong.lib.php index fc6e7402c0..861a32c50c 100755 --- a/main/inc/lib/nanogong.lib.php +++ b/main/inc/lib/nanogong.lib.php @@ -382,9 +382,8 @@ class Nanogong } elseif(in_array($path_info['extension'],array('mp3', 'ogg','wav'))) { $js_path = api_get_path(WEB_LIBRARY_PATH).'javascript/'; - $html .= ''; - //$html .= ''; - $html .= ''; + $html .= ''; + $html .= ''; $html .= '
'; $html .= '
'.$actions.'



'; diff --git a/main/mySpace/myStudents.php b/main/mySpace/myStudents.php index ec5e55214c..554083a81c 100755 --- a/main/mySpace/myStudents.php +++ b/main/mySpace/myStudents.php @@ -356,7 +356,7 @@ if (!empty($student_id)) { $course_code = isset($_GET['course']) ? Security :: remove_XSS($_GET['course']) : null; if (CourseManager :: is_user_subscribed_in_course($user_info['user_id'], $course_code, true)) { - + $avg_student_progress = Tracking::get_avg_student_progress( $user_info['user_id'], $course_code, @@ -656,7 +656,9 @@ if (!empty($student_id)) { if (CourseManager :: is_user_subscribed_in_course($student_id, $course_code, true)) { $course_info = CourseManager :: get_course_information($course_code); - $time_spent_on_course = api_time_to_hms(Tracking :: get_time_spent_on_the_course($user_info['user_id'], $courseId, $sessionId)); + $time_spent_on_course = api_time_to_hms( + Tracking :: get_time_spent_on_the_course($user_info['user_id'], $courseId, $sessionId) + ); // get average of faults in attendances by student $results_faults_avg = $attendance->get_faults_average_by_course($student_id, $course_code, $sessionId); diff --git a/main/newscorm/scorm_api.php b/main/newscorm/scorm_api.php index e3a7ef28bf..3c4d33bff0 100755 --- a/main/newscorm/scorm_api.php +++ b/main/newscorm/scorm_api.php @@ -1682,11 +1682,12 @@ var loadForumThead = function(lpId, lpItemId) { $.when(loadForum).done(function(forumThreadData) { var tabForumLink = $('.lp-view-tabs a[href="#lp-view-forum"]'), tabForum = tabForumLink.parent(); + $("#navTabs").show(); if (forumThreadData.error) { tabForumLink.removeAttr('data-toggle'); tabForum.addClass('disabled'); - + $("#navTabs").hide(); $('#lp-view-forum').html(''); return; diff --git a/main/template/default/learnpath/view.tpl b/main/template/default/learnpath/view.tpl index b27a00dea2..0bfb35f1f7 100644 --- a/main/template/default/learnpath/view.tpl +++ b/main/template/default/learnpath/view.tpl @@ -112,7 +112,7 @@
-
'.$career.'
'; - echo Display::tag('h5',$promotion_url); - echo '
'; - //Courses - echo ''; - foreach ($course_list as $course) { - echo ''; - - $url = Display::url( - $course['title'], - api_get_path(WEB_COURSE_PATH).$course['directory'].'/index.php?id_session='.$session['data']['id'] - ); - echo Display::tag('td', $url); - echo ''; - } - echo '
'; +if (!empty($career_arrayer)) { + foreach ($career_array as $career_id => $data) { + $career = $data['name']; + $promotions = $data['promotions']; + $career = Display::url($career, 'careers.php?action=edit&id=' . $career_id); + $career = Display::tag('h4', $career); + echo '
' . $career . '
'; + echo Display::tag('h5', $promotion_url); echo '
'; + //Courses + echo ''; + if (!empty($course_list)) { + foreach ($course_list as $course) { + echo ''; + + $url = Display::url( + $course['title'], + api_get_path(WEB_COURSE_PATH) . $course['directory'] . '/index.php?id_session=' . $session['data']['id'] + ); + echo Display::tag('td', $url); + echo ''; + } + echo '
'; + echo '