@haluo/util 2.1.4 → 2.1.6

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.
@@ -3,19 +3,99 @@
3
3
  * @Author: wanghui
4
4
  */
5
5
  'use strict';
6
- let previous = 0;
7
- let timeout = null;
6
+ var previous = 0;
7
+ var timeout = null;
8
8
  import cloneDeep from 'lodash/cloneDeep';
9
9
  import copy from 'clipboard-copy';
10
- class ToolsClass {
11
- constructor() {
10
+ var ToolsClass = /** @class */ (function () {
11
+ function ToolsClass() {
12
+ var _this = this;
13
+ /**
14
+ * 蒙层显示后,html禁止滚动操作
15
+ * @param {String} className
16
+ * @return {Void}
17
+ */
18
+ this.stopScroll = function (className) {
19
+ if (!(window && window.document)) {
20
+ return new Error('仅支持浏览器');
21
+ }
22
+ var html = document.documentElement;
23
+ html.style.overflow = 'hidden';
24
+ html.style.height = '100%';
25
+ var body = document.body;
26
+ body.style.overflow = 'hidden';
27
+ body.style.height = '100%';
28
+ if (className) {
29
+ var dom = document.querySelector(".".concat(className));
30
+ dom && dom.addEventListener('touchmove', _this.__setDefault__);
31
+ }
32
+ };
33
+ /**
34
+ * 蒙层隐藏后,html开启滚动操作
35
+ * @param {String} className
36
+ * @return {Void}
37
+ */
38
+ this.startScroll = function (className) {
39
+ if (!(window && window.document)) {
40
+ return new Error('仅支持浏览器');
41
+ }
42
+ var html = document.documentElement;
43
+ html.style.overflow = 'visible';
44
+ html.style.height = 'auto';
45
+ var body = document.body;
46
+ body.style.overflow = 'visible';
47
+ body.style.height = 'auto';
48
+ if (className) {
49
+ var dom = document.querySelector(".".concat(className));
50
+ dom && dom.removeEventListener('touchmove', _this.__setDefault__);
51
+ }
52
+ };
53
+ /**
54
+ * object 对象转 array 数组
55
+ * demo:
56
+ * objectToArray({a:1,b:2}) 输出:["a=1", "b=2"]
57
+ * @param {Object} obj
58
+ * @returns {Array} arr
59
+ */
60
+ this.objectToArray = function (obj) {
61
+ var arr = [];
62
+ if (typeof obj === 'object') {
63
+ for (var key in obj) {
64
+ if (obj.hasOwnProperty(key)) {
65
+ arr.push([key, obj[key]].join('='));
66
+ }
67
+ }
68
+ }
69
+ return arr;
70
+ };
71
+ /**
72
+ * convertEnum
73
+ * 枚举键值互换
74
+ * @param {Object} obj
75
+ * convertKeyValueEnum({a: 1, b: 2}) // {1: "a", 2: "b"}
76
+ * @returns {Object} result
77
+ */
78
+ this.convertKeyValueEnum = function (obj) {
79
+ var result = {};
80
+ if (typeof obj === 'object') {
81
+ for (var key in obj) {
82
+ if (obj.hasOwnProperty(key)) {
83
+ result[obj[key]] = key;
84
+ }
85
+ }
86
+ }
87
+ return result;
88
+ };
89
+ this.isDefined = function (val) {
90
+ return val !== undefined && val !== null;
91
+ };
12
92
  this.__loaded__ = {}; // 已加载的资源
13
93
  /**
14
94
  * 阻止事件传递
15
95
  * @param {Event} e
16
96
  * @return {Void}
17
97
  */
18
- this.__setDefault__ = (e) => {
98
+ this.__setDefault__ = function (e) {
19
99
  e && e.preventDefault();
20
100
  };
21
101
  }
@@ -25,31 +105,31 @@ class ToolsClass {
25
105
  * @param {String} data
26
106
  * @return {Object}
27
107
  */
28
- deepCopy(data) {
108
+ ToolsClass.prototype.deepCopy = function (data) {
29
109
  return JSON.parse(JSON.stringify(data));
30
- }
110
+ };
31
111
  /**
32
112
  * 深拷贝 Object|Array
33
113
  * 支持 普通对象、数组和函数的深复制,但是未解决循环引用、Date、RegExp
34
114
  * @param {Object|Array} data
35
115
  * @return {Object}
36
116
  */
37
- deepCopy2(obj) {
38
- const _obj = Array.isArray(obj) ? [] : {};
39
- for (const i in obj) {
117
+ ToolsClass.prototype.deepCopy2 = function (obj) {
118
+ var _obj = Array.isArray(obj) ? [] : {};
119
+ for (var i in obj) {
40
120
  _obj[i] = typeof obj[i] === 'object' ? this.deepCopy2(obj[i]) : obj[i];
41
121
  }
42
122
  return _obj;
43
- }
123
+ };
44
124
  /**
45
125
  * 深拷贝 Object|Array
46
126
  * 注意:需要 yarn add lodash
47
127
  * @param {Object|Array} data
48
128
  * @return {Object}
49
129
  */
50
- deepCopy3(obj) {
130
+ ToolsClass.prototype.deepCopy3 = function (obj) {
51
131
  return cloneDeep(obj);
52
- }
132
+ };
53
133
  /**
54
134
  * 防抖
55
135
  * demo:debounce(func, 300)(args)
@@ -57,17 +137,17 @@ class ToolsClass {
57
137
  * @param {Number} wait 节流时间,毫秒
58
138
  * @return {Function} delay
59
139
  */
60
- debounce(func, wait) {
61
- const delay = function () {
62
- const args = arguments;
140
+ ToolsClass.prototype.debounce = function (func, wait) {
141
+ var delay = function () {
142
+ var args = arguments;
63
143
  if (timeout)
64
144
  clearTimeout(timeout);
65
- timeout = setTimeout(() => {
145
+ timeout = setTimeout(function () {
66
146
  func.apply(delay, args);
67
147
  }, wait);
68
148
  };
69
149
  return delay;
70
- }
150
+ };
71
151
  /**
72
152
  * 节流
73
153
  * demo:throttle(func, 300)(args)
@@ -75,124 +155,86 @@ class ToolsClass {
75
155
  * @param {Number} wait 节流时间,毫秒
76
156
  * @return {Function} delay
77
157
  */
78
- throttle(func, wait) {
79
- const delay = function () {
80
- const now = Date.now();
158
+ ToolsClass.prototype.throttle = function (func, wait) {
159
+ var delay = function () {
160
+ var now = Date.now();
81
161
  if (now - previous > wait) {
82
162
  func.apply(delay, arguments);
83
163
  previous = now;
84
164
  }
85
165
  };
86
166
  return delay;
87
- }
167
+ };
88
168
  /**
89
169
  * 获取路径中文件名称
90
170
  * @param {String} url
91
171
  * @return {String}
92
172
  */
93
- getUrlName(url) {
173
+ ToolsClass.prototype.getUrlName = function (url) {
94
174
  return (url && url.split('?')[0].split('/').reverse()[0]);
95
- }
175
+ };
96
176
  /**
97
177
  * 动态加载脚本
98
178
  * tip:按需加载时用(多次调用,js不会重复加载)
99
179
  * @param {String} url
100
180
  * @return {Promise}
101
181
  */
102
- loadJs(url) {
182
+ ToolsClass.prototype.loadJs = function (url) {
183
+ var _this = this;
103
184
  if (!(window && window.document)) {
104
185
  return new Error('仅支持浏览器');
105
186
  }
106
- const name = this.getUrlName(url);
107
- const id = 'js_' + name;
108
- return new Promise((resolve, reject) => {
109
- if (this.__loaded__[id]) {
187
+ var name = this.getUrlName(url);
188
+ var id = 'js_' + name;
189
+ return new Promise(function (resolve, reject) {
190
+ if (_this.__loaded__[id]) {
110
191
  return resolve();
111
192
  }
112
- const script = document.createElement('script');
193
+ var script = document.createElement('script');
113
194
  script.type = 'text/javascript';
114
195
  script.async = true;
115
196
  script.src = url;
116
197
  script.id = id;
117
- script.onload = () => {
118
- this.__loaded__[id] = true;
198
+ script.onload = function () {
199
+ _this.__loaded__[id] = true;
119
200
  resolve();
120
201
  };
121
- script.onerror = (e) => {
202
+ script.onerror = function (e) {
122
203
  reject(e);
123
204
  };
124
205
  document.body.appendChild(script);
125
206
  });
126
- }
207
+ };
127
208
  /**
128
209
  * 动态加载样式
129
210
  * @param {String} url
130
211
  * @return {Promise}
131
212
  */
132
- loadCss(url) {
213
+ ToolsClass.prototype.loadCss = function (url) {
214
+ var _this = this;
133
215
  if (!(window && window.document)) {
134
216
  return new Error('仅支持浏览器');
135
217
  }
136
- const name = this.getUrlName(url);
137
- const id = 'css_' + name;
138
- return new Promise((resolve, reject) => {
139
- if (this.__loaded__[id]) {
218
+ var name = this.getUrlName(url);
219
+ var id = 'css_' + name;
220
+ return new Promise(function (resolve, reject) {
221
+ if (_this.__loaded__[id]) {
140
222
  return resolve();
141
223
  }
142
- const link = document.createElement('link');
224
+ var link = document.createElement('link');
143
225
  link.type = 'text/css';
144
226
  link.rel = 'stylesheet';
145
227
  link.href = url;
146
228
  link.id = id;
147
- link.onload = () => {
148
- this.__loaded__[id] = true;
229
+ link.onload = function () {
230
+ _this.__loaded__[id] = true;
149
231
  resolve();
150
232
  };
151
- link.onerror = (e) => {
233
+ link.onerror = function (e) {
152
234
  reject(e);
153
235
  };
154
236
  document.head.appendChild(link);
155
237
  });
156
- }
157
- /**
158
- * 蒙层显示后,html禁止滚动操作
159
- * @param {String} className
160
- * @return {Void}
161
- */
162
- stopScroll = (className) => {
163
- if (!(window && window.document)) {
164
- return new Error('仅支持浏览器');
165
- }
166
- const html = document.documentElement;
167
- html.style.overflow = 'hidden';
168
- html.style.height = '100%';
169
- const body = document.body;
170
- body.style.overflow = 'hidden';
171
- body.style.height = '100%';
172
- if (className) {
173
- const dom = document.querySelector(`.${className}`);
174
- dom && dom.addEventListener('touchmove', this.__setDefault__);
175
- }
176
- };
177
- /**
178
- * 蒙层隐藏后,html开启滚动操作
179
- * @param {String} className
180
- * @return {Void}
181
- */
182
- startScroll = (className) => {
183
- if (!(window && window.document)) {
184
- return new Error('仅支持浏览器');
185
- }
186
- const html = document.documentElement;
187
- html.style.overflow = 'visible';
188
- html.style.height = 'auto';
189
- const body = document.body;
190
- body.style.overflow = 'visible';
191
- body.style.height = 'auto';
192
- if (className) {
193
- const dom = document.querySelector(`.${className}`);
194
- dom && dom.removeEventListener('touchmove', this.__setDefault__);
195
- }
196
238
  };
197
239
  /**
198
240
  * 字符串复制到剪贴板
@@ -200,91 +242,58 @@ class ToolsClass {
200
242
  * @param {String} str
201
243
  * @return {String}
202
244
  */
203
- clipboard(str) {
245
+ ToolsClass.prototype.clipboard = function (str) {
204
246
  if (!(window && window.document)) {
205
247
  return new Error('仅支持浏览器');
206
248
  }
207
249
  return copy(str);
208
- }
250
+ };
209
251
  /**
210
252
  * 首字母大写
211
253
  * @param {String} str
212
254
  * @return {String}
213
255
  */
214
- firstUpperCase(str) {
256
+ ToolsClass.prototype.firstUpperCase = function (str) {
215
257
  return str.charAt(0).toUpperCase() + str.toString().slice(1);
216
- }
258
+ };
217
259
  /**
218
260
  * 截取数组或字符串,示例:slice('1234', 3)
219
261
  * @param {Array|String} target 数组或字符串
220
262
  * @param {Number} length 截取长度,从0开始
221
263
  * @return {any}
222
264
  */
223
- slice(target = '', length = 0) {
265
+ ToolsClass.prototype.slice = function (target, length) {
266
+ if (target === void 0) { target = ''; }
267
+ if (length === void 0) { length = 0; }
224
268
  return target.slice(0, length);
225
- }
269
+ };
226
270
  /**
227
271
  * 获取guid
228
272
  * @return {String}
229
273
  */
230
- guid() {
274
+ ToolsClass.prototype.guid = function () {
231
275
  function S4() {
232
276
  return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
233
277
  }
234
278
  return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
235
- }
279
+ };
236
280
  /**
237
281
  * 获取文本字节数(含中文)
238
282
  * @param {String} str
239
283
  * @return {String}
240
284
  */
241
- getBytesOfText(str = '') {
285
+ ToolsClass.prototype.getBytesOfText = function (str) {
286
+ if (str === void 0) { str = ''; }
242
287
  return str.replace(/[^\u0000-\u00ff]/g, "aa").length;
243
- }
244
- /**
245
- * object 对象转 array 数组
246
- * demo:
247
- * objectToArray({a:1,b:2}) 输出:["a=1", "b=2"]
248
- * @param {Object} obj
249
- * @returns {Array} arr
250
- */
251
- objectToArray = (obj) => {
252
- var arr = [];
253
- if (typeof obj === 'object') {
254
- for (var key in obj) {
255
- if (obj.hasOwnProperty(key)) {
256
- arr.push([key, obj[key]].join('='));
257
- }
258
- }
259
- }
260
- return arr;
261
- };
262
- /**
263
- * convertEnum
264
- * 枚举键值互换
265
- * @param {Object} obj
266
- * convertKeyValueEnum({a: 1, b: 2}) // {1: "a", 2: "b"}
267
- * @returns {Object} result
268
- */
269
- convertKeyValueEnum = (obj) => {
270
- const result = {};
271
- if (typeof obj === 'object') {
272
- for (const key in obj) {
273
- if (obj.hasOwnProperty(key)) {
274
- result[obj[key]] = key;
275
- }
276
- }
277
- }
278
- return result;
279
288
  };
280
289
  /**
281
290
  * 数组去重
282
291
  * @param {Array} arr
283
292
  * @returns {Array}
284
293
  */
285
- uniqueArr(arr) {
294
+ ToolsClass.prototype.uniqueArr = function (arr) {
286
295
  return Array.from(new Set(arr));
287
- }
296
+ };
288
297
  /**
289
298
  * 数组元素交换位置
290
299
  * index1和index2分别是两个数组的索引值,即是两个要交换元素位置的索引值,如1,5就是数组中下标为1和5的两个元素交换位置
@@ -294,37 +303,38 @@ class ToolsClass {
294
303
  * swapArray([1, 2, 3, 4], 2, 3) // [1, 2, 4, 3]
295
304
  * @returns {Array<string | number>} array
296
305
  */
297
- swapArray(array, index1, index2) {
298
- [array[index1], array[index2]] = [array[index2], array[index1]];
306
+ ToolsClass.prototype.swapArray = function (array, index1, index2) {
307
+ var _a;
308
+ _a = [array[index2], array[index1]], array[index1] = _a[0], array[index2] = _a[1];
299
309
  return array;
300
- }
310
+ };
301
311
  /**
302
312
  * 过滤表情符号
303
313
  * @param {String} str
304
314
  * @return {String}
305
315
  */
306
- filterEmoji(str) {
316
+ ToolsClass.prototype.filterEmoji = function (str) {
307
317
  return str.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/mg, '');
308
- }
318
+ };
309
319
  /**
310
320
  * 是否包含表情
311
321
  * @param {String} str
312
322
  * @return {boolean}
313
323
  */
314
- containsEmoji(str) {
315
- const reg = /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/mg;
324
+ ToolsClass.prototype.containsEmoji = function (str) {
325
+ var reg = /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/mg;
316
326
  return reg.test(str);
317
- }
327
+ };
318
328
  /**
319
329
  * 是否包含表汉字
320
330
  * @param {String} str
321
331
  * @return {boolean}
322
332
  */
323
- containsHanZi(str) {
324
- const reg = /[\u4e00-\u9fa5]/mg;
333
+ ToolsClass.prototype.containsHanZi = function (str) {
334
+ var reg = /[\u4e00-\u9fa5]/mg;
325
335
  return reg.test(str);
326
- }
327
- isEmpty(val) {
336
+ };
337
+ ToolsClass.prototype.isEmpty = function (val) {
328
338
  // null or undefined
329
339
  if (val == null)
330
340
  return true;
@@ -351,11 +361,8 @@ class ToolsClass {
351
361
  }
352
362
  }
353
363
  return false;
354
- }
355
- ;
356
- isDefined = (val) => {
357
- return val !== undefined && val !== null;
358
364
  };
365
+ ;
359
366
  /**
360
367
  * 字段脱敏处理
361
368
  * @param {String} field 未脱敏字段
@@ -363,20 +370,23 @@ class ToolsClass {
363
370
  * @param {Int} after 结尾未脱敏字符数
364
371
  * @return {String} 已脱敏字段
365
372
  */
366
- sensitiveField(field, before = 3, after = 4) {
373
+ ToolsClass.prototype.sensitiveField = function (field, before, after) {
374
+ if (before === void 0) { before = 3; }
375
+ if (after === void 0) { after = 4; }
367
376
  if (!field) {
368
377
  return '';
369
378
  }
370
379
  field = String(field);
371
- let sensitiveLen = field.length - before - after;
380
+ var sensitiveLen = field.length - before - after;
372
381
  if (sensitiveLen < 0) {
373
382
  sensitiveLen = 0;
374
383
  }
375
384
  // 匹配中文、英文、数字
376
- const regItem = '[\u4e00-\u9fa5a-zA-Z0-9]';
377
- const regExp = `(${regItem}{${before}})${regItem}*(${regItem}{${after}})`;
378
- const reg = new RegExp(regExp);
379
- return field.replace(reg, `$1${"*".repeat(sensitiveLen)}$2`);
380
- }
381
- }
385
+ var regItem = '[\u4e00-\u9fa5a-zA-Z0-9]';
386
+ var regExp = "(".concat(regItem, "{").concat(before, "})").concat(regItem, "*(").concat(regItem, "{").concat(after, "})");
387
+ var reg = new RegExp(regExp);
388
+ return field.replace(reg, "$1".concat("*".repeat(sensitiveLen), "$2"));
389
+ };
390
+ return ToolsClass;
391
+ }());
382
392
  export default new ToolsClass();