Pjax.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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).find('[type="submit"],.submit').buttonLoading();
  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).find('[type="submit"],.submit').buttonLoading(false)
  37. }
  38. var $body = $('body');
  39. // 移除遮罩层
  40. $(".modal-backdrop").remove();
  41. $body.removeClass("modal-open");
  42. // 刷新页面后需要重置modal弹窗设置的间隔
  43. if ($body.css('padding-right')) {
  44. $body.css('padding-right', '');
  45. }
  46. });
  47. $d.on('pjax:loaded', () => {
  48. Dcat.NP.done();
  49. });
  50. }
  51. }