1 line
15 KiB
Plaintext
1 line
15 KiB
Plaintext
{"version":3,"file":"watermark.vue2.mjs","sources":["../../../../../../packages/components/watermark/src/watermark.vue"],"sourcesContent":["<template>\n <div ref=\"containerRef\" :style=\"[style]\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n watch,\n} from 'vue'\nimport { useMutationObserver } from '@vueuse/core'\nimport { isArray, isUndefined } from '@element-plus/utils'\nimport { getPixelRatio, getStyleStr, reRendering } from './utils'\nimport useClips from './useClips'\n\nimport type { WatermarkProps } from './watermark'\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({\n name: 'ElWatermark',\n})\n\nconst style: CSSProperties = {\n position: 'relative',\n}\n\nconst props = withDefaults(defineProps<WatermarkProps>(), {\n zIndex: 9,\n rotate: -22,\n content: 'Element Plus',\n gap: () => [100, 100],\n})\nconst fontGap = computed(() => props.font?.fontGap ?? 3)\nconst color = computed(() => props.font?.color ?? 'rgba(0,0,0,.15)')\nconst fontSize = computed(() => props.font?.fontSize ?? 16)\nconst fontWeight = computed(() => props.font?.fontWeight ?? 'normal')\nconst fontStyle = computed(() => props.font?.fontStyle ?? 'normal')\nconst fontFamily = computed(() => props.font?.fontFamily ?? 'sans-serif')\nconst textAlign = computed(() => props.font?.textAlign ?? 'center')\nconst textBaseline = computed(() => props.font?.textBaseline ?? 'hanging')\n\nconst gapX = computed(() => props.gap[0])\nconst gapY = computed(() => props.gap[1])\nconst gapXCenter = computed(() => gapX.value / 2)\nconst gapYCenter = computed(() => gapY.value / 2)\nconst offsetLeft = computed(() => props.offset?.[0] ?? gapXCenter.value)\nconst offsetTop = computed(() => props.offset?.[1] ?? gapYCenter.value)\n\nconst getMarkStyle = () => {\n const markStyle: CSSProperties = {\n zIndex: props.zIndex,\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n backgroundRepeat: 'repeat',\n }\n\n /** Calculate the style of the offset */\n let positionLeft = offsetLeft.value - gapXCenter.value\n let positionTop = offsetTop.value - gapYCenter.value\n if (positionLeft > 0) {\n markStyle.left = `${positionLeft}px`\n markStyle.width = `calc(100% - ${positionLeft}px)`\n positionLeft = 0\n }\n if (positionTop > 0) {\n markStyle.top = `${positionTop}px`\n markStyle.height = `calc(100% - ${positionTop}px)`\n positionTop = 0\n }\n markStyle.backgroundPosition = `${positionLeft}px ${positionTop}px`\n\n return markStyle\n}\n\nconst containerRef = shallowRef<HTMLDivElement | null>(null)\nconst watermarkRef = shallowRef<HTMLDivElement>()\nconst stopObservation = ref(false)\n\nconst destroyWatermark = () => {\n if (watermarkRef.value) {\n watermarkRef.value.remove()\n watermarkRef.value = undefined\n }\n}\nconst appendWatermark = (base64Url: string, markWidth: number) => {\n if (containerRef.value && watermarkRef.value) {\n stopObservation.value = true\n watermarkRef.value.setAttribute(\n 'style',\n getStyleStr({\n ...getMarkStyle(),\n backgroundImage: `url('${base64Url}')`,\n backgroundSize: `${Math.floor(markWidth)}px`,\n })\n )\n containerRef.value?.append(watermarkRef.value)\n // Delayed execution\n setTimeout(() => {\n stopObservation.value = false\n })\n }\n}\n\n/**\n * Get the width and height of the watermark. The default values are as follows\n * Image: [120, 64]; Content: It's calculated by content;\n */\nconst getMarkSize = (ctx: CanvasRenderingContext2D) => {\n let defaultWidth = 120\n let defaultHeight = 64\n let space = 0\n\n const { image, content, width, height, rotate } = props\n\n if (!image && ctx.measureText) {\n ctx.font = `${Number(fontSize.value)}px ${fontFamily.value}`\n\n const contents = isArray(content) ? content : [content]\n let maxWidth = 0\n let maxHeight = 0\n\n contents.forEach((item) => {\n const {\n width,\n fontBoundingBoxAscent,\n fontBoundingBoxDescent,\n actualBoundingBoxAscent,\n actualBoundingBoxDescent,\n } = ctx.measureText(item!)\n // Using `actualBoundingBoxAscent` to be compatible with lower version browsers (eg: Firefox < 116)\n const height = isUndefined(fontBoundingBoxAscent)\n ? actualBoundingBoxAscent + actualBoundingBoxDescent\n : fontBoundingBoxAscent + fontBoundingBoxDescent\n\n if (width > maxWidth) maxWidth = Math.ceil(width)\n if (height > maxHeight) maxHeight = Math.ceil(height)\n })\n\n defaultWidth = maxWidth\n defaultHeight =\n maxHeight * contents.length + (contents.length - 1) * fontGap.value\n\n const angle = (Math.PI / 180) * Number(rotate)\n space = Math.ceil(Math.abs(Math.sin(angle) * defaultHeight) / 2)\n\n defaultWidth += space\n }\n\n return [width ?? defaultWidth, height ?? defaultHeight, space] as const\n}\n\nconst getClips = useClips()\n\nconst renderWatermark = () => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n const image = props.image\n const content = props.content\n const rotate = props.rotate\n\n if (ctx) {\n if (!watermarkRef.value) {\n watermarkRef.value = document.createElement('div')\n }\n\n const ratio = getPixelRatio()\n const [markWidth, markHeight, space] = getMarkSize(ctx)\n\n const drawCanvas = (\n drawContent?: NonNullable<WatermarkProps['content']> | HTMLImageElement\n ) => {\n const [textClips, clipWidth] = getClips(\n drawContent || '',\n rotate,\n ratio,\n markWidth,\n markHeight,\n {\n color: color.value,\n fontSize: fontSize.value,\n fontStyle: fontStyle.value,\n fontWeight: fontWeight.value,\n fontFamily: fontFamily.value,\n fontGap: fontGap.value,\n textAlign: textAlign.value,\n textBaseline: textBaseline.value,\n },\n gapX.value,\n gapY.value,\n space\n )\n\n appendWatermark(textClips, clipWidth)\n }\n\n if (image) {\n const img = new Image()\n img.onload = () => {\n drawCanvas(img)\n }\n img.onerror = () => {\n drawCanvas(content)\n }\n img.crossOrigin = 'anonymous'\n img.referrerPolicy = 'no-referrer'\n img.src = image\n } else {\n drawCanvas(content)\n }\n }\n}\n\nonMounted(() => {\n renderWatermark()\n})\n\nwatch(\n () => props,\n () => {\n renderWatermark()\n },\n {\n deep: true,\n flush: 'post',\n }\n)\n\nonBeforeUnmount(() => {\n destroyWatermark()\n})\n\nconst onMutate = (mutations: MutationRecord[]) => {\n if (stopObservation.value) {\n return\n }\n mutations.forEach((mutation) => {\n if (reRendering(mutation, watermarkRef.value)) {\n destroyWatermark()\n renderWatermark()\n }\n })\n}\n\nuseMutationObserver(containerRef, onMutate, {\n attributes: true,\n subtree: true,\n childList: true,\n})\n</script>\n"],"names":["width","height","_createElementBlock","_renderSlot"],"mappings":"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"} |