Работа над opds
This commit is contained in:
@@ -89,11 +89,21 @@ class BasePage {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
baseLinks(req) {
|
baseLinks(req, selfAcq = false) {
|
||||||
return [
|
const result = [
|
||||||
|
this.makeLink({href: `${this.opdsRoot}/opensearch`, rel: 'search', type: 'application/opensearchdescription+xml'}),
|
||||||
|
this.makeLink({href: `${this.opdsRoot}/search?term={searchTerms}`, rel: 'search', type: 'application/atom+xml'}),
|
||||||
|
|
||||||
this.navLink({rel: 'start'}),
|
this.navLink({rel: 'start'}),
|
||||||
this.navLink({rel: 'self', href: req.originalUrl, hrefAsIs: true}),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (selfAcq) {
|
||||||
|
result.push(this.acqLink({rel: 'self', href: req.originalUrl, hrefAsIs: true}));
|
||||||
|
} else {
|
||||||
|
result.push(this.navLink({rel: 'self', href: req.originalUrl, hrefAsIs: true}));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
makeBody(content, req) {
|
makeBody(content, req) {
|
||||||
|
|||||||
@@ -119,10 +119,7 @@ class BookPage extends BasePage {
|
|||||||
async body(req) {
|
async body(req) {
|
||||||
const result = {};
|
const result = {};
|
||||||
|
|
||||||
result.link = [
|
result.link = this.baseLinks(req, true);
|
||||||
this.navLink({rel: 'start'}),
|
|
||||||
this.acqLink({rel: 'self', href: req.originalUrl, hrefAsIs: true}),
|
|
||||||
];
|
|
||||||
|
|
||||||
const bookUid = req.query.uid;
|
const bookUid = req.query.uid;
|
||||||
const entry = [];
|
const entry = [];
|
||||||
|
|||||||
45
server/core/opds/OpensearchPage.js
Normal file
45
server/core/opds/OpensearchPage.js
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
const BasePage = require('./BasePage');
|
||||||
|
const XmlParser = require('../xml/XmlParser');
|
||||||
|
|
||||||
|
class OpensearchPage extends BasePage {
|
||||||
|
constructor(config) {
|
||||||
|
super(config);
|
||||||
|
|
||||||
|
this.id = 'opensearch';
|
||||||
|
this.title = 'opensearch';
|
||||||
|
}
|
||||||
|
|
||||||
|
async body() {
|
||||||
|
const xml = new XmlParser();
|
||||||
|
const xmlObject = {};
|
||||||
|
/*
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||||
|
<ShortName>inpx-web</ShortName>
|
||||||
|
<Description>Поиск по каталогу</Description>
|
||||||
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
|
<OutputEncoding>UTF-8</OutputEncoding>
|
||||||
|
<Url type="application/atom+xml;profile=opds-catalog;kind=navigation" template="/opds/search?term={searchTerms}"/>
|
||||||
|
</OpenSearchDescription>
|
||||||
|
*/
|
||||||
|
xmlObject['OpenSearchDescription'] = {
|
||||||
|
'*ATTRS': {xmlns: 'http://a9.com/-/spec/opensearch/1.1/'},
|
||||||
|
ShortName: 'inpx-web',
|
||||||
|
Description: 'Поиск по каталогу',
|
||||||
|
InputEncoding: 'UTF-8',
|
||||||
|
OutputEncoding: 'UTF-8',
|
||||||
|
Url: {
|
||||||
|
'*ATTRS': {
|
||||||
|
type: 'application/atom+xml;profile=opds-catalog;kind=navigation',
|
||||||
|
template: `${this.opdsRoot}/search?term={searchTerms}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
xml.fromObject(xmlObject);
|
||||||
|
|
||||||
|
return xml.toString({format: true});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = OpensearchPage;
|
||||||
@@ -5,6 +5,8 @@ const TitlePage = require('./TitlePage');
|
|||||||
const GenrePage = require('./GenrePage');
|
const GenrePage = require('./GenrePage');
|
||||||
const BookPage = require('./BookPage');
|
const BookPage = require('./BookPage');
|
||||||
|
|
||||||
|
const OpensearchPage = require('./OpensearchPage');
|
||||||
|
|
||||||
module.exports = function(app, config) {
|
module.exports = function(app, config) {
|
||||||
const opdsRoot = '/opds';
|
const opdsRoot = '/opds';
|
||||||
config.opdsRoot = opdsRoot;
|
config.opdsRoot = opdsRoot;
|
||||||
@@ -16,6 +18,8 @@ module.exports = function(app, config) {
|
|||||||
const genre = new GenrePage(config);
|
const genre = new GenrePage(config);
|
||||||
const book = new BookPage(config);
|
const book = new BookPage(config);
|
||||||
|
|
||||||
|
const opensearch = new OpensearchPage(config);
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
['', root],
|
['', root],
|
||||||
['/root', root],
|
['/root', root],
|
||||||
@@ -24,6 +28,8 @@ module.exports = function(app, config) {
|
|||||||
['/title', title],
|
['/title', title],
|
||||||
['/genre', genre],
|
['/genre', genre],
|
||||||
['/book', book],
|
['/book', book],
|
||||||
|
|
||||||
|
['/opensearch', opensearch],
|
||||||
];
|
];
|
||||||
|
|
||||||
const pages = new Map();
|
const pages = new Map();
|
||||||
|
|||||||
Reference in New Issue
Block a user