76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
const BasePage = require('./BasePage');
|
|
|
|
class GenrePage extends BasePage {
|
|
constructor(config) {
|
|
super(config);
|
|
|
|
this.id = 'genre';
|
|
this.title = 'Жанры';
|
|
|
|
}
|
|
|
|
async body(req) {
|
|
const result = {};
|
|
|
|
const query = {
|
|
from: req.query.from || 'search',
|
|
term: req.query.term || '',
|
|
section: req.query.section || '',
|
|
};
|
|
|
|
let searchQuery = '';
|
|
if (query.from == 'search')
|
|
searchQuery = `&type=title&term=${encodeURIComponent(query.term)}`;
|
|
|
|
const entry = [];
|
|
if (query.from) {
|
|
if (query.section) {
|
|
//выбираем подразделы
|
|
const {genreSection} = await this.getGenres();
|
|
const section = genreSection.get(query.section);
|
|
|
|
if (section) {
|
|
let id = 0;
|
|
const all = [];
|
|
for (const g of section) {
|
|
all.push(g.value);
|
|
entry.push(
|
|
this.makeEntry({
|
|
id: ++id,
|
|
title: g.name,
|
|
link: this.navLink({href: `/${encodeURIComponent(query.from)}?genre=${encodeURIComponent(g.value)}${searchQuery}`}),
|
|
})
|
|
);
|
|
}
|
|
|
|
entry.unshift(
|
|
this.makeEntry({
|
|
id: 'whole_section',
|
|
title: '[Весь раздел]',
|
|
link: this.navLink({href: `/${encodeURIComponent(query.from)}?genre=${encodeURIComponent(all.join(','))}${searchQuery}`}),
|
|
})
|
|
);
|
|
}
|
|
} else {
|
|
//выбираем разделы
|
|
const {genreTree} = await this.getGenres();
|
|
let id = 0;
|
|
for (const section of genreTree) {
|
|
entry.push(
|
|
this.makeEntry({
|
|
id: ++id,
|
|
title: section.name,
|
|
link: this.navLink({href: `/genre?from=${encodeURIComponent(query.from)}§ion=${encodeURIComponent(section.name)}${searchQuery}`}),
|
|
})
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
result.entry = entry;
|
|
|
|
return this.makeBody(result, req);
|
|
}
|
|
}
|
|
|
|
module.exports = GenrePage; |