Skip to content
Snippets Groups Projects
liftoff_js.html 9.86 KiB
Newer Older
<script>
var subdomain = "liftoff.chaotikum.org"

var timeToAdd = 1000 * 60 * 60 * 24 * 7 * 4 * 6; //six month
var date = new Date();
var expiryTime = parseInt(date.getTime()) + timeToAdd;
date.setTime(expiryTime);
var utcTime = date.toUTCString();

console.log(window.location.href)
var cookiedecisionfound = false
var cookieforbidden = true
var cookiesallowed = false
var doneMissions = []

var pageHistory = []

var allmissions = []
{% for mission in site.liftoffmissions -%}
Lukas Ruge's avatar
Lukas Ruge committed
  {% if mission.type == 'mission' -%}
    allmissions.push("{{mission.uid}}");
  {% endif -%}

console.log("{{ site.url }}")

//some cookie security
var cookiesecure = ";secure"
if("{{ site.url }}".includes("localhost")) {
  cookiesecure = ""
}
//httpOnly may not be set, as we specifically want to use the cookies in javascript (right here)

function markMissionAcc(mission) {
  $( "#missionacc"+mission ).hide()
  $( "#mission"+mission ).removeClass( "alert-primary" )
  $( "#mission"+mission ).addClass('alert-success')
Lukas Ruge's avatar
Lukas Ruge committed
  $( "#missionsy"+mission ).removeClass('')
  $( "#missionsy"+mission ).addClass('fa')
  $( "#missionsy"+mission ).addClass('fa-check')
  $( "#missionexplain"+mission ).hide();
}

