Argentum
Argentum

Reputation: 57

Apply DRY principle with JavaScript

I am currently stuck trying to apply the DRY principle in this scenario. Here is the code. As you can see, I am trying to run scripts containing different variables on different days. I mean, I could simply shoot out a bunch of else if statements until Friday, but that just does not seem like the right way to do things. Any pointers?

Thanks

<script>
    function timer(){
        window.alert("The timer will start in 1 minute. Get ready!");
        var dayVar = new Date().getDay();
           if(dayVar == 1){
             var monPhp = "<?php echo $homeMon2 ?>";
             var min = 60 * monPhp;
               setInterval(function(){
                 var a = new Date();
                 document.getElementById("result").innerHTML = "Minutes : " + min ;
                 min--;
                if(min == -1){
                  window.alert("Times up!");
                  min = 60 * monPhp;
                }           
               },60000); 
           } else if (dayVar == 2){
               var tuePhp = "<?php echo $homeTue2 ?>";
               var min = 60 * tuePhp;
               setInterval(function(){
                  var a = new Date();
                  document.getElementById("result").innerHTML = "Minutes : " + min ;
                  min--;
                  if(min == -1){
                      window.alert("Times up!");
                      min = 60 * tuePhp;
                  }
               },60000); 
            }
      }
</script>

Upvotes: 1

Views: 1388

Answers (2)

Vivek Chaudhary
Vivek Chaudhary

Reputation: 183

try this one !

  function timer() {
        window.alert("The timer will start in 1 minute. Get ready!");
        var dayVar = new Date().getDay();
        var day = 0;
        switch (dayVar) {
            case 1 :
                day = 1; 
                break;
            case 2 :
                day = 2;
                break;
            case 3 :
                day = 3;
                break;
            case 4 :
                day = 4;
                break;
            case 5 :
                day = 5;
                break;
            case 6 :
                day = 6;
                break;
            case 7 :
                day = 7;
                break;
            default :
                break;
        }

        var min = 60 * day;
        setInterval(function () {
            var a = new Date();
            document.getElementById("result").innerHTML = "Minutes : " + min;
            min--;
            if (min == -1) {
                window.alert("Times up!");
                min = 60 * day;
            }
        }, 60000);

    }

Upvotes: 1

adeneo
adeneo

Reputation: 318322

In your PHP, create an array

<?php

    $arr = Array($homeSun2, $homeMon2, $homeTue2, $homeWed2 ... etc);
?>

Then use it

function timer(){
    var days   = <?php echo json_encode($arr); ?>;
    var dayVar = new Date().getDay();

    window.alert("The timer will start in 1 minute. Get ready!");

    var min  = 60 * days[dayVar];
    var temp = min;

    setInterval(function(){
        var a = new Date();
        document.getElementById("result").innerHTML = "Minutes : " + (temp--) ;
        if(temp == -1){
            window.alert("Times up!");
            temp = min;
        }           
    },60000);
}

Upvotes: 1

Related Questions