Skip to content

Instantly share code, notes, and snippets.

@Ginden
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ginden/dbddb241827f662f9a92 to your computer and use it in GitHub Desktop.
Save Ginden/dbddb241827f662f9a92 to your computer and use it in GitHub Desktop.
// Klasa - plan lekcji.
function LessionPlan() {
// właściwość obiektu - _table - będzie przechowywać plan lekcji
this._table = [];
// tworzymy tabelę tablic
for (var i = 0; i < 7; i++) {
this._table.push([]);
}
// właściwość obiektu - godziny zajęć
this._hours = [
"7:15-8:00",
"8:00-8:45",
"8:50-9:35",
"9:40-10:25",
"10:30-11:15",
"11:30-12:15",
"12:25-13:10",
"13:15-14:00",
"14:10-14:55"
];
};
// Metoda planu lekcji - dodaje dodanego dnia o określonej godzinie daną lekcję
LessionPlan.prototype.add = function add(day, hour, lession) {
this._table[day][hour] = lession;
};
// Metoda planu lekcji - pobiera plan na dany dzień
LessionPlan.prototype.getDayPlan = function getDayPlan(day) {
return this._table[day];
};
// Metoda planu lekcji - wywołuje funkcję `callback` z parametrami: dzień (liczony od 0), godzina lekcyjna (liczona od 0), lekcja (obiekt)
LessionPlan.prototype.forEachLession = function(callback) {
this._table.forEach(function(dayPlan, day) {
dayPlan.forEach(function(lession, hour) {
callback(day, hour, lession);
});
});
};
var plan2a = new LessionPlan();
// Lista lekcji
var lessions = {
math: {
name: 'matma',
classroom: 5
},
physics: {
name: 'fizyka',
classroom: 8
},
computerScience: {
name: 'informatyka',
classroom: 12
},
polish: {
name: 'polski',
classroom: 15
},
english: {
name: 'angielski',
classroom: 14
},
german: {
name: 'niemiecki',
classroom: 17
},
something: { // co to ma być za przedmiot?
name: 'człowiek i środ.',
classroom: 23
},
history: {
name: 'historia',
classroom: 19
},
catholicism: {
name: 'religia',
classroom: 31
},
empty: {
name: '---',
classroom: null
}
};
// Lista dni - niepotrzebna, ale sprawia, że kod jest bardziej czytelny
var day = {
monday: 0,
tuesday: 1,
wednesday: 2,
thursday: 3,
friday: 4,
saturday: 5,
sunday: 6
};
var lessionsInDay = [];
lessionsInDay[day.monday] = [
lessions.empty,
lessions.math,
lessions.polish,
lessions.polish,
lessions.physics,
lessions.english,
lessions.german
];
lessionsInDay[day.tuesday] = [
lessions.physics,
lessions.math,
lessions.empty,
lessions.computerScience,
lessions.computerScience
]
lessionsInDay[day.wednesday] = [
lessions.german,
lessions.polish,
lessions.polish,
lessions.math,
lessions.math,
lessions.english
]
lessionsInDay[day.thursday] = [
lessions.empty,
lessions.math,
lessions.math,
lessions.something,
lessions.physics,
lessions.physics,
lessions.polish,
lessions.computerScience
]
lessionsInDay[day.friday] = [
lessions.math,
lessions.math,
lessions.math,
lessions.math,
lessions.math,
lessions.physics,
lessions.physics
];
// Iteruje po każdym dniu
lessionsInDay.forEach(function(dayPlan, dayId) {
// Iteruje po każdej lekcji w danym dniu
dayPlan.forEach(function(lession, hour) {
// Przypisuje do planu lekcji w odpowiednim miejscu
plan2a.add(dayId, hour, lession || lessions.empty);
});
});
// Funkcja tworząca cały plan jako HTML
var stworzPlan = function(plan) {
plan.forEachLession(function(day, hour, lession) {
var aktualnyDzien = day + 1; // + 1, ponieważ zaczynamy od 0, a w HTMLu jest od 1
$("<p>" + lession.name + '</p>')
.attr('data-classroom', lession.classroom) // zapisujemy numer klasy w atrybucie o nazwie "data-classroom"
.appendTo(".dzien" + aktualnyDzien);
});
};
stworzPlan(plan2a);
// Zapisujemy dymek jako zmienną - nie ma co szukać go za każdym razem.
var $dymek = $('<div id="dymek"></div>');
$dymek.appendTo('body');
// Wybieramy wszystkie elementy p których rodzic nie ma klasy godzina, a same elementy nie mają klasy naglowek
$('*:not(.godzina) > p:not(.naglowek)')
.hover(function pobierztxt(p) {
p = $(this);
var lekcja = (p).text();
// Brak lekcji = brak sali lekcyjnej.
if (lekcja && lekcja !== lessions.empty.name) {
$dymek.css('display', 'block');
$dymek.text('Sala nr '+p.attr('data-classroom'));
var offset = p.offset();
$dymek.offset({
left: offset.left,
top: offset.top - 50
});
}
},
function(p) {
p = $(this);
$dymek.css('display', 'none');
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment