The Best Spanish online language courses 2024 Comparison (2024)

Most popular destinations for Spanish courses in in Cuba

#1 Havana Spanish schools

The Best Spanish online language courses 2024 Comparison (1)

Price comparison: 1 week Spanish course

Sort by: Best rated (overall)|Most popular|City|Best rated teaching quality|Best rated social activities|Lowest price

All 106 Spanish courses in Cuba

Cuba map with schools offering courses

The Best Spanish online language courses 2024 Comparison (2)

The Best Spanish online language courses 2024 Comparison (3)The Best Spanish online language courses 2024 Comparison (4)The Best Spanish online language courses 2024 Comparison (5)

Q&A - Questions and answers about Cuba

  • At the time of writing, we have partner schools in Havana and Santiago de Cuba. In case you are flexible with the location, just let us know and we cand send you more information.

    Ana Carolina Dos Santos, LanguageCourse.Net - Feb 12, 2023

  • The minimum required age to book a Spanish programme in Havana is 18 years old.

    Ana Carolina Dos Santos, LanguageCourse.Net - Nov 15, 2022

  • The lessons take place on weekdays, from Monday to Friday, and accommodation is typically booked from the Sunday before your course begins until the Saturday after your last day of class.

    Ana Carolina Dos Santos, LanguageCourse.Net - Oct 24, 2022

  • For students from 18 years old and above, our partner schools in Santiago de Cuba and in Havana can offer a Spanish programme including homestay accommodation.

    Ana Carolina, LanguageCourse.net - Jun 16, 2022

    FAQ about courses in Cuba

    • Corazón Cuba has received the best overall rating in Havana.

    • Corazón Cuba, located in Lamparilla 311, entre Aguacate y Compostella, Habana Vieja, Havana has been voted as the school with the best location in Cuba.

    • You can take courses for just 1 week. For significant progress opt for longer durations.

    • In Cuba electricity is 110 Volt and 60 Hz. Plug type A, B, C.

    • In Cuba the following courses are offered specifically for business Spanish: Business Spanish Private.

      course destinations

      Spanish schools in Cuba

      • Havana (33 courses)

      Spanish schools in the rest of the world

      • Argentina (204 courses)
      • Australia (5 courses)
      • Austria (9 courses)
      • Belgium (4 courses)
      • Bolivia (20 courses)
      • Brazil (15 courses)
      • Canada (15 courses)
      • Chile (55 courses)
      • Colombia (107 courses)
      • Costa Rica (177 courses)
      • Czech Republic (37 courses)
      • Dominican Republic (32 courses)
      • Ecuador (131 courses)
      • England UK (64 courses)
      • France (37 courses)
      • Germany (104 courses)
      • Guatemala (24 courses)
      • Hong Kong (3 courses)
      • Hungary (10 courses)
      • India (1 course)
      • Ireland (10 courses)
      • Italy (59 courses)
      • Japan (5 courses)
      • Latvia (2 courses)
      • Mexico (210 courses)
      • Netherlands (23 courses)
      • Northern Ireland (1 course)
      • Norway (1 course)
      • Panama (129 courses)
      • Peru (116 courses)
      • Poland (23 courses)
      • Portugal (10 courses)
      • Russia (2 courses)
      • Scotland (1 course)
      • Singapore (6 courses)
      • Spain (2276 courses)
      • Switzerland (25 courses)
      • Tunisia (8 courses)
      • Turkey (2 courses)
      • Ukraine (1 course)
      • Uruguay (38 courses)
      • USA (77 courses)
      • Venezuela (8 courses)
