tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"file":"watermark.mjs","sources":["../../src/watermark/watermark.tsx"],"sourcesContent":["import { computed, onMounted, defineComponent, watch, ref, reactive, shallowRef } from 'vue';\nimport generateBase64Url from '../_common/js/watermark/generateBase64Url';\nimport randomMovingStyle from '../_common/js/watermark/randomMovingStyle';\nimport injectStyle from '../_common/js/utils/injectStyle';\nimport { useContent, usePrefixClass, useVariables } from '../hooks';\nimport setStyle from '../_common/js/utils/setStyle';\nimport { useMutationObserver } from './hooks';\nimport config from '../config';\n\nimport props from './props';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-watermark`,\n props,\n setup(props) {\n const backgroundImage = ref('');\n const watermarkRef = shallowRef<HTMLElement>();\n const watermarkContentRef = shallowRef<HTMLElement>();\n\n const offset = reactive(props.offset || []);\n\n const gapX = computed(() => {\n return props.movable ? 0 : props.x;\n });\n\n const gapY = computed(() => {\n return props.movable ? 0 : props.y;\n });\n\n const rotate = computed(() => {\n return props.movable ? 0 : props.rotate;\n });\n\n const backgroundRepeat = computed(() => {\n if (props.movable) {\n return 'no-repeat';\n }\n return props.isRepeat ? 'repeat' : 'no-repeat';\n });\n\n const offsetLeft = computed(() => {\n return offset[0] || gapX.value / 2;\n });\n\n const offsetTop = computed(() => {\n return offset[1] || gapY.value / 2;\n });\n const { fontColor } = useVariables({\n fontColor: '--td-text-color-watermark',\n });\n const bgImageOptions = computed(() => ({\n width: props.width,\n height: props.height,\n rotate: rotate.value,\n lineSpace: props.lineSpace,\n alpha: props.alpha,\n gapX: gapX.value,\n gapY: gapY.value,\n watermarkContent: props.watermarkContent,\n offsetLeft: offsetLeft.value,\n offsetTop: offsetTop.value,\n fontColor: fontColor.value,\n layout: props.layout,\n }));\n\n const removeWaterMark = () => {\n if (!watermarkContentRef.value) return;\n watermarkContentRef.value.remove();\n watermarkContentRef.value = null;\n };\n\n const injectWaterMark = () => {\n generateBase64Url(bgImageOptions.value, (base64Url, backgroundSize) => {\n removeWaterMark();\n\n backgroundImage.value = base64Url;\n watermarkContentRef.value = document.createElement('div');\n setStyle(watermarkContentRef.value, {\n zIndex: props.zIndex,\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n width: '100%',\n height: '100%',\n backgroundSize: `${backgroundSize?.width || gapX.value + props.width}px`,\n pointerEvents: 'none',\n backgroundRepeat: backgroundRepeat.value,\n backgroundImage: `url('${backgroundImage.value}')`,\n animation: props.movable ? `watermark infinite ${(props.moveInterval * 4) / 60}s` : 'none',\n });\n watermarkRef.value?.append(watermarkContentRef.value);\n });\n\n if (props.movable) {\n const keyframesStyle = randomMovingStyle();\n injectStyle(keyframesStyle);\n }\n };\n\n onMounted(() => {\n injectWaterMark();\n useMutationObserver(\n watermarkRef.value,\n (mutations) => {\n if (props.removable || !watermarkContentRef.value) return;\n for (const mutation of mutations) {\n const isRemoved = Array.from(mutation.removedNodes).includes(watermarkContentRef.value);\n const isModified = mutation.type === 'attributes' && watermarkContentRef.value === mutation.target;\n if (isRemoved || isModified) {\n injectWaterMark();\n break;\n }\n }\n },\n {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n },\n );\n });\n\n watch(() => [props, fontColor.value], injectWaterMark, { deep: true, flush: 'post' });\n\n return () => {\n const COMPONENT_NAME = usePrefixClass('watermark');\n const renderContent = useContent();\n\n return (\n <div class={COMPONENT_NAME.value} ref={watermarkRef}>\n {renderContent('default', 'content')}\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","props","setup","backgroundImage","ref","watermarkRef","shallowRef","watermarkContentRef","offset","reactive","gapX","computed","movable","x","gapY","y","rotate","backgroundRepeat","isRepeat","offsetLeft","value","offsetTop","_useVariables","useVariables","fontColor","bgImageOptions","width","height","lineSpace","alpha","watermarkContent","layout","removeWaterMark","remove","injectWaterMark","generateBase64Url","base64Url","backgroundSize","_watermarkRef$value","document","createElement","setStyle","zIndex","position","left","right","top","bottom","pointerEvents","concat","animation","moveInterval","append","keyframesStyle","randomMovingStyle","injectStyle","onMounted","useMutationObserver","mutations","removable","_iterator","_createForOfIteratorHelper","_step","s","n","done","mutation","isRemoved","Array","from","removedNodes","includes","isModified","type","target","err","e","f","attributes","childList","characterData","subtree","watch","deep","flush","COMPONENT_NAME","usePrefixClass","renderContent","useContent","_createVNode"],"mappings":"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"}