mfrac.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. "use strict";
  2. var __extends = (this && this.__extends) || (function () {
  3. var extendStatics = function (d, b) {
  4. extendStatics = Object.setPrototypeOf ||
  5. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  6. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  7. return extendStatics(d, b);
  8. };
  9. return function (d, b) {
  10. if (typeof b !== "function" && b !== null)
  11. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  12. extendStatics(d, b);
  13. function __() { this.constructor = d; }
  14. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  15. };
  16. })();
  17. var __assign = (this && this.__assign) || function () {
  18. __assign = Object.assign || function(t) {
  19. for (var s, i = 1, n = arguments.length; i < n; i++) {
  20. s = arguments[i];
  21. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  22. t[p] = s[p];
  23. }
  24. return t;
  25. };
  26. return __assign.apply(this, arguments);
  27. };
  28. Object.defineProperty(exports, "__esModule", { value: true });
  29. exports.CHTMLmfrac = void 0;
  30. var Wrapper_js_1 = require("../Wrapper.js");
  31. var mfrac_js_1 = require("../../common/Wrappers/mfrac.js");
  32. var mfrac_js_2 = require("../../../core/MmlTree/MmlNodes/mfrac.js");
  33. var CHTMLmfrac = (function (_super) {
  34. __extends(CHTMLmfrac, _super);
  35. function CHTMLmfrac() {
  36. return _super !== null && _super.apply(this, arguments) || this;
  37. }
  38. CHTMLmfrac.prototype.toCHTML = function (parent) {
  39. this.standardCHTMLnode(parent);
  40. var _a = this.node.attributes.getList('linethickness', 'bevelled'), linethickness = _a.linethickness, bevelled = _a.bevelled;
  41. var display = this.isDisplay();
  42. if (bevelled) {
  43. this.makeBevelled(display);
  44. }
  45. else {
  46. var thickness = this.length2em(String(linethickness), .06);
  47. if (thickness === 0) {
  48. this.makeAtop(display);
  49. }
  50. else {
  51. this.makeFraction(display, thickness);
  52. }
  53. }
  54. };
  55. CHTMLmfrac.prototype.makeFraction = function (display, t) {
  56. var _a = this.node.attributes.getList('numalign', 'denomalign'), numalign = _a.numalign, denomalign = _a.denomalign;
  57. var withDelims = this.node.getProperty('withDelims');
  58. var attr = (display ? { type: 'd' } : {});
  59. var fattr = (withDelims ? __assign(__assign({}, attr), { delims: 'true' }) : __assign({}, attr));
  60. var nattr = (numalign !== 'center' ? { align: numalign } : {});
  61. var dattr = (denomalign !== 'center' ? { align: denomalign } : {});
  62. var dsattr = __assign({}, attr), nsattr = __assign({}, attr);
  63. var tex = this.font.params;
  64. if (t !== .06) {
  65. var a = tex.axis_height;
  66. var tEm = this.em(t);
  67. var _b = this.getTUV(display, t), T = _b.T, u = _b.u, v = _b.v;
  68. var m = (display ? this.em(3 * t) : tEm) + ' -.1em';
  69. attr.style = { height: tEm, 'border-top': tEm + ' solid', margin: m };
  70. var nh = this.em(Math.max(0, u));
  71. nsattr.style = { height: nh, 'vertical-align': '-' + nh };
  72. dsattr.style = { height: this.em(Math.max(0, v)) };
  73. fattr.style = { 'vertical-align': this.em(a - T) };
  74. }
  75. var num, den;
  76. this.adaptor.append(this.chtml, this.html('mjx-frac', fattr, [
  77. num = this.html('mjx-num', nattr, [this.html('mjx-nstrut', nsattr)]),
  78. this.html('mjx-dbox', {}, [
  79. this.html('mjx-dtable', {}, [
  80. this.html('mjx-line', attr),
  81. this.html('mjx-row', {}, [
  82. den = this.html('mjx-den', dattr, [this.html('mjx-dstrut', dsattr)])
  83. ])
  84. ])
  85. ])
  86. ]));
  87. this.childNodes[0].toCHTML(num);
  88. this.childNodes[1].toCHTML(den);
  89. };
  90. CHTMLmfrac.prototype.makeAtop = function (display) {
  91. var _a = this.node.attributes.getList('numalign', 'denomalign'), numalign = _a.numalign, denomalign = _a.denomalign;
  92. var withDelims = this.node.getProperty('withDelims');
  93. var attr = (display ? { type: 'd', atop: true } : { atop: true });
  94. var fattr = (withDelims ? __assign(__assign({}, attr), { delims: true }) : __assign({}, attr));
  95. var nattr = (numalign !== 'center' ? { align: numalign } : {});
  96. var dattr = (denomalign !== 'center' ? { align: denomalign } : {});
  97. var _b = this.getUVQ(display), v = _b.v, q = _b.q;
  98. nattr.style = { 'padding-bottom': this.em(q) };
  99. fattr.style = { 'vertical-align': this.em(-v) };
  100. var num, den;
  101. this.adaptor.append(this.chtml, this.html('mjx-frac', fattr, [
  102. num = this.html('mjx-num', nattr),
  103. den = this.html('mjx-den', dattr)
  104. ]));
  105. this.childNodes[0].toCHTML(num);
  106. this.childNodes[1].toCHTML(den);
  107. };
  108. CHTMLmfrac.prototype.makeBevelled = function (display) {
  109. var adaptor = this.adaptor;
  110. adaptor.setAttribute(this.chtml, 'bevelled', 'ture');
  111. var num = adaptor.append(this.chtml, this.html('mjx-num'));
  112. this.childNodes[0].toCHTML(num);
  113. this.bevel.toCHTML(this.chtml);
  114. var den = adaptor.append(this.chtml, this.html('mjx-den'));
  115. this.childNodes[1].toCHTML(den);
  116. var _a = this.getBevelData(display), u = _a.u, v = _a.v, delta = _a.delta, nbox = _a.nbox, dbox = _a.dbox;
  117. if (u) {
  118. adaptor.setStyle(num, 'verticalAlign', this.em(u / nbox.scale));
  119. }
  120. if (v) {
  121. adaptor.setStyle(den, 'verticalAlign', this.em(v / dbox.scale));
  122. }
  123. var dx = this.em(-delta / 2);
  124. adaptor.setStyle(this.bevel.chtml, 'marginLeft', dx);
  125. adaptor.setStyle(this.bevel.chtml, 'marginRight', dx);
  126. };
  127. CHTMLmfrac.kind = mfrac_js_2.MmlMfrac.prototype.kind;
  128. CHTMLmfrac.styles = {
  129. 'mjx-frac': {
  130. display: 'inline-block',
  131. 'vertical-align': '0.17em',
  132. padding: '0 .22em'
  133. },
  134. 'mjx-frac[type="d"]': {
  135. 'vertical-align': '.04em'
  136. },
  137. 'mjx-frac[delims]': {
  138. padding: '0 .1em'
  139. },
  140. 'mjx-frac[atop]': {
  141. padding: '0 .12em'
  142. },
  143. 'mjx-frac[atop][delims]': {
  144. padding: '0'
  145. },
  146. 'mjx-dtable': {
  147. display: 'inline-table',
  148. width: '100%'
  149. },
  150. 'mjx-dtable > *': {
  151. 'font-size': '2000%'
  152. },
  153. 'mjx-dbox': {
  154. display: 'block',
  155. 'font-size': '5%'
  156. },
  157. 'mjx-num': {
  158. display: 'block',
  159. 'text-align': 'center'
  160. },
  161. 'mjx-den': {
  162. display: 'block',
  163. 'text-align': 'center'
  164. },
  165. 'mjx-mfrac[bevelled] > mjx-num': {
  166. display: 'inline-block'
  167. },
  168. 'mjx-mfrac[bevelled] > mjx-den': {
  169. display: 'inline-block'
  170. },
  171. 'mjx-den[align="right"], mjx-num[align="right"]': {
  172. 'text-align': 'right'
  173. },
  174. 'mjx-den[align="left"], mjx-num[align="left"]': {
  175. 'text-align': 'left'
  176. },
  177. 'mjx-nstrut': {
  178. display: 'inline-block',
  179. height: '.054em',
  180. width: 0,
  181. 'vertical-align': '-.054em'
  182. },
  183. 'mjx-nstrut[type="d"]': {
  184. height: '.217em',
  185. 'vertical-align': '-.217em',
  186. },
  187. 'mjx-dstrut': {
  188. display: 'inline-block',
  189. height: '.505em',
  190. width: 0
  191. },
  192. 'mjx-dstrut[type="d"]': {
  193. height: '.726em',
  194. },
  195. 'mjx-line': {
  196. display: 'block',
  197. 'box-sizing': 'border-box',
  198. 'min-height': '1px',
  199. height: '.06em',
  200. 'border-top': '.06em solid',
  201. margin: '.06em -.1em',
  202. overflow: 'hidden'
  203. },
  204. 'mjx-line[type="d"]': {
  205. margin: '.18em -.1em'
  206. }
  207. };
  208. return CHTMLmfrac;
  209. }((0, mfrac_js_1.CommonMfracMixin)(Wrapper_js_1.CHTMLWrapper)));
  210. exports.CHTMLmfrac = CHTMLmfrac;
  211. //# sourceMappingURL=mfrac.js.map