helper.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. export function replaceMustache(str, replacer) {
  2. /* eslint-disable-next-line */
  3. return str.replace(/\{\{(.*?)\}\}/g, replacer);
  4. }
  5. export function openFilePicker(acceptedFileTypes = [], attrs = {}) {
  6. return new Promise((resolve, reject) => {
  7. const input = document.createElement('input');
  8. input.type = 'file';
  9. input.accept = acceptedFileTypes.join(',');
  10. Object.entries(attrs).forEach(([key, value]) => {
  11. input[key] = value;
  12. });
  13. input.onchange = (event) => {
  14. const file = event.target.files[0];
  15. if (!file || !acceptedFileTypes.includes(file.type)) {
  16. reject(new Error(`Invalid ${file.type} file type`));
  17. return;
  18. }
  19. resolve(file);
  20. };
  21. input.click();
  22. });
  23. }
  24. export function fileSaver(fileName, data) {
  25. const anchor = document.createElement('a');
  26. anchor.download = fileName;
  27. anchor.href = data;
  28. anchor.dispatchEvent(new MouseEvent('click'));
  29. anchor.remove();
  30. }
  31. export function countDuration(started, ended) {
  32. const duration = Math.round((ended - started) / 1000);
  33. const minutes = parseInt((duration / 60) % 60, 10);
  34. const seconds = parseInt(duration % 60, 10);
  35. const getText = (num, suffix) => (num > 0 ? `${num}${suffix}` : '');
  36. return `${getText(minutes, 'm')} ${seconds}s`;
  37. }
  38. export function toCamelCase(str) {
  39. const result = str.replace(/(?:^\w|[A-Z]|\b\w)/g, (letter, index) => {
  40. return index === 0 ? letter.toLowerCase() : letter.toUpperCase();
  41. });
  42. return result.replace(/\s+|[-]/g, '');
  43. }
  44. export function isObject(obj) {
  45. return typeof obj === 'object' && obj !== null;
  46. }
  47. export function objectHasKey(obj, key) {
  48. return Object.prototype.hasOwnProperty.call(obj, key);
  49. }
  50. export function debounce(callback, time = 200) {
  51. let interval;
  52. return (...args) => {
  53. clearTimeout(interval);
  54. return new Promise((resolve) => {
  55. interval = setTimeout(() => {
  56. interval = null;
  57. callback(...args);
  58. resolve();
  59. }, time);
  60. });
  61. };
  62. }