text: (function () {
  var save = (function () {
    'use strict';
  
    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  
    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  
    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  
    var enableWhenDirty = function (editor) {
      return editor.getParam('save_enablewhendirty', true);
    };
    var hasOnSaveCallback = function (editor) {
      return !!editor.getParam('save_onsavecallback');
    };
    var hasOnCancelCallback = function (editor) {
      return !!editor.getParam('save_oncancelcallback');
    };
    var $_7p4p89izjfuvixre = {
      enableWhenDirty: enableWhenDirty,
      hasOnSaveCallback: hasOnSaveCallback,
      hasOnCancelCallback: hasOnCancelCallback
    };
  
    var displayErrorMessage = function (editor, message) {
      editor.notificationManager.open({
        text: editor.translate(message),
        type: 'error'
      });
    };
    var save = function (editor) {
      var formObj;
      formObj = global$1.DOM.getParent(editor.id, 'form');
      if ($_7p4p89izjfuvixre.enableWhenDirty(editor) && !editor.isDirty()) {
        return;
      }
      editor.save();
      if ($_7p4p89izjfuvixre.hasOnSaveCallback(editor)) {
        editor.execCallback('save_onsavecallback', editor);
        editor.nodeChanged();
        return;
      }
      if (formObj) {
        editor.setDirty(false);
        if (!formObj.onsubmit || formObj.onsubmit()) {
          if (typeof formObj.submit === 'function') {
            formObj.submit();
          } else {
            displayErrorMessage(editor, 'Error: Form submit field collision.');
          }
        }
        editor.nodeChanged();
      } else {
        displayErrorMessage(editor, 'Error: No form element found.');
      }
    };
    var cancel = function (editor) {
      var h = global$2.trim(editor.startContent);
      if ($_7p4p89izjfuvixre.hasOnCancelCallback(editor)) {
        editor.execCallback('save_oncancelcallback', editor);
        return;
      }
      editor.setContent(h);
      editor.undoManager.clear();
      editor.nodeChanged();
    };
    var $_ch8s3ciwjfuvixra = {
      save: save,
      cancel: cancel
    };
  
    var register = function (editor) {
      editor.addCommand('mceSave', function () {
        $_ch8s3ciwjfuvixra.save(editor);
      });
      editor.addCommand('mceCancel', function () {
        $_ch8s3ciwjfuvixra.cancel(editor);
      });
    };
    var $_guzf3ivjfuvixr8 = { register: register };
  
    var stateToggle = function (editor) {
      return function (e) {
        var ctrl = e.control;
        editor.on('nodeChange dirty', function () {
          ctrl.disabled($_7p4p89izjfuvixre.enableWhenDirty(editor) && !editor.isDirty());
        });
      };
    };
    var register$1 = function (editor) {
      editor.addButton('save', {
        icon: 'save',
        text: 'Save',
        cmd: 'mceSave',
        disabled: true,
        onPostRender: stateToggle(editor)
      });
      editor.addButton('cancel', {
        text: 'Cancel',
        icon: false,
        cmd: 'mceCancel',
        disabled: true,
        onPostRender: stateToggle(editor)
      });
      editor.addShortcut('Meta+S', '', 'mceSave');
    };
    var $_96exfuj0jfuvixrf = { register: register$1 };
  
    global.add('save', function (editor) {
      $_96exfuj0jfuvixrf.register(editor);
      $_guzf3ivjfuvixr8.register(editor);
    });
    function Plugin () {
    }
  
    return Plugin;
  
  }());
  })();
  