@foxford/foxford-utils 0.3.8 → 1.0.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.
Files changed (43) hide show
  1. package/foxford-utils.cjs.js +2 -0
  2. package/foxford-utils.cjs.js.map +1 -0
  3. package/foxford-utils.mjs +2 -0
  4. package/foxford-utils.mjs.map +1 -0
  5. package/package.json +43 -71
  6. package/README.md +0 -4
  7. package/dist/cjs/index.js +0 -1123
  8. package/dist/cjs/index.js.map +0 -1
  9. package/dist/cjs/index.min.js +0 -7
  10. package/dist/cjs/index.min.js.map +0 -1
  11. package/dist/es/array.js +0 -77
  12. package/dist/es/base64ToArrayBuffer.js +0 -16
  13. package/dist/es/browser.js +0 -31
  14. package/dist/es/capitalize.js +0 -7
  15. package/dist/es/caseConverters.js +0 -31
  16. package/dist/es/collapse.js +0 -62
  17. package/dist/es/colors.js +0 -44
  18. package/dist/es/currency-codes.js +0 -127
  19. package/dist/es/debounce.js +0 -30
  20. package/dist/es/dom.js +0 -66
  21. package/dist/es/files.js +0 -43
  22. package/dist/es/functions.js +0 -89
  23. package/dist/es/getFilesSize.js +0 -12
  24. package/dist/es/getMimeTypes.js +0 -10
  25. package/dist/es/getRandomInt.js +0 -4
  26. package/dist/es/index.js +0 -29
  27. package/dist/es/indexByGroupId.js +0 -24
  28. package/dist/es/indexById.js +0 -23
  29. package/dist/es/mime-types/audio.js +0 -7
  30. package/dist/es/mime-types/files.js +0 -19
  31. package/dist/es/mime-types/images.js +0 -10
  32. package/dist/es/objects.js +0 -26
  33. package/dist/es/parseStringListToArray.js +0 -20
  34. package/dist/es/pickBy.js +0 -18
  35. package/dist/es/pluralize.js +0 -8
  36. package/dist/es/pluralizeByType.js +0 -24
  37. package/dist/es/qid.js +0 -24
  38. package/dist/es/rawMarkup.js +0 -9
  39. package/dist/es/scrollToElement.js +0 -23
  40. package/dist/es/strings.js +0 -28
  41. package/dist/es/transformOptionsForSelect.js +0 -19
  42. package/dist/es/url.js +0 -99
  43. package/dist/es/uuid.js +0 -11
