@bonniernews/abbe-api-utils
Version:
Utilities for converting to Abbe article format
58 lines (57 loc) • 1.88 kB
JavaScript
;
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;