@shijiu/jsview-vue 2.1.200 → 2.1.339-test.0
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/bin/browser/BrowserApic.vue.mjs +124 -0
- package/bin/browser/BrowserApic2.vue.mjs +118 -0
- package/bin/browser/BrowserApicLib.mjs +424 -0
- package/bin/browser/BrowserAudio.vue.mjs +263 -0
- package/bin/browser/BrowserJsvLatex.vue.mjs +110 -0
- package/bin/browser/BrowserJsvPlayer.vue.mjs +573 -0
- package/bin/browser/BrowserPreload.vue.mjs +154 -0
- package/bin/browser/BrowserQrcode.vue.mjs +178 -0
- package/bin/browser/BrowserSpray.vue.mjs +66 -0
- package/bin/browser/BrowserTextureAnim.vue.mjs +324 -0
- package/bin/export-sfc.mjs +12 -0
- package/bin/jsview-common.mjs +39 -0
- package/bin/jsview-vue.mjs +21106 -0
- package/index.js +3 -4
- package/package.json +1 -2
- package/tools/config/rollup.config.mjs +52 -0
- package/tools/config/tsconfig.json +18 -0
- package/tools/config/vite.config.ts +60 -0
- package/tools/jsview-vue-build.mjs +125 -0
- package/utils/JsViewEngineWidget/{JsvFocusBlock.vue → JsvFocus/JsvFocusBlock.vue} +11 -11
- package/utils/JsViewEngineWidget/{JsvFocusHub.ts → JsvFocus/JsvFocusHub.ts} +9 -3
- package/utils/JsViewEngineWidget/{JsvFocusManager.js → JsvFocus/JsvFocusManager.js} +6 -5
- package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +33 -10
- package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +89 -57
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +118 -62
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +504 -60
- package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +11 -1
- package/utils/JsViewEngineWidget/MetroWidget/SlotComponent.vue +13 -0
- package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +1 -1
- package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -1
- package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +34 -1
- package/utils/JsViewEngineWidget/TemplateParser/TemplateItemAdder.ts +52 -11
- package/utils/JsViewEngineWidget/index.js +3 -3
- package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +9 -0
- package/utils/JsViewPlugin/JsvAudio/BrowserAudio/BrowserAudio.vue +11 -3
- package/utils/JsViewPlugin/JsvAudio/JsvAudio.vue +1 -0
- package/utils/JsViewPlugin/JsvAudio/JsvAudioBridgeProxy.js +8 -0
- package/utils/JsViewPlugin/JsvAudio/ScreenLockManager.js +16 -0
- package/utils/JsViewPlugin/JsvAudio/version.js +3 -3
- package/utils/JsViewPlugin/JsvAudio/version.mjs +3 -3
- package/utils/JsViewPlugin/JsvLatex/index.js +1 -1
- package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +1 -1
- package/utils/JsViewPlugin/JsvPlayer/index-0.9.js +3 -3
- package/utils/JsViewPlugin/JsvPlayer/index.js +2 -2
- package/utils/JsViewVueTools/DebugTool.js +2 -2
- package/utils/JsViewVueTools/DefaultKeyMap.js +1 -1
- package/utils/JsViewVueTools/JsvDynamicCssStyle.js +1 -1
- package/utils/JsViewVueTools/JsvDynamicKeyFrames.js +2 -2
- package/utils/JsViewVueTools/JsvImpactTracer.js +7 -7
- package/utils/JsViewVueTools/JsvPreDownloader.ts +1 -1
- package/utils/JsViewVueTools/JsvRefTaker.js +2 -1
- package/utils/JsViewVueTools/JsvRuntimeBridge.js +29 -29
- package/utils/JsViewVueTools/JsvStyleClass.js +3 -3
- package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +1 -1
- package/utils/JsViewVueTools/JsvTextTools.js +4 -4
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +29 -1
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +6 -5
- package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +60 -2
- package/utils/JsViewVueTools/NinePatchHelper.js +1 -1
- package/utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js +1 -1
- package/utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js +1 -1
- package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvApic}/BrowserApic.vue +20 -23
- package/utils/JsViewVueWidget/JsvApic/{JsvApic.vue → JsvApic/JsvApic.vue} +3 -14
- package/utils/JsViewVueWidget/JsvApic/{index.js → JsvApic/index.js} +2 -4
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue +116 -0
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue +137 -0
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/index.js +17 -0
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/BrowserApicLib.js +4 -0
- package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/NormalLoopTool.js +16 -18
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/PartLoopTool.js +90 -0
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/SingleLoopTool.js +17 -0
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.js +111 -0
- package/utils/JsViewVueWidget/JsvApic/JsvCommonLoopToolBase.js +48 -0
- package/utils/JsViewVueWidget/JsvConnectLine/ArcLineManager.js +71 -0
- package/utils/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue +354 -0
- package/utils/JsViewVueWidget/JsvConnectLine/index.js +2 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +37 -18
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +7 -3
- package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +28 -2
- package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +12 -5
- package/utils/JsViewVueWidget/JsvFreeMoveActor/NexusNode.ts +21 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +47 -59
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +129 -12
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +45 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +10 -2
- package/utils/JsViewVueWidget/JsvGrid.vue +1 -1
- package/utils/JsViewVueWidget/JsvHole.js +1 -1
- package/utils/JsViewVueWidget/JsvInput/JsvInput.vue +1 -1
- package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +2 -2
- package/utils/JsViewVueWidget/JsvLine/LineManager.js +6 -4
- package/utils/JsViewVueWidget/JsvMarquee.vue +7 -4
- package/utils/JsViewVueWidget/JsvPieChart.vue +1 -1
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +1 -1
- package/utils/JsViewVueWidget/JsvPreload/index.js +1 -1
- package/utils/JsViewVueWidget/JsvProgressBar.vue +172 -0
- package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +0 -1
- package/utils/JsViewVueWidget/JsvQrcode/index.js +1 -1
- package/utils/JsViewVueWidget/JsvRadarChart.vue +1 -1
- package/utils/JsViewVueWidget/JsvScaleTextBox.vue +0 -2
- package/utils/JsViewVueWidget/JsvSector.vue +1 -1
- package/utils/JsViewVueWidget/JsvSoundPool.js +1 -1
- package/utils/JsViewVueWidget/JsvSpray/index.js +1 -1
- package/utils/JsViewVueWidget/JsvSpriteAnim/FrameBuidler.ts +235 -0
- package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +433 -401
- package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteLoader.vue +120 -0
- package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -2
- package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +5 -5
- package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +425 -422
- package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +1 -1
- package/utils/JsViewVueWidget/index.js +7 -3
- package/utils/index.js +4 -0
- package/utils/JsViewVueWidget/JsvApic/BrowserApic/LoopToolBase.js +0 -25
- package/utils/JsViewVueWidget/JsvApic/BrowserApic/PartLoopTool.js +0 -119
- package/utils/JsViewVueWidget/JsvApic/BrowserApic/Viewer.js +0 -106
- /package/utils/JsViewPlugin/JsvLatex/{JsvLatexBrowser.vue → BrowserJsvLatex.vue} +0 -0
- /package/utils/JsViewPlugin/JsvPlayer/{JsvPlayerBrowser-0.9.vue → BrowserJsvPlayer-0.9.vue} +0 -0
- /package/utils/JsViewPlugin/JsvPlayer/{JsvPlayerBrowser.vue → BrowserJsvPlayer.vue} +0 -0
- /package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/ApicDataBase.js +0 -0
- /package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/GifData.js +0 -0
- /package/utils/JsViewVueWidget/JsvApic/{BrowserApic → JsvBrowserApicLib}/WebpData.js +0 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { reactive, watchEffect, onBeforeUnmount, openBlock, createElementBlock, createCommentVNode } from 'vue';
|
|
2
|
+
|
|
3
|
+
//!
|
|
4
|
+
//! utils/JsViewVueWidget/JsvPreload/BrowserPreload.vue;
|
|
5
|
+
//!
|
|
6
|
+
/*!
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
*/
|
|
12
|
+
const _sfc_main = {
|
|
13
|
+
__name: "BrowserPreload",
|
|
14
|
+
props: {
|
|
15
|
+
preloadList: Array,
|
|
16
|
+
downloadList: Array,
|
|
17
|
+
onPreloadDone: Function,
|
|
18
|
+
// 预加载完成回调
|
|
19
|
+
onDownloadDone: Function,
|
|
20
|
+
// 预下载完成回调
|
|
21
|
+
onPreloading: Function
|
|
22
|
+
},
|
|
23
|
+
setup(__props) {
|
|
24
|
+
const props = __props;
|
|
25
|
+
const loadViewList = reactive({
|
|
26
|
+
preloadViewList: [],
|
|
27
|
+
downloadViewList: []
|
|
28
|
+
});
|
|
29
|
+
let preloadIsNullNum = 0;
|
|
30
|
+
let downloadIsNullNum = 0;
|
|
31
|
+
let preloadResultMap = {};
|
|
32
|
+
let downloadResultMap = {};
|
|
33
|
+
let downloadUrlList = [];
|
|
34
|
+
let unmountStatus = { unmount: false };
|
|
35
|
+
let preloadStateList = null;
|
|
36
|
+
let downloadStateList = null;
|
|
37
|
+
const getPreloadList = () => {
|
|
38
|
+
preloadStateList = new Array(props.preloadList.length).fill(false);
|
|
39
|
+
let preloadListData = props.preloadList;
|
|
40
|
+
for (let i = 0; i < preloadListData.length; i++) {
|
|
41
|
+
if (!preloadListData[i] || !preloadListData[i].url) {
|
|
42
|
+
preloadListData.splice(i, 1);
|
|
43
|
+
preloadIsNullNum++;
|
|
44
|
+
i--;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
loadViewList.preloadViewList = preloadListData.map((item, index) => {
|
|
48
|
+
if (!item || !item.url) {
|
|
49
|
+
preloadStateList[index] = true;
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const image = new Image();
|
|
53
|
+
const unmount_track = unmountStatus;
|
|
54
|
+
image.onload = () => {
|
|
55
|
+
if (unmount_track.unmount) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
preloadResultMap[item.url] = {
|
|
59
|
+
width: image.width,
|
|
60
|
+
height: image.height
|
|
61
|
+
};
|
|
62
|
+
preloadStateList[index] = true;
|
|
63
|
+
let loadedNum = 0;
|
|
64
|
+
preloadStateList.map((item2) => {
|
|
65
|
+
loadedNum += item2 ? 1 : 0;
|
|
66
|
+
});
|
|
67
|
+
props.onPreloading?.(loadedNum / preloadStateList.length);
|
|
68
|
+
if (props.onPreloadDone && loadedNum + preloadIsNullNum == preloadStateList.length) {
|
|
69
|
+
props.onPreloadDone?.(preloadResultMap);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
image.src = item.url;
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const getDownloadList = () => {
|
|
76
|
+
downloadStateList = new Array(props.downloadList.length).fill(false);
|
|
77
|
+
downloadUrlList = new Array(downloadStateList.length);
|
|
78
|
+
let downloadListData = props.downloadList;
|
|
79
|
+
for (let i = 0; i < downloadListData.length; i++) {
|
|
80
|
+
if (!downloadListData[i] || !downloadListData[i].url) {
|
|
81
|
+
downloadListData.splice(i, 1);
|
|
82
|
+
downloadUrlList[i] = "invalid";
|
|
83
|
+
downloadIsNullNum++;
|
|
84
|
+
i--;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
loadViewList.downloadViewList = downloadListData.map((item, index) => {
|
|
88
|
+
if (!item || !item.url) {
|
|
89
|
+
downloadStateList[index] = true;
|
|
90
|
+
downloadUrlList[index] = "invalid";
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const image = new Image();
|
|
94
|
+
const unmount_track = unmountStatus;
|
|
95
|
+
image.onload = () => {
|
|
96
|
+
if (unmount_track.unmount) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
downloadStateList[index] = true;
|
|
100
|
+
downloadUrlList[index] = item.url;
|
|
101
|
+
downloadResultMap[item.url] = {
|
|
102
|
+
width: image.width,
|
|
103
|
+
height: image.height
|
|
104
|
+
};
|
|
105
|
+
console.log(`pre download succeed ${item.url}`);
|
|
106
|
+
if (props.onDownloadDone) {
|
|
107
|
+
let downloadNum = 0;
|
|
108
|
+
downloadStateList.map((item2) => {
|
|
109
|
+
downloadNum += item2 ? 1 : 0;
|
|
110
|
+
});
|
|
111
|
+
if (downloadNum + downloadIsNullNum == downloadStateList.length) {
|
|
112
|
+
props.onDownloadDone?.(
|
|
113
|
+
downloadUrlList,
|
|
114
|
+
downloadResultMap
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
image.src = item.url;
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
if (props.preloadList) {
|
|
123
|
+
getPreloadList();
|
|
124
|
+
}
|
|
125
|
+
if (props.downloadList) {
|
|
126
|
+
getDownloadList();
|
|
127
|
+
}
|
|
128
|
+
watchEffect(() => {
|
|
129
|
+
if (props.preloadList) {
|
|
130
|
+
console.log("JsvPreload: update preloadList");
|
|
131
|
+
preloadIsNullNum = 0;
|
|
132
|
+
preloadResultMap = {};
|
|
133
|
+
getPreloadList();
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
watchEffect(() => {
|
|
137
|
+
if (props.downloadList) {
|
|
138
|
+
console.log("JsvPreload: update downloadList");
|
|
139
|
+
downloadIsNullNum = 0;
|
|
140
|
+
downloadResultMap = {};
|
|
141
|
+
downloadUrlList = [];
|
|
142
|
+
getDownloadList();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
onBeforeUnmount(() => {
|
|
146
|
+
unmountStatus.unmount = true;
|
|
147
|
+
});
|
|
148
|
+
return (_ctx, _cache) => {
|
|
149
|
+
return !__props.preloadList ? (openBlock(), createElementBlock("div", { key: 0 })) : createCommentVNode("", true);
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
export { _sfc_main as default };
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { ref, onMounted, openBlock, createElementVNode, unref, normalizeStyle, createElementBlock } from 'vue';
|
|
2
|
+
import QRCode from 'qr.js';
|
|
3
|
+
|
|
4
|
+
//!
|
|
5
|
+
//! utils/JsViewVueWidget/JsvQrcode/BrowserQrcode.vue;
|
|
6
|
+
//!
|
|
7
|
+
/*!
|
|
8
|
+
|
|
9
|
+
*/
|
|
10
|
+
const _sfc_main = {
|
|
11
|
+
__name: "BrowserQrcode",
|
|
12
|
+
props: {
|
|
13
|
+
value: String,
|
|
14
|
+
size: Number,
|
|
15
|
+
fgColor: {
|
|
16
|
+
type: String,
|
|
17
|
+
default: "#000000"
|
|
18
|
+
},
|
|
19
|
+
bgColor: {
|
|
20
|
+
type: String,
|
|
21
|
+
default: "#ffffff"
|
|
22
|
+
},
|
|
23
|
+
level: {
|
|
24
|
+
type: String,
|
|
25
|
+
// ,容错级别,分别是L(7%)、M(15%)、Q(25%)、H(30%),
|
|
26
|
+
default: "L"
|
|
27
|
+
},
|
|
28
|
+
imageSettings: Object
|
|
29
|
+
},
|
|
30
|
+
setup(__props) {
|
|
31
|
+
const props = __props;
|
|
32
|
+
const convertStr = (str) => {
|
|
33
|
+
let out = "";
|
|
34
|
+
for (let i = 0; i < str.length; i++) {
|
|
35
|
+
let charcode = str.charCodeAt(i);
|
|
36
|
+
if (charcode < 128) {
|
|
37
|
+
out += String.fromCharCode(charcode);
|
|
38
|
+
} else if (charcode < 2048) {
|
|
39
|
+
out += String.fromCharCode(192 | charcode >> 6);
|
|
40
|
+
out += String.fromCharCode(128 | charcode & 63);
|
|
41
|
+
} else if (charcode < 55296 || charcode >= 57344) {
|
|
42
|
+
out += String.fromCharCode(224 | charcode >> 12);
|
|
43
|
+
out += String.fromCharCode(128 | charcode >> 6 & 63);
|
|
44
|
+
out += String.fromCharCode(128 | charcode & 63);
|
|
45
|
+
} else {
|
|
46
|
+
i++;
|
|
47
|
+
charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);
|
|
48
|
+
out += String.fromCharCode(240 | charcode >> 18);
|
|
49
|
+
out += String.fromCharCode(128 | charcode >> 12 & 63);
|
|
50
|
+
out += String.fromCharCode(128 | charcode >> 6 & 63);
|
|
51
|
+
out += String.fromCharCode(128 | charcode & 63);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
};
|
|
56
|
+
const generatePath = (modules, margin = 0) => {
|
|
57
|
+
const ops = [];
|
|
58
|
+
modules.forEach((row, y) => {
|
|
59
|
+
let start = null;
|
|
60
|
+
row.forEach((cell, x) => {
|
|
61
|
+
if (!cell && start !== null) {
|
|
62
|
+
ops.push(
|
|
63
|
+
`M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`
|
|
64
|
+
);
|
|
65
|
+
start = null;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (x === row.length - 1) {
|
|
69
|
+
if (!cell) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (start === null) {
|
|
73
|
+
ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);
|
|
74
|
+
} else {
|
|
75
|
+
ops.push(
|
|
76
|
+
`M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (cell && start === null) {
|
|
82
|
+
start = x;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
return ops.join("");
|
|
87
|
+
};
|
|
88
|
+
const getImageSettings = (props2) => {
|
|
89
|
+
const imageSettings = props2.imageSettings;
|
|
90
|
+
const size = props2.size;
|
|
91
|
+
if (!imageSettings) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const w = imageSettings.width;
|
|
95
|
+
const h = imageSettings.height;
|
|
96
|
+
const x = !imageSettings.x ? size / 2 - w / 2 : imageSettings.x;
|
|
97
|
+
const y = !imageSettings.y ? size / 2 - h / 2 : imageSettings.y;
|
|
98
|
+
return { x, y, h, w };
|
|
99
|
+
};
|
|
100
|
+
const renderQrcode = () => {
|
|
101
|
+
const qrcode = QRCode(convertStr(props.value), {
|
|
102
|
+
errorCorrectLevel: QRCode.ErrorCorrectLevel[props.level]
|
|
103
|
+
});
|
|
104
|
+
const cells = qrcode.modules;
|
|
105
|
+
if (cells === null) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const margin = 2;
|
|
109
|
+
const numCells = cells.length + margin * 2;
|
|
110
|
+
const propsData = {
|
|
111
|
+
value: props.value,
|
|
112
|
+
size: props.size,
|
|
113
|
+
level: props.level,
|
|
114
|
+
bgColor: props.bgColor,
|
|
115
|
+
fgColor: props.fgColor,
|
|
116
|
+
imageSettings: props.imageSettings
|
|
117
|
+
};
|
|
118
|
+
const calculatedImageSettings = getImageSettings(propsData);
|
|
119
|
+
if (props.imageSettings) {
|
|
120
|
+
imageStyle = {
|
|
121
|
+
backgroundImage: `url(${props.imageSettings.src})`,
|
|
122
|
+
height: calculatedImageSettings.h,
|
|
123
|
+
width: calculatedImageSettings.w,
|
|
124
|
+
left: calculatedImageSettings.x + margin,
|
|
125
|
+
top: calculatedImageSettings.y + margin
|
|
126
|
+
};
|
|
127
|
+
} else {
|
|
128
|
+
imageStyle = {};
|
|
129
|
+
}
|
|
130
|
+
const fgPath = generatePath(cells, margin);
|
|
131
|
+
return { numCells, fgPath };
|
|
132
|
+
};
|
|
133
|
+
const svgRoot = ref(null);
|
|
134
|
+
let imageStyle = null;
|
|
135
|
+
const qrcodeRes = renderQrcode();
|
|
136
|
+
onMounted(() => {
|
|
137
|
+
svgRoot.value.jsvGetProxyView().RegisterOnProxyReady(() => {
|
|
138
|
+
const root = svgRoot.value.jsvGetProxyView().HtmlGetElement();
|
|
139
|
+
const doc = window.originDocument;
|
|
140
|
+
const svg = doc.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
141
|
+
svg.setAttribute("type", "qrcode");
|
|
142
|
+
svg.setAttribute("shapeRendering", "crispEdges");
|
|
143
|
+
svg.setAttribute("height", props.size);
|
|
144
|
+
svg.setAttribute("width", props.size);
|
|
145
|
+
svg.setAttribute(
|
|
146
|
+
"viewBox",
|
|
147
|
+
"0 0 " + qrcodeRes.numCells + " " + qrcodeRes.numCells
|
|
148
|
+
);
|
|
149
|
+
const path1 = doc.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
150
|
+
path1.setAttribute("fill", props.bgColor);
|
|
151
|
+
path1.setAttribute(
|
|
152
|
+
"d",
|
|
153
|
+
"M0,0 h" + qrcodeRes.numCells + "v" + qrcodeRes.numCells + "H0z"
|
|
154
|
+
);
|
|
155
|
+
const path2 = doc.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
156
|
+
path2.setAttribute("fill", props.fgColor);
|
|
157
|
+
path2.setAttribute("d", qrcodeRes.fgPath);
|
|
158
|
+
svg.appendChild(path1);
|
|
159
|
+
svg.appendChild(path2);
|
|
160
|
+
root.appendChild(svg);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
return (_ctx, _cache) => {
|
|
164
|
+
return openBlock(), createElementBlock("div", null, [
|
|
165
|
+
createElementVNode("div", {
|
|
166
|
+
ref_key: "svgRoot",
|
|
167
|
+
ref: svgRoot,
|
|
168
|
+
style: { width: 100, height: 100 }
|
|
169
|
+
}, null, 512),
|
|
170
|
+
createElementVNode("div", {
|
|
171
|
+
style: normalizeStyle(unref(imageStyle))
|
|
172
|
+
}, null, 4)
|
|
173
|
+
]);
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export { _sfc_main as default };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Forge } from '@shijiu/jsview/dom/jsv-forge-define';
|
|
2
|
+
import { openBlock, normalizeStyle, createElementBlock } from 'vue';
|
|
3
|
+
import { _ as _export_sfc } from '../export-sfc.mjs';
|
|
4
|
+
|
|
5
|
+
//!
|
|
6
|
+
//! utils/JsViewVueWidget/JsvSpray/BrowserSpray.vue;
|
|
7
|
+
//!
|
|
8
|
+
/*! <!--
|
|
9
|
+
* @Author: ChenChanghua
|
|
10
|
+
* @Date: 2021-10-13 11:02:42
|
|
11
|
+
* @LastEditors: ChenChanghua
|
|
12
|
+
* @LastEditTime: 2021-10-13 15:10:01
|
|
13
|
+
* @Description: file content
|
|
14
|
+
-->
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
*/
|
|
18
|
+
const _sfc_main = {
|
|
19
|
+
props: {
|
|
20
|
+
pointRes: {
|
|
21
|
+
type: String,
|
|
22
|
+
required: true
|
|
23
|
+
},
|
|
24
|
+
sprayStyle: {
|
|
25
|
+
type: Object,
|
|
26
|
+
required: true
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
data() {
|
|
30
|
+
return {
|
|
31
|
+
viewId: -1
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
computed: {
|
|
35
|
+
viewWidth() {
|
|
36
|
+
return this.sprayStyle.deltaWidth === 0 ? 1 : this.sprayStyle.deltaWidth * 2;
|
|
37
|
+
},
|
|
38
|
+
viewHeight() {
|
|
39
|
+
return this.sprayStyle.deltaHeight === 0 ? 1 : this.sprayStyle.deltaHeight * 2;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
mounted() {
|
|
43
|
+
const viewSize = {
|
|
44
|
+
width: this.viewWidth,
|
|
45
|
+
height: this.viewHeight
|
|
46
|
+
};
|
|
47
|
+
this.viewId = Forge.sParticleManager.addParticle(
|
|
48
|
+
this.sprayStyle,
|
|
49
|
+
this.pointRes,
|
|
50
|
+
viewSize,
|
|
51
|
+
this.$refs.element.jsvGetProxyView()
|
|
52
|
+
);
|
|
53
|
+
},
|
|
54
|
+
beforeUnmount() {
|
|
55
|
+
Forge.sParticleManager.recycleView(this.viewId);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
59
|
+
return openBlock(), createElementBlock("div", {
|
|
60
|
+
ref: "element",
|
|
61
|
+
style: normalizeStyle({ width: $options.viewWidth, height: $options.viewHeight })
|
|
62
|
+
}, null, 4);
|
|
63
|
+
}
|
|
64
|
+
const BrowserSpray = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
|
|
65
|
+
|
|
66
|
+
export { BrowserSpray as default };
|