<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"  xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>DataTables Blog</title>
		<link>http://www.datatables.net/blog</link>
		<language>en-us</language>
		<description>Tutorials and news about DataTables</description>
		<atom:link href="http://www.datatables.net/rss_blog.xml" rel="self" type="application/rss+xml" />
	
<item>
	<title>Microsoft CDN</title>
	<description><![CDATA[ <p>When using Javascript libraries such as DataTables you want your users to be able to get the software as quickly as possible and one way to help achieve this goal is to use a <a href="http://en.wikipedia.org/wiki/Content_delivery_network">Content Delivery Network (CDN)</a>. CDNs provide edge servers that are tuned to provide media files with very low latency to web-browsers, and as a user receives a file from the CDN the browser will cache it for reuse. This means that different sites using the same Javascript library can share a large performance improvement since the browser does not need to download the same file from different servers for each site.</p>

<p>Microsoft have very kindly offered to <a href="http://www.asp.net/ajaxlibrary/CDN.ashx#jQuery_DataTables_Releases_on_the_CDN_6">host DataTables on their CDN</a> allowing you, as developers using DataTables, to take advantage of their CDN and all the advantages that go with it. Scott Guthrie of Microsoft has <a href="http://weblogs.asp.net/scottgu/archive/2009/09/15/announcing-the-microsoft-ajax-cdn.aspx">a blog post introducing the Microsoft CDN</a> and explaining how it works.</p>

<p>With DataTables available on the <a href="http://www.asp.net/ajaxlibrary/CDN.ashx">Microsoft CDN</a>, it is now wonderfully easy to use DataTables on your site, while also taking advantage of the benefits of using a CDN as media repository. You don't even need to include any media files on your own server!</p>

<p>To include DataTables on your page simply include the following HTML:</p>

<pre class="brush: js; font-size: 75%">
&lt;!-- DataTables CSS --&gt;
&lt;link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css"&gt;

&lt;!-- jQuery --&gt;
&lt;script type="text/javascript" charset="utf8" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"&gt;&lt;/script&gt;

&lt;!-- DataTables --&gt;
&lt;script type="text/javascript" charset="utf8" src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"&gt;&lt;/script&gt;
</pre>

<p>Then you can initialise DataTables as you would when including the script from any other server:</p>

<pre class="brush: js; font-size: 75%">
$(document).ready(function(){
  $('#example').dataTable();
});
</pre>
<p><a href="http://www.datatables.net/blog/Microsoft_CDN">Continue reading...</a></p> ]]></description>
	<pubDate>Thu, 27 Sep 2012 06:55:29 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Microsoft_CDN</guid>
	<link>http://www.datatables.net//blog/Microsoft_CDN</link>
</item>

<item>
	<title>Orthogonal data</title>
	<description><![CDATA[ <p>Data is complex. Not only will data displayed in your tables have rules relating how each data point corresponds to the others in your table, but also each data point itself can take multiple forms. Consider for example currency data; for display it might be shown formatted with a currency sign and thousand separators, while sorting should happen numerically and searching on the data will accept either form. In this post we'll examine how DataTables can use different forms of single data points to present a complex data set in an intuitive manner for the user of the table.</p>

<p>DataTables has four built-in data operations, each of which can potentially use an independent data source. These four operations are:</p>

<ul>
	<li>Display</li>
	<li>Sorting</li>
	<li>Type detection</li>
	<li>Filtering</li>
</ul>

<p>By default DataTables will use the same data for all four operations, but with DataTables 1.9 this can easily be modified.</p>
<p><a href="http://www.datatables.net/blog/Orthogonal_data">Continue reading...</a></p> ]]></description>
	<pubDate>Thu, 09 Aug 2012 09:09:10 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Orthogonal_data</guid>
	<link>http://www.datatables.net//blog/Orthogonal_data</link>
</item>

