hpi-swt2/sport-portal

View on GitHub
app/assets/javascripts/eventscripts/create_event.js

Summary

Maintainability
A
0 mins
Test Coverage
$( document ).on('turbolinks:load', function() {
    $('#event_deadline').datepicker({autoclose: true, startDate: new Date(), todayHighlight: true, language: 'de'});
    $('#event_startdate').datepicker({autoclose: true, startDate: new Date(), todayHighlight: true, language: 'de'});
    $('#event_enddate').datepicker({autoclose: true, startDate: new Date(), todayHighlight: true, language: 'de'});

    $("#event_duration").val("");
  

    $("#event_startdate").datepicker({
       onSelect: function() {
           $(this).change();
       }
    });

    $("#event_startdate").on("change", callChanged);


    $("#event_enddate").datepicker({
        onSelect: function() {
            $(this).change();
        }
    });

    $("#event_enddate").on("change", adaptDuration);

    $("#league_gameday_duration").on("change",durationChanged);

    $("#league_game_mode").on("change",callChanged);

    $("#league_max_teams").on("change",callChanged);

    function callChanged()
    {
        adaptDuration();
        durationChanged();
    }
    function durationChanged()
    {
        var start = $("#event_startdate").val();
        var end = $("#event_enddate").val();
        var system = $("#league_game_mode").val();
        var gameday_dur =$("#league_gameday_duration").val();
        var participants = $("#league_max_teams").val();
        if(start != "" && gameday_dur != "" && system != "" && gameday_dur != undefined && system != undefined)
        {
            rounds = calcRounds(system,participants);
            var number_of_days = rounds * parseInt(gameday_dur);
            $("#event_enddate").val(addDays(start,number_of_days));

        }
        changeDur();
    }
    function adaptDuration()
    {
        var start = $("#event_startdate").val();
        var end = $("#event_enddate").val();
        var system = $("#league_game_mode").val();
        var gameday_dur =$("#league_gameday_duration").val();
        var participants = $("#league_max_teams").val();
        if(start != "" && end != "" && system != "" && gameday_dur != undefined && system != undefined)
        {
            rounds = calcRounds(system,participants);
            var diff = calcDateDiff(start,end);
            var gameday_duration = Math.floor(diff/rounds);
            if(diff <= 0)
            {
                $("#league_gameday_duration").val(1);
            }
            else {
                $("#league_gameday_duration").val(gameday_duration);
            }

        }
        changeDur();
    }
    function changeDur()
    {
        var start = $("#event_startdate").val();
        var end = $("#event_enddate").val();

        if(start != "" && end != "") {
            diff = calcDateDiff(start,end);
            if (diff <= 0){
                diff = "";
            }
            $("#event_duration").val(diff);
        }
    }

    function addDays(date, days) {
        date = date.split(".");
        var result = new Date(date[2], date[1]-1, date[0]);
        result.setDate(result.getDate() + parseInt(days));
        var dd = result.getDate();
        var mm = result.getMonth()+1;
        var y = result.getFullYear();
        if(dd < 10){
            dd = "0"+ dd;
        }
        if(mm < 10){
            mm = "0"+ mm;
        }
        var formattedDate = dd + '.' + mm + '.' + y;
        return formattedDate;
    }

    function calcDateDiff(startdatestr, enddatestr)
    {
      var splittetStart = startdatestr.split(".");
      var splittetEnd = enddatestr.split(".");
      // Es muss 1 vom Monat abgezogen werden, da diese 0 indiziert sind
      var start = new Date(splittetStart[2],splittetStart[1]-1, splittetStart[0]);
      var end = new Date(splittetEnd[2],splittetEnd[1]-1,splittetEnd[0]);
      return  Math.round((end-start)/(1000*60*60*24)) + 1;
    }

    function calcRounds(system,participants)
    {
        var num_part = parseInt(participants);
        var sys = system;
        var num_rounds;
        if(sys == "round_robin" || sys == "two_halfs")
        {
            if(num_part % 2 == 0)
            {
                num_rounds = num_part - 1;
            }
            else
            {
                num_rounds = num_part;
            }
        }
        else if (sys == "swiss")
        {
            num_rounds = (0.2 * num_part) + (1.4 * num_part);
        }

        return Math.ceil(num_rounds);
    }

    $("#event_duration").on("change", function(){

       var start = $("#event_startdate").val();
       if(start != "") {
           var splittetStart = start.split(".");
           var startdate = new Date(splittetStart[2],splittetStart[1]-1, splittetStart[0]);
           startdate.setDate(startdate.getDate() + parseInt(this.value - 1));

           var dd = startdate.getDate();
           var mm = startdate.getMonth() + 1;
           var y = startdate.getFullYear();
           if(mm < 10){
               mm = "0"+ mm;
           }
           var formattedDate = dd + '.' + mm + '.' + y;
           $("#event_enddate").val(formattedDate);
       }
    });

    // Autofill of player count for an event
    showPlayerCount();
    $("#event_player_type").on("change", showPlayerCount);


    function showPlayerCount()
    {
      switch($("#event_player_type").val())
      {
        case "single":
          $("#event_min_players_per_team").hide();
          $("#event_max_players_per_team").hide();
          break;
        case "team":
          $("#event_min_players_per_team").show();
          $("#event_max_players_per_team").show();
          break;
        default:
          $("#event_min_players_per_team").hide();
          $("#event_max_players_per_team").hide();
          break;
      }
    }

    //rankinglist_game_mode -> rankinglist_initial_value
    var initial_value_elo = $("#rankinglist_initial_value").val()=="" || $("#rankinglist_game_mode").val() != "elo" ? "1000" : $("#rankinglist_initial_value").val();
    var initial_value_trueskill = $("#rankinglist_initial_value").val()=="" || $("#rankinglist_game_mode").val() != "true_skill" ? "25" : $("#rankinglist_initial_value").val();
    var initial_value_win_loss = $("#rankinglist_initial_value").val()=="" || $("#rankinglist_game_mode").val() != "win_loss" ? "0" : $("#rankinglist_initial_value").val();;
    showInitialValue();
    $("#rankinglist_game_mode").on("change", showInitialValue);
    function showInitialValue()
    {
        switch($("#rankinglist_game_mode").val())
        {
            case "elo":
                $("#rankinglist_initial_value").val(initial_value_elo);
                var default_elo_change = $("#rankinglist_maximum_elo_change");
                if(default_elo_change.val()=="")
                {
                    default_elo_change.val(32);
                }
                $("#rankinglist_advanced").show();
                break;
            case "true_skill":
                $("#rankinglist_initial_value").val(initial_value_trueskill);
                break;
            case "win_loss":
                $("#rankinglist_initial_value").val(initial_value_win_loss);
                break;
            default:
                $("#rankinglist_initial_value").val("0");
                $("#rankinglist_advanced").hide();
                break;
        }
    }

    $("#rankinglist_initial_value").on("change", saveInitialValue);
    function saveInitialValue()
    {
        switch($("#rankinglist_game_mode").val()) {
            case "elo":
                initial_value_elo = $("#rankinglist_initial_value").val();
                break;
            case "true_skill":
                initial_value_trueskill = $("#rankinglist_initial_value").val();
                break;
            case "win_loss":
                initial_value_win_loss = $("#rankinglist_initial_value").val();
                break;
            default:
                break;
        }
    }
});