From 62b2561b0e90cf10cbc74d318c657c18812211a4 Mon Sep 17 00:00:00 2001 From: Dylan Owen Date: Fri, 22 Jun 2018 16:54:48 -0400 Subject: [PATCH] fixed up the logic for upcoming training on the front page --- _includes/upcoming-training.html | 1 + resources/js/functions.js | 109 ++++++++ resources/js/main.js | 439 ------------------------------- 3 files changed, 110 insertions(+), 439 deletions(-) delete mode 100755 resources/js/main.js diff --git a/_includes/upcoming-training.html b/_includes/upcoming-training.html index 0af8267e4..6edc056a8 100644 --- a/_includes/upcoming-training.html +++ b/_includes/upcoming-training.html @@ -4,6 +4,7 @@

Upcoming Training

+ {% assign upcomingTrainings = '' | split: ',' %} {% capture now %}{{site.time | date: '%s' | plus: 0}}{% endcapture %} {% for training in site.trainings %} diff --git a/resources/js/functions.js b/resources/js/functions.js index ce05a1188..681dfe179 100644 --- a/resources/js/functions.js +++ b/resources/js/functions.js @@ -1,3 +1,6 @@ +--- +--- + // Sliding Panel and scala in a nutshell $(document).ready(function() { $('.navigation-panel-button,.navigation-fade-screen,.navigation-panel-close').on('click touchstart', function(e) { @@ -315,3 +318,109 @@ function updatePointer() { pointer.css('top', (target.y)); pointer.css('left', (target.x) * xScale); } + +// TRAININGS +$(document).ready(function() { + // Stop early if the element does not exist, i.e., + // we're not on the front page nor on the Trainings page + if ($('.training-items-list').length === 0) { + return; + } + + var isFrontPage = $('.upcoming-training').length !== 0; + var MAX_TRAININGS = isFrontPage ? 5 : 999; + + {% comment %} Grab all the upcoming training sessions defined in _trainings {% endcomment %} + var scalaLangTrainings = [ + {% for training in site.trainings %}{% if training.date >= site.time %} + { + "title": "{{ training.title | escape }}", + "url": "{{ training.link-out | escape }}", + "location": "{{ training.location | upcase | escape }}", + "when": new Date("{{ training.when | escape }}"), + "organizer": "{{ training.organizer | escape }}" + }, + {% endif %}{% endfor%} + ]; + + function doPopulateTrainingsPane(lightBendTrainings) { + var MONTH_NAMES = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; + + // combine and sort our trainings by date + var allTrainings = scalaLangTrainings.concat(lightBendTrainings) + .sort(function (lhs, rhs) { + var lhsDate = lhs.when.valueOf(); + var rhsDate = rhs.when.valueOf(); + + if (lhsDate === rhsDate) { + return 0; + } + + return (lhsDate > rhsDate) ? 1 : -1; + }); + + var listContainer = $('.training-items-list'); + listContainer.empty(); + for (var i = 0; i < Math.min(allTrainings.length, MAX_TRAININGS); i++) { + var training = allTrainings[i]; + // add fallbacks if we can't parse our dates + var month = '?'; + var day = '?'; + if (!isNaN(training.when.valueOf())) { + month = MONTH_NAMES[training.when.getMonth()]; + day = training.when.getDate(); + } + + // build up our training item + var content = '' + + '' + + '' + month + '' + + '' + day + '' + + '' + + '
' + + '

' + training.title + '

' + + '
    ' + + '
  • ' + training.location + '
  • ' + + '
  • ' + + '
  • ' + training.organizer + '
  • ' + + '
