UNPKG

substance

Version:

Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing system. It is developed to power our online editing platform [Substance](http://substance.io).

50 lines (46 loc) 1.83 kB
import { documentHelpers } from '../model' import { isString } from '../util' import ApiExtension from './ApiExtension' export default class AuthorApi extends ApiExtension { /** * @param {object} data from AuthorModal state */ addAuthor (data) { this.insertAuthor(data) } insertAuthor (data, currentAuthor) { const editorSession = this.api.getEditorSession() const doc = editorSession.getDocument() const root = doc.root let insertPos = root.authors.length if (currentAuthor) { insertPos = currentAuthor.getPosition() + 1 } const nodeData = Object.assign({}, data, { type: 'author' }) // prune empty middlenames nodeData.middleNames = nodeData.middleNames.filter(Boolean) if (nodeData.affiliations && nodeData.affiliations.length > 0) { if (!isString(nodeData.affiliations[0])) { throw new Error('Affiliations must be given as ids') } } this.api.insertNode([root.id, 'authors'], insertPos, nodeData) } /** * @param {string} authorId * @param {object} data from AuthorModal state */ updateAuthor (authorId, data) { // prune empty middlenames data.middleNames = data.middleNames.filter(Boolean) this.api.getEditorSession().transaction(tx => { documentHelpers.updateProperty(tx, [authorId, 'firstName'], data.firstName) documentHelpers.updateProperty(tx, [authorId, 'middleNames'], data.middleNames) documentHelpers.updateProperty(tx, [authorId, 'lastName'], data.lastName) documentHelpers.updateProperty(tx, [authorId, 'prefix'], data.prefix) documentHelpers.updateProperty(tx, [authorId, 'suffix'], data.suffix) documentHelpers.updateProperty(tx, [authorId, 'affiliations'], data.affiliations.map(a => a.id)) this.api._selectItem(tx, tx.get(authorId)) }) } }