{"version":3,"file":"acrodata-watermark.mjs","sources":["../../../projects/watermark/src/lib/utils.ts","../../../projects/watermark/src/lib/watermark.ts","../../../projects/watermark/src/lib/watermark.directive.ts","../../../projects/watermark/src/public-api.ts","../../../projects/watermark/src/acrodata-watermark.ts"],"sourcesContent":["import { WatermarkOptions, DrawPatternResult } from './types';\n\n/** 用于标记是否需要保护 */\nexport const attributeNameTag = 'data-watermark-tag';\n\nexport const observeOptions = {\n  childList: true,\n  subtree: true,\n  attributeFilter: ['style', 'class', attributeNameTag],\n};\n\n/** 获取 DataSetKey */\nexport function getDataSetKey(attributeName: string) {\n  return attributeName\n    .split('-')\n    .slice(1)\n    .reduce((prev, cur, index) => {\n      if (index === 0) {\n        return cur;\n      }\n\n      return `${prev}${cur[0].toUpperCase() + cur.slice(1)}`;\n    });\n}\n\n/** 将样式对象转换为字符串 */\nexport const getStyleStr = (style: Record<string, string | number>) => {\n  let str = '';\n\n  Object.keys(style).forEach(key => {\n    const k = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n    if (style[key] !== '' && style[key] != null) {\n      str += `${k}:${style[key]};`;\n    }\n  });\n\n  return str;\n};\n\n/** 创建随机 ID */\nexport const getRandomId = (prefix = '') => {\n  const uid = window.btoa(decodeURI(encodeURIComponent(prefix)));\n  return `${uid}-${new Date().getTime()}-${Math.floor(Math.random() * Math.pow(10, 8))}`;\n};\n\n/** 获取水印挂载节点 */\nexport const getContainer = (container: WatermarkOptions['container']) => {\n  let dom: HTMLElement | null;\n\n  if (typeof container === 'string') {\n    dom = document.querySelector(container);\n    if (!dom) {\n      throw new Error(`The watermark container element '${container}' not found!`);\n    }\n  } else {\n    dom = container ?? document.body;\n  }\n\n  return dom;\n};\n\n/** 盲水印解密 */\nexport const decrypt = (ctx: CanvasRenderingContext2D) => {\n  const originalData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);\n  const data = originalData.data;\n  for (let i = 0; i < data.length; i++) {\n    // 筛选每个像素点的R值\n    if (i % 4 == 0) {\n      if (data[i] % 2 == 0) {\n        // 如果 R 值为偶数，说明这个点是没有水印信息的，将其 R 值设为0\n        data[i] = 0;\n      } else {\n        // 如果 R 值为奇数，说明这个点是有水印信息的，将其 R 值设为255\n        data[i] = 255;\n      }\n    } else if (i % 4 == 3) {\n      // 透明度不作处理\n      continue;\n    } else {\n      // G、B 值设置为 0，不影响\n      data[i] = 0;\n    }\n  }\n  // 至此，带有水印信息的点都将展示为 `255,0,0`，而没有水印信息的点将展示为 `0,0,0`，将结果绘制到画布\n  ctx.putImageData(originalData, 0, 0);\n};\n\nexport const createHost = (watermarkTag: string) => {\n  const dom = document.createElement('div');\n  // 可以隐藏元素的 CSS 属性\n  const hiddenCSS = {\n    'display': 'block !important',\n    'position': 'static !important',\n    'opacity': '1 !important',\n    'visibility': 'visible !important',\n    'transform': 'none !important',\n    'clip-path': 'none !important',\n  };\n  dom.setAttribute('style', getStyleStr(hiddenCSS));\n  dom.setAttribute(attributeNameTag, watermarkTag);\n  return dom;\n};\n\nexport function getDrawPattern(opts: WatermarkOptions): Promise<DrawPatternResult> {\n  const {\n    text,\n    gapX,\n    gapY,\n    offsetY,\n    offsetX,\n    width,\n    height,\n    rotate,\n    opacity,\n    fontSize,\n    fontStyle,\n    fontVariant,\n    fontWeight,\n    fontFamily,\n    fontColor,\n    textAlign,\n    textBaseline,\n    image,\n    blindText,\n    blindFontSize,\n    blindOpacity,\n  } = opts as Required<WatermarkOptions>;\n  return new Promise((resolve, reject) => {\n    const canvas = document.createElement('canvas');\n\n    const ctx = canvas.getContext('2d');\n    const ratio = 1;\n\n    const canvasWidth = (Number(gapX) + Number(width)) * ratio;\n    const canvasHeight = (Number(gapY) + Number(height)) * ratio;\n    const canvasOffsetLeft = Number(offsetX) || Number(gapX) / 2;\n    const canvasOffsetTop = Number(offsetY) || Number(gapY) / 2;\n\n    canvas.setAttribute('width', `${canvasWidth}px`);\n    canvas.setAttribute('height', `${canvasHeight}px`);\n\n    if (ctx) {\n      const markWidth = width * ratio;\n      const markHeight = height * ratio;\n\n      // 1. 根据元素中心点旋转\n      ctx.translate(canvasOffsetLeft * ratio, canvasOffsetTop * ratio);\n      ctx.translate(markWidth / 2, markHeight / 2); // 1\n      ctx.rotate((Math.PI / 180) * Number(rotate));\n      ctx.translate(-markWidth / 2, -markHeight / 2); // 1\n\n      // 是否需要增加盲水印文字\n      if (blindText) {\n        // 盲水印需要低透明度\n        ctx.globalAlpha = blindOpacity;\n        ctx.font = `${blindFontSize}px normal`;\n        ctx.fillText(blindText, 0, 0);\n      }\n\n      // 设置透明度\n      ctx.globalAlpha = opacity;\n\n      // 优先使用图片\n      if (image) {\n        const img = new Image();\n        img.crossOrigin = 'anonymous';\n        img.referrerPolicy = 'no-referrer';\n        img.src = image;\n        img.onload = () => {\n          ctx.drawImage(img, 0, 0, markWidth, markHeight);\n          resolve({\n            url: ctx.canvas.toDataURL(),\n            width: canvasWidth,\n            height: canvasHeight,\n          });\n        };\n        return;\n      }\n\n      // 获取文本的最大宽度\n      const texts = typeof text === 'string' ? text.split('\\n') : text;\n      const widths = texts.map(item => ctx.measureText(item).width);\n      const maxWidth = Math.max(...widths);\n\n      const markSize = Number(fontSize) * ratio;\n\n      // 设置文本对齐方式\n      ctx.textAlign = textAlign;\n      // 设置文本位置\n      ctx.textBaseline = textBaseline;\n      // 设置字体颜色\n      ctx.fillStyle = fontColor;\n      // 设置字体\n      ctx.font = getFont(`${markSize}px`);\n\n      // 文案宽度大于画板宽度\n      if (maxWidth > width) {\n        ctx.font = getFont(`${markSize / 2}px`);\n      }\n\n      // 多行文本的上下间距\n      const textGap = 4;\n\n      // 获取行高\n      const lineHeight = markSize;\n\n      // 计算水印在 y 轴上的初始位置\n      let initY = (markHeight - (fontSize + 4) * texts.length - textGap * (texts.length - 1)) / 2;\n      initY = initY < 0 ? 0 : initY;\n\n      for (let i = 0; i < texts.length; i++) {\n        ctx.fillText(texts[i] || '', markWidth / 2, initY + lineHeight * (i + 1) + textGap * i);\n      }\n      resolve({\n        url: ctx.canvas.toDataURL(),\n        width: canvasWidth,\n        height: canvasHeight,\n      });\n    }\n\n    function getFont(fontSize: string) {\n      return `${fontStyle} ${fontVariant} ${fontWeight} ${fontSize} ${fontFamily}`;\n    }\n\n    return reject();\n  });\n}\n","import { WatermarkOptions } from './types';\nimport {\n  attributeNameTag,\n  createHost,\n  decrypt,\n  getContainer,\n  getDataSetKey,\n  getDrawPattern,\n  getRandomId,\n  getStyleStr,\n  observeOptions,\n} from './utils';\n\nexport const defaultOptions: WatermarkOptions = {\n  gapX: 100,\n  gapY: 100,\n  offsetX: 0,\n  offsetY: 0,\n  width: 120,\n  height: 60,\n  opacity: 0.15,\n  rotate: -24,\n  fontSize: 16,\n  fontWeight: '400',\n  fontStyle: 'normal',\n  fontVariant: 'normal',\n  fontColor: '#000',\n  fontFamily: 'sans-serif',\n  textAlign: 'center',\n  textBaseline: 'alphabetic',\n  secure: true,\n  blindFontSize: 16,\n  blindOpacity: 0.005,\n  repeat: 'multiply',\n  zIndex: 9999,\n};\n\nexport class Watermark {\n  /** 水印配置 */\n  private options: WatermarkOptions = {};\n  /** 水印挂载容器 */\n  private container?: HTMLElement;\n  /** 水印的宿主节点 */\n  private watermarkHost?: HTMLElement;\n  /** 水印节点 */\n  private watermarkDom?: HTMLElement;\n  /** 水印样式 */\n  private style: Record<string, string | number> = {\n    pointerEvents: 'none',\n    position: 'absolute',\n    inset: 0,\n  };\n  private watermarkTag = getRandomId('watermark');\n  private shadowRoot?: ShadowRoot | HTMLElement;\n  private mutationObserver: MutationObserver | null = null;\n\n  constructor(options: WatermarkOptions = {}) {\n    this.options = Object.assign({}, defaultOptions, options);\n\n    this._render();\n  }\n\n  static decrypt = decrypt;\n\n  update(options: WatermarkOptions = {}) {\n    this.options = {\n      ...this.options,\n      ...options,\n    };\n\n    this._render();\n  }\n\n  show() {\n    if (this.watermarkDom) {\n      this.style['display'] = 'block';\n      this.watermarkDom.setAttribute('style', getStyleStr(this.style));\n    }\n  }\n\n  hide() {\n    if (this.watermarkDom) {\n      this.style['display'] = 'none';\n      this.watermarkDom.setAttribute('style', getStyleStr(this.style));\n    }\n  }\n\n  destroy() {\n    this.shadowRoot = undefined;\n\n    if (this.watermarkHost) {\n      this.watermarkHost.remove();\n      this.watermarkHost = undefined;\n    }\n\n    if (this.watermarkDom) {\n      this.watermarkDom.remove();\n      this.watermarkDom = undefined;\n    }\n\n    this._destroyMutationObserver();\n  }\n\n  _shouldRerender = (mutation: MutationRecord) => {\n    // 修改样式或属性\n    if (mutation.type === 'attributes') {\n      if (mutation.attributeName === attributeNameTag) {\n        return true;\n      }\n      if (this.watermarkTag === this._getNodeRandomId(mutation.target)) {\n        return true;\n      }\n    }\n\n    // 删除节点\n    if (\n      mutation.removedNodes.length &&\n      this.watermarkTag === this._getNodeRandomId(mutation.removedNodes[0])\n    ) {\n      return true;\n    }\n\n    return false;\n  };\n\n  _getNodeRandomId = (node: Node) => {\n    return (node as HTMLElement)?.dataset?.[getDataSetKey(attributeNameTag)];\n  };\n\n  _destroyMutationObserver = () => {\n    if (this.mutationObserver) {\n      this.mutationObserver.takeRecords();\n      this.mutationObserver.disconnect();\n      this.mutationObserver = null;\n    }\n  };\n\n  _getWatermarkDom = async () => {\n    if (!this.watermarkDom) {\n      this.watermarkDom = document.createElement('div');\n    }\n\n    const bgConfig = await getDrawPattern(this.options);\n\n    if (bgConfig?.url) {\n      const bgImg = bgConfig.url;\n\n      this.style['zIndex'] = this.options.zIndex!;\n\n      if (this.options.repeat === 'multiply') {\n        this.style['backgroundImage'] = `url(${bgImg}), url(${bgImg})`;\n        this.style['backgroundRepeat'] = 'repeat';\n        this.style['backgroundPosition'] = `${bgConfig.width / 2}px ${bgConfig.height / 2}px, 0 0`;\n      } else {\n        this.style['backgroundImage'] = `url(${bgImg})`;\n        this.style['backgroundRepeat'] = 'repeat';\n        this.style['backgroundPosition'] = '';\n\n        if (this.options.repeat === 'none') {\n          this.style['backgroundRepeat'] = 'no-repeat';\n          this.style['backgroundPosition'] = this.options.position || 'center';\n        }\n      }\n\n      if (!this.options.container) {\n        this.style['position'] = 'fixed';\n      }\n\n      if (this.options.scrollHeight) {\n        const height = this.options.scrollHeight;\n        this.style['height'] = isNaN(Number(height)) ? height : height + 'px';\n      }\n\n      this.watermarkDom.setAttribute('style', getStyleStr(this.style));\n    }\n\n    this.watermarkDom.setAttribute(attributeNameTag, this.watermarkTag);\n\n    return this.watermarkDom;\n  };\n\n  async _render() {\n    this._destroyMutationObserver();\n\n    // 获取水印挂载节点\n    this.container = getContainer(this.options.container);\n    // 获取水印父节点\n    if (!this.watermarkHost) {\n      this.watermarkHost = createHost(this.watermarkTag);\n      this.container.append(this.watermarkHost);\n    }\n\n    // 获取水印 DOM\n    this.watermarkDom = await this._getWatermarkDom();\n\n    // 删除已有水印\n    if (this.watermarkHost) {\n      const children = this.watermarkHost.childNodes || [];\n\n      children.forEach(child => {\n        this.watermarkHost!.removeChild(child);\n      });\n    }\n\n    // 判断是否支持 Shadow DOM\n    if (typeof this.watermarkHost.attachShadow === 'function') {\n      if (!this.shadowRoot) {\n        this.shadowRoot = this.watermarkHost.attachShadow({ mode: 'open' });\n      }\n    } else {\n      this.shadowRoot = this.watermarkHost;\n    }\n\n    this.shadowRoot.append(this.watermarkDom);\n\n    if (MutationObserver && this.options.secure) {\n      this.mutationObserver = new MutationObserver(mutations => {\n        mutations.forEach(mutation => {\n          if (this._shouldRerender(mutation)) {\n            this.destroy();\n            this._render();\n            return;\n          }\n        });\n      });\n      this.mutationObserver.observe(this.container, observeOptions);\n      if (this.shadowRoot) {\n        this.mutationObserver.observe(this.shadowRoot, observeOptions);\n      }\n    }\n  }\n}\n","import {\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  NgZone,\n  numberAttribute,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { WatermarkOptions } from './types';\nimport { Watermark } from './watermark';\n\n@Directive({\n  selector: '[watermark]',\n  exportAs: 'watermark',\n  standalone: true,\n  host: {\n    '[style.position]': '\"relative\"',\n  },\n})\nexport class WatermarkDirective implements OnInit, OnChanges, OnDestroy {\n  @Input({ alias: 'watermarkOptions' }) options: WatermarkOptions = {};\n\n  @Input({ alias: 'watermarkContainer' }) container?: HTMLElement | string | null;\n\n  @Input({ alias: 'watermarkSecure', transform: booleanAttribute }) secure = true;\n\n  @Input({ alias: 'watermarkZIndex', transform: numberAttribute }) zIndex = 9999;\n\n  @Input({ alias: 'watermarkScrollHeight' }) scrollHeight?: string | number;\n\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _ngZone = inject(NgZone);\n\n  private _watermark?: Watermark;\n\n  ngOnInit(): void {\n    const el = this._elementRef.nativeElement;\n\n    this._watermark = this._ngZone.runOutsideAngular(\n      () =>\n        new Watermark({\n          ...this.options,\n          container: this.container || (el.childNodes.length > 0 ? el : null),\n          secure: this.secure,\n          zIndex: this.zIndex,\n          scrollHeight: this.scrollHeight,\n        })\n    );\n  }\n\n  ngOnChanges(): void {\n    this.update(this.options);\n  }\n\n  ngOnDestroy(): void {\n    this.destroy();\n  }\n\n  update(options: WatermarkOptions) {\n    this._watermark?.update(options);\n  }\n\n  show() {\n    this._watermark?.show();\n  }\n\n  hide() {\n    this._watermark?.hide();\n  }\n\n  destroy() {\n    this._watermark?.destroy();\n  }\n}\n","/*\n * Public API Surface of watermark\n */\n\nexport { WatermarkOptions } from './lib/types';\nexport * from './lib/watermark';\nexport * from './lib/watermark.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}