@eform/ng-formio-builder
Version:
The Angular.js form builder component.
52 lines (50 loc) • 1.92 kB
JavaScript
/**
* A directive for a table builder
*/
var _merge = require('lodash/merge');
module.exports = function() {
return {
restrict: 'E',
replace: true,
template: function() {
return '<div class="form-builder-table">' +
' <div class="form-group">' +
' <label for="label">Number of Rows</label>' +
' <input type="number" class="form-control" id="numRows" name="numRows" placeholder="Number of Rows" ng-model="component.numRows">' +
' </div>' +
' <div class="form-group">' +
' <label for="label">Number of Columns</label>' +
' <input type="number" class="form-control" id="numCols" name="numCols" placeholder="Number of Columns" ng-model="component.numCols">' +
' </div>' +
'</div>';
},
controller: [
'$scope',
function($scope) {
$scope.builder = true;
var changeTable = function() {
/*eslint-disable max-depth */
if ($scope.component.numRows && $scope.component.numCols) {
var tmpTable = [];
$scope.component.rows.splice($scope.component.numRows);
for (var row = 0; row < $scope.component.numRows; row++) {
if ($scope.component.rows[row]) {
$scope.component.rows[row].splice($scope.component.numCols);
}
for (var col = 0; col < $scope.component.numCols; col++) {
if (!tmpTable[row]) {
tmpTable[row] = [];
}
tmpTable[row][col] = {components:[]};
}
}
$scope.component.rows = _merge(tmpTable, $scope.component.rows);
/*eslint-enable max-depth */
}
};
$scope.$watch('component.numRows', changeTable);
$scope.$watch('component.numCols', changeTable);
}
]
};
};