text: /**
   * Fit terminal columns and rows to the dimensions of its DOM element.
   *
   * ## Approach
   * - Rows: Truncate the division of the terminal parent element height by the terminal row height.
   *
   * - Columns: Truncate the division of the terminal parent element width by the terminal character
   * width (apply display: inline at the terminal row and truncate its width with the current
   * number of columns).
   * @module xterm/addons/fit/fit
   * @license MIT
   */
  
  (function (fit) {
    if (typeof exports === 'object' && typeof module === 'object') {
      /*
       * CommonJS environment
       */
      module.exports = fit(require('../../xterm'));
    } else if (typeof define == 'function') {
      /*
       * Require.js is available
       */
      define(['../../xterm'], fit);
    } else {
      /*
       * Plain browser environment
       */
      fit(window.Terminal);
    }
  })(function (Xterm) {
    var exports = {};
  
    exports.proposeGeometry = function (term) {
      if (!term.element.parentElement) {
        return null;
      }
      var parentElementStyle = window.getComputedStyle(term.element.parentElement),
          parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')),
          parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')) - 17),
          elementStyle = window.getComputedStyle(term.element),
          elementPaddingVer = parseInt(elementStyle.getPropertyValue('padding-top')) + parseInt(elementStyle.getPropertyValue('padding-bottom')),
          elementPaddingHor = parseInt(elementStyle.getPropertyValue('padding-right')) + parseInt(elementStyle.getPropertyValue('padding-left')),
          availableHeight = parentElementHeight - elementPaddingVer,
          availableWidth = parentElementWidth - elementPaddingHor,
          container = term.rowContainer,
          subjectRow = term.rowContainer.firstElementChild,
          contentBuffer = subjectRow.innerHTML,
          characterHeight,
          rows,
          characterWidth,
          cols,
          geometry;
  
      subjectRow.style.display = 'inline';
      subjectRow.innerHTML = 'W'; // Common character for measuring width, although on monospace
      characterWidth = subjectRow.getBoundingClientRect().width;
      subjectRow.style.display = ''; // Revert style before calculating height, since they differ.
      characterHeight = parseInt(subjectRow.offsetHeight);
      subjectRow.innerHTML = contentBuffer;
  
      rows = parseInt(availableHeight / characterHeight);
      cols = parseInt(availableWidth / characterWidth);
  
      geometry = {cols: cols, rows: rows};
      return geometry;
    };
  
    exports.fit = function (term) {
      var geometry = exports.proposeGeometry(term);
  
      if (geometry) {
        term.resize(geometry.cols, geometry.rows);
      }
    };
  
    Xterm.prototype.proposeGeometry = function () {
      return exports.proposeGeometry(this);
    };
  
    Xterm.prototype.fit = function () {
      return exports.fit(this);
    };
  
    return exports;
  });
  