|
@@ -1,21 +1,55 @@
|
|
|
|
+const WebWorker = require('../WebWorker');//singleton
|
|
const XmlParser = require('../xml/XmlParser');
|
|
const XmlParser = require('../xml/XmlParser');
|
|
|
|
|
|
class BasePage {
|
|
class BasePage {
|
|
constructor(config) {
|
|
constructor(config) {
|
|
this.config = config;
|
|
this.config = config;
|
|
|
|
|
|
|
|
+ this.webWorker = new WebWorker(config);
|
|
this.rootTag = 'feed';
|
|
this.rootTag = 'feed';
|
|
|
|
+ this.opdsRoot = '/opds';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ makeEntry(entry = {}) {
|
|
|
|
+ if (!entry.id)
|
|
|
|
+ throw new Error('makeEntry: no id');
|
|
|
|
+ if (!entry.title)
|
|
|
|
+ throw new Error('makeEntry: no title');
|
|
|
|
+
|
|
|
|
+ const result = {
|
|
|
|
+ updated: (new Date()).toISOString().substring(0, 19) + 'Z',
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ return Object.assign(result, entry);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ makeLink(attrs) {
|
|
|
|
+ return {'*ATTRS': attrs};
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ navLink(attrs) {
|
|
|
|
+ return this.makeLink({
|
|
|
|
+ href: this.opdsRoot + (attrs.href || ''),
|
|
|
|
+ rel: attrs.rel || '',
|
|
|
|
+ type: 'application/atom+xml; profile=opds-catalog; kind=navigation',
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
makeBody(content) {
|
|
makeBody(content) {
|
|
- if (!this.id)
|
|
|
|
- throw new Error('makeBody: no id');
|
|
|
|
|
|
+ const base = this.makeEntry({id: this.id, title: this.title});
|
|
|
|
+ base['*ATTRS'] = {
|
|
|
|
+ 'xmlns': 'http://www.w3.org/2005/Atom',
|
|
|
|
+ 'xmlns:dc': 'http://purl.org/dc/terms/',
|
|
|
|
+ 'xmlns:opds': 'http://opds-spec.org/2010/catalog',
|
|
|
|
+ };
|
|
|
|
|
|
- content.id = this.id;
|
|
|
|
|
|
+ base.link = [
|
|
|
|
+ this.navLink({rel: 'start'}),
|
|
|
|
+ ];
|
|
|
|
|
|
const xml = new XmlParser();
|
|
const xml = new XmlParser();
|
|
const xmlObject = {};
|
|
const xmlObject = {};
|
|
- xmlObject[this.rootTag] = content;
|
|
|
|
|
|
+ xmlObject[this.rootTag] = Object.assign(base, content);
|
|
|
|
|
|
xml.fromObject(xmlObject);
|
|
xml.fromObject(xmlObject);
|
|
|
|
|