Windows 8 Style jQuery Data Table Decorator - Metreaux Tables

File Size: 104KB
Views Total: 5871
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   
Windows 8 Style jQuery Data Table Decorator - Metreaux Tables

Metreaux Tables is a jQuery plugin to create nice, clean, themeable, andmodern Windows 8 UI Style data tables with the power of DataTables jQuery javascript library.

How to use it:

1. Load the necessary javascript library files in the html document.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js"></script> 
<script type="text/javascript" src="js/metreaux-table.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/modernizr/2.7.1/modernizr.min.js"></script>

2. Load the required CSS files in the head section of the html document.

<link rel="stylesheet" href="css/jquery.dataTables.css" />
<link rel="stylesheet" href="css/metreaux.css" />
<link rel="stylesheet" href="css/metreaux-table.css" />
<link rel="stylesheet" href="css/metreaux-table-theme-default.css" />

3. Create the template for the data table.

<table id="js-table">
<thead>
<tr> </tr>
</thead>
<tbody>
<tr> </tr>
</tbody>
</table>

4. Load data to table and call the metreaux table decorator.

$().ready( function() {
// VARs
 
// Stores a reference to the datatables object for a table;
// The name is arbitrary.
var MyMetreauxTable;

// Get a local copy of the global for convenience
var MT = MetreauxTable;

// Convenience elements for pagination display
var _pagingTwoButtons = "two_button";
var _pagingFullNumbers = "full_numbers";
var MyPagination = _pagingTwoButtons;

/**
 *  FUNCTIONS 
 *  
 *  The functions herein are just for the demo page. You don't
 *  need this to use Metreaux Table on your tables.
 *
 *  DEMO_applyTheme: 
 *  operates on the UI to change the colors
 *
 *  DEMO_armThemes: 
 *  sets events listeners for end-user selection of theme
 *
 *  DEMO_armToggle:
 *  sets event to handle end-user requests to toggle the table pagination mode
 *  
 *  DEMO_decorate: 
 *  operates on the data in the table to emphasize some rows
 *
 *  DEMO_getTheme: 
 *  fetches a themed CSS file and applies to the document
 *
 *  DEMO_hide:
 *  Hides the demo page content
 *
 *  DEMO_makeTable:
 *  Enacts the Jquery plugin, DataTables, onto an HTML table
 *  using static data for demo display.
 *
 *  DEMO_show:
 *  Shows the demo page content
 *
 *  DEMO_togglePagination:
 *  Flips the pagination method control string from one variety
 *  to the other
 *  
 */

var DEMO_applyTheme = function( e ) {
// DEMO page only
// Apply the selected theme
DEMO_hide();

// Set the active slection in the UI
$('.features li').removeClass('selected');
$(e.currentTarget).parent('li').addClass('selected');

// Get the theme name from the UI content and inject 
// hyphens for any spaces   
var theme = $(e.currentTarget).prop('rel');
theme = theme.toLowerCase();
theme = theme.replace(/\s+/g, "-");

// Go get the theme file and attach it.
DEMO_getTheme( theme );

DEMO_show( 1000 );
};

var DEMO_armThemes = function() {
// DEMO page only
// Arm events for end-user iniitiated theme changes
$('.features li a').on( 'click', function ( e ) {
e.preventDefault();
DEMO_applyTheme( e );
});
};

var DEMO_armToggle = function() {
// DEMO page only
// Arm event for toggling the pagination model
$('#js-toggle').on( 'click', function ( e ) {
e.preventDefault();
if ( MyMetreauxTable ) {

// Close the curtain
DEMO_hide();

// Toggle the pagination controller
DEMO_togglePagination();

// Eliminate the table (but retain it int he DOM in native HTML form)
MyMetreauxTable.fnDestroy();

// Re-instance the table
DEMO_makeTable();
// Bang the table width
$('#js-table').css( 'width', '100%');

// Re-decorate the data
DEMO_decorate();

// Re-decorate the table
MT.init("#js-table");

// Open the curtain
DEMO_show( 750 );
};
});
};

var DEMO_decorate = function() {
// DEMO page only
// Display division winners in bold face, themed font

// Get all TDs in the Games Back column
var gamesBack = $('td.games');
// Grep the array returning only the division winners
var divWinners = $.grep( gamesBack, function( games, i ){
   return $(games).text() == "-";
});
// decorate all the columns of a division winners' row
$(divWinners).parent().children().addClass('winner');
};

var DEMO_getTheme = function( theme ) {
// DEMO page only
// Retrieve and apply a themed CSS file using pure JS
var fileref = document.createElement("link");
fileref.rel = "stylesheet";
fileref.type = "text/css";
fileref.href = "css/" + theme + ".css";
document.getElementsByTagName("head")[0].appendChild(fileref)
};

var DEMO_hide = function( duration ) {
var d = duration || 100;
$('.page').fadeOut( d );
};

var DEMO_show = function( duration ) {
var d = duration || 100;
$('.page').fadeIn( d );
};

var DEMO_togglePagination = function() {
// Swap the pagination control property's value
if ( MyPagination == _pagingTwoButtons ) {

MyPagination  =  _pagingFullNumbers;
} else {

MyPagination  =  _pagingTwoButtons;
};
};

/**
 *  This code serves as the data source for the demo table. 
 *  The variable name 'MyMetreauxTable' is arbitrary, it isn't used for
 *  later references to the table.  
 *  
 *  The table's ID is also arbitrary, but is essential to dataTables and
 *  this script.
 *
 */

var DEMO_makeTable = function() {
// Make a dataTables table
MyMetreauxTable = $('#js-table').dataTable( {
"aaData": [
["Atlanta Braves", "NL", "East", 96, 66, ".593", "-"],
["Washington Nationals", "NL", "East", 86, 76, ".531", "10"],
["New York Mets", "NL", "East", 74, 86, ".457", "22"],
["Philadelphia Phillies", "NL", "East", 73, 89, ".451", "23"],
["Miami Marlins", "NL", "East", 62, 100, ".383", "34"],
["St. Louis Cardinals", "NL", "Central", 97, 65, ".599", "-"],
["Pittsburgh Pirates", "NL", "Central", 94, 68, ".580", "3"],
["Cincinnati Reds", "NL", "Central", 90, 72, ".556", "7"],
["Milwaukee Brewers", "NL", "Central", 74, 88, ".457", "23"],
["Chicago Cubs", "NL", "Central", 66, 96, ".407", "31"],
["Los Angeles Dodgers", "NL", "West", 92, 70, ".568", "-"],
["Arizona Diamondbacks", "NL", "West", 81, 81, ".500", "11"],
["San Francisco Giants", "NL", "West", 76, 86, ".469", "16"],
["San Diego Padres", "NL", "West", 76, 86, ".469", "16"],
["Colorado Rockies", "NL", "West", 74, 88, ".457", "18"],

],
"aoColumns": [
{ "sTitle": "Team", "sClass": "width team" },
{ "sTitle": "League", "sClass": "align-text center" },
{ "sTitle": "Division", "sClass": "align-text center width division" },
{ "sTitle": "Wins", "sClass": "align-text right width record" },
{ "sTitle": "Losses", "sClass": "align-text right width record" },
{ "sTitle": "Percentage", "sClass": "align-text right" },
{ "sTitle": "Games Back", "sClass": "align-text right games" },
],
"aaSorting": [
[ 6, "asc" ],
[ 3, "desc" ]
],
"sPaginationType": MyPagination  // Pagination model; you ought not use a global :)
} );
};

// INVOCATIONs

// Now actually make the table
DEMO_makeTable();

// Decorate data in tables: 
//  Adds bold face the baseball winning teams
DEMO_decorate();

// Arm the Change Theme events: 
//  allow the end user to select a theme to apply to the demo table
DEMO_armThemes();

// Arm the Toggle Pagination event: 
//  allow the end user to switch to the other pagination model
DEMO_armToggle();

// Call the Metreaux Table decorator for a specific table
MT.init("#js-table");

// NOTE:
// For additional tables, just apply the DataTables plugin to them (not shown)
// and then apply the Metreaux Table decorator as shown below:
// MT.init('#my-second-table'); 
});

This awesome jQuery plugin is developed by netaisllc. For more Advanced Usages, please check the demo page or visit the official website.