`; } } jQuery("#activeFilters, #activeFiltersBot").html(htmlFilters);var results_ids = "#filterResult";if (intersec.length > 2) {results_ids += ", #filterResultBot";} else {jQuery("#filterResultBot").css('display', 'none');}if (jQuery("#juniorIntro, #topCityWrap").length > 0) { if (htmlFilters) {jQuery("#juniorIntro, #topCityWrap").fadeOut(400, function() {jQuery(results_ids).css('display', 'inline-block');scroll_if_anchor('#filterResult'); }); }} else {jQuery(results_ids).css('display', 'inline-block');scroll_if_anchor('#filterResult');} if (!htmlFilters) { jQuery("#filterResult, #filterResultBot").css('display', 'none'); }jQuery("#filterNum, #filterNumBot").text(replacedString); // check if there's no checkbox filter checked before hiding the whole filterResult} else if (!jQuery(".filterIndicator").hasClass("isACheckBox") && !jQuery(".filterIndicator").hasClass("isADropDown")) { jQuery("#filterResult, #filterResultBot").css('display', 'none'); jQuery("#juniorIntro, #topCityWrap").fadeIn();} else { // if there are checkbox filter checked but no other filter running, update the message accordingly and remove all non-checkboxes pills (.filterIndicator) var str; if (intersec.length > 0) { str = " Spanish courses match the following filters: "; } else { str = "No results found that match the following filters:"; } var replacedString = str.replace("", intersec.length ); jQuery("#juniorIntro").hide(400); jQuery(".topCityWrap").slideUp(); jQuery("#filterNum, #filterNumBot").text(replacedString); jQuery('.filterIndicator:not(.isACheckBox):not(.isADropDown)').remove(); } } function setCookie(name, value) { document.cookie = name + "=" + (value || "") + "; path=/"; } function storeFunctionCall(functionName, parameters) { const serializedFunctionCall = JSON.stringify({functionName, parameters}); setCookie('functionCall', serializedFunctionCall); document.getElementById("cover-spin").style.display = "block"; window.location = generalFacetURL; }function filter_accommo(enable_acco_list) {filter_results['accommo'] = [];if (enable_acco_list.length > 0) {for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['accommo_types'].length > 0) {var inters = enable_acco_list.filter(function(value) {return -1 !== schools[id]['accommo_types'].indexOf(value)});if (inters.length > 0) {filter_results['accommo'].push(id);}}}} else {// No filterfilter_results['accommo'] = filter_results['all'];}apply_all_filters();}function filter_subcats(enable_cat_list) {filter_results['subcats'] = [];if (enable_cat_list.length > 0) {for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (enable_cat_list.includes(parseInt(schools[id]['subcategory'])))filter_results['subcats'].push(id);}}apply_all_filters();}function filter_lessons(min, max) { if (!isFacetJs) { storeFunctionCall('filter_lessons', [handleIndex, (handleIndex ? max : min)]); return; }filter_results['lessons'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['lessons_per_week'].length > 0) {if (parseInt(schools[id]['lessons_per_week']) >= min && parseInt(schools[id]['lessons_per_week']) <= max) {filter_results['lessons'].push(id);}}}apply_all_filters();}function filter_students(min, max) { if (!isFacetJs) { storeFunctionCall('filter_students', [handleIndex, (handleIndex ? max : min)]); return; }filter_results['students'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['max_students'].length > 0) {if (parseInt(schools[id]['max_students']) >= min && parseInt(schools[id]['max_students']) <= max) {filter_results['students'].push(id);}}}apply_all_filters();}function filter_rating(min) { if (!isFacetJs) { storeFunctionCall('filter_rating', [...arguments]); return; }if (min > 0) {filter_results['rating'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['rating'].length > 0) {if (parseFloat(schools[id]['rating']) >= min) {filter_results['rating'].push(id);}}}} else {// No filterfilter_results['rating'] = filter_results['all'];}apply_all_filters();} function filter_checkbox(checkboxValue, isChecked, filterType) { if (!isFacetJs) { storeFunctionCall('filter_checkbox', [...arguments]); return; } const checkboxValueToNum = +checkboxValue; const checkedCheckboxes = jQuery(`#${filterType} input:checked`); const type = filterType.replace("checkBox_", ""); const checksLength = checkedCheckboxes.length; // Reset array if previously zero checks (isChecked && checksLength === 1) && (filter_results[type] = []); for (let i = filter_results['all'].length - 1; i >= 0; i--) { const id = filter_results['all'][i]; // Normalize course value as an array always to simplify further calculations const courseVal = Array.isArray(schools[id][type]) ? schools[id][type].map(Number) : [+schools[id][type]]; const filterArr = filter_results[type]; // Determine if checkboxValue is an array and handle accordingly const matchCondition = courseVal.includes(checkboxValueToNum); if (matchCondition) { // Include the course id in the filter array if the checked checkbox value is in the looping course value and not already present in the filter array if (isChecked) { !filterArr.includes(id) && filterArr.push(id); // Remove the course id from the filter array if the unchecked checkbox value is in the looping course value and doesn't match to other checked values in the case there are currently other checked checkboxes } else if (!isChecked) { // Before removing the current looping course, ensure no other checked checkboxes match any of its course values const allCheckedValues = checkedCheckboxes.map(function() { return +jQuery(this).val(); }).get(); const isPresentInOtherChecks = courseVal.some(val => allCheckedValues.includes(+val)); if (!isPresentInOtherChecks) { const index = filterArr.indexOf(id); if (index > -1) filterArr.splice(index, 1); } } } } // Reset array if currently zero checks if (checksLength === 0) { filter_results[type] = filter_results['all'].slice(); // slice with empty parameter to create a shallow copy of the array } apply_all_filters(false, true, type, checksLength === 0); } function filter_dropdown(dropDownValue, filterType) { if (!isFacetJs) { storeFunctionCall('filter_dropdown', [...arguments]); return; } const type = filterType.replace("_filter", ""); // Reset array if val is "0" if (dropDownValue === 0) { filter_results[type] = filter_results['all'].slice(); } else { for (let i = filter_results['all'].length - 1; i >= 0; i--) { const id = filter_results['all'][i]; const courseVal = schools[id][type]; const filterArr = filter_results[type]; let matchCondition = false; if (type === "course_duration") { matchCondition = courseVal.map(Number).includes(dropDownValue); } if (type === "student_age") { const [minAge, maxAge] = courseVal; matchCondition = (+minAge === 0 || +minAge <= dropDownValue) && (+maxAge === 0 || +maxAge >= dropDownValue); } if (matchCondition) { !filterArr.includes(id) && filterArr.push(id); } else { const index = filterArr.indexOf(id); if (index > -1) filterArr.splice(index, 1); } } } apply_all_filters(false, false, type, false, true); }function filter_prices(min, max) { if (!isFacetJs) { storeFunctionCall('filter_prices', [handleIndex, (handleIndex ? max : min)]); return; }filter_results['prices'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['course_price'].length > 0) {if (parseInt(schools[id]['course_price']) >= min && parseInt(schools[id]['course_price']) <= max)filter_results['prices'].push(id);}}apply_all_filters();} function filter_price_per_lesson(min, max) { if (!isFacetJs) { storeFunctionCall('filter_price_per_lesson', [handleIndex, (handleIndex ? max : min)]); return; } filter_results['price_per_lesson'] = []; for (var i = filter_results['all'].length - 1; i >= 0; i--) { var id = filter_results['all'][i]; if (schools[id]['price_per_lesson'].length > 0) { if (parseInt(schools[id]['price_per_lesson']) >= min && parseInt(schools[id]['price_per_lesson']) <= max) filter_results['price_per_lesson'].push(id); } } apply_all_filters(); }function onChangeSubcatFilter() {var cat_list = [];var subcatNavSpan = document.querySelectorAll("#subcatNav ul li span");for (var i = 0, len = subcatNavSpan.length; i < len; i++) {if (subcatNavSpan[i].getElementsByTagName("input")[0].checked) {cat_list.push( parseInt( subcatNavSpan[i].attributes['cat_type'].value ) );}}filter_subcats(cat_list);}function reset_subcats() {filter_results['subcats'] = filter_results['all'];var subcatNavSpan = document.querySelectorAll("#subcatNav ul li span");for (var i = 0, len = subcatNavSpan.length; i < len; i++) {subcatNavSpan[i].getElementsByTagName("input")[0].checked = true;}apply_all_filters();}function onChangeAccoFilter() {var acco_list = [];var accommoNavSpan = document.querySelectorAll("#accommoNav ul li span");for (var i = 0, len = accommoNavSpan.length; i < len; i++) {if (accommoNavSpan[i].getElementsByTagName("input")[0].checked) {acco_list.push( parseInt( accommoNavSpan[i].attributes['acco_type'].value ) );}};filter_accommo(acco_list);}function reset_accommo() {filter_results['accommo'] = filter_results['all'];var accommoNavSpan = document.querySelectorAll("#accommoNav ul li span");for (var i = 0, len = accommoNavSpan.length; i < len; i++) {accommoNavSpan[i].getElementsByTagName("input")[0].checked = false;};apply_all_filters();}function reset_prices() {filter_results['prices'] = filter_results['all'];jQuery("#coursePrice_left").text(rangesSliders["course_price"][0]);jQuery("#coursePrice_right").text(rangesSliders["course_price"][1]);jQuery('#sliderRange_coursePrice').slider("option", "values", [rangesSliders["course_price"][0], rangesSliders["course_price"][1]]);apply_all_filters();} function reset_price_per_lesson() { filter_results['price_per_lesson'] = filter_results['all']; jQuery("#pricePerLesson_left").text(rangesSliders["price_per_lesson"][0]); jQuery("#pricePerLesson_right").text(rangesSliders["price_per_lesson"][1]); jQuery('#sliderRange_pricePerLesson').slider("option", "values", [rangesSliders["price_per_lesson"][0], rangesSliders["price_per_lesson"][1]]); apply_all_filters(); }function reset_lessons() {filter_results['lessons'] = filter_results['all'];jQuery("#numOfLessons_left").text(rangesSliders["lessons_per_week"][0]);jQuery("#numOfLessons_right").text(rangesSliders["lessons_per_week"][1]);jQuery('#sliderRange_numOfLessons').slider("option", "values", [rangesSliders["lessons_per_week"][0], rangesSliders["lessons_per_week"][1]]);apply_all_filters();}function reset_students() {filter_results['students'] = filter_results['all'];jQuery("#numOfStudents_left").text(rangesSliders["max_students"][0]);jQuery("#numOfStudents_right").text(rangesSliders["max_students"][1]);jQuery('#sliderRange_numOfStudents').slider("option", "values", [rangesSliders["max_students"][0], rangesSliders["max_students"][1]]);apply_all_filters();}function reset_rating() { localStorage.removeItem('selectedFilters'); localStorage.removeItem('filterValues');filter_rating(0);jQuery('#ratingStarsLeftBar use').removeClass('starFiltselected');} function reset_checkbox(type) { jQuery(`#checkBox_${type} input:checked`).click(); } function reset_student_age() { jQuery('#student_age_filter ul li:first-child a').click(); } function reset_course_duration() { jQuery('#course_duration_filter ul li:first-child a').click(); }function filter_details(filter, value) {var detail = "";var starEl = jQuery('#ratingStarsLeftBar .starFiltselected');var ratingValue = parseInt(starEl.last().data('value'), 10) || value;switch(filter) {case "lessons": detail = ": [" + jQuery('#sliderRange_numOfLessons').slider("option", "values")[0] + " - " + jQuery('#sliderRange_numOfLessons').slider("option", "values")[1] + "]"; break;case "students": detail = ": [" + jQuery('#sliderRange_numOfStudents').slider("option", "values")[0] + " - " + jQuery('#sliderRange_numOfStudents').slider("option", "values")[1] + "]"; break;case "prices": detail = ": [" + jQuery('#sliderRange_coursePrice').slider("option", "values")[0] + "€ - " + jQuery('#sliderRange_coursePrice').slider("option", "values")[1] + "€]"; break; case "price_per_lesson": detail = ": [" + jQuery('#sliderRange_pricePerLesson').slider("option", "values")[0] + "€ - " + jQuery('#sliderRange_pricePerLesson').slider("option", "values")[1] + "€]"; break;case "rating": detail = ": [" + ratingValue +" stars or better]"; break;case "accommo": detail += ": " + jQuery("#checkBox_accommo input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "school": detail += ": " + jQuery("#checkBox_school input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "cities": detail += ": " + jQuery("#checkBox_cities input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "room_occupancy": detail += ": " + jQuery("#checkBox_room_occupancy input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "language_level": detail += ": " + jQuery("#checkBox_language_level input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "accommodation_type": detail += ": " + jQuery("#checkBox_accommodation_type input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "meal_plans": detail += ": " + jQuery("#checkBox_meal_plans input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "course_duration": const cDurVal = jQuery("#course_duration_dd_filter .sel_filter").text(); detail += ": " + cDurVal + " " + (+cDurVal === 1 ? "week" : "weeks"); break; case "student_age": detail += ": " + jQuery("#student_age_dd_filter .sel_filter").text() + " years old"; break;default:;}return detail;} function saveFiltersInLocalStorage() { const selectedFilters = { prices: filter_results['prices'], lessons: filter_results['lessons'], students: filter_results['students'], rating: filter_results['rating'], path: window.location.pathname }; const filterValues = { rating_val: filter_results['rating_val'] }; localStorage.setItem('selectedFilters', JSON.stringify(selectedFilters)); localStorage.setItem('filterValues', JSON.stringify(filterValues)); }

