{"remainingRequest":"/data/node_modules/babel-loader/lib/index.js!/data/node_modules/cli-table2/src/layout-manager.js","dependencies":[{"path":"/data/node_modules/cli-table2/src/layout-manager.js","mtime":1553611387012},{"path":"/data/.babelrc","mtime":1553611371556},{"path":"/data/node_modules/cache-loader/dist/cjs.js","mtime":1553611387012},{"path":"/data/node_modules/babel-loader/lib/index.js","mtime":1553611386992}],"contextDependencies":[],"result":["'use strict';\n\nvar _ = require('lodash');\nvar Cell = require('./cell');\nvar RowSpanCell = Cell.RowSpanCell;\nvar ColSpanCell = Cell.ColSpanCell;\n\n(function () {\n  function layoutTable(table) {\n    _.forEach(table, function (row, rowIndex) {\n      _.forEach(row, function (cell, columnIndex) {\n        cell.y = rowIndex;\n        cell.x = columnIndex;\n        for (var y = rowIndex; y >= 0; y--) {\n          var row2 = table[y];\n          var xMax = y === rowIndex ? columnIndex : row2.length;\n          for (var x = 0; x < xMax; x++) {\n            var cell2 = row2[x];\n            while (cellsConflict(cell, cell2)) {\n              cell.x++;\n            }\n          }\n        }\n      });\n    });\n  }\n\n  function maxWidth(table) {\n    var mw = 0;\n    _.forEach(table, function (row) {\n      _.forEach(row, function (cell) {\n        mw = Math.max(mw, cell.x + (cell.colSpan || 1));\n      });\n    });\n    return mw;\n  }\n\n  function maxHeight(table) {\n    return table.length;\n  }\n\n  function cellsConflict(cell1, cell2) {\n    var yMin1 = cell1.y;\n    var yMax1 = cell1.y - 1 + (cell1.rowSpan || 1);\n    var yMin2 = cell2.y;\n    var yMax2 = cell2.y - 1 + (cell2.rowSpan || 1);\n    var yConflict = !(yMin1 > yMax2 || yMin2 > yMax1);\n\n    var xMin1 = cell1.x;\n    var xMax1 = cell1.x - 1 + (cell1.colSpan || 1);\n    var xMin2 = cell2.x;\n    var xMax2 = cell2.x - 1 + (cell2.colSpan || 1);\n    var xConflict = !(xMin1 > xMax2 || xMin2 > xMax1);\n\n    return yConflict && xConflict;\n  }\n\n  function conflictExists(rows, x, y) {\n    var i_max = Math.min(rows.length - 1, y);\n    var cell = { x: x, y: y };\n    for (var i = 0; i <= i_max; i++) {\n      var row = rows[i];\n      for (var j = 0; j < row.length; j++) {\n        if (cellsConflict(cell, row[j])) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  function allBlank(rows, y, xMin, xMax) {\n    for (var x = xMin; x < xMax; x++) {\n      if (conflictExists(rows, x, y)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function addRowSpanCells(table) {\n    _.forEach(table, function (row, rowIndex) {\n      _.forEach(row, function (cell) {\n        for (var i = 1; i < cell.rowSpan; i++) {\n          var rowSpanCell = new RowSpanCell(cell);\n          rowSpanCell.x = cell.x;\n          rowSpanCell.y = cell.y + i;\n          rowSpanCell.colSpan = cell.colSpan;\n          insertCell(rowSpanCell, table[rowIndex + i]);\n        }\n      });\n    });\n  }\n\n  function addColSpanCells(cellRows) {\n    for (var rowIndex = cellRows.length - 1; rowIndex >= 0; rowIndex--) {\n      var cellColumns = cellRows[rowIndex];\n      for (var columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) {\n        var cell = cellColumns[columnIndex];\n        for (var k = 1; k < cell.colSpan; k++) {\n          var colSpanCell = new ColSpanCell();\n          colSpanCell.x = cell.x + k;\n          colSpanCell.y = cell.y;\n          cellColumns.splice(columnIndex + 1, 0, colSpanCell);\n        }\n      }\n    }\n  }\n\n  function insertCell(cell, row) {\n    var x = 0;\n    while (x < row.length && row[x].x < cell.x) {\n      x++;\n    }\n    row.splice(x, 0, cell);\n  }\n\n  function fillInTable(table) {\n    var h_max = maxHeight(table);\n    var w_max = maxWidth(table);\n    for (var y = 0; y < h_max; y++) {\n      for (var x = 0; x < w_max; x++) {\n        if (!conflictExists(table, x, y)) {\n          var opts = { x: x, y: y, colSpan: 1, rowSpan: 1 };\n          x++;\n          while (x < w_max && !conflictExists(table, x, y)) {\n            opts.colSpan++;\n            x++;\n          }\n          var y2 = y + 1;\n          while (y2 < h_max && allBlank(table, y2, opts.x, opts.x + opts.colSpan)) {\n            opts.rowSpan++;\n            y2++;\n          }\n\n          var cell = new Cell(opts);\n          cell.x = opts.x;\n          cell.y = opts.y;\n          insertCell(cell, table[y]);\n        }\n      }\n    }\n  }\n\n  function generateCells(rows) {\n    return _.map(rows, function (row) {\n      if (!_.isArray(row)) {\n        var key = Object.keys(row)[0];\n        row = row[key];\n        if (_.isArray(row)) {\n          row = row.slice();\n          row.unshift(key);\n        } else {\n          row = [key, row];\n        }\n      }\n      return _.map(row, function (cell) {\n        return new Cell(cell);\n      });\n    });\n  }\n\n  function makeTableLayout(rows) {\n    var cellRows = generateCells(rows);\n    layoutTable(cellRows);\n    fillInTable(cellRows);\n    addRowSpanCells(cellRows);\n    addColSpanCells(cellRows);\n    return cellRows;\n  }\n\n  module.exports = {\n    makeTableLayout: makeTableLayout,\n    layoutTable: layoutTable,\n    addRowSpanCells: addRowSpanCells,\n    maxWidth: maxWidth,\n    fillInTable: fillInTable,\n    computeWidths: makeComputeWidths('colSpan', 'desiredWidth', 'x', 1),\n    computeHeights: makeComputeWidths('rowSpan', 'desiredHeight', 'y', 1)\n  };\n})();\n\nfunction makeComputeWidths(colSpan, desiredWidth, x, forcedMin) {\n  return function (vals, table) {\n    var result = [];\n    var spanners = [];\n    _.forEach(table, function (row) {\n      _.forEach(row, function (cell) {\n        if ((cell[colSpan] || 1) > 1) {\n          spanners.push(cell);\n        } else {\n          result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin);\n        }\n      });\n    });\n\n    _.forEach(vals, function (val, index) {\n      if (_.isNumber(val)) {\n        result[index] = val;\n      }\n    });\n\n    //_.forEach(spanners,function(cell){\n    for (var k = spanners.length - 1; k >= 0; k--) {\n      var cell = spanners[k];\n      var span = cell[colSpan];\n      var col = cell[x];\n      var existingWidth = result[col];\n      var editableCols = _.isNumber(vals[col]) ? 0 : 1;\n      for (var i = 1; i < span; i++) {\n        existingWidth += 1 + result[col + i];\n        if (!_.isNumber(vals[col + i])) {\n          editableCols++;\n        }\n      }\n      if (cell[desiredWidth] > existingWidth) {\n        i = 0;\n        while (editableCols > 0 && cell[desiredWidth] > existingWidth) {\n          if (!_.isNumber(vals[col + i])) {\n            var dif = Math.round((cell[desiredWidth] - existingWidth) / editableCols);\n            existingWidth += dif;\n            result[col + i] += dif;\n            editableCols--;\n          }\n          i++;\n        }\n      }\n    }\n\n    _.extend(vals, result);\n    for (var j = 0; j < vals.length; j++) {\n      vals[j] = Math.max(forcedMin, vals[j] || 0);\n    }\n  };\n}",{"version":3,"sources":["node_modules/cli-table2/src/layout-manager.js"],"names":["_","require","Cell","RowSpanCell","ColSpanCell","layoutTable","table","forEach","row","rowIndex","cell","columnIndex","y","x","row2","xMax","length","cell2","cellsConflict","maxWidth","mw","Math","max","colSpan","maxHeight","cell1","yMin1","yMax1","rowSpan","yMin2","yMax2","yConflict","xMin1","xMax1","xMin2","xMax2","xConflict","conflictExists","rows","i_max","min","i","j","allBlank","xMin","addRowSpanCells","rowSpanCell","insertCell","addColSpanCells","cellRows","cellColumns","k","colSpanCell","splice","fillInTable","h_max","w_max","opts","y2","generateCells","map","isArray","key","Object","keys","slice","unshift","makeTableLayout","module","exports","computeWidths","makeComputeWidths","computeHeights","desiredWidth","forcedMin","vals","result","spanners","push","val","index","isNumber","span","col","existingWidth","editableCols","dif","round","extend"],"mappings":"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","file":"layout-manager.js","sourceRoot":"/data","sourcesContent":["var _ = require('lodash');\nvar Cell = require('./cell');\nvar RowSpanCell = Cell.RowSpanCell;\nvar ColSpanCell = Cell.ColSpanCell;\n\n(function(){\n  function layoutTable(table){\n    _.forEach(table,function(row,rowIndex){\n      _.forEach(row,function(cell,columnIndex){\n        cell.y = rowIndex;\n        cell.x = columnIndex;\n        for(var y = rowIndex; y >= 0; y--){\n          var row2 = table[y];\n          var xMax = (y === rowIndex) ? columnIndex : row2.length;\n          for(var x = 0; x < xMax; x++){\n            var cell2 = row2[x];\n            while(cellsConflict(cell,cell2)){\n              cell.x++;\n            }\n          }\n        }\n      });\n    });\n  }\n\n  function maxWidth(table) {\n    var mw = 0;\n    _.forEach(table, function (row) {\n      _.forEach(row, function (cell) {\n        mw = Math.max(mw,cell.x + (cell.colSpan || 1));\n      });\n    });\n    return mw;\n  }\n\n  function maxHeight(table){\n    return table.length;\n  }\n\n  function cellsConflict(cell1,cell2){\n    var yMin1 = cell1.y;\n    var yMax1 = cell1.y - 1 + (cell1.rowSpan || 1);\n    var yMin2 = cell2.y;\n    var yMax2 = cell2.y - 1 + (cell2.rowSpan || 1);\n    var yConflict = !(yMin1 > yMax2 || yMin2 > yMax1);\n\n    var xMin1= cell1.x;\n    var xMax1 = cell1.x - 1 + (cell1.colSpan || 1);\n    var xMin2= cell2.x;\n    var xMax2 = cell2.x - 1 + (cell2.colSpan || 1);\n    var xConflict = !(xMin1 > xMax2 || xMin2 > xMax1);\n\n    return yConflict && xConflict;\n  }\n\n  function conflictExists(rows,x,y){\n    var i_max = Math.min(rows.length-1,y);\n    var cell = {x:x,y:y};\n    for(var i = 0; i <= i_max; i++){\n      var row = rows[i];\n      for(var j = 0; j < row.length; j++){\n        if(cellsConflict(cell,row[j])){\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  function allBlank(rows,y,xMin,xMax){\n    for(var x = xMin; x < xMax; x++){\n      if(conflictExists(rows,x,y)){\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function addRowSpanCells(table){\n    _.forEach(table,function(row,rowIndex){\n      _.forEach(row,function(cell){\n        for(var i = 1; i < cell.rowSpan; i++){\n          var rowSpanCell = new RowSpanCell(cell);\n          rowSpanCell.x = cell.x;\n          rowSpanCell.y = cell.y + i;\n          rowSpanCell.colSpan = cell.colSpan;\n          insertCell(rowSpanCell,table[rowIndex+i]);\n        }\n      });\n    });\n  }\n\n  function addColSpanCells(cellRows){\n    for(var rowIndex = cellRows.length-1; rowIndex >= 0; rowIndex--) {\n      var cellColumns = cellRows[rowIndex];\n      for (var columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) {\n        var cell = cellColumns[columnIndex];\n        for (var k = 1; k < cell.colSpan; k++) {\n          var colSpanCell = new ColSpanCell();\n          colSpanCell.x = cell.x + k;\n          colSpanCell.y = cell.y;\n          cellColumns.splice(columnIndex + 1, 0, colSpanCell);\n        }\n      }\n    }\n  }\n\n  function insertCell(cell,row){\n    var x = 0;\n    while(x < row.length && (row[x].x < cell.x)) {\n      x++;\n    }\n    row.splice(x,0,cell);\n  }\n\n  function fillInTable(table){\n    var h_max = maxHeight(table);\n    var w_max = maxWidth(table);\n    for(var y = 0; y < h_max; y++){\n      for(var x = 0; x < w_max; x++){\n        if(!conflictExists(table,x,y)){\n          var opts = {x:x,y:y,colSpan:1,rowSpan:1};\n          x++;\n          while(x < w_max && !conflictExists(table,x,y)){\n            opts.colSpan++;\n            x++;\n          }\n          var y2 = y + 1;\n          while(y2 < h_max && allBlank(table,y2,opts.x,opts.x+opts.colSpan)){\n            opts.rowSpan++;\n            y2++;\n          }\n\n          var cell = new Cell(opts);\n          cell.x = opts.x;\n          cell.y = opts.y;\n          insertCell(cell,table[y]);\n        }\n      }\n    }\n  }\n\n  function generateCells(rows){\n    return _.map(rows,function(row){\n      if(!_.isArray(row)){\n        var key = Object.keys(row)[0];\n        row = row[key];\n        if(_.isArray(row)){\n          row = row.slice();\n          row.unshift(key);\n        }\n        else {\n          row = [key,row];\n        }\n      }\n      return _.map(row,function(cell){\n        return new Cell(cell);\n      });\n    });\n  }\n\n  function makeTableLayout(rows){\n    var cellRows = generateCells(rows);\n    layoutTable(cellRows);\n    fillInTable(cellRows);\n    addRowSpanCells(cellRows);\n    addColSpanCells(cellRows);\n    return cellRows;\n  }\n\n  module.exports = {\n    makeTableLayout: makeTableLayout,\n    layoutTable: layoutTable,\n    addRowSpanCells: addRowSpanCells,\n    maxWidth:maxWidth,\n    fillInTable:fillInTable,\n    computeWidths:makeComputeWidths('colSpan','desiredWidth','x',1),\n    computeHeights:makeComputeWidths('rowSpan','desiredHeight','y',1)\n  };\n})();\n\nfunction makeComputeWidths(colSpan,desiredWidth,x,forcedMin){\n  return function(vals,table){\n    var result = [];\n    var spanners = [];\n    _.forEach(table,function(row){\n      _.forEach(row,function(cell){\n        if((cell[colSpan] || 1) > 1){\n          spanners.push(cell);\n        }\n        else {\n          result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin);\n        }\n      });\n    });\n\n    _.forEach(vals,function(val,index){\n      if(_.isNumber(val)){\n        result[index] = val;\n      }\n    });\n\n    //_.forEach(spanners,function(cell){\n    for(var k = spanners.length - 1; k >=0; k--){\n      var cell = spanners[k];\n      var span = cell[colSpan];\n      var col = cell[x];\n      var existingWidth = result[col];\n      var editableCols = _.isNumber(vals[col]) ? 0 : 1;\n      for(var i = 1; i < span; i ++){\n        existingWidth += 1 + result[col + i];\n        if(!_.isNumber(vals[col + i])){\n          editableCols++;\n        }\n      }\n      if(cell[desiredWidth] > existingWidth){\n        i = 0;\n        while(editableCols > 0 && cell[desiredWidth] > existingWidth){\n          if(!_.isNumber(vals[col+i])){\n            var dif = Math.round( (cell[desiredWidth] - existingWidth) / editableCols );\n            existingWidth += dif;\n            result[col + i] += dif;\n            editableCols--;\n          }\n          i++;\n        }\n      }\n    }\n\n    _.extend(vals,result);\n    for(var j = 0; j < vals.length; j++){\n      vals[j] = Math.max(forcedMin, vals[j] || 0);\n    }\n  };\n}\n"]}]}