; (function () {
// 全局配置
window.instancePrint = window.instancePrint || {
  step: 1,
  
  /**
   * 增加字体大小
   * @param {jQuery} node - jQuery节点
   */
  plusFontSize: function(node) {
    adjustFontSize(node, true);
  },
  
  /**
   * 减少字体大小
   * @param {jQuery} node - jQuery节点
   */
  minusFontSize: function(node) {
    adjustFontSize(node, false);
  }
};

/**
 * 调整字体大小的核心函数
 * @param {jQuery} node - jQuery节点
 * @param {boolean} isIncrease - 是否为增加操作
 */
function adjustFontSize(node, isIncrease) {
  if (!node || !node.children || !_.isFunction(node.children)) {
    return;
  }

  node.children().each((i, n) => {
    const $child = $(n);
    
    // 跳过不需要处理的标签
    if ($child.prop("tagName") === "STYLE") {
      return;
    }
    
    // 检查是否需要处理该元素
    if (shouldProcessElement($child)) {
      adjustElementFontSize($child, isIncrease);
    }
    
    // 递归处理子元素
    if (shouldRecurse($child)) {
      adjustFontSize($child, isIncrease);
    }
  });
}

/**
 * 判断是否应该处理该元素
 * @param {jQuery} $el - jQuery元素
 * @returns {boolean}
 */
function shouldProcessElement($el) {
  // 检查是否有文本内容
  const hasTextContent = $el.contents()
    .filter(function() { return this.nodeType === 3; })
    .text()
    .trim().length > 0;
  
  // 检查是否为输入元素
  const isInputElement = _.includes(["INPUT", "TEXTAREA"], $el.prop("tagName"));
  
  return hasTextContent || isInputElement;
}

/**
 * 调整单个元素的字体大小
 * @param {jQuery} $el - jQuery元素
 * @param {boolean} isIncrease - 是否为增加操作
 */
function adjustElementFontSize($el, isIncrease) {
  const fontSize = $el.css("font-size");
  const parentFontSize = $el.parent().prop("style")?.fontSize;
  
  // 检查是否有独立的字体大小设置
  if (!fontSize || fontSize === parentFontSize) {
    return;
  }
  
  // 解析当前字体大小
  const match = fontSize.match(/^([\d.]+)(px|pt|em|rem|%)$/);
  if (!match) {
    return;
  }
  
  const [, valueStr, unit] = match;
  const currentValue = parseFloat(valueStr);
  
  if (_.isNaN(currentValue)) {
    return;
  }
  
  // 计算新的字体大小
  const step = window.instancePrint.step || 1;
  const newValue = isIncrease ? currentValue + step : currentValue - step;
  
  // 设置新的字体大小（确保最小值）
  if (newValue > 0) {
    $el.css("font-size", `${newValue}${unit}`);
  }
}

/**
 * 判断是否应该递归处理子元素
 * @param {jQuery} $el - jQuery元素
 * @returns {boolean}
 */
function shouldRecurse($el) {
  const children = $el.children();
  const brCount = $el.children("br").length;
  
  return children.length > 0 && brCount < children.length;
}
})();

