integration.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0
  2. 'use strict';
  3. const init_integration = function () {
  4. if (!window.context) {
  5. if (window.console) {
  6. console.log('FreshRSS integration waiting for JS…');
  7. }
  8. setTimeout(init_integration, 50);
  9. return;
  10. }
  11. let shares = document.querySelectorAll('.group-share').length;
  12. document.querySelector('.share.add').addEventListener('click', event => {
  13. const shareTypes = event.target.closest('.group-controls').querySelector('select');
  14. const shareType = shareTypes.options[shareTypes.selectedIndex];
  15. const template = document.getElementById(shareType.getAttribute('data-form') + '-share');
  16. let newShare = template.content.cloneNode(true).querySelector('fieldset').outerHTML;
  17. newShare = newShare.replace(/##label##/g, shareType.text);
  18. newShare = newShare.replace(/##type##/g, shareType.value);
  19. newShare = newShare.replace(/##help##/g, shareType.getAttribute('data-help'));
  20. newShare = newShare.replace(/##key##/g, shares);
  21. newShare = newShare.replace(/##method##/g, shareType.getAttribute('data-method'));
  22. newShare = newShare.replace(/##field##/g, shareType.getAttribute('data-field'));
  23. event.target.closest('fieldset').insertAdjacentHTML('beforebegin', newShare);
  24. shares++;
  25. });
  26. document.querySelector('.post').addEventListener('click', event => {
  27. if (!event.target || !event.target.closest) {
  28. return;
  29. }
  30. const deleteButton = event.target.closest('.remove');
  31. if (null === deleteButton || !deleteButton.closest) {
  32. return;
  33. }
  34. const share = deleteButton.closest('.group-share');
  35. const form = deleteButton.closest('form');
  36. if (!share.remove || !form.submit) {
  37. return;
  38. }
  39. share.remove();
  40. form.submit();
  41. });
  42. };
  43. if (document.readyState && document.readyState !== 'loading') {
  44. init_integration();
  45. } else if (document.addEventListener) {
  46. document.addEventListener('DOMContentLoaded', event => init_integration(), false);
  47. }
  48. // @license-end