246 lines
13 KiB
HTML
246 lines
13 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<title>jQuery tablesorter 2.0 - Dragtable Mod (beta)</title>
|
||
|
|
||
|
<!-- jQuery -->
|
||
|
<script src="js/jquery-latest.min.js"></script>
|
||
|
<script src="js/jquery-ui.min.js"></script>
|
||
|
|
||
|
<!-- Demo stuff -->
|
||
|
<link class="ui-theme" rel="stylesheet" href="css/jquery-ui.min.css">
|
||
|
<link rel="stylesheet" href="css/bootstrap-v3.min.css">
|
||
|
<link rel="stylesheet" href="css/jq.css">
|
||
|
<link href="css/prettify.css" rel="stylesheet">
|
||
|
<script src="js/prettify.js"></script>
|
||
|
<script src="js/docs.js"></script>
|
||
|
<style>
|
||
|
/* override jQuery UI overriding Bootstrap */
|
||
|
.accordion .ui-widget-content a {
|
||
|
color: #337ab7;
|
||
|
}
|
||
|
</style>
|
||
|
|
||
|
<!-- Tablesorter: theme -->
|
||
|
<link class="theme" rel="stylesheet" href="../css/theme.blue.css">
|
||
|
<link rel="stylesheet" href="../css/dragtable.mod.css">
|
||
|
|
||
|
<!-- Tablesorter script: required -->
|
||
|
<script src="../js/jquery.tablesorter.js"></script>
|
||
|
<script src="../js/jquery.tablesorter.widgets.js"></script>
|
||
|
|
||
|
<script src="../js/extras/jquery.dragtable.mod.js"></script>
|
||
|
|
||
|
<style id="css">/* optional styling */
|
||
|
caption {
|
||
|
/* override bootstrap adding 8px to the top & bottom of the caption */
|
||
|
padding: 0;
|
||
|
}
|
||
|
.ui-sortable-placeholder {
|
||
|
/* change placeholder (seen while dragging) background color */
|
||
|
background: #ddd;
|
||
|
}
|
||
|
div.table-handle-disabled {
|
||
|
/* optional red background color indicating a disabled drag handle */
|
||
|
background-color: rgba(255,128,128,0.5);
|
||
|
/* opacity set to zero for disabled handles in the dragtable.mod.css file */
|
||
|
opacity: 0.7;
|
||
|
}
|
||
|
/* fix cursor */
|
||
|
.tablesorter-blue .tablesorter-header {
|
||
|
cursor: default;
|
||
|
}
|
||
|
.sorter {
|
||
|
cursor: pointer;
|
||
|
}</style>
|
||
|
<script id="js">$(function () {
|
||
|
$('table')
|
||
|
// initialize dragtable FIRST!
|
||
|
.dragtable({
|
||
|
// *** new dragtable mod options ***
|
||
|
// this option MUST match the tablesorter selectorSort option!
|
||
|
sortClass: '.sorter',
|
||
|
// this function is called after everything has been updated
|
||
|
tablesorterComplete: function(table) {},
|
||
|
|
||
|
// *** original dragtable settings (non-default) ***
|
||
|
dragaccept: '.drag-enable', // class name of draggable cols -> default null = all columns draggable
|
||
|
|
||
|
// *** original dragtable settings (default values) ***
|
||
|
revert: false, // smooth revert
|
||
|
dragHandle: '.table-handle', // handle for moving cols, if not exists the whole 'th' is the handle
|
||
|
maxMovingRows: 40, // 1 -> only header. 40 row should be enough, the rest is usually not in the viewport
|
||
|
excludeFooter: false, // excludes the footer row(s) while moving other columns. Make sense if there is a footer with a colspan. */
|
||
|
onlyHeaderThreshold: 100, // TODO: not implemented yet, switch automatically between entire col moving / only header moving
|
||
|
persistState: null, // url or function -> plug in your custom persistState function right here. function call is persistState(originalTable)
|
||
|
restoreState: null, // JSON-Object or function: some kind of experimental aka Quick-Hack TODO: do it better
|
||
|
exact: true, // removes pixels, so that the overlay table width fits exactly the original table width
|
||
|
clickDelay: 10, // ms to wait before rendering sortable list and delegating click event
|
||
|
containment: null, // @see http://api.jqueryui.com/sortable/#option-containment, use it if you want to move in 2 dimesnions (together with axis: null)
|
||
|
cursor: 'move', // @see http://api.jqueryui.com/sortable/#option-cursor
|
||
|
cursorAt: false, // @see http://api.jqueryui.com/sortable/#option-cursorAt
|
||
|
distance: 0, // @see http://api.jqueryui.com/sortable/#option-distance, for immediate feedback use "0"
|
||
|
tolerance: 'pointer', // @see http://api.jqueryui.com/sortable/#option-tolerance
|
||
|
axis: 'x', // @see http://api.jqueryui.com/sortable/#option-axis, Only vertical moving is allowed. Use 'x' or null. Use this in conjunction with the 'containment' setting
|
||
|
beforeStart: $.noop, // returning FALSE will stop the execution chain.
|
||
|
beforeMoving: $.noop,
|
||
|
beforeReorganize: $.noop,
|
||
|
beforeStop: $.noop
|
||
|
})
|
||
|
// initialize tablesorter
|
||
|
.tablesorter({
|
||
|
theme: 'blue',
|
||
|
// this option MUST match the dragtable sortClass option!
|
||
|
selectorSort: '.sorter',
|
||
|
widgets: ['zebra', 'filter', 'columns']
|
||
|
});
|
||
|
});</script>
|
||
|
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
<div id="banner">
|
||
|
<h1>table<em>sorter</em></h1>
|
||
|
<h2>Dragtable Mod (beta)</h2>
|
||
|
<h3>Flexible client-side table sorting</h3>
|
||
|
<a href="index.html">Back to documentation</a>
|
||
|
</div>
|
||
|
|
||
|
<div id="main">
|
||
|
<p></p>
|
||
|
<br>
|
||
|
<div id="root" class="accordion">
|
||
|
|
||
|
<h3 id="notes"><a href="#">Notes</a></h3>
|
||
|
<div>
|
||
|
<ul>
|
||
|
<li>This demo uses a modified version of the <a href="http://akottr.github.io/dragtable/">jQuery UI Dragtable widget</a> (beta) to work with tablesorter.</li>
|
||
|
<li>This mod <strong>has been</strong> tested with the following widgets: <span class="good">alignChar</span>, <span class="good">columns</span>, <span class="good">cssStickyHeaders</span>, <span class="good">editable</span>, <span class="good">filter</span>, <span class="good">grouping</span>, <span class="good">headerTitles</span>, <span class="good">math</span>, <span class="good">output</span>, <span class="good">pager</span> <span class="good">print</span>, <span class="good">reflow</span>, <span class="good">resizable</span>, <span class="good">repeatHeaders</span>, <span class="good">staticRow</span>, <span class="good">uitheme</span> & <span class="good">zebra</span>.</li>
|
||
|
<li>This mod <strong><em>does not</em></strong> currently work with the following widgets:
|
||
|
<ul>
|
||
|
<li><span class="bad">chart</span> - needs more work to be compatible.</li>
|
||
|
<li><span class="bad">columnSelector</span> - needs more work - making this compatible will require significant changes to the dragtable core.</li>
|
||
|
<li><span class="bad">saveSort</span> - this saves the newly moved sorted column properly, but on page reload the column order is restored so it sorts the incorrect column.</li>
|
||
|
<li><span class="bad">scroller</span> - way too much work to make this compatible.</li>
|
||
|
<li><span class="bad">stickyHeaders</span> - needs more work - can't get the drag handle in the cloned sticky header from passing the mousedown on to the original drag handle.</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li>Any widgets not listed above can be assumed to be incompatible, for now.</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
|
||
|
<h3 id="setup"><a href="#">Tablesorter setup</a></h3>
|
||
|
<div>
|
||
|
A complete javascript example can be found in the demo section, below the table.
|
||
|
<p></p>
|
||
|
To use this mod:
|
||
|
<ul>
|
||
|
<li>Initialize the dragtable mod script first, then initialize tablesorter.</li>
|
||
|
<li><span class="label label-warning">Warning!</span> When setting up the initialization code, make sure that the dragtable <code>sortClass</code> option <em>exactly matches</em> the tablesorter <code>selectorSort</code> option, or the table will be unsortable.
|
||
|
<pre class="prettyprint lang-js">$('table')
|
||
|
.dragtable({ sortClass: '.sorter' }) // this is already the default value
|
||
|
.tablesorter({ selectorSort: '.sorter' }); // this default value is 'th, td'</pre></li>
|
||
|
<li><span class="label warning">Warning!</span> Do not reference a column using jQuery data (e.g. <code>$('th:contains(Name)').data('sorter', 'text');</code>) or by it's zero-based index<sup class="bright">(1)</sup> because these references do not get updated after a column move!
|
||
|
<p></p>
|
||
|
Instead, use one of the following methods (these examples set the column parser):
|
||
|
<h4>Set parser by data-attribute or header class</h4>
|
||
|
<pre class="prettyprint lang-html"><tr>
|
||
|
<th class="col-id" data-sorter="digit">...</th> <!-- parser set by data-attribute -->
|
||
|
<th class="col-name drag-enable sorter-text">...</th> <!-- parser set by header class -->
|
||
|
<th class="col-date drag-enable">...</th> <!-- parser set by headers option (see below) -->
|
||
|
</tr></pre>
|
||
|
<h4>Or, set parser by <code>headers</code> option</h4>
|
||
|
<pre class="prettyprint lang-js">$('table').tablesorter({
|
||
|
headers : {
|
||
|
'.col-date' : { sorter : 'shortDate' }
|
||
|
}
|
||
|
});</pre></li>
|
||
|
<li>In order to get dragtable to work, the mod will add a div to act as a dragable handle and wrap the header text in a div<sup class="bright">(2)</sup> which needs to be targeted by the <code>selectorSort</code> option to make it clickable for sorting.
|
||
|
<p></p>
|
||
|
The <em>resulting HTML</em> may look like this:
|
||
|
<pre class="prettyprint lang-html"><tr>
|
||
|
<th class="col-id" data-sorter="digit">
|
||
|
<div class="table-handle-disabled"></div>
|
||
|
<!-- clicking on the "sort" wrapper below will not trigger a sort, because the cell is not set to sort -->
|
||
|
<div class="sorter">9999</div>
|
||
|
</th>
|
||
|
<th class="col-name sorter-text drag-enable">
|
||
|
<div class="table-handle"></div>
|
||
|
<div class="sorter">Name</div>
|
||
|
</th>
|
||
|
<th class="col-date drag-enable">
|
||
|
<div class="table-handle"></div>
|
||
|
<div class="sorter">1/1/2015</div>
|
||
|
</th>
|
||
|
</tr></pre>
|
||
|
</li>
|
||
|
</ul>
|
||
|
<span class="bright">(1)</span> Options that use a column index (such as the <code>sortList</code>), or an array of settings (like the <code>resizable_widths</code> option) are updated internally by the mod.
|
||
|
<p></p>
|
||
|
<span class="bright">(2)</span> The class name for the dragable handle is set by the dragtable <code>dragHandle</code> option & the class name for the clickable div wrapping the header text is set by the dragtable <code>sortClass</code> option.
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
<h1>Demo</h1>
|
||
|
<div id="demo"><table class="tablesorter">
|
||
|
<caption>Student Grades</caption>
|
||
|
<thead>
|
||
|
<tr>
|
||
|
<th>Name (0)</th> <!-- disable dragtable on this column -->
|
||
|
<th class="drag-enable">Major (1)</th>
|
||
|
<th class="drag-enable">Sex (2)</th>
|
||
|
<th class="drag-enable">English (3)</th>
|
||
|
<th class="drag-enable">Japanese (4)</th>
|
||
|
<th class="drag-enable">Calculus (5)</th>
|
||
|
<th class="drag-enable">Geometry (6)</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tfoot>
|
||
|
<tr><th>Name</th><th>Major</th><th>Sex</th><th>English</th><th>Japanese</th><th>Calculus</th><th>Geometry</th></tr>
|
||
|
</tfoot>
|
||
|
<tbody>
|
||
|
<tr><td>Student01 (0)</td><td>Languages (1)</td><td>male (2)</td><td>80 (3)</td><td>70 (4)</td><td>75 (5)</td><td>80 (6)</td></tr>
|
||
|
<tr><td>Student02</td><td>Mathematics</td><td>male</td><td>90</td><td>88</td><td>100</td><td>90</td></tr>
|
||
|
<tr><td>Student03</td><td>Languages</td><td>female</td><td>85</td><td>95</td><td>80</td><td>85</td></tr>
|
||
|
<tr><td>Student04</td><td>Languages</td><td>male</td><td>60</td><td>55</td><td>100</td><td>100</td></tr>
|
||
|
<tr><td>Student05</td><td>Languages</td><td>female</td><td>68</td><td>80</td><td>95</td><td>80</td></tr>
|
||
|
<tr><td>Student06</td><td>Mathematics</td><td>male</td><td>100</td><td>99</td><td>100</td><td>90</td></tr>
|
||
|
<tr><td>Student07</td><td>Mathematics</td><td>male</td><td>85</td><td>68</td><td>90</td><td>90</td></tr>
|
||
|
<tr><td>Student08</td><td>Languages</td><td>male</td><td>100</td><td>90</td><td>90</td><td>85</td></tr>
|
||
|
<tr><td>Student09</td><td>Mathematics</td><td>male</td><td>80</td><td>50</td><td>65</td><td>75</td></tr>
|
||
|
<tr><td>Student10</td><td>Languages</td><td>male</td><td>85</td><td>100</td><td>100</td><td>90</td></tr>
|
||
|
<tr><td>Student11</td><td>Languages</td><td>male</td><td>86</td><td>85</td><td>100</td><td>100</td></tr>
|
||
|
<tr><td>Student12</td><td>Mathematics</td><td>female</td><td>100</td><td>75</td><td>70</td><td>85</td></tr>
|
||
|
<tr><td>Student13</td><td>Languages</td><td>female</td><td>100</td><td>80</td><td>100</td><td>90</td></tr>
|
||
|
<tr><td>Student14</td><td>Languages</td><td>female</td><td>50</td><td>45</td><td>55</td><td>90</td></tr>
|
||
|
<tr><td>Student15</td><td>Languages</td><td>male</td><td>95</td><td>35</td><td>100</td><td>90</td></tr>
|
||
|
<tr><td>Student16</td><td>Languages</td><td>female</td><td>100</td><td>50</td><td>30</td><td>70</td></tr>
|
||
|
<tr><td>Student17</td><td>Languages</td><td>female</td><td>80</td><td>100</td><td>55</td><td>65</td></tr>
|
||
|
<tr><td>Student18</td><td>Mathematics</td><td>male</td><td>30</td><td>49</td><td>55</td><td>75</td></tr>
|
||
|
<tr><td>Student19</td><td>Languages</td><td>male</td><td>68</td><td>90</td><td>88</td><td>70</td></tr>
|
||
|
<tr><td>Student20</td><td>Mathematics</td><td>male</td><td>40</td><td>45</td><td>40</td><td>80</td></tr>
|
||
|
</tbody>
|
||
|
</table></div>
|
||
|
|
||
|
<h1>HTML</h1>
|
||
|
<div id="html">
|
||
|
<pre class="prettyprint lang-html"></pre>
|
||
|
</div>
|
||
|
|
||
|
<h1>Javascript</h1>
|
||
|
<div id="javascript">
|
||
|
<pre class="prettyprint lang-javascript"></pre>
|
||
|
</div>
|
||
|
|
||
|
<h1>Optional CSS</h1>
|
||
|
<div id="css">
|
||
|
<pre class="prettyprint lang-css"></pre>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
|
||
|
</body>
|
||
|
</html>
|