123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667 |
- var ajax_url = _p.web_ajax + 'chat.ajax.php';
- var online_button = '<img src="' + _p.web_img + 'statusonline.png">';
- var offline_button = '<img src="' + _p.web_img + 'statusoffline.png">';
- var connect_lang = '{{ "ChatConnected"|get_lang | escape('js')}}';
- var disconnect_lang = '{{ "ChatDisconnected"|get_lang | escape('js')}}';
- var chatLang = '{{ "GlobalChat"|get_lang | escape('js')}}';
- {% if 'hide_chat_video'|api_get_configuration_value %}
- var hide_chat_video = true;
- {% else %}
- var hide_chat_video = false;
- {% endif %}
- $(function() {
- addMainEvent(window, 'unload', courseLogout ,false);
- $("#open-view-list").click(function(){
- $("#student-list-work").fadeIn(300);
- });
- $("#closed-view-list").click(function(){
- $("#student-list-work").fadeOut(300);
- });
- checkBrand();
- var id;
- $(window).resize(function() {
- clearTimeout(id);
- id = setTimeout(doneResizing, 200);
- });
- // Removes the yellow input in Chrome
- if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
- $(window).on("load", function () {
- $('input:-webkit-autofill').each(function(){
- var text = $(this).val();
- var name = $(this).attr('name');
- $(this).after(this.outerHTML).remove();
- $('input[name=' + name + ']').val(text);
- });
- });
- }
- $(".accordion_jquery").accordion({
- autoHeight: false,
- active: false, // all items closed by default
- collapsible: true,
- header: ".accordion-heading"
- });
- // Start modals
- // class='ajax' loads a page in a modal
- $('body').on('click', 'a.ajax', function(e) {
- e.preventDefault();
- var contentUrl = this.href,
- loadModalContent = $.get(contentUrl),
- self = $(this);
- $.when(loadModalContent).done(function(modalContent) {
- var modalDialog = $('#global-modal').find('.modal-dialog'),
- modalSize = self.data('size') || get_url_params(contentUrl, 'modal_size'),
- modalWidth = self.data('width') || get_url_params(contentUrl, 'width'),
- modalTitle = self.data('title') || ' ';
- modalDialog.removeClass('modal-lg modal-sm').css('width', '');
- if (modalSize && modalSize.length != 0) {
- switch (modalSize) {
- case 'lg':
- modalDialog.addClass('modal-lg');
- break;
- case 'sm':
- modalDialog.addClass('modal-sm');
- break;
- }
- } else if (modalWidth) {
- modalDialog.css('width', modalWidth + 'px');
- }
- $('#global-modal').find('.modal-title').text(modalTitle);
- $('#global-modal').find('.modal-body').html(modalContent);
- $('#global-modal').modal('show');
- });
- });
- // Expands an image modal
- $('a.expand-image').on('click', function(e) {
- e.preventDefault();
- var title = $(this).attr('title');
- var image = new Image();
- image.onload = function() {
- if (title) {
- $('#expand-image-modal').find('.modal-title').text(title);
- } else {
- $('#expand-image-modal').find('.modal-title').html(' ');
- }
- $('#expand-image-modal').find('.modal-body').html(image);
- $('#expand-image-modal').modal({
- show: true
- });
- };
- image.src = this.href;
- });
- // Delete modal
- $('#confirm-delete').on('show.bs.modal', function(e) {
- $(this).find('.btn-ok').attr('href', $(e.relatedTarget).data('href'));
- var message = '{{ 'AreYouSureToDeleteJS' | get_lang | escape('js')}}: <strong>' + $(e.relatedTarget).data('item-title') + '</strong>';
- if ($(e.relatedTarget).data('item-question')) {
- message = $(e.relatedTarget).data('item-question');
- }
- $('.debug-url').html(message);
- });
- // End modals
- // old jquery.menu.js
- $('#navigation a').stop().animate({
- 'marginLeft':'50px'
- },1000);
- $('#navigation div').hover(
- function () {
- $('a',$(this)).stop().animate({
- 'marginLeft':'1px'
- },200);
- },
- function () {
- $('a',$(this)).stop().animate({
- 'marginLeft':'50px'
- },200);
- }
- );
- /* Make responsive image maps */
- $('map').imageMapResize();
- jQuery.fn.filterByText = function(textbox) {
- return this.each(function() {
- var select = this;
- var options = [];
- $(select).find('option').each(function() {
- options.push({value: $(this).val(), text: $(this).text()});
- });
- $(select).data('options', options);
- $(textbox).bind('change keyup', function() {
- var options = $(select).empty().data('options');
- var search = $.trim($(this).val());
- var regex = new RegExp(search,"gi");
- $.each(options, function(i) {
- var option = options[i];
- if(option.text.match(regex) !== null) {
- $(select).append(
- $('<option>').text(option.text).val(option.value)
- );
- }
- });
- });
- });
- };
- $(".black-shadow").mouseenter(function() {
- $(this).addClass('hovered-course');
- }).mouseleave(function() {
- $(this).removeClass('hovered-course');
- });
- $("[data-toggle=popover]").each(function(i, obj) {
- $(this).popover({
- html: true,
- content: function() {
- var id = $(this).attr('id')
- return $('#popover-content-' + id).html();
- }
- });
- });
- $('.scrollbar-inner').scrollbar();
- // Date time settings.
- moment.locale('{{ locale }}');
- $.datepicker.setDefaults($.datepicker.regional["{{ locale }}"]);
- $.datepicker.regional["local"] = $.datepicker.regional["{{ locale }}"];
- // Fix old calls of "inc/lib/mediaplayer/player.swf" and convert to <audio> tag, then rendered by media element js
- // see BT#13405
- $('embed').each( function () {
- var flashVars = $(this).attr('flashvars');
- if (flashVars && flashVars.indexOf("file") == -1) {
- var audioId = Math.floor( Math.random()*99999 );
- flashVars = flashVars.replace('&autostart=false', '');
- flashVars = flashVars.replace('&autostart=true', '');
- var audioDiv = '<audio id="'+audioId+'" controls="controls" style="width:400px;" width:"400px;" src="'+flashVars+'" ><source src="'+flashVars+'" type="audio/mp3" ></source></audio>';
- $(this).hide();
- $(this).after(audioDiv);
- }
- });
- // Chosen select
- $(".chzn-select").chosen({
- disable_search_threshold: 10,
- no_results_text: '{{ 'SearchNoResultsFound' | get_lang | escape('js') }}',
- placeholder_text_multiple: '{{ 'SelectSomeOptions' | get_lang | escape('js') }}',
- placeholder_text_single: '{{ 'SelectAnOption' | get_lang | escape('js') }}',
- width: "100%"
- });
- // Bootstrap tabs.
- $('.tab-wrapper a').click(function (e) {
- e.preventDefault();
- $(this).tab('show');
- //$('#tabs a:first').tab('show') // Select first tab
- });
- // Fixes bug when loading links inside a tab.
- $('.tab-wrapper .tab-pane a').unbind();
- /**
- * Advanced options
- * Usage
- * <a id="link" href="url">Advanced</a>
- * <div id="link_options">
- * hidden content :)
- * </div>
- * */
- $(".advanced_options").on("click", function (event) {
- event.preventDefault();
- var id = $(this).attr('id') + '_options';
- var button = $(this);
- $("#" + id).toggle();
- });
- /**
- * <a class="advanced_options_open" href="http://" rel="div_id">Open</a>
- * <a class="advanced_options_close" href="http://" rel="div_id">Close</a>
- * <div id="div_id">Div content</div>
- * */
- $(".advanced_options_open").on("click", function (event) {
- event.preventDefault();
- var id = $(this).attr('rel');
- $("#" + id).show();
- });
- $(".advanced_options_close").on("click", function (event) {
- event.preventDefault();
- var id = $(this).attr('rel');
- $("#" + id).hide();
- });
- // Adv multi-select search input.
- $('.select_class_filter').each( function () {
- var inputId = $(this).attr('id');
- inputId = inputId.replace('-filter', '');
- $("#" + inputId).filterByText($("#" + inputId + "-filter"));
- });
- // Mediaelement
- if ( {{ show_media_element }} == 1) {
- $('video:not(.skip), audio:not(.skip)').mediaelementplayer({
- pluginPath: _p.web + 'web/assets/mediaelement/build/',
- //renderers: ['html5', 'flash_video', 'native_flv'],
- features: ['{{ video_features }}'],
- success: function(mediaElement, originalNode, instance) {
- {{ quiz_markers_rolls_js }}
- },
- vrPath: _p.web + 'web/assets/vrview/build/vrview.js'
- });
- }
- // Table highlight.
- $("form .data_table input:checkbox").click(function () {
- if ($(this).is(":checked")) {
- $(this).parentsUntil("tr").parent().addClass("row_selected");
- } else {
- $(this).parentsUntil("tr").parent().removeClass("row_selected");
- }
- });
- /* For non HTML5 browsers */
- if ($("#formLogin".length > 1)) {
- $("input[name=login]").focus();
- }
- // Tool tip (in exercises)
- var tip_options = {
- placement: 'right'
- };
- $('.boot-tooltip').tooltip(tip_options);
- var more = '{{ 'SeeMore' | get_lang | escape('js') }}';
- var close = '{{ 'Close' | get_lang | escape('js') }}';
- $('.list-teachers').readmore({
- speed: 75,
- moreLink: '<a href="#">' + more + '</a>',
- lessLink: '<a href="#">' + close + '</a>',
- collapsedHeight: 35,
- blockCSS: 'display: block; width: 100%;'
- });
- $('.star-rating li a').on('click', function(event) {
- var id = $(this).parents('ul').attr('id');
- $('#vote_label2_' + id).html("{{'Loading'|get_lang| escape('js')}}");
- $.ajax({
- url: $(this).attr('data-link'),
- success: function(data) {
- $("#rating_wrapper_"+id).html(data);
- if (data == 'added') {
- //$('#vote_label2_' + id).html("{{'Saved'|get_lang | escape('js')}}");
- }
- if (data == 'updated') {
- //$('#vote_label2_' + id).html("{{'Saved'|get_lang| escape('js')}}");
- }
- }
- });
- });
- $("#notifications").load(_p.web_ajax + "online.ajax.php?a=get_users_online");
- $('video:not(.skip)').attr('preload', 'metadata');
- function socialLikes() {
- {% if 'social_enable_messages_feedback'|api_get_configuration_value %}
- $('body').on('click', '.social-like', function (e) {
- e.preventDefault();
- var $self = $(this),
- status = $self.data('status') || '',
- group = $self.data('group') || 0,
- message = $self.data('message') || 0;
- $.getJSON(
- '{{ _p.web_ajax }}social.ajax.php',
- {'a': 'like_message', 'group': group, 'id': message, 'status': status}
- ).then(function (response) {
- if (!response) {
- return;
- }
- var $count = $self.children('span'),
- currentCount = parseInt($count.text()) || 0;
- if ('like' === status) {
- var $dislike = $self.next(),
- $dislikeCount = $dislike.children('span'),
- dislikeCount = parseInt($dislikeCount.text()) || 0;
- $count.text(++currentCount);
- if ($dislike.prop('disabled') || $dislike.is('.disabled')) {
- $dislikeCount.text(dislikeCount <= 0 ? 0 : --dislikeCount);
- $dislike.removeClass('disabled').prop('disabled', false);
- }
- $self.addClass('disabled').prop('disabled', true);
- } else if ('dislike' === status) {
- var $like = $self.prev(),
- $likeCount = $like.children('span'),
- likeCount = parseInt($likeCount.text()) || 0;
- $count.text(++currentCount);
- if ($like.prop('disabled') || $like.is('.disabled')) {
- $likeCount.text(likeCount <= 0 ? 0 : --likeCount);
- $like.removeClass('disabled').prop('disabled', false);
- }
- $self.addClass('disabled').prop('disabled', true);
- }
- });
- });
- {% endif %}
- }
- socialLikes();
- });
- $(window).resize(function() {
- checkBrand();
- });
- $(document).scroll(function() {
- var valor = $('body').outerHeight() - 700;
- if ($(this).scrollTop() > 100) {
- $('.bottom_actions').addClass('bottom_actions_fixed');
- } else {
- $('.bottom_actions').removeClass('bottom_actions_fixed');
- }
- if ($(this).scrollTop() > valor) {
- $('.bottom_actions').removeClass('bottom_actions_fixed');
- } else {
- $('.bottom_actions').addClass('bottom_actions_fixed');
- }
- // Exercise warning fixed at the top
- var fixed = $("#exercise_clock_warning");
- if (fixed.length) {
- if (!fixed.attr('data-top')) {
- // If already fixed, then do nothing
- if (fixed.hasClass('subnav-fixed')) return;
- // Remember top position
- var offset = fixed.offset();
- fixed.attr('data-top', offset.top);
- fixed.css('width', '100%');
- }
- if (fixed.attr('data-top') - fixed.outerHeight() <= $(this).scrollTop()) {
- fixed.addClass('navbar-fixed-top');
- fixed.css('width', '100%');
- } else {
- fixed.removeClass('navbar-fixed-top');
- fixed.css('width', '100%');
- }
- }
- // Admin -> Settings toolbar.
- if ($('body').width() > 959) {
- if ($('.new_actions').length) {
- if (!$('.new_actions').attr('data-top')) {
- // If already fixed, then do nothing
- if ($('.new_actions').hasClass('new_actions-fixed')) return;
- // Remember top position
- var offset = $('.new_actions').offset();
- var more_top = 0;
- if ($('.subnav').hasClass('new_actions-fixed')) {
- more_top = 50;
- }
- $('.new_actions').attr('data-top', offset.top + more_top);
- }
- // Check if the height is enough before fixing the icons menu (or otherwise removing it)
- // Added a 30px offset otherwise sometimes the menu plays ping-pong when scrolling to
- // the bottom of the page on short pages.
- if ($('.new_actions').attr('data-top') - $('.new_actions').outerHeight() <= $(this).scrollTop() + 30) {
- $('.new_actions').addClass('new_actions-fixed');
- } else {
- $('.new_actions').removeClass('new_actions-fixed');
- }
- }
- }
- });
- function get_url_params(q, attribute) {
- var hash;
- if (q != undefined) {
- q = q.split('&');
- for(var i = 0; i < q.length; i++){
- hash = q[i].split('=');
- if (hash[0] == attribute) {
- return hash[1];
- }
- }
- }
- }
- function checkBrand() {
- if ($('.subnav').length) {
- if ($(window).width() >= 969) {
- $('.subnav .brand').hide();
- } else {
- $('.subnav .brand').show();
- }
- }
- }
- function setCheckbox(value, table_id) {
- checkboxes = $("#"+table_id+" input:checkbox");
- $.each(checkboxes, function(index, checkbox) {
- checkbox.checked = value;
- if (value) {
- $(checkbox).parentsUntil("tr").parent().addClass("row_selected");
- } else {
- $(checkbox).parentsUntil("tr").parent().removeClass("row_selected");
- }
- });
- return false;
- }
- function action_click(element, table_id) {
- d = $("#"+table_id);
- if (!confirm('{{ "ConfirmYourChoice"|get_lang | escape('js')}}')) {
- return false;
- } else {
- var action =$(element).attr("data-action");
- $('#'+table_id+' input[name="action"] ').attr("value", action);
- d.submit();
- return false;
- }
- }
- /**
- * Generic function to replace the deprecated jQuery toggle function
- * @param inId : id of block to hide / unhide
- * @param inIdTxt : id of the button
- * @param inTxtHide : text one of the button
- * @param inTxtUnhide : text two of the button
- * @todo : allow to detect if text is from a button or from a <a>
- */
- function hideUnhide(inId, inIdTxt, inTxtHide, inTxtUnhide) {
- if ($('#'+inId).css("display") == "none") {
- $('#'+inId).show(400);
- $('#'+inIdTxt).attr("value", inTxtUnhide);
- } else {
- $('#'+inId).hide(400);
- $('#'+inIdTxt).attr("value", inTxtHide);
- }
- }
- function expandColumnToogle(buttonSelector, col1Info, col2Info) {
- $(buttonSelector).on('click', function (e) {
- e.preventDefault();
- col1Info = $.extend({
- selector: '',
- width: 4
- }, col1Info);
- col2Info = $.extend({
- selector: '',
- width: 8
- }, col2Info);
- if (!col1Info.selector || !col2Info.selector) {
- return;
- }
- var col1 = $(col1Info.selector),
- col2 = $(col2Info.selector);
- $('#expand').toggleClass('hide');
- $('#contract').toggleClass('hide');
- if (col2.is('.col-md-' + col2Info.width)) {
- col2.removeClass('col-md-' + col2Info.width).addClass('col-md-12');
- col1.removeClass('col-md-' + col1Info.width).addClass('hide');
- return;
- }
- col2.removeClass('col-md-12').addClass('col-md-' + col2Info.width);
- col1.removeClass('hide').addClass('col-md-' + col1Info.width);
- });
- }
- // Load ckeditor plugins
- if (typeof CKEDITOR !== 'undefined') {
- // External plugins not part of the default Ckeditor package.
- var plugins = [
- 'asciimath',
- 'asciisvg',
- 'audio',
- 'ckeditor_wiris',
- 'dialogui',
- 'glossary',
- 'leaflet',
- 'mapping',
- 'maximize',
- 'mathjax',
- 'oembed',
- 'toolbar',
- 'toolbarswitch',
- 'video',
- 'wikilink',
- 'wordcount',
- 'youtube',
- 'flash',
- 'inserthtml',
- 'qmarkersrolls',
- 'image2_chamilo'
- ];
- plugins.forEach(function (plugin) {
- CKEDITOR.plugins.addExternal(
- plugin,
- _p.web_lib + '{{ 'javascript/ckeditor/plugins/' }}' + plugin + '/'
- );
- });
- /**
- * Function use to load templates in a div
- **/
- var showTemplates = function (ckeditorName) {
- var editorName = 'content';
- if (ckeditorName && ckeditorName.length > 0) {
- editorName = ckeditorName;
- }
- CKEDITOR.editorConfig(CKEDITOR.config);
- CKEDITOR.loadTemplates(CKEDITOR.config.templates_files, function (a) {
- var templatesConfig = CKEDITOR.getTemplates("default");
- var $templatesUL = $("<ul>");
- if (templatesConfig) {
- $.each(templatesConfig.templates, function () {
- var template = this;
- var $templateLi = $("<li>");
- var templateHTML = "<img src=\"" + templatesConfig.imagesPath + template.image + "\" ><div>";
- templateHTML += "<b>" + template.title + "</b>";
- if (template.description) {
- templateHTML += "<div class=description>" + template.description + "</div>";
- }
- templateHTML += "</div>";
- $("<a>", {
- href: "#",
- html: templateHTML,
- click: function (e) {
- e.preventDefault();
- if (CKEDITOR.instances[editorName]) {
- CKEDITOR.instances[editorName].setData(template.html, function () {
- this.checkDirty();
- });
- }
- }
- }).appendTo($templateLi);
- $templatesUL.append($templateLi);
- });
- }
- $templatesUL.appendTo("#frmModel");
- });
- };
- }
- function doneResizing() {
- var widthWindow = $(window).width();
- if ((widthWindow>=1024) && (widthWindow>=768)) {
- $("#profileCollapse").addClass("in");
- $("#courseCollapse").addClass("in");
- $("#skillsCollapse").addClass("in");
- $("#sn-sidebar-collapse").addClass("in");
- $("#user_image_block").removeClass("text-muted");
- } else {
- $("#profileCollapse").removeClass("in");
- $("#courseCollapse").removeClass("in");
- $("#skillsCollapse").removeClass("in");
- $("#sn-avatar-one").removeClass("in");
- $("#user_image_block").addClass("text-muted");
- }
- }
- function addMainEvent(elm, evType, fn, useCapture) {
- if (elm.addEventListener) {
- elm.addEventListener(evType, fn, useCapture);
- return true;
- } else if (elm.attachEvent) {
- elm.attachEvent('on' + evType, fn);
- } else {
- elm['on'+evType] = fn;
- }
- }
- function copyTextToClipBoard(elementId)
- {
- /* Get the text field */
- var copyText = document.getElementById(elementId);
- /* Select the text field */
- copyText.select();
- /* Copy the text inside the text field */
- document.execCommand("copy");
- }
|