km-card-layout-component-miniprogram 0.1.18 → 0.1.19

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.
Files changed (35) hide show
  1. package/miniprogram_dist/components/card-layout/elements/custom-element/index.wxml +6 -4
  2. package/miniprogram_dist/components/card-layout/elements/icon-element/index.wxml +6 -4
  3. package/miniprogram_dist/components/card-layout/elements/image-element/index.wxml +10 -8
  4. package/miniprogram_dist/components/card-layout/elements/text-element/index.wxml +2 -0
  5. package/miniprogram_dist/components/card-layout/elements/text-element/index.wxss +0 -4
  6. package/miniprogram_dist/components/card-layout/index.js +83 -15
  7. package/miniprogram_dist/components/card-layout/index.json +1 -7
  8. package/miniprogram_dist/components/card-layout/index.wxml +21 -4
  9. package/miniprogram_dist/components/card-layout/index.wxss +83 -0
  10. package/miniprogram_dist/vendor/wxml2canvas-2d/canvas.js +1116 -0
  11. package/miniprogram_dist/vendor/wxml2canvas-2d/constants.js +42 -0
  12. package/miniprogram_dist/vendor/wxml2canvas-2d/element.js +420 -0
  13. package/miniprogram_dist/vendor/wxml2canvas-2d/gradient.js +634 -0
  14. package/miniprogram_dist/vendor/wxml2canvas-2d/index.js +169 -0
  15. package/miniprogram_dist/vendor/wxml2canvas-2d/index.json +4 -0
  16. package/miniprogram_dist/vendor/wxml2canvas-2d/index.wxml +7 -0
  17. package/miniprogram_dist/vendor/wxml2canvas-2d/index.wxss +5 -0
  18. package/package.json +1 -1
  19. package/src/components/card-layout/elements/custom-element/index.wxml +6 -4
  20. package/src/components/card-layout/elements/icon-element/index.wxml +6 -4
  21. package/src/components/card-layout/elements/image-element/index.wxml +10 -8
  22. package/src/components/card-layout/elements/text-element/index.wxml +2 -0
  23. package/src/components/card-layout/elements/text-element/index.wxss +0 -4
  24. package/src/components/card-layout/index.json +1 -7
  25. package/src/components/card-layout/index.ts +108 -16
  26. package/src/components/card-layout/index.wxml +21 -4
  27. package/src/components/card-layout/index.wxss +83 -0
  28. package/src/vendor/wxml2canvas-2d/canvas.js +1116 -0
  29. package/src/vendor/wxml2canvas-2d/constants.js +42 -0
  30. package/src/vendor/wxml2canvas-2d/element.js +420 -0
  31. package/src/vendor/wxml2canvas-2d/gradient.js +634 -0
  32. package/src/vendor/wxml2canvas-2d/index.js +169 -0
  33. package/src/vendor/wxml2canvas-2d/index.json +4 -0
  34. package/src/vendor/wxml2canvas-2d/index.wxml +7 -0
  35. package/src/vendor/wxml2canvas-2d/index.wxss +5 -0
