epubavocado
Version:
I am an EPUB object model aspiring to be standards compliant.
24 lines (23 loc) • 1.25 kB
JavaScript
import { toArray } from '../../util.js';
export const resolveIdref = (entity, idref) => {
var _a;
if (!idref) {
return null;
}
return (_a = entity._context.manifest()) === null || _a === void 0 ? void 0 : _a.item({ id: idref });
};
export const attributeFilter = (attribute, values, operator = 'or') => values && values.length
? `[${toArray(values)
.map((value) => `${attribute}='${value}'`)
.join(` ${operator} `)}]`
: '';
export const attributeContainsWordFilter = (attribute, words, operator = 'or') => words && words.length
? `[${toArray(words)
.map((value) => `contains(concat(' ', normalize-space(${attribute}), ' '), ' ${value} ')`)
.join(` ${operator} `)}]`
: '';
export const idFilter = (id) => attributeFilter('@id', id);
export const anyPropertiesFilter = (anyProperties) => attributeContainsWordFilter('@properties', anyProperties, 'or');
export const allPropertiesFilter = (allProperties) => attributeContainsWordFilter('@properties', allProperties, 'and');
export const anyRelFilter = (anyProperties) => attributeContainsWordFilter('@rel', anyProperties, 'or');
export const allRelFilter = (allProperties) => attributeContainsWordFilter('@rel', allProperties, 'and');