UNPKG

@bonniernews/abbe-api-utils

Version:

Utilities for converting to Abbe article format

58 lines (57 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const contentUtils_1 = require("../contentUtils"); const types_1 = require("./types"); const utils_1 = require("../utils"); class Factbox { constructor() { this._blocks = []; this._entityMap = {}; } static initialize() { return new Factbox(); } addTitle(text) { var _a; if (((_a = this._blocks[0]) === null || _a === void 0 ? void 0 : _a.type) === types_1.BlockType.HEADLINE) { this._blocks[0].text = text; return this; } this._blocks.unshift((0, contentUtils_1.createHeadlineBlock)(text)); return this; } addText(text) { this._blocks.push((0, contentUtils_1.createTextBlock)(text)); return this; } addStyledText(text, styles) { const nextEntityMapIndex = Object.keys(this._entityMap).length; const { block, entityMap } = (0, contentUtils_1.createStyledText)(text, styles, nextEntityMapIndex); this._blocks.push(block); this._entityMap = { ...this._entityMap, ...entityMap }; return this; } validate() { var _a; if (((_a = this._blocks[0]) === null || _a === void 0 ? void 0 : _a.type) !== types_1.BlockType.HEADLINE) { throw new Error("First block must be a headline in Factbox"); } } finalize() { this.validate(); const initialBlock = (0, utils_1.initBlock)(); return { ...initialBlock, type: types_1.BlockType.FACTBOX, data: { type: "factbox-plugin", blockKey: initialBlock.key, factbox: { blocks: this._blocks, entityMap: this._entityMap, }, }, }; } } exports.default = Factbox;