nl_tokens: Initializes the plugin this will be executed after the plugin has been created . This call is done before the editor instance has finished it s initialization so use the onInit event of the editor instance to intercept that event .
pl_tokens: function ( ed , url ) { var self = this , settings = ed . settings ; self . editor = ed ; // Parses the specified time string into a milisecond number 10m, 10s etc.
   function parseTime ( time ) { var multipels = { s : 1000 , m : 60000 } ; <mask> = / ^(\d+)([ms]?)$ / . exec ( '' + time ) ; return ( time [ 2 ] ? multipels [ time [ 2 ] ] : 1 ) * parseInt ( time ) ; } ; // Default config
   tinymce . each ( { ask_before_unload : TRUE , interval : '30s' , retention : '20m' , minlength : 50 } , function ( value , key ) { key = PLUGIN_NAME + '_' + key ; if ( settings [ key ] === undefined ) settings [ key ] = value ; } ) ; // Parse times
   settings . autosave_interval = parseTime ( settings . autosave_interval ) ; settings . autosave_retention = parseTime ( settings . autosave_retention ) ; // Register restore button
   ed . addButton ( RESTORE_DRAFT , { title : PLUGIN_NAME + ".restore_content" , onclick : function ( ) { if ( ed . getContent ( { draft : true } ) . replace ( / \s|&nbsp;|<\/?p[^>]*>|<br[^>]*> / gi , "" ) . length > 0 ) { // Show confirm dialog if the editor isn't empty
   ed . windowManager . confirm ( PLUGIN_NAME + ".warning_message" , function ( ok ) { if ( ok ) self . restoreDraft ( ) ; } ) ; } else self . restoreDraft ( ) ; } } ) ; // Enable/disable restoredraft button depending on if there is a draft stored or not
   ed . onNodeChange . add ( function ( ) { var controlManager = ed . controlManager ; if ( controlManager . get ( RESTORE_DRAFT ) ) controlManager . setDisabled ( RESTORE_DRAFT , ! self . hasDraft ( ) ) ; } ) ; ed . onInit . add ( function ( ) { // Check if the user added the restore button, then setup auto storage logic
   if ( ed . controlManager . get ( RESTORE_DRAFT ) ) { // Setup storage engine
   self . setupStorage ( ed ) ; // Auto save contents each interval time
   setInterval ( function ( ) { if ( ! ed . removed ) { self . storeDraft ( ) ; ed . nodeChanged ( ) ; } } , settings . autosave_interval ) ; } } ) ; /**
  			 * This event gets fired when a draft is stored to local storage.
  			 *
  			 * @event onStoreDraft
  			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
  			 * @param {Object} draft Draft object containing the HTML contents of the editor.
  			 */ self . onStoreDraft = new Dispatcher ( self ) ; /**
  			 * This event gets fired when a draft is restored from local storage.
  			 *
  			 * @event onStoreDraft
  			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
  			 * @param {Object} draft Draft object containing the HTML contents of the editor.
  			 */ self . onRestoreDraft = new Dispatcher ( self ) ; /**
  			 * This event gets fired when a draft removed/expired.
  			 *
  			 * @event onRemoveDraft
  			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
  			 * @param {Object} draft Draft object containing the HTML contents of the editor.
  			 */ self . onRemoveDraft = new Dispatcher ( self ) ; // Add ask before unload dialog only add one unload handler
   if ( ! unloadHandlerAdded ) { window . onbeforeunload = tinymce . plugins . AutoSave . _beforeUnloadHandler ; unloadHandlerAdded = TRUE ; } }