129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <header class="top-banner">
 | 
						|
    <!-- Mobile -->
 | 
						|
    <router-link to="/" class="company-logo">
 | 
						|
      <img src="/public/assets/images/knowit.svg" alt="knowit logo" />
 | 
						|
    </router-link>
 | 
						|
 | 
						|
    <a class="menu-toggle-container" aria-label="show-menu" @click="toggleMenu" :class="isOpen ? 'open' : 'collapsed'">
 | 
						|
      <span class="menu-toggle"></span>
 | 
						|
      <span class="menu-toggle"></span>
 | 
						|
      <span class="menu-toggle"></span>
 | 
						|
    </a>
 | 
						|
 | 
						|
    <nav class="menu" :class="isOpen ? 'open' : 'collapsed'">
 | 
						|
      <router-link v-for="(route, index) in routes" :key="index" :to="route.route" class="menu-item-link">
 | 
						|
        <a @click="toggleMenu" class="single-route" :class="isOpen ? 'open' : 'collapsed'">{{ route.name }}</a>
 | 
						|
        <i class="icon icon--arrow-right"></i>
 | 
						|
      </router-link>
 | 
						|
    </nav>
 | 
						|
 | 
						|
    <div class="clock">
 | 
						|
      <h2 v-if="!fiveMinutesLeft || !tenMinutesOver">
 | 
						|
        <span v-if="days > 0">{{ pad(days) }}:</span>
 | 
						|
        <span>{{ pad(hours) }}</span
 | 
						|
        >: <span>{{ pad(minutes) }}</span
 | 
						|
        >:
 | 
						|
        <span>{{ pad(seconds) }}</span>
 | 
						|
      </h2>
 | 
						|
      <h2 v-if="twoMinutesLeft || tenMinutesOver">Lotteriet er i gang!</h2>
 | 
						|
    </div>
 | 
						|
  </header>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
export default {
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      isOpen: false,
 | 
						|
      nextLottery: null,
 | 
						|
      days: 0,
 | 
						|
      hours: 0,
 | 
						|
      minutes: 0,
 | 
						|
      seconds: 0,
 | 
						|
      distance: 0,
 | 
						|
      interval: null
 | 
						|
    };
 | 
						|
  },
 | 
						|
  props: {
 | 
						|
    routes: {
 | 
						|
      required: true,
 | 
						|
      type: Array
 | 
						|
    }
 | 
						|
  },
 | 
						|
  mounted() {
 | 
						|
    this.initialize(), this.countdown();
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    fiveMinutesLeft: function() {
 | 
						|
      if (this.days == 0 && this.hours == 0 && this.minutes <= 2) {
 | 
						|
        return true;
 | 
						|
      }
 | 
						|
      return false;
 | 
						|
    },
 | 
						|
    tenMinutesOver: function() {
 | 
						|
      if (this.days == 6 && this.hours >= 23 && this.minutes >= 50) {
 | 
						|
        return true;
 | 
						|
      }
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    toggleMenu() {
 | 
						|
      this.isOpen = this.isOpen ? false : true;
 | 
						|
    },
 | 
						|
    pad: function(num) {
 | 
						|
      if (num < 10) {
 | 
						|
        return `0${num}`;
 | 
						|
      }
 | 
						|
      return num;
 | 
						|
    },
 | 
						|
    initialize: function() {
 | 
						|
      let d = new Date();
 | 
						|
      let dayOfLottery = __DATE__;
 | 
						|
      let dayDifference = (dayOfLottery + 7 - d.getDay()) % 7;
 | 
						|
      if (dayDifference == 0) {
 | 
						|
        dayDifference = 7;
 | 
						|
      }
 | 
						|
      let nextDayOfLottery = new Date(d.setDate(d.getDate() + dayDifference));
 | 
						|
      nextDayOfLottery = new Date(nextDayOfLottery.setHours(__HOURS__));
 | 
						|
      nextDayOfLottery = new Date(nextDayOfLottery.setMinutes(0));
 | 
						|
      nextDayOfLottery = new Date(nextDayOfLottery.setSeconds(0));
 | 
						|
      let nowDate = new Date();
 | 
						|
      let now = nowDate.getTime();
 | 
						|
      if (nextDayOfLottery.getTimezoneOffset() != nowDate.getTimezoneOffset()) {
 | 
						|
        let _diff = (nextDayOfLottery.getTimezoneOffset() - nowDate.getTimezoneOffset()) * 60 * -1;
 | 
						|
        nextDayOfLottery.setSeconds(nextDayOfLottery.getSeconds() + _diff);
 | 
						|
      }
 | 
						|
      this.nextLottery = nextDayOfLottery;
 | 
						|
 | 
						|
      this.distance = new Date(this.nextLottery).getTime() - now;
 | 
						|
    },
 | 
						|
    countdown: function() {
 | 
						|
      // Get today's date and time
 | 
						|
      let now = new Date().getTime();
 | 
						|
 | 
						|
      // Find the distance between now and the count down date
 | 
						|
      this.distance = new Date(this.nextLottery).getTime() - now;
 | 
						|
 | 
						|
      // Time calculations for days, hours, minutes and seconds
 | 
						|
      this.days = Math.floor(this.distance / (1000 * 60 * 60 * 24));
 | 
						|
      this.hours = Math.floor((this.distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
 | 
						|
      this.minutes = Math.floor((this.distance % (1000 * 60 * 60)) / (1000 * 60));
 | 
						|
      this.seconds = Math.floor((this.distance % (1000 * 60)) / 1000);
 | 
						|
      if (this.days == 7) {
 | 
						|
        this.days = 0;
 | 
						|
      }
 | 
						|
      if (this.distance < 0) {
 | 
						|
        this.initialize();
 | 
						|
      }
 | 
						|
      this.interval = setTimeout(this.countdown, 500);
 | 
						|
    }
 | 
						|
  }
 | 
						|
};
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
@import "../styles/banner.scss";
 | 
						|
</style>
 |