Pjax.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. let $d = $(document);
  2. export default class Pjax {
  3. constructor(Dcat) {
  4. this.boot(Dcat)
  5. }
  6. boot(Dcat) {
  7. let container = Dcat.config.pjax_container_selector,
  8. formContainer = 'form[pjax-container]',
  9. scriptContainer = 'script[data-exec-on-popstate]';
  10. $.pjax.defaults.timeout = 5000;
  11. $.pjax.defaults.maxCacheLength = 0;
  12. $('a:not(a[target="_blank"])').click(function (event) {
  13. $.pjax.click(event, container, { fragment: 'body' });
  14. });
  15. $d.on('pjax:timeout', function (event) {
  16. event.preventDefault();
  17. });
  18. $d.off('submit', formContainer).on('submit', formContainer, function (event) {
  19. $.pjax.submit(event, container)
  20. });
  21. $d.on("pjax:popstate", function () {
  22. $d.one("pjax:end", function (event) {
  23. $(event.target).find(scriptContainer).each(function () {
  24. $.globalEval(this.text || this.textContent || this.innerHTML || '');
  25. });
  26. });
  27. });
  28. $d.on('pjax:send', function (xhr) {
  29. if (xhr.relatedTarget && xhr.relatedTarget.tagName && xhr.relatedTarget.tagName.toLowerCase() === 'form') {
  30. $(formContainer + ' :submit').button('loading');
  31. }
  32. Dcat.NP.start();
  33. });
  34. $d.on('pjax:complete', function (xhr) {
  35. if (xhr.relatedTarget && xhr.relatedTarget.tagName && xhr.relatedTarget.tagName.toLowerCase() === 'form') {
  36. $(formContainer + ' :submit').button('reset')
  37. }
  38. });
  39. $d.on('pjax:loaded', () => {
  40. Dcat.NP.done();
  41. });
  42. }
  43. }