<!DOCTYPE html>
<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++;
          }
        });
      }
    }]
    
  });
  
  
 
  
  
} );
Output 300px

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers