async-utils.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. (function () {
  2. 'use strict';
  3. var deferred = m.deferred();
  4. window._promise = deferred.promise;
  5. window.setTimeout(function() {
  6. deferred.resolve();
  7. }, 50);
  8. var getElement = function(selector) {
  9. var deferred = m.deferred();
  10. var _getElement = function() {
  11. window.setTimeout(function() {
  12. var $element = $('#misago-fixture ' + selector);
  13. if ($element.length >= 1) {
  14. deferred.resolve($element);
  15. } else {
  16. _getElement();
  17. }
  18. }, 50);
  19. };
  20. _getElement();
  21. return deferred.promise;
  22. };
  23. var queueAction = function(action) {
  24. window._promise.then(function() {
  25. window._promise = action();
  26. });
  27. };
  28. window.click = function(selector) {
  29. queueAction(function() {
  30. var deferred = m.deferred();
  31. getElement(selector).then(function(element) {
  32. window.setTimeout(function() {
  33. element.trigger('click');
  34. window.setTimeout(function() {
  35. deferred.resolve();
  36. }, 50);
  37. }, 50);
  38. });
  39. return deferred.promise;
  40. });
  41. };
  42. window.then = function(callback, timeout) {
  43. queueAction(function() {
  44. var deferred = m.deferred();
  45. window.setTimeout(function() {
  46. callback();
  47. deferred.resolve();
  48. }, timeout || 80);
  49. return deferred.promise;
  50. });
  51. };
  52. window.onElement = function(selector, callback) {
  53. queueAction(function() {
  54. var deferred = m.deferred();
  55. getElement(selector).then(function(element) {
  56. window.setTimeout(function() {
  57. callback(element);
  58. deferred.resolve();
  59. }, 50);
  60. });
  61. return deferred.promise;
  62. });
  63. };
  64. window.onCleanUp = function(callback) {
  65. var waitForFixtureCleanUp = function() {
  66. window.setTimeout(function() {
  67. var content = $.trim($('#misago-fixture').html());
  68. if (!content) {
  69. window.setTimeout(function() {
  70. callback();
  71. }, 250);
  72. } else {
  73. waitForFixtureCleanUp();
  74. }
  75. }, 50);
  76. };
  77. waitForFixtureCleanUp();
  78. };
  79. }());