/*! ColVis 1.1.2
* ©2010-2015 SpryMedia Ltd - datatables.net/license
*/
/**
* @summary ColVis
* @description Controls for column visibility in DataTables
* @version 1.1.2
* @file dataTables.colReorder.js
* @author SpryMedia Ltd (www.sprymedia.co.uk)
* @contact www.sprymedia.co.uk/contact
* @copyright Copyright 2010-2015 SpryMedia Ltd.
*
* This source file is free software, available under the following license:
* MIT license - http://datatables.net/license/mit
*
* This source file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
*
* For details please refer to: http://www.datatables.net
*/
(function(window, document, undefined) {
var factory = function( $, DataTable ) {
"use strict";
/**
* ColVis provides column visibility control for DataTables
*
* @class ColVis
* @constructor
* @param {object} DataTables settings object. With DataTables 1.10 this can
* also be and API instance, table node, jQuery collection or jQuery selector.
* @param {object} ColVis configuration options
*/
var ColVis = function( oDTSettings, oInit )
{
/* Santiy check that we are a new instance */
if ( !this.CLASS || this.CLASS != "ColVis" )
{
alert( "Warning: ColVis must be initialised with the keyword 'new'" );
}
if ( typeof oInit == 'undefined' )
{
oInit = {};
}
var camelToHungarian = $.fn.dataTable.camelToHungarian;
if ( camelToHungarian ) {
camelToHungarian( ColVis.defaults, ColVis.defaults, true );
camelToHungarian( ColVis.defaults, oInit );
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Public class variables
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
* @namespace Settings object which contains customisable information for
* ColVis instance. Augmented by ColVis.defaults
*/
this.s = {
/**
* DataTables settings object
* @property dt
* @type Object
* @default null
*/
"dt": null,
/**
* Customisation object
* @property oInit
* @type Object
* @default passed in
*/
"oInit": oInit,
/**
* Flag to say if the collection is hidden
* @property hidden
* @type boolean
* @default true
*/
"hidden": true,
/**
* Store the original visibility settings so they could be restored
* @property abOriginal
* @type Array
* @default []
*/
"abOriginal": []
};
/**
* @namespace Common and useful DOM elements for the class instance
*/
this.dom = {
/**
* Wrapper for the button - given back to DataTables as the node to insert
* @property wrapper
* @type Node
* @default null
*/
"wrapper": null,
/**
* Activation button
* @property button
* @type Node
* @default null
*/
"button": null,
/**
* Collection list node
* @property collection
* @type Node
* @default null
*/
"collection": null,
/**
* Background node used for shading the display and event capturing
* @property background
* @type Node
* @default null
*/
"background": null,
/**
* Element to position over the activation button to catch mouse events when using mouseover
* @property catcher
* @type Node
* @default null
*/
"catcher": null,
/**
* List of button elements
* @property buttons
* @type Array
* @default []
*/
"buttons": [],
/**
* List of group button elements
* @property groupButtons
* @type Array
* @default []
*/
"groupButtons": [],
/**
* Restore button
* @property restore
* @type Node
* @default null
*/
"restore": null
};
/* Store global reference */
ColVis.aInstances.push( this );
/* Constructor logic */
this.s.dt = $.fn.dataTable.Api ?
new $.fn.dataTable.Api( oDTSettings ).settings()[0] :
oDTSettings;
this._fnConstruct( oInit );
return this;
};
ColVis.prototype = {
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Public methods
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
* Get the ColVis instance's control button so it can be injected into the
* DOM
* @method button
* @returns {node} ColVis button
*/
button: function ()
{
return this.dom.wrapper;
},
/**
* Alias of `rebuild` for backwards compatibility
* @method fnRebuild
*/
"fnRebuild": function ()
{
this.rebuild();
},
/**
* Rebuild the list of buttons for this instance (i.e. if there is a column
* header update)
* @method fnRebuild
*/
rebuild: function ()
{
/* Remove the old buttons */
for ( var i=this.dom.buttons.length-1 ; i>=0 ; i-- ) {
this.dom.collection.removeChild( this.dom.buttons[i] );
}
this.dom.buttons.splice( 0, this.dom.buttons.length );
this.dom.groupButtons.splice(0, this.dom.groupButtons.length);
if ( this.dom.restore ) {
this.dom.restore.parentNode( this.dom.restore );
}
/* Re-add them (this is not the optimal way of doing this, it is fast and effective) */
this._fnAddGroups();
this._fnAddButtons();
/* Update the checkboxes */
this._fnDrawCallback();
},
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Private methods (they are of course public in JS, but recommended as private)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
* Constructor logic
* @method _fnConstruct
* @returns void
* @private
*/
"_fnConstruct": function ( init )
{
this._fnApplyCustomisation( init );
var that = this;
var i, iLen;
this.dom.wrapper = document.createElement('div');
this.dom.wrapper.className = "ColVis";
this.dom.button = $( '', {
'class': !this.s.dt.bJUI ?
"ColVis_Button ColVis_MasterButton" :
"ColVis_Button ColVis_MasterButton ui-button ui-state-default"
} )
.append( ''+this.s.buttonText+'' )
.bind( this.s.activate=="mouseover" ? "mouseover" : "click", function (e) {
e.preventDefault();
that._fnCollectionShow();
} )
.appendTo( this.dom.wrapper )[0];
this.dom.catcher = this._fnDomCatcher();
this.dom.collection = this._fnDomCollection();
this.dom.background = this._fnDomBackground();
this._fnAddGroups();
this._fnAddButtons();
/* Store the original visibility information */
for ( i=0, iLen=this.s.dt.aoColumns.length ; i