From cef4bc6bd5ecced5a4ba8ce7d798fa3f50b0d56f Mon Sep 17 00:00:00 2001 From: Roman Timashev Date: Thu, 25 Feb 2016 18:40:48 +0300 Subject: [PATCH] + PageSchedule component --- src/client/app.js | 8 +-- src/client/components/PageSchedule.js | 74 ++++++++++++++++++++ src/client/config.js | 3 +- src/client/controllers/ScheduleController.js | 57 +-------------- src/templates/components/page-schedule.html | 10 +-- 5 files changed, 83 insertions(+), 69 deletions(-) create mode 100644 src/client/components/PageSchedule.js 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: '', title: 'Расписание' }, { diff --git a/src/client/controllers/ScheduleController.js b/src/client/controllers/ScheduleController.js index 48f69368..f428de97 100644 --- a/src/client/controllers/ScheduleController.js +++ b/src/client/controllers/ScheduleController.js @@ -10,60 +10,5 @@ function isRequested(period, semester) { } export default function (app) { - app.controller('ScheduleController', ($scope, $http, $location, $routeParams, api, menu) => { - menu.activate('/schedule'); - - let current_period = $routeParams.period; - let current_semester = $routeParams.semester; - let isScheduleRequested = current_period && current_semester; - - $scope.schedules = []; - let getScheduleByID = (id) => choise( - $scope.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)) { - $scope.currentSchedule = schedules[i]; - } - }); - - $scope.schedules = schedules; - $scope.loadSchedule($scope.currentSchedule, isScheduleRequested); - }); - - $scope.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 => { - $scope.schedule = scheduleRecord.schedule; - - if (doUpdateURL) $location.url(api.schedule.buildScheduleUrl(period, sem)); - }); - } - }; - }); + //app.controller('ScheduleController', ); }; diff --git a/src/templates/components/page-schedule.html b/src/templates/components/page-schedule.html index 2e28d89c..e4ad7475 100644 --- a/src/templates/components/page-schedule.html +++ b/src/templates/components/page-schedule.html @@ -1,13 +1,13 @@ -
+
- +
\ No newline at end of file