VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/libs/absol-full/dist/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/libs/absol-full/dist/js/mdls__absol-acomp__js__TextMeasure.js
/*** module: node_modules/absol-acomp/js/TextMeasure.js ***/
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _TextMeasureData = _interopRequireDefault(require("./TextMeasureData"));

var _Dom = require("absol/src/HTML5/Dom");


/**
 * best module
 * @constructor
 */
function TextMeasure() {
  this.$canvas = null;
  this.data = {};

  this._loadComputedData(); // if the font is not in data, create it and copy console log to TextMeasureData.js
  // this._makeFontSize('Times New Roman');
  // this._makeFontSize('Arial');

}

TextMeasure.prototype.exportCode = function () {
  var obj = 'self.absol.TextMeasure';
  var code = ['if (!self.absol) self.absol = {};', obj + ' = {};', obj + '.data = ' + JSON.stringify(this.data) + ';'];
  Object.keys(this.constructor.prototype).forEach(key => {
    var val = this[key];

    if (typeof val === "function") {
      code.push(obj + '.' + key + ' = ' + val + ';\n');
    } else if (!(0, _Dom.isDomNode)(val)) {//todo
    }
  });
  return code.join('\n');
};

TextMeasure.prototype._loadComputedData = function () {
  var thisO = this;
  this.data.chars = _TextMeasureData.default.chars;
  this.data.fonts = Object.keys(_TextMeasureData.default.fonts).reduce(function (ac, fontName) {
    var font = _TextMeasureData.default.fonts[fontName];
    ac[fontName] = {
      width: thisO._valueDict2KeyDict(font.width),
      spacing: thisO._valueDict2KeyDict(font.spacing, 2),
      fontBoundingBoxAscent: font.fontBoundingBoxAscent,
      fontBoundingBoxDescent: font.fontBoundingBoxDescent
    };
    return ac;
  }, {});
};

TextMeasure.prototype._valueDict2KeyDict = function (dict, keyLength) {
  var thisO = this;
  return Object.keys(dict).reduce(function (ac, valueText) {
    var keys = thisO._splitKey(dict[valueText], keyLength || 1);

    var value = parseFloat(valueText);
    keys.reduce(function (ac1, key) {
      ac1[key] = value;
      return ac1;
    }, ac);
    return ac;
  }, {});
};

TextMeasure.prototype._keyDic2ValueDict = function (keyDict) {
  return Object.keys(keyDict).reduce(function (ac, cr) {
    var vKey = keyDict[cr].toString();
    ac[vKey] = ac[vKey] || '';
    ac[vKey] += cr;
    return ac;
  }, {});
};
/***
 *
 * @param s
 * @param l
 * @returns {string[]}
 * @private
 */


TextMeasure.prototype._splitKey = function (s, l) {
  var cArr = s.split('');
  if (!l || l < 2) return cArr;
  return cArr.reduce(function (ac, cr) {
    ac.last += cr;

    if (ac.last.length >= l) {
      ac.arr.push(ac.last);
      ac.last = '';
    }

    return ac;
  }, {
    arr: [],
    last: ''
  }).arr;
};

TextMeasure.prototype._array2keyDict = function (arrKey, arrVal) {
  return arrKey.reduce(function (ac, cr, i) {
    ac[cr] = arrVal[i];
    return ac;
  }, {});
};

TextMeasure.prototype._makeFontSize = function (fontName) {
  var thisO = this;
  var charList = _TextMeasureData.default.chars;
  var fontMt = this.measureTextByCanvas("demo-abgH", '20px ' + fontName);
  var cWidthArr = charList.map(function (c) {
    return thisO.measureTextByCanvas(c).width;
  });

  var width = this._array2keyDict(charList, cWidthArr);

  var spacing = charList.reduce(function (ac, c1, i1) {
    return charList.reduce(function (ac1, c2, i2) {
      var d = thisO.measureTextByCanvas(c1 + c2).width - cWidthArr[i1] - cWidthArr[i2];
      if (d !== 0) ac1[c1 + c2] = d;
      return ac1;
    }, ac);
  }, {});
  _TextMeasureData.default[fontName] = {
    width: thisO._keyDic2ValueDict(width),
    spacing: thisO._keyDic2ValueDict(spacing),
    fontBoundingBoxAscent: fontMt.fontBoundingBoxAscent,
    fontBoundingBoxDescent: fontMt.fontBoundingBoxDescent
  };
  this.data.fonts[fontName] = {
    width: width,
    spacing: spacing,
    fontBoundingBoxAscent: fontMt.fontBoundingBoxAscent,
    fontBoundingBoxDescent: fontMt.fontBoundingBoxDescent
  }; // copy from console and paste it to TextMeasureData
  // console.log(fontName+":"+JSON.stringify(this.data.fonts[fontName]));
};
/***
 *
 * @param {string} text
 * @param {string} fontName
 * @param {number} fontSize
 * @return {number}
 */


TextMeasure.prototype.measureWidth = function (text, fontName, fontSize) {
  var width = this.data.fonts[fontName].width;
  var spacing = this.data.fonts[fontName].spacing;
  var res = 0;
  var prevC = text[0];
  var c = text[0];
  res += width[c] || 0;

  for (var i = 1; i < text.length; ++i) {
    c = text[i];
    res += spacing[prevC + c] || 0;
    res += width[c] || 0;
    prevC = c;
  }

  return res * fontSize / 20;
};
/***
 *
 * @param {string}text
 * @param {string=} font - without font-size, default is 20px
 * @returns {TextMetrics}
 */


TextMeasure.prototype.measureTextByCanvas = function (text, font) {
  if (!document || !document.createElement) throw new Error("Not support renderer!");
  var canvas = this.$canvas || (this.$canvas = document.createElement("canvas"));
  var context = canvas.getContext("2d");
  if (font) context.font = font;
  var metrics = context.measureText(text);
  return metrics;
};

var instance = new TextMeasure();
var _default = instance;
exports.default = _default;

VaKeR 2022