(function(factory) {


  if (typeof define === 'function' && define.amd) {


    // AMD. Register as an anonymous module.


    define(['jquery'], factory);


  } else if (typeof module === 'object' && module.exports) {


    // Node/CommonJS


    module.exports = factory(require('jquery'));


  } else {


    // Browser globals


    factory(window.jQuery);


  }


}(function($) {


  // Extends plugins for adding hello.


  //  - plugin is external module for customizing.


  $.extend($.summernote.plugins, {


    /**


     * @param {Object} context - context object has status of editor.


     */


    'hello': function(context) {


      var self = this;





      // ui has renders to build ui elements.


      //  - you can create a button with `ui.button`


      var ui = $.summernote.ui;





      // add hello button


      context.memo('button.hello', function() {


        // create button


        var button = ui.button({


          contents: '<i class="fa fa-child"/> Hello',


          tooltip: 'hello',


          click: function() {


            self.$panel.show();


            self.$panel.hide(500);


            // invoke insertText method with 'hello' on editor module.


            context.invoke('editor.insertText', 'hello');


          },


        });





        // create jQuery object from button instance.


        var $hello = button.render();


        return $hello;


      });





      // This events will be attached when editor is initialized.


      this.events = {


        // This will be called after modules are initialized.


        'summernote.init': function(we, e) {


          // eslint-disable-next-line


          console.log('summernote initialized', we, e);


        },


        // This will be called when user releases a key on editable.


        'summernote.keyup': function(we, e) {


          // eslint-disable-next-line


          console.log('summernote keyup', we, e);


        },


      };





      // This method will be called when editor is initialized by $('..').summernote();


      // You can create elements for plugin


      this.initialize = function() {


        this.$panel = $('<div class="hello-panel"/>').css({


          position: 'absolute',


          width: 100,


          height: 100,


          left: '50%',


          top: '50%',


          background: 'red',


        }).hide();





        this.$panel.appendTo('body');


      };





      // This methods will be called when editor is destroyed by $('..').summernote('destroy');


      // You should remove elements on `initialize`.


      this.destroy = function() {


        this.$panel.remove();


        this.$panel = null;


      };


    },


  });


}));


