diff --git a/src/client/app.js b/src/client/app.js
index 5297c74c..89078bcc 100644
--- a/src/client/app.js
+++ b/src/client/app.js
@@ -17,9 +17,9 @@ import ScheduleRecord from './components/ScheduleRecord';
import FooterLinks from './components/FooterLinks';
import PageSchool from './components/PageSchool';
+import PageSchedule from './components/PageSchedule';
import AppController from './controllers/AppController';
-import ScheduleController from './controllers/ScheduleController';
import CollectiveController from './controllers/CollectiveController';
import GalleryController from './controllers/GalleryController';
import AlbumController from './controllers/AlbumController';
@@ -91,8 +91,8 @@ app.run(($location, $rootScope, $http) => {
AlbumCollection,
TeacherProfile,
PageSchool,
+ PageSchedule,
AppController,
- ScheduleController,
CollectiveController,
GalleryController,
AlbumController,
@@ -106,10 +106,6 @@ app.run(($location, $rootScope, $http) => {
ScheduleRecord,
FooterLinks,
function (app) {
- app.controller('SchedulePageController', ($scope) => {
- $scope.pageClass = 'page-schedule';
- });
-
app.controller('GalleryPageController', ($scope) => {
$scope.pageClass = 'page-gallery';
});
diff --git a/src/client/components/PageSchedule.js b/src/client/components/PageSchedule.js
new file mode 100644
index 00000000..d62663d3
--- /dev/null
+++ b/src/client/components/PageSchedule.js
@@ -0,0 +1,74 @@
+import template from '../../templates/components/page-schedule.html';
+import {populate} from '../../utils/populate';
+import {getCourseNameByID} from '../../models/course';
+import {indexEquals} from '../../utils/common';
+import {select, choise} from '../../utils/common';
+
+function isRequested(period, semester) {
+ return function (schedule) {
+ return schedule.period === period && schedule.semester === semester;
+ }
+}
+
+export default function (app) {
+ app.component('pageSchedule', {
+ template: template,
+ controller: function($http, $location, $routeParams, api, menu) {
+ this.pageClass = 'page-schedule';
+ menu.activate('/schedule');
+
+ let current_period = $routeParams.period;
+ let current_semester = $routeParams.semester;
+ let isScheduleRequested = current_period && current_semester;
+
+ this.schedules = [];
+ let getScheduleByID = (id) => choise(
+ this.schedules,
+ select(i => i._id === id)
+ );
+
+ api.schedule.list()
+ .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(select(
+ i => i[0] === schedule.semester,
+ i => i[1]
+ ));
+ schedule.text = `${sem} ${schedule.period} года`;
+
+ return schedule;
+ });
+
+ schedules.forEach((schedule, i) => {
+ if (selector(schedule, i)) {
+ this.currentSchedule = schedules[i];
+ }
+ });
+
+ this.schedules = schedules;
+ this.loadSchedule(this.currentSchedule, isScheduleRequested);
+ });
+
+ this.loadSchedule = (s, doUpdateURL) => {
+ let id = s._id;
+ let schedule_item = getScheduleByID(id);
+
+ if (schedule_item) {
+ let sem = schedule_item.semester;
+ let period = schedule_item.period;
+
+ api.schedule.get(period, sem, true)
+ .success(scheduleRecord => {
+ this.schedule = scheduleRecord.schedule;
+
+ if (doUpdateURL) $location.url(api.schedule.buildScheduleUrl(period, sem));
+ });
+ }
+ };
+ }
+ });
+};
\ No newline at end of file
diff --git a/src/client/config.js b/src/client/config.js
index 4c605835..54e62994 100644
--- a/src/client/config.js
+++ b/src/client/config.js
@@ -27,8 +27,7 @@ export let routes = [
},
{
name: '/schedule/:period?/:semester?',
- templateUrl: '/views/schedule.html',
- controller: 'SchedulePageController',
+ template: '