' + + '
'; + + // add it to our list + listContainer.append(content); + } + } + + $.getJSON("/resources/php/typesafe-feed-trainings.php") + .done(function(data) { + // flatten and filter our sessions by date + var flattenedTrainings = []; + for (var i = 0; i < data[0].length; i++) { + var training = data[0][i]; + for (var j = 0; j < training.sessions.length; j++) { + var session = training.sessions[j]; + + // make sure this session occurs in the future + var when = new Date(session.when); + if (when >= new Date()) { + flattenedTrainings.push({ + title: training.title, + url: session.url, + location: session.where.toUpperCase(), + when: when, + organizer: session.organizer + }); + } + } + } + + doPopulateTrainingsPane(flattenedTrainings); + }) + .fail(function(jqXHR, textStatus, errorThrown) { + // log the error to the console + console.error("Could not load Lightbend training feed: " + textStatus, errorThrown); + + // but at least display trainings from scala-lang + doPopulateTrainingsPane([]); + }); +}); diff --git a/resources/js/main.js b/resources/js/main.js deleted file mode 100755 index e78afadef..000000000 --- a/resources/js/main.js +++ /dev/null @@ -1,439 +0,0 @@ ---- ---- - -/************************* - * Various functionality - ************************/ - -function getOS() { - var osname = "Unknown OS"; - if (navigator.appVersion.indexOf("Win") != -1) osname = "Windows"; - if (navigator.appVersion.indexOf("Mac") != -1) osname = "Mac OS"; - if (navigator.appVersion.indexOf("Linux") != -1) osname = "Linux"; - if (navigator.appVersion.indexOf("X11") != -1) osname = "UNIX"; - return osname; -} - - -/*************************** - * Document initialization - **************************/ - -$(document).ready(function(){ - - // background image on frontpage - $(".splash").backstretch("{{ site.baseurl }}/resources/img/view-leman-opt2.jpg"); - - // tooltips (front page) - $(".marker").mouseover(function(){ $(".tip").show(); }); - $(".marker").mouseout(function(){ $(".tip").hide(); }); - - $("#source-code").mouseover(function(){ $(this).find(".toptip").show(); }); - $("#source-code").mouseout(function(){ $(this).find(".toptip").hide(); }); - $("#scala-lang-twitter").mouseover(function(){ $(this).find(".toptip").show(); }); - $("#scala-lang-twitter").mouseout(function(){ $(this).find(".toptip").hide(); }); - - // get current year and put it in span - var currYear = new Date().getFullYear() - $(".current-year").text(currYear); - - // same height hack for scala in a nutshell boxes - function makeAllBoxesSameHeight(boxes) { - maxHeight = Math.max.apply( - Math, boxes.map(function() { - return $(this).height(); - }).get()); - boxes.height(maxHeight); - } - var nutshell = $(".bullet-point").not(".span12"); - makeAllBoxesSameHeight(nutshell); - - // var newsBoxes = $(".newsbox"); - // makeAllBoxesSameHeight(newsBoxes); - - // expanding code snippets (front page) - function expandSnippetAction(snippetID, container) { - var codeBox = container.find(".row"); - - function go() { - var snippet = $(snippetID).html(); - - // for positioning the arrow - var arrow = $(this).parent().siblings(".code-snippet-arrow"); - var centerPoint = $(this).position().left + $(this).width()/2; - arrow.css("left", centerPoint); - - var codeSnippetInContainer = codeBox.html(); - - if (container.is(":hidden")) { - arrow.show(); - arrow.addClass("hover"); - codeBox.html(snippet); - container.slideDown(); - } else if (codeSnippetInContainer == snippet) { - container.slideUp(function() { - arrow.hide(); - }); - } else { - var hgt = $(snippetID).height(); - arrow.addClass("hover"); - codeBox.html(snippet); - codeBox.animate({height: hgt}, 400); - } - } - return go; - } - - var row1 = $("#code-snippet-row1"); - var row2 = $("#code-snippet-row2"); - - $("#java-interop").click(expandSnippetAction("#hidden-java-interop", row1)); - $("#type-inference").click(expandSnippetAction("#hidden-type-inference", row1)); - $("#concurrency-distribution").click(expandSnippetAction("#hidden-concurrency-distribution", row1)); - - $("#traits").click(expandSnippetAction("#hidden-traits", row2)); - $("#pattern-matching").click(expandSnippetAction("#hidden-pattern-matching", row2)); - $("#higher-order-functions").click(expandSnippetAction("#hidden-higher-order-functions", row2)); - - // arrow color hack for hover-overs - function arrowMouseover (snippetID, container) { - - function go () { - var codeSnippetInContainer = container.find(".row").html(); - var snippet = $(snippetID).html(); - if (codeSnippetInContainer == snippet) { - var arrow = $(this).parent().siblings(".code-snippet-arrow"); - arrow.addClass("hover"); - } - } - return go; - } - function arrowMouseout () { - var arrow = $(this).parent().siblings(".code-snippet-arrow"); - arrow.removeClass("hover"); - } - - $("#java-interop").hover(arrowMouseover("#hidden-java-interop", row1), arrowMouseout); - $("#type-inference").hover(arrowMouseover("#hidden-type-inference", row1), arrowMouseout); - $("#concurrency-distribution").hover(arrowMouseover("#hidden-concurrency-distribution", row1), arrowMouseout); - - $("#traits").hover(arrowMouseover("#hidden-traits", row2), arrowMouseout); - $("#pattern-matching").hover(arrowMouseover("#hidden-pattern-matching", row2), arrowMouseout); - $("#higher-order-functions").hover(arrowMouseover("#hidden-higher-order-functions", row2), arrowMouseout); - - // truncate main visible news item if it exceeds height of sidebar - var sideboxHgt = $(".recent-news-items").height(); - var mainboxHgt = $(".newsbox.left").height(); - if (sideboxHgt < mainboxHgt) { - $(".newsbox.left").height(sideboxHgt); - $(".shadow").css('display','block'); - } - -}); - - -$(document).ready(styleCode); -function styleCode() { - if (typeof disableStyleCode != "undefined") { - return; - } - var a = false; - $("pre code").parent().each(function() { - if (!$(this).hasClass("prettyprint")) { - $(this).addClass("prettyprint lang-scala linenums"); - a = true - } - }); - if (a) { prettyPrint() } -} - -/*********************** - * Download page - **********************/ - -$(document).ready(function() { - - var os = getOS(); - if (os == "Unknown OS") os = "UNIX"; - - var osLabel = os.replace(/\s/g, '').toLowerCase(); - - // Do not do any of the following if we're not on a download page - // Otherwise a TypeError is raised and disables all other scripts on the page - if ($("#download-button").length == 0) - return; - - /*$("#download-button, #getting-started-popup").click(function() { - $("#getting-started-popup").toggleClass("open"); - });*/ - - var anchor = document.getElementById("#link-main-unixsys"); - if (os == "Windows") { - anchor = document.getElementById("#link-main-windows"); - } - if (anchor == null) anchor = document.getElementById("#link-main-one4all"); - var link = anchor.getAttribute("href"); - - $("#download-button").attr("href", link).addClass(osLabel); -}); - -/*********************** - * Main Page Download Button - **********************/ - -// $(document).ready(function() { -// var os = getOS(); -// if (os == "Unknown OS") os = "UNIX"; -// var hiddenDownload = $("#link-main-unixsys"); -// if (os == "Windows") { -// hiddenDownload = $("#link-main-windows"); -// } -// // get the right download link in place -// var downloadLink = $("#download-btn"); -// if (downloadLink.length > 0) { -// downloadLink.text("Download for " + os); -// downloadLink.prop("href", hiddenDownload.attr("href")); -// } - -// }); - - - -/****************************** - * Events and trainings feeds * - ******************************/ - -$(document).ready(function(){ - function compareFormattedDates(lhs, rhs) { - var lhsDate = new Date(lhs); - var rhsDate = new Date(rhs); - if (lhsDate < rhsDate) - return -1; - else if (lhsDate > rhsDate) - return 1; - else - return 0; - } - - // EVENTS - - (function() { - - // Stop early if the element does not exist, i.e., we're not on the front page - if ($('#eventspane').length == 0) - return; - var isFrontPage = $('.events').length != 0; - var additionalClass = - isFrontPage ? 'event-item-front-page' : 'event-item-event-page'; - - // Jon Pretty has informed us that 999 events is the most he could possibly - // consider attending - var MAX_EVENTS = isFrontPage ? 5 : 999; - - function compareEventsByDate(lhs, rhs) { - return compareFormattedDates(lhs.start, rhs.start); - } - - var scalaLangEvents = [ - {% for event in site.categories.events %} - {% if event.date >= site.time %}{% comment %} No point in including outdated events {% endcomment %} - { - "title": "{{ event.title }}", - "logo": "{{ event.logo }}", - "location": "{{ event.location }}", - "start": "{{ event.start }}", - "end": "{{ event.end }}", - "url": "{{ event.link-out }}", - }, - {% endif %} - {% endfor%} - ]; - - function doPopulateEventsPane(allEvents) { - var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; - allEvents = allEvents.filter(function (event) { - return (event.end ? new Date(event.end) : new Date(event.start)) >= new Date(); - }); - allEvents.sort(compareEventsByDate); - var content = ""; - for (i = 0; i < allEvents.length && i < MAX_EVENTS; i++) { - var event = allEvents[i]; - - var eventStart = new Date(event.start); - var startMonth = monthNames[eventStart.getMonth()]; - var startDay = eventStart.getDate(); - var year = eventStart.getFullYear(); - var prefix = startMonth + ' ' + startDay - var date = prefix + ' ' + year; - - if (event.end) { - var eventEnd = new Date(event.end); - var endMonth = monthNames[eventEnd.getMonth()]; - var endDay = eventEnd.getDate(); - if (startMonth == endMonth && startDay != endDay) { - date = prefix + '-' + endDay + ' ' + year; - } else if (startMonth == endMonth && startDay == endDay) { - date = prefix + ' ' + year; - } else { - date = prefix + ' - ' + endMonth + ' ' + endDay + ' ' + year; - } - } - var thisContent = - '
' + - '
' + - '
'+event.title+'
' + - '' + - '
' + - '
'+event.location+'
' + - '
'+ - date + - '
' + - '
' + - '
' + - '
'; - $("#eventspane").append(thisContent); - } - }; - - function onEventsAjaxSuccess(response, textStatus, jqXHR) { - var allEvents = scalaLangEvents.concat(response); - doPopulateEventsPane(allEvents); - } - - function onEventsAjaxError(jqXHR, textStatus, errorThrown) { - // log the error to the console - console.error( - "Could not load Lightbend event feed: " + textStatus, errorThrown); - // but at least display events from scala-lang - doPopulateEventsPane(scalaLangEvents); - } - - $.ajax({ - url: "{{ site.baseurl }}/resources/php/typesafe-feed-events.php", - type: "GET", - dataType: "json", - success: onEventsAjaxSuccess, - error: onEventsAjaxError - }); - - })(); - - // TRAININGS - - (function() { - - // Stop early if the element does not exist, i.e., - // we're not on the front page nor on the Trainings page - if ($('#trainingspane').length == 0) - return; - var isFrontPage = $('.training').length != 0; - var additionalClass = - isFrontPage ? 'training-item-front-page' : 'traning-item-training-page'; - - var MAX_TRAININGS = isFrontPage ? 5 : 999; - - function compareTrainingsByDate(lhs, rhs) { - return compareFormattedDates(lhs.when, rhs.when); - } - - var scalaLangTrainings = [ - {% for training in site.categories.training %} - {% if training.date >= site.time %}{% comment %} No point in including outdated training sessions {% endcomment %} - { - title: "{{ training.title }}", - description: "{{ training.description }}", - sessions: [ - { - where: "{{ training.where }}", - when: "{{ training.when }}", - trainers: "{{ training.trainers }}", - organizer: "{{ training.organizer }}", - url: "{{ training.link-out }}", - status: "{{ training.status }}" - } - ] - }, - {% endif %} - {% endfor%} - ]; - - function flattenSessions(trainings) { - var result = new Array(); - for (i = 0; i < trainings.length; i++) { - var training = trainings[i]; - for (j = 0; j < training.sessions.length; j++) { - var session = training.sessions[j]; - result.push({ - title: training.title, - description: training.description, - url: session.url, - where: session.where, - when: session.when, - trainers: session.trainers, - organizer: session.organizer, - status: session.status - }); - } - } - return result; - } - - function doPopulateTrainingsPane(allTrainings0) { - var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; - var allTrainings = flattenSessions(allTrainings0); - allTrainings = allTrainings.filter(function (training) { - return new Date(training.when) >= new Date(); - }); - allTrainings.sort(compareTrainingsByDate); - var content = ""; - for (i = 0; i < allTrainings.length && i < MAX_TRAININGS; i++) { - var training = allTrainings[i]; - var trainingDate = new Date(training.when); - var month = monthNames[trainingDate.getMonth()]; - var day = trainingDate.getDate(); - var year = trainingDate.getFullYear(); - var thisContent = - '' + - '
' + - '
'+training.title+'
' + - '
' + - '
'+month+'
'+day+'
'+year+'
' + - '
'+ - '
' + - '
'+training.where+'
' + - (training.trainers == null ? '' : ('
By '+training.trainers+'
')) + - '
'+training.organizer+'
' + - '
' + - '
' + - '
'; - $("#trainingspane").append(thisContent); - } - } - - function onTrainingsAjaxSuccess(response, textStatus, jqXHR) { - var allTrainings = scalaLangTrainings; - for (var i in response) - allTrainings = allTrainings.concat(response[i]); - doPopulateTrainingsPane(allTrainings); - } - - function onTrainingsAjaxError(jqXHR, textStatus, errorThrown) { - // log the error to the console - console.error( - "Could not load Lightbend training feed: " + textStatus, errorThrown); - // but at least display trainings from scala-lang - doPopulateTrainingsPane(scalaLangTrainings); - } - - $.ajax({ - url: "{{ site.baseurl }}/resources/php/typesafe-feed-trainings.php", - type: "GET", - dataType: "json", - success: onTrainingsAjaxSuccess, - error: onTrainingsAjaxError - }); - - })(); - -}); -