jQuery(document).ready(function($) {
Lukas Ruge's avatar
Lukas Ruge committed
  
  $("#liftoffJavascriptEnabled").hide()

  if(document.referrer.includes("{{ site.url }}/nobreakspace/liftoff") || document.referrer.includes(subdomain)) {
    console.log("REFERRER")
    console.log(document.referrer)
    console.log("Nope")
    $( "#welcomeback" ).hide()
    $("#liftoffbacklink").attr("href", document.referrer)
  } else {
    $( "liftoffbacklink").hide()
  //check if cookies are already forbidden or allowed
  var decodedCookie = decodeURIComponent(document.cookie);
  var pairs = decodedCookie.split(';');
  for(var i = 0; i <pairs.length; i++) {
    var x = pairs[i].split('=');
    if(x[0].trim() == "noCookiesLiftoff") {
      if(x[1].trim() == "True") {
        cookiedecisionfound = true
        cookieforbidden = true
      } 
      if(x[1].trim() == "False") {
        cookiedecisionfound = true
        cookieforbidden = false
      } 
    }
    if(x[0].trim() == "yesCookieLiftoff") {
      if(x[1].trim() == "True") {
        cookiedecisionfound = true
        cookiesallowed = true
      }
    }
  }

  if(!cookiedecisionfound) {
    $( "#liftoffstart" ).hide()
    $( '#missionprogress').hide()
    $( '#missionprogresstext').hide()
    $( '#missionprogressdiv').hide()
  } else {
    $( "#liftoffcookieinfo" ).hide()
  }

  console.log("WHAT")
  console.log(cookiedecisionfound)
  console.log(cookiesallowed)
  console.log(cookieforbidden)
      
  if(cookiedecisionfound == false && cookiesallowed == false && cookieforbidden == true) {
    $( "#welcomeback" ).hide()
    $( '#missionprogress').hide()
    $( '#missionprogresstext').hide()
    $( '#missionprogressdiv').hide()
  }
  
  if(cookiedecisionfound == true && cookiesallowed == false && cookieforbidden == true) {
    $( "#welcomeback" ).hide()
    $( '#missionprogress').hide()
    $( '#missionprogresstext').hide()
    $( '#missionprogressdiv').hide()
  }

  if(cookiedecisionfound == true && cookiesallowed == true && cookieforbidden == false) {
    var history = "";
    var containsHistory = false;
    decodedCookie = decodeURIComponent(document.cookie);
    
    console.log("Decoded Cookie")
    console.log(decodedCookie)
    
    pairs = decodedCookie.split(';');
    
    console.log(pairs)
    
    for(var i = 0; i <pairs.length; i++) {
      var x = pairs[i].split('=');
      console.log(x)
      console.log(x[0].trim())
      if(x[0].trim() == "history") {
        console.log("yay")
        containsHistory = true;
        history = x[1]
        if(!x[1].includes(window.location.href)) {
              console.log("Extend history")
              console.log(history)
              if(x[1] != "") {
                history = history + "YXY" + window.location.href
              } else {
                history = window.location.href
              }
              console.log(history)
            }
            pageHistory = history.split("YXY")
          }
          if(x[0].trim() == "url") {
            console.log("URL!!!!")
            url = x[1]
            console.log(url)
          }
          if(x[0].trim() == "missions") {
            doneMissions = x[1].split("X#X")
            if(doneMissions[0] == "") {
              doneMissions.shift();
            }
          }

        for(mission of doneMissions){
          console.log("Hide done missions")
          if(mission != "") {
            console.log(mission)
            markMissionAcc(mission)
        if(!containsHistory) {
          console.log("Does not contain any history")
          history = window.location.href
          console.log(history)
        }

        console.log(pageHistory)
        for(ph of pageHistory) {
          phshort = ph.replace("{{site.url}}", "")
          phshort = phshort.replaceAll("/", "_")
          $("#check_"+phshort).attr('class', 'fa-solid fa-check')
        }

        if(!(window.location.href == "{{ site.url }}/nobreakspace/liftoff" || window.location.href == "{{ site.url }}/nobreakspace/liftoff/" || window.location.href.includes("{{ site.url }}/nobreakspace/liftoff/#") || window.location.href == subdomain || window.location.href == subdomain+"/" || window.location.href.includes(subdomain+"/#"))){

          console.log("BLA")
          document.cookie = "url="+window.location.href+";domain="+window.location.hostname+";path=/nobreakspace/liftoff/;expires="+utcTime+";SameSite=Strict"+cookiesecure;
          document.cookie = "history="+history+";domain="+window.location.hostname+";path=/nobreakspace/liftoff/;expires="+utcTime+";SameSite=Strict"+cookiesecure
        console.log("ok... ")
        console.log(url)
        if(url == "" || url == window.location.href) {
          $( "#welcomeback" ).hide()
        } else {
          if(url.startsWith("{{ site.url }}")) {
            $("#returnlink").attr("href", url)
          }
        }

        if(doneMissions[0] == "") {
          doneMissions.shift();
        }
Lukas Ruge's avatar
Lukas Ruge committed
        doneMissions = [...new Set(doneMissions)];
        var doneMissions2 = []
        for(mx of doneMissions) {
          if(allmissions.includes(mx)) {
            doneMissions2.push(mx)
          }
        }
        doneMissions = doneMissions2
        var percentagemissions = doneMissions.length / (allmissions.length / 100)
        console.log("PERCENTAGE MISSIONS")
        console.log(percentagemissions)
        console.log(doneMissions)
        $("#missionprogress").attr("aria-valuenow", ""+percentagemissions);
        $("#missionprogress").css("width", percentagemissions+"%");
        $("#missionprogress").text((Math.round(percentagemissions * 100) / 100)+"%")
        if(percentagemissions > 99.9 && "{{ page.permalink }}".includes("/nobreakspace/liftoff/part7/")) {
Lukas Ruge's avatar
Lukas Ruge committed
          $("#courseprogress").attr("aria-valuenow", 100);
          $("#courseprogress").css("width", 100+"%");
          $("#courseprogress").text(100+"%")
        }
      }
    });

  function deleteUrlFromCookie() {
    console.log("bla")
    document.cookie = "url=;domain="+window.location.hostname+";path=/nobreakspace/liftoff/"+";SameSite=Strict"+cookiesecure
  }

  function noCookiesPlz() {
    document.cookie = "noCookiesLiftoff=True;domain="+window.location.hostname+";path=/nobreakspace/liftoff/;expires="+utcTime+";SameSite=Strict"+cookiesecure
    location.reload();
  }

  function yesCookiesPlz() {
      document.cookie = "noCookiesLiftoff=False;domain="+window.location.hostname+";path=/nobreakspace/liftoff/;expires="+utcTime+";SameSite=Strict"+cookiesecure;
      document.cookie = "yesCookieLiftoff=True;domain="+window.location.hostname+";path=/nobreakspace/liftoff/;expires="+utcTime+";SameSite=Strict"+cookiesecure;
      location.reload();
  }

  function resetCookies() {
    document.cookie = "url=;domain="+window.location.hostname+";path=/nobreakspace/liftoff/"+";SameSite=Strict"+cookiesecure
    document.cookie = "history=;domain="+window.location.hostname+";path=/nobreakspace/liftoff/"+";SameSite=Strict"+cookiesecure
    document.cookie = "missions=;domain="+window.location.hostname+";path=/nobreakspace/liftoff/"+";SameSite=Strict"+cookiesecure
    document.cookie = "noCookiesLiftoff=;domain="+window.location.hostname+";path=/nobreakspace/liftoff/"+";SameSite=Strict"+cookiesecure
    document.cookie = "yesCookieLiftoff=;domain="+window.location.hostname+";path=/nobreakspace/liftoff/"+";SameSite=Strict"+cookiesecure
    location.reload();
  }

  function missionAccomplished(mission) {
    if(cookiedecisionfound == true && cookiesallowed == true && cookieforbidden == false) {
      decodedCookie = decodeURIComponent(document.cookie);
      pairs = decodedCookie.split(';');
      for(var i = 0; i <pairs.length; i++) {
        var x = pairs[i].split('=');
        if(x[0].trim() == "missions") {
            doneMissions = x[1].split("X#X")
            console.log(doneMissions)
            if(doneMissions[0] == "") {
              doneMissions.shift();
            }
        }
      }

      console.log(mission)
      console.log(doneMissions)

      if(!doneMissions.includes(mission)) {
        doneMissions.push(mission)
      }
      console.log(doneMissions)
      mm = ""
      for(mi of doneMissions) {
        if(mi != "") {
          mm = mm + "X#X" + mi;
        }
      }
      document.cookie = "missions="+mm+";domain="+window.location.hostname+";path=/nobreakspace/liftoff/"+";SameSite=Strict"+cookiesecure
      
      markMissionAcc(mission)

      var percentagemissions = doneMissions.length / (allmissions.length / 100)
      console.log("PERCENTAGE MISSIONS")
      console.log(percentagemissions)
      console.log(doneMissions)
      $("#missionprogress").attr("aria-valuenow", ""+percentagemissions);
      $("#missionprogress").css("width", percentagemissions+"%");
      $("#missionprogress").text((Math.round(percentagemissions * 100) / 100)+"%")
    }