anchor.diff:  
   [source, javascript]
   ----
  -function initCompleteCallback(oSettings, json) {
  +function initCompleteCallback(settings, json) {
     alert( 'DataTables has finished its initialisation.' );
   }
   ----
  
positive.code: 
  [source, javascript]
  ----
  function drawCallback(nRow, aData, iDataIndex){
    alert( 'DataTables has redrawn the table' );
  }
  ----
  
negative.code: 
  [source, javascript]
  ----
  function rowCallback( row, data, index ) {
    // Bold the grade for all 'A' grade browsers
    if ( data[4] == "A" ) {
      $('td:eq(4)', row).html( '<b>A</b>' );
    }
  }
  ----
  
  * JSP usage: `<datatables:callback type="row" function="rowCallback" />`
  * Thymeleaf usage: `<div dt:confType="callback" dt:type="row" dt:function="rowCallback">`
  
  [discrete]
  ===== StateSave callback
  
  Callback that defines how the table state is stored and where.
  
  [source, javascript]
  ----
  function stateSaveCallback( settings, data ) {
    // Send an Ajax request to the server with the state object
    $.ajax( {
      "url": "/state_save",
      "data": data,
      "dataType": "json",
      "type": "POST",
      "success": function () {}
    });
  }
  ----
  
  * JSP usage: `<datatables:callback type="statesave" function="stateSaveCallback" />`
  * Thymeleaf usage: `<div dt:confType="callback" dt:type="statesave" dt:function="stateSaveCallback">`
  
  [discrete]
  ===== StateSaveParams callback
  
  Callback which allows modification of the parameters to be saved for the DataTables state saving (<<jsp-table-stateSave, `stateSave`>>/<<tml-table-stateSave, `dt:stateSave`>>), prior to the data actually being saved. This callback is called every time DataTables requests that the state be saved. For the format of the data that is stored, please refer to the https://datatables.net/reference/option/stateSaveCallback[stateSaveCallback] documentation.
  
  [source, javascript]
  ----
  function stateSaveParamsCallback( settings, data ) {
    data.search.search = "";
  }
  ----
  
  * JSP usage: `<datatables:callback type="statesaveparams" function="stateSaveParamsCallback" />`
  * Thymeleaf usage: `<div dt:confType="callback" dt:type="statesaveparams" dt:function="stateSaveParamsCallback">`
  
  [discrete]
  ===== StateLoad callback
  
  With this callback you can define where, and how, the state of a table is loaded from. By default DataTables will load from localStorage but you might wish to use a server-side database or cookies as your implementation requirements demand. For the format of the data that is stored, please refer to the https://datatables.net/reference/option/stateSaveCallback[stateSaveCallback] documentation.
  
  [source, javascript]
  ----
  function stateLoadCallback( settings ) {
    var o;
    
    // Send an Ajax request to the server to get the data. Note that
    // this is a synchronous request since the data is expected back from the
    // function
    $.ajax( {
      "url": "/state_load",
      "async": false,
      "dataType": "json",
      "success": function (json) {
        o = json;
      }
    });
    
    return o;
  }
  ----
  
  * JSP usage: `<datatables:callback type="stateload" function="stateLoadCallback" />`
  * Thymeleaf usage: `<div dt:confType="callback" dt:type="stateload" dt:function="stateLoadCallback">`
  
  [discrete]
  ===== StateLoadParams callback
  
  Callback which allows modification of the saved state prior to loading that state. This callback is called when the table is loading state from the stored data, but prior to the settings object being modified by the saved state.
  
  [source, javascript]
  ----
  // Remove a saved filter, so saved filtering is never loaded
  function stateLoadParamsCallback( settings, data ) {
    data.search.search = "";
  }
  ----
  
  * JSP usage: `<datatables:callback type="stateloadparams" function="stateLoadParamsCallback" />`
  * Thymeleaf usage: `<div dt:confType="callback" dt:type="stateloadparams" dt:function="stateLoadParamsCallback">`
  
  [discrete]
  ===== StateLoaded callback
  
  Callback that is fired once the state has been loaded (https://datatables.net/reference/option/stateLoadCallback[stateLoadCallback]) and the saved data manipulated (if required - https://datatables.net/reference/option/stateLoadParams[stateLoadParams]).
  
  This callback is useful if you simply wish to know information from the saved state, without getting into the inner workings of where and how the state information has been saved. For example it can be useful for populating custom filter inputs.
  
  [source, javascript]
  ----
  // Remove a saved filter, so saved filtering is never loaded
  function stateLoadedCallback( settings, data ) {
    alert( 'Saved filter was: ' + data.search.search );
  }
  ----
  
  * JSP usage: `<datatables:callback type="stateloaded" function="stateLoadedCallback" />`
  * Thymeleaf usage: `<div dt:confType="callback" dt:type="stateloaded" dt:function="stateLoadedCallback">`
  
  === 7.4. Generating row IDs
  
  