plugins-admin.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * Change the position counter of a row.
  3. *
  4. * @param elem Element Node to change.
  5. * @param toPos int New position.
  6. */
  7. function changePos(elem, toPos) {
  8. const elemName = elem.getAttribute('data-line');
  9. elem.setAttribute('data-order', toPos);
  10. const hiddenInput = document.querySelector(`[name="order_${elemName}"]`);
  11. hiddenInput.setAttribute('value', toPos);
  12. }
  13. /**
  14. * Move a row up or down.
  15. *
  16. * @param pos Element Node to move.
  17. * @param move int Move: +1 (down) or -1 (up)
  18. */
  19. function changeOrder(pos, move) {
  20. const newpos = parseInt(pos, 10) + move;
  21. let lines = document.querySelectorAll(`[data-order="${pos}"]`);
  22. const changelines = document.querySelectorAll(`[data-order="${newpos}"]`);
  23. // If we go down reverse lines to preserve the rows order
  24. if (move > 0) {
  25. lines = [].slice.call(lines).reverse();
  26. }
  27. for (let i = 0; i < lines.length; i += 1) {
  28. const parent = changelines[0].parentNode;
  29. changePos(lines[i], newpos);
  30. changePos(changelines[i], parseInt(pos, 10));
  31. const changeItem = move < 0 ? changelines[0] : changelines[changelines.length - 1].nextSibling;
  32. parent.insertBefore(lines[i], changeItem);
  33. }
  34. }
  35. /**
  36. * Move a row up in the table.
  37. *
  38. * @param pos int row counter.
  39. *
  40. * @return false
  41. */
  42. function orderUp(pos) {
  43. if (pos !== 0) {
  44. changeOrder(pos, -1);
  45. }
  46. }
  47. /**
  48. * Move a row down in the table.
  49. *
  50. * @param pos int row counter.
  51. *
  52. * @returns false
  53. */
  54. function orderDown(pos) {
  55. const lastpos = parseInt(document.querySelector('[data-order]:last-child').getAttribute('data-order'), 10);
  56. if (pos !== lastpos) {
  57. changeOrder(pos, 1);
  58. }
  59. }
  60. (() => {
  61. /**
  62. * Plugin admin order
  63. */
  64. const orderPA = document.querySelectorAll('.order');
  65. [...orderPA].forEach((link) => {
  66. link.addEventListener('click', (event) => {
  67. event.preventDefault();
  68. if (event.target.classList.contains('order-up')) {
  69. orderUp(parseInt(event.target.parentNode.parentNode.getAttribute('data-order'), 10));
  70. } else if (event.target.classList.contains('order-down')) {
  71. orderDown(parseInt(event.target.parentNode.parentNode.getAttribute('data-order'), 10));
  72. }
  73. });
  74. });
  75. })();