UNPKG

@readium/shared

Version:

Shared models to be used across other Readium projects and implementations in Typescript

36 lines (33 loc) 1.06 kB
import { Iterator } from "./Iterator"; import { ContentElement, TextualElement } from "./element"; /** * Provides an iterable list of content [Element]s. */ export abstract class Content { /** * Extracts the full raw text, or returns null if no text content can be found. * @param separator Separator to use between individual elements. Defaults to newline. */ text(separator: string = "\n"): string | null { return this.elements() .map(element => (element as TextualElement)?.text) .filter(text => text !== undefined && text.length > 0) .join(separator); } /** * Creates a new iterator for this content. */ abstract iterator(): Iterator; /** * Returns all the elements as a list. */ elements(): ContentElement[] { const list: ContentElement[] = []; const iterator = this.iterator(); while (true) { if(!iterator.hasNext()) break; list.push(iterator.next()); } return list; } }