text: /**
   * ErrorReporter.js
   *
   * Released under LGPL License.
   * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
   *
   * License: http://www.tinymce.com/license
   * Contributing: http://www.tinymce.com/contributing
   */
  
  /**
   * Various error reporting helper functions.
   *
   * @class tinymce.ErrorReporter
   * @private
   */
  define(
    'tinymce.core.ErrorReporter',
    [
      'global!window',
      'tinymce.core.AddOnManager'
    ],
    function (window, AddOnManager) {
      var PluginManager = AddOnManager.PluginManager;
  
      var resolvePluginName = function (targetUrl, suffix) {
        for (var name in PluginManager.urls) {
          var matchUrl = PluginManager.urls[name] + '/plugin' + suffix + '.js';
          if (matchUrl === targetUrl) {
            return name;
          }
        }
  
        return null;
      };
  
      var pluginUrlToMessage = function (editor, url) {
        var plugin = resolvePluginName(url, editor.suffix);
        return plugin ?
          'Failed to load plugin: ' + plugin + ' from url ' + url :
          'Failed to load plugin url: ' + url;
      };
  
      var displayNotification = function (editor, message) {
        editor.notificationManager.open({
          type: 'error',
          text: message
        });
      };
  
      var displayError = function (editor, message) {
        if (editor._skinLoaded) {
          displayNotification(editor, message);
        } else {
          editor.on('SkinLoaded', function () {
            displayNotification(editor, message);
          });
        }
      };
  
      var uploadError = function (editor, message) {
        displayError(editor, 'Failed to upload image: ' + message);
      };
  
      var pluginLoadError = function (editor, url) {
        displayError(editor, pluginUrlToMessage(editor, url));
      };
  
      var initError = function (message) {
        var console = window.console;
        if (console && !window.test) { // Skip test env
          if (console.error) {
            console.error.apply(console, arguments);
          } else {
            console.log.apply(console, arguments);
          }
        }
      };
  
      return {
        pluginLoadError: pluginLoadError,
        uploadError: uploadError,
        displayError: displayError,
        initError: initError
      };
    }
  );