ajax.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. var DBG = DBG || false
  2. function p5UI__ButtonAjax(n, eventNamespace, props) {
  3. var eventNamespace = eventNamespace || 'p5UI__ButtonAjax';
  4. var $n = jQuery(n);
  5. var state = {
  6. baseCssClassNames: n.className,
  7. href: props.href
  8. };
  9. jQuery(document).trigger(eventNamespace+':click', [n, state]);
  10. if ($n.hasClass('disabled')) {// bootstrap already prevent this action
  11. if(DBG)console.log('WARNING: btn disabled - waiting for response - Cancel?');
  12. return false;
  13. }
  14. $n.removeClass('btn-primary').addClass('btn-default disabled btn-loading');
  15. var req = superagent
  16. .post(props.href)
  17. .type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
  18. .send(props.data)
  19. .set('Accept', 'application/json')
  20. .end(function(err, res) {
  21. if(DBG)console.log('DBG: res:', res, 'res.body:', res.body);
  22. $n.removeClass('btn-default disabled btn-loading').addClass(state.baseCssClassNames);
  23. var payload;
  24. if (err || !res.ok || 'application/json' !== res.type) {
  25. payload = {type: 'warning', msg: res.body.msg || 'Request error', body: res.body};
  26. } else {
  27. payload = {type: res.body.type || 'success', msg: res.body.msg || '', body: res.body};
  28. }
  29. jQuery(document).trigger('DBG:notify', payload);
  30. jQuery(document).trigger(eventNamespace+':ajaxLoaded', [n, payload]);
  31. req = null;
  32. });
  33. // setTimeout(function() {
  34. // console.log('Test click p5UI__ButtonAjax - setTimeOut', $n, state);
  35. // jQuery(document).trigger('p5UI__ButtonAjax:ajaxLoaded', [n, state]);
  36. // $n.removeClass('btn-default disabled btn-loading').addClass(state.baseCssClassNames);
  37. // }, 1000);
  38. return false;
  39. }
  40. function p5UI__ajaxLinkClick(n, href, data) {
  41. if (!n || !href) return true;
  42. var $n = jQuery(n);
  43. if ($n.hasClass('disabled')) {// bootstrap already prevent this action
  44. if(DBG)console.log('WARNING: btn disabled - waiting for response - Cancel?');
  45. return false;
  46. }
  47. $n.removeClass('btn-primary').addClass('disabled btn-loading');
  48. var req = superagent
  49. .post(href)
  50. .type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
  51. .send(data)
  52. .set('Accept', 'application/json')
  53. .end(function(err, res) {
  54. if(DBG)console.log('DBG: res:', res, 'res.body:', res.body);
  55. $n.removeClass('disabled btn-loading').addClass(state.baseCssClassNames);
  56. var payload;
  57. if (err || !res.ok || 'application/json' !== res.type) {
  58. payload = {type: 'warning', msg: res.body.msg || 'Request error', body: res.body};
  59. } else {
  60. payload = {type: 'success', msg: res.body.msg || '', body: res.body};
  61. }
  62. if(DBG)console.log('DBG: before p5UI__notifyAjaxCallback:', payload);
  63. p5UI__notifyAjaxCallback(payload);
  64. if(DBG)console.log('DBG: before actions:', payload.body.actions);
  65. if (payload.body.actions) {
  66. for (i in payload.body.actions) {
  67. p5UI__execAction(payload.body.actions[i]);
  68. }
  69. }
  70. req = null;
  71. });
  72. return false;
  73. }
  74. function p5UI__execAction(action) {
  75. if(DBG)console.log('DBG: action:', action);
  76. if ('jsFunction' in action) {
  77. if (action['jsFunction'] in window) {
  78. if(DBG)console.log('TODO: exec "window[\''+action['jsFunction']+'\']( '+action['args']+' )"');
  79. window[ action['jsFunction'] ]( action['args'] );
  80. }
  81. else {
  82. if(DBG)console.log('BUG: jsFunction not exists "'+action['jsFunction']+'"');
  83. }
  84. } else {
  85. if(DBG)console.log('TODO: action', action);
  86. }
  87. }
  88. function p5UI__notifyAjaxCallback(data) {
  89. var notify = {};
  90. notify.type = (data && data.type)? data.type : '';
  91. notify.msg = (data && data.msg)? data.msg : '';
  92. switch (notify.type) {
  93. case 'success':
  94. if (!notify.msg) notify.msg = 'OK';
  95. break;
  96. case 'info':
  97. if (!notify.msg) notify.msg = '';
  98. break;
  99. case 'error':
  100. if (!notify.msg) notify.msg = 'Wystąpiły błędy';
  101. break;
  102. case 'warning':
  103. notify.type = 'warn';
  104. if (!notify.msg) notify.msg = 'Wystąpiły błędy';
  105. break;
  106. default:
  107. notify.msg = 'Nieznany błąd';
  108. if (data && data.errorCode) notify.msg += ' ' + data.errorCode;
  109. notify.type = '';
  110. }
  111. jQuery.notify(notify.msg, notify.type);
  112. }
  113. global.p5UI__ButtonAjax = p5UI__ButtonAjax
  114. global.p5UI__ajaxLinkClick = p5UI__ajaxLinkClick
  115. global.p5UI__execAction = p5UI__execAction
  116. global.p5UI__notifyAjaxCallback = p5UI__notifyAjaxCallback