@@ -0,0 +1,169 @@
1
+ import Element from './element';
2
+ import Canvas from './canvas';
3
+
4
+ /**
5
+ * 绘制 wxml 元素
6
+ * @param {Canvas} canvas 画布对象
7
+ * @param {Element} element wxml 元素
8
+ * @param {PageObject} page 页面实例对象
9
+ * @param {ComponentObject} component 组件实例对象
10
+ */
11
+ const drawElement = async (canvas, element, page, component) => {
12
+ // 设置画布的当前 wxml 元素上下文(必要)
13
+ canvas.setElement(element);
14
+
15
+ canvas.setTransform();
16
+ canvas.drawBoxShadow();
17
+ canvas.drawBackgroundColor();
18
+ await canvas.drawBackgroundImage();
19
+ if ('src' in element) {
20
+ if ('objectFit' in element) {
21
+ await canvas.drawVideo();
22
+ } else {
23
+ await canvas.drawImage();
24
+ }
25
+ } else if ('text' in element.dataset || 'icon' in element.dataset) {
26
+ canvas.drawText();
27
+ } else if ('canvasId' in element) {
28
+ await canvas.drawCanvas(component ?? page);
29
+ }
30
+ canvas.drawBorder();
31
+ canvas.resetTransform();
32
+ canvas.restoreContext();
33
+ };
34
+
35
+ Component({
36
+ externalClasses: ['box-class'],
37
+ properties: {
38
+ // 根节点(容器)样式类名称
39
+ containerClass: {
40
+ type: String,
41
+ value: 'wxml2canvas-container',
42
+ },
43
+ // 内部节点样式类名称
44
+ itemClass: {
45
+ type: String,
46
+ value: 'wxml2canvas-item',
47
+ },
48
+ // 画布缩放比例
49
+ scale: {
50
+ type: Number,
51
+ value: 1,
52
+ },
53
+ // 是否使用离屏画布
54
+ offscreen: Boolean,
55
+ },
56
+ data: {
57
+ // 画布宽度
58
+ canvasWidth: 300,
59
+ // 画布高度
60
+ canvasHeight: 150,
61
+ },
62
+ methods: {
63
+ /**
64
+ * setData 同步版
65
+ * @param {Object} data
66
+ * @returns {Promise<void>}
67
+ */
68
+ setDataSync(data) {
69
+ return new Promise((resolve) => {
70
+ this.setData(data, resolve);
71
+ });
72
+ },
73
+ /**
74
+ * 绘制画布内容
75
+ * @param {PageObject} page 页面实例对象,默认当前页面实例
76
+ * @param {ComponentObject} component 组件实例对象
77
+ */
78
+ async draw(page, component) {
79
+ // 获取当前页面实例、组件实例
80
+ if (page && !page.route && !component) {
81
+ component = page;
82
+ } if (!page || !page.route) {
83
+ [page] = getCurrentPages().slice(-1);
84
+ }
85
+
86
+ const {
87
+ containerClass, itemClass, scale, offscreen,
88
+ } = this.data;
89
+ const fields = {
90
+ id: true,
91
+ size: true,
92
+ rect: true,
93
+ dataset: true,
94
+ properties: [
95
+ ...Element.COMMON_PROPERTIES,
96
+ ...Element.TEXT_PROPERTIES,
97
+ ...Element.IMAGE_PROPERTIES,
98
+ ...Element.VIDEO_PROPERTIES,
99
+ ...Element.CANVAS_PROPERTIES,
100
+ ...Element.RICHTEXT_PROPERTIES,
101
+ ],
102
+ computedStyle: [
103
+ ...Element.COMMON_COMPUTED_STYLE,
104
+ ...Element.TEXT_COMPUTED_STYLE,
105
+ ...Element.IMAGE_COMPUTED_STYLE,
106
+ ...Element.VIDEO_COMPUTED_STYLE,
107
+ ...Element.CANVAS_COMPUTED_STYLE,
108
+ ...Element.RICHTEXT_COMPUTED_STYLE,
109
+ ],
110
+ };
111
+ const [container] = await Element.getNodesRef(`.${containerClass}`, fields, page, component);
112
+ await this.setDataSync({
113
+ canvasWidth: container.width * scale,
114
+ canvasHeight: container.height * scale,
115
+ });
116
+ const nodes = await Element.getNodesRef(`.${containerClass} .${itemClass}`, fields, page, component);
117
+
118
+ const canvas = this.canvas = new Canvas(...(offscreen ? [this] : [this, '#wxml2canvas']));
119
+ await canvas.init(container, scale);
120
+
121
+ nodes.unshift(container);
122
+ await this.drawElements(nodes, fields, component ?? page);
123
+ },
124
+ /**
125
+ * 绘制元素节点合集
126
+ * @param {Array} elements 元素节点合集
127
+ * @param {Object} fields 元素节点相关信息
128
+ * @param {Object} parent 父节点实例
129
+ */
130
+ async drawElements(elements, fields, parent) {
131
+ const { itemClass } = this.data;
132
+ // 绘制内层各 wxml 元素
133
+ // eslint-disable-next-line no-restricted-syntax
134
+ for (const item of elements) {
135
+ const itemElement = new Element(item);
136
+ if (item.dataset.component) {
137
+ const child = parent.selectComponent(`#${item.id}`);
138
+ const childElements = await Element.getNodesRef(`.${itemClass}`, fields, child);
139
+ await this.drawElements(childElements, fields, child);
140
+ } else {
141
+ await drawElement(this.canvas, itemElement, parent);
142
+ }
143
+ }
144
+ },
145
+ /**
146
+ * 把画布内容导出生成图片
147
+ * @param {Boolean} original 是否使用实机表现作为导出图片的尺寸
148
+ * @returns {Promise<String>} 图片临时路径
149
+ */
150
+ async toTempFilePath(original = true) {
151
+ const tempFilePath = await this.canvas.toTempFilePath(original);
152
+ return tempFilePath;
153
+ },
154
+ /**
155
+ * 导出画布至 Data URI
156
+ * @returns {String} Data URI
157
+ */
158
+ toDataURL() {
159
+ return this.canvas.toDataURL();
160
+ },
161
+ /**
162
+ * 获取画布的像素数据
163
+ * @returns {ImageData} imageData
164
+ */
165
+ getImageData() {
166
+ return this.canvas.getImageData();
167
+ },
168
+ },
169
+ });
@@ -0,0 +1,4 @@
1
+ {
2
+ "component": true,
3
+ "usingComponents": {}
4
+ }
@@ -0,0 +1,7 @@
1
+ <canvas
2
+ wx:if="{{!offscreen}}"
3
+ type="2d"
4
+ id="wxml2canvas"
5
+ class="wxml2canvas box-class"
6
+ style="width: {{canvasWidth}}px; height: {{canvasHeight}}px;"
7
+ />
@@ -0,0 +1,5 @@
1
+ .wxml2canvas {
2
+ position: fixed;
3
+ left: 9999px;
4
+ top: -9999px;
5
+ }