Do you need a visa?


Country of Nationality:

Duration: weeks

Warning!

Please choose a Monday as a course starting date.

";if (pc_result['prices']['discount_tuition'] > 0) {tpl += "" + pc_result['prices']['tuition_before_so'] + currency + "";} else {tpl += "";}tpl += Math.ceil(pc_result['prices']['tuition_before_so'] - pc_result['prices']['discount_tuition']) + currency + "" + pc_result['prices']['course_name'] + "";if (pc_result['prices']['accommodation_accom'] > 0 && pc_result['prices']['includes_accommodation'] != 1) {tpl += "" + pc_result['prices']['accommodation_accom'] + currency + "" + pc_result['prices']['accommodation_name'] + "";}if (pc_result['prices']['inscription']>0) {tpl += "" + pc_result['prices']['inscription'] + currency + "School's administrative fee";}if (pc_result['prices']['includes_accommodation'] != 1 && pc_result['prices']['accommodation_fee']>0) {tpl += "" + pc_result['prices']['accommodation_fee'] + currency + "One time accommodation fee charged by school";}if (pc_result['prices']['hs_course'] > 0 && selected_date!=0) {tpl += "" + pc_result['prices']['hs_course'] + currency + "High season supplement (Course)";}if (pc_result['prices']['hs_accommodation'] > 0 && selected_date!=0) {tpl += "" + pc_result['prices']['hs_accommodation'] + currency + "High season supplement (Accommodation)";}if (pc_result['prices']['hasCourseOffer'] == true && pc_result['prices']['offerCourseDiscount'] > 0) {tpl += "" + "-" + pc_result['prices']['offerCourseDiscount'] + currency + "" + pc_result['prices']['textSpecialOfferCourse'] + "";}if (pc_result['prices']['hasAccommodationOffer'] == true && pc_result['prices']['offerAccommodationDiscount'] > 0) {tpl += "" + "-" + pc_result['prices']['offerAccommodationDiscount'] + currency + "" + pc_result['prices']['textSpecialOfferAccommodation'] + "";}tpl += "";var total = pc_result['prices']['total'];var total_nodiscount = pc_result['prices']['subtotal'] + pc_result['prices']['offerCourseDiscount'] + pc_result['prices']['offerAccommodationDiscount'];if (selected_date==0) {var hs_course = parseInt(pc_result['prices']['hs_course']);if (isNaN(hs_course)) {hs_course=0;}var hs_accommo = parseInt(pc_result['prices']['hs_accommodation']);if (isNaN(hs_accommo)) {hs_accommo=0;}total -= ( hs_course + hs_accommo);total_nodiscount -= ( hs_course + hs_accommo);}if (total_nodiscount > total) {tpl += "" + Math.ceil(total_nodiscount) + currency + "";} else {tpl += "";}tpl += Math.ceil(total) + currency + "
";if (selected_date!=0) {tpl += "Total final price including seasonal supplements, school registration fees and applicable sales tax.";} else {tpl += "Total final price including school registration fees and applicable sales tax.";}//tpl += jQuery("#courseSelected_" + school_id).attr("extra-info");tpl += jQuery("#infotooltip_" + school_index).attr("extra-info");jQuery("#infotooltip_" + school_index).attr("data-original-title", tpl);} ");const alterTooltipf = function() {if (jQuery(".mobileCloseTooltip").length == 0) {jQuery('.tooltip-inner').prepend(newInsert);}}if (aDataToggleTooltip.length !== 0 ) {let i;for (i = aDataToggleTooltip.length - 1; i >= 0; i--) {const el = jQuery(aDataToggleTooltip[i]);el.on('inserted.bs.tooltip', alterTooltipf)}}}// touch screen device detectionif ( ("ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch) === true ) {// put close button in tooltips when touchscreen is detected setTimeout(function() { itsTouchScreen(); }, 2500);}function destroyFlagToolEtc() {// destroy language flags tooltip when mobile// Mobile search box micro-plugin variables// const searchQuery = jQuery("#search_query");// destroy the flags info tooltip in mobileif (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}langListPop.off('hide.bs.popover');// turn off the event to re-init the tooltip after flags selector popover hideslangListPop.on('show.bs.popover', function() {langListPop.off('hide.bs.popover');});/** Mobile search box micro-plugin **/// start with transparent in order to don't hide magnifying glass icon// searchQuery.css('background-color', 'transparent');// bind focus event// searchQuery.on('focus', function() {// const that = jQuery(this);// to calculate search box deployment final width// const totalSearchFieldWidth = jQuery("#cBoxTabWrap").outerWidth() - jQuery("#searchForm_small").outerWidth() - 87;// background-color play to always show icon and have white background in search field// that.css('background-color', '#fff');// Show 'searchPlaceholderVar' variable is defined in the 'page_header.tpl' then animate the search field// that.attr('placeholder', searchPlaceholderVar).animate({// width: totalSearchFieldWidth,// }, 400, "swing", function() { // jQuery("#magniFyingGlass").hide(); // jQuery("#closeSearchBar").show(); // });// });//bind blur event// searchQuery.on('blur', function() {// const that = jQuery(this);// const glyphiconSearch = jQuery("#searchForm_small").find(".fa-search");// //contactBoxPhonesMobText.css('color', '');// // z-index play// glyphiconSearch.css('z-index', '4');// that.animate({// // animate back to zero width to close the field// width: 0,// }, 400, function() { // // jQuery("#magniFyingGlass").show(); // // jQuery("#closeSearchBar").hide();// // // background and z-index play// // that.css('background-color', 'transparent');// // glyphiconSearch.css('z-index', '');// });// });/** END OF => Mobile search box micro-plugin **/}// La siguiente función "slidingMenu();" sirve para mostrar y ocultar el sliding facetted menú lateral en el responsive modefunction slidingMenu() {// toggle side menuconst leftMenuBtns = jQuery("#filterMobBut, #cbp-spmenu-s2, #showLeft, #closeButtonSlideMenuTop, #closeButtonSlideMenuBot");// elements for toggling classes overconst bodyContent = jQuery("#body_content");const menuLeft = jQuery("#cbp-spmenu-s2");const closeButTopEl = jQuery('#closeButtonSlideMenuTop')[0];const closeButBotEl = jQuery('#closeButtonSlideMenuBot')[0];leftMenuBtns.on('click', function(event) {const transitionEvent = whichTransitionEvent();// No need of using event.stopPropagation() anymore writing the condition below!// to check if click is originated from outside the side menu itself// https://css-tricks.com/dangers-stopping-event-propagation/#article-header-id-2if (!jQuery(event.target).closest('#wrapSlideMenu').length || (event.target == closeButTopEl && event.currentTarget.id != "cbp-spmenu-s2") || (event.target == closeButBotEl && event.currentTarget.id != "cbp-spmenu-s2") ) {menuLeft.toggleClass('cbp-spmenu-open');// triggered only when closing the sidebar, so detect the transition end before changing z-indexif (bodyContent.hasClass('cbp-spmenu-opened')) {// .one() => because if the event handler is not removed after its called, the class will be removed from the second triggering and so on (the handler continue running if not cancelled)menuLeft.one(transitionEvent, function() {bodyContent.removeClass('cbp-spmenu-opened');});} else {// triggered only when opening the sidebar: no need of changing z-indexbodyContent.addClass('cbp-spmenu-opened');}}});}// END of slidingMenu() logicif (currentSize.width <= 1024) {slidingMenu();}// trigger reflows on resize width from desktop to mobilejQuery(window).on('widthOnlyResizedMobile', function() {var leftMenuBtns = jQuery("#filterMobBut, #cbp-spmenu-s2, #showLeft, #closeButtonSlideMenuTop, #closeButtonSlideMenuBot");leftMenuBtns.off('click');slidingMenu();}); /***********************************//** Main school_overview reflows **//*********************************/// school_overview repositions when resizing from desktop to mobilefunction mobileResp() {const contentPanel = jQuery("#content_panel");const schoolContainer = contentPanel.find(".schoolContainer");let starting_date = jQuery("#calendar_date").val();const schoolDetailsDropWrap = contentPanel.find(".schoolDetailsDropWrap");const resultsDetails2 = jQuery(".resultsDetails2"); // const reflowBlocks = jQuery(".reflowBlocks");const ratingWrap = jQuery(".ratingBlockWrap").find(".ratingWrap");// var textInsideCalc = jQuery('.textInsideCalc');// var calcModal = jQuery("#calcModal");// calcModal.appendTo(textInsideCalc);// modal changes on resizejQuery(".modal-backdrop").css('display', '');// calcModal.addClass('modal fade').removeClass('modalDisplay');jQuery("#decorator_xx10").addClass('modal-dialog');// jQuery("#modalContent").addClass('modal-content');// school_overview FACETS onlycontentPanel.find(".wrappableDivFacets").addClass('collapse').css('height', '');/*reflowBlocks.each(function() { const that = jQuery(this); const closest = that.closest(".middleAndResults"); closest.find(".resultsDetails2").insertAfter(that); that.insertAfter(closest.find(".mainRatingWrap")); });*/ resultsDetails2.each(function() { const that = jQuery(this); that.insertAfter(that.closest(".middleAndResults").find(".reflowBlocks")); });schoolDetailsDropWrap.each(function(){const that = jQuery(this);that.closest(".middleAndResults").find('.buttonToSchoolWrap').appendTo(that.closest('.schoolRightContentWrap'));// that.parent().find('.resultsLogos').after(that.find('.school_overview_p_inside_box_results'));if (that.hasClass('secondarySchoolBlock')) {that.appendTo(that.closest('.middleTop').find('.contentSideImg'));}});ratingWrap.each(function() {const that = jQuery(this);that.after(that.prev());});schoolContainer.each(function() {const that = jQuery(this);that.find(".resultsBand").prependTo(that.find(".middleTop"));// schoolDetailsDropWrap.css('width', '');that.find(".newBadge").insertAfter(that.find(".schoolPictWrap"));that.find(".schoolStrenghtsWrap").appendTo(that.find(".resultsDetails2")); that.find(".schoolDetailsDropWrap").insertAfter(that.find(".mainRatingWrap"));});// school_overview calculator partjQuery("#mob_duration_sel").html(jQuery("#duration_sel").html());if (starting_date == "") {starting_date = jQuery("#calendar_date_intro").html();jQuery("#calendarIndicator").html("+").addClass("calNumEmpty").removeClass("calNumFilled");} else if (typeof(starting_date) !== 'undefined') {jQuery("#calendarIndicator").html( starting_date.substr(0, starting_date.indexOf(' ')) ).addClass("calNumFilled").removeClass("calNumEmpty");}// jQuery("#mob_calendar_date").html(starting_date);jQuery("#mob_course_category_sel").html(jQuery("#course_category_sel").html());jQuery("#mob_accommodation_type_sel").html(jQuery("#accommodation_type_sel").html());jQuery(".modal-backdrop").css('display', '');// calcModal.addClass('modal fade').removeClass('modalDisplay');jQuery("#decorator_xx10").addClass('modal-dialog');// jQuery("#modalContent").addClass('modal-content');jQuery("span.city_video_big").addClass("city_video").removeClass("city_video_big");// school_overview secondary schools collapsibles// jQuery('[id^=schoolAltRatings], [id^=dataSchool]').collapse('show');// jQuery('[id^=S_Name]').removeClass("DDColl").addClass("DDExp");}// Main school_overview desktop repositionsfunction schoolOverviewReposition() {const contentPanel = jQuery("#content_panel");const schoolContainer = contentPanel.find(".schoolContainer");const schoolRightContentWrap = jQuery(".schoolRightContentWrap");const resultsDetails2_1 = jQuery(".resultsDetails2_1");const ratingWrap = jQuery(".ratingBlockWrap").find(".ratingWrap");const middleWrap = jQuery('.middleWrap');// var boxedBottWrap = jQuery('#boxedBottWrap');// var calcModal = jQuery("#calcModal");// calcModal.appendTo(boxedBottWrap);schoolContainer.each(function() {const that = jQuery(this);that.find(".resultsBand").insertBefore(that.find(schoolRightContentWrap));that.find(".newBadge").prependTo(that.find(".buttonToSchoolWrap"));that.find(".schoolStrenghtsWrap").insertAfter(that.find(".middleBot")); that.find(".schoolDetailsDropWrap ").appendTo(that.find(".middleTop"))// To avoid elements repositioning flashes during page load// that.find(".contentSideImg, .schoolDetailsDropWrap, .buttonToSchoolWrap").show();});schoolRightContentWrap.each(function() {const that = jQuery(this);// https://es.stackoverflow.com/questions/61505/c%C3%B3mo-hacer-para-aplicar-important-de-css-con-jquery-javascriptif (that.find(".schoolDetailsDropWrap")[0]) {// that.find(".schoolDetailsDropWrap")[0].style.setProperty('width', '88%', 'important');that.find(".buttonToSchoolWrap").appendTo(that.find(resultsDetails2_1));}});// resultsDetails2_1.each(function() {// const that = jQuery(this);// that.closest(".middleAndResults").find(".reflowBlocks").insertAfter(that.closest(".middleAndResults").find(".head_yellow_7"));// });middleWrap.each(function(){const that = jQuery(this);that.after(that.find(".resultsDetails2"));// that.find(".school_overview_p_inside_box_results").prependTo(that.find(".schoolDetailsDropWrap"));});ratingWrap.each(function() {const that = jQuery(this);that.next().after(that);});contentPanel.find(".schoolDetailsDropWrap").find(".wrappableDiv").unwrap();// calcModal.removeClass('modal fade').addClass('modalDisplay');jQuery("#decorator_xx10").removeClass('modal-dialog');// jQuery("#modalContent").removeClass('modal-content');jQuery("span.city_video").addClass("city_video_big").removeClass("city_video");// school_overview FACETS onlycontentPanel.find(".wrappableDivFacets").removeClass('collapse').css('height', 'auto');// school_overview secondary schools collapsibles// jQuery('[id^=schoolPicture]').collapse('hide').height('0px');// jQuery('[id^=S_Name]').removeClass("DDExp").addClass("DDColl");} function trimSchoolDescriptions(textLength, removeLink = false) { function trimToWords(text, wordCount) { // Remove line breaks and extra spaces text = text.replace(/\s+/g, ' ').trim(); const words = text.split(' '); if (words.length <= wordCount) { return text; } let trimmed = words.slice(0, wordCount).join(' '); // Remove any non-alphanumeric characters from the end of the trimmed text trimmed = trimmed.replace(/[^a-zA-Z0-9]+$/, ''); return trimmed + ' ...'; } const elements = document.querySelectorAll('.school_overview_p_inside_box_results_inside'); for (let i = 0; i < elements.length; i++) { const originalText = elements[i].textContent || elements[i].innerText; elements[i].textContent = trimToWords(originalText, textLength); } }if (currentSize.width >= 1025) {schoolOverviewReposition(); trimSchoolDescriptions(22);// const bar_flags_new = jQuery("#bar_flags_new").detach();// bar_flags_new.appendTo("#searchFormSmallWrap");} else { trimSchoolDescriptions(12, true); } jQuery('[id^=schoolPicture]').collapse('hide').height('0px');// trigger reflows to be done in mobile mode when resizing from desktop to mobilejQuery(window).on('widthOnlyResizedMobile', mobileResp);// ... and viceversajQuery(window).on('widthOnlyResizedDesktop', function() {// const mainRatingWrap = jQuery(".mainRatingWrap");schoolOverviewReposition();// jQuery(".resultsDetails2_1").each(function() {// const that = jQuery(this);// that.closest(".middleAndResults").find(mainRatingWrap).prependTo(that);// });});/**************************//** Main school reflows **//************************/function allPagesDesktopReflows() {// const bar_flags_new = jQuery("#bar_flags_new").detach();// ALL pages => flags widget// bar_flags_new.appendTo("#searchFormSmallWrap");// ALL pages => "wechat" "whatsapp" "kakao" & "skype"jQuery("#contactBoxSkype").insertAfter("#contactBoxPhones"); // ALL pages => cBox jQuery("#contactBoxChat").insertBefore("#contactBoxTextareaDiv");// ALL PAGES (footer)// ALL pages where we use bootstrap modalsjQuery('.modal-backdrop.fade.in').css('display', 'none');// All pages but UG (header)jQuery("#searchFormSmallWrap").prependTo("#headSearchBar");} // remove placeholder on focus event jQuery("#searchBarMob .search_query, .searchQueryWrap .search_query").on('focus', function() { jQuery(this).removeAttr('placeholder'); });flagsTooltipInit = function() {if (typeof jQuery().tooltip === 'function') {// destroy lang flags tooltip if flags popover is shownlangListPop.on('show.bs.popover', function() {flagsTooltip.tooltip('destroy');});if (currentSize.width <= 1024) {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}} else {if (!windowMatchObj.mqoh.matches) {// re-init lang flags tooltip when flags popover is hiddenlangListPop.on('hide.bs.popover', function() {jQuery('[data-toggle="tooltipTop"]').tooltip({trigger : 'hover',placement: 'top'});});}if (windowMatchObj.mqoh.matches) {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');langListPop.off('hide.bs.popover');}}}}}// avoid hiding flags selector if the cBox is overlapping itfunction avoidHidingFlags() {if (windowMatchObj.mqoh.matches) { const contactBoxWrapper = jQuery('#contactBoxWrapper');langListPop.on('show.bs.popover', function () {contactBoxWrapper.css('z-index', '10');});langListPop.one('hide.bs.popover', function () {contactBoxWrapper.css('z-index', '');if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}});flagsTooltip.on('show.bs.tooltip', function () {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}});} else {langListPop.off('show.bs.popover hidden.bs.popover');flagsTooltipInit();}}avoidHidingFlags();windowMatchObj.mqoh.addListener(avoidHidingFlags);jQuery(window).on('widthOnlyResized', function() {// restart bind and width in case of window resize in order to don't hide magnifying glass icon// jQuery("#search_query").off('focus blur').css('width', '');});if (currentSize.width <= 1024) {destroyFlagToolEtc();}if (currentSize.width >= 1025) {allPagesDesktopReflows(); } // remove heading middle line if 2 lines if (!(jQuery('#school_overview').length && currentSize.width <= 1024)) { const h2Elements = jQuery('h2'); for (let i = 0; i < h2Elements.length; i++) { const el = jQuery(h2Elements[i]); if (el.find('.titleSep').height() > 40) { el.addClass('removeBorderBottom'); } }; }// execute destroy language flags tooltip + mobile searchbar (triggered only on mobile and only on resize from desktop mode)jQuery(window).on('widthOnlyResizedMobile', function() {// const bar_flags_new = jQuery("#bar_flags_new").detach();destroyFlagToolEtc();// bar_flags_new.appendTo(jQuery("#cBoxTabWrap"));jQuery("#contactBoxChat").insertAfter("#contactBoxTextareaDiv");jQuery("#searchFormSmallWrap").insertAfter("#contactBoxChat");if (typeof getLangSuggestion === "function") {getLangSuggestion(0);}reInitPopover('#changeLanguageFlags'); jQuery("#contactBoxSkype").insertBefore("#sendBlockWrap");});// Triggered only on desktop and only on resize from mobile modejQuery(window).on('widthOnlyResizedDesktop', function() {// ALL PAGES => re-init the tooltip if previously destroyed on mobileallPagesDesktopReflows();if (typeof(flagsTooltip.tooltip) === 'function') {// IMPORTANT: .tooltip('destroy') is asynchronous, and immediate creation of another popover fails, while the previous one is being destroyed [same that happens with .popover('destroy') method].// https://stackoverflow.com/questions/27238938/bootstrap-popover-destroy-recreate-works-only-every-second-time#answer-27345242setTimeout(function() {flagsTooltip.tooltip({trigger : 'hover',placement: 'top'});}, 200);}// ALL PAGES => re-init event handler if previously turned off on mobilelangListPop.on('show.bs.popover', function() {// re-init lang flags tooltip when flags popover is hiddenlangListPop.on('hide.bs.popover', function() {setTimeout(function() {flagsTooltip.tooltip({trigger : 'hover',placement: 'top'});}, 200);});});reInitPopover('body');});}); /* CLOSING BIG WINDOW ONLOAD FUNCTION */

