0e9a471ca17ea557fe31f1a38ecb8e43.json 22.3 KB
{"ast":null,"code":"import { render, unmountComponentAtNode } from 'react-dom';\nimport * as React from 'react';\nimport toArray from \"rc-util/es/Children/toArray\"; // We only handle element & text node.\n\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar ellipsisContainer;\nvar wrapperStyle = {\n  padding: 0,\n  margin: 0,\n  display: 'inline',\n  lineHeight: 'inherit'\n};\n\nfunction pxToNumber(value) {\n  if (!value) return 0;\n  var match = value.match(/^\\d*(\\.\\d*)?/);\n  return match ? Number(match[0]) : 0;\n}\n\nfunction styleToString(style) {\n  // There are some different behavior between Firefox & Chrome.\n  // We have to handle this ourself.\n  var styleNames = Array.prototype.slice.apply(style);\n  return styleNames.map(function (name) {\n    return \"\".concat(name, \": \").concat(style.getPropertyValue(name), \";\");\n  }).join('');\n}\n\nfunction mergeChildren(children) {\n  var childList = [];\n  children.forEach(function (child) {\n    var prevChild = childList[childList.length - 1];\n\n    if (typeof child === 'string' && typeof prevChild === 'string') {\n      childList[childList.length - 1] += child;\n    } else {\n      childList.push(child);\n    }\n  });\n  return childList;\n}\n\nexport default (function (originEle, option, content, fixedContent, ellipsisStr) {\n  if (!ellipsisContainer) {\n    ellipsisContainer = document.createElement('div');\n    ellipsisContainer.setAttribute('aria-hidden', 'true');\n    document.body.appendChild(ellipsisContainer);\n  }\n\n  var rows = option.rows,\n      _option$suffix = option.suffix,\n      suffix = _option$suffix === void 0 ? '' : _option$suffix; // Get origin style\n\n  var originStyle = window.getComputedStyle(originEle);\n  var originCSS = styleToString(originStyle);\n  var lineHeight = pxToNumber(originStyle.lineHeight);\n  var maxHeight = Math.round(lineHeight * (rows + 1) + pxToNumber(originStyle.paddingTop) + pxToNumber(originStyle.paddingBottom)); // Set shadow\n\n  ellipsisContainer.setAttribute('style', originCSS);\n  ellipsisContainer.style.position = 'fixed';\n  ellipsisContainer.style.left = '0';\n  ellipsisContainer.style.height = 'auto';\n  ellipsisContainer.style.minHeight = 'auto';\n  ellipsisContainer.style.maxHeight = 'auto';\n  ellipsisContainer.style.top = '-999999px';\n  ellipsisContainer.style.zIndex = '-1000'; // clean up css overflow\n\n  ellipsisContainer.style.textOverflow = 'clip';\n  ellipsisContainer.style.whiteSpace = 'normal';\n  ellipsisContainer.style.webkitLineClamp = 'none'; // Render in the fake container\n\n  var contentList = mergeChildren(toArray(content));\n  render( /*#__PURE__*/React.createElement(\"div\", {\n    style: wrapperStyle\n  }, /*#__PURE__*/React.createElement(\"span\", {\n    style: wrapperStyle\n  }, contentList, suffix), /*#__PURE__*/React.createElement(\"span\", {\n    style: wrapperStyle\n  }, fixedContent)), ellipsisContainer); // wrap in an div for old version react\n  // Check if ellipsis in measure div is height enough for content\n\n  function inRange() {\n    return ellipsisContainer.offsetHeight < maxHeight;\n  } // Skip ellipsis if already match\n\n\n  if (inRange()) {\n    unmountComponentAtNode(ellipsisContainer);\n    return {\n      content: content,\n      text: ellipsisContainer.innerHTML,\n      ellipsis: false\n    };\n  } // We should clone the childNode since they're controlled by React and we can't reuse it without warning\n\n\n  var childNodes = Array.prototype.slice.apply(ellipsisContainer.childNodes[0].childNodes[0].cloneNode(true).childNodes).filter(function (_ref) {\n    var nodeType = _ref.nodeType;\n    return nodeType !== COMMENT_NODE;\n  });\n  var fixedNodes = Array.prototype.slice.apply(ellipsisContainer.childNodes[0].childNodes[1].cloneNode(true).childNodes);\n  unmountComponentAtNode(ellipsisContainer); // ========================= Find match ellipsis content =========================\n\n  var ellipsisChildren = [];\n  ellipsisContainer.innerHTML = ''; // Create origin content holder\n\n  var ellipsisContentHolder = document.createElement('span');\n  ellipsisContainer.appendChild(ellipsisContentHolder);\n  var ellipsisTextNode = document.createTextNode(ellipsisStr + suffix);\n  ellipsisContentHolder.appendChild(ellipsisTextNode);\n  fixedNodes.forEach(function (childNode) {\n    ellipsisContainer.appendChild(childNode);\n  }); // Append before fixed nodes\n\n  function appendChildNode(node) {\n    ellipsisContentHolder.insertBefore(node, ellipsisTextNode);\n  } // Get maximum text\n\n\n  function measureText(textNode, fullText) {\n    var startLoc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var endLoc = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : fullText.length;\n    var lastSuccessLoc = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n    var midLoc = Math.floor((startLoc + endLoc) / 2);\n    var currentText = fullText.slice(0, midLoc);\n    textNode.textContent = currentText;\n\n    if (startLoc >= endLoc - 1) {\n      // Loop when step is small\n      for (var step = endLoc; step >= startLoc; step -= 1) {\n        var currentStepText = fullText.slice(0, step);\n        textNode.textContent = currentStepText;\n\n        if (inRange() || !currentStepText) {\n          return step === fullText.length ? {\n            finished: false,\n            reactNode: fullText\n          } : {\n            finished: true,\n            reactNode: currentStepText\n          };\n        }\n      }\n    }\n\n    if (inRange()) {\n      return measureText(textNode, fullText, midLoc, endLoc, midLoc);\n    }\n\n    return measureText(textNode, fullText, startLoc, midLoc, lastSuccessLoc);\n  }\n\n  function measureNode(childNode, index) {\n    var type = childNode.nodeType;\n\n    if (type === ELEMENT_NODE) {\n      // We don't split element, it will keep if whole element can be displayed.\n      appendChildNode(childNode);\n\n      if (inRange()) {\n        return {\n          finished: false,\n          reactNode: contentList[index]\n        };\n      } // Clean up if can not pull in\n\n\n      ellipsisContentHolder.removeChild(childNode);\n      return {\n        finished: true,\n        reactNode: null\n      };\n    }\n\n    if (type === TEXT_NODE) {\n      var fullText = childNode.textContent || '';\n      var textNode = document.createTextNode(fullText);\n      appendChildNode(textNode);\n      return measureText(textNode, fullText);\n    } // Not handle other type of content\n    // PS: This code should not be attached after react 16\n\n    /* istanbul ignore next */\n\n\n    return {\n      finished: false,\n      reactNode: null\n    };\n  }\n\n  childNodes.some(function (childNode, index) {\n    var _measureNode = measureNode(childNode, index),\n        finished = _measureNode.finished,\n        reactNode = _measureNode.reactNode;\n\n    if (reactNode) {\n      ellipsisChildren.push(reactNode);\n    }\n\n    return finished;\n  });\n  return {\n    content: ellipsisChildren,\n    text: ellipsisContainer.innerHTML,\n    ellipsis: true\n  };\n});","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/antd/es/typography/util.js"],"names":["render","unmountComponentAtNode","React","toArray","ELEMENT_NODE","TEXT_NODE","COMMENT_NODE","ellipsisContainer","wrapperStyle","padding","margin","display","lineHeight","pxToNumber","value","match","Number","styleToString","style","styleNames","Array","prototype","slice","apply","map","name","concat","getPropertyValue","join","mergeChildren","children","childList","forEach","child","prevChild","length","push","originEle","option","content","fixedContent","ellipsisStr","document","createElement","setAttribute","body","appendChild","rows","_option$suffix","suffix","originStyle","window","getComputedStyle","originCSS","maxHeight","Math","round","paddingTop","paddingBottom","position","left","height","minHeight","top","zIndex","textOverflow","whiteSpace","webkitLineClamp","contentList","inRange","offsetHeight","text","innerHTML","ellipsis","childNodes","cloneNode","filter","_ref","nodeType","fixedNodes","ellipsisChildren","ellipsisContentHolder","ellipsisTextNode","createTextNode","childNode","appendChildNode","node","insertBefore","measureText","textNode","fullText","startLoc","arguments","undefined","endLoc","lastSuccessLoc","midLoc","floor","currentText","textContent","step","currentStepText","finished","reactNode","measureNode","index","type","removeChild","some","_measureNode"],"mappings":"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","sourcesContent":["import { render, unmountComponentAtNode } from 'react-dom';\nimport * as React from 'react';\nimport toArray from \"rc-util/es/Children/toArray\"; // We only handle element & text node.\n\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar ellipsisContainer;\nvar wrapperStyle = {\n  padding: 0,\n  margin: 0,\n  display: 'inline',\n  lineHeight: 'inherit'\n};\n\nfunction pxToNumber(value) {\n  if (!value) return 0;\n  var match = value.match(/^\\d*(\\.\\d*)?/);\n  return match ? Number(match[0]) : 0;\n}\n\nfunction styleToString(style) {\n  // There are some different behavior between Firefox & Chrome.\n  // We have to handle this ourself.\n  var styleNames = Array.prototype.slice.apply(style);\n  return styleNames.map(function (name) {\n    return \"\".concat(name, \": \").concat(style.getPropertyValue(name), \";\");\n  }).join('');\n}\n\nfunction mergeChildren(children) {\n  var childList = [];\n  children.forEach(function (child) {\n    var prevChild = childList[childList.length - 1];\n\n    if (typeof child === 'string' && typeof prevChild === 'string') {\n      childList[childList.length - 1] += child;\n    } else {\n      childList.push(child);\n    }\n  });\n  return childList;\n}\n\nexport default (function (originEle, option, content, fixedContent, ellipsisStr) {\n  if (!ellipsisContainer) {\n    ellipsisContainer = document.createElement('div');\n    ellipsisContainer.setAttribute('aria-hidden', 'true');\n    document.body.appendChild(ellipsisContainer);\n  }\n\n  var rows = option.rows,\n      _option$suffix = option.suffix,\n      suffix = _option$suffix === void 0 ? '' : _option$suffix; // Get origin style\n\n  var originStyle = window.getComputedStyle(originEle);\n  var originCSS = styleToString(originStyle);\n  var lineHeight = pxToNumber(originStyle.lineHeight);\n  var maxHeight = Math.round(lineHeight * (rows + 1) + pxToNumber(originStyle.paddingTop) + pxToNumber(originStyle.paddingBottom)); // Set shadow\n\n  ellipsisContainer.setAttribute('style', originCSS);\n  ellipsisContainer.style.position = 'fixed';\n  ellipsisContainer.style.left = '0';\n  ellipsisContainer.style.height = 'auto';\n  ellipsisContainer.style.minHeight = 'auto';\n  ellipsisContainer.style.maxHeight = 'auto';\n  ellipsisContainer.style.top = '-999999px';\n  ellipsisContainer.style.zIndex = '-1000'; // clean up css overflow\n\n  ellipsisContainer.style.textOverflow = 'clip';\n  ellipsisContainer.style.whiteSpace = 'normal';\n  ellipsisContainer.style.webkitLineClamp = 'none'; // Render in the fake container\n\n  var contentList = mergeChildren(toArray(content));\n  render( /*#__PURE__*/React.createElement(\"div\", {\n    style: wrapperStyle\n  }, /*#__PURE__*/React.createElement(\"span\", {\n    style: wrapperStyle\n  }, contentList, suffix), /*#__PURE__*/React.createElement(\"span\", {\n    style: wrapperStyle\n  }, fixedContent)), ellipsisContainer); // wrap in an div for old version react\n  // Check if ellipsis in measure div is height enough for content\n\n  function inRange() {\n    return ellipsisContainer.offsetHeight < maxHeight;\n  } // Skip ellipsis if already match\n\n\n  if (inRange()) {\n    unmountComponentAtNode(ellipsisContainer);\n    return {\n      content: content,\n      text: ellipsisContainer.innerHTML,\n      ellipsis: false\n    };\n  } // We should clone the childNode since they're controlled by React and we can't reuse it without warning\n\n\n  var childNodes = Array.prototype.slice.apply(ellipsisContainer.childNodes[0].childNodes[0].cloneNode(true).childNodes).filter(function (_ref) {\n    var nodeType = _ref.nodeType;\n    return nodeType !== COMMENT_NODE;\n  });\n  var fixedNodes = Array.prototype.slice.apply(ellipsisContainer.childNodes[0].childNodes[1].cloneNode(true).childNodes);\n  unmountComponentAtNode(ellipsisContainer); // ========================= Find match ellipsis content =========================\n\n  var ellipsisChildren = [];\n  ellipsisContainer.innerHTML = ''; // Create origin content holder\n\n  var ellipsisContentHolder = document.createElement('span');\n  ellipsisContainer.appendChild(ellipsisContentHolder);\n  var ellipsisTextNode = document.createTextNode(ellipsisStr + suffix);\n  ellipsisContentHolder.appendChild(ellipsisTextNode);\n  fixedNodes.forEach(function (childNode) {\n    ellipsisContainer.appendChild(childNode);\n  }); // Append before fixed nodes\n\n  function appendChildNode(node) {\n    ellipsisContentHolder.insertBefore(node, ellipsisTextNode);\n  } // Get maximum text\n\n\n  function measureText(textNode, fullText) {\n    var startLoc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var endLoc = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : fullText.length;\n    var lastSuccessLoc = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n    var midLoc = Math.floor((startLoc + endLoc) / 2);\n    var currentText = fullText.slice(0, midLoc);\n    textNode.textContent = currentText;\n\n    if (startLoc >= endLoc - 1) {\n      // Loop when step is small\n      for (var step = endLoc; step >= startLoc; step -= 1) {\n        var currentStepText = fullText.slice(0, step);\n        textNode.textContent = currentStepText;\n\n        if (inRange() || !currentStepText) {\n          return step === fullText.length ? {\n            finished: false,\n            reactNode: fullText\n          } : {\n            finished: true,\n            reactNode: currentStepText\n          };\n        }\n      }\n    }\n\n    if (inRange()) {\n      return measureText(textNode, fullText, midLoc, endLoc, midLoc);\n    }\n\n    return measureText(textNode, fullText, startLoc, midLoc, lastSuccessLoc);\n  }\n\n  function measureNode(childNode, index) {\n    var type = childNode.nodeType;\n\n    if (type === ELEMENT_NODE) {\n      // We don't split element, it will keep if whole element can be displayed.\n      appendChildNode(childNode);\n\n      if (inRange()) {\n        return {\n          finished: false,\n          reactNode: contentList[index]\n        };\n      } // Clean up if can not pull in\n\n\n      ellipsisContentHolder.removeChild(childNode);\n      return {\n        finished: true,\n        reactNode: null\n      };\n    }\n\n    if (type === TEXT_NODE) {\n      var fullText = childNode.textContent || '';\n      var textNode = document.createTextNode(fullText);\n      appendChildNode(textNode);\n      return measureText(textNode, fullText);\n    } // Not handle other type of content\n    // PS: This code should not be attached after react 16\n\n    /* istanbul ignore next */\n\n\n    return {\n      finished: false,\n      reactNode: null\n    };\n  }\n\n  childNodes.some(function (childNode, index) {\n    var _measureNode = measureNode(childNode, index),\n        finished = _measureNode.finished,\n        reactNode = _measureNode.reactNode;\n\n    if (reactNode) {\n      ellipsisChildren.push(reactNode);\n    }\n\n    return finished;\n  });\n  return {\n    content: ellipsisChildren,\n    text: ellipsisContainer.innerHTML,\n    ellipsis: true\n  };\n});"]},"metadata":{},"sourceType":"module"}