init.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. document.addEventListener('DOMContentLoaded', () => {
  2. // Refactored
  3. const submitLoader = document.querySelector('.button[form=vstobjects][type=submit]');
  4. if (submitLoader) {
  5. submitLoader.addEventListener('click', (evt) => {
  6. const loaderElement = document.createElement('div');
  7. loaderElement.classList.add('spinner');
  8. loaderElement.innerHTML =
  9. '<div class="spinner-inner"></div><div class="spinner-mask"></div><div class="spinner-mask-two"></div>';
  10. // this both gives an indication that we've clicked and is loading, also prevents double-clicking/clicking-on-something-else while loading.
  11. document.querySelector('.button[form=vstobjects][type=submit]').replaceWith(loaderElement);
  12. document.querySelector('.button').replaceWith('');
  13. // workaround a render bug on Safari (loading icon doesn't render without this)
  14. evt.preventDefault();
  15. document.querySelector('#vstobjects').submit();
  16. });
  17. }
  18. document.querySelectorAll('.toolbar-right .sort-by').forEach((el) => {
  19. el.addEventListener('click', () => $('.context-menu.sort-order').toggle());
  20. });
  21. // TODO: Replace with autofocus
  22. if (document.querySelectorAll('.ui-dialog').length == 0) {
  23. const input = document.querySelector(
  24. '#vstobjects .form-control:not([disabled]),\
  25. #vstobjects .form-select:not([disabled])'
  26. );
  27. if (input) {
  28. input.focus();
  29. }
  30. }
  31. // TODO Refactor or remove
  32. $('.submenu-select-dropdown').each(() => {
  33. $(this).wrap("<span class='submenu-select-wrapper'></span>");
  34. $(this).after("<span class='holder'></span>");
  35. });
  36. $('.submenu-select-dropdown')
  37. .change(() => {
  38. const selectedOption = $(this).find(':selected').text();
  39. $(this).next('.holder').text(selectedOption);
  40. })
  41. .trigger('change');
  42. // SORTING
  43. $('.toolbar-sorting-toggle').click(function (evt) {
  44. evt.preventDefault();
  45. $('.toolbar-sorting-menu').toggleClass('u-hidden');
  46. });
  47. $('.toolbar-sorting-menu span').click(function () {
  48. $('.toolbar-sorting-menu').toggleClass('u-hidden');
  49. if ($(this).hasClass('active')) return;
  50. $('.toolbar-sorting-menu span').removeClass('active');
  51. $(this).addClass('active');
  52. VE.tmp.sort_par = $(this).parent('li').attr('entity');
  53. VE.tmp.sort_as_int = !!$(this).parent('li').attr('sort_as_int');
  54. VE.tmp.sort_direction = $(this).hasClass('up') * 1 || -1;
  55. $('.toolbar-sorting-toggle b').html($(this).parent('li').find('.name').html());
  56. $('.toolbar-sorting-toggle .fas').removeClass('fa-arrow-up-a-z fa-arrow-down-a-z');
  57. $(this).hasClass('up')
  58. ? $('.toolbar-sorting-toggle .fas').addClass('fa-arrow-up-a-z')
  59. : $('.toolbar-sorting-toggle .fas').addClass('fa-arrow-down-a-z');
  60. $('.units .l-unit')
  61. .sort((a, b) => {
  62. if (VE.tmp.sort_as_int)
  63. return parseInt($(a).attr(VE.tmp.sort_par)) >= parseInt($(b).attr(VE.tmp.sort_par))
  64. ? VE.tmp.sort_direction
  65. : VE.tmp.sort_direction * -1;
  66. else
  67. return $(a).attr(VE.tmp.sort_par) <= $(b).attr(VE.tmp.sort_par)
  68. ? VE.tmp.sort_direction
  69. : VE.tmp.sort_direction * -1;
  70. })
  71. .appendTo('.units');
  72. });
  73. $('.button.cancel').attr('title', 'ctrl+Backspace');
  74. VE.core.register();
  75. });