[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/js/dist/script-modules/block-editor/utils/ -> fit-text-frontend.js (source)

   1  var __webpack_exports__ = {};
   2  
   3  ;// ./node_modules/@wordpress/block-editor/build-module/utils/fit-text-utils.js
   4  function generateCSSRule(elementSelector, fontSize) {
   5    return `$elementSelector} { font-size: $fontSize}px !important; }`;
   6  }
   7  function findOptimalFontSize(textElement, elementSelector, applyStylesFn, maxSize = 600) {
   8    const alreadyHasScrollableHeight = textElement.scrollHeight > textElement.clientHeight;
   9    let minSize = 5;
  10    let bestSize = minSize;
  11    while (minSize <= maxSize) {
  12      const midSize = Math.floor((minSize + maxSize) / 2);
  13      applyStylesFn(generateCSSRule(elementSelector, midSize));
  14      const fitsWidth = textElement.scrollWidth <= textElement.clientWidth;
  15      const fitsHeight = alreadyHasScrollableHeight || textElement.scrollHeight <= textElement.clientHeight;
  16      if (fitsWidth && fitsHeight) {
  17        bestSize = midSize;
  18        minSize = midSize + 1;
  19      } else {
  20        maxSize = midSize - 1;
  21      }
  22    }
  23    return bestSize;
  24  }
  25  function optimizeFitText(textElement, elementSelector, applyStylesFn, maxSize) {
  26    if (!textElement) {
  27      return;
  28    }
  29    applyStylesFn("");
  30    const optimalSize = findOptimalFontSize(
  31      textElement,
  32      elementSelector,
  33      applyStylesFn,
  34      maxSize
  35    );
  36    const cssRule = generateCSSRule(elementSelector, optimalSize);
  37    applyStylesFn(cssRule);
  38  }
  39  
  40  
  41  ;// ./node_modules/@wordpress/block-editor/build-module/utils/fit-text-frontend.js
  42  
  43  let idCounter = 0;
  44  function getOrCreateStyleElement(elementId) {
  45    const styleId = `fit-text-$elementId}`;
  46    let styleElement = document.getElementById(styleId);
  47    if (!styleElement) {
  48      styleElement = document.createElement("style");
  49      styleElement.id = styleId;
  50      document.head.appendChild(styleElement);
  51    }
  52    return styleElement;
  53  }
  54  function getElementIdentifier(element) {
  55    if (!element.dataset.fitTextId) {
  56      element.dataset.fitTextId = `fit-text-${++idCounter}`;
  57    }
  58    return element.dataset.fitTextId;
  59  }
  60  function initializeFitText(element) {
  61    const elementId = getElementIdentifier(element);
  62    const applyFitText = () => {
  63      const styleElement = getOrCreateStyleElement(elementId);
  64      const elementSelector = `[data-fit-text-id="$elementId}"]`;
  65      const applyStylesFn = (css) => {
  66        styleElement.textContent = css;
  67      };
  68      optimizeFitText(element, elementSelector, applyStylesFn);
  69    };
  70    applyFitText();
  71    if (window.ResizeObserver && element.parentElement) {
  72      const resizeObserver = new window.ResizeObserver(applyFitText);
  73      resizeObserver.observe(element.parentElement);
  74    }
  75  }
  76  function initializeAllFitText() {
  77    const elements = document.querySelectorAll(".has-fit-text");
  78    elements.forEach(initializeFitText);
  79  }
  80  window.addEventListener("load", initializeAllFitText);
  81  


Generated : Thu Oct 23 08:20:05 2025 Cross-referenced by PHPXref