epubavocado
Version:
I am an EPUB object model aspiring to be standards compliant.
44 lines (43 loc) • 1.7 kB
JavaScript
import { Entity } from '../mixins/entity.js';
import { ID } from './mixins/id.js';
import { toArray } from '../../util.js';
import { SpineItem } from './spine-item.js';
import { allPropertiesFilter, anyPropertiesFilter, idFilter, resolveIdref, } from './util.js';
export class Spine extends ID(Entity) {
pageProgressionDirection() {
return this._resolve('./@page-progression-direction');
}
toc() {
const idref = this._resolve('./@toc');
return resolveIdref(this, idref);
}
itemref({ id, anyProperties, allProperties, onlyProperties, linear, } = {}) {
return this.itemrefs({
ids: id ? [id] : [],
anyProperties,
allProperties,
onlyProperties,
linear,
})[0];
}
itemrefs({ ids, anyProperties, allProperties, onlyProperties, linear, } = {}) {
var _a, _b;
if (linear !== undefined) {
return (_a = this.itemrefs({
ids,
anyProperties,
allProperties,
onlyProperties,
})) === null || _a === void 0 ? void 0 : _a.filter((item) => item.linear() === linear);
}
if (onlyProperties) {
return (_b = this.itemrefs({
ids,
anyProperties,
allProperties: onlyProperties,
})) === null || _b === void 0 ? void 0 : _b.filter((item) => toArray(item.properties()).length === onlyProperties.length);
}
const expression = `./opf:itemref${idFilter(ids)}${anyPropertiesFilter(anyProperties)}${allPropertiesFilter(allProperties)}`;
return this._resolveAll(expression, SpineItem);
}
}