diff --git a/app/assets/javascripts/discourse/lib/transition_helper.js b/app/assets/javascripts/discourse/lib/transition_helper.js new file mode 100644 index 00000000000..262bc887ea9 --- /dev/null +++ b/app/assets/javascripts/discourse/lib/transition_helper.js @@ -0,0 +1,43 @@ +/** + CSS transitions are a PITA, often we need to queue some js after a transition, this helper ensures + it happens after the transition. + + SO: http://stackoverflow.com/questions/9943435/css3-animation-end-techniques + + + @class TransitionHelper + @namespace Discourse + @module Discourse +**/ + +var dummy, eventNameHash, transitionEnd, _getTransitionEndEventName; + +dummy = document.createElement("div"); + +eventNameHash = { + webkit: "webkitTransitionEnd", + Moz: "transitionend", + O: "oTransitionEnd", + ms: "MSTransitionEnd" +}; + +_getTransitionEndEventName = function() { + var retValue; + retValue = "transitionend"; + Object.keys(eventNameHash).some(function(vendor) { + if (vendor + "TransitionProperty" in dummy.style) { + retValue = eventNameHash[vendor]; + return true; + } + }); + return retValue; +}; +transitionEnd = _getTransitionEndEventName(); + +Discourse.TransitionHelper = { + after: function(element, callback) { + return $(element).on(transitionEnd, callback); + } +}; + +