<item>
	<title>Extended data source options with DataTables</title>
	<description><![CDATA[ <p>Welcome to the new DataTables blog! I would like to use this section of the site to introduce various topics which are useful for DataTables and give tutorials about how to integrate some of the more advanced aspects of DataTables into your site.</p>

<p>For my first post, I'd like to introduce one of the <a href="http://www.datatables.net/new/1.8">new features</a> in the forthcoming 1.8 release of DataTables (which is currently in beta: <a href="http://www.datatables.net/download">available here</a>) - that of extended data source options. This new feature in DataTables 1.8 relaxes the data formatting constraints that DataTables places on the data source. In previous releases of DataTables the following data structure is expected for server-side processing or Ajax sourced data:</p>

<pre class="brush: js; font-size: 75%">
[
	[ "row 1, cell 1", "row 1, cell 2", "row 1, cell 3" ],
	[ "row 2, cell 2", "row 2, cell 2", "row 2, cell 3" ]
]
</pre>

<p>This is an array of arrays, with (exactly) one element given for each of the cells in the table. Any deviations from this structure, or extra elements in the arrays, would result in an error being given. While this is adequate for many tables, and server-side scripts flexible enough to allow this formatting to be generated without significant modification, it is not particularly flexible.</p>

<p>To increase the flexibility of the data source, you may wish to return an array of objects, like this:</p>

<pre class="brush: js; font-size: 75%">
[
	{ "cell1": "row 1, cell 1",
	  "cell2": "row 1, cell 2",
	  "cell3": "row 1, cell 3" 
	},
	{ "cell1": "row 2, cell 1",
	  "cell2": "row 2, cell 2",
	  "cell3": "row 2, cell 3" 
	}
]
</pre>

<p>In this manner you could pass back extra information which is not needed for rendering the table directly. This could be useful for <a href="http://www.datatables.net/release-datatables/examples/server_side/row_details.html">showing and hiding details</a> about a particular row, based on information that is not visible in the table. Previously this had to be done with information in hidden columns, or with an extra Ajax request. This ability to read information from objects is what is introduced in DataTables 1.8, through the use of the <b>mData</b> initialisation option for <a href="http://www.datatables.net/usage/columns">aoColumns</a>.</p><p><a href="http://www.datatables.net/blog/Extended_data_source_options_with_DataTables">Continue reading...</a></p> ]]></description>
	<pubDate>Thu, 09 Aug 2012 09:06:14 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Extended_data_source_options_with_DataTables</guid>
	<link>http://www.datatables.net//blog/Extended_data_source_options_with_DataTables</link>
</item>

