KEXEL's picture
Upload 337 files
af6912c verified
const addTextIf = require("../add-text-if");
const richText = require("./rich-text");
function TopText(metaText, metaTextInfo, formatting, lines, width, isPrint, paddingLeft, spacing, shouldAddClasses, getTextSize) {
this.rows = [];
if (metaText.header && isPrint) {
// Note: whether there is a header or not doesn't change any other positioning, so this doesn't change the Y-coordinate.
// This text goes above the margin, so we'll temporarily move up.
var headerTextHeight = getTextSize.calc("X", "headerfont", 'abcjs-header abcjs-meta-top').height;
addTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.header.left, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, info: metaTextInfo.header, name: "header" }, getTextSize);
addTextIf(this.rows, { marginLeft: paddingLeft + width / 2, text: metaText.header.center, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'middle', info: metaTextInfo.header, name: "header" }, getTextSize);
addTextIf(this.rows, { marginLeft: paddingLeft + width, text: metaText.header.right, font: 'headerfont', klass: 'header meta-top', marginTop: -headerTextHeight, anchor: 'end', info: metaTextInfo.header, name: "header" }, getTextSize);
// TopText.prototype.addTextIf = function (marginLeft, text, font, klass, marginTop, marginBottom, anchor, getTextSize, absElemType, noMove) {
}
if (isPrint)
this.rows.push({ move: spacing.top });
var tAnchor = formatting.titleleft ? 'start' : 'middle';
var tLeft = formatting.titleleft ? paddingLeft : paddingLeft + width / 2;
if (metaText.title) {
var klass = shouldAddClasses ? 'abcjs-title' : ''
richText(this.rows, metaText.title, "titlefont", klass, 'title', tLeft, {marginTop: spacing.title, anchor: tAnchor, absElemType: "title", info: metaTextInfo.title}, getTextSize)
}
if (lines.length) {
var index = 0;
while (index < lines.length && lines[index].subtitle) {
var klass = shouldAddClasses ? 'abcjs-text abcjs-subtitle' : ''
richText(this.rows, lines[index].subtitle.text, "subtitlefont", klass, 'subtitle', tLeft, {marginTop: spacing.subtitle, anchor: tAnchor, absElemType: "subtitle", info: lines[index].subtitle}, getTextSize)
index++;
}
}
if (metaText.rhythm || metaText.origin || metaText.composer) {
this.rows.push({ move: spacing.composer });
if (metaText.rhythm && metaText.rhythm.length > 0) {
var noMove = !!(metaText.composer || metaText.origin);
var klass = shouldAddClasses ? 'abcjs-rhythm' : ''
addTextIf(this.rows, { marginLeft: paddingLeft, text: metaText.rhythm, font: 'infofont', klass: klass, absElemType: "rhythm", noMove: noMove, info: metaTextInfo.rhythm, name: "rhythm" }, getTextSize);
}
var hasSimpleComposerLine = true
if (metaText.composer && typeof metaText.composer !== 'string')
hasSimpleComposerLine = false
if (metaText.origin && typeof metaText.origin !== 'string')
hasSimpleComposerLine = false
var composerLine = metaText.composer ? metaText.composer : '';
if (metaText.origin) {
if (typeof composerLine === 'string' && typeof metaText.origin === 'string')
composerLine += ' (' + metaText.origin + ')';
else if (typeof composerLine === 'string' && typeof metaText.origin !== 'string') {
composerLine = [{text:composerLine}]
composerLine.push({text:" ("})
composerLine = composerLine.concat(metaText.origin)
composerLine.push({text:")"})
} else {
composerLine.push({text:" ("})
composerLine = composerLine.concat(metaText.origin)
composerLine.push({text:")"})
}
}
if (composerLine) {
var klass = shouldAddClasses ? 'abcjs-composer' : ''
richText(this.rows, composerLine, 'composerfont', klass, "composer", paddingLeft+width, {anchor: "end", absElemType: "composer", info: metaTextInfo.composer, ingroup: true}, getTextSize)
}
}
if (metaText.author && metaText.author.length > 0) {
var klass = shouldAddClasses ? 'abcjs-author' : ''
richText(this.rows, metaText.author, 'composerfont', klass, "author", paddingLeft+width, {anchor: "end", absElemType: "author", info: metaTextInfo.author}, getTextSize)
}
if (metaText.partOrder && metaText.partOrder.length > 0) {
var klass = shouldAddClasses ? 'abcjs-part-order' : ''
richText(this.rows, metaText.partOrder, 'partsfont', klass, "part-order", paddingLeft, {absElemType: "partOrder", info: metaTextInfo.partOrder, anchor: 'start'}, getTextSize)
}
}
module.exports = TopText;