function notifyProgress(runner, event, phase, data) {
        runInNextPostDigestOrNow(function() {
          var callbacks = findCallbacks(parentNode, node, event);
          if (callbacks.length) {
            // do not optimize this call here to RAF because
            // we don't know how heavy the callback code here will
            // be and if this code is buffered then this can
            // lead to a performance regression.
            $$rAF(function() {
              forEach(callbacks, function(callback) {
                callback(element, phase, data);
              });
              cleanupEventListeners(phase, node);
            });
          } else {
            cleanupEventListeners(phase, node);
          }
        });
        runner.progress(event, phase, data);
      }
@ngdoc function
@name pascalprecht.translate.$translateDefaultInterpolation#interpolate
@methodOf pascalprecht.translate.$translateDefaultInterpolation

@description
Interpolates given value agains given interpolate params using angulars
`$interpolate` service.

Since AngularJS 1.5, `value` must not be a string but can be anything input.

@param {string} value translation
@param {object} [interpolationParams={}] interpolation params
@param {string} [context=undefined] current context (filter, directive, service)
@param {string} [sanitizeStrategy=undefined] sanitize strategy (use default unless set)
@param {string} translationId current translationId

@returns {string} interpolated string