<item>
	<title>Creating feature plug-ins</title>
	<description><![CDATA[ <p>DataTables provides a wealth of functionality built into its core, however it can't provide for every possible situation and to keep the core code to a sensible size it doesn't attempt to. For this DataTables provides a number of comprehensive plug-in options including <a href="http://www.datatables.net/development/sorting">sorting</a>, <a href="http://www.datatables.net/development/filtering">filtering</a> and <a href="http://www.datatables.net/development/api">API methods</a> among <a href="http://www.datatables.net/development">others</a>.</p>

<p>In this post I will look at the <a href="http://www.datatables.net/development/features">feature plug-in abilities</a> and describe how a feature plug-in can be created, quite easily, for DataTables. I will also describe how to create and use a custom API method along the way - used as part of the feature plug-in. Creating feature plug-ins in this manner allow for greater code reuse and sharing of code between pages and authors. The <a href="http://www.datatables.net/extras">extras</a> available for DataTables use this feature plug-in method to integrate tightly with DataTables.</p>

<p>To demonstrate how to build a feature plug-in, here I will build one which will simply show and hide the paging control based on if it is needed or not (a reasonably common request in the forum). For example if the table rows can all be displayed on one page, there is no need to show the paging control (even although it is disabled at that point) - this situation can change dynamically based on the filtering applied to the table.</p>

<p>There are two parts to the work involved in creating this feature plug-in:</p>

<ul>
  <li>API method - we need to get the number of pages that are shown in the table so we know if we need to show or hide the paging control.</li>
  <li>Feature plug-in - creating the plug-in that will perform the check and show / hide of the paging control</li>
</ul>


<h3>Example</h3>

<p>In the example below, note that the pagination control is initially shown. Now enter some text into the filtering field and the control will be removed when the results from the filter fit onto a single page.</p>

			<div id="demo">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="featuresplugin">
	<thead>
		<tr>
			<th>Rendering engine</th>
			<th>Browser</th>
			<th>Platform(s)</th>
			<th>Engine version</th>
			<th>CSS grade</th>
		</tr>
	</thead>
	<tbody>
		<tr class="odd gradeX">
			<td>Trident</td>
			<td>Internet
				 Explorer 4.0</td>
			<td>Win 95+</td>
			<td class="center"> 4</td>
			<td class="center">X</td>
		</tr>
		<tr class="even gradeC">
			<td>Trident</td>
			<td>Internet
				 Explorer 5.0</td>
			<td>Win 95+</td>
			<td class="center">5</td>
			<td class="center">C</td>
		</tr>
		<tr class="odd gradeA">
			<td>Trident</td>
			<td>Internet
				 Explorer 5.5</td>
			<td>Win 95+</td>
			<td class="center">5.5</td>
			<td class="center">A</td>
		</tr>
		<tr class="even gradeA">
			<td>Trident</td>
			<td>Internet
				 Explorer 6</td>
			<td>Win 98+</td>
			<td class="center">6</td>
			<td class="center">A</td>
		</tr>
		<tr class="odd gradeA">
			<td>Trident</td>
			<td>Internet Explorer 7</td>
			<td>Win XP SP2+</td>
			<td class="center">7</td>
			<td class="center">A</td>
		</tr>
		<tr class="even gradeA">
			<td>Trident</td>
			<td>AOL browser (AOL desktop)</td>
			<td>Win XP</td>
			<td class="center">6</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Firefox 1.0</td>
			<td>Win 98+ / OSX.2+</td>
			<td class="center">1.7</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Firefox 1.5</td>
			<td>Win 98+ / OSX.2+</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Firefox 2.0</td>
			<td>Win 98+ / OSX.2+</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Firefox 3.0</td>
			<td>Win 2k+ / OSX.3+</td>
			<td class="center">1.9</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Camino 1.0</td>
			<td>OSX.2+</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Camino 1.5</td>
			<td>OSX.3+</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Netscape 7.2</td>
			<td>Win 95+ / Mac OS 8.6-9.2</td>
			<td class="center">1.7</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Netscape Browser 8</td>
			<td>Win 98SE+</td>
			<td class="center">1.7</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Netscape Navigator 9</td>
			<td>Win 98+ / OSX.2+</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.0</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">1</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.1</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">1.1</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.2</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">1.2</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.3</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">1.3</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.4</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">1.4</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.5</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">1.5</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.6</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">1.6</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.7</td>
			<td>Win 98+ / OSX.1+</td>
			<td class="center">1.7</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Mozilla 1.8</td>
			<td>Win 98+ / OSX.1+</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Seamonkey 1.1</td>
			<td>Win 98+ / OSX.2+</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Gecko</td>
			<td>Epiphany 2.20</td>
			<td>Gnome</td>
			<td class="center">1.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Webkit</td>
			<td>Safari 1.2</td>
			<td>OSX.3</td>
			<td class="center">125.5</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Webkit</td>
			<td>Safari 1.3</td>
			<td>OSX.3</td>
			<td class="center">312.8</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Webkit</td>
			<td>Safari 2.0</td>
			<td>OSX.4+</td>
			<td class="center">419.3</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Webkit</td>
			<td>Safari 3.0</td>
			<td>OSX.4+</td>
			<td class="center">522.1</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Webkit</td>
			<td>OmniWeb 5.5</td>
			<td>OSX.4+</td>
			<td class="center">420</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Webkit</td>
			<td>iPod Touch / iPhone</td>
			<td>iPod</td>
			<td class="center">420.1</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Webkit</td>
			<td>S60</td>
			<td>S60</td>
			<td class="center">413</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera 7.0</td>
			<td>Win 95+ / OSX.1+</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera 7.5</td>
			<td>Win 95+ / OSX.2+</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera 8.0</td>
			<td>Win 95+ / OSX.2+</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera 8.5</td>
			<td>Win 95+ / OSX.2+</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera 9.0</td>
			<td>Win 95+ / OSX.3+</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera 9.2</td>
			<td>Win 88+ / OSX.3+</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera 9.5</td>
			<td>Win 88+ / OSX.3+</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Opera for Wii</td>
			<td>Wii</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Nokia N800</td>
			<td>N800</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>Presto</td>
			<td>Nintendo DS browser</td>
			<td>Nintendo DS</td>
			<td class="center">8.5</td>
			<td class="center">C/A<sup>1</sup></td>
		</tr>
		<tr class="gradeC">
			<td>KHTML</td>
			<td>Konqureror 3.1</td>
			<td>KDE 3.1</td>
			<td class="center">3.1</td>
			<td class="center">C</td>
		</tr>
		<tr class="gradeA">
			<td>KHTML</td>
			<td>Konqureror 3.3</td>
			<td>KDE 3.3</td>
			<td class="center">3.3</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeA">
			<td>KHTML</td>
			<td>Konqureror 3.5</td>
			<td>KDE 3.5</td>
			<td class="center">3.5</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeX">
			<td>Tasman</td>
			<td>Internet Explorer 4.5</td>
			<td>Mac OS 8-9</td>
			<td class="center">-</td>
			<td class="center">X</td>
		</tr>
		<tr class="gradeC">
			<td>Tasman</td>
			<td>Internet Explorer 5.1</td>
			<td>Mac OS 7.6-9</td>
			<td class="center">1</td>
			<td class="center">C</td>
		</tr>
		<tr class="gradeC">
			<td>Tasman</td>
			<td>Internet Explorer 5.2</td>
			<td>Mac OS 8-X</td>
			<td class="center">1</td>
			<td class="center">C</td>
		</tr>
		<tr class="gradeA">
			<td>Misc</td>
			<td>NetFront 3.1</td>
			<td>Embedded devices</td>
			<td class="center">-</td>
			<td class="center">C</td>
		</tr>
		<tr class="gradeA">
			<td>Misc</td>
			<td>NetFront 3.4</td>
			<td>Embedded devices</td>
			<td class="center">-</td>
			<td class="center">A</td>
		</tr>
		<tr class="gradeX">
			<td>Misc</td>
			<td>Dillo 0.8</td>
			<td>Embedded devices</td>
			<td class="center">-</td>
			<td class="center">X</td>
		</tr>
		<tr class="gradeX">
			<td>Misc</td>
			<td>Links</td>
			<td>Text only</td>
			<td class="center">-</td>
			<td class="center">X</td>
		</tr>
		<tr class="gradeX">
			<td>Misc</td>
			<td>Lynx</td>
			<td>Text only</td>
			<td class="center">-</td>
			<td class="center">X</td>
		</tr>
		<tr class="gradeC">
			<td>Misc</td>
			<td>IE Mobile</td>
			<td>Windows Mobile 6</td>
			<td class="center">-</td>
			<td class="center">C</td>
		</tr>
		<tr class="gradeC">
			<td>Misc</td>
			<td>PSP browser</td>
			<td>PSP</td>
			<td class="center">-</td>
			<td class="center">C</td>
		</tr>
		<tr class="gradeU">
			<td>Other browsers</td>
			<td>All others</td>
			<td>-</td>
			<td class="center">-</td>
			<td class="center">U</td>
		</tr>
	</tbody>
	<tfoot>
		<tr>
			<th>Rendering engine</th>
			<th>Browser</th>
			<th>Platform(s)</th>
			<th>Engine version</th>
			<th>CSS grade</th>
		</tr>
	</tfoot>
</table>
			</div>
<div class="clear"></div>
<script type="text/javascript" src="/media/blog/feature_plugsin/plugins.js"></script>
<p><a href="http://www.datatables.net/blog/Creating_feature_plug-ins">Continue reading...</a></p> ]]></description>
	<pubDate>Wed, 08 Aug 2012 13:37:51 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Creating_feature_plug-ins</guid>
	<link>http://www.datatables.net//blog/Creating_feature_plug-ins</link>
