1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.getEllipsisText = exports.measureTextWidth = void 0;
|
4 | var tslib_1 = require("tslib");
|
5 | var util_1 = require("@antv/util");
|
6 | var context_1 = require("./context");
|
7 |
|
8 |
|
9 |
|
10 | exports.measureTextWidth = (0, util_1.memoize)(function (text, font) {
|
11 | if (font === void 0) { font = {}; }
|
12 | var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;
|
13 | var ctx = (0, context_1.getCanvasContext)();
|
14 | ctx.font = [fontStyle, fontVariant, fontWeight, "".concat(fontSize, "px"), fontFamily].join(' ');
|
15 | return ctx.measureText((0, util_1.isString)(text) ? text : '').width;
|
16 | }, function (text, font) {
|
17 | if (font === void 0) { font = {}; }
|
18 | return (0, tslib_1.__spreadArray)([text], (0, util_1.values)(font), true).join('');
|
19 | });
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | var getEllipsisText = function (text, maxWidth, font) {
|
30 | var STEP = 16;
|
31 | var DOT_WIDTH = (0, exports.measureTextWidth)('...', font);
|
32 | var leftText;
|
33 | if (!(0, util_1.isString)(text)) {
|
34 | leftText = (0, util_1.toString)(text);
|
35 | }
|
36 | else {
|
37 | leftText = text;
|
38 | }
|
39 | var leftWidth = maxWidth;
|
40 | var r = [];
|
41 | var currentText;
|
42 | var currentWidth;
|
43 | if ((0, exports.measureTextWidth)(text, font) <= maxWidth) {
|
44 | return text;
|
45 | }
|
46 |
|
47 | while (true) {
|
48 |
|
49 | currentText = leftText.substr(0, STEP);
|
50 |
|
51 | currentWidth = (0, exports.measureTextWidth)(currentText, font);
|
52 |
|
53 | if (currentWidth + DOT_WIDTH > leftWidth) {
|
54 | if (currentWidth > leftWidth) {
|
55 | break;
|
56 | }
|
57 | }
|
58 | r.push(currentText);
|
59 |
|
60 | leftWidth -= currentWidth;
|
61 | leftText = leftText.substr(STEP);
|
62 |
|
63 | if (!leftText) {
|
64 | return r.join('');
|
65 | }
|
66 | }
|
67 |
|
68 | while (true) {
|
69 |
|
70 | currentText = leftText.substr(0, 1);
|
71 |
|
72 | currentWidth = (0, exports.measureTextWidth)(currentText, font);
|
73 |
|
74 | if (currentWidth + DOT_WIDTH > leftWidth) {
|
75 | break;
|
76 | }
|
77 | r.push(currentText);
|
78 |
|
79 | leftWidth -= currentWidth;
|
80 | leftText = leftText.substr(1);
|
81 | if (!leftText) {
|
82 | return r.join('');
|
83 | }
|
84 | }
|
85 | return "".concat(r.join(''), "...");
|
86 | };
|
87 | exports.getEllipsisText = getEllipsisText;
|
88 |
|
\ | No newline at end of file |