cbvirtua 1.0.34 → 1.0.35

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 (48) hide show
  1. package/package.json +1 -1
  2. package/queue.js +0 -1
  3. package/src/App.vue +38 -0
  4. package/src/assets/logo.png +0 -0
  5. package/src/components/HelloWorld.vue +37 -0
  6. package/src/components/cache.js +1 -0
  7. package/src/components/cache.vue +70 -0
  8. package/src/main.js +8 -0
  9. package/after/after.d.ts +0 -3
  10. package/after/after.index.d.ts +0 -3
  11. package/after/after.index.js +0 -3
  12. package/after/after.index.js.map +0 -1
  13. package/after/after.js +0 -11
  14. package/after/after.js.map +0 -1
  15. package/after/after.model.d.ts +0 -9
  16. package/after/after.model.js +0 -2
  17. package/after/after.model.js.map +0 -1
  18. package/after/after.spec.d.ts +0 -1
  19. package/after/after.spec.js +0 -226
  20. package/after/after.spec.js.map +0 -1
  21. package/after/afterify.d.ts +0 -3
  22. package/after/afterify.js +0 -26
  23. package/after/afterify.js.map +0 -1
  24. package/before/before.d.ts +0 -3
  25. package/before/before.index.d.ts +0 -3
  26. package/before/before.index.js +0 -3
  27. package/before/before.index.js.map +0 -1
  28. package/before/before.js +0 -11
  29. package/before/before.js.map +0 -1
  30. package/before/before.model.d.ts +0 -4
  31. package/before/before.model.js +0 -2
  32. package/before/before.model.js.map +0 -1
  33. package/before/before.spec.d.ts +0 -1
  34. package/before/before.spec.js +0 -174
  35. package/before/before.spec.js.map +0 -1
  36. package/before/beforify.d.ts +0 -3
  37. package/before/beforify.js +0 -18
  38. package/before/beforify.js.map +0 -1
  39. package/canvas.txt +0 -204
  40. package/font_dxr36lzujh/demo.css +0 -539
  41. package/font_dxr36lzujh/demo_index.html +0 -345
  42. package/font_dxr36lzujh/iconfont.css +0 -41
  43. package/font_dxr36lzujh/iconfont.js +0 -1
  44. package/font_dxr36lzujh/iconfont.json +0 -58
  45. package/font_dxr36lzujh/iconfont.ttf +0 -0
  46. package/i18n.js +0 -406
  47. package/locaiton.js +0 -64
  48. package/p2.js +0 -334