</item>

<item>
	<title>Introducing Editor - editing for DataTables</title>
	<description><![CDATA[ <p>The primary goal of DataTables has always been to make data sets, no matter how complex, easy to access and get information from. DataTables has come along way from its origins, and with the latest plug-in for DataTables we are taking it even further - I'm delighted to introduce: <a href="http://editor.datatables.net">Editor</a>. With Editor, previously read-only tables can very easily be made into read / write tables.</p>

<p>Tables are intrinsically complex, due to the number of options that can be used to customise them and the data that they show. Building an editing interface that reflects your table could be a time consuming prospect, but with Editor making tables editable is now super easy to do. </p>

<p>DataTables has always had a capable API, and Editor integrates tightly with that API to provide everything you need, including UI controls, to present an editing interface to your end users. Building on five years of experience of working with dynamic DataTables enhanced tables, Editor is designed to fit in with almost every design and can be readily extended through the use of field and display plug-ins.</p><p><a href="http://www.datatables.net/blog/Introducing_Editor_-_editing_for_DataTables">Continue reading...</a></p> ]]></description>
	<pubDate>Fri, 04 May 2012 10:15:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Introducing_Editor_-_editing_for_DataTables</guid>
	<link>http://www.datatables.net//blog/Introducing_Editor_-_editing_for_DataTables</link>
</item>

<item>
	<title>DataTables debugger</title>
	<description><![CDATA[ <p>As with any complex piece of software, DataTables has a huge range of configuration options and debugging the application when you encounter a problem can be quite a daunting prospect. Also, when asking for help from myself or anyone else in the forum or else where, we need as much information as possible, but succinctly presented, to be able to help solve the issue. To address these issues, I've created a <a href="http://debug.datatables.net">debugger for DataTables</a>.</p>

<p>The form that this debugger takes is as a <a href="http://en.wikipedia.org/wiki/Bookmarklet">bookmarklet</a>. When run on a web-page that uses DataTables, the bookmarklet will gather information about the tables on the page and upload that information to the DataTables server.</p>

<p>When complete, you will be given a unique six character identification code for your newly created debug record, which can be used to view the information about your table. This information view will show a summary of information about the tables and software on your web-page - allowing easy access to the configuration of the table. For example: <a href="http://debug.datatables.net/efuzil">this debug record</a> shows the information gathered from the table on the DataTables.net home page.</p>

<p>To get started with using the debugger, please visit the debugger home page:</p>

<ul>
	<li><a href="http://debug.datatables.net">DataTables debugger</a></li>
</ul>
<p><a href="http://www.datatables.net/blog/DataTables_debugger">Continue reading...</a></p> ]]></description>
	<pubDate>Sun, 26 Feb 2012 10:45:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/DataTables_debugger</guid>
	<link>http://www.datatables.net//blog/DataTables_debugger</link>
