245 lines
7.5 KiB
JavaScript
245 lines
7.5 KiB
JavaScript
import 'babel-polyfill';
|
|
|
|
import Navigation from './components/Navigation';
|
|
import MainMenu from './components/MainMenu';
|
|
import Breadcrumbs from './components/Breadcrumbs';
|
|
import Document from './components/Document';
|
|
import Award from './components/Award';
|
|
import GalleryItem from './components/GalleryItem';
|
|
import AlbumCollection from './components/AlbumCollection';
|
|
import TeacherProfile from './components/TeacherProfile';
|
|
import Timeline from './components/Timeline';
|
|
import TimelineRecord from './components/TimelineRecord';
|
|
import TimelineRecordInstagram from './components/TimelineRecordInstagram';
|
|
import Schedule from './components/Schedule';
|
|
import ScheduleTable from './components/ScheduleTable';
|
|
import ScheduleSlider from './components/ScheduleSlider';
|
|
import ScheduleSlide from './components/ScheduleSlide';
|
|
import ScheduleRecord from './components/ScheduleRecord';
|
|
import FooterLinks from './components/FooterLinks';
|
|
import Article from './components/Article';
|
|
import ArticlePageControl from './components/ArticlePageControl';
|
|
import Album from './components/Album';
|
|
import Parallax from './components/Parallax';
|
|
|
|
import PageSchool from './components/PageSchool';
|
|
import PageEvents from './components/PageEvents';
|
|
import PageEvent from './components/PageEvent';
|
|
import PageSchedule from './components/PageSchedule';
|
|
import PageCollective from './components/PageCollective';
|
|
import PageTeacher from './components/PageTeacher';
|
|
import PageGallery from './components/PageGallery';
|
|
import PageAlbum from './components/PageAlbum';
|
|
import PageDocuments from './components/PageDocuments';
|
|
|
|
import AppController from './controllers/AppController';
|
|
import CopyrightController from './controllers/CopyrightController';
|
|
import ContactsController from './controllers/ContactsController';
|
|
|
|
import RemoveHashtags from './filters/RemoveHashtags';
|
|
import RemoveNewline from './filters/RemoveNewline';
|
|
import Strip from './filters/Strip';
|
|
import Join from './filters/Join';
|
|
import UppercaseFirst from './filters/UppercaseFirst';
|
|
import Bytes from './filters/Bytes';
|
|
import Ext from './filters/Ext';
|
|
|
|
import IOService from './services/io';
|
|
import MenuService from './services/menu';
|
|
import API from './services/api';
|
|
|
|
import {sortByPattern} from '../utils/sort';
|
|
import {documentsSortPattern, collectiveSortPattern} from './config';
|
|
|
|
let app = angular.module('hudozka', [
|
|
'ngRoute',
|
|
'angulartics',
|
|
'angulartics.google.analytics',
|
|
'angularSpinner'
|
|
]);
|
|
|
|
app.config(($locationProvider, $routeProvider) => {
|
|
$locationProvider.hashPrefix('!');
|
|
$locationProvider.html5Mode(true);
|
|
|
|
let routers = [
|
|
{
|
|
name: '/',
|
|
template: '<page-school></page-school>',
|
|
title: 'ДХШ Шлиссельбурга'
|
|
},
|
|
{
|
|
name: '/events/:page?',
|
|
template: '<page-events page="{{$.page.page}}" total-pages="{{$.page.totalPages}}" posts="$.page.data"></page-events>',
|
|
title: 'События Школы',
|
|
resolveAs: '$',
|
|
resolve: {
|
|
page: ($route, api) => {
|
|
let page = $route.current.params.page;
|
|
if(!page) page = 1;
|
|
|
|
return api.event
|
|
.list(page)
|
|
.then(i => i.data)
|
|
.then(i => {
|
|
let totalPages = Math.ceil(i.total / i.limit);
|
|
return {
|
|
data: i.data,
|
|
page: page,
|
|
totalPages: totalPages
|
|
}
|
|
});
|
|
}
|
|
}
|
|
},
|
|
{
|
|
name: '/article/:event',
|
|
template: '<page-event></page-event>'
|
|
},
|
|
{
|
|
name: '/schedule/:period?/:semester?',
|
|
template: '<page-schedule schedules="$resolve.list"></page-schedule>',
|
|
title: 'Расписание',
|
|
resolve: {
|
|
list: api => api.schedule
|
|
.list()
|
|
.then(i => i.data)
|
|
}
|
|
},
|
|
{
|
|
name: '/collective',
|
|
template: '<page-collective members="$resolve.list"></page-collective>',
|
|
title: 'Преподаватели',
|
|
resolve: {
|
|
list: api => api.teacher
|
|
.list(collectiveSortPattern)
|
|
.then(i => i.data)
|
|
}
|
|
},
|
|
{
|
|
name: '/teacher/:id',
|
|
template: '<page-teacher member="$resolve.profile"></page-teacher>',
|
|
title: 'Преподаватели',
|
|
resolve: {
|
|
profile: ($route, api) => {
|
|
let id = $route.current.params.id;
|
|
return api.teacher
|
|
.fetch(id)
|
|
.then(i => i.data);
|
|
}
|
|
}
|
|
},
|
|
{
|
|
name: '/gallery',
|
|
template: '<page-gallery albums="$resolve.list"></page-gallery>',
|
|
title: 'Работы учащихся',
|
|
resolve: {
|
|
list: api => api.album
|
|
.list()
|
|
.then(i => i.data)
|
|
}
|
|
},
|
|
{
|
|
name: '/album/:id',
|
|
template: '<page-album album="$resolve.album"></page-album>',
|
|
resolve: {
|
|
album: ($route, api) => {
|
|
let id = $route.current.params.id;
|
|
|
|
return api.album
|
|
.fetch(id)
|
|
.then(i => i.data)
|
|
}
|
|
}
|
|
},
|
|
{
|
|
name: '/documents',
|
|
template: '<page-documents awards="$resolve.awards" documents="$resolve.documents"></page-documents>',
|
|
title: 'Документы',
|
|
resolve: {
|
|
awards: api => api.document
|
|
.awards()
|
|
.then(i => i.data),
|
|
|
|
documents: api => api.document
|
|
.documents()
|
|
.then(i => i.data)
|
|
.then(i => {
|
|
return sortByPattern(i, documentsSortPattern, i => i.category);
|
|
})
|
|
}
|
|
}
|
|
]
|
|
.map(i => {
|
|
let path = i.name;
|
|
delete i.name;
|
|
return {
|
|
path: path,
|
|
route: i
|
|
}
|
|
});
|
|
|
|
routers.forEach(i => {
|
|
$routeProvider.when(i.path, i.route);
|
|
});
|
|
|
|
$routeProvider.otherwise({
|
|
templateUrl: '/404.html'
|
|
});
|
|
});
|
|
|
|
app.run(($location, $rootScope, $http) => {
|
|
$rootScope.$on('$routeChangeSuccess', (event, current) => {
|
|
let title = current['$$route'].title;
|
|
if (title) $rootScope.title = title;
|
|
});
|
|
|
|
$http.defaults.headers.common['Accept'] = 'application/json';
|
|
});
|
|
|
|
[
|
|
API,
|
|
IOService,
|
|
MenuService,
|
|
RemoveHashtags,
|
|
RemoveNewline,
|
|
Strip,
|
|
Join,
|
|
UppercaseFirst,
|
|
Bytes,
|
|
Ext,
|
|
MainMenu,
|
|
Navigation,
|
|
Breadcrumbs,
|
|
Timeline,
|
|
TimelineRecord,
|
|
TimelineRecordInstagram,
|
|
Article,
|
|
ArticlePageControl,
|
|
Album,
|
|
Parallax,
|
|
Document,
|
|
Award,
|
|
GalleryItem,
|
|
AlbumCollection,
|
|
TeacherProfile,
|
|
PageSchool,
|
|
PageEvent,
|
|
PageEvents,
|
|
PageSchedule,
|
|
PageCollective,
|
|
PageTeacher,
|
|
PageGallery,
|
|
PageAlbum,
|
|
PageDocuments,
|
|
AppController,
|
|
CopyrightController,
|
|
ContactsController,
|
|
Schedule,
|
|
ScheduleTable,
|
|
ScheduleSlider,
|
|
ScheduleSlide,
|
|
ScheduleRecord,
|
|
FooterLinks
|
|
].map(i => i(app));
|