diff --git a/src/client/app.js b/src/client/app.js
index 182be1af..74639193 100644
--- a/src/client/app.js
+++ b/src/client/app.js
@@ -126,19 +126,6 @@ app.config(($locationProvider, $routeProvider) => {
.then(i => i.data)
}
},
- {
- name: '/album/:id',
- template: '',
- resolve: {
- album: ($route, api) => {
- let id = $route.current.params.id
-
- return api.album
- .fetch(id)
- .then(i => i.data)
- }
- }
- },
{
name: '/awards',
template: '',
diff --git a/src/models/menu.js b/src/models/menu.js
index ec855658..384b61d9 100644
--- a/src/models/menu.js
+++ b/src/models/menu.js
@@ -45,9 +45,12 @@ export default [
'color': 'pink'
},
{
- 'text': 'Галерея',
- 'url': '/gallery',
- 'color': 'red'
+ text: 'Галерея',
+ url: '/gallery',
+ color: 'red',
+ items: [
+ {url: '/album/*', text: ''},
+ ]
},
{
'text': 'Документы',
diff --git a/src/routes/albums.js b/src/routes/albums.js
new file mode 100644
index 00000000..686f59b4
--- /dev/null
+++ b/src/routes/albums.js
@@ -0,0 +1,62 @@
+const React = require('react')
+const Article = require('../components/Article')
+const {render} = require('../lib/render')
+const getPathWithNoTrailingSlash = require('../lib/url').getPathWithNoTrailingSlash
+const {get} = require('koa-route')
+const {c} = require('../core/db')
+
+async function findAlbum(id) {
+ return c('albums').findOne({id})
+}
+
+async function processAlbum(album) {
+ const url = `/album/${album.id}`
+
+ const previewFromImage = imgs => imgs.length ? imgs[0] : null
+ const previewImageId = album.preview ? album.preview : previewFromImage(album.images)
+ if (previewImageId) {
+ const image = await c('images').findOne({_id: previewImageId})
+ album.preview = image.data.medium
+ }
+
+ return {
+ ...album,
+ url,
+ }
+}
+
+function getMeta(album) {
+ return {
+ title: album.title,
+ description: album.title,
+ }
+}
+
+function getAlbum() {
+ return get('/album/:id', async (ctx, id) => {
+ const path = getPathWithNoTrailingSlash(ctx.path)
+ const record = await findAlbum(id)
+
+ if (record) {
+ const album = await processAlbum(record)
+
+ const Component = (
+
+ )
+
+ ctx.type = 'text/html'
+ ctx.body = await render(path, Component, getMeta(album), {commentsEnabled: true})
+ } else {
+ ctx.status = 404
+ }
+ })
+}
+
+exports.getAlbum = getAlbum
diff --git a/src/routes/gallery.js b/src/routes/gallery.js
index 0b8be74c..a1341aec 100644
--- a/src/routes/gallery.js
+++ b/src/routes/gallery.js
@@ -6,7 +6,6 @@ import {json} from './';
export default function () {
return compose([
gallery(),
- album()
]);
};
@@ -30,18 +29,6 @@ function gallery() {
));
}
-function album() {
- return route.get('/album/:id', json(
- async(ctx, id) => {
- let record = await c('albums').findOne({
- id: id
- });
- record = await processAlbum(record);
- ctx.body = record;
- }
- ));
-}
-
const processAlbum = async album => {
album.url = `/album/${album.id}`;
diff --git a/src/server.js b/src/server.js
index 2606f33e..86e4ebbc 100644
--- a/src/server.js
+++ b/src/server.js
@@ -22,6 +22,7 @@ const config = require('./config')
const error = require('./middlewares/error')
const home = require('./routes/home')
const article = require('./routes/articles')
+const albums = require('./routes/albums')
const dirPublic = path.join(__dirname, '../public')
const dirTemplates = path.join(__dirname, 'templates')
@@ -54,6 +55,7 @@ export default function (store) {
app.use(home.getHome(5))
app.use(article.getArticles(5))
app.use(article.getArticle())
+ app.use(albums.getAlbum())
app.use(routes(store))
return Server(app.callback())