Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Added: Mar 6, 2019 12:23 PM
Views: 40
Tags: no tags
  1. /**
  2.  * Генерация html таблицы
  3.  * @param headers Array
  4.  * @param rows Array
  5.  * @param attr Object Table attributes
  6.  * @return string
  7.  */
  8. function generateTable(rows, headers = [], attr = {}) {
  9.     var attributes = [];
  10.     Object.keys(attr).forEach(function (key) {
  11.         attributes.push(key + '="' + attr[key] + '"');
  12.     });
  13.     var table = '<table ' + attributes.join(' ') + '>';
  14.  
  15.     // Headers
  16.     table += '<thead>';
  17.     headers.forEach(function(header) {
  18.         table += '<tr>';
  19.         if (Array.isArray(header)) {
  20.             header.forEach(function (col) {
  21.                 if (typeof col === 'object') {
  22.                     var attributes = [];
  23.                     var attr = col.attr;
  24.                     if (Object.keys(attr).length) {
  25.                         Object.keys(attr).forEach(function(key){
  26.                             attributes.push(key + '="' + attr[key] + '"');
  27.                         });
  28.                     }
  29.                     table += '<td ' + attributes.join(' ') + '><b>' + col.value.replace(/\"/g, '"') + '</b></td>';
  30.                 } else if (typeof col === 'string') {
  31.                     table += '<td><b>' + col.replace(/\"/g, '"') + '</b></td>';
  32.                 } else {
  33.                     console.warn('col not string|object!', col);
  34.                 }
  35.             });
  36.         } else if (typeof header === 'object') {
  37.  
  38.             table += '<td><b>' + header.value.replace(/\"/g, '"') + '</b></td>';
  39.         } else if (typeof header === 'string') {
  40.             table += '<td><b>' + header.replace(/\"/g, '"') + '</b></td>';
  41.         } else {
  42.             console.warn('col is not a (string|object)!', col);
  43.         }
  44.         table += '</tr>';
  45.     });
  46.     table += '</thead>';
  47.  
  48.     // Rows
  49.     table += '<tbody>';
  50.     rows.forEach(function(row) {
  51.         table += '<tr>';
  52.         if (Array.isArray(row)) {
  53.             row.forEach(function (col) {
  54.                 if (typeof col === 'object') {
  55.                     var attributes = [];
  56.                     var attr = col.attr;
  57.                     if (Object.keys(attr).length) {
  58.                         Object.keys(attr).forEach(function(key){
  59.                             attributes.push(key + '="' + attr[key] + '"');
  60.                         });
  61.                     }
  62.                     table += '<td ' + attributes.join(' ') + '>' + col.value.replace(/\"/g, '"') + '</td>';
  63.                 } else if (typeof col === 'string') {
  64.                     table += '<td>' + col.replace(/\"/g, '"') + '</td>';
  65.                 } else {
  66.                     console.warn('col not a (string|object)!', col);
  67.                 }
  68.             });
  69.  
  70.         } else if (typeof row === 'string') {
  71.             table += '<td>' + row.replace(/\"/g, '"') + '</td>';
  72.         } else {
  73.             console.warn('row is not string|object!', col);
  74.         }
  75.         table += '</tr>';
  76.     });
  77.     table += '</tbody>';
  78.  
  79.     table += '</table>';
  80.  
  81.     return table;
  82. }