</item>

<item>
	<title>Twitter Bootstrap 2</title>
	<description><![CDATA[ <p>The <a href="http://twitter.github.com/bootstrap">Twitter Bootstrap</a> folks have just released v2 of their UI framework that has a number of improvements on the v1 series. However, as might be expected from a major upgrade there are also a few API changes. As such, this post is an update to my <a href="http://www.datatables.net/blog/Twitter_Bootstrap">original article for Bootstrap 1.4</a> to show how DataTables can be used with Bootstrap 2.</p>

<p>There are a number of changes that effect the DataTables integration in Bootstrap 2:</p>

<ul>
	<li>Name change for the table classes</li>
	<li>The grid has been changed from 16 to 12 columns</li>
	<li>Classes for table sorting have been removed</li>
	<li>Form elements are not laid out slightly differently</li>
	<li>Minor changes to the table CSS</li>
</ul>

<p>The paging styling has stayed more or less the same in Bootstrap 2 so fortunately we don't need to modify that at all from my original post.</p><p><a href="http://www.datatables.net/blog/Twitter_Bootstrap_2">Continue reading...</a></p> ]]></description>
	<pubDate>Wed, 01 Feb 2012 12:00:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Twitter_Bootstrap_2</guid>
	<link>http://www.datatables.net//blog/Twitter_Bootstrap_2</link>
</item>

<item>
	<title>localStorage for state saving</title>
	<description><![CDATA[ <p>One of the greatest challenges in writing a software library is in maintaining its API and ensuring that upgrades to newer versions of the library are as pain free as possible. The DataTables API has stood the test of time, but from time-to-time there something that has been implemented previously which is not desirable in future versions. In this case, DataTables 1.9 has seen a significant change to how its state saving is done and two old initialisation options have been removed and replaced with much more flexible options.</p>

<p>In the post I'll explain what has changed, the new features of DataTables 1.9 and show how the improvements can be used to very easily implement state saving for a table using <a href="https://developer.mozilla.org/en/DOM/Storage">localStorage</a> rather than cookies, or any other state store you wish to use.</p>
<p><a href="http://www.datatables.net/blog/localStorage_for_state_saving">Continue reading...</a></p> ]]></description>
	<pubDate>Mon, 16 Jan 2012 14:30:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/localStorage_for_state_saving</guid>
	<link>http://www.datatables.net//blog/localStorage_for_state_saving</link>
</item>

<item>
	<title>Twitter Bootstrap</title>
	<description><![CDATA[ <p><a href="http://twitter.github.com/bootstrap">Twitter Bootstrap</a> is a CSS framework that lets you quickly and easily build a user interface that has a unified look and feel. The great news is that it is actually quite easy to integrate Bootstrap and DataTables such that your fully featured DataTables will match the same look and feel of the rest of your site. In this article I'll show how you can integrate Bootstrap and DataTables together.</p>

<p>There are three basic areas we need to look at to complete the integration:</p>

<ul>
	<li>Layout</li>
	<li>Sorting controls</li>
	<li>Pagination</li>
</ul>


<h2>Layout</h2>

<p>Bootstrap, as you would expect for a CSS library, has a well defined grid system. We want to use this grid system to layout a standard DataTable with the length changing and filtering controls above the table and the table information and pagination controls below the table. To do this we will use the <a href="http://www.datatables.net/ref#sDom">sDom</a> DataTables initialisation parameter to have DataTables create the markup needed. So we start with (<a href="http://www.datatables.net/media/blog/bootstrap/001.html">see this example running</a>):</p>

<pre class="brush: js; font-size: 75%">
$(document).ready(function() {
  $('#example').dataTable( {
    "sDom": "<'row'<'span8'l><'span8'f>r>t<'row'<'span8'i><'span8'p>>"
  } );
} );
</pre><p><a href="http://www.datatables.net/blog/Twitter_Bootstrap">Continue reading...</a></p> ]]></description>
	<pubDate>Thu, 08 Dec 2011 12:30:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Twitter_Bootstrap</guid>
	<link>http://www.datatables.net//blog/Twitter_Bootstrap</link>
</item>

<item>
	<title>Site updates - JS Bin and more</title>
	<description><![CDATA[ <p>Its an exciting time this November. Along with some significant changes in my own circumstances I've been hard at work on number of updates for the DataTables site, which I'm really pleased to be able to announce with this post.</p>

<p>The most significant addition to the site is the new <a href="http://live.datatables.net/">DataTables Live</a> site, which is built upon <a href="http://jsbin.com">JS Bin</a>. JS Bin allows live editing, testing and sharing of code on the site, which I've tailored for DataTables (for example press 'esc' to get code-completion hints, including DataTables API methods and initialisation options).</p>

<p>I'll increasingly be using the Live site myself when answering support questions in the forums. I would also ask that if you have a question about a DataTables setup or a bug to report, please set up a Live example as it will make the whole process much quicker!</p>

<p>You will also be able to see that I've updated the syntax highlighter used on this site, and the DataTables examples. The code blocks now all have a "Edit in JS Bin" link, which when clicked on will import the code into the DataTables Live site, allowing you to quickly get an example running. It should be noted that not all code examples will work in JS Bin off the bat - they might need some custom setup, but the majority should work immediately.</p>

<p>Other updates to the site include automatic linking of API and initialisation options in forum posts to the <a href="http://www.datatables.net/ref">DataTables reference</a>, making reference that little bit easier. There are also a few other tidy ups in the documentation and software behind the site.</p>

<p>As for myself, I now join the ranks of full-time freelancers. If you would like to work with me on any projects you have (involving DataTables integration or otherwise), please do <a href="http://sprymedia.co.uk/contact">get in touch</a>!</p>

<p>Exciting times indeed!</p><p><a href="http://www.datatables.net/blog/Site_updates_-_JS_Bin_and_more">Continue reading...</a></p> ]]></description>
	<pubDate>Tue, 01 Nov 2011 16:30:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Site_updates_-_JS_Bin_and_more</guid>
	<link>http://www.datatables.net//blog/Site_updates_-_JS_Bin_and_more</link>
</item>

<item>
	<title>Getting started with DataTables: First steps</title>
	<description><![CDATA[ <p>DataTables is a powerful Javascript library for adding interaction features to HTML tables, and while simplicity is a core design principle for the project as a whole, it can be quite daunting to get started. In this article I'll introduce the basic concepts that you will need to know to get going with DataTables, and you will find that in a very short space of time you'll be able to create advanced table controls, tuned to your specific requirements.</p><p><a href="http://www.datatables.net/blog/Getting_started_with_DataTables%3A_First_steps">Continue reading...</a></p> ]]></description>
	<pubDate>Sat, 27 Aug 2011 14:45:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Getting_started_with_DataTables%3A_First_steps</guid>
	<link>http://www.datatables.net//blog/Getting_started_with_DataTables%3A_First_steps</link>
</item>

<item>
	<title>DataTables support</title>
	<description><![CDATA[ <p>As DataTables has grown, it has become clear that you, the developers using DataTables, want the option of have professional support at hand for when you need it, and I'm delighted to now be offer that option through the DataTables web-site.</p>

<p>You will notice that in the main site navigation there is now a <a href="http://www.datatables.net/support">Support / Buy</a> button which will take you to a very simple form. Here you can select a DataTables support package, where each package is a given amount of support time, and then purchase the package through Google Checkout or PayPal. Support is still conducted through messages in the forum, and with the new forums it is possible to send either public or private support requests to me (perfect if, for example, you are working with confidential information).</p>

<p><img src="/media/blog/support/support.png" style="float:right" alt="Support info box view">In the information bar on the left of the forums page you will now see a box which links to the new support purchase page. When you purchase a support package this will change into a box showing how much support time you have available on your account (shown in the image on the right). The support time on your account will be updated as I work through your support requests.</p><p><a href="http://www.datatables.net/blog/DataTables_support">Continue reading...</a></p> ]]></description>
	<pubDate>Wed, 29 Jun 2011 19:00:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/DataTables_support</guid>
	<link>http://www.datatables.net//blog/DataTables_support</link>
</item>

<item>
	<title>Drill-down rows</title>
	<description><![CDATA[ 
<style type="text/css" title="currentStyle">
table.display td.details { border: 0; padding: 0; background-color: #ccc; }
div.innerDetails { display: none }
</style>
<script type="text/javascript" charset="utf-8">
	$(document).ready(function() {
    var anOpen = [];
    var sImageUrl = "/release-datatables/examples/examples_support/";
     
    var oTable = $('#example').dataTable( {
    	"bProcessing": true,
    	"sAjaxSource": "/release-datatables/examples/ajax/sources/objects.txt",
    	"aoColumns": [
    		{ 
    		 "mDataProp": null, 
    		 "sClass": "control center", 
    		 "sDefaultContent": '<img src="'+sImageUrl+'details_open.png'+'">'
    		},
    		{ "mDataProp": "engine" },
    		{ "mDataProp": "browser" },
    		{ "mDataProp": "grade" }
    	]
    } );
    
    $('#example td.control').live( 'click', function () {
       var nTr = this.parentNode;
       var i = $.inArray( nTr, anOpen );
       
       if ( i === -1 ) {
          $('img', this).attr( 'src', sImageUrl+"details_close.png" );
          var nDetailsRow = oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' );
          $('div.innerDetails', nDetailsRow).slideDown();
          anOpen.push( nTr );
        }
        else {
          $('img', this).attr( 'src', sImageUrl+"details_open.png" );
           $('div.innerDetails', $(nTr).next()[0]).slideUp( function () {
             oTable.fnClose( nTr );
             anOpen.splice( i, 1 );
           } );
         }
     } );
	} );
	
	function fnFormatDetails( oTable, nTr )
	{
	  var oData = oTable.fnGetData( nTr );
		var sOut = 
		   '<div class="innerDetails">'+
		      '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
		         '<tr><td>Rendering engine:</td><td>'+oData.engine+'</td></tr>'+
		         '<tr><td>Browser:</td><td>'+oData.browser+'</td></tr>'+
		         '<tr><td>Platform:</td><td>'+oData.platform+'</td></tr>'+
		         '<tr><td>Version:</td><td>'+oData.version+'</td></tr>'+
		         '<tr><td>Grade:</td><td>'+oData.grade+'</td></tr>'+
		      '</table>'+
		   '</div>';
		return sOut;
   }
</script>



<p>Tables are the perfect solution to show summary data which can be readily tabulated. However, often you will want to provide the end user of your web-site / app with the ability to drill down into the data in the table and show more detailed information. This can help clean up the interface and stop the end user being overwhelmed by information and give them more control.</p>

<p>DataTables provides two API methods to attach a details row to a parent in the table; <a href="http://datatables.net/api#fnOpen">fnOpen</a> to show the extra data and its reciprocal <a href="http://datatables.net/api#fnClose">fnClose</a> to remove it. The data which is shown in the details row can be more or less whatever you wish as <i>fnOpen</i> will accept a DOM node or HTML string. In this example I'll show an inner table being used which is animated open and closed.</p>

<p>This example also shows the new <a href="http://datatables.net/usage/columns#mDataProp">mDataProp</a> option included in DataTables 1.8 in action. How you the data for the details row is obtained can be done in a number of different ways, including Ajax or a DOM source. In this example through the use of mDataProp and DataTables consuming a JSON object for the table display, we can use the original object that is given to the table, showing information that is not in the default view of the table.</p>

<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
	<thead>
		<tr>
			<th></th>
			<th>Rendering engine</th>
			<th>Browser</th>
			<th>CSS grade</th>
		</tr>
	</thead>
	<tbody></tbody>
</table>
<div class="clear"></div><p><a href="http://www.datatables.net/blog/Drill-down_rows">Continue reading...</a></p> ]]></description>
	<pubDate>Sun, 19 Jun 2011 15:30:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Drill-down_rows</guid>
	<link>http://www.datatables.net//blog/Drill-down_rows</link>
</item>

<item>
	<title>Introducing Scroller - Virtual Scrolling for DataTables</title>
	<description><![CDATA[ <p>As part of DataTables 1.8 release a new plug-in called "Scroller" was introduced as part of the download package. Scroller is an implementation of virtual scrolling for DataTables, which presents a vertically scrolling table, scrolling the full height of the table, but drawing only the rows which are necessary for the visible display, leading to a huge performance increase. This is quite an exciting plug-in for DataTables not only for the performance increase, but also because it effectively provide a new user interaction with the table, allowing full scrolling of very large data sets.</p>

<p>The basic aim of Scroller is to have a vertically scrolling table, where the scrollbar for the table directly represents the position of the visible data in the full data set. This can of course already be achieved with DataTables as shown in the <a href="http://www.datatables.net/release-datatables/examples/basic_init/scroll_y.html">y-scrolling</a> example, however, this method requires every single row to be created and drawn in the DOM. When considering many thousands of rows, this can ask a lot of the browser's Javascript engine. One possible solution which is built into DataTables is <a href="http://www.datatables.net/release-datatables/examples/basic_init/scroll_y_infinite.html">infinite scrolling</a>, but here the scrollbar doesn't accurately represent the full data set. Thus Scroller is presented to provide the main goal, while making use of the new features in DataTables 1.8 to maintain the performance of the table.</p>

<p>An example of a DataTable with 2'500 rows being loaded from an Ajax source is shown below:</p>

<iframe src="http://datatables.net/media/blog/scroller/scroller.html" height="330" width="100%" style="overflow: hidden; border: none"></iframe>

<p>Development of Scroller was sponsored by <a href="http://wiley.com">John Wiley & Sons, Inc.</a> - a huge thank you to them for their support of the DataTables project!</p><p><a href="http://www.datatables.net/blog/Introducing_Scroller_-_Virtual_Scrolling_for_DataTables">Continue reading...</a></p> ]]></description>
	<pubDate>Sat, 11 Jun 2011 09:15:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Introducing_Scroller_-_Virtual_Scrolling_for_DataTables</guid>
	<link>http://www.datatables.net//blog/Introducing_Scroller_-_Virtual_Scrolling_for_DataTables</link>
</item>

<item>
	<title>DataTables 1.8</title>
	<description><![CDATA[ <p>It gives me great pleasure to announce the release of DataTables 1.8.0. This update provides a significant update to the capabilities of DataTables, with emphasis on making it much easier and more complete for you as the developers using DataTables to work with. There are no new features specifically targeted at the end user, this is all about the developers!</p>

<p>
	<a href="http://www.datatables.net/releases/DataTables-1.8.0.zip">
		<div class="push_button">
			Download DataTables 1.8.0
		</div>
	</a>
</p><p><a href="http://www.datatables.net/blog/DataTables_1.8">Continue reading...</a></p> ]]></description>
	<pubDate>Sat, 04 Jun 2011 16:30:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/DataTables_1.8</guid>
	<link>http://www.datatables.net//blog/DataTables_1.8</link>
</item>

<item>
	<title>Inline editing</title>
	<description><![CDATA[ <p>In modern web-applications, one common use for tables is to show a grid of information which can be modified by the end user - a typical <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD (Create, Read, Update, Delete)</a> scenario. One example of this is a list of users for the web-app where the administrator can update user details on-the-fly in the table view.</p>

<p>There are a million and one different ways to present the editing interface for this table, and which method you wish you use will depend on how you want it to interface with the rest of your web-site / app. You might wish to have a lightbox editing form floating on top of the table, or you could use a <a href="http://datatables.net/examples/api/editable.html">cell at a time</a> approach using a library like <a href="http://www.appelsiini.net/projects/jeditable">jEditable</a>. Typically I've shied away from providing an editing plug-in for DataTables because how it should be implemented will vary significantly from situation to situation and one size does not fit all here.</p>

<p>Fortunately with DataTables is very easy to create a CRUD interface which is tailored to your specific setup using the <a href="http://datatables.net/api">DataTables API</a>. In this example I will show how to create an interface which provides inline editing of a whole row. What we end up with at the end of this tutorial is shown below:</p>

<iframe src="http://datatables.net/media/blog/inline-editing/iframe.html" height="200" width="100%" style="overflow: hidden; border: none"></iframe>
<p><a href="http://www.datatables.net/blog/Inline_editing">Continue reading...</a></p> ]]></description>
	<pubDate>Tue, 31 May 2011 21:45:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Inline_editing</guid>
	<link>http://www.datatables.net//blog/Inline_editing</link>
</item>

<item>
	<title>Creating beautiful and functional tables with DataTables</title>
	<description><![CDATA[ <p>DataTables has a wealth of features enabled by default (as can be seen in the <a href="http://datatables.net/release-datatables/examples/basic_init/zero_config.html">zero-configuration example</a>) but the example stylesheets that come in the DataTables package are intentionally rather basic, and there will be times you wish to integrate the look and feel of the table a lot more than the default style allows.</p>

<p>Fortunately styling a DataTables table is actually a relatively simple prospect and I'll show how to build the style up so that your table looks like the one shown below in this post. In this post I'll use only very basic initialisation of DataTables and concentrate on just nice CSS styling! I'll be building on the fine work of <a href="http://webdesignernotebook.com/css/a-beautiful-table/">Inayaili de Leon</a> for this example, and we will end up with a table which looks like this:</p>

<iframe src="http://datatables.net/media/blog/beautiful_tables/complete.html" height="600" width="100%" style="overflow: hidden; border: none"></iframe><p><a href="http://www.datatables.net/blog/Creating_beautiful_and_functional_tables_with_DataTables">Continue reading...</a></p> ]]></description>
	<pubDate>Tue, 10 May 2011 17:45:00 GMT</pubDate>
	<guid isPermaLink="true">http://www.datatables.net//blog/Creating_beautiful_and_functional_tables_with_DataTables</guid>
	<link>http://www.datatables.net//blog/Creating_beautiful_and_functional_tables_with_DataTables</link>
</item>


	</channel>
</rss>