package/dist/cjs/index.js DELETED
@@ -1,1123 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
-
7
- var _objectSpread = _interopDefault(require('@babel/runtime/helpers/objectSpread'));
8
- var qs = _interopDefault(require('query-string'));
9
-
10
- /**
11
- * Generate unique qid
12
- * @param {number} length of unique id
13
- * @param {boolean} number use number in string
14
- * @return {string}
15
- */
16
- function qid(length, number) {
17
- if (length === void 0) {
18
- length = 6;
19
- }
20
-
21
- if (number === void 0) {
22
- number = true;
23
- }
24
-
25
- var text = '';
26
- var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + (number ? '0123456789' : '');
27
-
28
- for (var i = 0; i < length; i++) {
29
- text += possible.charAt(Math.floor(Math.random() * possible.length));
30
- }
31
-
32
- return text;
33
- }
34
-
35
- /**
36
- * Generate unique grouped id
37
- * @returns {string}
38
- */
39
- function uuid() {
40
- function s4() {
41
- return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
42
- }
43
-
44
- return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4();
45
- }
46
-
47
- /**
48
- * Filter object fields
49
- *
50
- * @export
51
- * @param {object} object - input object
52
- * @param {function} filterFunc - function for filtering
53
- * @returns {object} - resulting objetc with filered fields
54
- */
55
- function pickBy(obj, filterFunc) {
56
- var newObj = {};
57
- Object.entries(obj).map(function (entry) {
58
- var key = entry[0];
59
- var value = entry[1];
60
- if (filterFunc(key, value)) newObj[key] = value;
61
- return [key, value];
62
- });
63
- return newObj;
64
- }
65
-
66
- function toggleOnClickHandler(_ref) {
67
- var currentTarget = _ref.currentTarget;
68
- if (!currentTarget) return false;
69
- var toggleArrow = currentTarget.querySelector('.toggle_arrow');
70
- var arrowClass = 'down';
71
- var toggleClass = 'expanded';
72
-
73
- if (Array.from(toggleArrow.classList).indexOf(arrowClass) !== -1) {
74
- toggleArrow.classList.remove(arrowClass);
75
- currentTarget.classList.remove(toggleClass);
76
- } else {
77
- currentTarget.classList.add(toggleClass);
78
- toggleArrow.classList.add(arrowClass);
79
- }
80
-
81
- return true;
82
- }
83
-
84
- var Collapse =
85
- /*#__PURE__*/
86
- function () {
87
- function Collapse() {
88
- this.init = this.init.bind(this);
89
- this.makeCollapse = this.makeCollapse.bind(this);
90
- this.destroy = this.destroy.bind(this);
91
- this.onClickHandler = toggleOnClickHandler;
92
- }
93
-
94
- var _proto = Collapse.prototype;
95
-
96
- _proto.makeCollapse = function makeCollapse(collapse) {
97
- if (Array.from(collapse.classList).indexOf('js') !== -1) return false;
98
- collapse.addEventListener('click', this.onClickHandler);
99
- return collapse.classList.add('js');
100
- };
101
-
102
- _proto.init = function init() {
103
- var _this = this;
104
-
105
- setTimeout(function () {
106
- if (!document.querySelectorAll || !document.body.classList) return false;
107
- _this.collapses = window.document.querySelectorAll('.toggle_element');
108
- return Array.from(_this.collapses).forEach(_this.makeCollapse);
109
- }, 0);
110
- };
111
-
112
- _proto.destroy = function destroy() {
113
- var _this2 = this;
114
-
115
- var collapses = window.document.querySelectorAll('.toggle_element');
116
- Array.from(collapses).forEach(function (item) {
117
- item.removeEventListener('click', _this2.makeCollapse);
118
- });
119
- };
120
-
121
- _proto.reinit = function reinit() {
122
- this.destroy();
123
- this.init();
124
- };
125
-
126
- return Collapse;
127
- }();
128
-
129
- /**
130
- * Decorate function with debounce
131
- *
132
- * @export
133
- * @param {function} f - function
134
- * @param {number} ms - debounce
135
- * @returns {function} - decorated function
136
- */
137
- function debounce(f, ms) {
138
- var timer = null;
139
- return function decoratedFunction() {
140
- var _this = this;
141
-
142
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
143
- args[_key] = arguments[_key];
144
- }
145
-
146
- var onComplete = function onComplete() {
147
- f.apply(_this, args);
148
- timer = null;
149
- };
150
-
151
- if (timer) {
152
- clearTimeout(timer);
153
- }
154
-
155
- timer = setTimeout(onComplete, ms);
156
- return timer;
157
- };
158
- }
159
-
160
- /*
161
- Функция превращает массив:
162
- [{ id: 1, name: 'item 1' }, ... ]
163
-
164
- В объект:
165
- {
166
- '1': {
167
- id: 1,
168
- name: 'item 1'
169
- },
170
- ...
171
- }
172
- */
173
- function indexById(items) {
174
- return items.reduce(function (all, item) {
175
- var newAll = _objectSpread({}, all);
176
-
177
- newAll[item.id] = item;
178
- return newAll;
179
- }, {});
180
- }
181
-
182
- // @docs: http://localization-guide.readthedocs.io/en/latest/l10n/pluralforms.html
183
- // @example
184
- // pluralize(1, ['штука', 'штуки', 'штук'])
185
- function pluralize(counter, forms) {
186
- var n = Math.abs(counter);
187
- var id = n % 10 === 1 && n % 100 !== 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2;
188
- return forms[id];
189
- }
190
-
191
- /**
192
- * @example
193
- * <div dangerouslySetInnerHTML={rawMarkup('<b>text</b>')} />
194
- */
195
- function rawMarkup(text) {
196
- return {
197
- __html: text
198
- };
199
- }
200
-
201
- /**
202
- * Capitalize string
203
- * @param {string} str
204
- */
205
- var capitalize = function capitalize(str) {
206
- return str.length ? str[0].toUpperCase() + str.slice(1) : '';
207
- };
208
-
209
- /**
210
- * getFilesSize - increment attachments and add new files
211
- * @param {Array[Object]} attachments
212
- * @param {Array} files
213
- */
214
- function getFilesSize(attachments, files) {
215
- var size = 0;
216
- attachments.concat(files).forEach(function (file) {
217
- size += file.size;
218
- });
219
- return size;
220
- }
221
-
222
- /**
223
- * Return array of mime-types from array of files
224
- * @param {Array[File]} files
225
- */
226
- var getMimeTypes = function getMimeTypes(files) {
227
- var data = files.reduce(function (acc, file) {
228
- return [].concat(acc, [file.mime]);
229
- }, []);
230
- return data;
231
- };
232
-
233
- // Возвращает случайное целое число между min (включительно) и max (не включая max)
234
- function getRandomInt(min, max) {
235
- return Math.floor(Math.random() * (max - min)) + min;
236
- }
237
-
238
- /*
239
- Функция превращает массив:
240
- [{ id: 1, name: 'item 1', group: { id: 1 } }, ... ]
241
-
242
- В объект:
243
- {
244
- '100': {
245
- id: 1,
246
- name: 'item 1',
247
- group: { id: 100 }
248
- },
249
- ...
250
- }
251
- */
252
- function indexByGroupId(items) {
253
- return items.reduce(function (all, item) {
254
- var newAll = _objectSpread({}, all);
255
-
256
- newAll[item.group.id] = item;
257
- return newAll;
258
- }, {});
259
- }
260
-
261
- function getElementPosition(elem) {
262
- var _elem$getBoundingClie = elem.getBoundingClientRect(),
263
- top = _elem$getBoundingClie.top,
264
- left = _elem$getBoundingClie.left;
265
-
266
- var _window = window,
267
- pageYOffset = _window.pageYOffset,
268
- pageXOffset = _window.pageXOffset;
269
- return {
270
- top: top + pageYOffset,
271
- left: left + pageXOffset
272
- };
273
- }
274
-
275
- function scrollToElement(selector) {
276
- var field = document.querySelector(selector);
277
- if (!field) return false;
278
-
279
- var _getElementPosition = getElementPosition(field),
280
- top = _getElementPosition.top;
281
-
282
- return window.scrollTo(0, top);
283
- }
284
-
285
- var TYPES = {
286
- tasks: ['задача', 'задачи', 'задач'],
287
- exercises: ['занятие', 'занятия', 'занятий'],
288
- members: ['участник', 'участника', 'участников'],
289
- hours: ['час', 'часа', 'часов'],
290
- seconds: ['секунда', 'секунды', 'секунд'],
291
- minutes: ['минута', 'минуты', 'минут'],
292
- remains: ['остался', 'осталось', 'осталось'],
293
- days: ['день', 'дня', 'дней'],
294
- points: ['балл', 'балла', 'баллов'],
295
- students: ['ученик', 'ученика', 'учеников'],
296
- studentsParentalCase: ['ученика', 'учеников', 'учеников']
297
- /**
298
- * Get a pluralized string for a preset by type
299
- *
300
- * @param {number} counter
301
- * @param {strung} type
302
- */
303
-
304
- };
305
- function pluralizeByType(counter, type) {
306
- return pluralize(counter || 0, TYPES[type]);
307
- }
308
-
309
- /**
310
- * Конвертим base64 в буфер
311
- *
312
- * @param {string} base64
313
- */
314
- function base64ToArrayBuffer(base64) {
315
- var binary_string = window.atob(base64);
316
- var len = binary_string.length;
317
- var bytes = new Uint8Array(len);
318
-
319
- for (var i = 0; i < len; i++) {
320
- bytes[i] = binary_string.charCodeAt(i);
321
- }
322
-
323
- return bytes.buffer;
324
- }
325
-
326
- /**
327
- * Функция для парсинга строки вида:
328
- * "— Преподаватель кафедры общей физики МФТИ <br>
329
- * — Старший преподаватель вечерней физико-технической школы МФТИ"
330
- * в массив
331
- *
332
- * @export
333
- * @param {any} string
334
- * @returns array
335
- */
336
- function parseStringListToArray(string) {
337
- if (string === void 0) {
338
- string = '';
339
- }
340
-
341
- return string.split(/(?:^|<br>|\n)\s*[-\u\u2010-\u2015\ufe58\ufe63\uff0d]/gm).filter(function (_ref) {
342
- var length = _ref.length;
343
- return length;
344
- });
345
- }
346
-
347
- /**
348
- * Function for transforming otions like grade options into select values
349
- *
350
- * @export
351
- * @param {array} options array of {object} { id, name, image_url }
352
- * @returns {array} selectOptions { value, label, image_url }
353
- */
354
- function transformOptionsForSelect(options) {
355
- return options.map(function (_ref) {
356
- var id = _ref.id,
357
- name = _ref.name,
358
- image_url = _ref.image_url;
359
- return {
360
- value: id,
361
- label: name,
362
- image_url: image_url
363
- };
364
- });
365
- }
366
-
367
- /**
368
- * Глубокий мерж объектов
369
- *
370
- * @param {object} target
371
- * @param {object} source
372
- */
373
- var merge = function merge(target, source) {
374
- /*
375
- Iterate through `source` properties and if an `Object`
376
- set property to merge of `target` and `source` properties
377
- */
378
- // eslint-disable-next-line no-restricted-syntax
379
- var _arr = Object.keys(source);
380
-
381
- for (var _i = 0; _i < _arr.length; _i++) {
382
- var key = _arr[_i];
383
-
384
- if (source[key] instanceof Object && key in target) {
385
- Object.assign(source[key], merge(target[key], source[key]));
386
- }
387
- } // Join `target` and modified `source`
388
-
389
-
390
- Object.assign(target || {}, source);
391
- return target;
392
- };
393
-
394
- /**
395
- * Detect IE
396
- * @returns version of IE or false, if browser is not Internet Explorer
397
- */
398
- var detectIE = function detectIE() {
399
- var ua = window.navigator.userAgent;
400
- var msie = ua.indexOf('MSIE ');
401
-
402
- if (msie > 0) {
403
- // IE 10 or older => return version number
404
- return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
405
- }
406
-
407
- var trident = ua.indexOf('Trident/');
408
-
409
- if (trident > 0) {
410
- // IE 11 => return version number
411
- var rv = ua.indexOf('rv:');
412
- return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
413
- }
414
-
415
- var edge = ua.indexOf('Edge/');
416
-
417
- if (edge > 0) {
418
- // Edge (IE 12+) => return version number
419
- return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
420
- } // other browser
421
-
422
-
423
- return false;
424
- };
425
-
426
- /**
427
- * Function returnes outer height of the element
428
- *
429
- * @export
430
- * @param {node} el
431
- * @returns {number} height
432
- */
433
- function outerHeight(el) {
434
- var style = getComputedStyle(el);
435
- var height = el.offsetHeight;
436
- height += parseInt(style.marginTop) + parseInt(style.marginBottom);
437
- return height;
438
- }
439
- /**
440
- * Serialize form data
441
- *
442
- * @export
443
- * @param {form} form
444
- * @returns {array} s
445
- */
446
-
447
- function serializeArray(form) {
448
- var field;
449
- var l;
450
- var s = [];
451
-
452
- if (typeof form === 'object' && form.nodeName === 'FORM') {
453
- var len = form.elements.length;
454
-
455
- for (var i = 0; i < len; i++) {
456
- field = form.elements[i];
457
-
458
- if (field.name && !field.disabled && field.type !== 'file' && field.type !== 'reset' && field.type !== 'submit' && field.type !== 'button') {
459
- if (field.type === 'select-multiple') {
460
- l = form.elements[i].options.length;
461
-
462
- for (var j = 0; j < l; j++) {
463
- if (field.options[j].selected) {
464
- s[s.length] = {
465
- name: field.name,
466
- value: field.options[j].value
467
- };
468
- }
469
- }
470
- } else if (field.type !== 'checkbox' && field.type !== 'radio' || field.checked) {
471
- s[s.length] = {
472
- name: field.name,
473
- value: field.value
474
- };
475
- }
476
- }
477
- }
478
- }
479
-
480
- return s;
481
- }
482
- /**
483
- * Check if element placed inside current viewport
484
- *
485
- * @param {node} el
486
- */
487
-
488
- function isElementInViewport(el) {
489
- var rect = el.getBoundingClientRect();
490
- return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
491
- }
492
-
493
- /**
494
- * Convert object keys to camelCase
495
- * @param {object} obj
496
- */
497
- var toCamelCase = function toCamelCase(obj) {
498
- var result = {};
499
- Object.entries(obj).forEach(function (_ref) {
500
- var key = _ref[0],
501
- value = _ref[1];
502
- var newKey = key.split('_').map(function (part, i) {
503
- return i === 0 ? part : part[0].toUpperCase() + part.slice(1);
504
- }).join('');
505
- result[newKey] = value;
506
- });
507
- return result;
508
- };
509
- /**
510
- * Convert camelCase keys in object to undercase
511
- * @param {object} obj
512
- */
513
-
514
- var toUnderscoredCase = function toUnderscoredCase(obj) {
515
- var result = {};
516
- Object.entries(obj).forEach(function (_ref2) {
517
- var key = _ref2[0],
518
- value = _ref2[1];
519
- var newKey = key.split(/(?=[A-Z])/).join('_').toLowerCase();
520
- result[newKey] = value;
521
- });
522
- return result;
523
- };
524
-
525
- /**
526
- * Function splits [arr] by arrays of [limit] elements
527
- *
528
- * @param {*} arr - any array
529
- * @param {*} limit - length of new arrays
530
- */
531
- var splitEvery = function splitEvery(limit, arr) {
532
- if (limit === void 0) {
533
- limit = 1;
534
- }
535
-
536
- if (arr === void 0) {
537
- arr = [];
538
- }
539
-
540
- return arr.reduce(function (acc, item, index) {
541
- if (!(index % limit)) {
542
- acc[acc.length] = [];
543
- }
544
-
545
- acc[acc.length - 1].push(item);
546
- return acc;
547
- }, []);
548
- };
549
- /**
550
- * Remove duplicated elements from array
551
- *
552
- * @param {array} arrArg - array to deduplicate
553
- */
554
-
555
- var uniq = function uniq(arrArg) {
556
- return arrArg.filter(function (elem, pos, arr) {
557
- return arr.indexOf(elem) === pos;
558
- });
559
- };
560
- /**
561
- * Remove element from array by index
562
- *
563
- * @param {array} arr
564
- * @param {number} index
565
- */
566
-
567
- var removeElFromArr = function removeElFromArr(arr, index) {
568
- var newArr = [].concat(arr);
569
- newArr.splice(index, 1);
570
- return newArr;
571
- };
572
- /**
573
- * Merge two arrays of objects by field
574
- *
575
- * @param {array} [arr1=[]] - Array 1
576
- * @param {array} [arr2=[]] - Array 2
577
- * @returns {array}
578
- */
579
-
580
- function mergeByKey(arr1, arr2, key) {
581
- if (arr1 === void 0) {
582
- arr1 = [];
583
- }
584
-
585
- if (arr2 === void 0) {
586
- arr2 = [];
587
- }
588
-
589
- if (key === void 0) {
590
- key = 'id';
591
- }
592
-
593
- return arr1.map(function (el1) {
594
- var el2 = arr2.find(function (el) {
595
- return "" + el[key] === "" + el1[key];
596
- });
597
- return el2 ? _objectSpread({}, el1, el2) : el1;
598
- });
599
- }
600
-
601
- /**
602
- * Функция принимает Ф.И.О, возвращает Ф.И.
603
- *
604
- * @param {string} fullName
605
- * @returns {string} shortName
606
- */
607
- var makeShortNameFromFull = function makeShortNameFromFull(fullName) {
608
- if (fullName === void 0) {
609
- fullName = '';
610
- }
611
-
612
- var nameArr = fullName.split(' ');
613
- return nameArr.length === 3 ? nameArr.splice(0, 2).reverse().join(' ') : nameArr.reverse().join(' ');
614
- };
615
- /**
616
- * Extracts all decimals from string
617
- *
618
- * @param {string} [str='']
619
- * @returns {string}
620
- */
621
-
622
- var extractDigits = function extractDigits(str) {
623
- if (str === void 0) {
624
- str = '';
625
- }
626
-
627
- return typeof str === 'string' && str.replace(/\D/gim, '');
628
- };
629
-
630
- /* eslint-disable */
631
- var CURRENCY_DIRECTORY = {
632
- ALL: "Lek",
633
- AFN: "\u060B",
634
- ARS: "$",
635
- AWG: "\u0192",
636
- AUD: "$",
637
- AZN: "\u20BC",
638
- BSD: "$",
639
- BBD: "$",
640
- BYR: "Br",
641
- BZD: "BZ$",
642
- BMD: "$",
643
- BOB: "$b",
644
- BAM: "KM",
645
- BWP: "P",
646
- BGN: "\u043B\u0432",
647
- BRL: "R$",
648
- BND: "$",
649
- KHR: "\u17DB",
650
- CAD: "C$",
651
- KYD: "$",
652
- CLP: "$",
653
- CNY: "\xA5",
654
- COP: "$",
655
- CRC: "\u20A1",
656
- HRK: "kn",
657
- CUP: "\u20B1",
658
- CZK: "K\u010D",
659
- DKK: "kr",
660
- DOP: "RD$",
661
- XCD: "$",
662
- EGP: "\xA3",
663
- SVC: "$",
664
- EEK: "kr",
665
- EUR: "\u20AC",
666
- FKP: "\xA3",
667
- FJD: "$",
668
- FRF: "\u20A3",
669
- GHC: "\xA2",
670
- GIP: "\xA3",
671
- GTQ: "Q",
672
- GGP: "\xA3",
673
- GYD: "$",
674
- HNL: "L",
675
- HKD: "$",
676
- HUF: "Ft",
677
- ISK: "kr",
678
- INR: "\u20A8",
679
- IDR: "Rp",
680
- IRR: "\uFDFC",
681
- IMP: "\xA3",
682
- ILS: "\u20AA",
683
- JMD: "J$",
684
- JPY: "\xA5",
685
- JEP: "\xA3",
686
- KZT: "\u20B8",
687
- KGS: "KGS",
688
- LAK: "\u20AD",
689
- LVL: "Ls",
690
- LBP: "\xA3",
691
- LRD: "$",
692
- LTL: "Lt",
693
- MKD: "\u0434\u0435\u043D",
694
- MYR: "RM",
695
- MUR: "\u20A8",
696
- MXN: "$",
697
- MNT: "\u20AE",
698
- MZN: "MT",
699
- NAD: "$",
700
- NPR: "\u20A8",
701
- ANG: "\u0192",
702
- NZD: "$",
703
- NIO: "C$",
704
- NGN: "\u20A6",
705
- KPW: "\u20A9",
706
- NOK: "kr",
707
- OMR: "\uFDFC",
708
- PKR: "\u20A8",
709
- PAB: "B/.",
710
- PYG: "Gs",
711
- PEN: "S/.",
712
- PHP: "\u20B1",
713
- PLN: "z\u0142",
714
- QAR: "\uFDFC",
715
- RON: "lei",
716
- RUR: "\u20BD",
717
- SHP: "\xA3",
718
- SAR: "\uFDFC",
719
- RSD: "\u0414\u0438\u043D.",
720
- SCR: "\u20A8",
721
- SGD: "$",
722
- SBD: "$",
723
- SOS: "S",
724
- ZAR: "R",
725
- KRW: "\u20A9",
726
- LKR: "\u20A8",
727
- SEK: "kr",
728
- CHF: "CHF",
729
- SRD: "$",
730
- SYP: "\xA3",
731
- TWD: "NT$",
732
- THB: "\u0E3F",
733
- TTD: "TT$",
734
- TRY: "\u20A4",
735
- TRL: "\u20A4",
736
- TVD: "$",
737
- UAH: "\u20B4",
738
- GBP: "\xA3",
739
- USD: "$",
740
- UYU: "$U",
741
- UZS: "\u043B\u0432",
742
- VEF: "Bs",
743
- VND: "\u20AB",
744
- YER: "\uFDFC",
745
- ZWD: "Z$"
746
- /**
747
- * Возвращает знак валюты по ISO коду.
748
- *
749
- * @param {String} currencyCode Код валюты.
750
- * @returns {String}
751
- */
752
-
753
- };
754
- function getCurrencySymbol(currencyCode) {
755
- return CURRENCY_DIRECTORY[currencyCode] || currencyCode;
756
- }
757
-
758
- function colorLuminance(rawHex, lum) {
759
- if (lum === void 0) {
760
- lum = 0;
761
- }
762
-
763
- // validate hex string
764
- var hex = String(rawHex).replace(/[^0-9a-f]/gi, '');
765
-
766
- if (hex.length < 6) {
767
- hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
768
- } // convert to decimal and change luminosity
769
-
770
-
771
- var rgb = '#';
772
-
773
- for (var i = 0; i < 3; i++) {
774
- var c = hex && parseInt(hex.substr(i * 2, 2), 16);
775
- c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
776
- rgb += ("00" + c).substr(c.length);
777
- }
778
-
779
- return rgb;
780
- }
781
- function getGradient(degree, color) {
782
- return "linear-gradient(" + degree + ", " + colorLuminance("#" + color, +0.09) + ", " + colorLuminance("#" + color, -0.09) + ")";
783
- }
784
- /**
785
- * Возвращает цвет по строке
786
- *
787
- * @param {string} string строка имени
788
- * @param {Array} colors массив цветов (hex коды или имёна)
789
- * @return {string} цвет из массива цветов
790
- */
791
-
792
- var getColorByString = function getColorByString(string, colors) {
793
- var i = string.length;
794
- var sum = 0;
795
-
796
- while (i--) {
797
- sum += string.charCodeAt(i);
798
- }
799
-
800
- return colors ? colors[sum % colors.length] : null;
801
- };
802
-
803
- /**
804
- * Хэлпер для создания строки URL адреса
805
- * @param {String} url Путь
806
- * @param {Object} query Объект параметров запроса
807
- * @example
808
- * createPath('/library', { id: 1 }) // => /library?id=1
809
- * @returns {String} Итоговый путь
810
- */
811
-
812
- function createPath(u, query) {
813
- var url = u;
814
- var hashExist = url.includes('#');
815
- var hash = hashExist ? url.split('#')[1] : '';
816
-
817
- if (hashExist) {
818
- url = url.replace('#', '');
819
- url = url.replace(hash, '');
820
- }
821
-
822
- var _url$split = url.split('?'),
823
- urlPath = _url$split[0],
824
- urlQuery = _url$split[1];
825
-
826
- var queryParams = qs.stringify(_objectSpread({}, qs.parse(urlQuery), query), {
827
- encode: false
828
- });
829
- return [urlPath, queryParams].filter(function (s) {
830
- return !!s;
831
- }).join('?') + (hashExist ? "#" + hash : '');
832
- }
833
- /**
834
- * Хэлпер для того чтобы парсить строку запроса (location.search)
835
- * @param {String} query Строка запроса
836
- * @return {Object} Объект содержащий параметры запроса
837
- * @example
838
- * parseQueryString('/library?id=1') // => { id: 1 }
839
- */
840
-
841
- function parseQueryString(query) {
842
- return qs.parse(query);
843
- }
844
- /**
845
- * Функция извлекает URL следующей страницы из HTTP заголовка Link
846
- *
847
- * @param {String} link Содержимое заголовка Link
848
- * @return {String} URL адрес следующей страницы или пустая строка
849
- *
850
- * @example
851
- * var link = "<http://localhost:3500/api/library/pupil_courses?page=2>; rel='next'"
852
- * var url = getNextPageURLFromLinkHeader(link)
853
- * url === 'http://localhost:3500/api/library/pupil_courses?page=2'
854
- */
855
-
856
- function getNextPageURLFromLinkHeader(link) {
857
- if (link === void 0) {
858
- link = '';
859
- }
860
-
861
- var result = link.match(/<([^>]+)>/);
862
- return result ? result[1] : '';
863
- }
864
- /**
865
- * Функция извлекает номер следующей страницы из HTTP заголовка Link
866
- *
867
- * @param {String} link Содержимое заголовка Link
868
- * @return {Number} page номер страницы или null
869
- *
870
- * @example
871
- * var link = "<http://localhost:3500/api/library/pupil_courses?page=2>; rel='next'"
872
- * var url = getNextPageURLFromLinkHeader(link)
873
- * url === 'http://localhost:3500/api/library/pupil_courses?page=2'
874
- */
875
-
876
- function getNextPageFromLinkHeader(link) {
877
- if (link === void 0) {
878
- link = '';
879
- }
880
-
881
- return link ? parseInt(/[?&]page=([^&>]+)[&>]/gi.exec(link)[1]) || null : null;
882
- }
883
- /**
884
- * Generate url param string
885
- *
886
- * @export
887
- * @param {object} object
888
- * @returns {string}
889
- */
890
-
891
- function makeParamString(object) {
892
- if (object === void 0) {
893
- object = {};
894
- }
895
-
896
- return Object.keys(object).map(function (key) {
897
- return encodeURIComponent(key) + "=" + encodeURIComponent(object[key]);
898
- }).join('&');
899
- }
900
-
901
- var images = [{
902
- mime: 'image/jpeg',
903
- extensions: ['jpg', 'jpeg']
904
- }, {
905
- mime: 'image/png',
906
- extensions: ['png']
907
- }, {
908
- mime: 'image/gif',
909
- extensions: ['gif']
910
- }];
911
-
912
- var files = [{
913
- mime: 'application/vnd.oasis.opendocument.text',
914
- extensions: ['odt']
915
- }, {
916
- mime: 'application/vnd.oasis.opendocument.formula',
917
- extensions: ['odf']
918
- }, {
919
- mime: 'application/msword',
920
- extensions: ['doc', 'dot']
921
- }, {
922
- mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
923
- extensions: ['docx']
924
- }, {
925
- mime: 'application/pdf',
926
- extensions: ['pdf']
927
- }, {
928
- mime: 'application/excel, application/x-excel, application/vnd.ms-excel, application/x-msexcel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
929
- extensions: ['xls', 'xlsx']
930
- }];
931
-
932
- var audio = [{
933
- mime: 'audio/mpeg, audio/mp3',
934
- extensions: ['mp3']
935
- }, {
936
- mime: 'audio/wav',
937
- extensions: ['wav']
938
- }];
939
-
940
- var MimeTypes = {
941
- images: images,
942
- files: files,
943
- audio: audio
944
- };
945
-
946
- var getExtentensions = function getExtentensions(files$$1) {
947
- return files$$1.reduce(function (acc, file) {
948
- return [].concat(acc, file.extensions);
949
- }, []);
950
- };
951
-
952
- var mimeImages = function mimeImages() {
953
- return getMimeTypes(MimeTypes.images);
954
- };
955
- var mimeFiles = function mimeFiles() {
956
- return getMimeTypes(MimeTypes.files);
957
- };
958
- var mimeAudio = function mimeAudio() {
959
- return getMimeTypes(MimeTypes.audio);
960
- };
961
- var acceptFileTypes = function acceptFileTypes() {
962
- return [].concat(mimeImages(), mimeFiles());
963
- };
964
- var acceptAllTypes = function acceptAllTypes() {
965
- return [].concat(mimeImages(), mimeFiles(), mimeAudio());
966
- };
967
- var acceptImagesExtensions = function acceptImagesExtensions() {
968
- return getExtentensions(MimeTypes.images);
969
- };
970
- var acceptFilesExtensions = function acceptFilesExtensions() {
971
- return getExtentensions(MimeTypes.files);
972
- };
973
- var acceptAudioExtensions = function acceptAudioExtensions() {
974
- return getExtentensions(MimeTypes.audio);
975
- };
976
- var acceptAllExtensions = function acceptAllExtensions() {
977
- return [].concat(acceptFilesExtensions(), acceptImagesExtensions(), acceptAudioExtensions());
978
- };
979
-
980
- function wrapField(wrapper, field) {
981
- return wrapper + "[" + field + "]";
982
- }
983
-
984
- function wrapFormFields(wrapper, formFieldsString, untouchables) {
985
- if (untouchables === void 0) {
986
- untouchables = [];
987
- }
988
-
989
- var parts = formFieldsString.split('&');
990
- var newFields = [];
991
- var oldField;
992
- var newPart;
993
- parts.forEach(function (oldPart) {
994
- oldField = oldPart.substr(0, oldPart.indexOf('='));
995
-
996
- if (untouchables.includes(oldField)) {
997
- newPart = oldPart;
998
- } else {
999
- newPart = oldPart.replace(oldField, wrapField(wrapper, oldField));
1000
- }
1001
-
1002
- newFields.push(newPart);
1003
- });
1004
- return newFields.join('&');
1005
- }
1006
- /**
1007
- * Function returns function for cheking if idToMatch matches object's id
1008
- *
1009
- * Usage: arr.find(matchesId(id))
1010
- *
1011
- * @param {string | object} idToMatch - id that will be matching in returned function
1012
- *
1013
- * @return {function}
1014
- */
1015
-
1016
- var matchesId = function matchesId(idToMatch) {
1017
- return function (_ref) {
1018
- var id = _ref.id;
1019
- return String(id) === String(idToMatch);
1020
- };
1021
- };
1022
- /**
1023
- * Detects if Enter key was pressed
1024
- *
1025
- * @export
1026
- * @param {array} options array of {object} { id, name }
1027
- * @returns {array} selectOprions { value, label }
1028
- */
1029
-
1030
- function detectEnterKey(e) {
1031
- var enterKey = 13;
1032
- var charCode = typeof e.which === 'number' ? e.which : e.keyCode;
1033
- return enterKey === charCode;
1034
- }
1035
- /**
1036
- * Make options for select
1037
- * @param {numer} value
1038
- * @param {string} label
1039
- */
1040
-
1041
- var makeOption = function makeOption(value, label) {
1042
- return value ? {
1043
- value: value,
1044
- label: label
1045
- } : undefined;
1046
- };
1047
- /**
1048
- * Make loadOptionsFunction for select
1049
- *
1050
- * @param {function} func - function to load array of options
1051
- * @param {object} args - function's arguments
1052
- * @param {array} defaultOptions - array of default options:
1053
- * @param {string} label
1054
- * @param {number} id
1055
- */
1056
-
1057
- var makeLoadOptionsFunc = function makeLoadOptionsFunc(func, args, defaultOptions) {
1058
- var response = func(args);
1059
- return response ? response.then(function (options) {
1060
- return _objectSpread({
1061
- options: options
1062
- }, defaultOptions);
1063
- }) : Promise.resolve({
1064
- options: defaultOptions
1065
- });
1066
- };
1067
-
1068
- exports.qid = qid;
1069
- exports.uuid = uuid;
1070
- exports.pickBy = pickBy;
1071
- exports.Collapse = Collapse;
1072
- exports.debounce = debounce;
1073
- exports.indexById = indexById;
1074
- exports.pluralize = pluralize;
1075
- exports.rawMarkup = rawMarkup;
1076
- exports.capitalize = capitalize;
1077
- exports.getFilesSize = getFilesSize;
1078
- exports.getMimeTypes = getMimeTypes;
1079
- exports.getRandomInt = getRandomInt;
1080
- exports.indexByGroupId = indexByGroupId;
1081
- exports.scrollToElement = scrollToElement;
1082
- exports.pluralizeByType = pluralizeByType;
1083
- exports.base64ToArrayBuffer = base64ToArrayBuffer;
1084
- exports.parseStringListToArray = parseStringListToArray;
1085
- exports.transformOptionsForSelect = transformOptionsForSelect;
1086
- exports.merge = merge;
1087
- exports.detectIE = detectIE;
1088
- exports.serializeArray = serializeArray;
1089
- exports.outerHeight = outerHeight;
1090
- exports.isElementInViewport = isElementInViewport;
1091
- exports.toCamelCase = toCamelCase;
1092
- exports.toUnderscoredCase = toUnderscoredCase;
1093
- exports.uniq = uniq;
1094
- exports.splitEvery = splitEvery;
1095
- exports.removeElFromArr = removeElFromArr;
1096
- exports.mergeByKey = mergeByKey;
1097
- exports.extractDigits = extractDigits;
1098
- exports.makeShortNameFromFull = makeShortNameFromFull;
1099
- exports.getCurrencySymbol = getCurrencySymbol;
1100
- exports.currencyDirectory = CURRENCY_DIRECTORY;
1101
- exports.getGradient = getGradient;
1102
- exports.colorLuminance = colorLuminance;
1103
- exports.getColorByString = getColorByString;
1104
- exports.createPath = createPath;
1105
- exports.parseQueryString = parseQueryString;
1106
- exports.getNextPageFromLinkHeader = getNextPageFromLinkHeader;
1107
- exports.getNextPageURLFromLinkHeader = getNextPageURLFromLinkHeader;
1108
- exports.makeParamString = makeParamString;
1109
- exports.mimeImages = mimeImages;
1110
- exports.mimeFiles = mimeFiles;
1111
- exports.mimeAudio = mimeAudio;
1112
- exports.acceptFileTypes = acceptFileTypes;
1113
- exports.acceptAllTypes = acceptAllTypes;
1114
- exports.acceptImagesExtensions = acceptImagesExtensions;
1115
- exports.acceptFilesExtensions = acceptFilesExtensions;
1116
- exports.acceptAudioExtensions = acceptAudioExtensions;
1117
- exports.acceptAllExtensions = acceptAllExtensions;
1118
- exports.wrapFormFields = wrapFormFields;
1119
- exports.matchesId = matchesId;
1120
- exports.detectEnterKey = detectEnterKey;
1121
- exports.makeOption = makeOption;
1122
- exports.makeLoadOptionsFunc = makeLoadOptionsFunc;
1123
- //# sourceMappingURL=index.js.map