diff --git a/src/client/app.js b/src/client/app.js index d0b74efc..a47e614b 100644 --- a/src/client/app.js +++ b/src/client/app.js @@ -10,6 +10,7 @@ import GalleryItem from './components/GalleryItem'; import TeamMemberProfile from './components/TeamMemberProfile'; import AppController from './controllers/AppController'; import HomeController from './controllers/HomeController'; +import ScheduleController from './controllers/ScheduleController'; import TeamController from './controllers/TeamController'; import GalleryController from './controllers/GalleryController'; import AlbumController from './controllers/AlbumController'; @@ -106,7 +107,6 @@ app.run(($location, $rootScope, $http) => { Strip, UppercaseFirst, require('./ui/timeline'), - require('./pages/schedule'), MainMenu, Breadcrumbs, Document, @@ -115,6 +115,7 @@ app.run(($location, $rootScope, $http) => { TeamMemberProfile, AppController, HomeController, + ScheduleController, TeamController, GalleryController, AlbumController, diff --git a/src/client/controllers/ScheduleController.js b/src/client/controllers/ScheduleController.js new file mode 100644 index 00000000..bef86830 --- /dev/null +++ b/src/client/controllers/ScheduleController.js @@ -0,0 +1,76 @@ +import {populate} from '../../utils/populate'; +import {getCourseNameByID} from '../../models/course'; +import {indexEquals} from '../../utils/common'; +import {translateAnItem} from '../../utils/common'; + +function isRequested(period, semester) { + return function (schedule) { + return schedule.period === period && schedule.semester === semester; + } +} + +export default function (app) { + app.controller('ScheduleController', ($scope, $http, $location, $routeParams, scheduleData, team, menu) => { + menu.activate('/schedule'); + + let current_period = $routeParams.period; + let current_semester = $routeParams.semester; + let isScheduleRequested = current_period && current_semester; + + $http.get('/schedules', {cache: true}) + .success(schedules => { + // By url params or last element + let selector = isScheduleRequested ? isRequested(current_period, current_semester) : indexEquals(schedules.length - 1); + + schedules = schedules.map(schedule => { + let sem = [['spring', 'Весена'], ['autumn', 'Осень']] + .reduce(translateAnItem( + i => i[0] === schedule.semester, + i => i[1] + )); + schedule.text = `${sem} ${schedule.period} года`; + + return schedule; + }); + + schedules.forEach(function (schedule, i) { + if (selector(schedule, i)) { + $scope.currentSchedule = schedules[i]; + } + }); + + $scope.schedules = schedules; + $scope.loadSchedule($scope.currentSchedule, isScheduleRequested); + }); + + $scope.loadSchedule = (s, updateURL) => { + let id = s._id; + let schedule_item = getScheduleByID(id); + + if (schedule_item) { + let sem = schedule_item.semester; + let period = schedule_item.period; + + let url = `/schedule/${period}/${sem}`; + $http.get(url, {cache: true}) + .success(scheduleRecord => { + $scope.groups = scheduleData.populate(scheduleRecord.schedule, [ + populate(team.short, 'teacher'), + populate(getCourseNameByID, 'lesson') + ]); + + if (updateURL) $location.url(url); + }); + } + }; + + function getScheduleByID(id) { + let schedules = $scope.schedules; + for (let i = 0, l = schedules.length; i < l; i++) { + let s = schedules[i]; + if (id === s._id) return s; + } + return null; + } + }); +}; diff --git a/src/client/pages/schedule.js b/src/client/pages/schedule.js deleted file mode 100644 index 87802c46..00000000 --- a/src/client/pages/schedule.js +++ /dev/null @@ -1,81 +0,0 @@ -import {populate} from '../../utils/populate'; -import {getCourseNameByID} from '../../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, $location, $routeParams, scheduleData, team, menu) { - menu.activate('/schedule'); - - 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 = scheduleData.populate(scheduleRecord.schedule, [ - populate(team.short, 'teacher'), - populate(getCourseNameByID, '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