async-utils.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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.fillIn = function(selector, value) {
  43. queueAction(function() {
  44. var deferred = m.deferred();
  45. getElement(selector).then(function(element) {
  46. window.setTimeout(function() {
  47. element.trigger('click');
  48. element.focus();
  49. element.trigger('keyDown');
  50. element.val(value || '');
  51. element.trigger('keyUp');
  52. element.trigger('input');
  53. element.trigger('change');
  54. window.setTimeout(function() {
  55. deferred.resolve();
  56. }, 50);
  57. }, 50);
  58. });
  59. return deferred.promise;
  60. });
  61. };
  62. window.then = function(callback, timeout) {
  63. queueAction(function() {
  64. var deferred = m.deferred();
  65. window.setTimeout(function() {
  66. callback();
  67. deferred.resolve();
  68. }, timeout || 80);
  69. return deferred.promise;
  70. });
  71. };
  72. window.waitForElement = function(selector) {
  73. queueAction(function() {
  74. var deferred = m.deferred();
  75. getElement(selector).then(function() {
  76. window.setTimeout(function() {
  77. deferred.resolve();
  78. }, 50);
  79. });
  80. return deferred.promise;
  81. });
  82. };
  83. window.waitForElementRemoval = function(selector) {
  84. queueAction(function() {
  85. var deferred = m.deferred();
  86. var _testElement = function() {
  87. window.setTimeout(function() {
  88. if (!$(selector).length) {
  89. deferred.resolve();
  90. } else {
  91. _testElement();
  92. }
  93. }, 50);
  94. };
  95. _testElement();
  96. return deferred.promise;
  97. });
  98. };
  99. window.onElement = function(selector, callback) {
  100. queueAction(function() {
  101. var deferred = m.deferred();
  102. getElement(selector).then(function(element) {
  103. window.setTimeout(function() {
  104. callback(element);
  105. deferred.resolve();
  106. }, 50);
  107. });
  108. return deferred.promise;
  109. });
  110. };
  111. window.onCleanUp = function(callback) {
  112. var waitForFixtureCleanUp = function() {
  113. window.setTimeout(function() {
  114. var content = $.trim($('#misago-fixture').html());
  115. if (!content) {
  116. window.setTimeout(function() {
  117. callback();
  118. }, 250);
  119. } else {
  120. waitForFixtureCleanUp();
  121. }
  122. }, 50);
  123. };
  124. waitForFixtureCleanUp();
  125. };
  126. }());