';// right template when container distance to right is more than 300px in desktop mode or the cBox is closed} else if ( distanceToRight > 300 || !contactBoxStatuses.locked ) {return '

';}// always bottom template when mobile mode} else if ( windowWidth <= 1024 ) {return '

';}};if (typeof jQuery().tooltip === 'function') {// init price calculator or price breakdown tooltipstooltipPC.tooltip({trigger : 'hover',placement: function (tooltip, button) { if (button?.hasClass('carouselTooltipBtn')) { return 'bottom'; }const distanceToRight = distanceOfPCToRight();const windowWidth = window.innerWidth;if (windowWidth >= 1025) {// left show when container distance to right is less than 300px in desktop mode or the cBox is openedif ( distanceToRight <= 300 || contactBoxStatuses.locked ) {return 'left';// right show when container distance to right is more than 300px in desktop mode or the cBox is closed} else if ( distanceToRight > 300 || !contactBoxStatuses.locked ) {return 'right';}// always bottom show when mobile mode} else if ( windowWidth <= 1024 ) {return 'bottom';}},html: true,// get templatetemplate: templateTooltipPC()});};// conditionals to right/left/bottom open tooltips -- first select each tooltipfor (i = tooltipPC.length - 1; i >= 0; i--) {// when tooltip is completely visible, alter its HTML inserting or removing classes:jQuery(tooltipPC[i]).on('inserted.bs.tooltip', function() {const windowWidth = window.innerWidth;if (windowWidth >= 1025) {// left show when container distance to right is less than 300px in desktop mode and the cBox is openedif ( distanceOfPCToRight() <= 300 || contactBoxStatuses.locked ) {jQuery('.tooltip').removeClass("tri-left tri-up").addClass("tri-right tri-down");// right show when container distance to right is more than 300px in desktop mode and the cBox is closed} else if ( distanceOfPCToRight() > 300 || !contactBoxStatuses.locked ) {jQuery('.tooltip').removeClass("tri-right tri-up").addClass("tri-left tri-down");}// always bottom show when mobile mode} else if ( windowWidth <= 1024 ) {jQuery('.tooltip').removeClass("tri-down tri-right tri-left").addClass("tri-up");}});}};jQuery(window).on('load', function() {setTimeout(function() {// execute tooltip function above on window loadinitTooltipPC();}, 2000);});jQuery(window).on('load', function() {// university detailsif (jQuery('.ranking-table.variant').length > 0) {jQuery('.ranking-table.variant .provider').tooltip({html: true,template: '

