123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546 |
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __values = (this && this.__values) || function(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m) return m.call(o);
- if (o && typeof o.length === "number") return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
- };
- var __read = (this && this.__read) || function (o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.CHTMLmtable = void 0;
- var Wrapper_js_1 = require("../Wrapper.js");
- var mtable_js_1 = require("../../common/Wrappers/mtable.js");
- var mtable_js_2 = require("../../../core/MmlTree/MmlNodes/mtable.js");
- var string_js_1 = require("../../../util/string.js");
- var CHTMLmtable = (function (_super) {
- __extends(CHTMLmtable, _super);
- function CHTMLmtable(factory, node, parent) {
- if (parent === void 0) { parent = null; }
- var _this = _super.call(this, factory, node, parent) || this;
- _this.itable = _this.html('mjx-itable');
- _this.labels = _this.html('mjx-itable');
- return _this;
- }
- CHTMLmtable.prototype.getAlignShift = function () {
- var data = _super.prototype.getAlignShift.call(this);
- if (!this.isTop) {
- data[1] = 0;
- }
- return data;
- };
- CHTMLmtable.prototype.toCHTML = function (parent) {
- var e_1, _a;
- var chtml = this.standardCHTMLnode(parent);
- this.adaptor.append(chtml, this.html('mjx-table', {}, [this.itable]));
- try {
- for (var _b = __values(this.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) {
- var child = _c.value;
- child.toCHTML(this.itable);
- }
- }
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_1) throw e_1.error; }
- }
- this.padRows();
- this.handleColumnSpacing();
- this.handleColumnLines();
- this.handleColumnWidths();
- this.handleRowSpacing();
- this.handleRowLines();
- this.handleRowHeights();
- this.handleFrame();
- this.handleWidth();
- this.handleLabels();
- this.handleAlign();
- this.handleJustify();
- this.shiftColor();
- };
- CHTMLmtable.prototype.shiftColor = function () {
- var adaptor = this.adaptor;
- var color = adaptor.getStyle(this.chtml, 'backgroundColor');
- if (color) {
- adaptor.setStyle(this.chtml, 'backgroundColor', '');
- adaptor.setStyle(this.itable, 'backgroundColor', color);
- }
- };
- CHTMLmtable.prototype.padRows = function () {
- var e_2, _a;
- var adaptor = this.adaptor;
- try {
- for (var _b = __values(adaptor.childNodes(this.itable)), _c = _b.next(); !_c.done; _c = _b.next()) {
- var row = _c.value;
- while (adaptor.childNodes(row).length < this.numCols) {
- adaptor.append(row, this.html('mjx-mtd', { 'extra': true }));
- }
- }
- }
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_2) throw e_2.error; }
- }
- };
- CHTMLmtable.prototype.handleColumnSpacing = function () {
- var e_3, _a, e_4, _b;
- var scale = (this.childNodes[0] ? 1 / this.childNodes[0].getBBox().rscale : 1);
- var spacing = this.getEmHalfSpacing(this.fSpace[0], this.cSpace, scale);
- var frame = this.frame;
- try {
- for (var _c = __values(this.tableRows), _d = _c.next(); !_d.done; _d = _c.next()) {
- var row = _d.value;
- var i = 0;
- try {
- for (var _e = (e_4 = void 0, __values(row.tableCells)), _f = _e.next(); !_f.done; _f = _e.next()) {
- var cell = _f.value;
- var lspace = spacing[i++];
- var rspace = spacing[i];
- var styleNode = (cell ? cell.chtml : this.adaptor.childNodes(row.chtml)[i]);
- if ((i > 1 && lspace !== '0.4em') || (frame && i === 1)) {
- this.adaptor.setStyle(styleNode, 'paddingLeft', lspace);
- }
- if ((i < this.numCols && rspace !== '0.4em') || (frame && i === this.numCols)) {
- this.adaptor.setStyle(styleNode, 'paddingRight', rspace);
- }
- }
- }
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
- finally {
- try {
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
- }
- finally { if (e_4) throw e_4.error; }
- }
- }
- }
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
- finally {
- try {
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
- }
- finally { if (e_3) throw e_3.error; }
- }
- };
- CHTMLmtable.prototype.handleColumnLines = function () {
- var e_5, _a, e_6, _b;
- if (this.node.attributes.get('columnlines') === 'none')
- return;
- var lines = this.getColumnAttributes('columnlines');
- try {
- for (var _c = __values(this.childNodes), _d = _c.next(); !_d.done; _d = _c.next()) {
- var row = _d.value;
- var i = 0;
- try {
- for (var _e = (e_6 = void 0, __values(this.adaptor.childNodes(row.chtml).slice(1))), _f = _e.next(); !_f.done; _f = _e.next()) {
- var cell = _f.value;
- var line = lines[i++];
- if (line === 'none')
- continue;
- this.adaptor.setStyle(cell, 'borderLeft', '.07em ' + line);
- }
- }
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
- finally {
- try {
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
- }
- finally { if (e_6) throw e_6.error; }
- }
- }
- }
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
- finally {
- try {
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
- }
- finally { if (e_5) throw e_5.error; }
- }
- };
- CHTMLmtable.prototype.handleColumnWidths = function () {
- var e_7, _a, e_8, _b;
- try {
- for (var _c = __values(this.childNodes), _d = _c.next(); !_d.done; _d = _c.next()) {
- var row = _d.value;
- var i = 0;
- try {
- for (var _e = (e_8 = void 0, __values(this.adaptor.childNodes(row.chtml))), _f = _e.next(); !_f.done; _f = _e.next()) {
- var cell = _f.value;
- var w = this.cWidths[i++];
- if (w !== null) {
- var width = (typeof w === 'number' ? this.em(w) : w);
- this.adaptor.setStyle(cell, 'width', width);
- this.adaptor.setStyle(cell, 'maxWidth', width);
- this.adaptor.setStyle(cell, 'minWidth', width);
- }
- }
- }
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
- finally {
- try {
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
- }
- finally { if (e_8) throw e_8.error; }
- }
- }
- }
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
- finally {
- try {
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
- }
- finally { if (e_7) throw e_7.error; }
- }
- };
- CHTMLmtable.prototype.handleRowSpacing = function () {
- var e_9, _a, e_10, _b;
- var scale = (this.childNodes[0] ? 1 / this.childNodes[0].getBBox().rscale : 1);
- var spacing = this.getEmHalfSpacing(this.fSpace[1], this.rSpace, scale);
- var frame = this.frame;
- var i = 0;
- try {
- for (var _c = __values(this.childNodes), _d = _c.next(); !_d.done; _d = _c.next()) {
- var row = _d.value;
- var tspace = spacing[i++];
- var bspace = spacing[i];
- try {
- for (var _e = (e_10 = void 0, __values(row.childNodes)), _f = _e.next(); !_f.done; _f = _e.next()) {
- var cell = _f.value;
- if ((i > 1 && tspace !== '0.215em') || (frame && i === 1)) {
- this.adaptor.setStyle(cell.chtml, 'paddingTop', tspace);
- }
- if ((i < this.numRows && bspace !== '0.215em') || (frame && i === this.numRows)) {
- this.adaptor.setStyle(cell.chtml, 'paddingBottom', bspace);
- }
- }
- }
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
- finally {
- try {
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
- }
- finally { if (e_10) throw e_10.error; }
- }
- }
- }
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
- finally {
- try {
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
- }
- finally { if (e_9) throw e_9.error; }
- }
- };
- CHTMLmtable.prototype.handleRowLines = function () {
- var e_11, _a, e_12, _b;
- if (this.node.attributes.get('rowlines') === 'none')
- return;
- var lines = this.getRowAttributes('rowlines');
- var i = 0;
- try {
- for (var _c = __values(this.childNodes.slice(1)), _d = _c.next(); !_d.done; _d = _c.next()) {
- var row = _d.value;
- var line = lines[i++];
- if (line === 'none')
- continue;
- try {
- for (var _e = (e_12 = void 0, __values(this.adaptor.childNodes(row.chtml))), _f = _e.next(); !_f.done; _f = _e.next()) {
- var cell = _f.value;
- this.adaptor.setStyle(cell, 'borderTop', '.07em ' + line);
- }
- }
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
- finally {
- try {
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
- }
- finally { if (e_12) throw e_12.error; }
- }
- }
- }
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
- finally {
- try {
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
- }
- finally { if (e_11) throw e_11.error; }
- }
- };
- CHTMLmtable.prototype.handleRowHeights = function () {
- if (this.node.attributes.get('equalrows')) {
- this.handleEqualRows();
- }
- };
- CHTMLmtable.prototype.handleEqualRows = function () {
- var space = this.getRowHalfSpacing();
- var _a = this.getTableData(), H = _a.H, D = _a.D, NH = _a.NH, ND = _a.ND;
- var HD = this.getEqualRowHeight();
- for (var i = 0; i < this.numRows; i++) {
- var row = this.childNodes[i];
- this.setRowHeight(row, HD + space[i] + space[i + 1] + this.rLines[i]);
- if (HD !== NH[i] + ND[i]) {
- this.setRowBaseline(row, HD, (HD - H[i] + D[i]) / 2);
- }
- }
- };
- CHTMLmtable.prototype.setRowHeight = function (row, HD) {
- this.adaptor.setStyle(row.chtml, 'height', this.em(HD));
- };
- CHTMLmtable.prototype.setRowBaseline = function (row, HD, D) {
- var e_13, _a;
- var ralign = row.node.attributes.get('rowalign');
- try {
- for (var _b = __values(row.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) {
- var cell = _c.value;
- if (this.setCellBaseline(cell, ralign, HD, D))
- break;
- }
- }
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_13) throw e_13.error; }
- }
- };
- CHTMLmtable.prototype.setCellBaseline = function (cell, ralign, HD, D) {
- var calign = cell.node.attributes.get('rowalign');
- if (calign === 'baseline' || calign === 'axis') {
- var adaptor = this.adaptor;
- var child = adaptor.lastChild(cell.chtml);
- adaptor.setStyle(child, 'height', this.em(HD));
- adaptor.setStyle(child, 'verticalAlign', this.em(-D));
- var row = cell.parent;
- if ((!row.node.isKind('mlabeledtr') || cell !== row.childNodes[0]) &&
- (ralign === 'baseline' || ralign === 'axis')) {
- return true;
- }
- }
- return false;
- };
- CHTMLmtable.prototype.handleFrame = function () {
- if (this.frame && this.fLine) {
- this.adaptor.setStyle(this.itable, 'border', '.07em ' + this.node.attributes.get('frame'));
- }
- };
- CHTMLmtable.prototype.handleWidth = function () {
- var adaptor = this.adaptor;
- var _a = this.getBBox(), w = _a.w, L = _a.L, R = _a.R;
- adaptor.setStyle(this.chtml, 'minWidth', this.em(L + w + R));
- var W = this.node.attributes.get('width');
- if ((0, string_js_1.isPercent)(W)) {
- adaptor.setStyle(this.chtml, 'width', '');
- adaptor.setAttribute(this.chtml, 'width', 'full');
- }
- else if (!this.hasLabels) {
- if (W === 'auto')
- return;
- W = this.em(this.length2em(W) + 2 * this.fLine);
- }
- var table = adaptor.firstChild(this.chtml);
- adaptor.setStyle(table, 'width', W);
- adaptor.setStyle(table, 'minWidth', this.em(w));
- if (L || R) {
- adaptor.setStyle(this.chtml, 'margin', '');
- var style = (this.node.attributes.get('data-width-includes-label') ? 'padding' : 'margin');
- if (L === R) {
- adaptor.setStyle(table, style, '0 ' + this.em(R));
- }
- else {
- adaptor.setStyle(table, style, '0 ' + this.em(R) + ' 0 ' + this.em(L));
- }
- }
- adaptor.setAttribute(this.itable, 'width', 'full');
- };
- CHTMLmtable.prototype.handleAlign = function () {
- var _a = __read(this.getAlignmentRow(), 2), align = _a[0], row = _a[1];
- if (row === null) {
- if (align !== 'axis') {
- this.adaptor.setAttribute(this.chtml, 'align', align);
- }
- }
- else {
- var y = this.getVerticalPosition(row, align);
- this.adaptor.setAttribute(this.chtml, 'align', 'top');
- this.adaptor.setStyle(this.chtml, 'verticalAlign', this.em(y));
- }
- };
- CHTMLmtable.prototype.handleJustify = function () {
- var align = this.getAlignShift()[0];
- if (align !== 'center') {
- this.adaptor.setAttribute(this.chtml, 'justify', align);
- }
- };
- CHTMLmtable.prototype.handleLabels = function () {
- if (!this.hasLabels)
- return;
- var labels = this.labels;
- var attributes = this.node.attributes;
- var adaptor = this.adaptor;
- var side = attributes.get('side');
- adaptor.setAttribute(this.chtml, 'side', side);
- adaptor.setAttribute(labels, 'align', side);
- adaptor.setStyle(labels, side, '0');
- var _a = __read(this.addLabelPadding(side), 2), align = _a[0], shift = _a[1];
- if (shift) {
- var table = adaptor.firstChild(this.chtml);
- this.setIndent(table, align, shift);
- }
- this.updateRowHeights();
- this.addLabelSpacing();
- };
- CHTMLmtable.prototype.addLabelPadding = function (side) {
- var _a = __read(this.getPadAlignShift(side), 3), align = _a[1], shift = _a[2];
- var styles = {};
- if (side === 'right' && !this.node.attributes.get('data-width-includes-label')) {
- var W = this.node.attributes.get('width');
- var _b = this.getBBox(), w = _b.w, L = _b.L, R = _b.R;
- styles.style = {
- width: ((0, string_js_1.isPercent)(W) ? 'calc(' + W + ' + ' + this.em(L + R) + ')' : this.em(L + w + R))
- };
- }
- this.adaptor.append(this.chtml, this.html('mjx-labels', styles, [this.labels]));
- return [align, shift];
- };
- CHTMLmtable.prototype.updateRowHeights = function () {
- var _a = this.getTableData(), H = _a.H, D = _a.D, NH = _a.NH, ND = _a.ND;
- var space = this.getRowHalfSpacing();
- for (var i = 0; i < this.numRows; i++) {
- var row = this.childNodes[i];
- this.setRowHeight(row, H[i] + D[i] + space[i] + space[i + 1] + this.rLines[i]);
- if (H[i] !== NH[i] || D[i] !== ND[i]) {
- this.setRowBaseline(row, H[i] + D[i], D[i]);
- }
- else if (row.node.isKind('mlabeledtr')) {
- this.setCellBaseline(row.childNodes[0], '', H[i] + D[i], D[i]);
- }
- }
- };
- CHTMLmtable.prototype.addLabelSpacing = function () {
- var adaptor = this.adaptor;
- var equal = this.node.attributes.get('equalrows');
- var _a = this.getTableData(), H = _a.H, D = _a.D;
- var HD = (equal ? this.getEqualRowHeight() : 0);
- var space = this.getRowHalfSpacing();
- var h = this.fLine;
- var current = adaptor.firstChild(this.labels);
- for (var i = 0; i < this.numRows; i++) {
- var row = this.childNodes[i];
- if (row.node.isKind('mlabeledtr')) {
- h && adaptor.insert(this.html('mjx-mtr', { style: { height: this.em(h) } }), current);
- adaptor.setStyle(current, 'height', this.em((equal ? HD : H[i] + D[i]) + space[i] + space[i + 1]));
- current = adaptor.next(current);
- h = this.rLines[i];
- }
- else {
- h += space[i] + (equal ? HD : H[i] + D[i]) + space[i + 1] + this.rLines[i];
- }
- }
- };
- CHTMLmtable.kind = mtable_js_2.MmlMtable.prototype.kind;
- CHTMLmtable.styles = {
- 'mjx-mtable': {
- 'vertical-align': '.25em',
- 'text-align': 'center',
- 'position': 'relative',
- 'box-sizing': 'border-box',
- 'border-spacing': 0,
- 'border-collapse': 'collapse'
- },
- 'mjx-mstyle[size="s"] mjx-mtable': {
- 'vertical-align': '.354em'
- },
- 'mjx-labels': {
- position: 'absolute',
- left: 0,
- top: 0
- },
- 'mjx-table': {
- 'display': 'inline-block',
- 'vertical-align': '-.5ex',
- 'box-sizing': 'border-box'
- },
- 'mjx-table > mjx-itable': {
- 'vertical-align': 'middle',
- 'text-align': 'left',
- 'box-sizing': 'border-box'
- },
- 'mjx-labels > mjx-itable': {
- position: 'absolute',
- top: 0
- },
- 'mjx-mtable[justify="left"]': {
- 'text-align': 'left'
- },
- 'mjx-mtable[justify="right"]': {
- 'text-align': 'right'
- },
- 'mjx-mtable[justify="left"][side="left"]': {
- 'padding-right': '0 ! important'
- },
- 'mjx-mtable[justify="left"][side="right"]': {
- 'padding-left': '0 ! important'
- },
- 'mjx-mtable[justify="right"][side="left"]': {
- 'padding-right': '0 ! important'
- },
- 'mjx-mtable[justify="right"][side="right"]': {
- 'padding-left': '0 ! important'
- },
- 'mjx-mtable[align]': {
- 'vertical-align': 'baseline'
- },
- 'mjx-mtable[align="top"] > mjx-table': {
- 'vertical-align': 'top'
- },
- 'mjx-mtable[align="bottom"] > mjx-table': {
- 'vertical-align': 'bottom'
- },
- 'mjx-mtable[side="right"] mjx-labels': {
- 'min-width': '100%'
- }
- };
- return CHTMLmtable;
- }((0, mtable_js_1.CommonMtableMixin)(Wrapper_js_1.CHTMLWrapper)));
- exports.CHTMLmtable = CHTMLmtable;
- //# sourceMappingURL=mtable.js.map
|