UNPKG

epubavocado

Version:

I am an EPUB object model aspiring to be standards compliant.

44 lines (43 loc) 1.7 kB
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); } }