utils.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import {Buffer} from 'safe-buffer';
  2. //import _ from 'lodash';
  3. export function sleep(ms) {
  4. return new Promise(resolve => setTimeout(resolve, ms));
  5. }
  6. export function toHex(buf) {
  7. return Buffer.from(buf).toString('hex');
  8. }
  9. export function keyEventToCode(event) {
  10. let result = [];
  11. let code = event.code;
  12. const modCode = code.substring(0, 3);
  13. if (event.metaKey && modCode != 'Met')
  14. result.push('Meta');
  15. if (event.ctrlKey && modCode != 'Con')
  16. result.push('Ctrl');
  17. if (event.shiftKey && modCode != 'Shi')
  18. result.push('Shift');
  19. if (event.altKey && modCode != 'Alt')
  20. result.push('Alt');
  21. if (modCode == 'Dig') {
  22. code = code.substring(5, 6);
  23. } else if (modCode == 'Key') {
  24. code = code.substring(3, 4);
  25. }
  26. result.push(code);
  27. return result.join('+');
  28. }
  29. export function wordEnding(num, type = 0) {
  30. const endings = [
  31. ['ов', '', 'а', 'а', 'а', 'ов', 'ов', 'ов', 'ов', 'ов'],
  32. ['й', 'я', 'и', 'и', 'и', 'й', 'й', 'й', 'й', 'й'],
  33. ['о', '', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о'],
  34. ['ий', 'ие', 'ия', 'ия', 'ия', 'ий', 'ий', 'ий', 'ий', 'ий'],
  35. ['о', 'а', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о'],
  36. ['ок', 'ка', 'ки', 'ки', 'ки', 'ок', 'ок', 'ок', 'ок', 'ок'],
  37. ['ых', 'ое', 'ых', 'ых', 'ых', 'ых', 'ых', 'ых', 'ых', 'ых'],
  38. ['о', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о'],
  39. ];
  40. const deci = num % 100;
  41. if (deci > 10 && deci < 20) {
  42. return endings[type][0];
  43. } else {
  44. return endings[type][num % 10];
  45. }
  46. }
  47. export function fallbackCopyTextToClipboard(text) {
  48. let textArea = document.createElement('textarea');
  49. textArea.value = text;
  50. document.body.appendChild(textArea);
  51. textArea.focus();
  52. textArea.select();
  53. let result = false;
  54. try {
  55. result = document.execCommand('copy');
  56. } catch (e) {
  57. console.error(e);
  58. }
  59. document.body.removeChild(textArea);
  60. return result;
  61. }
  62. export async function copyTextToClipboard(text) {
  63. if (!navigator.clipboard) {
  64. return fallbackCopyTextToClipboard(text);
  65. }
  66. let result = false;
  67. try {
  68. await navigator.clipboard.writeText(text);
  69. result = true;
  70. } catch (e) {
  71. console.error(e);
  72. }
  73. return result;
  74. }
  75. export function makeValidFilename(filename, repl = '_') {
  76. let f = filename.replace(/[\x00\\/:*"<>|]/g, repl); // eslint-disable-line no-control-regex
  77. f = f.trim();
  78. while (f.length && (f[f.length - 1] == '.' || f[f.length - 1] == '_')) {
  79. f = f.substring(0, f.length - 1);
  80. }
  81. if (f)
  82. return f;
  83. else
  84. throw new Error('Invalid filename');
  85. }