user.query.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0
  2. "use strict";
  3. /* jshint esversion:6, strict:global */
  4. function init_draggable() {
  5. if (!window.context) {
  6. if (window.console) {
  7. console.log('FreshRSS user query waiting for JS…');
  8. }
  9. setTimeout(init_draggable, 50);
  10. return;
  11. }
  12. let source;
  13. const configureQueries = document.querySelector('#configureQueries');
  14. configureQueries.addEventListener('dragstart', event => {
  15. source = event.target.closest('[draggable="true"]');
  16. event.dataTransfer.setData('text/html', source.outerHTML);
  17. event.dataTransfer.effectAllowed = 'move';
  18. });
  19. configureQueries.addEventListener('dragover', event => event.preventDefault());
  20. configureQueries.addEventListener('dragleave', event => event.preventDefault());
  21. configureQueries.addEventListener('drop', event => {
  22. event.preventDefault();
  23. event.stopPropagation();
  24. const dropQuery = event.target.closest('[draggable="true"]');
  25. if (null === dropQuery) {
  26. source.remove();
  27. configureQueries.querySelector('legend').insertAdjacentHTML('afterend', event.dataTransfer.getData('text/html'));
  28. } else if (source !== dropQuery) {
  29. source.remove();
  30. dropQuery.insertAdjacentHTML('afterend', event.dataTransfer.getData('text/html'));
  31. }
  32. });
  33. // This is needed to work around a Firefox bug → https://bugzilla.mozilla.org/show_bug.cgi?id=800050
  34. configureQueries.addEventListener('focusin', event => {
  35. event.target.closest('input[id^="queries_"][id$="_name"]').select();
  36. });
  37. }
  38. if (document.readyState && document.readyState !== 'loading') {
  39. init_draggable();
  40. } else if (document.addEventListener) {
  41. document.addEventListener('DOMContentLoaded', event => init_draggable(), false);
  42. }
  43. // @license-end