Oppgave 11
Lag en webside der man kan skrive ut en kalender
Man skal her kunne oppgi hvilken ukedag kalenderen skal begynne på, og hvor mange dager det skal være i måneden.
Resultat
Du kan endre på kalenderen! Maks lov med 8 dager i uka dessverre.
Koden
JavaScript
window.onload = ready;
function ready() {
var weekStart = document.getElementById("o11-cal-start");
var daysInMonth = document.getElementById("o11-cal-days");
var daysInWeek = document.getElementById("o11-cal-week");
writeCalendar(daysInMonth.value, weekStart.value, daysInWeek.value);
weekStart.oninput = function(){
writeCalendar(daysInMonth.value, this.value, daysInWeek.value)
};
daysInMonth.oninput = function(){
writeCalendar(this.value, weekStart.value, daysInWeek.value)
};
daysInWeek.oninput = function(){
writeCalendar(daysInMonth.value, weekStart.value, this.value)
};
}
function writeCalendar(daysInMonth, weekStart, daysInWeek) {
var weekStart = parseInt(weekStart);
var calendar = document.getElementById("calendar");
var dayNames = ["Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn", "Doomsday"];
var weekStartHTML = "<div class='cal-row'>";
var weekEndHTML = "</div>";
var tmpHTML = weekStartHTML;
var extraStart = false;
if (daysInWeek > 8 || daysInMonth <= 7) {
return false;
}
calendar.innerHTML = ""; // Tøm kalender før start
// Lag en rad med ukedagenes navn
for (var i = 0; i < daysInWeek; i++) {
var offset = Math.abs((i - weekStart) % dayNames.length);
tmpHTML += putDay(dayNames[offset]);
if (dayNames.length === i) {
i = 0;
}
}
// Avslutt raden
tmpHTML += weekEndHTML + weekStartHTML;
// Lag alle dagene i månden
for (var i = 1; i <= daysInMonth; i++) {
if (extraStart === false) {
extraStart = true;
// Lag ekstra dager når uka starter på en annen dag enn mandag
for (var j = daysInMonth-weekStart+1; j <= daysInMonth; j++) {
tmpHTML += putDay(j);
}
}
tmpHTML += putDay(i);
// Avslutt og lag en ny rad for hver gjeldene dag er delelig med antall dager i uka
if ((i+weekStart)%daysInWeek === 0) {
tmpHTML += weekEndHTML + weekStartHTML;
}
}
// Output HTML
calendar.innerHTML = tmpHTML;
// Wrap en dag i HTML.
function putDay(day) {
return "<span style='width:" + (100/daysInWeek) + "%'>" + day + "</span>";
}
}
HTML
<div class="row input-field">
<label for="o11-cal-start" class="col s4">Først dag i uka</label>
<label for="o11-cal-days" class="col s4">Dager i måneden</label>
<label for="o11-cal-week" class="col s4">Dager i uka</label>
</div>
<div class="row input-field">
<select id="o11-cal-start" class="col s4">
<option value="0">Mandag</option>
<option value="1">Tirsdag</option>
<option value="2">Onsdag</option>
<option value="3">Torsdag</option>
<option value="4">Fredag</option>
<option value="5">Lørdag</option>
<option value="6">Søndag</option>
</select>
<input type="number" id="o11-cal-days" class="col s4" min="7" value="30">
<input type="number" id="o11-cal-week" class="col s4" max="8" min="1" value="7">
</div>
<div id="calendar"></div>