//
class TreeModifier extends Modifier {
modify(element) { let antecendentContainerElement = this.findChild(element, "math-ant"); let firstAntecedentElement = antecendentContainerElement.children[0]; let lastAntecedentElement = antecendentContainerElement.children[antecendentContainerElement.children.length - 1]; let firstContentElement = this.calcContentElement(firstAntecedentElement); let lastContentElement = this.calcContentElement(lastAntecedentElement); let leftLabelElement = element.previousElementSibling; let rightLabelElement = element.nextElementSibling; let consequentWrapperElement = this.findChild(element, "math-conwrap"); let lineElement = this.findChild(consequentWrapperElement, "math-line"); let consequentElement = this.findChild(consequentWrapperElement, "math-con"); let contentElement = this.findChild(consequentElement, "math-cont"); let fontRatio = this.getFontSize(element) / this.getFontSize(leftLabelElement); let leftLabelWidth = this.getWidth(leftLabelElement, element); let rightLabelWidth = this.getWidth(rightLabelElement, element); let contentWidth = this.getWidth(contentElement); let wholeWidth = this.getWidth(element); let leftExtrusion = 0; let rightExtrusion = 0; if (firstContentElement && firstContentElement.localName != "math-axiom") { leftExtrusion = this.getOffsetLeft(firstContentElement); } if (lastContentElement && lastContentElement.localName != "math-axiom") { rightExtrusion = this.getOffsetRight(lastContentElement); } let lineWidth = wholeWidth - leftExtrusion - rightExtrusion; let leftMargin = (lineWidth - contentWidth) / 2 + leftExtrusion; consequentElement.style.setProperty("margin-left", "" + leftMargin + "em"); if (leftExtrusion > this.getOffsetLeft(contentElement) - leftLabelWidth) { leftExtrusion = this.getOffsetLeft(contentElement) - leftLabelWidth; } if (rightExtrusion > this.getOffsetRight(contentElement) - rightLabelWidth) { rightExtrusion = this.getOffsetRight(contentElement) - rightLabelWidth; } lineWidth = wholeWidth - leftExtrusion - rightExtrusion; lineElement.style.setProperty("width", "" + lineWidth + "em", "important"); lineElement.style.setProperty("margin-left", "" + leftExtrusion + "em", "important"); element.style.setProperty("margin-right", "" + (-rightExtrusion) + "em", "important"); if (rightLabelWidth < rightExtrusion) { rightLabelElement.style.setProperty("margin-right", "" + ((rightExtrusion - rightLabelWidth) * fontRatio) + "em", "important"); } element.style.setProperty("margin-left", "" + (-leftExtrusion) + "em", "important"); if (leftLabelWidth < leftExtrusion) { leftLabelElement.style.setProperty("margin-left", "" + ((leftExtrusion - leftLabelWidth) * fontRatio) + "em", "important"); } } calcContentElement(antecedentElement) { let contentElement = null; if (antecedentElement) { if (antecedentElement.localName == "math-axiom") { contentElement = antecedentElement; } else { let stepElement = this.findChild(antecedentElement, "math-step"); let consequenceWrapperElement = this.findChild(stepElement, "math-conwrap"); let consequentElement = this.findChild(consequenceWrapperElement, "math-con"); contentElement = this.findChild(consequentElement, "math-cont"); } } return contentElement; }
}