',
- scope: {
- schedule: '='
- },
+
link: function (scope, element) {
var $slick = element.find('.schedule-slick');
- scope.$watch('schedule', function (value) {
+ scope.$watch('groups', function (value) {
try {
$slick.slick('unslick');
} catch (e) {
diff --git a/client/pages/schedule-mobile.js b/client/pages/schedule-mobile.js
deleted file mode 100644
index 75353b6a..00000000
--- a/client/pages/schedule-mobile.js
+++ /dev/null
@@ -1,79 +0,0 @@
-var populate = require('../../utils/populate').populate;
-const course = require('../../models/course');
-
-function indexEquals(i) {
- return function (_, index) {
- return i === index;
- }
-}
-
-function isRequested(period, semester) {
- return function (schedule) {
- return schedule.period === period && schedule.semester === semester;
- }
-}
-
-module.exports = function (app) {
- app.controller('MobileScheduleController', function ($scope, $http, $location, $routeParams, schedule, team) {
- var current_period = $routeParams.period;
- var current_semester = $routeParams.semester;
- var isScheduleRequested = current_period && current_semester;
-
- $http.get("/schedules", {cache: true})
- .success(function (schedules) {
- // By url params or last element
- var select_fn = isScheduleRequested ? isRequested(current_period, current_semester) : indexEquals(schedules.length - 1);
-
- schedules = schedules.map(function (schedule) {
- var sem = [['spring', 'Весена'], ['autumn', 'Осень']].reduce(function (s, word) {
- if (word[0] === schedule.semester) return word[1];
- else return s[1];
- });
- schedule.text = `${sem} ${schedule.period} года`;
-
- return schedule;
- });
-
- schedules.forEach(function (schedule, i) {
- if (select_fn(schedule, i)) {
- $scope.currentSchedule = schedules[i];
- }
- });
-
- $scope.schedules = schedules;
- $scope.loadSchedule($scope.currentSchedule, isScheduleRequested);
- });
-
- $scope.loadSchedule = function (s, updateURL) {
- var id = s._id;
- var schedule_item = getScheduleByID(id);
-
- if (schedule_item) {
- var sem = schedule_item.semester;
- var period = schedule_item.period;
-
- var url = `/schedule/${period}/${sem}`;
- $http.get(url, {cache: true})
- .success(function (scheduleRecord) {
- $scope.groups = schedule.populate(scheduleRecord.schedule, [
- populate(team.short, 'teacher'),
- populate(course.name, 'lesson')
- ]);
-
- if (updateURL) {
- $location.url(url);
- }
- });
- }
- };
-
- function getScheduleByID(id) {
- var schedules = $scope.schedules;
- for (var i = 0, l = schedules.length; i < l; i++) {
- var s = schedules[i];
- if (id === s._id) return s;
- }
- return null;
- }
- });
-};
\ No newline at end of file
diff --git a/client/pages/schedule.js b/client/pages/schedule.js
index 23f8e5c3..b52b135b 100644
--- a/client/pages/schedule.js
+++ b/client/pages/schedule.js
@@ -1,100 +1,79 @@
-var populate = require("../../utils/populate").populate;
-const course = require("../../models/course");
+var populate = require('../../utils/populate').populate;
+const course = require('../../models/course');
+
+function indexEquals(i) {
+ return function (_, index) {
+ return i === index;
+ }
+}
+
+function isRequested(period, semester) {
+ return function (schedule) {
+ return schedule.period === period && schedule.semester === semester;
+ }
+}
module.exports = function (app) {
- app.controller("ScheduleController", function ($scope, $http, schedule, team) {
- var now = new Date();
- var dates = getDates(now);
+ app.controller('ScheduleController', function ($scope, $http, $location, $routeParams, scheduleData, team) {
+ var current_period = $routeParams.period;
+ var current_semester = $routeParams.semester;
+ var isScheduleRequested = current_period && current_semester;
$http.get("/schedules", {cache: true})
.success(function (schedules) {
- var last = schedules.length - 1;
+ // By url params or last element
+ var select_fn = isScheduleRequested ? isRequested(current_period, current_semester) : indexEquals(schedules.length - 1);
- $scope.schedules = schedules.map(function (schedule) {
- var sem = [["spring", "весеннего"], ["autumn", "осеннего"]].reduce(function (s, word) {
+ schedules = schedules.map(function (schedule) {
+ var sem = [['spring', 'Весена'], ['autumn', 'Осень']].reduce(function (s, word) {
if (word[0] === schedule.semester) return word[1];
else return s[1];
});
+ schedule.text = `${sem} ${schedule.period} года`;
- schedule.text = `Расписание ${sem} семестра ${schedule.period} года`;
return schedule;
});
- $scope.schedules[last].selected = true;
- $scope.currentSchedule = $scope.schedules[last]._id;
- $scope.loadSchedule();
+
+ schedules.forEach(function (schedule, i) {
+ if (select_fn(schedule, i)) {
+ $scope.currentSchedule = schedules[i];
+ }
+ });
+
+ $scope.schedules = schedules;
+ $scope.loadSchedule($scope.currentSchedule, isScheduleRequested);
});
- $scope.loadSchedule = function (id) {
- var schedule_item = getScheduleByID(id || $scope.currentSchedule);
+ $scope.loadSchedule = function (s, updateURL) {
+ var id = s._id;
+ var schedule_item = getScheduleByID(id);
- if(schedule_item) {
+ if (schedule_item) {
var sem = schedule_item.semester;
var period = schedule_item.period;
var url = `/schedule/${period}/${sem}`;
$http.get(url, {cache: true})
.success(function (scheduleRecord) {
- $scope.groups = schedule.populate(scheduleRecord.schedule, [
- populate(team.short, "teacher"),
- populate(course.name, "lesson")
+ $scope.groups = scheduleData.populate(scheduleRecord.schedule, [
+ populate(team.short, 'teacher'),
+ populate(course.name, 'lesson')
]);
+
+ if (updateURL) {
+ $location.url(url);
+ }
});
}
};
function getScheduleByID(id) {
var schedules = $scope.schedules;
- for (var i in schedules) {
+ for (var i = 0, l = schedules.length; i < l; i++) {
var s = schedules[i];
if (id === s._id) return s;
}
return null;
}
-
- $scope.isToday = function (weekDayIndex) {
- return (now.getDay() - 1) === weekDayIndex;
- };
-
- $scope.weekDay = function (weekDayIndex) {
- return dates[weekDayIndex];
- };
-
- $(window).scroll(function () {
- if ($(this).scrollTop() >= 220) {
- $(".schedule table thead").addClass("fix animated fadeInDown");
- $(".schedule table tbody").addClass("fix");
- } else {
- $(".schedule table thead").removeClass("fix animated fadeInDown");
- $(".schedule table tbody").removeClass("fix");
- }
- });
});
-};
-
-/**
- * Generates list of numbers
- * @param {Number} start starting value
- * @param {Number} num amount of numbers in list
- * @param {Number} step difference value
- * @return {Array} list of numbers
- */
-function range(start, num, step) {
- var list = [];
- var val = start;
- for (var i = 0; i < num; i++) {
- list.push(val);
- val += step;
- }
- return list;
-}
-
-function getDates(start) {
- var day = start.getDay();
- return range(0, 6, 1).reduce(function (dates, weekDay) {
- var d = 1 + weekDay - day;
- var time = start.getTime() + (1000 * 60 * 60 * 24) * d;
- var date = new Date(time);
- dates.push(date.getDate());
- return dates;
- }, []);
-}
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/templates/views/schedule-mobile.html b/templates/views/schedule-mobile.html
deleted file mode 100644
index 7334eb7b..00000000
--- a/templates/views/schedule-mobile.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/templates/views/schedule.html b/templates/views/schedule.html
index ea44d982..f39f1cf0 100644
--- a/templates/views/schedule.html
+++ b/templates/views/schedule.html
@@ -1,66 +1,9 @@
\ No newline at end of file
diff --git a/templates/views/schedule/table.html b/templates/views/schedule/table.html
new file mode 100644
index 00000000..57f90253
--- /dev/null
+++ b/templates/views/schedule/table.html
@@ -0,0 +1,58 @@
+