/*
|
* tablesaw: A set of plugins for responsive tables
|
* minimap: a set of dots to show which columns are currently visible.
|
* Copyright (c) 2013 Filament Group, Inc.
|
* MIT License
|
*/
|
|
;(function( win, $, undefined ){
|
|
var MM = {
|
attr: {
|
init: 'data-tablesaw-minimap'
|
}
|
};
|
|
function createMiniMap( $table ){
|
|
var $btns = $( '<div class="tablesaw-advance minimap">' ),
|
$dotNav = $( '<ul class="tablesaw-advance-dots">' ).appendTo( $btns ),
|
hideDot = 'tablesaw-advance-dots-hide',
|
$headerCells = $table.find( 'thead th' );
|
|
// populate dots
|
$headerCells.each(function(){
|
$dotNav.append( '<li><i></i></li>' );
|
});
|
|
$btns.appendTo( $table.prev().filter( '.tablesaw-bar' ) );
|
|
function showMinimap( $table ) {
|
var mq = $table.attr( MM.attr.init );
|
return !mq || win.matchMedia && win.matchMedia( mq ).matches;
|
}
|
|
function showHideNav(){
|
if( !showMinimap( $table ) ) {
|
$btns.hide();
|
return;
|
}
|
$btns.show();
|
|
// show/hide dots
|
var dots = $dotNav.find( "li" ).removeClass( hideDot );
|
$table.find( "thead th" ).each(function(i){
|
if( $( this ).css( "display" ) === "none" ){
|
dots.eq( i ).addClass( hideDot );
|
}
|
});
|
}
|
|
// run on init and resize
|
showHideNav();
|
$( win ).on( "resize", showHideNav );
|
|
|
$table
|
.bind( "tablesawcolumns.minimap", function(){
|
showHideNav();
|
})
|
.bind( "tablesawdestroy.minimap", function(){
|
var $t = $( this );
|
|
$t.prev().filter( '.tablesaw-bar' ).find( '.tablesaw-advance' ).remove();
|
$( win ).off( "resize", showHideNav );
|
|
$t.unbind( ".minimap" );
|
});
|
}
|
|
|
|
// on tablecreate, init
|
$( document ).on( "tablesawcreate", function( e, Tablesaw ){
|
|
if( ( Tablesaw.mode === 'swipe' || Tablesaw.mode === 'columntoggle' ) && Tablesaw.$table.is( '[ ' + MM.attr.init + ']' ) ){
|
createMiniMap( Tablesaw.$table );
|
}
|
|
} );
|
|
}( this, jQuery ));
|