',title: 'loading...',placement: function (tooltip, button) {const windowWidth = window.innerWidth;if( windowWidth <= 1024 ) { placement = 'bottom';} else { placement = 'right';}return placement;},trigger: 'hover click'}).on('show.bs.tooltip', function() {const that = jQuery(this);const title = that.find('.primary_indicators').html();// 'data-original-title' => https://stackoverflow.com/questions/9501921/change-twitter-bootstrap-tooltip-content-on-clickthat.attr('data-original-title', title).tooltip('fixTitle');});} if (window.innerWidth >= 1025) { !jQuery("#radios_lists").length && showAgentImg(); cBoxDesktopReflows(); jQuery("#searchBarMob input").prop('disabled', true); jQuery("#searchBarDesk input").prop('disabled', false); } else { jQuery("#buttonToChat, #contactBoxTextareaDiv, #proActiveBubbleWrapMob").on('click', showAgentImg); jQuery("#proActiveBubbleWrapMob .closeContactBox").on('click', function(e) { e.stopPropagation(); jQuery("#proActiveBubbleWrapMob").fadeOut(300); }); jQuery("#searchBarDesk input").prop('disabled', true); jQuery("#searchBarMob input").prop('disabled', false); } function cBoxDesktopReflows() { jQuery("#contactBoxAgent").insertAfter(jQuery("#closingTab")); } function showAgentImg() { const cBoxAgent = jQuery("#contactBoxAgent"); if (document.getElementById('contactBoxSkype')?.innerHTML !== '') { const cBoxImg = document.getElementById("cBoxImg"); cBoxImg && cBoxImg.setAttribute("src", cBoxImg.getAttribute('data-image')); cBoxAgent.show(); const theSkypeImg = document.getElementById("theSkypeImg"); theSkypeImg && theSkypeImg.setAttribute("src", theSkypeImg.getAttribute('data-image')); const theKakaoImg = document.getElementById("theKakaoImg"); theKakaoImg && theKakaoImg.setAttribute("src", theKakaoImg.getAttribute('data-image')); const theWechatImg = document.getElementById("theWechatImg"); theWechatImg && theWechatImg.setAttribute("src", theWechatImg.getAttribute('data-image')); const weChatQRImg = document.getElementById("weChatQRImg"); weChatQRImg && weChatQRImg.setAttribute("src", weChatQRImg.getAttribute('data-image')); const theWhatsAppImg = document.getElementById("theWhatsAppImg"); theWhatsAppImg && theWhatsAppImg.setAttribute("src", theWhatsAppImg.getAttribute('data-image')); } else { cBoxAgent.hide(); setTimeout(showAgentImg, 100); } } jQuery(window).on('widthOnlyResizedMobile', function() { jQuery("#contactBoxAgent").insertAfter(jQuery("#closingFunctions")); jQuery("#searchBarDesk input").prop('disabled', true); jQuery("#searchBarMob input").prop('disabled', false); }); jQuery(window).on('widthOnlyResizedDesktop', function() { cBoxDesktopReflows(); jQuery("#searchBarMob input").prop('disabled', true); jQuery("#searchBarDesk input").prop('disabled', false); }); });

