Source

string/truncate.js

  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. var isFullWidthChar_1 = __importDefault(require("./isFullWidthChar"));
  7. /**
  8. * Truncate string with handling of full width characters (e.g. Chinese/Japanese)
  9. *
  10. * @param {string} str
  11. * @param {Object} options
  12. *
  13. * @returns {string}
  14. * @category string
  15. * @module truncate
  16. */
  17. var truncate = function (str, options) {
  18. if (str === void 0) { str = ''; }
  19. var maxLength = options.length, omission = options.omission;
  20. var length = 0;
  21. var charIndex = 0;
  22. var truncatedStr = '';
  23. do {
  24. var char = (str || '')[charIndex] || '';
  25. if ((0, isFullWidthChar_1.default)(char)) {
  26. if (length + 2 > maxLength)
  27. break;
  28. length += 2;
  29. }
  30. else {
  31. length += 1;
  32. }
  33. truncatedStr += char;
  34. charIndex++;
  35. } while (length < maxLength);
  36. var isTruncated = (str || '').length !== truncatedStr.length;
  37. return "".concat(truncatedStr).concat(isTruncated ? omission || '...' : '');
  38. };
  39. exports.default = truncate;