@qxs-bns/utils 0.0.18 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.mjs +2 -0
- package/es/index.mjs.map +1 -0
- package/es/src/argo-log.mjs +2 -0
- package/es/src/argo-log.mjs.map +1 -0
- package/es/src/date-transfer.mjs +2 -0
- package/es/src/date-transfer.mjs.map +1 -0
- package/es/src/device.mjs +2 -0
- package/es/src/device.mjs.map +1 -0
- package/es/src/file-operations.mjs +2 -0
- package/es/src/file-operations.mjs.map +1 -0
- package/es/src/json.mjs +2 -0
- package/es/src/json.mjs.map +1 -0
- package/es/src/oss-uploader.mjs +2 -0
- package/es/src/oss-uploader.mjs.map +1 -0
- package/es/src/set-guid.mjs +2 -0
- package/es/src/set-guid.mjs.map +1 -0
- package/es/src/storage.mjs +2 -0
- package/es/src/storage.mjs.map +1 -0
- package/es/src/types.mjs +2 -0
- package/es/src/types.mjs.map +1 -0
- package/es/src/use-api.mjs +2 -0
- package/es/src/use-api.mjs.map +1 -0
- package/es/src/watermark.mjs +2 -0
- package/es/src/watermark.mjs.map +1 -0
- package/lib/index.cjs +2 -0
- package/lib/index.cjs.map +1 -0
- package/lib/src/argo-log.cjs +2 -0
- package/lib/src/argo-log.cjs.map +1 -0
- package/lib/src/date-transfer.cjs +2 -0
- package/lib/src/date-transfer.cjs.map +1 -0
- package/lib/src/device.cjs +2 -0
- package/lib/src/device.cjs.map +1 -0
- package/lib/src/file-operations.cjs +2 -0
- package/lib/src/file-operations.cjs.map +1 -0
- package/lib/src/json.cjs +2 -0
- package/lib/src/json.cjs.map +1 -0
- package/lib/src/oss-uploader.cjs +2 -0
- package/lib/src/oss-uploader.cjs.map +1 -0
- package/lib/src/set-guid.cjs +2 -0
- package/lib/src/set-guid.cjs.map +1 -0
- package/lib/src/storage.cjs +2 -0
- package/lib/src/storage.cjs.map +1 -0
- package/lib/src/types.cjs +2 -0
- package/lib/src/types.cjs.map +1 -0
- package/lib/src/use-api.cjs +2 -0
- package/lib/src/use-api.cjs.map +1 -0
- package/lib/src/watermark.cjs +2 -0
- package/lib/src/watermark.cjs.map +1 -0
- package/package.json +15 -9
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/src/argo-log.d.ts.map +1 -1
- package/types/src/file-operations.d.ts.map +1 -1
- package/types/src/set-guid.d.ts +5 -0
- package/types/src/set-guid.d.ts.map +1 -0
- package/types/src/use-api.d.ts +73 -1
- package/types/src/use-api.d.ts.map +1 -1
- package/types/tsconfig.tsbuildinfo +1 -1
- package/es/index.js +0 -11
- package/es/index.js.map +0 -1
- package/es/src/argo-log.js +0 -78
- package/es/src/argo-log.js.map +0 -1
- package/es/src/date-transfer.js +0 -34
- package/es/src/date-transfer.js.map +0 -1
- package/es/src/device.js +0 -23
- package/es/src/device.js.map +0 -1
- package/es/src/file-operations.js +0 -105
- package/es/src/file-operations.js.map +0 -1
- package/es/src/json.js +0 -67
- package/es/src/json.js.map +0 -1
- package/es/src/oss-uploader.js +0 -115
- package/es/src/oss-uploader.js.map +0 -1
- package/es/src/storage.js +0 -113
- package/es/src/storage.js.map +0 -1
- package/es/src/types.js +0 -38
- package/es/src/types.js.map +0 -1
- package/es/src/use-api.js +0 -65
- package/es/src/use-api.js.map +0 -1
- package/es/src/watermark.js +0 -209
- package/es/src/watermark.js.map +0 -1
- package/lib/index.js +0 -41
- package/lib/index.js.map +0 -1
- package/lib/src/argo-log.js +0 -80
- package/lib/src/argo-log.js.map +0 -1
- package/lib/src/date-transfer.js +0 -36
- package/lib/src/date-transfer.js.map +0 -1
- package/lib/src/device.js +0 -28
- package/lib/src/device.js.map +0 -1
- package/lib/src/file-operations.js +0 -108
- package/lib/src/file-operations.js.map +0 -1
- package/lib/src/json.js +0 -70
- package/lib/src/json.js.map +0 -1
- package/lib/src/oss-uploader.js +0 -120
- package/lib/src/oss-uploader.js.map +0 -1
- package/lib/src/storage.js +0 -115
- package/lib/src/storage.js.map +0 -1
- package/lib/src/types.js +0 -47
- package/lib/src/types.js.map +0 -1
- package/lib/src/use-api.js +0 -67
- package/lib/src/use-api.js.map +0 -1
- package/lib/src/watermark.js +0 -211
- package/lib/src/watermark.js.map +0 -1
package/lib/src/watermark.js
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const initialSettings = {
|
|
4
|
-
id: "wm_div_id",
|
|
5
|
-
prefix: "mask_div_id",
|
|
6
|
-
text: "\u6D4B\u8BD5\u6C34\u5370",
|
|
7
|
-
x: 0,
|
|
8
|
-
y: 0,
|
|
9
|
-
rows: 0,
|
|
10
|
-
cols: 0,
|
|
11
|
-
width: 0,
|
|
12
|
-
height: 0,
|
|
13
|
-
x_space: 100,
|
|
14
|
-
y_space: 40,
|
|
15
|
-
font: "\u5FAE\u8F6F\u96C5\u9ED1",
|
|
16
|
-
color: "black",
|
|
17
|
-
fontsize: "18px",
|
|
18
|
-
alpha: 0.15,
|
|
19
|
-
angle: 15,
|
|
20
|
-
parent_width: 0,
|
|
21
|
-
parent_height: 0,
|
|
22
|
-
parent_node: null,
|
|
23
|
-
monitor: true
|
|
24
|
-
};
|
|
25
|
-
function calculateTextDimensions(text, font, fontSize) {
|
|
26
|
-
const canvas = document.createElement("canvas");
|
|
27
|
-
const context = canvas.getContext("2d");
|
|
28
|
-
if (!context) {
|
|
29
|
-
return {
|
|
30
|
-
width: 100,
|
|
31
|
-
height: 100
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
context.font = `${fontSize} ${font}`;
|
|
35
|
-
const metrics = context.measureText(text.trim());
|
|
36
|
-
const fontSizeNum = Number.parseFloat(fontSize);
|
|
37
|
-
const height = metrics.actualBoundingBoxAscent !== void 0 && metrics.actualBoundingBoxDescent !== void 0 ? metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent : fontSizeNum;
|
|
38
|
-
return {
|
|
39
|
-
width: Math.ceil(metrics.width),
|
|
40
|
-
height: Math.ceil(height)
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
function watermark() {
|
|
44
|
-
const globalSetting = {
|
|
45
|
-
...initialSettings
|
|
46
|
-
};
|
|
47
|
-
let forceRemove = false;
|
|
48
|
-
const watermarkDom = new MutationObserver(domChangeCallback);
|
|
49
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
50
|
-
if (!forceRemove) {
|
|
51
|
-
loadMark(globalSetting);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
function calculateWatermarkLayout(pageWidth, pageHeight) {
|
|
55
|
-
const availableWidth = pageWidth - globalSetting.x;
|
|
56
|
-
const availableHeight = pageHeight - globalSetting.y;
|
|
57
|
-
const x_space = globalSetting.x_space || 20;
|
|
58
|
-
const y_space = globalSetting.y_space || 20;
|
|
59
|
-
const cols = Math.ceil(availableWidth / (globalSetting.width + x_space));
|
|
60
|
-
const rows = Math.ceil(availableHeight / (globalSetting.height + y_space));
|
|
61
|
-
return {
|
|
62
|
-
cols,
|
|
63
|
-
rows,
|
|
64
|
-
x_space,
|
|
65
|
-
y_space
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function createWatermarkElement(x, y, index) {
|
|
69
|
-
const maskDiv = document.createElement("div");
|
|
70
|
-
maskDiv.textContent = globalSetting.text;
|
|
71
|
-
maskDiv.id = `${globalSetting.prefix}${index}`;
|
|
72
|
-
maskDiv.style.cssText = `
|
|
73
|
-
transform: rotate(-${globalSetting.angle}deg);
|
|
74
|
-
position: absolute;
|
|
75
|
-
left: ${x}px;
|
|
76
|
-
top: ${y}px;
|
|
77
|
-
overflow: hidden;
|
|
78
|
-
z-index: 9999999;
|
|
79
|
-
opacity: ${globalSetting.alpha};
|
|
80
|
-
font-size: ${globalSetting.fontsize};
|
|
81
|
-
font-family: ${globalSetting.font};
|
|
82
|
-
color: ${globalSetting.color};
|
|
83
|
-
text-align: center;
|
|
84
|
-
width: ${globalSetting.width}px;
|
|
85
|
-
height: ${globalSetting.height}px;
|
|
86
|
-
line-height: ${globalSetting.height}px;
|
|
87
|
-
display: flex;
|
|
88
|
-
align-items: center;
|
|
89
|
-
justify-content: center;
|
|
90
|
-
user-select: none;
|
|
91
|
-
visibility: visible;
|
|
92
|
-
`.replace(/\s+/g, " ").trim();
|
|
93
|
-
return maskDiv;
|
|
94
|
-
}
|
|
95
|
-
function loadMark(settings) {
|
|
96
|
-
removeMark();
|
|
97
|
-
Object.assign(globalSetting, settings);
|
|
98
|
-
if (globalSetting.width === 0 && globalSetting.height === 0 || globalSetting.width === 0 || globalSetting.height === 0) {
|
|
99
|
-
const textDimensions = calculateTextDimensions(globalSetting.text, globalSetting.font, globalSetting.fontsize);
|
|
100
|
-
const padding = 10;
|
|
101
|
-
if (globalSetting.width === 0) {
|
|
102
|
-
globalSetting.width = textDimensions.width + padding;
|
|
103
|
-
}
|
|
104
|
-
if (globalSetting.height === 0) {
|
|
105
|
-
globalSetting.height = textDimensions.height + padding;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
const parentElement = globalSetting.parent_node || document.body;
|
|
109
|
-
const pageWidth = Math.max(parentElement.scrollWidth, parentElement.clientWidth);
|
|
110
|
-
const pageHeight = Math.max(parentElement.scrollHeight, parentElement.clientHeight);
|
|
111
|
-
const watermarkContainer = document.createElement("div");
|
|
112
|
-
watermarkContainer.id = globalSetting.id;
|
|
113
|
-
if (parentElement.closest("body") && getComputedStyle(parentElement).position === "static") {
|
|
114
|
-
parentElement.style.position = "relative";
|
|
115
|
-
}
|
|
116
|
-
watermarkContainer.style.cssText = `
|
|
117
|
-
pointer-events: none;
|
|
118
|
-
display: block;
|
|
119
|
-
position: absolute;
|
|
120
|
-
top: 0;
|
|
121
|
-
left: 0;
|
|
122
|
-
width: 100%;
|
|
123
|
-
height: 100%;
|
|
124
|
-
z-index: 9999999;
|
|
125
|
-
overflow: hidden;
|
|
126
|
-
`.replace(/\s+/g, " ").trim();
|
|
127
|
-
const shadowRoot = watermarkContainer.attachShadow ? watermarkContainer.attachShadow({
|
|
128
|
-
mode: "open"
|
|
129
|
-
}) : watermarkContainer;
|
|
130
|
-
parentElement.appendChild(watermarkContainer);
|
|
131
|
-
const {
|
|
132
|
-
cols,
|
|
133
|
-
rows,
|
|
134
|
-
x_space,
|
|
135
|
-
y_space
|
|
136
|
-
} = calculateWatermarkLayout(pageWidth, pageHeight);
|
|
137
|
-
globalSetting.cols = cols;
|
|
138
|
-
globalSetting.rows = rows;
|
|
139
|
-
globalSetting.x_space = x_space;
|
|
140
|
-
globalSetting.y_space = y_space;
|
|
141
|
-
const fragment = document.createDocumentFragment();
|
|
142
|
-
for (let i = 0; i < rows; i++) {
|
|
143
|
-
const y = globalSetting.y + (globalSetting.height + y_space) * i;
|
|
144
|
-
for (let j = 0; j < cols; j++) {
|
|
145
|
-
const x = globalSetting.x + (globalSetting.width + x_space) * j;
|
|
146
|
-
fragment.appendChild(createWatermarkElement(x, y, i * cols + j));
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
shadowRoot.appendChild(fragment);
|
|
150
|
-
if (globalSetting.monitor) {
|
|
151
|
-
resizeObserver.observe(parentElement);
|
|
152
|
-
const config = {
|
|
153
|
-
attributes: true,
|
|
154
|
-
// 监听属性变化
|
|
155
|
-
childList: true,
|
|
156
|
-
// 监听子元素变化
|
|
157
|
-
subtree: true,
|
|
158
|
-
// 监听子树变化
|
|
159
|
-
characterData: true
|
|
160
|
-
// 监听文本内容变化
|
|
161
|
-
};
|
|
162
|
-
watermarkDom.observe(watermarkContainer, config);
|
|
163
|
-
if (shadowRoot !== watermarkContainer) {
|
|
164
|
-
watermarkDom.observe(shadowRoot, config);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
function removeMark() {
|
|
169
|
-
const watermarkElement = document.getElementById(globalSetting.id);
|
|
170
|
-
watermarkDom.disconnect();
|
|
171
|
-
if (watermarkElement) {
|
|
172
|
-
watermarkElement.parentNode?.removeChild(watermarkElement);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
function domChangeCallback(records) {
|
|
176
|
-
if (forceRemove) {
|
|
177
|
-
forceRemove = false;
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
const watermarkElement = document.getElementById(globalSetting.id);
|
|
181
|
-
if (!watermarkElement) {
|
|
182
|
-
loadMark(globalSetting);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
const hasChanges = records.some(record => {
|
|
186
|
-
if (record.type === "childList") {
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
|
-
if (record.type === "attributes") {
|
|
190
|
-
return true;
|
|
191
|
-
}
|
|
192
|
-
if (record.type === "characterData") {
|
|
193
|
-
return true;
|
|
194
|
-
}
|
|
195
|
-
return false;
|
|
196
|
-
});
|
|
197
|
-
if (hasChanges) {
|
|
198
|
-
loadMark(globalSetting);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return {
|
|
202
|
-
addMark: loadMark,
|
|
203
|
-
removeMark: () => {
|
|
204
|
-
forceRemove = true;
|
|
205
|
-
removeMark();
|
|
206
|
-
}
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
exports.watermark = watermark;
|
|
211
|
-
//# sourceMappingURL=watermark.js.map
|
package/lib/src/watermark.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watermark.js","sources":["../../../../packages/utils/src/watermark.ts"],"sourcesContent":["interface SettingsType {\n /** 水印总体的id */\n id?: string\n /** 小水印的id前缀 */\n prefix?: string\n /** 水印文案 */\n text?: string\n /** 水印起始位置x轴坐标 */\n x?: number\n /** 水印起始位置Y轴坐标 */\n y?: number\n /** 水印行数 */\n rows?: number\n /** 水印列数 */\n cols?: number\n /** 水印x轴间隔 */\n x_space?: number\n /** 水印y轴间隔 */\n y_space?: number\n /** 水印字体 */\n font?: string\n /** 水印字体颜色 */\n color?: string\n /** 水印字体大小 */\n fontsize?: string\n /** 水印透明度,要求设置在大于等于0.005 */\n alpha?: number\n /** 水印宽度 */\n width?: number\n /** 水印长度 */\n height?: number\n /** 水印倾斜度数 */\n angle?: number\n /** 水印的总体宽度(默认值:body的scrollWidth和clientWidth的较大值) */\n parent_width?: number\n /** 水印的总体高度(默认值:body的scrollHeight和clientHeight的较大值) */\n parent_height?: number\n /** 水印插件挂载的父元素element,不输入则默认挂在body */\n parent_node?: HTMLElement | null\n /** 是否监控,true: 不可删除水印; false: 可删水印 */\n monitor?: boolean\n}\n\n// 默认配置\nconst initialSettings: Required<SettingsType> = {\n id: 'wm_div_id',\n prefix: 'mask_div_id',\n text: '测试水印',\n x: 0,\n y: 0,\n rows: 0,\n cols: 0,\n width: 0,\n height: 0,\n x_space: 100,\n y_space: 40,\n font: '微软雅黑',\n color: 'black',\n fontsize: '18px',\n alpha: 0.15,\n angle: 15,\n parent_width: 0,\n parent_height: 0,\n parent_node: null,\n monitor: true,\n}\n\nfunction calculateTextDimensions(text: string, font: string, fontSize: string): { width: number, height: number } {\n const canvas = document.createElement('canvas')\n const context = canvas.getContext('2d')\n if (!context) {\n return { width: 100, height: 100 }\n }\n\n context.font = `${fontSize} ${font}`\n const metrics = context.measureText(text.trim())\n const fontSizeNum = Number.parseFloat(fontSize)\n\n // 移除 DPI 缩放,直接使用原始值\n const height = (metrics.actualBoundingBoxAscent !== undefined && metrics.actualBoundingBoxDescent !== undefined)\n ? (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent)\n : fontSizeNum\n\n return {\n width: Math.ceil(metrics.width),\n height: Math.ceil(height),\n }\n}\n\nexport function watermark() {\n const globalSetting: Required<SettingsType> = { ...initialSettings }\n let forceRemove = false\n const watermarkDom = new MutationObserver(domChangeCallback)\n const resizeObserver = new ResizeObserver(() => {\n if (!forceRemove) {\n loadMark(globalSetting)\n }\n })\n\n // 计算水印布局\n function calculateWatermarkLayout(pageWidth: number, pageHeight: number) {\n const availableWidth = pageWidth - globalSetting.x\n const availableHeight = pageHeight - globalSetting.y\n\n // 使用固定间距\n const x_space = globalSetting.x_space || 20 // 如果未设置则使用默认值\n const y_space = globalSetting.y_space || 20 // 如果未设置则使用默认值\n\n // 计算能容纳的行数和列数\n const cols = Math.ceil(availableWidth / (globalSetting.width + x_space))\n const rows = Math.ceil(availableHeight / (globalSetting.height + y_space))\n\n return {\n cols,\n rows,\n x_space,\n y_space,\n }\n }\n\n // 创建水印元素\n function createWatermarkElement(x: number, y: number, index: number): HTMLElement {\n const maskDiv = document.createElement('div')\n maskDiv.textContent = globalSetting.text\n maskDiv.id = `${globalSetting.prefix}${index}`\n\n maskDiv.style.cssText = `\n transform: rotate(-${globalSetting.angle}deg);\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n overflow: hidden;\n z-index: 9999999;\n opacity: ${globalSetting.alpha};\n font-size: ${globalSetting.fontsize};\n font-family: ${globalSetting.font};\n color: ${globalSetting.color};\n text-align: center;\n width: ${globalSetting.width}px;\n height: ${globalSetting.height}px;\n line-height: ${globalSetting.height}px;\n display: flex;\n align-items: center;\n justify-content: center;\n user-select: none;\n visibility: visible;\n `.replace(/\\s+/g, ' ').trim()\n\n return maskDiv\n }\n\n // 加载水印\n function loadMark(settings: Partial<SettingsType>) {\n removeMark()\n Object.assign(globalSetting, settings)\n\n if ((globalSetting.width === 0 && globalSetting.height === 0) || globalSetting.width === 0 || globalSetting.height === 0) {\n // 计算文本尺寸\n const textDimensions = calculateTextDimensions(\n globalSetting.text,\n globalSetting.font,\n globalSetting.fontsize,\n )\n const padding = 10\n if (globalSetting.width === 0) {\n globalSetting.width = textDimensions.width + padding\n }\n if (globalSetting.height === 0) {\n globalSetting.height = textDimensions.height + padding\n }\n }\n\n const parentElement = globalSetting.parent_node || document.body\n const pageWidth = Math.max(parentElement.scrollWidth, parentElement.clientWidth)\n const pageHeight = Math.max(parentElement.scrollHeight, parentElement.clientHeight)\n\n const watermarkContainer = document.createElement('div')\n watermarkContainer.id = globalSetting.id\n\n // 处理父元素定位\n if (parentElement.closest('body') && getComputedStyle(parentElement).position === 'static') {\n parentElement.style.position = 'relative'\n }\n\n watermarkContainer.style.cssText = `\n pointer-events: none;\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 9999999;\n overflow: hidden;\n `.replace(/\\s+/g, ' ').trim()\n\n const shadowRoot = watermarkContainer.attachShadow ? watermarkContainer.attachShadow({ mode: 'open' }) : watermarkContainer\n\n parentElement.appendChild(watermarkContainer)\n\n const { cols, rows, x_space, y_space } = calculateWatermarkLayout(pageWidth, pageHeight)\n globalSetting.cols = cols\n globalSetting.rows = rows\n globalSetting.x_space = x_space\n globalSetting.y_space = y_space\n\n const fragment = document.createDocumentFragment()\n for (let i = 0; i < rows; i++) {\n const y = globalSetting.y + (globalSetting.height + y_space) * i\n for (let j = 0; j < cols; j++) {\n const x = globalSetting.x + (globalSetting.width + x_space) * j\n fragment.appendChild(createWatermarkElement(x, y, i * cols + j))\n }\n }\n shadowRoot.appendChild(fragment)\n\n if (globalSetting.monitor) {\n // 监听父元素大小变化\n resizeObserver.observe(parentElement)\n\n // 监听水印容器及其子元素\n const config: MutationObserverInit = {\n attributes: true, // 监听属性变化\n childList: true, // 监听子元素变化\n subtree: true, // 监听子树变化\n characterData: true, // 监听文本内容变化\n }\n\n // 监听水印容器\n watermarkDom.observe(watermarkContainer, config)\n\n // 如果使用了 Shadow DOM,还需要监听 shadowRoot 内的元素\n if (shadowRoot !== watermarkContainer) {\n watermarkDom.observe(shadowRoot, config)\n }\n }\n }\n\n // 移除水印\n function removeMark() {\n const watermarkElement = document.getElementById(globalSetting.id)\n watermarkDom.disconnect()\n if (watermarkElement) {\n watermarkElement.parentNode?.removeChild(watermarkElement)\n }\n }\n\n // 监听DOM变化\n function domChangeCallback(records: MutationRecord[]) {\n if (forceRemove) {\n forceRemove = false\n return\n }\n\n const watermarkElement = document.getElementById(globalSetting.id)\n if (!watermarkElement) {\n // 如果水印容器被删除,重新创建\n loadMark(globalSetting)\n return\n }\n\n // 检查是否有任何修改\n const hasChanges = records.some((record) => {\n // 检查元素是否被删除或添加\n if (record.type === 'childList') {\n return true\n }\n\n // 检查属性是否被修改\n if (record.type === 'attributes') {\n return true\n }\n\n // 检查文本内容是否被修改\n if (record.type === 'characterData') {\n return true\n }\n\n return false\n })\n\n if (hasChanges) {\n loadMark(globalSetting)\n }\n }\n\n return {\n addMark: loadMark,\n removeMark: () => {\n forceRemove = true\n // 删除这行,不重置全局配置\n // Object.assign(globalSetting, initialSettings)\n removeMark()\n },\n }\n}\n"],"names":["initialSettings","id","prefix","text","x","y","rows","cols","width","height","x_space","y_space","font","color","fontsize","alpha","angle","parent_width","parent_height","parent_node","monitor","calculateTextDimensions","fontSize","canvas","document","createElement","context","getContext","metrics","measureText","trim","fontSizeNum","Number","parseFloat","actualBoundingBoxAscent","actualBoundingBoxDescent","Math","ceil","watermark","globalSetting","forceRemove","watermarkDom","MutationObserver","domChangeCallback","resizeObserver","ResizeObserver","loadMark","calculateWatermarkLayout","pageWidth","pageHeight","availableWidth","availableHeight","createWatermarkElement","index","maskDiv","textContent","style","cssText","replace","settings","removeMark","Object","assign","textDimensions","padding","parentElement","body","max","scrollWidth","clientWidth","scrollHeight","clientHeight","watermarkContainer","closest","getComputedStyle","position","shadowRoot","attachShadow","mode","appendChild","fragment","createDocumentFragment","i","j","observe","config","attributes","childList","subtree","characterData","watermarkElement","getElementById","disconnect","parentNode","removeChild","records","hasChanges","some","record","type","addMark"],"mappings":"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"}
|