@@ -1,174 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { before } from './before';
11
- describe('before', () => {
12
- it('should make sure error thrown when decorator not set on method', () => {
13
- try {
14
- const nonValidBefore = before({ func: null });
15
- class T {
16
- }
17
- __decorate([
18
- nonValidBefore,
19
- __metadata("design:type", String)
20
- ], T.prototype, "boo", void 0);
21
- }
22
- catch (e) {
23
- expect('@before is applicable only on a methods.').toBe(e.message);
24
- return;
25
- }
26
- throw new Error('should not reach this line');
27
- });
28
- it('should verify before method invocation with the right context when provided as string', () => {
29
- let counter = 0;
30
- class T {
31
- before() {
32
- expect(this.prop).toBe(3);
33
- expect(counter).toBe(0);
34
- counter += 1;
35
- }
36
- foo(x) {
37
- return this.goo(x);
38
- }
39
- goo(x) {
40
- expect(this.prop).toBe(3);
41
- expect(counter).toBe(1);
42
- }
43
- }
44
- __decorate([
45
- before({
46
- func: 'before',
47
- }),
48
- __metadata("design:type", Function),
49
- __metadata("design:paramtypes", [Number]),
50
- __metadata("design:returntype", void 0)
51
- ], T.prototype, "foo", null);
52
- const t = new T();
53
- t.prop = 3;
54
- const spyGoo = jest.spyOn(T.prototype, 'goo');
55
- const spyBefore = jest.spyOn(T.prototype, 'before');
56
- t.foo(1);
57
- expect(spyGoo).toBeCalledTimes(1);
58
- expect(spyGoo).toBeCalledWith(1);
59
- expect(spyBefore).toBeCalledTimes(1);
60
- });
61
- it('should verify before method invocation when method is provided', () => {
62
- let counter = 0;
63
- const beforeFunc = jest.fn(() => {
64
- expect(counter).toBe(0);
65
- counter += 1;
66
- });
67
- class T {
68
- foo(x) {
69
- return this.goo(x);
70
- }
71
- goo(x) {
72
- expect(counter).toBe(1);
73
- }
74
- }
75
- __decorate([
76
- before({
77
- func: beforeFunc,
78
- }),
79
- __metadata("design:type", Function),
80
- __metadata("design:paramtypes", [Number]),
81
- __metadata("design:returntype", void 0)
82
- ], T.prototype, "foo", null);
83
- const t = new T();
84
- const spyGoo = jest.spyOn(T.prototype, 'goo');
85
- t.foo(1);
86
- expect(spyGoo).toBeCalledTimes(1);
87
- expect(spyGoo).toBeCalledWith(1);
88
- expect(beforeFunc.mock.calls.length).toBe(1);
89
- });
90
- it('should verify before method invocation when method is provided without waiting for it to be resolved', (done) => {
91
- let counter = 0;
92
- const beforeFunc = jest.fn(() => new Promise((resolve) => {
93
- setTimeout(() => {
94
- expect(counter).toBe(1);
95
- resolve(null);
96
- done();
97
- }, 0);
98
- }));
99
- class T {
100
- foo(x) {
101
- return this.goo(x);
102
- }
103
- goo(x) {
104
- expect(counter).toBe(0);
105
- counter += 1;
106
- }
107
- }
108
- __decorate([
109
- before({
110
- func: beforeFunc,
111
- }),
112
- __metadata("design:type", Function),
113
- __metadata("design:paramtypes", [Number]),
114
- __metadata("design:returntype", void 0)
115
- ], T.prototype, "foo", null);
116
- const t = new T();
117
- t.foo(1);
118
- });
119
- it('should verify before method invocation when method is provided with waiting for it to be resolved', (done) => {
120
- let counter = 0;
121
- const beforeFunc = jest.fn(() => new Promise((resolve) => {
122
- setTimeout(() => {
123
- expect(counter).toBe(0);
124
- counter += 1;
125
- resolve(null);
126
- done();
127
- }, 10);
128
- }));
129
- class T {
130
- foo(x) {
131
- return this.goo(x);
132
- }
133
- goo(x) {
134
- expect(counter).toBe(1);
135
- }
136
- }
137
- __decorate([
138
- before({
139
- func: beforeFunc,
140
- wait: true,
141
- }),
142
- __metadata("design:type", Function),
143
- __metadata("design:paramtypes", [Number]),
144
- __metadata("design:returntype", void 0)
145
- ], T.prototype, "foo", null);
146
- const t = new T();
147
- t.foo(1);
148
- });
149
- it('should returned result of method', async () => {
150
- let counter = 0;
151
- const beforeFunc = jest.fn(() => {
152
- expect(counter).toBe(0);
153
- counter += 1;
154
- });
155
- class T {
156
- foo(x) {
157
- return x;
158
- }
159
- }
160
- __decorate([
161
- before({
162
- func: beforeFunc,
163
- }),
164
- __metadata("design:type", Function),
165
- __metadata("design:paramtypes", [Number]),
166
- __metadata("design:returntype", Number)
167
- ], T.prototype, "foo", null);
168
- const t = new T();
169
- const value = 42;
170
- const result = await t.foo(value);
171
- expect(result).toBe(value);
172
- });
173
- });
174
- //# sourceMappingURL=before.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"before.spec.js","sourceRoot":"","sources":["../../../src/before/before.spec.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Method } from '../common/model/common.model';
2
- import { BeforeConfig } from './before.model';
3
- export declare function beforify<D = any, A extends any[] = any[]>(originalMethod: Method<D, A>, config: BeforeConfig<any>): Method<Promise<D>, A>;
@@ -1,18 +0,0 @@
1
- export function beforify(originalMethod, config) {
2
- const resolvedConfig = {
3
- wait: false,
4
- ...config,
5
- };
6
- return async function (...args) {
7
- const beforeFunc = typeof resolvedConfig.func === 'string'
8
- ? this[resolvedConfig.func].bind(this)
9
- : resolvedConfig.func;
10
- if (resolvedConfig.wait) {
11
- await beforeFunc();
12
- return originalMethod.apply(this, args);
13
- }
14
- beforeFunc();
15
- return originalMethod.apply(this, args);
16
- };
17
- }
18
- //# sourceMappingURL=beforify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"beforify.js","sourceRoot":"","sources":["../../../src/before/beforify.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,QAAQ,CACtB,cAA4B,EAAE,MAAyB;IAEvD,MAAM,cAAc,GAAsB;QACxC,IAAI,EAAE,KAAK;QACX,GAAG,MAAM;KACV,CAAC;IAEF,OAAO,KAAK,WAAW,GAAG,IAAO;QAC/B,MAAM,UAAU,GAAG,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ;YACxD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;QAExB,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,UAAU,EAAE,CAAC;YACnB,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,UAAU,EAAE,CAAC;QACb,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC"}
package/canvas.txt DELETED
@@ -1,204 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
8
- <title>Document</title>
9
- <style>
10
- body {
11
- text-align: center;
12
- }
13
-
14
- canvas {
15
- border: 1px solid;
16
- }
17
-
18
- .newcanvas {
19
- width: 316px;
20
- height: 316px;
21
- margin: auto;
22
- }
23
-
24
- .newpohoto,
25
- .download {
26
- width: 300px;
27
- height: 40px;
28
- line-height: 40px;
29
- margin: auto;
30
- background-color: cornflowerblue;
31
- border-radius: 5px;
32
- cursor: pointer;
33
- margin: 10px auto;
34
- color: white;
35
- }
36
- </style>
37
- </head>
38
-
39
- <body>
40
- <h3>使用canvas实现九宫格切图的效果</h3>
41
- <div class="mycanvas">
42
- <canvas width="300" height="300" id="mycnavas"></canvas>
43
- </div>
44
- <div class="newpohoto">
45
- 开始切图
46
- </div>
47
- <div class="newcanvas">
48
- <canvas width="100" height="100" id="img1"></canvas>
49
- <canvas width="100" height="100" id="img2"></canvas>
50
- <canvas width="100" height="100" id="img3"></canvas>
51
- <canvas width="100" height="100" id="img4"></canvas>
52
- <canvas width="100" height="100" id="img5"></canvas>
53
- <canvas width="100" height="100" id="img6"></canvas>
54
- <canvas width="100" height="100" id="img7"></canvas>
55
- <canvas width="100" height="100" id="img8"></canvas>
56
- <canvas width="100" height="100" id="img9"></canvas>
57
- </div>
58
- <div class="download">
59
- 下载图片
60
- </div>
61
- <script>
62
- var canvas = document.getElementById("mycnavas"); //现将图片放上去
63
- var cxt = mycnavas.getContext("2d");
64
- var img = new Image();
65
- img.src = "../img/img10.jpg";
66
- window.onload = function() {
67
- cxt.drawImage(img, 0, 0, 400, 300); //画好图片的位置
68
- }
69
- var arr = []; //将切的图片存到数组里面
70
- document.getElementsByClassName("newpohoto")[0].onclick = function() {
71
- var q = 1;
72
- for (var i = 0; i < 3; i++) {
73
- for (var j = 0; j < 3; j++) {
74
- var data = cxt.getImageData(j * 100, i * 100, 400, 100); //类似于“复制”功能
75
- var img = document.getElementById("img" + q)
76
- var newcxt = img.getContext("2d");
77
- newcxt.putImageData(data, 0, 0); //类似“粘贴”功能
78
- arr.push(console.log(img.toDataURL(q + ".png"))) //toDataURL()方法的两个参数:DataURL(type, encoderOptions) type指定转换为base64编码后图片的格式,如:image/png、image/jpeg、image/webp等等,默认为image/png格式;
79
- q++;
80
- console.log(arr)
81
- }
82
- }
83
-
84
- }
85
- //下载切的图片
86
- var arr = [];
87
- document.getElementsByClassName('download')[0].onclick = function() {
88
- for (var i = 0; i < 9; i++) {
89
- var a = document.createElement('a');
90
- a.download = 'img' + (i + 1);
91
- a.href = arr[i];
92
- document.body.appendChild(a);
93
- a.click();
94
- }
95
- }
96
- </script>
97
-
98
- </body>
99
-
100
- </html>
101
- ————————————————
102
-
103
- import { useState } from "react";
104
-
105
- import _ from "lodash";
106
-
107
- export const useCutImg = (url: string | undefined, points: number[][]) => {
108
- const [result, setResult] = useState<string | undefined>();
109
- if (points.length > 3 || points.length < 1) {
110
- console.error("points's length should be 2");
111
- return [""];
112
- }
113
- if (!url) {
114
- console.error("can not find image url");
115
- return [""];
116
- }
117
- let dx = 0;
118
- let dy = 0;
119
- let width = 0;
120
- let height = 0;
121
-
122
- dx = _.get(points, "[0][0]", 0);
123
- dy = _.get(points, "[0][1]", 0);
124
- const ex = _.get(points, "[1][0]", 0);
125
- const ey = _.get(points, "[1][1]", 0);
126
- width = ex - dx;
127
- height = ey - dy;
128
-
129
- const img = new Image();
130
- // 本地环境下,带有域名的图片地址存在跨域,设置crossOrigin,允许跨域
131
- img.setAttribute("crossOrigin", "Anonymous");
132
- img.src = url;
133
- img.onload = function () {
134
- const canvas = document.createElement("canvas");
135
- const ctx = canvas.getContext("2d");
136
- if (!ctx) {
137
- console.error("cannot init screenshot canvas");
138
- return;
139
- }
140
- canvas.width = width;
141
- canvas.height = height;
142
- ctx.drawImage(img, dx, dy, width, height, 0, 0, width, height);
143
- const data = canvas.toDataURL("image/png");
144
- setResult(data);
145
- };
146
- return [result];
147
- };
148
-
149
-
150
- const sliceImage = () => {
151
- const canvas = document.createElement("canvas");
152
- const context = canvas.getContext("2d");
153
- if (!context || !imageRef.current) {
154
- return;
155
- }
156
- const imageWidth = imageRef.current.naturalWidth;
157
- const imageHeight = imageRef.current.naturalHeight;
158
-
159
- const xLines = draggableListData
160
- .filter((item) => item.axis === "x")
161
- .map((item) =>
162
- item.newPosition ? item.newPosition.x : item.defaultPosition.x
163
- )
164
- .map((item) => Math.round(item / scale))
165
- .concat(imageWidth)
166
- .sort((a, b) => a - b);
167
- console.log(xLines);
168
- const yLines = draggableListData
169
- .filter((item) => item.axis === "y")
170
- .map((item) =>
171
- item.newPosition ? item.newPosition.y : item.defaultPosition.y
172
- )
173
- .map((item) => Math.round(item / scale))
174
- .concat(imageHeight)
175
- .sort((a, b) => a - b);
176
- for (let y = 0; y < yLines.length; y++) {
177
- for (let x = 0; x < xLines.length; x++) {
178
- const sliceX = x === 0 ? 0 : xLines[x - 1];
179
- const sliceY = y === 0 ? 0 : yLines[y - 1];
180
- const sliceWidth =
181
- x === xLines.length - 1 ? imageWidth - sliceX : xLines[x] - sliceX;
182
- const sliceHeight =
183
- y === yLines.length - 1 ? imageHeight - sliceY : yLines[y] - sliceY;
184
-
185
- canvas.width = sliceWidth;
186
- canvas.height = sliceHeight;
187
-
188
- context.drawImage(
189
- imageRef.current,
190
- sliceX,
191
- sliceY,
192
- sliceWidth,
193
- sliceHeight,
194
- 0,
195
- 0,
196
- sliceWidth,
197
- sliceHeight
198
- );
199
-
200
- const sliceData = canvas.toDataURL("image/png");
201
- downloadSlice(sliceData, `slice_${x}_${y}.png`);
202
- }
203
- }
204
- };