The Best Spanish online language courses 2024 Comparison (2024)

References

Top Articles
A Beginner's Guide to Real Estate Investing
RLTYco hiring VP/SVP, Corporate Finance &amp; Accounting in Edwards, CO | LinkedIn
Fanvue Lilyroseofficial
[Market] 40 New User-Created Camouflages in the Seek & Destroy Trophy! - News - War Thunder
Craigslist Santa Barbra
Medical Receptionist Hourly Salary
SimonMed Imaging &#8212; Mountain view
SimonMed Imaging - North Las Vegas in 4640 W Craig Rd, North Las Vegas, NV 89032, USA
Costco Gas Price Timnath
Nada Harley Davidson Motorcycles
Grand Canyon Camping: Essential Guide to Top Spots & Tips
Top Cheap Beach Holidays To Have A Blast This Summer
Latest Posts
Cash Flow Statement: Beispiel für die Berechnung
Investment Real Estate: Meaning, Benefits, Risks
Article information

Author: Velia Krajcik

Last Updated:

Views: 6408

Rating: 4.3 / 5 (54 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Velia Krajcik

Birthday: 1996-07-27

Address: 520 Balistreri Mount, South Armand, OR 60528

Phone: +466880739437

Job: Future Retail Associate

Hobby: Polo, Scouting, Worldbuilding, Cosplaying, Photography, Rowing, Nordic skating

Introduction: My name is Velia Krajcik, I am a handsome, clean, lucky, gleaming, magnificent, proud, glorious person who loves writing and wants to share my knowledge and understanding with you.