<html>
<head>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<link href="https://nightly.datatables.net/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
<script src="https://nightly.datatables.net/js/jquery.dataTables.js"></script>
<script src="https://cdn.datatables.net/buttons/1.2.2/js/buttons.html5.js"></script>
<link href="https://cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.min.css" rel="stylesheet" type="text/css" />
<script src="https://cdn.datatables.net/buttons/1.5.1/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
<meta charset=utf-8 />
<title>DataTables - JS Bin</title>
</head>
<body>
<style>
.legend { list-style: none; }
.legend li { float:left; margin: 2px; }
.legend span { border: 1px solid #ccc; float:left; width: 12px; height: 12px; margin: 2px; }
.legend .original { background-color: Yellow; }
.legend .ahead { background-color: Green; }
.legend .behind { background-color: Orange; }
</style>
<header class='container-fluid page-header text-center'>
<h1 class='page-title'>OTIS LRT Installation Schedule</h1>
<ul class="legend">
<li><span class="original"></span>Original Date</li><br></br>
<li><span class="ahead"></span>Ahead of Original Date</li><br></br>
<li><span class="behind"></span>Behind of Original Date</li><br></br>
</ul>
</header>
<div class="container">
<!-- <button id="unhide">Unhide</button> -->
<table id="example" class="display nowrap" width="100%">
<thead>
<tr class=''>
<th class='text-center', rowspan="2">Location</th>
<th class='text-center', rowspan="2">Drawing ID</th>
<th class='text-center', colspan="2">Original Schedule Date 28-Feb-22</th>
<th class='text-center', colspan="2">Updated Schedule Date 07-Mar-22</th>
</tr>
<tr class=''>
<th class='text-center'>Start</th>
<th class='text-center'>Finish</th>
<th class='text-center'>Start1</th>
<th class='text-center'>Finish1</th>
</tr>
<tbody>
<tr>
<td>Avenue</td>
<td>ESC01</td>
<td>25 Jan 2022</td>
<td>10 Aug 2022</td>
<td>25 Jan 2022</td>
<td>10 Aug 2022</td>
</tr>
<tr>
<td>Avenue</td>
<td>ESC02</td>
<td>25 May 2022</td>
<td>05 Sep 2022</td>
<td>01 Jun 2022</td>
<td>12 Sep 2022</td>
</tr>
<tr>
<td>Eglinton</td>
<td>ESC01</td>
<td>14 March 2022</td>
<td>21 July 2022</td>
<td>09 March 2022</td>
<td>18 Jul 2022</td>
</tr>
<tr>
<td>Eglinton</td>
<td>ESC02</td>
<td>28 Apr 2022</td>
<td>19 Aug 2022</td>
<td>03 May 2022</td>
<td>19 Aug 2022</td>
</tr>
<tr>
<td>Eglinton</td>
<td>ESC03</td>
<td>28 Apr 2022</td>
<td>19 Aug 2022</td>
<td>03 May 2022</td>
<td>19 Aug 2022</td>
</tr>
<tr>
<td>Science Center</td>
<td>ESC01</td>
<td>25 Jan 2022</td>
<td>25 Jan 2022</td>
<td>01 Mar 2022</td>
<td>10 Mar 2022</td>
</tr>
<tr>
<td>Science Center</td>
<td>ESC02</td>
<td>25 Jan 2022</td>
<td>25 Jan 2022</td>
<td>01 Mar 2022</td>
<td>10 Mar 2022</td>
</tr>
<tr>
<td>Oakwood</td>
<td>ESC01</td>
<td>31 Mar 2022</td>
<td>22 Jul 2022</td>
<td>31 Mar 2022</td>
<td>22 Jul 2022</td>
</tr>
<tr>
<td>Oakwood</td>
<td>ESC02</td>
<td>31 Mar 2022</td>
<td>22 Jul 2022</td>
<td>02 Apr 2022</td>
<td>22 Jul 2022</td>
</tr>
<tr>
<td>Oakwood</td>
<td>ESC03</td>
<td>31 Mar 2022</td>
<td>22 Jul 2022</td>
<td>31 Mar 2022</td>
<td>22 Jul 2022</td>
</tr>
</thead>
</tbody>
</table>
</div>
</body>
</html>
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
$(document).ready( function () {
var table = $('#example').DataTable({
columnDefs: [
//{targets: 0, visible:false},
{
targets: 4, className: "my-class"
}
],
"rowCallback": function( row, data ) {
var originalStart = Date.parse(data[2]);
var OS = new Date(originalStart);
var Week1Start = Date.parse(data[4]);
var W1S = new Date(Week1Start);
if ( moment(W1S).isSame(OS) ) {
$('td.my-class', row).css( 'background', 'yellow' );
}
if ( W1S > OS ) {
$('td.my-class', row).css( 'background', 'Orange' );
}
if ( W1S < OS ) {
$('td.my-class', row).css( 'background', 'Green' );
}
},
buttons:[
{
extend: 'excelHtml5',
text: 'Excel',
customize: function ( xlsx ) {
//copy _createNode function from source
function _createNode(doc, nodeName, opts) {
var tempNode = doc.createElement(nodeName);
if (opts) {
if (opts.attr) {
$(tempNode).attr(opts.attr);
}
if (opts.children) {
$.each(opts.children, function (key, value) {
tempNode.appendChild(value);
});
}
if (opts.text !== null && opts.text !== undefined) {
tempNode.appendChild(doc.createTextNode(opts.text));
}
}
return tempNode;
}
var sheet = xlsx.xl.worksheets['sheet1.xml'];
var mergeCells = $('mergeCells', sheet);
mergeCells[0].children[0].remove(); // remove merge cell 1st row
var rows = $('row', sheet);
rows[0].children[0].remove(); // clear header cell
// create new cell
rows[0].appendChild(_createNode(sheet, 'c', {
attr: {
t: 'inlineStr',
r: 'C1', //address of new cell
s: 51 // center style - https://www.datatables.net/reference/button/excelHtml5
},
children: {
row: _createNode(sheet, 'is', {
children: {
row: _createNode(sheet, 't', {
text: 'Original Schedule Date 28-Feb-22'
})
}
})
}
}));
// create new cell
rows[0].appendChild(_createNode(sheet, 'c', {
attr: {
t: 'inlineStr',
r: 'E1', //address of new cell
s: 51 // center style - https://www.datatables.net/reference/button/excelHtml5
},
children: {
row: _createNode(sheet, 'is', {
children: {
row: _createNode(sheet, 't', {
text: 'Updated Schedule Date 07-Mar-22'
})
}
})
}
}));
// set new cell merged
mergeCells[0].appendChild(_createNode(sheet, 'mergeCell', {
attr: {
ref: 'C1:D1' // merge address
}
}));
mergeCells.attr('count', mergeCells.attr('count') + 1);
// set new cell merged
mergeCells[0].appendChild(_createNode(sheet, 'mergeCell', {
attr: {
ref: 'E1:F1' // merge address
}
}));
// Map used to map column index to Excel index
var excelMap = {
0: 'A',
1: 'B',
2: 'C',
3: 'D',
4: 'E',
5: 'F'
};
var count = 0;
var skippedHeader = 0;
$('row', sheet).each( function () {
var row = this;
if (skippedHeader > 2) {
//var colour = $('tbody tr:eq('+parseInt(count)+') td:eq(2)').css('background-color');
// Output first row
if (count === 0) {
console.log(this);
}
for (td=0; td<6; td++) {
// Output cell contents for first row
if (count === 0) {
console.log($('c[r^="' + excelMap[td] + '"]', row).text());
}
var colour = $(table.cell(':eq('+count+')',td).node()).css('background-color');
if (colour === 'rgb(255, 255, 0)' || colour === 'yellow') {
$('c[r^="' + excelMap[td] + '"]', row).attr( 's', '35' );
}
else if (colour === 'rgb(0, 128, 0)' || colour === 'green') {
$('c[r^="' + excelMap[td] + '"]', row).attr( 's', '40' );
}
else if (colour === 'rgb(255, 165, 0)' || colour === 'orange') {
$('c[r^="' + excelMap[td] + '"]', row).attr( 's', '45' );
}
}
count++;
}
else {
skippedHeader++;
}
});
}
}]
});
} );
You can jump to the latest bin by adding /latest
to your URL
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + [ | Indents selected lines |
ctrl + ] | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Clone Bin |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |