{"version":3,"file":"git-graph-class.mjs","sources":["../../../../../../packages/components/git-graph/src/git-graph-class.ts"],"sourcesContent":["import { cloneDeep } from 'lodash-unified'\nimport type { CommitInfo, GitGraphData } from './git-graph-types'\n\nexport class GitGraph {\n  element?: HTMLElement\n  options?: GitGraphData\n  mtime = 0\n  mspace = 0\n  parents: any = {}\n  offsetX = 70\n  offsetY = 60\n  unitTime = 50\n  unitSpace = 15\n  prev_start = -1\n  preparedCommits: any = {}\n  preStart = 1\n  isDark = false\n  daysBefore = '天前'\n  hoursAgo = '小时前'\n  minutesAgo = '分钟前'\n  aMinutesAgo = '1分钟前'\n  maxNameLength = 25\n  commits: CommitInfo[] = []\n  graphHeight = 0\n  graphWidth = 0\n  svg!: any\n  barHeight = 0\n  messageBoxWidth = 0\n  colors = [\n    '#5C8DFF',\n    '#BC94FF',\n    '#54D2EB',\n    '#A6DD82',\n    '#FCDA6B',\n    '#CA7ED6',\n    '#7298F1',\n    '#73CEA6',\n    '#EDD249',\n    '#CAABFF',\n    '#85CAFF',\n    '#93D99A',\n    '#96ADFA',\n    '#F4AF8F',\n    '#A282E9',\n    '#FFBB6B',\n    '#69DBB9',\n    '#76DBEF',\n    '#B1CE4F',\n    '#5DA4DC',\n  ]\n  toolTipList: any\n\n  load(element: HTMLElement, options: GitGraphData, isDark: boolean) {\n    this.element = element\n    this.options = options\n    this.isDark = !!isDark\n    this.daysBefore = options.params.daysBefore || this.daysBefore\n    this.hoursAgo = options.params.hoursAgo || this.hoursAgo\n    this.minutesAgo = options.params.minutesAgo || this.minutesAgo\n    this.aMinutesAgo = options.params.aMinutesAgo || this.aMinutesAgo\n    this.maxNameLength = options.params.maxNameLength || 25\n\n    const commits = cloneDeep(this.options.data.commits)\n    this.prepareData(commits)\n    return this.buildGraph('refName')\n  }\n\n  prepareData(commits: CommitInfo[]) {\n    let c\n    this.commits = commits\n    this.collectParent()\n    this.graphHeight = (\n      this.element as HTMLElement\n    ).getBoundingClientRect().height\n    this.graphWidth = (\n      this.element as HTMLElement\n    ).getBoundingClientRect().width\n\n    // 按提交数据计算画布高度，并留出下方150，右边500空白，保证悬浮框不超出画布\n    const ch = Math.max(\n      this.graphHeight,\n      this.offsetY + this.unitTime * this.mtime + 150\n    )\n    const cw = Math.max(\n      this.graphWidth,\n      this.offsetX + this.unitSpace * this.mspace + 500\n    )\n    this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n    this.svg.setAttribute('height', `${ch}`)\n    this.svg.setAttribute('width', `${cw}`)\n    this.element?.appendChild(this.svg)\n    this.barHeight = Math.max(\n      this.graphHeight,\n      this.unitTime * this.commits.length + 320\n    )\n\n    const _ref = this.commits\n    for (const element of _ref) {\n      c = element\n      this.preparedCommits[c.id] = c\n    }\n  }\n\n  collectParent() {\n    let c: CommitInfo\n    let p\n    let _i\n    let _len\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const _this = this\n    const _ref = this.commits\n    const _results = []\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      c = _ref[_i]\n      this.mtime = Math.max(this.mtime, c.time)\n      this.mspace = Math.max(this.mspace, c.space)\n      _results.push(\n        function () {\n          let _j\n          let _len2\n          const _ref2 = c.parents\n          const _result2 = []\n          for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {\n            p = _ref2[_j]\n            _this.parents[p[0]] = true\n            _result2.push((_this.mspace = Math.max(_this.mspace, p[1])))\n          }\n          return _result2\n        }.call(_this)\n      )\n    }\n\n    return _results\n  }\n\n  buildGraph(refName: string) {\n    let curDay = new Date(0)\n    let day\n    let mm\n    let _len\n\n    const _ref = this.commits\n    for (mm = 0, _len = _ref.length; mm < _len; mm++) {\n      day = _ref[mm].date\n      if (\n        curDay.getDate() !== new Date(day).getDate() ||\n        curDay.getMonth() !== new Date(day).getMonth() ||\n        curDay.getFullYear() !== new Date(day).getFullYear()\n      ) {\n        const text = document.createElementNS(\n          'http://www.w3.org/2000/svg',\n          'text'\n        )\n        const date = new Date(day)\n        const attrs = {\n          x: this.offsetX + this.unitSpace * this.mspace + 56,\n          y: this.offsetY + this.unitTime * mm - 22,\n          'font-size': '12px',\n          fill: '#999',\n          'text-anchor': 'start',\n        }\n        this.setNodeAttr(text, attrs)\n        const tspan = document.createElementNS(\n          'http://www.w3.org/2000/svg',\n          'tspan'\n        )\n        tspan.appendChild(\n          document.createTextNode(\n            `${date.getFullYear()} / ${date.getMonth() + 1} / ${date.getDate()}`\n          )\n        )\n        text.appendChild(tspan)\n        this.svg.appendChild(text)\n        curDay = date\n      }\n    }\n    this.renderPartialGraph(refName)\n  }\n\n  setNodeAttr(node: Element, attrs: any) {\n    Object.keys(attrs).forEach((key) => {\n      node.setAttribute(key, attrs[key])\n    })\n  }\n\n  __transform(time: any) {\n    let timeTip = ''\n    const now = Date.now()\n    const commitTime = new Date(time).getTime()\n    const day = (now - commitTime) / (60 * 60 * 24 * 1000)\n    const hour = (now - commitTime) / (60 * 60 * 1000)\n    const minutes = (now - commitTime) / (60 * 1000)\n    if (day >= 1) {\n      timeTip = Math.floor(day) + this.daysBefore\n    } else {\n      if (hour >= 1) {\n        timeTip = Math.floor(hour) + this.hoursAgo\n      } else {\n        if (minutes >= 1) {\n          timeTip = Math.floor(minutes) + this.minutesAgo\n        } else {\n          timeTip = this.aMinutesAgo\n        }\n      }\n    }\n    return timeTip\n  }\n\n  renderPartialGraph(refName: string) {\n    let commit\n    let end\n    let i\n    let isGraphEdge\n    let start: number\n    let x\n    let y\n    start =\n      Math.floor(\n        ((this.element as HTMLElement).scrollTop - this.offsetY) / this.unitTime\n      ) - 10\n    if (start < 0) {\n      isGraphEdge = true\n      start = 0\n    }\n    end =\n      (this.element as HTMLElement).scrollHeight >\n      (this.element as HTMLElement).clientHeight\n        ? start + 40\n        : Number.POSITIVE_INFINITY\n\n    if (this.preStart <= end) {\n      isGraphEdge = true\n      start = this.preStart - 1\n      this.preStart = end\n    }\n\n    if (this.commits.length < end) {\n      isGraphEdge = true\n      end = this.commits.length\n    }\n\n    if (\n      this.prev_start === -1 ||\n      Math.abs(this.prev_start - start) > 10 ||\n      isGraphEdge\n    ) {\n      i = start\n      this.prev_start = start\n      while (i < end) {\n        commit = this.commits[i]\n        i += 1\n        if (commit['hasDrawn'] !== true) {\n          x = this.offsetX + this.unitSpace * (this.mspace - commit.space)\n          y = this.offsetY + this.unitTime * commit.time\n          this.drawDot(x, y, commit)\n          this.drawLines(x, y, commit)\n          this.appendLabel(x, y, commit)\n          this.appendAnchor(x, y, commit, refName)\n          commit['hasDrawn'] = true\n        }\n      }\n    }\n  }\n\n  drawDot(x: number, y: number, commit: CommitInfo) {\n    const options = this.options\n    const circle = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'circle'\n    )\n    const attrs = {\n      cx: x,\n      cy: y,\n      r: 4,\n      fill: '#fff',\n      strokeWidth: 1,\n      stroke: this.colors[commit.space % 20],\n      style: 'cursor: pointer;',\n    }\n    this.setNodeAttr(circle, attrs)\n    this.svg.appendChild(circle)\n\n    const avatarBoxX = this.offsetX + this.unitSpace * this.mspace + 16\n    const avatarBoxY = y - 13\n\n    const img = document.createElementNS('http://www.w3.org/2000/svg', 'image')\n    const imgAttrs = {\n      width: 30,\n      height: 30,\n      preserveAspectRatio: 'none',\n      href: commit.author.avatar_url,\n      x: avatarBoxX,\n      y: avatarBoxY,\n      style: 'clip-path: circle(50%)',\n    }\n    this.setNodeAttr(img, imgAttrs)\n\n    const authorText = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'title'\n    )\n    authorText.appendChild(document.createTextNode(commit.author.name))\n    img.appendChild(authorText)\n\n    this.svg.appendChild(img)\n\n    if (!this.messageBoxWidth) {\n      this.messageBoxWidth =\n        this.svg.getBoundingClientRect().width - (avatarBoxX + 40)\n    }\n    // 画竖线\n    let route = [\n      'M',\n      avatarBoxX + 15,\n      avatarBoxY - 20,\n      'L',\n      avatarBoxX + 15,\n      avatarBoxY,\n    ]\n    const line1 = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    const lineAttrs1 = {\n      d: route.join(' '),\n      stroke: '#ccc',\n      fill: 'none',\n      'stroke-width': 2,\n    }\n    this.setNodeAttr(line1, lineAttrs1)\n    this.svg.appendChild(line1)\n    route = [\n      'M',\n      avatarBoxX + 15,\n      avatarBoxY + 30,\n      'L',\n      avatarBoxX + 15,\n      avatarBoxY + 50,\n    ]\n    const line2 = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    const lineAttrs2 = {\n      d: route.join(' '),\n      stroke: '#ccc',\n      'stroke-width': 2,\n    }\n    this.setNodeAttr(line2, lineAttrs2)\n    this.svg.appendChild(line2)\n\n    if (commit.author.name.length > this.maxNameLength) {\n      commit.author.name = `${commit.author.name.slice(\n        0,\n        Math.max(0, this.maxNameLength)\n      )}...`\n    }\n\n    const commitText = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'foreignObject'\n    )\n    const commitAttrs = {\n      x: avatarBoxX + 40,\n      y: y - 8,\n      'text-anchor': 'start',\n      style: 'cursor: pointer;text-anchor: start;',\n      width: this.messageBoxWidth,\n      height: 20,\n    }\n    this.setNodeAttr(commitText, commitAttrs)\n\n    const textArr = {\n      style:\n        'width: 100%; height: 20px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;',\n      title: commit.message,\n    }\n\n    const text = document.createElement('div')\n    this.setNodeAttr(text, textArr)\n\n    text.innerText = commit.message.replace(/\\n/g, ' ')\n    commitText.appendChild(text)\n\n    this.svg.appendChild(commitText)\n\n    const tspan = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'tspan'\n    )\n    tspan.appendChild(\n      document.createTextNode(commit.message.replace(/\\n/g, ' '))\n    )\n    commitText.appendChild(tspan)\n\n    const titleText = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'title'\n    )\n    titleText.appendChild(document.createTextNode(commit.message))\n    commitText.appendChild(titleText)\n    this.svg.appendChild(commitText)\n    ;(commitText as any).onclick = function () {\n      const url =\n        commit.customUrl || options?.commit_url.replace('{commitId}', commit.id)\n      return window.open(url, '_blank')\n    }\n  }\n\n  drawLines(x: number, y: number, commit: CommitInfo) {\n    let arrow\n    let color\n    let offset\n    let parent\n    let parentCommit\n    let parentX1\n    let parentX2\n    let parentY\n    let route\n    const _ref = commit.parents\n    for (const [i, element] of _ref.entries()) {\n      parent = element\n      parentCommit = this.preparedCommits[parent[0]]\n      if (!parentCommit) {\n        break\n      }\n      parentY = this.offsetY + this.unitTime * parentCommit.time\n      parentX1 =\n        this.offsetX + this.unitSpace * (this.mspace - parentCommit.space)\n      parentX2 = this.offsetX + this.unitSpace * (this.mspace - parent[1])\n      if (parentCommit.space <= commit.space) {\n        color = this.colors[commit.space % 20]\n      } else {\n        color = this.colors[parentCommit.space % 20]\n      }\n      if (parent[1] === commit.space) {\n        offset = [0, 5]\n        arrow = 'l-2,5,4,0,-2,-5,0,5'.split(',')\n      } else if (parent[1] < commit.space) {\n        offset = [3, 3]\n        arrow = 'l5,0,-2,4,-3,-4,4,2'.split(',')\n      } else {\n        offset = [-3, 3]\n        arrow = 'l-5,0,2,4,3,-4,-4,2'.split(',')\n      }\n      route = ['M', x + offset[0], y + offset[1]]\n      if (i > 0) {\n        route.push(...arrow)\n      }\n      if (commit.space !== parentCommit.space || commit.space !== parent[1]) {\n        route.push('L', parentX2, y + 10, 'L', parentX2, parentY - 5)\n      }\n      route.push('L', parentX1, parentY)\n      const line = document.createElementNS(\n        'http://www.w3.org/2000/svg',\n        'path'\n      )\n      const lineAttrs = {\n        d: route.join(' '),\n        stroke: color,\n        'stroke-width': 1,\n        fill: 'none',\n      }\n      this.setNodeAttr(line, lineAttrs)\n      this.svg.appendChild(line)\n    }\n  }\n\n  appendLabel(x: number, y: number, commit: CommitInfo) {\n    let shortrefs\n    if (!commit.refs) {\n      return\n    }\n    shortrefs = commit.refs\n    if (shortrefs.length > 7) {\n      if (!escape(shortrefs).includes('%u')) {\n        // 标签不含中文\n        shortrefs = `${shortrefs.slice(0, 5)}...`\n      } else {\n        // 标签中含中文\n        shortrefs = `${shortrefs.slice(0, 3)}...`\n      }\n    }\n    const text = document.createElementNS('http://www.w3.org/2000/svg', 'text')\n    const textAttrs = {\n      x: x + 4,\n      y: y + 4,\n      'text-anchor': 'start',\n      fill: 'none',\n      style: 'font-size: 10px;',\n    }\n\n    this.setNodeAttr(text, textAttrs)\n    const tspan = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'tspan'\n    )\n    const rect = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    tspan.appendChild(document.createTextNode(shortrefs))\n    text.appendChild(tspan)\n\n    const titleText = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'title'\n    )\n    titleText.appendChild(document.createTextNode(commit.refs))\n    text.appendChild(titleText)\n    this.svg.appendChild(rect)\n    this.svg.appendChild(text)\n\n    setTimeout(() => {\n      const textbox = text.getBBox()\n      const path = [\n        'M',\n        x,\n        y - 7,\n        'L',\n        x,\n        y - 7 + textbox.height + 4,\n        'L',\n        x + textbox.width + 8,\n        y - 7 + textbox.height + 4,\n        'L',\n        x + textbox.width + 8,\n        y + 4,\n        'L',\n        x + textbox.width + 18,\n        y,\n        'L',\n        x + textbox.width + 8,\n        y - 4,\n        'L',\n        x + textbox.width + 8,\n        y - 7,\n        'Z',\n      ]\n\n      const rectAttrs = {\n        fill: this.isDark ? '#4C4C4C' : '#fff',\n        stroke: this.colors[commit.space % 20],\n        'stroke-width': '1px',\n        d: path.join(' '),\n        transform: `matrix(1,0,0,1,-${textbox.width + 26},0)`,\n      }\n\n      const newAttrs = {\n        transform: `matrix(1,0,0,1,-${textbox.width + 26},0)`,\n        fill: this.colors[commit.space % 20],\n      }\n\n      this.setNodeAttr(text, newAttrs)\n      this.setNodeAttr(rect, rectAttrs)\n    })\n  }\n\n  appendAnchor(x: number, y: number, commit: CommitInfo, refName: any) {\n    const options = this.options\n    const isDark = this.isDark\n    const circle = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'circle'\n    )\n    const attrs = {\n      cx: x,\n      cy: y,\n      r: 10,\n      fill: '#000',\n      opacity: 0,\n      style: 'cursor:pointer;',\n    }\n    this.setNodeAttr(circle, attrs)\n    circle.onclick = function () {\n      localStorage.setItem('refName', refName)\n      const url =\n        commit.customUrl || options?.commit_url.replace('{commitId}', commit.id)\n      return window.open(url, '_blank')\n    }\n    circle.onmouseover = () => {\n      this.commitTooltip(x + 20, y + 20, commit, isDark)\n    }\n    circle.onmouseleave = () => {\n      this.toolTipList.forEach((element: any) => {\n        this.svg.removeChild(element)\n      })\n    }\n    this.svg.appendChild(circle)\n  }\n\n  getText(x: number, y: number, text: any, attrs: any = {}) {\n    const resText = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'text'\n    )\n    this.setNodeAttr(resText, {\n      x,\n      y,\n      ...attrs,\n    })\n    const tspan = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'tspan'\n    )\n    tspan.appendChild(document.createTextNode(text))\n    resText.appendChild(tspan)\n\n    return resText\n  }\n\n  commitTooltip(x: number, y: number, commit: CommitInfo, isDark: boolean) {\n    let boxHeight\n    let boxWidth\n    let messageText\n    boxWidth = 300\n    boxHeight = 200\n\n    const nameText = this.getText(x, y + 10, commit.author.name, {\n      font: '14px Arial',\n      'font-weight': 'bold',\n      'text-anchor': 'start',\n    })\n\n    const idText = this.getText(x, y + 55, commit.id, {\n      fill: isDark ? '#73788a' : '#71757f',\n      'text-anchor': 'start',\n    })\n\n    const timeText = this.getText(x, y + 35, this.__transform(commit.date), {\n      font: '12px Arial',\n      fill: isDark ? '#73788a' : '#71757f',\n      'text-anchor': 'start',\n    })\n\n    const branchText = commit.branch\n      ? this.getText(x + 70, y + 35, commit.branch, {\n          font: '12px Arial',\n          fill: isDark ? '#73788a' : '#71757f',\n        })\n      : null\n\n    const strList = commit.message.split('\\n')\n    if (strList.length > 10) {\n      messageText = this.getText(\n        x,\n        y + 70,\n        `${strList.slice(0, 10).join('\\n')}...`,\n        {\n          fill: isDark ? '#E8E8E8' : '#2e2e2e',\n          'text-anchor': 'start',\n          font: '12px Monaco, monospace',\n        }\n      )\n    } else if (commit.message.length > 1500) {\n      messageText = this.getText(\n        x,\n        y + 70,\n        `${commit.message.slice(0, 1500)}...`,\n        {\n          fill: isDark ? '#E8E8E8' : '#2e2e2e',\n          'text-anchor': 'start',\n          font: '12px Monaco, monospace',\n        }\n      )\n    } else {\n      messageText = this.getText(x, y + 70, commit.message, {\n        fill: isDark ? '#E8E8E8' : '#2e2e2e',\n        'text-anchor': 'start',\n        font: '12px Monaco, monospace',\n      })\n    }\n    const textArr = commit.branch\n      ? [nameText, idText, messageText, timeText, branchText]\n      : [nameText, idText, messageText, timeText]\n\n    this.textWrap(messageText, boxWidth - 50, x)\n\n    const rect: any = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'rect'\n    )\n    this.setNodeAttr(rect, {\n      x: x - 10,\n      y: y - 10,\n      width: boxWidth,\n      height: 100,\n      fill: isDark ? '#4c4c4c' : '#fff',\n      stroke: isDark ? '#4c4c4c' : '#fff',\n      'stroke-linecap': 'round',\n      'stroke-width': '1px',\n    })\n    textArr.unshift(rect)\n\n    const rectShadow: any = document.createElementNS(\n      'http://www.w3.org/2000/svg',\n      'rect'\n    )\n    this.setNodeAttr(rectShadow, {\n      x: x - 11,\n      y: y - 10,\n      width: boxWidth + 2,\n      height: 100,\n      fill: isDark ? '#4c4c4c' : '#eee',\n      stroke: isDark ? '#4c4c4c' : '#eee',\n      'stroke-linecap': 'round',\n      'stroke-width': '1px',\n    })\n    textArr.unshift(rectShadow)\n\n    textArr.forEach((t) => {\n      this.svg.appendChild(t)\n    })\n    boxWidth =\n      messageText.getBBox().width + 20 > boxWidth\n        ? messageText.getBBox().width + 20\n        : boxWidth\n    boxHeight = 80 + messageText.getBBox().height\n    this.toolTipList = textArr\n    this.setNodeAttr(rect, {\n      height: boxHeight + 10,\n      width: boxWidth,\n    })\n\n    this.setNodeAttr(rectShadow, {\n      height: boxHeight + 13,\n      width: boxWidth + 2,\n    })\n  }\n\n  textWrap(t: any, width: any, x: any) {\n    const content = t.children[0].innerHTML\n    let words = content.split('\\n').filter((item: any) => item !== '')\n    words = words.map((str: any) => {\n      str = str.trim()\n      let len = str.length\n      const strList = []\n      while (len > 70) {\n        strList.push(str.slice(0, 70))\n        str = str.slice(70)\n        len = str.length\n      }\n      strList.push(str)\n\n      return strList.join('\\n')\n    })\n    t.removeChild(t.children[0])\n    words.forEach((str: any) => {\n      const list = str.split('\\n')\n      list.forEach((item: any) => {\n        const tspan = document.createElementNS(\n          'http://www.w3.org/2000/svg',\n          'tspan'\n        )\n        tspan.appendChild(document.createTextNode(item))\n        this.setNodeAttr(tspan, {\n          dy: 14.4,\n          x,\n        })\n        t.appendChild(tspan)\n      })\n\n      const space = document.createElementNS(\n        'http://www.w3.org/2000/svg',\n        'tspan'\n      )\n      space.appendChild(document.createTextNode(' '))\n      this.setNodeAttr(space, {\n        dy: 14.4,\n        x,\n      })\n      t.appendChild(space)\n    })\n  }\n}\n"],"names":[],"mappings":"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"}