Merge Schedule Extension to Master #168
@ -1,145 +1,152 @@
 | 
				
			|||||||
<script setup>
 | 
					<script setup>
 | 
				
			||||||
  import { ref } from 'vue'
 | 
					  import { ref } from 'vue'
 | 
				
			||||||
 | 
					  import {getDifferenceTime,lastDateOfMonth,formatDate,getFirstDay,sortByDate,matrixFromList,sundayToTheEnd,getMarginTop,getHoursMinutes, monthFromList} from '../schedule.js'
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
  const schedule = [
 | 
					  const schedule = [
 | 
				
			||||||
    {course:"Math Pour L'info",
 | 
					 | 
				
			||||||
     start:"Tue Mar 26 2024 08:15 GMT+0100",
 | 
					 | 
				
			||||||
     end:"Tue Mar 26 2024 10:15 GMT+0100",
 | 
					 | 
				
			||||||
    color:"rgb(0,50,100)"},
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      course:"Calculus",
 | 
					     course:{
 | 
				
			||||||
      start:"Wed Mar 27 2024 08:15 GMT+0100",
 | 
					        id:14,
 | 
				
			||||||
      end:"Wed Mar 27 2024 09:15 GMT+0100",   
 | 
					        name:"Math Pour L'info",
 | 
				
			||||||
      color:"rgb(100,50,0)"
 | 
					        faculty:"Science",
 | 
				
			||||||
 | 
					        teacher:"Doofenschmirtz",
 | 
				
			||||||
 | 
					        assistants:[14,25,13],},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     start:"Mon Apr 01 2024 08:15",
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					     end:"Mon Apr 01 2024 10:15",
 | 
				
			||||||
 | 
					     color:"rgb(0,50,100)",
 | 
				
			||||||
 | 
					     local:"A0B2"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  {
 | 
					    {course:{
 | 
				
			||||||
      course:"Physique II",
 | 
					      id:12,
 | 
				
			||||||
      start:"Tue Mar 26 2024 10:30 GMT+0100",
 | 
					      name:"Calculus",
 | 
				
			||||||
      end:"Tue Mar 26 2024 12:30 GMT+0100", 
 | 
					      faculty:"Science",
 | 
				
			||||||
      color:"rgb(100,50,100)"
 | 
					      teacher:"Doofenschmirtz",
 | 
				
			||||||
 | 
					      assistants:[],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					      start:"Wed Mar 27 2024 08:15",
 | 
				
			||||||
      course:"Math Pour L'info",
 | 
					      end:"Wed Mar 27 2024 09:15",   
 | 
				
			||||||
      start:"Tue Mar 26 2024 13:30 GMT+0100",
 | 
					      color:"rgb(100,50,0)",
 | 
				
			||||||
      end:"Tue Mar 26 2024 15:30 GMT+0100", 
 | 
					      local:"A0B2"
 | 
				
			||||||
      color:"rgb(100,0,50)"
 | 
					  },
 | 
				
			||||||
 | 
					  {course:{
 | 
				
			||||||
 | 
					      id:2,
 | 
				
			||||||
 | 
					      name:"Physique II",
 | 
				
			||||||
 | 
					      faculty:"Science",
 | 
				
			||||||
 | 
					      teacher:3,
 | 
				
			||||||
 | 
					      assistants:[],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					      start:"Sun Mar 24 2024 10:30 ",
 | 
				
			||||||
 | 
					      end:"Sun Mar 24 2024 12:30 ", 
 | 
				
			||||||
 | 
					      color:"rgb(100,50,100)",
 | 
				
			||||||
 | 
					      local:"A0B2"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					    {course:{
 | 
				
			||||||
 | 
					      id:14,
 | 
				
			||||||
 | 
					      name:"Math Pour L'info",
 | 
				
			||||||
 | 
					      faculty:"Science",
 | 
				
			||||||
 | 
					      teacher:14,
 | 
				
			||||||
 | 
					      assistants:[14,25,13],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					      start:"Sun Mar 24 2024 13:30",
 | 
				
			||||||
 | 
					      end:"Sun Mar 24 2024 15:30", 
 | 
				
			||||||
 | 
					      color:"rgb(100,0,50)",
 | 
				
			||||||
 | 
					      local:"A0B2"
 | 
				
			||||||
  }]
 | 
					  }]
 | 
				
			||||||
  function formatDate(date) {
 | 
					 | 
				
			||||||
    var d = new Date(date),
 | 
					 | 
				
			||||||
        month = '' + (d.getMonth() + 1),
 | 
					 | 
				
			||||||
        day = '' + d.getDate(),
 | 
					 | 
				
			||||||
        year = d.getFullYear();
 | 
					 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
    if (month.length < 2) 
 | 
					  const display =ref("Month")
 | 
				
			||||||
        month = '0' + month;
 | 
					
 | 
				
			||||||
    if (day.length < 2) 
 | 
					  const days = ["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"];
 | 
				
			||||||
        day = '0' + day;
 | 
					  const months = ["Janvier","Fevrier","Mars","Avril",'Mai',"Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"]
 | 
				
			||||||
 | 
					  const firstDayOfMonth = ref(getFirstDay(new Date(schedule[1].start)))
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    return [day, month, year].join('-');
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  function getMonday(d) {
 | 
					  function getMonday(d) {
 | 
				
			||||||
    d = new Date(d);
 | 
					    d = new Date(d);
 | 
				
			||||||
 | 
					    d.setHours(0,0,0);
 | 
				
			||||||
    var day = d.getDay(),
 | 
					    var day = d.getDay(),
 | 
				
			||||||
    diff = d.getDate() - day + (day == 0 ? -6 : 1);
 | 
					    diff = d.getDate() - day + (day == 0 ? -6 : 1);
 | 
				
			||||||
    return new Date(d.setDate(diff));
 | 
					    return new Date(d.setDate(diff));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function getAnyDays(d){
 | 
					  function getAnyDays(d){
 | 
				
			||||||
 | 
					 | 
				
			||||||
    var day = new Date(mondayOfWeek.value);
 | 
					    var day = new Date(mondayOfWeek.value);
 | 
				
			||||||
    day.setDate(day.getDate() + d );
 | 
					    day.setDate(day.getDate() + d );
 | 
				
			||||||
 | 
					 | 
				
			||||||
    return day;
 | 
					    return day;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  const mondayOfWeek =ref(getMonday(new Date()))
 | 
				
			||||||
 | 
					  const currentDate = ref(new Date())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const mondayOfWeek=ref(getMonday(new Date(schedule[1].start)))
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  function isNotCourse(element){
 | 
					  function isNotCourse(element){
 | 
				
			||||||
    return element==null;
 | 
					    return element==null;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function durationCourse(element){
 | 
					  function durationCourse(element){
 | 
				
			||||||
    const hour = element.end.substring(3,5) -element.start.substring(3,5);
 | 
					    const hour = element.end.substring(3,5) -element.start.substring(3,5);
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    return (element.end - element.start)%2;
 | 
					    return (element.end - element.start)%2;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  function sortByDate(a, b) {
 | 
					  const scheduleByWeek = ref(sundayToTheEnd(matrixFromList(schedule,mondayOfWeek.value)));
 | 
				
			||||||
    const nameA = a.start; // ignore upper and lowercase
 | 
					  const month = ref(monthFromList(schedule,new Date().getMonth()));
 | 
				
			||||||
    const nameB = b.start; // ignore upper and lowercase
 | 
					  const shift = ref(getFirstDay(new Date()).getDay());
 | 
				
			||||||
 | 
					  let value = 1;
 | 
				
			||||||
 | 
					  const len = ref(lastDateOfMonth(new Date()));
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    if (nameA < nameB) {
 | 
					  function changeWeek(i){
 | 
				
			||||||
      return -1;
 | 
					    const temp = getAnyDays(i);
 | 
				
			||||||
    }
 | 
					    mondayOfWeek.value = temp;
 | 
				
			||||||
    if (nameA > nameB) {
 | 
					    scheduleByWeek.value = sundayToTheEnd(matrixFromList(schedule, mondayOfWeek.value))
 | 
				
			||||||
      return 1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return 0; 
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function transpose(a) {
 | 
					  function changeMonth(i){
 | 
				
			||||||
    const trans = [[],[],[],[],[],[]];
 | 
					    const temp = currentDate.value;
 | 
				
			||||||
    for(let i = 0; i < 6;i++){
 | 
					    currentDate.value = new Date( ( 0< temp.getMonth()+i < 13 ? temp.getFullYear() : temp.getFullYear()+i), (0< temp.getMonth()+i <13 ? temp.getMonth()+i :  12 ),1);
 | 
				
			||||||
      for(let j=0; j< 7; j++){
 | 
					    month.value = monthFromList(schedule,currentDate.value.getMonth())
 | 
				
			||||||
        if(a[j][i] !== null){
 | 
					    shift.value= getFirstDay(currentDate.value).getDay();
 | 
				
			||||||
          trans[i].push(a[j][i]);
 | 
					    len.value= lastDateOfMonth(currentDate.value);
 | 
				
			||||||
        }
 | 
					    value = 1;
 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return trans;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  function matrixFromList(list){
 | 
					 | 
				
			||||||
    const matrix = [[],[],[],[],[],[],[]];
 | 
					 | 
				
			||||||
    for(let key in list){
 | 
					 | 
				
			||||||
      const temp = [];
 | 
					 | 
				
			||||||
      const day = new Date(list[key].start);
 | 
					 | 
				
			||||||
      matrix[day.getDay()].push(list[key]);
 | 
					 | 
				
			||||||
      matrix[day.getDay()].sort((a,b) => sortByDate(a,b));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
      return matrix;
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function sundayToTheEnd(list){
 | 
					  function isAValue(){
 | 
				
			||||||
    const newlist = list;
 | 
					    if(value-shift.value<0){
 | 
				
			||||||
    const sunday = newlist.shift();
 | 
					      value++;
 | 
				
			||||||
    newlist.push(sunday);
 | 
					      return false
 | 
				
			||||||
    return newlist;
 | 
					    }
 | 
				
			||||||
 | 
					    if(value-shift.value<len.value){
 | 
				
			||||||
 | 
					      value++;
 | 
				
			||||||
 | 
					      return true;}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if(value-shift.value>=len.value){
 | 
				
			||||||
 | 
					      return false
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function getDifferenceTime(date1,date2){
 | 
					 | 
				
			||||||
    return Math.abs((new Date(date2).getTime() - new Date(date1).getTime())/60000);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  function getMarginTop(list, index1, index2){
 | 
					 | 
				
			||||||
    if(index2 < 0){
 | 
					 | 
				
			||||||
      const temp = new Date(list[index1].start);
 | 
					 | 
				
			||||||
      temp.setHours(8,0,0);
 | 
					 | 
				
			||||||
      return Math.abs((new Date(list[index1].start).getTime()- temp.getTime())/60000);
 | 
					 | 
				
			||||||
    }   
 | 
					 | 
				
			||||||
    return Math.abs((new Date(list[index1].start).getTime()- new Date(list[index2].end).getTime())/60000)+getMarginTop(list,index2,index2-1);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const scheduleByWeek = sundayToTheEnd(matrixFromList(schedule));
 | 
					 | 
				
			||||||
  console.log(scheduleByWeek)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="grid">
 | 
					  <div class="grid">
 | 
				
			||||||
    <div class="options" >
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class="schedule">
 | 
					    <div class="schedule">
 | 
				
			||||||
 | 
					    <template v-if="display=='Week'">
 | 
				
			||||||
      <table class="table">
 | 
					      <table class="table">
 | 
				
			||||||
        <tr style="background-color:rgb(24,24,24)">
 | 
					        <tr style="background-color:rgb(24,24,24)">
 | 
				
			||||||
          <th/>
 | 
					          <th>
 | 
				
			||||||
          <th class="header">Lundi {{formatDate(getAnyDays(0))}}</th>
 | 
					            <button @click="changeWeek(-7)">Previous</button>
 | 
				
			||||||
          <th class="header">Mardi {{formatDate(getAnyDays(1))}}</th>
 | 
					            <button @click="changeWeek(7)">Next</button>
 | 
				
			||||||
          <th class="header">Mercredi {{formatDate(getAnyDays(2))}}</th>
 | 
					            <button @click="mondayOfWeek = getMonday(new Date()); scheduleByWeek = sundayToTheEnd(matrixFromList(schedule, mondayOfWeek))">Current</button>
 | 
				
			||||||
          <th class="header">Jeudi {{formatDate(getAnyDays(3))}}</th>
 | 
					            
 | 
				
			||||||
          <th class="header">Vendredi {{formatDate(getAnyDays(4))}}</th>
 | 
					          </th>
 | 
				
			||||||
          <th class="header">Samedi {{formatDate(getAnyDays(5))}}</th>
 | 
					          <th class="header" v-for='d,index in 7' >
 | 
				
			||||||
          <th class="header">Dimanche {{formatDate(getAnyDays(6))}}</th>
 | 
					            <p class="childHeader">
 | 
				
			||||||
 | 
					            {{days[index]}}             
 | 
				
			||||||
 | 
					            </p>
 | 
				
			||||||
 | 
					            <p class="childHeader">
 | 
				
			||||||
 | 
					              {{formatDate(getAnyDays(index))}}
 | 
				
			||||||
 | 
					            </p>
 | 
				
			||||||
 | 
					          </th>
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
        <tr v-for="(n,index) in 12">
 | 
					        <tr v-for="(n,index) in 12">
 | 
				
			||||||
          <th class="hour">{{8 + index}}:00-{{9+index}}:00</th>
 | 
					          <th class="hour">{{8 + index}}:00-{{9+index}}:00</th>
 | 
				
			||||||
@ -149,15 +156,83 @@
 | 
				
			|||||||
      <div class="courseGrid">
 | 
					      <div class="courseGrid">
 | 
				
			||||||
        <div class="dayCourse" v-for="element in scheduleByWeek">
 | 
					        <div class="dayCourse" v-for="element in scheduleByWeek">
 | 
				
			||||||
          <template v-for="i,index in element.length">
 | 
					          <template v-for="i,index in element.length">
 | 
				
			||||||
            {{console.log(element[index].start)}}
 | 
					 | 
				
			||||||
            <div class="course" v-bind:style="{background:element[index].color,
 | 
					            <div class="course" v-bind:style="{background:element[index].color,
 | 
				
			||||||
              height:((getDifferenceTime(element[index].end,element[index].start)/7.2)-0.5)+'%', top:((getMarginTop(element, index, index-1)/7.20))+'%'}">      
 | 
					              height:((getDifferenceTime(element[index].end,element[index].start)/7.2)-0.5)+'%', top:((getMarginTop(element, index, index-1)/7.20))+'%'}">      
 | 
				
			||||||
 | 
					              <div class="hourStart">
 | 
				
			||||||
 | 
					                {{getHoursMinutes(element[index].start)}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              <div>Local</div> 
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div class="infos" v-bind:style="{}">
 | 
				
			||||||
 | 
					                <p class="childInfos">{{element[index].course.name}}</p>
 | 
				
			||||||
 | 
					                <p class="childInfos">{{element[index].local}}</p>
 | 
				
			||||||
 | 
					                <p class="childInfos">{{element[index].course.teacher}}</p>
 | 
				
			||||||
 | 
					              </div> 
 | 
				
			||||||
 | 
					              <div class="hourEnd">
 | 
				
			||||||
 | 
					                {{getHoursMinutes(element[index].end)}}
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
           </div>
 | 
					           </div>
 | 
				
			||||||
          </template>
 | 
					          </template>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <template v-else>
 | 
				
			||||||
 | 
					        <table class="table">
 | 
				
			||||||
 | 
					          <tr style="background-color:rgb(24,24,24); height:8.33%;">
 | 
				
			||||||
 | 
					            <th colspan="7" class="header">
 | 
				
			||||||
 | 
					              <div>{{months[currentDate.getMonth()]}} {{currentDate.getFullYear()}}</div>            
 | 
				
			||||||
 | 
					            <button style="position:absolute; top:0; left:0;" @click="changeMonth(-1)">previous</button>
 | 
				
			||||||
 | 
					            <button  style="position:absolute; bottom:0; left:0;"@click="changeMonth(1)">next</button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            </th>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          </tr>
 | 
				
			||||||
 | 
					          <tr style="background-color:rgb(24,24,24); height:8.33%;" >
 | 
				
			||||||
 | 
					          <th class="header"  v-for='d,index in 7' >
 | 
				
			||||||
 | 
					            {{days[index]}}             
 | 
				
			||||||
 | 
					          </th>
 | 
				
			||||||
 | 
					          </tr>
 | 
				
			||||||
 | 
					          <tr v-for="n in 5" style="height:16.67%;">
 | 
				
			||||||
 | 
					            <td v-for="m,i in 7" style="height:16.67%; position:relative;">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              <div v-if="isAValue()" style="top:0; right:2%; border-radius:20%;color:rgb(200,200,200) ; position:absolute;z-index:50;">{{value-shift}}</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              <div style="overflow-y:scroll; height:100%;" >
 | 
				
			||||||
 | 
					              <template v-for="element in month[value-shift]">
 | 
				
			||||||
 | 
					              <div class="course" v-bind:style="{background:element.color, height:100+'%'}">
 | 
				
			||||||
 | 
					                  
 | 
				
			||||||
 | 
					              <div class="hourStart">
 | 
				
			||||||
 | 
					                {{getHoursMinutes(element.start)}}
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div class="infos">
 | 
				
			||||||
 | 
					                <p class="childInfos">{{element.course.name}}</p>
 | 
				
			||||||
 | 
					                <p class="childInfos">{{element.local}}</p>
 | 
				
			||||||
 | 
					                <p class="childInfos">{{element.course.teacher}}</p>
 | 
				
			||||||
 | 
					              </div> 
 | 
				
			||||||
 | 
					              <div class="hourEnd">
 | 
				
			||||||
 | 
					                {{getHoursMinutes(element.end)}}
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					        </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="options">
 | 
				
			||||||
 | 
					      <button v-if="display=='Week'" @click="display='Month'">Month</button>
 | 
				
			||||||
 | 
					      <button v-if="display=='Month'" @click="display='Week'; value=1;">Week</button>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
@ -167,13 +242,14 @@
 | 
				
			|||||||
    margin-top:2%;
 | 
					    margin-top:2%;
 | 
				
			||||||
    align-items:center;
 | 
					    align-items:center;
 | 
				
			||||||
    justify-content:center;
 | 
					    justify-content:center;
 | 
				
			||||||
    grid-template-columns:15vw 70vw;
 | 
					    grid-template-columns:72vw 14.5vw;
 | 
				
			||||||
    column-gap:2.5vw;
 | 
					    column-gap:2vw;
 | 
				
			||||||
 | 
					    overflow:hidden;
 | 
				
			||||||
    grid-template-areas:"options schedule";
 | 
					    grid-template-areas:"schedule options";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  .schedule{
 | 
					  .schedule{
 | 
				
			||||||
    position:relative; 
 | 
					    position:relative; 
 | 
				
			||||||
 | 
					    overflow-y:scroll;
 | 
				
			||||||
    border-radius:20px;
 | 
					    border-radius:20px;
 | 
				
			||||||
    grid-area:schedule;
 | 
					    grid-area:schedule;
 | 
				
			||||||
    width:100%;
 | 
					    width:100%;
 | 
				
			||||||
@ -181,6 +257,8 @@
 | 
				
			|||||||
    background-color:rgba(255,255,255,0.1);    
 | 
					    background-color:rgba(255,255,255,0.1);    
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  .options{
 | 
					  .options{
 | 
				
			||||||
 | 
					    display:flex;
 | 
				
			||||||
 | 
					    flex-direction:column;
 | 
				
			||||||
    border-radius:20px;
 | 
					    border-radius:20px;
 | 
				
			||||||
    grid-area:options;
 | 
					    grid-area:options;
 | 
				
			||||||
    background-color:rgba(255,255,255,0.1);
 | 
					    background-color:rgba(255,255,255,0.1);
 | 
				
			||||||
@ -203,9 +281,17 @@
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  .header{
 | 
					  .header{
 | 
				
			||||||
    align-items:center;
 | 
					 | 
				
			||||||
    width:12.5%;
 | 
					    width:12.5%;
 | 
				
			||||||
    color:#FFFFFF;
 | 
					    color:#FFFFFF;
 | 
				
			||||||
 | 
					    position:relative;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .childHeader{
 | 
				
			||||||
 | 
					    margin-top:0;
 | 
				
			||||||
 | 
					    margin-bottom:0;
 | 
				
			||||||
 | 
					    max-height:14.28%
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  table th:not(:last-child),
 | 
					  table th:not(:last-child),
 | 
				
			||||||
  table td:not(:last-child) {
 | 
					  table td:not(:last-child) {
 | 
				
			||||||
@ -229,7 +315,6 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					 | 
				
			||||||
  .course{
 | 
					  .course{
 | 
				
			||||||
    position:relative;
 | 
					    position:relative;
 | 
				
			||||||
    border: 1px solid black;
 | 
					    border: 1px solid black;
 | 
				
			||||||
@ -245,4 +330,43 @@
 | 
				
			|||||||
    display:block; 
 | 
					    display:block; 
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .infos{
 | 
				
			||||||
 | 
					    height:100%;
 | 
				
			||||||
 | 
					    width:100%;
 | 
				
			||||||
 | 
					    font-size:0.85em;
 | 
				
			||||||
 | 
					    display:flex;
 | 
				
			||||||
 | 
					    flex-direction:column;
 | 
				
			||||||
 | 
					    align-items:center;
 | 
				
			||||||
 | 
					    justify-content:center;
 | 
				
			||||||
 | 
					    position:absolute;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  .childInfos{
 | 
				
			||||||
 | 
					    text-align:center;
 | 
				
			||||||
 | 
					    margin-top:0%;
 | 
				
			||||||
 | 
					    margin-bottom:0%;
 | 
				
			||||||
 | 
					    overflow:hidden;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .hourStart{
 | 
				
			||||||
 | 
					    background-color:rgb(200,200,200);
 | 
				
			||||||
 | 
					    border-radius:5px;
 | 
				
			||||||
 | 
					    position:absolute;
 | 
				
			||||||
 | 
					    top:2%;
 | 
				
			||||||
 | 
					    left:2%;
 | 
				
			||||||
 | 
					    font-size:0.75em;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    border: 1px solid black;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .hourEnd{
 | 
				
			||||||
 | 
					    background-color:rgb(200,200,200);
 | 
				
			||||||
 | 
					    border-radius:3px;
 | 
				
			||||||
 | 
					    position:absolute;
 | 
				
			||||||
 | 
					    bottom:2%;
 | 
				
			||||||
 | 
					    left:2%;
 | 
				
			||||||
 | 
					    font-size:0.7em;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										114
									
								
								frontend/src/schedule.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								frontend/src/schedule.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					  import {ref} from 'vue'
 | 
				
			||||||
 | 
					  export function formatDate(date) {
 | 
				
			||||||
 | 
					    var d = new Date(date),
 | 
				
			||||||
 | 
					        month = '' + (d.getMonth() + 1),
 | 
				
			||||||
 | 
					        day = '' + d.getDate(),
 | 
				
			||||||
 | 
					        year = d.getFullYear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (month.length < 2) 
 | 
				
			||||||
 | 
					        month = '0' + month;
 | 
				
			||||||
 | 
					    if (day.length < 2) 
 | 
				
			||||||
 | 
					        day = '0' + day;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return [day, month, year].join('-');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function durationCourse(element){
 | 
				
			||||||
 | 
					    const hour = element.end.substring(3,5) -element.start.substring(3,5);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return (element.end - element.start)%2;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function sortByDate(a, b) {
 | 
				
			||||||
 | 
					    const nameA = a.start; // ignore upper and lowercase
 | 
				
			||||||
 | 
					    const nameB = b.start; // ignore upper and lowercase
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (nameA < nameB) {
 | 
				
			||||||
 | 
					      return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (nameA > nameB) {
 | 
				
			||||||
 | 
					      return 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0; 
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function getFirstDay(d){
 | 
				
			||||||
 | 
					    var date = new Date(d);
 | 
				
			||||||
 | 
					    return new Date(date.getFullYear(), date.getMonth(), 1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function matrixFromList(list,weekMonday){
 | 
				
			||||||
 | 
					    const weekStart = new Date(weekMonday); 
 | 
				
			||||||
 | 
					    const matrix = new Array(7);
 | 
				
			||||||
 | 
					    for (let i = 0; i < matrix.length; i++) {
 | 
				
			||||||
 | 
					      matrix[i] = [];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for(let key in list){
 | 
				
			||||||
 | 
					      const temp = list[key];
 | 
				
			||||||
 | 
					      const day = new Date(list[key].start);
 | 
				
			||||||
 | 
					      if((((day.getTime()-weekStart.getTime())/60000)<10080) && (((day.getTime()-weekStart.getTime())/60000)>0)){
 | 
				
			||||||
 | 
					        matrix[day.getDay()].push(temp);
 | 
				
			||||||
 | 
					        matrix[day.getDay()].sort((a,b) => sortByDate(a,b));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					      return matrix;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function lastDateOfMonth(d){
 | 
				
			||||||
 | 
					    const date = new Date(d);
 | 
				
			||||||
 | 
					    const temp = new Date(date.getFullYear(), date.getMonth() + 1, 0);
 | 
				
			||||||
 | 
					    return temp.getDate();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  export function monthFromList(list,month){
 | 
				
			||||||
 | 
					    const beginning = getFirstDay(month);
 | 
				
			||||||
 | 
					    const matrix = new Array(lastDateOfMonth(month))
 | 
				
			||||||
 | 
					    for (let i = 0; i < matrix.length; i++) {
 | 
				
			||||||
 | 
					      matrix[i] = [];
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for(let key in list){
 | 
				
			||||||
 | 
					      const temp = list[key];
 | 
				
			||||||
 | 
					      const day = new Date(list[key].start);
 | 
				
			||||||
 | 
					      if(day.getMonth()==month){
 | 
				
			||||||
 | 
					      matrix[day.getDate()].push(temp);
 | 
				
			||||||
 | 
					      matrix[day.getDay()].sort((a,b) => sortByDate(a,b));
 | 
				
			||||||
 | 
					      }}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return matrix;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function sundayToTheEnd(list){
 | 
				
			||||||
 | 
					    const newlist = list;
 | 
				
			||||||
 | 
					    const sunday = newlist.shift();
 | 
				
			||||||
 | 
					    newlist.push(sunday);
 | 
				
			||||||
 | 
					    return newlist;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function getDifferenceTime(date1,date2){
 | 
				
			||||||
 | 
					    return Math.abs((new Date(date2).getTime() - new Date(date1).getTime())/60000);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function getMarginTop(list, index1, index2){
 | 
				
			||||||
 | 
					    if(index2 < 0){
 | 
				
			||||||
 | 
					      const temp = new Date(list[index1].start);
 | 
				
			||||||
 | 
					      temp.setHours(8,0,0);
 | 
				
			||||||
 | 
					      return Math.abs((new Date(list[index1].start).getTime()- temp.getTime())/60000);
 | 
				
			||||||
 | 
					    }   
 | 
				
			||||||
 | 
					    return Math.abs((new Date(list[index1].start).getTime()- new Date(list[index2].end).getTime())/60000)+getMarginTop(list,index2,index2-1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  export function getHoursMinutes(date){
 | 
				
			||||||
 | 
					    const d = new Date(date);
 | 
				
			||||||
 | 
					    return d.getHours()+ ":" + d.getMinutes();  
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user